0
我想借助libavcodec轉碼視頻。 關於對大型視頻文件進行轉碼(小時或更長時間),我在avcodec_encode_video中收到巨大的內存泄漏。我試圖調試它,但不同的視頻文件不同的功能會產生泄漏,我對此有點困惑:)。這裏FFMPEG with QT memory leak與我有同樣的問題,但我不知道該人是如何解決它的。 QtFFmpegwrapper似乎做我一樣(或我錯過了一些東西)。ffmpeg(libavcodec)。內存泄漏avcodec_encode_video
我的方法較低。我在外面使用av_free和av_free_packet關注aFrame和aPacket。
int
Videocut::encode(
AVStream *anOutputStream,
AVFrame *aFrame,
AVPacket *aPacket
)
{
AVCodecContext *outputCodec = anOutputStream->codec;
if (!anOutputStream ||
!aFrame ||
!aPacket)
{
return 1;
/* NOTREACHED */
}
uint8_t * buffer = (uint8_t *)malloc(
sizeof(uint8_t) * _DefaultEncodeBufferSize
);
if (NULL == buffer) {
return 2;
/* NOTREACHED */
}
int packetSize = avcodec_encode_video(
outputCodec,
buffer,
_DefaultEncodeBufferSize,
aFrame
);
if (packetSize < 0) {
free(buffer);
return 1;
/* NOTREACHED */
}
aPacket->data = buffer;
aPacket->size = packetSize;
return 0;
}