mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-11-26 19:01:44 +02:00
lavf,lavc: free avoptions in a generic way.
It's simpler and less error-prone. Fixes some memleaks along the way.
This commit is contained in:
parent
b39b06233d
commit
367732832f
@ -783,6 +783,9 @@ av_cold int avcodec_close(AVCodecContext *avctx)
|
||||
avctx->codec->close(avctx);
|
||||
avcodec_default_free_buffers(avctx);
|
||||
avctx->coded_frame = NULL;
|
||||
if (avctx->codec->priv_class)
|
||||
av_opt_free(avctx->priv_data);
|
||||
av_opt_free(avctx);
|
||||
av_freep(&avctx->priv_data);
|
||||
if(avctx->codec && avctx->codec->encode)
|
||||
av_freep(&avctx->extradata);
|
||||
|
@ -320,8 +320,6 @@ static int grab_read_header(AVFormatContext *s1, AVFormatParameters *ap)
|
||||
last_frame_time = 0;
|
||||
|
||||
out:
|
||||
av_freep(&s->video_size);
|
||||
av_freep(&s->framerate);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -103,7 +103,6 @@ av_cold static int fbdev_read_header(AVFormatContext *avctx,
|
||||
int ret, flags = O_RDONLY;
|
||||
|
||||
ret = av_parse_video_rate(&fbdev->fps, fbdev->framerate);
|
||||
av_freep(&fbdev->framerate);
|
||||
if (ret < 0) {
|
||||
av_log(avctx, AV_LOG_ERROR, "Couldn't parse framerate.\n");
|
||||
return ret;
|
||||
|
@ -195,9 +195,6 @@ static inline int dc1394_read_common(AVFormatContext *c, AVFormatParameters *ap,
|
||||
*select_fps = fps;
|
||||
*select_fmt = fmt;
|
||||
out:
|
||||
av_freep(&dc1394->video_size);
|
||||
av_freep(&dc1394->pixel_format);
|
||||
av_freep(&dc1394->framerate);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -684,10 +684,6 @@ static int v4l2_read_header(AVFormatContext *s1, AVFormatParameters *ap)
|
||||
st->codec->bit_rate = s->frame_size * 1/av_q2d(st->codec->time_base) * 8;
|
||||
|
||||
out:
|
||||
av_freep(&s->video_size);
|
||||
av_freep(&s->pixel_format);
|
||||
av_freep(&s->standard);
|
||||
av_freep(&s->framerate);
|
||||
return res;
|
||||
}
|
||||
|
||||
|
@ -234,9 +234,6 @@ static int vfw_read_close(AVFormatContext *s)
|
||||
pktl = next;
|
||||
}
|
||||
|
||||
av_freep(&ctx->video_size);
|
||||
av_freep(&ctx->framerate);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -258,8 +258,6 @@ x11grab_read_header(AVFormatContext *s1, AVFormatParameters *ap)
|
||||
st->codec->bit_rate = x11grab->frame_size * 1/av_q2d(x11grab->time_base) * 8;
|
||||
|
||||
out:
|
||||
av_freep(&x11grab->video_size);
|
||||
av_freep(&x11grab->framerate);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -102,9 +102,6 @@ int ff_raw_read_header(AVFormatContext *s, AVFormatParameters *ap)
|
||||
st->codec->height = height;
|
||||
st->codec->pix_fmt = pix_fmt;
|
||||
fail:
|
||||
av_freep(&s1->video_size);
|
||||
av_freep(&s1->pixel_format);
|
||||
av_freep(&s1->framerate);
|
||||
return ret;
|
||||
}
|
||||
default:
|
||||
@ -182,7 +179,6 @@ int ff_raw_video_read_header(AVFormatContext *s,
|
||||
av_set_pts_info(st, 64, 1, 1200000);
|
||||
|
||||
fail:
|
||||
av_freep(&s1->framerate);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -121,7 +121,6 @@ static int read_header(AVFormatContext *avctx,
|
||||
}
|
||||
|
||||
fail:
|
||||
av_freep(&s->video_size);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -2549,6 +2549,10 @@ void avformat_free_context(AVFormatContext *s)
|
||||
int i;
|
||||
AVStream *st;
|
||||
|
||||
av_opt_free(s);
|
||||
if (s->iformat && s->iformat->priv_class)
|
||||
av_opt_free(s->priv_data);
|
||||
|
||||
for(i=0;i<s->nb_streams;i++) {
|
||||
/* free all data in a stream component */
|
||||
st = s->streams[i];
|
||||
@ -2578,7 +2582,6 @@ void avformat_free_context(AVFormatContext *s)
|
||||
}
|
||||
av_freep(&s->chapters);
|
||||
av_metadata_free(&s->metadata);
|
||||
av_freep(&s->key);
|
||||
av_freep(&s->streams);
|
||||
av_free(s);
|
||||
}
|
||||
@ -3094,6 +3097,8 @@ fail:
|
||||
av_freep(&s->streams[i]->priv_data);
|
||||
av_freep(&s->streams[i]->index_entries);
|
||||
}
|
||||
if (s->iformat && s->iformat->priv_class)
|
||||
av_opt_free(s->priv_data);
|
||||
av_freep(&s->priv_data);
|
||||
return ret;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user