|
|
|
@ -2996,6 +2996,25 @@ int av_read_pause(AVFormatContext *s) |
|
|
|
|
return AVERROR(ENOSYS); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void ff_free_stream(AVFormatContext *s, AVStream *st){ |
|
|
|
|
av_assert0(s->nb_streams>0); |
|
|
|
|
av_assert0(s->streams[ s->nb_streams-1 ] == st); |
|
|
|
|
|
|
|
|
|
if (st->parser) { |
|
|
|
|
av_parser_close(st->parser); |
|
|
|
|
} |
|
|
|
|
if (st->attached_pic.data) |
|
|
|
|
av_free_packet(&st->attached_pic); |
|
|
|
|
av_dict_free(&st->metadata); |
|
|
|
|
av_freep(&st->index_entries); |
|
|
|
|
av_freep(&st->codec->extradata); |
|
|
|
|
av_freep(&st->codec->subtitle_header); |
|
|
|
|
av_freep(&st->codec); |
|
|
|
|
av_freep(&st->priv_data); |
|
|
|
|
av_freep(&st->info); |
|
|
|
|
av_freep(&s->streams[ --s->nb_streams ]); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void avformat_free_context(AVFormatContext *s) |
|
|
|
|
{ |
|
|
|
|
int i; |
|
|
|
@ -3005,22 +3024,8 @@ void avformat_free_context(AVFormatContext *s) |
|
|
|
|
if (s->iformat && s->iformat->priv_class && s->priv_data) |
|
|
|
|
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]; |
|
|
|
|
if (st->parser) { |
|
|
|
|
av_parser_close(st->parser); |
|
|
|
|
} |
|
|
|
|
if (st->attached_pic.data) |
|
|
|
|
av_free_packet(&st->attached_pic); |
|
|
|
|
av_dict_free(&st->metadata); |
|
|
|
|
av_freep(&st->index_entries); |
|
|
|
|
av_freep(&st->codec->extradata); |
|
|
|
|
av_freep(&st->codec->subtitle_header); |
|
|
|
|
av_freep(&st->codec); |
|
|
|
|
av_freep(&st->priv_data); |
|
|
|
|
av_freep(&st->info); |
|
|
|
|
av_freep(&st); |
|
|
|
|
for(i=s->nb_streams-1; i>=0; i--) { |
|
|
|
|
ff_free_stream(s, s->streams[i]); |
|
|
|
|
} |
|
|
|
|
for(i=s->nb_programs-1; i>=0; i--) { |
|
|
|
|
av_dict_free(&s->programs[i]->metadata); |
|
|
|
|