Merge commit 'aeda1121c91395d1f0d434bc7f227423aa2ff97d'
authorHendrik Leppkes <h.leppkes@gmail.com>
Tue, 10 Nov 2015 17:42:08 +0000 (18:42 +0100)
committerHendrik Leppkes <h.leppkes@gmail.com>
Tue, 10 Nov 2015 17:42:08 +0000 (18:42 +0100)
* commit 'aeda1121c91395d1f0d434bc7f227423aa2ff97d':
  lavf: factor out freeing an AVStream

Merged-by: Hendrik Leppkes <h.leppkes@gmail.com>
1  2 
libavformat/utils.c

index bab8118296043e1f23c4aadd1c38a8b7968fa75d,734f83f1cd85541fe3a5a9eb9394cf81bfb24b01..e55b29479be5ec37e05d60f77759d427ff61c0e8
@@@ -3651,34 -2442,34 +3651,34 @@@ int av_read_pause(AVFormatContext *s
      return AVERROR(ENOSYS);
  }
  
 -static void free_stream(AVStream **pst)
 -{
 -    AVStream *st = *pst;
 -    int i;
 -
 -    if (!st)
 -        return;
 +void ff_free_stream(AVFormatContext *s, AVStream *st) {
 +    int j;
 +    av_assert0(s->nb_streams>0);
 +    av_assert0(s->streams[ s->nb_streams - 1 ] == st);
  
 -    for (i = 0; i < st->nb_side_data; i++)
 -        av_freep(&st->side_data[i].data);
 +    for (j = 0; j < st->nb_side_data; j++)
 +        av_freep(&st->side_data[j].data);
      av_freep(&st->side_data);
-     st->nb_side_data = 0;
  
-     if (st->parser) {
+     if (st->parser)
          av_parser_close(st->parser);
-     }
      if (st->attached_pic.data)
          av_packet_unref(&st->attached_pic);
      av_dict_free(&st->metadata);
      av_freep(&st->probe_data.buf);
 -    av_free(st->index_entries);
 -    av_free(st->codec->extradata);
 -    av_free(st->codec->subtitle_header);
 -    av_free(st->codec);
 -    av_free(st->priv_data);
 -    av_free(st->info);
 -
 -    av_freep(pst);
 +    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);
 +    if (st->info)
 +        av_freep(&st->info->duration_error);
 +    av_freep(&st->info);
 +    av_freep(&st->recommended_encoder_configuration);
 +    av_freep(&st->priv_pts);
 +    av_freep(&s->streams[ --s->nb_streams ]);
  }
  
  void avformat_free_context(AVFormatContext *s)
      av_opt_free(s);
      if (s->iformat && s->iformat->priv_class && s->priv_data)
          av_opt_free(s->priv_data);
-     for (i = s->nb_streams - 1; i >= 0; i--) {
 +    if (s->oformat && s->oformat->priv_class && s->priv_data)
 +        av_opt_free(s->priv_data);
 +
-     }
++    for (i = s->nb_streams - 1; i >= 0; i--)
 +        ff_free_stream(s, s->streams[i]);
 -    for (i = 0; i < s->nb_streams; i++)
 -        free_stream(&s->streams[i]);
      for (i = s->nb_programs - 1; i >= 0; i--) {
          av_dict_free(&s->programs[i]->metadata);
          av_freep(&s->programs[i]->stream_index);