mirror of
https://github.com/opencv/opencv.git
synced 2025-06-18 16:11:50 +08:00
videoio(ffmpeg): avoid memory leaks
This commit is contained in:
parent
13a995cc1d
commit
271f7df343
@ -2496,17 +2496,13 @@ double CvVideoWriter_FFMPEG::getProperty(int propId) const
|
|||||||
/// close video output stream and free associated memory
|
/// close video output stream and free associated memory
|
||||||
void CvVideoWriter_FFMPEG::close()
|
void CvVideoWriter_FFMPEG::close()
|
||||||
{
|
{
|
||||||
// nothing to do if already released
|
|
||||||
if ( !picture )
|
|
||||||
return;
|
|
||||||
|
|
||||||
/* no more frame to compress. The codec has a latency of a few
|
/* no more frame to compress. The codec has a latency of a few
|
||||||
frames if using B frames, so we get the last frames by
|
frames if using B frames, so we get the last frames by
|
||||||
passing the same picture again */
|
passing the same picture again */
|
||||||
// TODO -- do we need to account for latency here?
|
// TODO -- do we need to account for latency here?
|
||||||
|
|
||||||
/* write the trailer, if any */
|
/* write the trailer, if any */
|
||||||
if(ok && oc)
|
if (picture && ok && oc)
|
||||||
{
|
{
|
||||||
#if LIBAVFORMAT_BUILD < CALC_FFMPEG_VERSION(57, 0, 0)
|
#if LIBAVFORMAT_BUILD < CALC_FFMPEG_VERSION(57, 0, 0)
|
||||||
if (!(oc->oformat->flags & AVFMT_RAWPICTURE))
|
if (!(oc->oformat->flags & AVFMT_RAWPICTURE))
|
||||||
@ -2529,7 +2525,7 @@ void CvVideoWriter_FFMPEG::close()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// free pictures
|
// free pictures
|
||||||
if( context->pix_fmt != input_pix_fmt)
|
if (picture && context && context->pix_fmt != input_pix_fmt)
|
||||||
{
|
{
|
||||||
if(picture->data[0])
|
if(picture->data[0])
|
||||||
free(picture->data[0]);
|
free(picture->data[0]);
|
||||||
@ -2540,8 +2536,14 @@ void CvVideoWriter_FFMPEG::close()
|
|||||||
if (input_picture)
|
if (input_picture)
|
||||||
av_free(input_picture);
|
av_free(input_picture);
|
||||||
|
|
||||||
|
#ifdef CV_FFMPEG_CODECPAR
|
||||||
|
avcodec_free_context(&context);
|
||||||
|
#else
|
||||||
/* close codec */
|
/* close codec */
|
||||||
|
if (context) // fixed after https://github.com/FFmpeg/FFmpeg/commit/3e1f507f3e8f16b716aa115552d243b48ae809bd
|
||||||
avcodec_close(context);
|
avcodec_close(context);
|
||||||
|
context = NULL;
|
||||||
|
#endif
|
||||||
|
|
||||||
av_free(outbuf);
|
av_free(outbuf);
|
||||||
|
|
||||||
@ -2935,10 +2937,7 @@ bool CvVideoWriter_FFMPEG::open( const char * filename, int fourcc,
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CV_FFMPEG_CODECPAR
|
#ifdef CV_FFMPEG_CODECPAR
|
||||||
if (context)
|
|
||||||
{
|
|
||||||
avcodec_free_context(&context);
|
avcodec_free_context(&context);
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
context = icv_configure_video_stream_FFMPEG(oc, video_st, codec,
|
context = icv_configure_video_stream_FFMPEG(oc, video_st, codec,
|
||||||
width, height, (int) (bitrate + 0.5),
|
width, height, (int) (bitrate + 0.5),
|
||||||
|
Loading…
Reference in New Issue
Block a user