簡體   English   中英

AVFrame到QImage內存泄漏

[英]AVFrame to QImage memory leak

我正在嘗試將視頻幀解碼為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類型,並且像

        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