diff options
author | Anton Khirnov <anton@khirnov.net> | 2016-05-21 11:37:33 +0200 |
---|---|---|
committer | Diego Biurrun <diego@biurrun.de> | 2016-05-22 20:22:42 +0200 |
commit | 35c858066840352d6d43385bbc728467c5150974 (patch) | |
tree | b7aef06bb8f03bc3ee9f89ae26771c5a3b72164b /avconv.c | |
parent | 3399a26d3f57d462e839c0ee51223ae9aca20852 (diff) | |
download | ffmpeg-35c858066840352d6d43385bbc728467c5150974.tar.gz |
avconv: stop using AVStream.codec
It is now only used by the av_parser_change() call during streamcopy, so
allocate a special AVCodecContext instance for this case. This instance
should go away when the new parser API is finished.
Signed-off-by: Diego Biurrun <diego@biurrun.de>
Diffstat (limited to 'avconv.c')
-rw-r--r-- | avconv.c | 21 |
1 files changed, 8 insertions, 13 deletions
@@ -184,6 +184,7 @@ static void avconv_cleanup(int ret) av_frame_free(&ost->filtered_frame); av_parser_close(ost->parser); + avcodec_free_context(&ost->parser_avctx); av_freep(&ost->forced_keyframes); av_freep(&ost->avfilter); @@ -1101,7 +1102,7 @@ static void do_streamcopy(InputStream *ist, OutputStream *ost, const AVPacket *p && ost->enc_ctx->codec_id != AV_CODEC_ID_MPEG2VIDEO && ost->enc_ctx->codec_id != AV_CODEC_ID_VC1 ) { - if (av_parser_change(ost->parser, ost->st->codec, + if (av_parser_change(ost->parser, ost->parser_avctx, &opkt.data, &opkt.size, pkt->data, pkt->size, pkt->flags & AV_PKT_FLAG_KEY)) { @@ -1709,14 +1710,6 @@ static int init_output_stream(OutputStream *ost, char *error, int error_len) "Error initializing the output stream codec context.\n"); exit_program(1); } - /* - * FIXME: this is only so that the bitstream filters and parsers (that still - * work with a codec context) get the parameter values. - * This should go away with the new BSF/parser API. - */ - ret = avcodec_copy_context(ost->st->codec, ost->enc_ctx); - if (ret < 0) - return ret; if (ost->enc_ctx->nb_coded_side_data) { int i; @@ -1747,11 +1740,10 @@ static int init_output_stream(OutputStream *ost, char *error, int error_len) return ret; /* - * FIXME: this is only so that the bitstream filters and parsers (that still - * work with a codec context) get the parameter values. - * This should go away with the new BSF/parser API. + * FIXME: will the codec context used by the parser during streamcopy + * This should go away with the new parser API. */ - ret = avcodec_parameters_to_context(ost->st->codec, ost->st->codecpar); + ret = avcodec_parameters_to_context(ost->parser_avctx, ost->st->codecpar); if (ret < 0) return ret; } @@ -1913,6 +1905,9 @@ static int transcode_init(void) } ost->parser = av_parser_init(par_dst->codec_id); + ost->parser_avctx = avcodec_alloc_context3(NULL); + if (!ost->parser_avctx) + return AVERROR(ENOMEM); switch (par_dst->codec_type) { case AVMEDIA_TYPE_AUDIO: |