洋洋喜洋洋 2023-06-19 17:39 采纳率: 42.9%
浏览 86

mpp硬解码显示Mppframe

使用ffmpeg+mpp进行硬解码显示,用FFMPEG读取AVPacket,再使用MPP进行硬解码,将AVPacket转换成MppPacket以后进行硬解码得到MppFrame,如何将MppFrame转换成AVFrame呢?或者得到MppFrame以后如何显示,有哪些方法呢?

  • 写回答

3条回答 默认 最新

  • MarkHan_ 2023-06-19 18:05
    关注
    
    SDL_Window* window = nullptr;
    SDL_Renderer* renderer = nullptr;
    SDL_Texture* texture = nullptr;
    
    // 初始化 SDL
    if (SDL_Init(SDL_INIT_VIDEO) < 0) {
        // 初始化失败,处理错误
    }
    
    // 创建窗口
    window = SDL_CreateWindow("MppFrame Display", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, avFrame->width, avFrame->height, SDL_WINDOW_SHOWN);
    if (!window) {
        // 窗口创建失败,处理错误
    }
    
    // 创建渲染器
    renderer = SDL_CreateRenderer(window, -1, 0);
    if (!renderer) {
        // 渲染器创建失败,处理错误
    }
    
    // 创建纹理
    texture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_IYUV, SDL_TEXTUREACCESS_STREAMING, avFrame->width, avFrame->height);
    if (!texture) {
        // 纹理创建失败,处理错误
    }
    
    // 更新纹理数据
    SDL_UpdateYUVTexture(texture, nullptr, avFrame->data[0], avFrame->linesize[0], avFrame->data[1], avFrame->linesize[1], avFrame->data[2], avFrame->linesize[2]);
    
    // 渲染纹理到窗口
    SDL_RenderClear(renderer);
    SDL_RenderCopy(renderer, texture, nullptr, nullptr);
    SDL_RenderPresent(renderer);
    
    // 等待窗口关闭事件
    SDL_Event event;
    while (SDL_WaitEvent(&event)) {
        if (event.type == SDL_QUIT) {
            break;
        }
    }
    
    // 释放资源
    SDL_DestroyTexture(texture);
    SDL_DestroyRenderer(renderer);
    SDL_DestroyWindow(window);
    SDL_Quit();
    
    
    评论

报告相同问题?

问题事件

  • 创建了问题 6月19日