[vlc-commits] [Git][videolan/vlc][master] 3 commits: vlc_es: add a helper to detect VPX alpha in the codec level
Steve Lhomme (@robUx4)
gitlab at videolan.org
Thu Aug 21 11:36:51 UTC 2025
Steve Lhomme pushed to branch master at VideoLAN / VLC
Commits:
89c1d902 by Steve Lhomme at 2025-08-21T11:14:54+00:00
vlc_es: add a helper to detect VPX alpha in the codec level
- - - - -
bdd95cd0 by Steve Lhomme at 2025-08-21T11:14:54+00:00
use es_format_HasVpxAlpha instead of local check
- - - - -
99a5b010 by Steve Lhomme at 2025-08-21T11:14:54+00:00
vlc_es: don't consider -1 i_level has VPx alpha data
The bitfield check will pass but -1 is usually the default value for codecs.
- - - - -
13 changed files:
- include/vlc_es.h
- modules/codec/avcodec/fourcc.c
- modules/codec/gstreamer/gstdecode.c
- modules/codec/omxil/mediacodec.c
- modules/codec/omxil/utils.c
- modules/codec/vpx.c
- modules/codec/vpx_alpha.c
- modules/demux/mkv/matroska_segment_parse.cpp
- modules/hw/mmal/codec.c
- modules/hw/nvdec/nvdec.c
- modules/packetizer/avparser.c
- modules/stream_out/chromecast/cast.cpp
- modules/stream_out/rtpfmt.c
Changes:
=====================================
include/vlc_es.h
=====================================
@@ -840,4 +840,9 @@ static inline int vlc_RGBChromaToMask( vlc_fourcc_t fcc, uint32_t *rmask,
return VLC_SUCCESS;
}
+static inline bool es_format_HasVpxAlpha(const es_format_t *es)
+{
+ return es->i_level != -1 && (es->i_level & 0x1000) == 0x1000;
+}
+
#endif
=====================================
modules/codec/avcodec/fourcc.c
=====================================
@@ -547,9 +547,9 @@ bool GetFfmpegCodec( const es_format_t *es,
const struct vlc_avcodec_fourcc *base;
size_t count;
- if (es->i_codec == VLC_CODEC_VP8 && (es->i_level & 0x1000) != 0) // contains alpha extradata
+ if (es->i_codec == VLC_CODEC_VP8 && es_format_HasVpxAlpha(es)) // contains alpha extradata
return false;
- if (es->i_codec == VLC_CODEC_VP9 && (es->i_level & 0x1000) != 0) // contains alpha extradata
+ if (es->i_codec == VLC_CODEC_VP9 && es_format_HasVpxAlpha(es)) // contains alpha extradata
return false;
switch( es->i_cat )
=====================================
modules/codec/gstreamer/gstdecode.c
=====================================
@@ -408,12 +408,12 @@ static GstStructure* vlc_to_gst_fmt( const es_format_t *p_fmt )
"systemstream", G_TYPE_BOOLEAN, FALSE, NULL );
break;
case VLC_CODEC_VP8:
- if ((p_fmt->i_level & 0x1000) != 0) // contains alpha extradata
+ if (es_format_HasVpxAlpha(p_fmt)) // contains alpha extradata
return NULL;
p_str = gst_structure_new_empty( "video/x-vp8" );
break;
case VLC_CODEC_VP9:
- if ((p_fmt->i_level & 0x1000) != 0) // contains alpha extradata
+ if (es_format_HasVpxAlpha(p_fmt)) // contains alpha extradata
return NULL;
p_str = gst_structure_new_empty( "video/x-vp9" );
break;
=====================================
modules/codec/omxil/mediacodec.c
=====================================
@@ -864,11 +864,11 @@ static int OpenDecoder(vlc_object_t *p_this, pf_MediaCodecApi_init pf_init)
case VLC_CODEC_WMV3: mime = "video/x-ms-wmv"; break;
case VLC_CODEC_VC1: mime = "video/wvc1"; break;
case VLC_CODEC_VP8:
- if ((p_dec->fmt_in->i_level & 0x1000) != 0) // contains alpha extradata
+ if (es_format_HasVpxAlpha(p_dec->fmt_in)) // contains alpha extradata
return VLC_ENOTSUP;
mime = "video/x-vnd.on2.vp8"; break;
case VLC_CODEC_VP9:
- if ((p_dec->fmt_in->i_level & 0x1000) != 0) // contains alpha extradata
+ if (es_format_HasVpxAlpha(p_dec->fmt_in)) // contains alpha extradata
return VLC_ENOTSUP;
mime = "video/x-vnd.on2.vp9"; break;
}
=====================================
modules/codec/omxil/utils.c
=====================================
@@ -598,9 +598,9 @@ OMX_VIDEO_CODINGTYPE GetOmxVideoFormat( const es_format_t *es )
for( size_t i = 0; i < ARRAY_SIZE(video_format_table); i++ )
if( video_format_table[i].i_fourcc == i_fourcc )
{
- if (es->i_codec == VLC_CODEC_VP8 && (es->i_level & 0x1000) != 0) // contains alpha extradata
+ if (es->i_codec == VLC_CODEC_VP8 && es_format_HasVpxAlpha(es)) // contains alpha extradata
continue;
- if (es->i_codec == VLC_CODEC_VP9 && (es->i_level & 0x1000) != 0) // contains alpha extradata
+ if (es->i_codec == VLC_CODEC_VP9 && es_format_HasVpxAlpha(es)) // contains alpha extradata
continue;
return video_format_table[i].i_codec;
=====================================
modules/codec/vpx.c
=====================================
@@ -310,7 +310,7 @@ static int OpenDecoder(vlc_object_t *p_this)
{
#ifdef ENABLE_VP8_DECODER
case VLC_CODEC_VP8:
- if ((dec->fmt_in->i_level & 0x1000) != 0) // contains alpha extradata
+ if (es_format_HasVpxAlpha(dec->fmt_in)) // contains alpha extradata
return VLC_ENOTSUP;
// fallthrough
case VLC_CODEC_WEBP:
@@ -321,7 +321,7 @@ static int OpenDecoder(vlc_object_t *p_this)
#endif
#ifdef ENABLE_VP9_DECODER
case VLC_CODEC_VP9:
- if ((dec->fmt_in->i_level & 0x1000) != 0) // contains alpha extradata
+ if (es_format_HasVpxAlpha(dec->fmt_in)) // contains alpha extradata
return VLC_ENOTSUP;
// fallthrough
case VLC_CODEC_VP9ALPHA_ES:
@@ -413,7 +413,7 @@ static int OpenEncoder(vlc_object_t *p_this)
{
#ifdef ENABLE_VP8_ENCODER
case VLC_CODEC_VP8:
- if ((p_enc->fmt_out.i_level & 0x1000) != 0) // contains alpha extradata
+ if (es_format_HasVpxAlpha(&p_enc->fmt_out)) // contains alpha extradata
return VLC_ENOTSUP;
// fallthrough
case VLC_CODEC_WEBP:
@@ -423,7 +423,7 @@ static int OpenEncoder(vlc_object_t *p_this)
#endif
#ifdef ENABLE_VP9_ENCODER
case VLC_CODEC_VP9:
- if ((p_enc->fmt_out.i_level & 0x1000) != 0) // contains alpha extradata
+ if (es_format_HasVpxAlpha(&p_enc->fmt_out)) // contains alpha extradata
return VLC_ENOTSUP;
iface = &vpx_codec_vp9_cx_algo;
vp_version = 9;
=====================================
modules/codec/vpx_alpha.c
=====================================
@@ -570,7 +570,7 @@ int OpenDecoder(vlc_object_t *o)
decoder_t *dec = container_of(o, decoder_t, obj);
if (dec->fmt_in->i_codec != VLC_CODEC_VP8 && dec->fmt_in->i_codec != VLC_CODEC_VP9)
return VLC_ENOTSUP;
- if ((dec->fmt_in->i_level & 0x1000) == 0)
+ if (!es_format_HasVpxAlpha(dec->fmt_in))
return VLC_ENOTSUP;
vpx_alpha *p_sys = vlc_obj_calloc(o, 1, sizeof(*p_sys));
=====================================
modules/demux/mkv/matroska_segment_parse.cpp
=====================================
@@ -1836,7 +1836,7 @@ bool matroska_segment_c::TrackInit( mkv_track_t * p_tk )
break;
case 2: // Level
if (length == 1) {
- if ((vars.p_fmt->i_level & 0x1000) != 0)
+ if (es_format_HasVpxAlpha(vars.p_fmt))
vars.p_fmt->i_level |= VP9CodecFeatures[2];
else
vars.p_fmt->i_level = VP9CodecFeatures[2];
=====================================
modules/hw/mmal/codec.c
=====================================
@@ -151,7 +151,7 @@ static MMAL_FOURCC_T vlc_to_mmal_es_fourcc(const es_format_t *es)
case VLC_CODEC_VP6:
return MMAL_ENCODING_VP6;
case VLC_CODEC_VP8:
- if ((es->i_level & 0x1000) != 0) // contains alpha extradata
+ if (es_format_HasVpxAlpha(es)) // contains alpha extradata
return 0;
return MMAL_ENCODING_VP8;
case VLC_CODEC_WMV1:
=====================================
modules/hw/nvdec/nvdec.c
=====================================
@@ -817,7 +817,7 @@ static int OpenDecoder(vlc_object_t *p_this)
case VLC_CODEC_MP4V:
break;
case VLC_CODEC_VP8:
- if ((p_dec->fmt_in->i_level & 0x1000) != 0) // contains alpha extradata
+ if (es_format_HasVpxAlpha(p_dec->fmt_in)) // contains alpha extradata
goto early_exit;
break;
case VLC_CODEC_VP9:
@@ -826,7 +826,7 @@ static int OpenDecoder(vlc_object_t *p_this)
msg_Warn(p_dec, "Unsupported VP9 profile %d", p_dec->fmt_in->i_profile);
goto early_exit;
}
- if ((p_dec->fmt_in->i_level & 0x1000) != 0) // contains alpha extradata
+ if (es_format_HasVpxAlpha(p_dec->fmt_in)) // contains alpha extradata
goto early_exit;
break;
default:
=====================================
modules/packetizer/avparser.c
=====================================
@@ -92,7 +92,7 @@ int avparser_OpenPacketizer( vlc_object_t *p_this )
* removing this constraint */
if( p_dec->fmt_in->i_codec != VLC_CODEC_VP9 )
return VLC_ENOTSUP;
- if( (p_dec->fmt_in->i_level & 0x1000) != 0 ) // contains alpha extradata
+ if( es_format_HasVpxAlpha(p_dec->fmt_in) ) // contains alpha extradata
return VLC_ENOTSUP;
enum AVCodecID i_avcodec_id;
=====================================
modules/stream_out/chromecast/cast.cpp
=====================================
@@ -773,11 +773,11 @@ bool sout_stream_sys_t::canDecodeVideo( const es_format_t *es ) const
case VLC_CODEC_HEVC:
return true;
case VLC_CODEC_VP8:
- if ((es->i_level & 0x1000) != 0) // contains alpha extradata
+ if (es_format_HasVpxAlpha(es)) // contains alpha extradata
return false;
return true;
case VLC_CODEC_VP9:
- if ((es->i_level & 0x1000) != 0) // contains alpha extradata
+ if (es_format_HasVpxAlpha(es)) // contains alpha extradata
return false;
return true;
default:
@@ -1375,4 +1375,3 @@ static void Close(sout_stream_t *p_stream)
/* Delete last since p_intf and p_sys depends on httpd_host */
httpd_HostDelete(httpd_host);
}
-
=====================================
modules/stream_out/rtpfmt.c
=====================================
@@ -644,7 +644,7 @@ int rtp_get_fmt( vlc_object_t *obj, const es_format_t *p_fmt, const char *mux,
rtp_fmt->fmtp = strdup( "sprop-stereo=1" );
break;
case VLC_CODEC_VP8:
- if ((p_fmt->i_level & 0x1000) != 0) // contains alpha extradata
+ if (es_format_HasVpxAlpha(p_fmt)) // contains alpha extradata
return VLC_ENOTSUP;
rtp_fmt->ptname = "VP8";
rtp_fmt->pf_packetize = rtp_packetize_vp8;
View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/8753b281ba36378ab2803a5419b9c0713b26a389...99a5b0102325e387e61778adcde4900db7796e9a
--
View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/8753b281ba36378ab2803a5419b9c0713b26a389...99a5b0102325e387e61778adcde4900db7796e9a
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