2016-06-28 12 views
1

ビデオフレームをQImageにデコードして表示しようとしていますが、AVFrameをQImageに変換する以下のコードでメモリリークが発生します。以下のコードを無効にすると、アプリケーションはうまく動作しますが、RAMや時間をかけてRAMを増やすことができます。AVFrame to QImageメモリリーク

ここ
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); 

答えて

2

使用av_frame_free()、ないav_free()frameRGBを解放するようにそれをint型。

関連する問題