[FFmpeg-devel] [RFC/PATCH 1/2] lavf: add a flag for experimental (de)muxers

Andreas Rheinhardt andreas.rheinhardt at outlook.com
Mon Jan 3 06:56:54 EET 2022


Lynne:
> 2 Jan 2022, 18:46 by anton at khirnov.net:
> 
>> ---
>>  doc/APIchanges         | 3 +++
>>  libavformat/avformat.h | 7 +++++++
>>  libavformat/format.c   | 2 ++
>>  libavformat/version.h  | 2 +-
>>  4 files changed, 13 insertions(+), 1 deletion(-)
>>
>> diff --git a/doc/APIchanges b/doc/APIchanges
>> index 670a59329e..29c235630e 100644
>> --- a/doc/APIchanges
>> +++ b/doc/APIchanges
>> @@ -14,6 +14,9 @@ libavutil:     2021-04-27
>>  
>>  API changes, most recent first:
>>  
>> +2022-01-xx - xxxxxxxxxx - lavf 59.13.100 - avformat.h
>> +  Add AVFMT_EXPERIMENTAL flag.
>> +
>>  2021-12-xx - xxxxxxxxxx - lavu 57.13.100 - hwcontext_videotoolbox.h
>>  Add av_vt_pixbuf_set_attachments
>>  
>> diff --git a/libavformat/avformat.h b/libavformat/avformat.h
>> index 70b36d7682..6ce367e854 100644
>> --- a/libavformat/avformat.h
>> +++ b/libavformat/avformat.h
>> @@ -463,6 +463,13 @@ typedef struct AVProbeData {
>>  /// Demuxer will use avio_open, no opened file should be provided by the caller.
>>  #define AVFMT_NOFILE        0x0001
>>  #define AVFMT_NEEDNUMBER    0x0002 /**< Needs '%d' in filename. */
>> +/**
>> + * The muxer/demuxer is experimental and should be used with caution.
>> + *
>> + * - demuxers: will not be selected automatically by probing, must be specified
>> + *             explicitly.
>> + */
>> +#define AVFMT_EXPERIMENTAL  0x0004
>>  #define AVFMT_SHOW_IDS      0x0008 /**< Show format stream IDs numbers. */
>>  #define AVFMT_GLOBALHEADER  0x0040 /**< Format wants global header. */
>>  #define AVFMT_NOTIMESTAMPS  0x0080 /**< Format does not need / have any timestamps. */
>> diff --git a/libavformat/format.c b/libavformat/format.c
>> index 387627009e..52b85c16a2 100644
>> --- a/libavformat/format.c
>> +++ b/libavformat/format.c
>> @@ -158,6 +158,8 @@ const AVInputFormat *av_probe_input_format3(const AVProbeData *pd,
>>  }
>>  
>>  while ((fmt1 = av_demuxer_iterate(&i))) {
>> +        if (fmt1->flags & AVFMT_EXPERIMENTAL)
>> +            continue;
>>  if (!is_opened == !(fmt1->flags & AVFMT_NOFILE) && strcmp(fmt1->name, "image2"))
>>  continue;
>>  score = 0;
>> diff --git a/libavformat/version.h b/libavformat/version.h
>> index 917b9ffa5d..29dcce352b 100644
>> --- a/libavformat/version.h
>> +++ b/libavformat/version.h
>> @@ -32,7 +32,7 @@
>>  // Major bumping may affect Ticket5467, 5421, 5451(compatibility with Chromium)
>>  // Also please add any ticket numbers that you believe might be affected here
>>  #define LIBAVFORMAT_VERSION_MAJOR  59
>> -#define LIBAVFORMAT_VERSION_MINOR  12
>> +#define LIBAVFORMAT_VERSION_MINOR  13
>>  #define LIBAVFORMAT_VERSION_MICRO 100
>>  
>>  #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \
>>
> 
> You should add it in libavformat/options_table.h too.

This is not a new AVFMT_FLAG_* value, but an AVFMT_* value (akin to a
codec cap).

> Apart from that, it looks fine. Should we move muxers previously
> behind strict_std_compliance > experimental like scd behind
> this flag or would that be an API breakage?

What (de)muxers (scd is a demuxer) would that be besides scd?

- Andreas


More information about the ffmpeg-devel mailing list