[vlc-commits] [Git][videolan/vlc][3.0.x] 15 commits: avcommon: rename LIBAVUTIL_VERSION_CHECK to LIBAV_UTIL_VERSION_CHECK

Jean-Baptiste Kempf (@jbk) gitlab at videolan.org
Sun Nov 10 11:30:37 UTC 2024



Jean-Baptiste Kempf pushed to branch 3.0.x at VideoLAN / VLC


Commits:
8fef8373 by Steve Lhomme at 2024-11-10T11:05:41+00:00
avcommon: rename LIBAVUTIL_VERSION_CHECK to LIBAV_UTIL_VERSION_CHECK

The LIBAVUTIL_VERSION_CHECK form will be for checks also done in 4.0.

No functional changes.

- - - - -
5efaca39 by Steve Lhomme at 2024-11-10T11:05:41+00:00
avcommon: use a specific macro to check the FFmpeg libavutil version

This macro doesn't check for libav which is assumed to not have to relevant
code. This is the same macro name used in VLC 4.0.

- - - - -
554a97ab by Steve Lhomme at 2024-11-10T11:05:41+00:00
avcommon: rename LIBAVFORMAT_VERSION_CHECK to LIBAV_FORMAT_VERSION_CHECK

The LIBAVFORMAT_VERSION_CHECK form will be for checks also done in 4.0.

No functional changes.

- - - - -
d406a312 by Steve Lhomme at 2024-11-10T11:05:41+00:00
avcommon: use a specific macro to check the FFmpeg libavformat version

This macro doesn't check for libav which is assumed to not have to relevant
code. This is the same macro name used in VLC 4.0.

- - - - -
930ddc0d by Steve Lhomme at 2024-11-10T11:05:41+00:00
avcommon: rename LIBAVCODEC_VERSION_CHECK to LIBAV_CODEC_VERSION_CHECK

The LIBAVCODEC_VERSION_CHECK form will be for checks also done in 4.0.

No functional changes.

- - - - -
ce084152 by Steve Lhomme at 2024-11-10T11:05:41+00:00
avcommon: use a specific macro to check the FFmpeg libavcodec version

This macro doesn't check for libav which is assumed to not have to relevant
code. This is the same macro name used in VLC 4.0.

- - - - -
534564b2 by Zhao Zhili at 2024-11-10T11:05:41+00:00
codec: avcodec: check open codec return value

(cherry picked from commit 21ab6be22e7c1831cebf023fd53bd7ffbfad22f6) (edited)
edited:
- on 3.0 DecodeBlock returns a picture_t, not an error code

- - - - -
b2b54eb1 by Steve Lhomme at 2024-11-10T11:05:41+00:00
avcodec: use ARRAY_SIZE instead of custom code

(cherry picked from commit 28c80ee47e6cdf961f501eed9d4837956b38afd1)

- - - - -
763dc3eb by Ilkka Ollakka at 2024-11-10T11:05:41+00:00
avcodec/audio: make channel mapping array 0 terminated

Also change pi_channels_src to be only AOUT_CHAN_MAX instead of same
size as mapping array.

(cherry picked from commit 0ff86bf8a28a080340f600cb8561815fc43e3b4a) (rebased)
rebased:
- the code around is slightly different

- - - - -
d1fb5c6c by François Cartegnie at 2024-11-10T11:05:41+00:00
codec: avcodec: fix ch_layout requirement

refs #28667

(cherry picked from commit 41778535dcae8b145ebfaa0392de281e470a91bf) (edited)
edited:
- on 3.0 the audio check was still using a LIBAVCODEC_VERSION_CHECK check
- the mux/demux checks were already there with different spaces

- - - - -
0bcb306b by Steve Lhomme at 2024-11-10T11:05:41+00:00
ffmpeg: fix libavutil version check for av_channel_layout_default()

It was added in c41899a3770cb4510e15b223fa34d129305b1589 which
was libavutil 57.23.100 at the time but the minor version was not updated in
that commit so we check 57.24.100.

The same check applies for av_channel_layout_copy() added in the same commit.

This is part of FFmpeg 5.1.

https://github.com/FFmpeg/FFmpeg/commit/086a8048061bf9fb4c63943f6962db48175f655c
(cherry picked from commit 195f0c98599b55950c49a62f98d9d3495be310df) (rebased)
rebased:
- the code around is slightly different

- - - - -
38f9638e by Steve Lhomme at 2024-11-10T11:05:41+00:00
ffmpeg: fix libavcodec version check for AVCodecParameters.ch_layout

It was added in 276c06726fbd2f784d51189870bd834e9284812f which
was libavcodec 59.23.100 at the time but the minor version was not updated in
that commit so we check 59.24.100.

This is part of FFmpeg 5.1.

It was erroneously removed in a55ec32ab3760d9edb6f05481cd3a981aa42878d.

https://github.com/FFmpeg/FFmpeg/commit/276c06726fbd2f784d51189870bd834e9284812f

Co-authored-by: François Cartegnie <fcvlcdev at free.fr>
(cherry picked from commit 597bdb8e0784101b5f412feba3309558ad5b8862)

- - - - -
0939d55b by Steve Lhomme at 2024-11-10T11:05:41+00:00
avcodec: fix libavcodec version check for AVCodecContext.ch_layout

It was added in 548aeb93834b8425c86d1ce60fddc1d41805724d which
was libavcodec 59.23.100 at the time but the minor version was not updated in
that commit so we check 59.24.100.

This is part of FFmpeg 5.1.

https://github.com/FFmpeg/FFmpeg/commit/548aeb93834b8425c86d1ce60fddc1d41805724d

Co-authored-by: François Cartegnie <fcvlcdev at free.fr>
(cherry picked from commit 8fd918b8787b8d077decf1a2b955ab0c7b964bf3) (rebased)
rebased:
- on 3.0 fmt_in is not a pointer

- - - - -
e5072b34 by Steve Lhomme at 2024-11-10T11:05:41+00:00
ffmpeg: fix libavutil version check for AVFrame.ch_layout

It was added in db6efa1815e217ed76f39aee8b15ee5c64698537 which
was libavutil 57.23.100 at the time but the minor version was not updated in
that commit so we check 57.24.100.

This is part of FFmpeg 5.1.

https://github.com/FFmpeg/FFmpeg/commit/db6efa1815e217ed76f39aee8b15ee5c64698537
(cherry picked from commit f237155887f049f8befef2fdfadae7b60f697b0d)

- - - - -
1713be55 by François Cartegnie at 2024-11-10T11:05:41+00:00
avcodec: add a define to test for AVCodecContext.ch_layout availability

Co-authored-by: Steve Lhomme <robux4 at ycbcr.xyz>
(cherry picked from commit 3abf93735df97cc2c96e11028b76067547c27eb7) (rebased)
rebased:
- on 3.0 the fmt_in is not a pointer
- the code around is slightly different due to the use of API_CHANNEL_LAYOUT

- - - - -


12 changed files:

- modules/codec/avcodec/audio.c
- modules/codec/avcodec/avcommon.h
- modules/codec/avcodec/avcommon_compat.h
- modules/codec/avcodec/chroma.c
- modules/codec/avcodec/d3d11va.c
- modules/codec/avcodec/directx_va.c
- modules/codec/avcodec/encoder.c
- modules/codec/avcodec/fourcc.c
- modules/codec/avcodec/va.c
- modules/codec/avcodec/video.c
- modules/demux/avformat/demux.c
- modules/demux/avformat/mux.c


Changes:

=====================================
modules/codec/avcodec/audio.c
=====================================
@@ -41,7 +41,9 @@
 #include <libavcodec/avcodec.h>
 #include <libavutil/mem.h>
 
-#define API_CHANNEL_LAYOUT (LIBAVUTIL_VERSION_CHECK( 52, 2, 6, 0, 100))
+#define API_CHANNEL_LAYOUT_STRUCT (LIBAVCODEC_VERSION_CHECK(59, 24, 100)) // AVCodecContext.ch_layout
+
+#define API_CHANNEL_LAYOUT (LIBAV_UTIL_VERSION_CHECK( 52, 2, 6, 0, 100))
 
 #if API_CHANNEL_LAYOUT
 # include <libavutil/channel_layout.h>
@@ -142,7 +144,7 @@ static int OpenAudioCodec( decoder_t *p_dec )
     }
 
     ctx->sample_rate = p_dec->fmt_in.audio.i_rate;
-#if LIBAVCODEC_VERSION_CHECK(59, 999, 999, 24, 100)
+#if API_CHANNEL_LAYOUT_STRUCT && LIBAVUTIL_VERSION_CHECK(57, 24, 100)
     av_channel_layout_default( &ctx->ch_layout, p_dec->fmt_in.audio.i_channels );
 #else
     ctx->channels = p_dec->fmt_in.audio.i_channels;
@@ -309,7 +311,12 @@ static int DecodeBlock( decoder_t *p_dec, block_t **pp_block )
      && !avcodec_is_open( ctx ) )
     {
         InitDecoderConfig( p_dec, ctx );
-        OpenAudioCodec( p_dec );
+        if( OpenAudioCodec( p_dec ) < 0 )
+        {
+            if( pp_block != NULL && *pp_block != NULL )
+                block_Release( *pp_block );
+            return VLCDEC_ECRITICAL;
+        }
     }
 
     if( !avcodec_is_open( ctx ) )
@@ -402,7 +409,7 @@ static int DecodeBlock( decoder_t *p_dec, block_t **pp_block )
         ret = avcodec_receive_frame( ctx, frame );
         if( ret == 0 )
         {
-#if LIBAVCODEC_VERSION_CHECK(59, 999, 999, 24, 100)
+#if LIBAVUTIL_VERSION_CHECK(57, 24, 100)
             int channels = frame->ch_layout.nb_channels;
 #else
             int channels = ctx->channels;
@@ -553,7 +560,7 @@ vlc_fourcc_t GetVlcAudioFormat( int fmt )
         [AV_SAMPLE_FMT_FLTP]  = VLC_CODEC_FL32,
         [AV_SAMPLE_FMT_DBLP]  = VLC_CODEC_FL64,
     };
-    if( (sizeof(fcc) / sizeof(fcc[0])) > (unsigned)fmt )
+    if( ARRAY_SIZE(fcc) > (unsigned)fmt )
         return fcc[fmt];
     return VLC_CODEC_S16N;
 }
@@ -580,6 +587,7 @@ static const uint64_t pi_channels_map[][2] =
     { AV_CH_TOP_BACK_RIGHT,    0 },
     { AV_CH_STEREO_LEFT,       0 },
     { AV_CH_STEREO_RIGHT,      0 },
+    { 0, 0 },
 };
 
 static void SetupOutputFormat( decoder_t *p_dec, bool b_trust )
@@ -592,7 +600,7 @@ static void SetupOutputFormat( decoder_t *p_dec, bool b_trust )
     p_dec->fmt_out.audio.i_rate = p_sys->p_context->sample_rate;
 
     /* */
-#if LIBAVCODEC_VERSION_CHECK(59, 999, 999, 24, 100)
+#if API_CHANNEL_LAYOUT_STRUCT
     if( p_sys->i_previous_channels == p_sys->p_context->ch_layout.nb_channels &&
         p_sys->i_previous_layout == p_sys->p_context->ch_layout.u.mask )
         return;
@@ -612,12 +620,11 @@ static void SetupOutputFormat( decoder_t *p_dec, bool b_trust )
     }
 #endif
 
-    const unsigned i_order_max = sizeof(pi_channels_map)/sizeof(*pi_channels_map);
-    uint32_t pi_order_src[i_order_max];
+    uint32_t pi_order_src[AOUT_CHAN_MAX] = { 0 };
 
     int i_channels_src = 0, channel_count;
     uint64_t channel_layout_mask;
-#if LIBAVCODEC_VERSION_CHECK(59, 999, 999, 24, 100)
+#if API_CHANNEL_LAYOUT_STRUCT
     channel_layout_mask = p_sys->p_context->ch_layout.u.mask;
     channel_count = p_sys->p_context->ch_layout.nb_channels;
 #elif API_CHANNEL_LAYOUT
@@ -632,7 +639,7 @@ static void SetupOutputFormat( decoder_t *p_dec, bool b_trust )
 
     if( channel_layout_mask )
     {
-        for( unsigned i = 0; i < i_order_max
+        for( unsigned i = 0; pi_channels_map[i][0]
          && i_channels_src < channel_count; i++ )
         {
             if( channel_layout_mask & pi_channels_map[i][0] )


=====================================
modules/codec/avcodec/avcommon.h
=====================================
@@ -106,7 +106,7 @@ static inline void vlc_init_avformat(vlc_object_t *obj)
 
     avformat_network_init();
 
-#if (LIBAVFORMAT_VERSION_MICRO < 100) || (LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(58, 9, 100))
+#if (LIBAVFORMAT_VERSION_MICRO < 100) || !(LIBAVFORMAT_VERSION_CHECK(58, 9, 100))
     av_register_all();
 #endif
 
@@ -123,7 +123,7 @@ static inline void vlc_init_avcodec(vlc_object_t *obj)
 
     vlc_init_avutil(obj);
 
-#if (LIBAVFORMAT_VERSION_MICRO < 100) || (LIBAVCODEC_VERSION_INT < AV_VERSION_INT(58, 10, 100))
+#if (LIBAVFORMAT_VERSION_MICRO < 100) || !(LIBAVCODEC_VERSION_CHECK(58, 10, 100))
     avcodec_register_all();
 #endif
 


=====================================
modules/codec/avcodec/avcommon_compat.h
=====================================
@@ -30,11 +30,15 @@
 #ifdef HAVE_LIBAVCODEC_AVCODEC_H
 #include <libavcodec/avcodec.h>
 
-/* LIBAVCODEC_VERSION_CHECK checks for the right version of libav and FFmpeg
+/* check the FFmpeg libavutil version */
+#define LIBAVCODEC_VERSION_CHECK( a, d, e ) \
+    (LIBAVCODEC_VERSION_MICRO >= 100 && LIBAVCODEC_VERSION_INT >= AV_VERSION_INT( a, d, e ) )
+
+/* LIBAV_CODEC_VERSION_CHECK checks for the right version of libav and FFmpeg
  * a is the major version
  * b and c the minor and micro versions of libav
  * d and e the minor and micro versions of FFmpeg */
-#define LIBAVCODEC_VERSION_CHECK( a, b, c, d, e ) \
+#define LIBAV_CODEC_VERSION_CHECK( a, b, c, d, e ) \
     ( (LIBAVCODEC_VERSION_MICRO <  100 && LIBAVCODEC_VERSION_INT >= AV_VERSION_INT( a, b, c ) ) || \
       (LIBAVCODEC_VERSION_MICRO >= 100 && LIBAVCODEC_VERSION_INT >= AV_VERSION_INT( a, d, e ) ) )
 
@@ -86,15 +90,19 @@
 #ifdef HAVE_LIBAVUTIL_AVUTIL_H
 # include <libavutil/avutil.h>
 
-/* LIBAVUTIL_VERSION_CHECK checks for the right version of libav and FFmpeg
+/* check the FFmpeg libavutil version */
+#define LIBAVUTIL_VERSION_CHECK( a, d, e ) \
+    (LIBAVUTIL_VERSION_MICRO >= 100 && LIBAVUTIL_VERSION_INT >= AV_VERSION_INT( a, d, e ) )
+
+/* LIBAV_UTIL_VERSION_CHECK checks for the right libavutil version of libav and FFmpeg
  * a is the major version
  * b and c the minor and micro versions of libav
  * d and e the minor and micro versions of FFmpeg */
-#define LIBAVUTIL_VERSION_CHECK( a, b, c, d, e ) \
+#define LIBAV_UTIL_VERSION_CHECK( a, b, c, d, e ) \
     ( (LIBAVUTIL_VERSION_MICRO <  100 && LIBAVUTIL_VERSION_INT >= AV_VERSION_INT( a, b, c ) ) || \
       (LIBAVUTIL_VERSION_MICRO >= 100 && LIBAVUTIL_VERSION_INT >= AV_VERSION_INT( a, d, e ) ) )
 
-#if !LIBAVUTIL_VERSION_CHECK( 52, 11, 0, 32, 100 )
+#if !LIBAV_UTIL_VERSION_CHECK( 52, 11, 0, 32, 100 )
 #   define AV_PIX_FMT_FLAG_HWACCEL  PIX_FMT_HWACCEL
 #endif
 
@@ -122,7 +130,15 @@
 #ifdef HAVE_LIBAVFORMAT_AVFORMAT_H
 # include <libavformat/avformat.h>
 
-#define LIBAVFORMAT_VERSION_CHECK( a, b, c, d, e ) \
+/* check the FFmpeg libavformat version */
+#define LIBAVFORMAT_VERSION_CHECK( a, d, e ) \
+    (LIBAVFORMAT_VERSION_MICRO >= 100 && LIBAVFORMAT_VERSION_INT >= AV_VERSION_INT( a, d, e ) )
+
+/* LIBAV_FORMAT_VERSION_CHECK checks for the right libavformat version of libav and FFmpeg
+ * a is the major version
+ * b and c the minor and micro versions of libav
+ * d and e the minor and micro versions of FFmpeg */
+#define LIBAV_FORMAT_VERSION_CHECK( a, b, c, d, e ) \
     ( (LIBAVFORMAT_VERSION_MICRO <  100 && LIBAVFORMAT_VERSION_INT >= AV_VERSION_INT( a, b, c ) ) || \
       (LIBAVFORMAT_VERSION_MICRO >= 100 && LIBAVFORMAT_VERSION_INT >= AV_VERSION_INT( a, d, e ) ) )
 


=====================================
modules/codec/avcodec/chroma.c
=====================================
@@ -86,7 +86,7 @@ static const struct
     {VLC_CODEC_I420_9B, AV_PIX_FMT_YUV420P9BE, 0, 0, 0 },
     {VLC_CODEC_I420_10L, AV_PIX_FMT_YUV420P10LE, 0, 0, 0 },
     {VLC_CODEC_I420_10B, AV_PIX_FMT_YUV420P10BE, 0, 0, 0 },
-#if (LIBAVUTIL_VERSION_MICRO >= 100 && LIBAVUTIL_VERSION_INT >= AV_VERSION_INT( 54, 17, 100 ) )
+#if LIBAVUTIL_VERSION_CHECK( 54, 17, 100 )
     {VLC_CODEC_I420_12L, AV_PIX_FMT_YUV420P12LE, 0, 0, 0 },
     {VLC_CODEC_I420_12B, AV_PIX_FMT_YUV420P12BE, 0, 0, 0 },
 #endif
@@ -100,7 +100,7 @@ static const struct
     {VLC_CODEC_I422_9B, AV_PIX_FMT_YUV422P9BE, 0, 0, 0 },
     {VLC_CODEC_I422_10L, AV_PIX_FMT_YUV422P10LE, 0, 0, 0 },
     {VLC_CODEC_I422_10B, AV_PIX_FMT_YUV422P10BE, 0, 0, 0 },
-#if (LIBAVUTIL_VERSION_MICRO >= 100 && LIBAVUTIL_VERSION_INT >= AV_VERSION_INT( 54, 17, 100 ) )
+#if LIBAVUTIL_VERSION_CHECK( 54, 17, 100 )
     {VLC_CODEC_I422_12L, AV_PIX_FMT_YUV422P12LE, 0, 0, 0 },
     {VLC_CODEC_I422_12B, AV_PIX_FMT_YUV422P12BE, 0, 0, 0 },
 #endif
@@ -116,7 +116,7 @@ static const struct
     {VLC_CODEC_I444_9B, AV_PIX_FMT_YUV444P9BE, 0, 0, 0 },
     {VLC_CODEC_I444_10L, AV_PIX_FMT_YUV444P10LE, 0, 0, 0 },
     {VLC_CODEC_I444_10B, AV_PIX_FMT_YUV444P10BE, 0, 0, 0 },
-#if (LIBAVUTIL_VERSION_MICRO >= 100 && LIBAVUTIL_VERSION_INT >= AV_VERSION_INT( 54, 17, 100 ) )
+#if LIBAVUTIL_VERSION_CHECK( 54, 17, 100 )
     {VLC_CODEC_I444_12L, AV_PIX_FMT_YUV444P12LE, 0, 0, 0 },
     {VLC_CODEC_I444_12B, AV_PIX_FMT_YUV444P12BE, 0, 0, 0 },
 #endif
@@ -145,7 +145,7 @@ static const struct
     VLC_RGB( VLC_CODEC_RGB32, AV_PIX_FMT_0BGR32, AV_PIX_FMT_0RGB32, 0x000000ff, 0x0000ff00, 0x00ff0000 )
 #endif
 
-#if (LIBAVUTIL_VERSION_MICRO == 0 || LIBAVUTIL_VERSION_INT >= AV_VERSION_INT( 55, 0, 100 ) )
+#if (LIBAVUTIL_VERSION_MICRO == 0 || LIBAVUTIL_VERSION_CHECK( 55, 0, 100 ) )
 #ifdef WORDS_BIGENDIAN
     {VLC_CODEC_RGBA64, AV_PIX_FMT_RGBA64BE, 0, 0, 0 },
 #else /* !WORDS_BIGENDIAN */
@@ -180,7 +180,7 @@ static const struct
     {VLC_CODEC_GBR_PLANAR_16B, AV_PIX_FMT_GBRP16BE, 0, 0, 0 },
 
     /* XYZ */
-#if LIBAVUTIL_VERSION_CHECK(52, 10, 0, 25, 100)
+#if LIBAV_UTIL_VERSION_CHECK(52, 10, 0, 25, 100)
     {VLC_CODEC_XYZ12, AV_PIX_FMT_XYZ12, 0xfff0, 0xfff0, 0xfff0},
 #endif
     { 0, 0, 0, 0, 0 }


=====================================
modules/codec/avcodec/d3d11va.c
=====================================
@@ -76,7 +76,7 @@ vlc_module_end()
  * So we get the surfaces from the decoder pool when needed. We don't need to
  * extract the decoded surface into the decoder picture anymore.
  */
-#define D3D11_DIRECT_DECODE  LIBAVCODEC_VERSION_CHECK( 57, 30, 3, 72, 101 )
+#define D3D11_DIRECT_DECODE  LIBAV_CODEC_VERSION_CHECK( 57, 30, 3, 72, 101 )
 
 #include <initguid.h> /* must be last included to not redefine existing GUIDs */
 
@@ -764,7 +764,7 @@ static int DxCreateDecoderSurfaces(vlc_va_t *va, int codec_id,
             assert(texDesc.Format == sys->render);
             assert(texDesc.BindFlags & D3D11_BIND_DECODER);
 
-#if !LIBAVCODEC_VERSION_CHECK( 57, 27, 2, 61, 102 )
+#if !LIBAV_CODEC_VERSION_CHECK( 57, 27, 2, 61, 102 )
             if (pic->p_sys->slice_index != surface_idx)
             {
                 msg_Warn(va, "d3d11va requires decoding slices to be the first in the texture (%d/%d)",


=====================================
modules/codec/avcodec/directx_va.c
=====================================
@@ -284,7 +284,7 @@ static const directx_va_mode_t DXVA_MODES[] = {
 
     /* VPx */
     { "VP8",                                                                          &DXVA_ModeVP8_VLD,                      8, 0, NULL },
-#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT( 57, 17, 100 ) && LIBAVCODEC_VERSION_MICRO >= 100
+#if LIBAVCODEC_VERSION_CHECK( 57, 17, 100 )
     { "VP9 profile 0",                                                                &DXVA_ModeVP9_VLD_Profile0,             8, AV_CODEC_ID_VP9, PROF_VP9_MAIN },
     { "VP9 profile 2",                                                                &DXVA_ModeVP9_VLD_10bit_Profile2,       10, AV_CODEC_ID_VP9, PROF_VP9_10 },
 #else
@@ -294,7 +294,7 @@ static const directx_va_mode_t DXVA_MODES[] = {
     { "VP9 profile Intel",                                                            &DXVA_ModeVP9_VLD_Intel,                8, 0, NULL },
 
     /* AV1 */
-#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT( 58, 112, 103 ) && LIBAVCODEC_VERSION_MICRO >= 100
+#if LIBAVCODEC_VERSION_CHECK( 58, 112, 103 )
     { "AV1 Main profile 8",                                                           &DXVA_ModeAV1_VLD_Profile0,             8, AV_CODEC_ID_AV1, PROF_AV1_MAIN },
     { "AV1 Main profile 10",                                                          &DXVA_ModeAV1_VLD_Profile0,             10, AV_CODEC_ID_AV1, PROF_AV1_MAIN },
     { "AV1 High profile 8",                                                           &DXVA_ModeAV1_VLD_Profile1,             8, AV_CODEC_ID_AV1, PROF_AV1_HIGH },


=====================================
modules/codec/avcodec/encoder.c
=====================================
@@ -47,7 +47,9 @@
 #include "avcodec.h"
 #include "avcommon.h"
 
-#define API_CHANNEL_LAYOUT (LIBAVUTIL_VERSION_CHECK( 52, 2, 6, 0, 100))
+#define API_CHANNEL_LAYOUT_STRUCT (LIBAVCODEC_VERSION_CHECK(59, 24, 100)) // AVCodecContext.ch_layout
+
+#define API_CHANNEL_LAYOUT (LIBAV_UTIL_VERSION_CHECK( 52, 2, 6, 0, 100))
 
 #if API_CHANNEL_LAYOUT
 # include <libavutil/channel_layout.h>
@@ -61,8 +63,7 @@
 
 #define RAW_AUDIO_FRAME_SIZE (2048)
 
-#if LIBAVCODEC_VERSION_MICRO >= 100 && \
-    LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(59, 0, 100)
+#if LIBAVCODEC_VERSION_CHECK(59, 0, 100)
 # define AVC_MAYBE_CONST const
 #else
 # define AVC_MAYBE_CONST
@@ -183,7 +184,7 @@ static const uint64_t pi_channels_map[][2] =
     { AV_CH_STEREO_RIGHT,      0 },
 };
 
-# if !LIBAVCODEC_VERSION_CHECK(59, 999, 999, 24, 100)
+# if !API_CHANNEL_LAYOUT_STRUCT
 static const uint32_t channel_mask[][2] = {
     {0,0},
     {AOUT_CHAN_CENTER, AV_CH_LAYOUT_MONO},
@@ -765,7 +766,7 @@ int InitVideoEnc( vlc_object_t *p_this )
         uint32_t order_mask = 0;
         int i_channels_src = 0;
         msg_Dbg( p_enc, "Creating channel order for reordering");
-# if LIBAVCODEC_VERSION_CHECK(59, 999, 999, 24, 100)
+# if API_CHANNEL_LAYOUT_STRUCT && LIBAVUTIL_VERSION_CHECK(57, 24, 100)
         av_channel_layout_default( &p_context->ch_layout, p_enc->fmt_out.audio.i_channels );
         uint64_t channel_mask = p_context->ch_layout.u.mask;
 # else
@@ -918,7 +919,7 @@ errmsg:
 
         if( p_enc->fmt_out.audio.i_channels > 2 )
         {
-#if LIBAVCODEC_VERSION_CHECK(59, 999, 999, 24, 100)
+#if API_CHANNEL_LAYOUT_STRUCT && LIBAVUTIL_VERSION_CHECK(57, 24, 100)
             av_channel_layout_default( &p_context->ch_layout, 2 );
 #else
             p_context->channels = 2;
@@ -1282,7 +1283,7 @@ static block_t *handle_delay_buffer( encoder_t *p_enc, encoder_sys_t *p_sys, uns
     av_frame_unref( p_sys->frame );
     p_sys->frame->format     = p_sys->p_context->sample_fmt;
     p_sys->frame->nb_samples = leftover_samples + p_sys->i_samples_delay;
-#if LIBAVCODEC_VERSION_CHECK(59, 999, 999, 24, 100)
+#if API_CHANNEL_LAYOUT_STRUCT && LIBAVUTIL_VERSION_CHECK(57, 24, 100)
     av_channel_layout_copy(&p_sys->frame->ch_layout, &p_sys->p_context->ch_layout);
 #else
     p_sys->frame->channel_layout = p_sys->p_context->channel_layout;
@@ -1417,7 +1418,7 @@ static block_t *EncodeAudio( encoder_t *p_enc, block_t *p_aout_buf )
         p_sys->frame->pts        = date_Get( &p_sys->buffer_date ) * p_sys->p_context->time_base.den /
                                     CLOCK_FREQ / p_sys->p_context->time_base.num;
 
-#if LIBAVCODEC_VERSION_CHECK(59, 999, 999, 24, 100)
+#if API_CHANNEL_LAYOUT_STRUCT && LIBAVUTIL_VERSION_CHECK(57, 24, 100)
         av_channel_layout_copy(&p_sys->frame->ch_layout, &p_sys->p_context->ch_layout);
 #else
         p_sys->frame->channel_layout = p_sys->p_context->channel_layout;


=====================================
modules/codec/avcodec/fourcc.c
=====================================
@@ -182,12 +182,10 @@ static const struct vlc_avcodec_fourcc video_codecs[] =
     /* AV_CODEC_ID_V210X */
     { VLC_CODEC_TMV, AV_CODEC_ID_TMV },
     { VLC_CODEC_V210, AV_CODEC_ID_V210 },
-#if LIBAVCODEC_VERSION_MICRO >= 100
-# if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT( 59, 42, 102 )
+#if LIBAVCODEC_VERSION_CHECK( 59, 42, 102 )
     { VLC_CODEC_VUYA, AV_CODEC_ID_RAWVIDEO },
-# elif LIBAVCODEC_VERSION_INT >= AV_VERSION_INT( 54, 50, 100 )
+#elif LIBAVCODEC_VERSION_CHECK( 54, 50, 100 )
     { VLC_CODEC_VUYA, AV_CODEC_ID_AYUV },
-# endif
 #endif
     /* AV_CODEC_ID_DPX */
     { VLC_CODEC_MAD, AV_CODEC_ID_MAD },
@@ -230,7 +228,7 @@ static const struct vlc_avcodec_fourcc video_codecs[] =
     { VLC_CODEC_CLLC, AV_CODEC_ID_CLLC },
     { VLC_CODEC_MSS2, AV_CODEC_ID_MSS2 },
     { VLC_CODEC_VP9, AV_CODEC_ID_VP9 },
-#if LIBAVCODEC_VERSION_CHECK( 57, 26, 0, 83, 101 )
+#if LIBAV_CODEC_VERSION_CHECK( 57, 26, 0, 83, 101 )
     { VLC_CODEC_AV1, AV_CODEC_ID_AV1 },
 #endif
     { VLC_CODEC_ICOD, AV_CODEC_ID_AIC },
@@ -285,19 +283,19 @@ static const struct vlc_avcodec_fourcc video_codecs[] =
     /* ffmpeg only: AV_CODEC_ID_SNOW */
     /* ffmpeg only: AV_CODEC_ID_SMVJPEG */
 
-#if LIBAVCODEC_VERSION_CHECK( 57, 999, 999, 24, 102 )
+#if LIBAVCODEC_VERSION_CHECK( 57, 24, 102 )
     { VLC_CODEC_CINEFORM, AV_CODEC_ID_CFHD },
 #endif
 
-#if LIBAVCODEC_VERSION_CHECK( 57, 999, 999, 70, 100 )
+#if LIBAVCODEC_VERSION_CHECK( 57, 70, 100 )
     { VLC_CODEC_PIXLET, AV_CODEC_ID_PIXLET },
 #endif
 
-#if LIBAVCODEC_VERSION_CHECK( 57, 999, 999, 71, 101 )
+#if LIBAVCODEC_VERSION_CHECK( 57, 71, 101 )
     { VLC_CODEC_SPEEDHQ, AV_CODEC_ID_SPEEDHQ },
 #endif
 
-#if LIBAVCODEC_VERSION_CHECK( 57, 999, 999, 79, 100 )
+#if LIBAVCODEC_VERSION_CHECK( 57, 79, 100 )
     { VLC_CODEC_FMVC, AV_CODEC_ID_FMVC },
 #endif
 };
@@ -414,7 +412,7 @@ static const struct vlc_avcodec_fourcc audio_codecs[] =
     /* AV_CODEC_ID_WESTWOOD_SND1 */
     { VLC_CODEC_GSM, AV_CODEC_ID_GSM },
     { VLC_CODEC_QDM2, AV_CODEC_ID_QDM2 },
-#if LIBAVCODEC_VERSION_CHECK( 57, 999, 999, 71, 100 )
+#if LIBAVCODEC_VERSION_CHECK( 57, 71, 100 )
     { VLC_CODEC_QDMC, AV_CODEC_ID_QDMC },
 #endif
     { VLC_CODEC_COOK, AV_CODEC_ID_COOK },
@@ -482,7 +480,7 @@ static const struct vlc_avcodec_fourcc spu_codecs[] =
     { VLC_CODEC_SSA, AV_CODEC_ID_SSA },
     /* AV_CODEC_ID_MOV_TEXT */
     { VLC_CODEC_BD_PG, AV_CODEC_ID_HDMV_PGS_SUBTITLE },
-#if LIBAVCODEC_VERSION_CHECK( 57, 999, 999, 71, 100 )
+#if LIBAVCODEC_VERSION_CHECK( 57, 71, 100 )
     { VLC_CODEC_BD_TEXT, AV_CODEC_ID_HDMV_TEXT_SUBTITLE },
 #endif
     { VLC_CODEC_TELETEXT, AV_CODEC_ID_DVB_TELETEXT },


=====================================
modules/codec/avcodec/va.c
=====================================
@@ -58,7 +58,7 @@ vlc_fourcc_t vlc_va_GetChroma(enum PixelFormat hwfmt, enum PixelFormat swfmt)
             }
             break;
 
-#if LIBAVUTIL_VERSION_CHECK(54, 13, 1, 24, 100)
+#if LIBAV_UTIL_VERSION_CHECK(54, 13, 1, 24, 100)
         case AV_PIX_FMT_D3D11VA_VLD:
             switch (swfmt)
             {


=====================================
modules/codec/avcodec/video.c
=====================================
@@ -39,7 +39,8 @@
 #include <libavcodec/avcodec.h>
 #include <libavutil/mem.h>
 #include <libavutil/pixdesc.h>
-#if (LIBAVUTIL_VERSION_MICRO >= 100 && LIBAVUTIL_VERSION_INT >= AV_VERSION_INT( 55, 16, 101 ) )
+#include "avcommon_compat.h"
+#if LIBAVUTIL_VERSION_CHECK( 55, 16, 101 )
 #include <libavutil/mastering_display_metadata.h>
 #endif
 
@@ -257,12 +258,12 @@ static int lavc_GetVideoFormat(decoder_t *dec, video_format_t *restrict fmt,
         case AVCOL_TRC_BT2020_12:
             fmt->transfer = TRANSFER_FUNC_BT2020;
             break;
-#if LIBAVUTIL_VERSION_CHECK( 55, 14, 0, 31, 100)
+#if LIBAV_UTIL_VERSION_CHECK( 55, 14, 0, 31, 100)
         case AVCOL_TRC_ARIB_STD_B67:
             fmt->transfer = TRANSFER_FUNC_ARIB_B67;
             break;
 #endif
-#if LIBAVUTIL_VERSION_CHECK( 55, 17, 0, 37, 100)
+#if LIBAV_UTIL_VERSION_CHECK( 55, 17, 0, 37, 100)
         case AVCOL_TRC_SMPTE2084:
             fmt->transfer = TRANSFER_FUNC_SMPTE_ST2084;
             break;
@@ -687,7 +688,7 @@ static int ffmpeg_OpenVa(decoder_t *p_dec, AVCodecContext *p_context,
 static const enum PixelFormat hwfmts[] =
 {
 #ifdef _WIN32
-#if LIBAVUTIL_VERSION_CHECK(54, 13, 1, 24, 100)
+#if LIBAV_UTIL_VERSION_CHECK(54, 13, 1, 24, 100)
     AV_PIX_FMT_D3D11VA_VLD,
 #endif
     AV_PIX_FMT_DXVA2_VLD,
@@ -995,7 +996,7 @@ static int DecodeSidedata( decoder_t *p_dec, const AVFrame *frame, picture_t *p_
     decoder_sys_t *p_sys = p_dec->p_sys;
     bool format_changed = false;
 
-#if (LIBAVUTIL_VERSION_MICRO >= 100 && LIBAVUTIL_VERSION_INT >= AV_VERSION_INT( 55, 16, 101 ) )
+#if LIBAVUTIL_VERSION_CHECK( 55, 16, 101 )
 #define FROM_AVRAT(default_factor, avrat) \
 (uint64_t)(default_factor) * (avrat).num / (avrat).den
     const AVFrameSideData *metadata =
@@ -1050,7 +1051,7 @@ static int DecodeSidedata( decoder_t *p_dec, const AVFrame *frame, picture_t *p_
 #undef FROM_AVRAT
     }
 #endif
-#if (LIBAVUTIL_VERSION_MICRO >= 100 && LIBAVUTIL_VERSION_INT >= AV_VERSION_INT( 55, 60, 100 ) )
+#if LIBAVUTIL_VERSION_CHECK( 55, 60, 100 )
     const AVFrameSideData *metadata_lt =
             av_frame_get_side_data( frame,
                                     AV_FRAME_DATA_CONTENT_LIGHT_LEVEL );
@@ -1113,17 +1114,20 @@ static picture_t *DecodeBlock( decoder_t *p_dec, block_t **pp_block, bool *error
     bool eos_spotted = false;
 
 
-    block_t *p_block;
+    block_t *p_block = pp_block ? *pp_block : NULL;
     vlc_tick_t current_time;
 
     if( !p_context->extradata_size && p_dec->fmt_in.i_extra )
     {
         ffmpeg_InitCodec( p_dec );
-        if( !avcodec_is_open( p_context ) )
-            OpenVideoCodec( p_dec );
+        if( !avcodec_is_open( p_context ) && OpenVideoCodec(p_dec) < 0 )
+        {
+            if( p_block != NULL )
+                block_Release( p_block );
+            return NULL;
+        }
     }
 
-    p_block = pp_block ? *pp_block : NULL;
     if(!p_block && !(p_sys->p_codec->capabilities & AV_CODEC_CAP_DELAY) )
         return NULL;
 
@@ -1306,7 +1310,7 @@ static picture_t *DecodeBlock( decoder_t *p_dec, block_t **pp_block, bool *error
         }
 
         /* Compute the PTS */
-#if LIBAVCODEC_VERSION_CHECK(57, 24, 0, 61, 100)
+#if LIBAV_CODEC_VERSION_CHECK(57, 24, 0, 61, 100)
 # if LIBAVCODEC_VERSION_MICRO >= 100
         vlc_tick_t i_pts = frame->best_effort_timestamp;
 # else
@@ -1823,8 +1827,7 @@ no_reuse:
     if (!can_hwaccel)
         return swfmt;
 
-#if (LIBAVCODEC_VERSION_MICRO >= 100) \
-  && (LIBAVCODEC_VERSION_INT < AV_VERSION_INT(57, 83, 101))
+#if (LIBAVCODEC_VERSION_MICRO >= 100) && !(LIBAVCODEC_VERSION_CHECK(57, 83, 101))
     if (p_context->active_thread_type)
     {
         msg_Warn(p_dec, "thread type %d: disabling hardware acceleration",


=====================================
modules/demux/avformat/demux.c
=====================================
@@ -52,8 +52,7 @@
 
 # define HAVE_AVUTIL_CODEC_ATTACHMENT 1
 
-#if LIBAVFORMAT_VERSION_MICRO >= 100 && \
-    LIBAVFORMAT_VERSION_INT >= AV_VERSION_INT(59, 0, 100)
+#if LIBAVFORMAT_VERSION_CHECK(59, 0, 100)
 # define AVF_MAYBE_CONST const
 #else
 # define AVF_MAYBE_CONST
@@ -401,7 +400,7 @@ int avformat_OpenDemux( vlc_object_t *p_this )
             es_format_Init( &es_fmt, AUDIO_ES, fcc );
             es_fmt.i_original_fourcc = CodecTagToFourcc( cp->codec_tag );
             es_fmt.i_bitrate = cp->bit_rate;
-#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT( 59, 24, 100 ) && LIBAVCODEC_VERSION_MICRO >= 100
+#if LIBAVCODEC_VERSION_CHECK(59, 24, 100)
             es_fmt.audio.i_channels = cp->ch_layout.nb_channels;
 #else
             es_fmt.audio.i_channels = cp->channels;


=====================================
modules/demux/avformat/mux.c
=====================================
@@ -61,7 +61,7 @@ struct sout_mux_sys_t
     bool     b_write_header;
     bool     b_write_keyframe;
     bool     b_error;
-#if LIBAVFORMAT_VERSION_CHECK( 57, 7, 0, 40, 100 )
+#if LIBAV_FORMAT_VERSION_CHECK( 57, 7, 0, 40, 100 )
     bool     b_header_done;
 #endif
 };
@@ -80,7 +80,7 @@ static int IOWrite( void *opaque, uint8_t *buf, int buf_size );
 static int IOWrite( void *opaque, const uint8_t *buf, int buf_size );
 #endif
 static int64_t IOSeek( void *opaque, int64_t offset, int whence );
-#if LIBAVFORMAT_VERSION_CHECK( 57, 7, 0, 40, 100 )
+#if LIBAV_FORMAT_VERSION_CHECK( 57, 7, 0, 40, 100 )
 # if FF_API_AVIO_WRITE_NONCONST
 static int IOWriteTyped(void *opaque, uint8_t *buf, int buf_size,
                               enum AVIODataMarkerType type, int64_t time);
@@ -95,8 +95,7 @@ int IOWriteTyped(void *opaque, const uint8_t *buf, int buf_size,
  *****************************************************************************/
 int avformat_OpenMux( vlc_object_t *p_this )
 {
-#if LIBAVFORMAT_VERSION_MICRO >= 100 && \
-    LIBAVFORMAT_VERSION_INT >= AV_VERSION_INT(59, 0, 100)
+#if LIBAVFORMAT_VERSION_CHECK(59, 0, 100)
     const AVOutputFormat *file_oformat;
 #else
     AVOutputFormat *file_oformat;
@@ -104,8 +103,7 @@ int avformat_OpenMux( vlc_object_t *p_this )
     sout_mux_t *p_mux = (sout_mux_t*)p_this;
     bool dummy = !strcmp( p_mux->p_access->psz_access, "dummy");
 
-#if ( (LIBAVFORMAT_VERSION_MICRO >= 100) \
-      && (LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(58, 7, 100)) )
+#if LIBAVFORMAT_VERSION_MICRO >= 100 && !(LIBAVFORMAT_VERSION_CHECK(58, 7, 100))
     if( dummy && strlen(p_mux->p_access->psz_path)
                               >= sizeof (((AVFormatContext *)NULL)->filename) )
         return VLC_EGENERIC;
@@ -144,8 +142,7 @@ int avformat_OpenMux( vlc_object_t *p_this )
     p_sys->oc->oformat = file_oformat;
     /* If we use dummy access, let avformat write output */
     if( dummy )
-#if ( (LIBAVFORMAT_VERSION_MICRO >= 100) \
-      && (LIBAVFORMAT_VERSION_INT >= AV_VERSION_INT(58, 7, 100)) )
+#if LIBAVFORMAT_VERSION_CHECK(58, 7, 100)
         p_sys->oc->url = av_strdup(p_mux->p_access->psz_path);
 #else
         strcpy( p_sys->oc->filename, p_mux->p_access->psz_path );
@@ -168,7 +165,7 @@ int avformat_OpenMux( vlc_object_t *p_this )
     p_sys->b_write_header = true;
     p_sys->b_write_keyframe = false;
     p_sys->b_error = false;
-#if LIBAVFORMAT_VERSION_CHECK( 57, 7, 0, 40, 100 )
+#if LIBAV_FORMAT_VERSION_CHECK( 57, 7, 0, 40, 100 )
     p_sys->io->write_data_type = IOWriteTyped;
     p_sys->b_header_done = false;
 #endif
@@ -276,7 +273,7 @@ static int AddStream( sout_mux_t *p_mux, sout_input_t *p_input )
     {
     case AUDIO_ES:
         codecpar->codec_type = AVMEDIA_TYPE_AUDIO;
-#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT( 59, 24, 100 ) && LIBAVCODEC_VERSION_MICRO >= 100
+#if LIBAVCODEC_VERSION_CHECK(59, 24, 100) && LIBAVUTIL_VERSION_CHECK(57, 24, 100)
         av_channel_layout_default( &codecpar->ch_layout, fmt->audio.i_channels );
 #else
         codecpar->channels = fmt->audio.i_channels;
@@ -397,7 +394,7 @@ static int MuxBlock( sout_mux_t *p_mux, sout_input_t *p_input )
         pkt->dts = p_data->i_dts * p_stream->time_base.den /
             CLOCK_FREQ / p_stream->time_base.num;
 
-#if LIBAVFORMAT_VERSION_MICRO >= 100 && LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(59, 2, 103)
+#if LIBAVFORMAT_VERSION_MICRO >= 100 && !(LIBAVFORMAT_VERSION_CHECK(59, 2, 103))
     /* this is another hack to prevent libavformat from triggering the "non monotone timestamps" check in avformat/utils.c */
     p_stream->cur_dts = ( p_data->i_dts * p_stream->time_base.den /
             CLOCK_FREQ / p_stream->time_base.num ) - 1;
@@ -419,7 +416,7 @@ static int MuxBlock( sout_mux_t *p_mux, sout_input_t *p_input )
     return VLC_SUCCESS;
 }
 
-#if LIBAVFORMAT_VERSION_CHECK( 57, 7, 0, 40, 100 )
+#if LIBAV_FORMAT_VERSION_CHECK( 57, 7, 0, 40, 100 )
 # if FF_API_AVIO_WRITE_NONCONST
 int IOWriteTyped(void *opaque, uint8_t *buf, int buf_size,
                               enum AVIODataMarkerType type, int64_t time)
@@ -545,7 +542,7 @@ static int IOWrite( void *opaque, const uint8_t *buf, int buf_size )
 
     if( p_sys->b_write_header )
         p_buf->i_flags |= BLOCK_FLAG_HEADER;
-#if LIBAVFORMAT_VERSION_CHECK( 57, 7, 0, 40, 100 )
+#if LIBAV_FORMAT_VERSION_CHECK( 57, 7, 0, 40, 100 )
     if( !p_sys->b_header_done )
         p_buf->i_flags |= BLOCK_FLAG_HEADER;
 #endif



View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/2afbbfe5cd61641cc88a332fd7f8c4bfdea5d9db...1713be552f9e26260a3ac33ce04ab89f660780cc

-- 
View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/2afbbfe5cd61641cc88a332fd7f8c4bfdea5d9db...1713be552f9e26260a3ac33ce04ab89f660780cc
You're receiving this email because of your account on code.videolan.org.


VideoLAN code repository instance


More information about the vlc-commits mailing list