使用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();评论 打赏 举报解决 1无用 1