【发布时间】:2012-04-13 09:27:09
【问题描述】:
我正在尝试借助 libavcodec 对视频进行转码。 在对大视频文件(小时或更长时间)进行转码时,我在 avcodec_encode_video 中出现了巨大的内存泄漏。我试图调试它,但是对于不同的视频文件,不同的功能会产生泄漏,我对此有点困惑:)。这里FFMPEG with QT memory leak 与我遇到的问题相同,但我不知道那个人是如何解决的。 QtFFmpegwrapper 似乎和我做的一样(或者我错过了一些东西)。
我的方法比较低。我用 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;
}
【问题讨论】:
标签: c++ memory-leaks ffmpeg libavcodec