QTのメモリリークとFFMPEG
-
25-09-2019 - |
質問
私は、コードクリップを見てみましょう。
QByteArray ba;
ba.resize(500000);
int encsize = avcodec_encode_video(context, (uint8_t*)ba.data(), 500000, frame.unownedPointer());
フレームからのデータを符号化し、バッファにデータを入れている私は何をやっているQByteArrayで指摘しました。私はavcodec_encode_video行をコメントアウトした場合、私のメモリリークが消えます。 unownedPointer()は次のようになります:
if (this->frame != NULL) return this->frame;
this->frame = avcodec_alloc_frame();
uchar *data = this->img.bits();
frame->data[0] = (uint8_t *)data;
frame->data[1] = (uint8_t *)data + 1;
frame->data[2] = (uint8_t *)data + 2;
frame->linesize[0] = width * lineSize(this->fmt);
frame->linesize[1] = width * lineSize(this->fmt);
frame->linesize[2] = width * lineSize(this->fmt);
return this->frame;
this->フレームがAVFrame *である、およびthis-> IMGはQImageのです。
はおよそ30fpsの符号化率では、私は約50メガバイト/秒のメモリリークを取得しています。だから私は、問題は何ができるかわかりません。 avcodec_encode_video()はそれか何かを解放決してメモリをコピーしていないとされているかのように思えます。任意のアイデア?
avcodec_encode_videoがYUV420Pに私のRGB24のデータを変換している場合は、データを修正されるだろうが)frame.unownedPointer(で指さ?
解決
それはefficentlyこれを実行するために保存したコンテキストを使用して QtFFmpegwrapper のコードを見てみましょう、またはあなただけの直接QtFFMpegwrapperを使用することができます。
所属していません StackOverflow