简体   繁体   English

AVFrame到QImage内存泄漏

[英]AVFrame to QImage memory leak

I am trying to decode the video frame to QImage and display it, but the below code which convert AVFrame to QImage cause memory leak. 我正在尝试将视频帧解码为QImage并显示它,但是以下将AVFrame转换为QImage的代码导致内存泄漏。 When I disable the below code the application works fine, but enabling cause to use more RAM and incenses by time. 当我禁用以下代码时,应用程序可以正常运行,但是会导致按时间使用更多的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);

Here decodedQimage is QImage type and int it like 在这里, decodedQimage是QImage类型,并且像

        decodedQimage = QImage( outputwidth, outputheight, QImage::Format_RGB888 );

使用av_frame_free()而非av_free()释放frameRGB

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM