ここでは FFmpeg ビデオ エンコンディングの例に従っていますが、ダミーの YUV420P フレームがいくつか作成され、カメラから BGR 画像が既にキャプチャされています。
代わりに BGR 画像を使用する方法frame->data[]
とそれらを埋める方法がわからないので、H264 ビデオをエンコードできます。frame->linesize[]
編集:
ロナルドの答えの後に、次のコードがあります(カメラが送信する新しい写真ごとに呼び出されます):
.............
AVFrame *bgrFrame = av_frame_alloc();
bgrFrame->width = originalBGRImage.cols;
bgrFrame->height = originalBGRImage.rows;
ret = av_image_alloc(bgrFrame->data, bgrFrame->linesize, bgrFrame->width, bgrFrame->height, AV_PIX_FMT_BGR24, 32);
/////////////////////////////////////
// This works and prevents memory leak....if I remove it, it consumes all the RAM....but I can't free this memory here, since I will use it later...
av_freep(&bgrFrame->data[0]);
av_frame_free(&bgrFrame);
return;
/////////////////////////////////////
ret = av_image_fill_pointers(bgrFrame->data, AV_PIX_FMT_BGR24, bgrFrame->height, originalBGRImage.data, bgrFrame->linesize);
/////////////////////////////////////
// Here is where I am done using the memory so I will want to free it...but this same code crashes the program.
av_freep(&bgrFrame->data[0]);
av_frame_free(&bgrFrame);
return;
/////////////////////////////////////
したがってav_freep(&bgrFrame->data[0]);
、コードの最後にある を削除すると、メモリリークが発生します...しかし、そのままにしておくとクラッシュします....では、使用済みメモリを解放する正しい方法は何ですか?