美文网首页
SDL显示YUV

SDL显示YUV

作者: lieon | 来源:发表于2021-07-15 10:43 被阅读0次

SDL显示YUV步骤

  • 初始化SDL子系统 SDL_Init(SDL_INIT_VIDEO)
  • 创建窗口 SDL_CreateWindow
  • 创建渲染上下文 SDL_CreateRenderer
  • 创建纹理 SDL_CreateTexture
  • 将YUV的像素数据填充到texture SDL_UpdateTexture
  • 设置绘制颜色 SDL_SetRenderDrawColor
  • 用绘制颜色清除渲染目标 SDL_RenderClear
  • 拷贝纹理数据到渲染目标 SDL_RenderCopy
  • 更新所有的渲染操作到屏幕上 SDL_RenderPresent
  • 命令行显示YUV
    ffplay -video_size 512x512 -pixel_format yuvj420p in.yuv
    

#import "ShowYUV.h"
#import <SDL.h>

#define END(judge, func) \
    if (judge) { \
        NSLog(@"%s error %s", #func, SDL_GetError()); \
        goto end; \
    }

#define IMG_W 512
#define IMG_H 512

@implementation ShowYUV


+ (void)initialize {
    SDL_SetMainReady();
}


- (void)show {
    // 渲染窗口
    SDL_Window *window = nullptr;
    // 渲染上下文
    SDL_Renderer *renderer = nullptr;
    // 纹理
    SDL_Texture *texture = nullptr;
    NSString *fileName = [[NSBundle mainBundle]pathForResource:@"in.yuv" ofType:nil];
    NSData *yuv = [NSData dataWithContentsOfFile:fileName];
    // 初始化子系统
    END(SDL_Init(SDL_INIT_VIDEO), SDL_Init);
    // 创建窗口
    window = SDL_CreateWindow("YUV",
                              SDL_WINDOWPOS_UNDEFINED,
                              SDL_WINDOWPOS_UNDEFINED,
                              IMG_W, IMG_H, SDL_WINDOW_SHOWN);
    END(!window, SDL_CreateWindow);
    // 创建渲染上下文
    renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
    if (!renderer) {
        renderer = SDL_CreateRenderer(window, -1, 0);
        END(!renderer, SDL_CreateRenderer);
    }
    // 创建纹理
    texture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_IYUV, SDL_TEXTUREACCESS_STREAMING, IMG_W, IMG_H);
    END(!texture, SDL_CreateTexture);
    // 将YUV的像素数据填充到texture
    END(SDL_UpdateTexture(texture, nullptr, yuv.bytes, IMG_W), SDL_UpdateTexture);
    // 设置绘制颜色
    END(SDL_SetRenderDrawColor(renderer, 0, 0, 0, SDL_ALPHA_OPAQUE), SDL_SetRenderDrawColor);
    // 用绘制颜色清除渲染目标
    END(SDL_RenderClear(renderer), SDL_RenderClear);
    // 拷贝纹理数据到渲染目标
    END(SDL_RenderCopy(renderer, texture, nullptr, nullptr), SDL_RenderCopy);
    // 更新所有的渲染操作到屏幕上
    SDL_RenderPresent(renderer);
    while (1) {
        SDL_Event event;
        SDL_WaitEvent(&event);
        switch (event.type) {
            case SDL_QUIT:
                goto end;
        }
    }
end:
    NSLog(@"endl");
    SDL_DestroyTexture(texture);
    SDL_DestroyRenderer(renderer);
    SDL_DestroyWindow(window);
    SDL_Quit();
}
@end

相关文章

  • SDL显示YUV

    SDL显示YUV步骤 初始化SDL子系统 SDL_Init(SDL_INIT_VIDEO) 创建窗口 SDL_Cr...

  • 使用SDL显示YUV

    SDL 显示 YUV 流程: 1、初始化 Video 子系统;2、创建窗口;3、创建渲染上下文;4、创建纹理;5、...

  • 23_FFmpeg像素格式转换

    简介 前面使用 SDL 显示了一张YUV图片以及YUV视频。接下来使用Qt中的QImage来实现一个简单的 YUV...

  • SDL彻底理解纹理渲染

    SDL渲染基本原理 SDL纹理相关API 1、SDL_CreateTexture() format:YUV,RGB...

  • 基本信息查询

    -pix_fmts rgb yuv 支持的设备 avfoundation 虚拟设备 lavfi sdl sdl2...

  • SDL2常用代码

    SDL2渲染YUV420P数据 提取YUV420P:ffmpeg -i a.mp4 -pix_fmt yuv420...

  • 结合ffmpeg用SDL播放YUV实现简易播放器

    通过解码之后得到的yuv视频数据我们直接可以进行播放,本篇使用SDL来实现视频播放。 SDL环境配置:https:...

  • 音视频-像素格式转换

    在音视频-SDL播放YUV(下)[/p/1a067860639b]成功播放yuv裸流数据之后, 下载的是对应格式的...

  • sdl 绘制 yuv视频

    sdl提供跨平台的视频绘制,功能很强大,还一直保持更新,很不错,下面时相关介绍。 https://blog.csd...

  • 音视频-SDL播放YUV(下)

    在 音视频-SDL播放YUV(上)[https://www.jianshu.com/p/1f4844cc6c65]...

网友评论

      本文标题:SDL显示YUV

      本文链接:https://www.haomeiwen.com/subject/bihypltx.html