Commit 2c9fa416 authored by Michael Niedermayer's avatar Michael Niedermayer

ffmpeg: add -bitexact flag to simplify enabling bitexact mode in (de)muxer and (de/en)coder

Signed-off-by: 's avatarMichael Niedermayer <michael@niedermayer.cc>
parent 4a9d32ba
...@@ -1250,6 +1250,8 @@ or as a floating point number (e.g. 0.04166, 2.0833e-5) ...@@ -1250,6 +1250,8 @@ or as a floating point number (e.g. 0.04166, 2.0833e-5)
Default value is 0. Default value is 0.
@item -bitexact (@emph{input/output})
Enable bitexact mode for (de)muxer and (de/en)coder
@item -shortest (@emph{output}) @item -shortest (@emph{output})
Finish encoding when the shortest input stream ends. Finish encoding when the shortest input stream ends.
@item -dts_delta_threshold @item -dts_delta_threshold
......
...@@ -160,6 +160,7 @@ typedef struct OptionsContext { ...@@ -160,6 +160,7 @@ typedef struct OptionsContext {
float mux_preload; float mux_preload;
float mux_max_delay; float mux_max_delay;
int shortest; int shortest;
int bitexact;
int video_disable; int video_disable;
int audio_disable; int audio_disable;
......
...@@ -782,6 +782,9 @@ static void add_input_streams(OptionsContext *o, AVFormatContext *ic) ...@@ -782,6 +782,9 @@ static void add_input_streams(OptionsContext *o, AVFormatContext *ic)
exit_program(1); exit_program(1);
} }
if (o->bitexact)
ist->dec_ctx->flags |= AV_CODEC_FLAG_BITEXACT;
switch (par->codec_type) { switch (par->codec_type) {
case AVMEDIA_TYPE_VIDEO: case AVMEDIA_TYPE_VIDEO:
if(!ist->dec) if(!ist->dec)
...@@ -1045,6 +1048,8 @@ static int open_input_file(OptionsContext *o, const char *filename) ...@@ -1045,6 +1048,8 @@ static int open_input_file(OptionsContext *o, const char *filename)
av_format_set_data_codec(ic, find_codec_or_die(data_codec_name, AVMEDIA_TYPE_DATA, 0)); av_format_set_data_codec(ic, find_codec_or_die(data_codec_name, AVMEDIA_TYPE_DATA, 0));
ic->flags |= AVFMT_FLAG_NONBLOCK; ic->flags |= AVFMT_FLAG_NONBLOCK;
if (o->bitexact)
ic->flags |= AVFMT_FLAG_BITEXACT;
ic->interrupt_callback = int_cb; ic->interrupt_callback = int_cb;
if (!av_dict_get(o->g->format_opts, "scan_all_pmts", NULL, AV_DICT_MATCH_CASE)) { if (!av_dict_get(o->g->format_opts, "scan_all_pmts", NULL, AV_DICT_MATCH_CASE)) {
...@@ -1366,6 +1371,10 @@ static OutputStream *new_output_stream(OptionsContext *o, AVFormatContext *oc, e ...@@ -1366,6 +1371,10 @@ static OutputStream *new_output_stream(OptionsContext *o, AVFormatContext *oc, e
ost->encoder_opts = filter_codec_opts(o->g->codec_opts, AV_CODEC_ID_NONE, oc, st, NULL); ost->encoder_opts = filter_codec_opts(o->g->codec_opts, AV_CODEC_ID_NONE, oc, st, NULL);
} }
if (o->bitexact)
ost->enc_ctx->flags |= AV_CODEC_FLAG_BITEXACT;
MATCH_PER_STREAM_OPT(time_bases, str, time_base, oc, st); MATCH_PER_STREAM_OPT(time_bases, str, time_base, oc, st);
if (time_base) { if (time_base) {
AVRational q; AVRational q;
...@@ -2144,6 +2153,10 @@ static int open_output_file(OptionsContext *o, const char *filename) ...@@ -2144,6 +2153,10 @@ static int open_output_file(OptionsContext *o, const char *filename)
const AVOption *o = av_opt_find(oc, "fflags", NULL, 0, 0); const AVOption *o = av_opt_find(oc, "fflags", NULL, 0, 0);
av_opt_eval_flags(oc, o, e->value, &format_flags); av_opt_eval_flags(oc, o, e->value, &format_flags);
} }
if (o->bitexact) {
format_flags |= AVFMT_FLAG_BITEXACT;
oc->flags |= AVFMT_FLAG_BITEXACT;
}
/* create streams for all unlabeled output pads */ /* create streams for all unlabeled output pads */
for (i = 0; i < nb_filtergraphs; i++) { for (i = 0; i < nb_filtergraphs; i++) {
...@@ -3467,6 +3480,9 @@ const OptionDef options[] = { ...@@ -3467,6 +3480,9 @@ const OptionDef options[] = {
{ "shortest", OPT_BOOL | OPT_EXPERT | OPT_OFFSET | { "shortest", OPT_BOOL | OPT_EXPERT | OPT_OFFSET |
OPT_OUTPUT, { .off = OFFSET(shortest) }, OPT_OUTPUT, { .off = OFFSET(shortest) },
"finish encoding within shortest input" }, "finish encoding within shortest input" },
{ "bitexact", OPT_BOOL | OPT_EXPERT | OPT_OFFSET |
OPT_OUTPUT | OPT_INPUT, { .off = OFFSET(bitexact) },
"bitexact mode" },
{ "apad", OPT_STRING | HAS_ARG | OPT_SPEC | { "apad", OPT_STRING | HAS_ARG | OPT_SPEC |
OPT_OUTPUT, { .off = OFFSET(apad) }, OPT_OUTPUT, { .off = OFFSET(apad) },
"audio pad", "" }, "audio pad", "" },
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment