|
@@ -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:
|