libavformat: Use avcodec_copy_context for chained muxers
[ffmpeg.git] / libavformat / movenchint.c
index 2aa0f17..6a9df07 100644 (file)
@@ -57,10 +57,7 @@ int ff_mov_init_hinting(AVFormatContext *s, int index, int src_index)
     track->rtp_ctx->streams[0]->sample_aspect_ratio =
                         src_st->sample_aspect_ratio;
 
-    /* Remove the allocated codec context, link to the original one
-     * instead, to give the rtp muxer access to codec parameters. */
-    av_free(track->rtp_ctx->streams[0]->codec);
-    track->rtp_ctx->streams[0]->codec = src_st->codec;
+    avcodec_copy_context(track->rtp_ctx->streams[0]->codec, src_st->codec);
 
     if ((ret = url_open_dyn_packet_buf(&track->rtp_ctx->pb,
                                        RTP_MAX_PACKET_SIZE)) < 0)
@@ -86,6 +83,8 @@ fail:
     }
     if (track->rtp_ctx && track->rtp_ctx->streams[0]) {
         av_metadata_free(&track->rtp_ctx->streams[0]->metadata);
+        av_free(track->rtp_ctx->streams[0]->codec->extradata);
+        av_free(track->rtp_ctx->streams[0]->codec);
         av_free(track->rtp_ctx->streams[0]->info);
         av_free(track->rtp_ctx->streams[0]);
     }
@@ -491,6 +490,8 @@ void ff_mov_close_hinting(MOVTrack *track) {
     }
     av_metadata_free(&rtp_ctx->streams[0]->metadata);
     av_metadata_free(&rtp_ctx->metadata);
+    av_free(rtp_ctx->streams[0]->codec->extradata);
+    av_free(rtp_ctx->streams[0]->codec);
     av_free(rtp_ctx->streams[0]->info);
     av_free(rtp_ctx->streams[0]);
     av_freep(&rtp_ctx);