[FFmpeg-devel] [PATCH 1/2] avformat/mux: Warn if the muxers bitexact flag is not set but it looks as if the user wants it set

Andreas Cadhalpun andreas.cadhalpun at googlemail.com
Tue Aug 25 00:03:59 CEST 2015


On 24.08.2015 02:22, Michael Niedermayer wrote:
> is below diff better: ?
> iam quite unsure how to word this
> 
> using the exact same system as FF_API_OLD_FILTER_OPTS is tricky as
> there is a semantic difference
> "codec->flags & AV_CODEC_FLAG_BITEXACT" is not deprecated as in
> FF_API_OLD_FILTER_OPTS
> Currently storing a bitexact stream in a container makes the
> container bitexact. with FF_API_LAVF_BITEXACT==0 this would no longer
> be the case and the user would have to explicitly switch the muxer
> into bitexact mode in addition to the encoder to get a bitexact
> result.
> 
> --- a/libavformat/mux.c
> +++ b/libavformat/mux.c
> @@ -250,10 +250,17 @@ static int init_muxer(AVFormatContext *s, AVDictionary **options)
>          (ret = av_opt_set_dict2(s->priv_data, &tmp, AV_OPT_SEARCH_CHILDREN)) < 0)
>          goto fail;
> 
> +    if (s->nb_streams && s->streams[0]->codec->flags & AV_CODEC_FLAG_BITEXACT) {
> +        if (!(s->flags & AVFMT_FLAG_BITEXACT))
> +            av_log(s, AV_LOG_WARNING, "Muxer bitexact flag is not set, please set AVFormatContext.flags |= AVFMT_FLAG_BITEXACT.\n"
> +#if FF_API_LAVF_BITEXACT
> +                                      "This will become mandatory with future API cleanup\n"
> +#endif
> +            );

I'd prefer something like:
    if (s->nb_streams && s->streams[0]->codec->flags & AV_CODEC_FLAG_BITEXACT) {
        if (!(s->flags & AVFMT_FLAG_BITEXACT)) {
#if FF_API_LAVF_BITEXACT
            av_log(s, AV_LOG_WARNING,
                   "Setting the AVFormatContext to bitexact mode, because "
                   "the AVCodecContext is in that mode. This behavior will "
                   "change in the future. To keep the current behavior, set "
                   "AVFormatContext.flags |= AVFMT_FLAG_BITEXACT.\n");
            s->flags |= AVFMT_FLAG_BITEXACT;
#else
            av_log(s, AV_LOG_WARNING,
                   "The AVFormatContext is not in set to bitexact mode, only "
                   "the AVCodecContext. If this is not intended, set "
                   "AVFormatContext.flags |= AVFMT_FLAG_BITEXACT.\n");
#endif
        }
    }

Best regards,
Andreas


More information about the ffmpeg-devel mailing list