This doesn't access avcodec_opts, so it will work with the new options
passing system.
---
ffmpeg.c | 52 ++++++++++++++++++++++++++--------------------------
1 files changed, 26 insertions(+), 26 deletions(-)
diff --git a/ffmpeg.c b/ffmpeg.c
index c4272c4..a14cc5b 100644
--- a/ffmpeg.c
+++ b/ffmpeg.c
@@ -508,6 +508,23 @@ static void assert_avoptions(AVDictionary *m)
}
}
+static void assert_codec_experimental(AVCodecContext *c, int encoder)
+{
+ const char *codec_string = encoder ? "encoder" : "decoder";
+ AVCodec *codec;
+ if (c->codec->capabilities & CODEC_CAP_EXPERIMENTAL &&
+ c->strict_std_compliance > FF_COMPLIANCE_EXPERIMENTAL) {
+ av_log(NULL, AV_LOG_ERROR, "%s '%s' is experimental and might produce
bad "
+ "results.\nAdd '-strict experimental' if you want to use
it.\n",
+ codec_string, c->codec->name);
+ codec = encoder ? avcodec_find_encoder(codec->id) :
avcodec_find_decoder(codec->id);
+ if (!(codec->capabilities & CODEC_CAP_EXPERIMENTAL))
+ av_log(NULL, AV_LOG_ERROR, "Or use the non experimental %s
'%s'.\n",
+ codec_string, codec->name);
+ ffmpeg_exit(1);
+ }
+}
+
/* similar to ff_dynarray_add() and av_fast_realloc() */
static void *grow_array(void *array, int elem_size, int *size, int new_size)
{
@@ -2325,6 +2342,7 @@ static int transcode(AVFormatContext **output_files,
ret = AVERROR(EINVAL);
goto dump_format;
}
+ assert_codec_experimental(ost->st->codec, 1);
extra_size += ost->st->codec->extradata_size;
}
}
@@ -2359,6 +2377,7 @@ static int transcode(AVFormatContext **output_files,
ret = AVERROR(EINVAL);
goto dump_format;
}
+ assert_codec_experimental(ist->st->codec, 0);
//if (ist->st->codec->codec_type == AVMEDIA_TYPE_VIDEO)
// ist->st->codec->flags |= CODEC_FLAG_REPEAT_FIELD;
}
@@ -3115,7 +3134,7 @@ static int opt_input_ts_offset(const char *opt, const
char *arg)
return 0;
}
-static enum CodecID find_codec_or_die(const char *name, int type, int encoder,
int strict)
+static enum CodecID find_codec_or_die(const char *name, int type, int encoder)
{
const char *codec_string = encoder ? "encoder" : "decoder";
AVCodec *codec;
@@ -3133,19 +3152,6 @@ static enum CodecID find_codec_or_die(const char *name,
int type, int encoder, i
fprintf(stderr, "Invalid %s type '%s'\n", codec_string, name);
ffmpeg_exit(1);
}
- if(codec->capabilities & CODEC_CAP_EXPERIMENTAL &&
- strict > FF_COMPLIANCE_EXPERIMENTAL) {
- fprintf(stderr, "%s '%s' is experimental and might produce bad "
- "results.\nAdd '-strict experimental' if you want to use
it.\n",
- codec_string, codec->name);
- codec = encoder ?
- avcodec_find_encoder(codec->id) :
- avcodec_find_decoder(codec->id);
- if (!(codec->capabilities & CODEC_CAP_EXPERIMENTAL))
- fprintf(stderr, "Or use the non experimental %s '%s'.\n",
- codec_string, codec->name);
- ffmpeg_exit(1);
- }
return codec->id;
}
@@ -3197,14 +3203,11 @@ static int opt_input_file(const char *opt, const char
*filename)
av_dict_set(&format_opts, "pixel_format",
av_get_pix_fmt_name(frame_pix_fmt), 0);
ic->video_codec_id =
- find_codec_or_die(video_codec_name , AVMEDIA_TYPE_VIDEO , 0,
- avcodec_opts[AVMEDIA_TYPE_VIDEO
]->strict_std_compliance);
+ find_codec_or_die(video_codec_name , AVMEDIA_TYPE_VIDEO , 0);
ic->audio_codec_id =
- find_codec_or_die(audio_codec_name , AVMEDIA_TYPE_AUDIO , 0,
- avcodec_opts[AVMEDIA_TYPE_AUDIO
]->strict_std_compliance);
+ find_codec_or_die(audio_codec_name , AVMEDIA_TYPE_AUDIO , 0);
ic->subtitle_codec_id=
- find_codec_or_die(subtitle_codec_name, AVMEDIA_TYPE_SUBTITLE, 0,
-
avcodec_opts[AVMEDIA_TYPE_SUBTITLE]->strict_std_compliance);
+ find_codec_or_die(subtitle_codec_name, AVMEDIA_TYPE_SUBTITLE, 0);
ic->flags |= AVFMT_FLAG_NONBLOCK;
/* open the input file with generic libav function */
@@ -3432,8 +3435,7 @@ static void new_video_stream(AVFormatContext *oc, int
file_idx)
if(!video_stream_copy){
if (video_codec_name) {
- codec_id = find_codec_or_die(video_codec_name, AVMEDIA_TYPE_VIDEO,
1,
-
avcodec_opts[AVMEDIA_TYPE_VIDEO]->strict_std_compliance);
+ codec_id = find_codec_or_die(video_codec_name, AVMEDIA_TYPE_VIDEO,
1);
codec = avcodec_find_encoder_by_name(video_codec_name);
} else {
codec_id = av_guess_codec(oc->oformat, NULL, oc->filename, NULL,
AVMEDIA_TYPE_VIDEO);
@@ -3564,8 +3566,7 @@ static void new_audio_stream(AVFormatContext *oc, int
file_idx)
if(!audio_stream_copy){
if (audio_codec_name) {
- codec_id = find_codec_or_die(audio_codec_name, AVMEDIA_TYPE_AUDIO,
1,
-
avcodec_opts[AVMEDIA_TYPE_AUDIO]->strict_std_compliance);
+ codec_id = find_codec_or_die(audio_codec_name, AVMEDIA_TYPE_AUDIO,
1);
codec = avcodec_find_encoder_by_name(audio_codec_name);
} else {
codec_id = av_guess_codec(oc->oformat, NULL, oc->filename, NULL,
AVMEDIA_TYPE_AUDIO);
@@ -3658,8 +3659,7 @@ static void new_subtitle_stream(AVFormatContext *oc, int
file_idx)
if(!subtitle_stream_copy){
if (subtitle_codec_name) {
- codec_id = find_codec_or_die(subtitle_codec_name,
AVMEDIA_TYPE_SUBTITLE, 1,
-
avcodec_opts[AVMEDIA_TYPE_SUBTITLE]->strict_std_compliance);
+ codec_id = find_codec_or_die(subtitle_codec_name,
AVMEDIA_TYPE_SUBTITLE, 1);
codec = avcodec_find_encoder_by_name(subtitle_codec_name);
} else {
codec_id = av_guess_codec(oc->oformat, NULL, oc->filename, NULL,
AVMEDIA_TYPE_SUBTITLE);
--
1.7.5.3
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel