mirror of
https://github.com/openbsd/ports.git
synced 2026-06-17 23:13:55 +02:00
Backport support for VVC codec
From Brad (maintainer)
This commit is contained in:
+1
-3
@@ -2,7 +2,7 @@ COMMENT-main= VideoLAN client; multimedia player
|
||||
COMMENT-jack= JACK audio output module for VLC
|
||||
|
||||
V= 3.0.23
|
||||
REVISION-main= 2
|
||||
REVISION-main= 3
|
||||
DISTNAME= vlc-${V}
|
||||
PKGNAME-main= ${DISTNAME}
|
||||
PKGNAME-jack= vlc-jack-${V}
|
||||
@@ -229,8 +229,6 @@ CONFIGURE_ENV+= BUILDCC="${CC}" \
|
||||
RCC="${LOCALBASE}/bin/rcc-qt5" \
|
||||
LUAC="${LOCALBASE}/bin/luac${MODLUA_DEP_VERSION}"
|
||||
|
||||
CFLAGS+= -Wno-unreachable-code-generic-assoc
|
||||
|
||||
PSEUDO_FLAVORS= no_jack
|
||||
FLAVOR?=
|
||||
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
- fourcc: add VVC
|
||||
18c0e3a45baad15fed2adf9df4d1b73f9d146a27
|
||||
|
||||
Index: include/vlc_fourcc.h
|
||||
--- include/vlc_fourcc.h.orig
|
||||
+++ include/vlc_fourcc.h
|
||||
@@ -40,6 +40,7 @@
|
||||
#define VLC_CODEC_H263P VLC_FOURCC('I','L','V','R')
|
||||
#define VLC_CODEC_FLV1 VLC_FOURCC('F','L','V','1')
|
||||
#define VLC_CODEC_H261 VLC_FOURCC('h','2','6','1')
|
||||
+#define VLC_CODEC_VVC VLC_FOURCC('h','2','6','6')
|
||||
#define VLC_CODEC_MJPG VLC_FOURCC('M','J','P','G')
|
||||
#define VLC_CODEC_MJPGB VLC_FOURCC('m','j','p','b')
|
||||
#define VLC_CODEC_LJPG VLC_FOURCC('L','J','P','G')
|
||||
@@ -0,0 +1,16 @@
|
||||
- codec: avcodec: map VVC
|
||||
b2a8bb1be60315b7d8afa1151cfc6a19890aa977
|
||||
|
||||
Index: modules/codec/avcodec/fourcc.c
|
||||
--- modules/codec/avcodec/fourcc.c.orig
|
||||
+++ modules/codec/avcodec/fourcc.c
|
||||
@@ -262,6 +262,9 @@ static const struct vlc_avcodec_fourcc video_codecs[]
|
||||
|
||||
{ VLC_CODEC_DXV, AV_CODEC_ID_DXV },
|
||||
|
||||
+#if LIBAVCODEC_VERSION_CHECK( 61, 03, 100 )
|
||||
+ { VLC_CODEC_VVC, AV_CODEC_ID_VVC },
|
||||
+#endif
|
||||
/* ffmpeg only: AV_CODEC_ID_BRENDER_PIX */
|
||||
/* ffmpeg only: AV_CODEC_ID_Y41P */
|
||||
/* ffmpeg only: AV_CODEC_ID_EXR */
|
||||
@@ -0,0 +1,18 @@
|
||||
- codec: avcodec: map VVC
|
||||
b2a8bb1be60315b7d8afa1151cfc6a19890aa977
|
||||
|
||||
Index: modules/codec/avcodec/video.c
|
||||
--- modules/codec/avcodec/video.c.orig
|
||||
+++ modules/codec/avcodec/video.c
|
||||
@@ -486,6 +486,11 @@ static int InitVideoDecCommon( decoder_t *p_dec )
|
||||
/* ***** Output always the frames ***** */
|
||||
p_context->flags |= AV_CODEC_FLAG_OUTPUT_CORRUPT;
|
||||
|
||||
+#if LIBAVCODEC_VERSION_CHECK( 61, 03, 100 )
|
||||
+ if( p_dec->fmt_in.i_codec == VLC_CODEC_VVC )
|
||||
+ p_context->strict_std_compliance = FF_COMPLIANCE_EXPERIMENTAL;
|
||||
+#endif
|
||||
+
|
||||
i_val = var_CreateGetInteger( p_dec, "avcodec-skiploopfilter" );
|
||||
if( i_val >= 4 ) p_context->skip_loop_filter = AVDISCARD_ALL;
|
||||
else if( i_val == 3 ) p_context->skip_loop_filter = AVDISCARD_NONKEY;
|
||||
@@ -0,0 +1,19 @@
|
||||
- demux: adaptive: map VVC
|
||||
e709012f02f752279784c58e3cdd9ff3883574d4
|
||||
|
||||
Index: modules/demux/adaptive/tools/FormatNamespace.cpp
|
||||
--- modules/demux/adaptive/tools/FormatNamespace.cpp.orig
|
||||
+++ modules/demux/adaptive/tools/FormatNamespace.cpp
|
||||
@@ -148,6 +148,12 @@ void FormatNamespace::Parse(vlc_fourcc_t fcc, const st
|
||||
fmt.i_level = std::stoi(elements.at(1), nullptr, 16);
|
||||
}
|
||||
break;
|
||||
+ case MP4RA("vvc1"):
|
||||
+ case MP4RA("vvi1"):
|
||||
+ es_format_Change(&fmt, VIDEO_ES, VLC_CODEC_VVC);
|
||||
+ if(elements.size() > 0)
|
||||
+ fmt.i_profile = std::stoi(elements.at(0), nullptr, 16);
|
||||
+ break;
|
||||
case MSFCC("AVC1"):
|
||||
case MSFCC("AVCB"):
|
||||
case MSFCC("H264"):
|
||||
@@ -0,0 +1,17 @@
|
||||
- demux: mkv: add support for VVC
|
||||
36decaa0b3f54e387c1ab923332d7c956f0c6ef1
|
||||
|
||||
Index: modules/demux/mkv/matroska_segment_parse.cpp
|
||||
--- modules/demux/mkv/matroska_segment_parse.cpp.orig
|
||||
+++ modules/demux/mkv/matroska_segment_parse.cpp
|
||||
@@ -1572,6 +1572,10 @@ bool matroska_segment_c::TrackInit( mkv_track_t * p_tk
|
||||
|
||||
fill_extra_data( vars.p_tk, 0 );
|
||||
}
|
||||
+ S_CASE("V_MPEGI/ISO/VVC") {
|
||||
+ vars.p_tk->fmt.i_codec = VLC_CODEC_VVC;
|
||||
+ fill_extra_data( vars.p_tk, 0 );
|
||||
+ }
|
||||
S_CASE("V_QUICKTIME") {
|
||||
ONLY_FMT(VIDEO);
|
||||
if( vars.p_tk->i_extra_data > 4 )
|
||||
@@ -0,0 +1,50 @@
|
||||
- demux: mp4: refactor extradata copy
|
||||
249d247d895e9e730c8921b0a9b1b549ce6d0b13
|
||||
- demux: mp4: map VVC
|
||||
2790be79e54a0b4c6c036711f52275b6cf225845
|
||||
|
||||
Index: modules/demux/mp4/essetup.c
|
||||
--- modules/demux/mp4/essetup.c.orig
|
||||
+++ modules/demux/mp4/essetup.c
|
||||
@@ -35,8 +35,20 @@
|
||||
#include <assert.h>
|
||||
|
||||
|
||||
+static void CopyExtradata( const uint8_t *p_extra, size_t i_extra,
|
||||
+ es_format_t *fmt )
|
||||
+{
|
||||
+ if( i_extra > 0 && !fmt->i_extra )
|
||||
+ {
|
||||
+ fmt->p_extra = malloc( i_extra );
|
||||
+ if( i_extra )
|
||||
+ {
|
||||
+ fmt->i_extra = i_extra;
|
||||
+ memcpy( fmt->p_extra, p_extra, i_extra );
|
||||
+ }
|
||||
+ }
|
||||
+}
|
||||
|
||||
-
|
||||
static void SetupGlobalExtensions( mp4_track_t *p_track, MP4_Box_t *p_sample )
|
||||
{
|
||||
if( !p_track->fmt.i_bitrate )
|
||||
@@ -548,6 +560,19 @@ int SetupVideoES( demux_t *p_demux, mp4_track_t *p_tra
|
||||
if (p_track->fmt.i_extra <= 4)
|
||||
p_track->fmt.b_packetized = false; // force full extradata by the packetizer
|
||||
}
|
||||
+ }
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ case VLC_FOURCC( 'v', 'v', 'c', '1' ):
|
||||
+ {
|
||||
+ MP4_Box_t *p_vvcC = MP4_BoxGet( p_sample, "vvcC" );
|
||||
+ if( p_vvcC && p_vvcC->data.p_binary &&
|
||||
+ p_vvcC->data.p_binary->i_blob > 4 )
|
||||
+ {
|
||||
+ CopyExtradata( ((uint8_t *)p_vvcC->data.p_binary->p_blob) + 4,
|
||||
+ p_vvcC->data.p_binary->i_blob - 4,
|
||||
+ &p_track->fmt );
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
- demux: mp4: map VVC
|
||||
2790be79e54a0b4c6c036711f52275b6cf225845
|
||||
|
||||
Index: modules/demux/mp4/libmp4.c
|
||||
--- modules/demux/mp4/libmp4.c.orig
|
||||
+++ modules/demux/mp4/libmp4.c
|
||||
@@ -4551,6 +4551,7 @@ static const struct
|
||||
{ ATOM_av1C, MP4_ReadBox_av1C, ATOM_av01 },
|
||||
{ ATOM_avcC, MP4_ReadBox_avcC, ATOM_avc1 },
|
||||
{ ATOM_avcC, MP4_ReadBox_avcC, ATOM_avc3 },
|
||||
+ { ATOM_vvcC, MP4_ReadBox_Binary, ATOM_vvc1 },
|
||||
{ ATOM_hvcC, MP4_ReadBox_Binary, 0 },
|
||||
{ ATOM_vpcC, MP4_ReadBox_vpcC, ATOM_vp08 },
|
||||
{ ATOM_vpcC, MP4_ReadBox_vpcC, ATOM_vp09 },
|
||||
@@ -0,0 +1,34 @@
|
||||
- demux: mp4: refactor extradata copy
|
||||
249d247d895e9e730c8921b0a9b1b549ce6d0b13
|
||||
- demux: mp4: map VVC
|
||||
2790be79e54a0b4c6c036711f52275b6cf225845
|
||||
|
||||
Index: modules/demux/mp4/libmp4.h
|
||||
--- modules/demux/mp4/libmp4.h.orig
|
||||
+++ modules/demux/mp4/libmp4.h
|
||||
@@ -254,6 +254,8 @@ typedef int64_t stime_t;
|
||||
#define ATOM_av1C VLC_FOURCC( 'a', 'v', '1', 'C' )
|
||||
#define ATOM_avcC VLC_FOURCC( 'a', 'v', 'c', 'C' )
|
||||
#define ATOM_vpcC VLC_FOURCC( 'v', 'p', 'c', 'C' )
|
||||
+#define ATOM_vvc1 VLC_FOURCC( 'v', 'v', 'c', '1' )
|
||||
+#define ATOM_vvcC VLC_FOURCC( 'v', 'v', 'c', 'C' )
|
||||
#define ATOM_m4ds VLC_FOURCC( 'm', '4', 'd', 's' )
|
||||
|
||||
#define ATOM_fiel VLC_FOURCC( 'f', 'i', 'e', 'l' )
|
||||
@@ -1322,14 +1324,14 @@ typedef struct
|
||||
{
|
||||
WAVEFORMATEX Format;
|
||||
uint32_t i_extra;
|
||||
- char *p_extra;
|
||||
+ uint8_t *p_extra;
|
||||
} MP4_Box_data_WMA2_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
VLC_BITMAPINFOHEADER bmiHeader;
|
||||
uint32_t i_extra;
|
||||
- char *p_extra;
|
||||
+ uint8_t *p_extra;
|
||||
} MP4_Box_data_strf_t;
|
||||
|
||||
typedef struct
|
||||
@@ -0,0 +1,36 @@
|
||||
- demux: mp4: add missing values for object_type_indication
|
||||
2123990073760a6faa34c92cef04d84703a8944a
|
||||
- packetizer: mpeg4: fix mapping entries for HEVC/VVC
|
||||
00ee14f06457032edfd6b68959140a1bc528033a
|
||||
|
||||
Index: modules/demux/mp4/mpeg4.h
|
||||
--- modules/demux/mp4/mpeg4.h.orig
|
||||
+++ modules/demux/mp4/mpeg4.h
|
||||
@@ -38,6 +38,12 @@ static inline bool MPEG4_Codec_By_ObjectType(uint8_t o
|
||||
case 0x21: /* H.264 */
|
||||
*pi_codec = VLC_CODEC_H264;
|
||||
break;
|
||||
+ case 0x23: /* H.265 */
|
||||
+ *pi_codec = VLC_CODEC_HEVC;
|
||||
+ break;
|
||||
+ case 0x33: /* H.266 */
|
||||
+ *pi_codec = VLC_CODEC_VVC;
|
||||
+ break;
|
||||
case 0x40:
|
||||
case 0x41:
|
||||
*pi_codec = VLC_CODEC_MP4A;
|
||||
@@ -99,8 +105,14 @@ static inline bool MPEG4_Codec_By_ObjectType(uint8_t o
|
||||
case 0xac: /* Extension Substream containing only LBR */
|
||||
*pi_codec = VLC_CODEC_DTS;
|
||||
break;
|
||||
+ case 0xB1:
|
||||
+ *pi_codec = VLC_CODEC_VP9;
|
||||
+ break;
|
||||
case 0xDD:
|
||||
*pi_codec = VLC_CODEC_VORBIS;
|
||||
+ break;
|
||||
+ case 0xE1:
|
||||
+ *pi_codec = VLC_CODEC_QCELP;
|
||||
break;
|
||||
default:
|
||||
return false;
|
||||
@@ -0,0 +1,16 @@
|
||||
- demux: ts: map VVC
|
||||
2932f39baaa4e87beb053f0b0aba92be810cde0f
|
||||
|
||||
Index: modules/demux/mpeg/ts_psi.c
|
||||
--- modules/demux/mpeg/ts_psi.c.orig
|
||||
+++ modules/demux/mpeg/ts_psi.c
|
||||
@@ -1436,6 +1436,9 @@ static void PIDFillFormat( demux_t *p_demux, ts_stream
|
||||
case 0x24: /* HEVC */
|
||||
es_format_Change( fmt, VIDEO_ES, VLC_CODEC_HEVC );
|
||||
break;
|
||||
+ case 0x33: /* VVC */
|
||||
+ es_format_Change( fmt, VIDEO_ES, VLC_CODEC_VVC );
|
||||
+ break;
|
||||
case 0x42: /* CAVS (Chinese AVS) */
|
||||
es_format_Change( fmt, VIDEO_ES, VLC_CODEC_CAVS );
|
||||
break;
|
||||
@@ -0,0 +1,14 @@
|
||||
- fourcc: add VVC
|
||||
18c0e3a45baad15fed2adf9df4d1b73f9d146a27
|
||||
|
||||
Index: src/input/decoder.c
|
||||
--- src/input/decoder.c.orig
|
||||
+++ src/input/decoder.c
|
||||
@@ -510,6 +510,7 @@ static int vout_update_format( decoder_t *p_dec )
|
||||
case VLC_CODEC_HEVC:
|
||||
case VLC_CODEC_H264:
|
||||
case VLC_CODEC_DIRAC: /* FIXME valid ? */
|
||||
+ case VLC_CODEC_VVC:
|
||||
dpb_size = 18;
|
||||
break;
|
||||
case VLC_CODEC_AV1:
|
||||
@@ -0,0 +1,17 @@
|
||||
- fourcc: add VVC
|
||||
18c0e3a45baad15fed2adf9df4d1b73f9d146a27
|
||||
|
||||
Index: src/misc/fourcc_list.h
|
||||
--- src/misc/fourcc_list.h.orig
|
||||
+++ src/misc/fourcc_list.h
|
||||
@@ -226,6 +226,10 @@ static const staticentry_t p_list_video[] = {
|
||||
B(VLC_CODEC_SVQ3, "SVQ-3 (Sorenson Video v3)"),
|
||||
A("SVQ3"),
|
||||
|
||||
+ /* VVC / H.266 */
|
||||
+ B(VLC_CODEC_VVC, "MPEG-I Part3/VVC (H.266)"),
|
||||
+ A("vvc1"),
|
||||
+
|
||||
/* HEVC / H.265 */
|
||||
B(VLC_CODEC_HEVC, "MPEG-H Part2/HEVC (H.265)"),
|
||||
A("hevc"),
|
||||
Reference in New Issue
Block a user