我正在尝试将视频帧解码为 QImage 并显示它,但是下面将 AVFrame 转换为 QImage 的代码导致内存泄漏。当我禁用下面的代码时,应用程序工作正常,但会导致使用更多的 RAM 和时间。
AVFrame *frameRGB = av_frame_alloc();
int width = frame->width, height = frame->height;
avpicture_alloc( ( AVPicture *) frameRGB, AV_PIX_FMT_RGB24, width,height);
struct SwsContext *convert_ctx=NULL;
enum PixelFormat src_pixfmt = (enum PixelFormat)frame->format;
enum PixelFormat dst_pixfmt = PIX_FMT_RGB24;
convert_ctx = sws_getContext(width, height, src_pixfmt, width, height, dst_pixfmt,
SWS_FAST_BILINEAR, NULL, NULL, NULL);
sws_scale(convert_ctx,frame->data, frame->linesize,0,height, frameRGB->data, frameRGB->linesize);
//decodedQimage = QImage( width, height, QImage::Format_RGB888 );
for( int y = 0; y < height; ++y ){
memcpy( decodedQimage.scanLine(y), frameRGB->data[0]+y * frameRGB->linesize[0], frameRGB->linesize[0] );
}
av_free(frameRGB);
sws_freeContext(convert_ctx);
这里 decodedQimage
是 QImage 类型并且像 int 一样
decodedQimage = QImage( outputwidth, outputheight, QImage::Format_RGB888 );
最佳答案
使用av_frame_free()
,而不是 av_free()
,以释放 frameRGB
。
关于c++ - AVFrame 到 QImage 内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38069014/