From: Angela Stegmaier <[email protected]> HEVC support was added to v4l2 decoder plugin after 1.14.4 release. This patch cherry-picks the 2 patches needed for HEVC support from upstream to bring the support to 1.14.4.
Signed-off-by: Angela Stegmaier <[email protected]> --- Changes from v1: * Apply patches for all platforms ...v4l2-Sync-kernel-header-with-linuxtv-tree.patch | 625 +++++++++++++++++++++ ...002-v4l2videodec-Add-HEVC-decoder-support.patch | 60 ++ .../gstreamer1.0-plugins-good_1.14.4.bbappend | 4 +- 3 files changed, 688 insertions(+), 1 deletion(-) create mode 100644 meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/0001-v4l2-Sync-kernel-header-with-linuxtv-tree.patch create mode 100644 meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/0002-v4l2videodec-Add-HEVC-decoder-support.patch diff --git a/meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/0001-v4l2-Sync-kernel-header-with-linuxtv-tree.patch b/meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/0001-v4l2-Sync-kernel-header-with-linuxtv-tree.patch new file mode 100644 index 0000000..922d20e --- /dev/null +++ b/meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/0001-v4l2-Sync-kernel-header-with-linuxtv-tree.patch @@ -0,0 +1,625 @@ +From a27d242dd4f92b58e7c04cec3cd5fddcf800ab82 Mon Sep 17 00:00:00 2001 +From: Nicolas Dufresne <[email protected]> +Date: Wed, 12 Sep 2018 21:28:24 -0400 +Subject: [PATCH 1/2] v4l2: Sync kernel header with linuxtv tree + +This notably add HEVC and FWHT support, and VP8/9 profiles are now an +enumeration and their control exposed as a menu. +--- + sys/v4l2/ext/v4l2-common.h | 1 + + sys/v4l2/ext/v4l2-controls.h | 210 ++++++++++++++++++++++++++++++++----------- + sys/v4l2/ext/videodev2.h | 86 ++++++++++++------ + 3 files changed, 217 insertions(+), 80 deletions(-) + +diff --git a/sys/v4l2/ext/v4l2-common.h b/sys/v4l2/ext/v4l2-common.h +index 2a2c88a..7a2c3d9 100644 +--- a/sys/v4l2/ext/v4l2-common.h ++++ b/sys/v4l2/ext/v4l2-common.h +@@ -1,3 +1,4 @@ ++/* SPDX-License-Identifier: ((GPL-2.0+ WITH Linux-syscall-note) OR BSD-3-Clause) */ + /* + * include/linux/v4l2-common.h + * +diff --git a/sys/v4l2/ext/v4l2-controls.h b/sys/v4l2/ext/v4l2-controls.h +index 31bfc68..e4ee10e 100644 +--- a/sys/v4l2/ext/v4l2-controls.h ++++ b/sys/v4l2/ext/v4l2-controls.h +@@ -1,3 +1,4 @@ ++/* SPDX-License-Identifier: ((GPL-2.0+ WITH Linux-syscall-note) OR BSD-3-Clause) */ + /* + * Video for Linux Two controls header file + * +@@ -66,8 +67,8 @@ + /* User-class control IDs */ + + #define V4L2_CID_BASE (V4L2_CTRL_CLASS_USER | 0x900) +-#define V4L2_CID_USER_BASE V4L2_CID_BASE +-#define V4L2_CID_USER_CLASS (V4L2_CTRL_CLASS_USER | 1) ++#define V4L2_CID_USER_BASE V4L2_CID_BASE ++#define V4L2_CID_USER_CLASS (V4L2_CTRL_CLASS_USER | 1) + #define V4L2_CID_BRIGHTNESS (V4L2_CID_BASE+0) + #define V4L2_CID_CONTRAST (V4L2_CID_BASE+1) + #define V4L2_CID_SATURATION (V4L2_CID_BASE+2) +@@ -101,7 +102,7 @@ enum v4l2_power_line_frequency { + #define V4L2_CID_HUE_AUTO (V4L2_CID_BASE+25) + #define V4L2_CID_WHITE_BALANCE_TEMPERATURE (V4L2_CID_BASE+26) + #define V4L2_CID_SHARPNESS (V4L2_CID_BASE+27) +-#define V4L2_CID_BACKLIGHT_COMPENSATION (V4L2_CID_BASE+28) ++#define V4L2_CID_BACKLIGHT_COMPENSATION (V4L2_CID_BASE+28) + #define V4L2_CID_CHROMA_AGC (V4L2_CID_BASE+29) + #define V4L2_CID_COLOR_KILLER (V4L2_CID_BASE+30) + #define V4L2_CID_COLORFX (V4L2_CID_BASE+31) +@@ -187,17 +188,17 @@ enum v4l2_colorfx { + + /* The base for the imx driver controls. + * We reserve 16 controls for this driver. */ +-#define V4L2_CID_USER_IMX_BASE (V4L2_CID_USER_BASE + 0x1090) ++#define V4L2_CID_USER_IMX_BASE (V4L2_CID_USER_BASE + 0x10b0) + + /* MPEG-class control IDs */ + /* The MPEG controls are applicable to all codec controls + * and the 'MPEG' part of the define is historical */ + +-#define V4L2_CID_MPEG_BASE (V4L2_CTRL_CLASS_MPEG | 0x900) +-#define V4L2_CID_MPEG_CLASS (V4L2_CTRL_CLASS_MPEG | 1) ++#define V4L2_CID_MPEG_BASE (V4L2_CTRL_CLASS_MPEG | 0x900) ++#define V4L2_CID_MPEG_CLASS (V4L2_CTRL_CLASS_MPEG | 1) + + /* MPEG streams, specific to multiplexed streams */ +-#define V4L2_CID_MPEG_STREAM_TYPE (V4L2_CID_MPEG_BASE+0) ++#define V4L2_CID_MPEG_STREAM_TYPE (V4L2_CID_MPEG_BASE+0) + enum v4l2_mpeg_stream_type { + V4L2_MPEG_STREAM_TYPE_MPEG2_PS = 0, /* MPEG-2 program stream */ + V4L2_MPEG_STREAM_TYPE_MPEG2_TS = 1, /* MPEG-2 transport stream */ +@@ -206,26 +207,26 @@ enum v4l2_mpeg_stream_type { + V4L2_MPEG_STREAM_TYPE_MPEG1_VCD = 4, /* MPEG-1 VCD-compatible stream */ + V4L2_MPEG_STREAM_TYPE_MPEG2_SVCD = 5, /* MPEG-2 SVCD-compatible stream */ + }; +-#define V4L2_CID_MPEG_STREAM_PID_PMT (V4L2_CID_MPEG_BASE+1) +-#define V4L2_CID_MPEG_STREAM_PID_AUDIO (V4L2_CID_MPEG_BASE+2) +-#define V4L2_CID_MPEG_STREAM_PID_VIDEO (V4L2_CID_MPEG_BASE+3) +-#define V4L2_CID_MPEG_STREAM_PID_PCR (V4L2_CID_MPEG_BASE+4) +-#define V4L2_CID_MPEG_STREAM_PES_ID_AUDIO (V4L2_CID_MPEG_BASE+5) +-#define V4L2_CID_MPEG_STREAM_PES_ID_VIDEO (V4L2_CID_MPEG_BASE+6) +-#define V4L2_CID_MPEG_STREAM_VBI_FMT (V4L2_CID_MPEG_BASE+7) ++#define V4L2_CID_MPEG_STREAM_PID_PMT (V4L2_CID_MPEG_BASE+1) ++#define V4L2_CID_MPEG_STREAM_PID_AUDIO (V4L2_CID_MPEG_BASE+2) ++#define V4L2_CID_MPEG_STREAM_PID_VIDEO (V4L2_CID_MPEG_BASE+3) ++#define V4L2_CID_MPEG_STREAM_PID_PCR (V4L2_CID_MPEG_BASE+4) ++#define V4L2_CID_MPEG_STREAM_PES_ID_AUDIO (V4L2_CID_MPEG_BASE+5) ++#define V4L2_CID_MPEG_STREAM_PES_ID_VIDEO (V4L2_CID_MPEG_BASE+6) ++#define V4L2_CID_MPEG_STREAM_VBI_FMT (V4L2_CID_MPEG_BASE+7) + enum v4l2_mpeg_stream_vbi_fmt { + V4L2_MPEG_STREAM_VBI_FMT_NONE = 0, /* No VBI in the MPEG stream */ + V4L2_MPEG_STREAM_VBI_FMT_IVTV = 1, /* VBI in private packets, IVTV format */ + }; + + /* MPEG audio controls specific to multiplexed streams */ +-#define V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ (V4L2_CID_MPEG_BASE+100) ++#define V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ (V4L2_CID_MPEG_BASE+100) + enum v4l2_mpeg_audio_sampling_freq { + V4L2_MPEG_AUDIO_SAMPLING_FREQ_44100 = 0, + V4L2_MPEG_AUDIO_SAMPLING_FREQ_48000 = 1, + V4L2_MPEG_AUDIO_SAMPLING_FREQ_32000 = 2, + }; +-#define V4L2_CID_MPEG_AUDIO_ENCODING (V4L2_CID_MPEG_BASE+101) ++#define V4L2_CID_MPEG_AUDIO_ENCODING (V4L2_CID_MPEG_BASE+101) + enum v4l2_mpeg_audio_encoding { + V4L2_MPEG_AUDIO_ENCODING_LAYER_1 = 0, + V4L2_MPEG_AUDIO_ENCODING_LAYER_2 = 1, +@@ -233,7 +234,7 @@ enum v4l2_mpeg_audio_encoding { + V4L2_MPEG_AUDIO_ENCODING_AAC = 3, + V4L2_MPEG_AUDIO_ENCODING_AC3 = 4, + }; +-#define V4L2_CID_MPEG_AUDIO_L1_BITRATE (V4L2_CID_MPEG_BASE+102) ++#define V4L2_CID_MPEG_AUDIO_L1_BITRATE (V4L2_CID_MPEG_BASE+102) + enum v4l2_mpeg_audio_l1_bitrate { + V4L2_MPEG_AUDIO_L1_BITRATE_32K = 0, + V4L2_MPEG_AUDIO_L1_BITRATE_64K = 1, +@@ -250,7 +251,7 @@ enum v4l2_mpeg_audio_l1_bitrate { + V4L2_MPEG_AUDIO_L1_BITRATE_416K = 12, + V4L2_MPEG_AUDIO_L1_BITRATE_448K = 13, + }; +-#define V4L2_CID_MPEG_AUDIO_L2_BITRATE (V4L2_CID_MPEG_BASE+103) ++#define V4L2_CID_MPEG_AUDIO_L2_BITRATE (V4L2_CID_MPEG_BASE+103) + enum v4l2_mpeg_audio_l2_bitrate { + V4L2_MPEG_AUDIO_L2_BITRATE_32K = 0, + V4L2_MPEG_AUDIO_L2_BITRATE_48K = 1, +@@ -267,7 +268,7 @@ enum v4l2_mpeg_audio_l2_bitrate { + V4L2_MPEG_AUDIO_L2_BITRATE_320K = 12, + V4L2_MPEG_AUDIO_L2_BITRATE_384K = 13, + }; +-#define V4L2_CID_MPEG_AUDIO_L3_BITRATE (V4L2_CID_MPEG_BASE+104) ++#define V4L2_CID_MPEG_AUDIO_L3_BITRATE (V4L2_CID_MPEG_BASE+104) + enum v4l2_mpeg_audio_l3_bitrate { + V4L2_MPEG_AUDIO_L3_BITRATE_32K = 0, + V4L2_MPEG_AUDIO_L3_BITRATE_40K = 1, +@@ -284,32 +285,32 @@ enum v4l2_mpeg_audio_l3_bitrate { + V4L2_MPEG_AUDIO_L3_BITRATE_256K = 12, + V4L2_MPEG_AUDIO_L3_BITRATE_320K = 13, + }; +-#define V4L2_CID_MPEG_AUDIO_MODE (V4L2_CID_MPEG_BASE+105) ++#define V4L2_CID_MPEG_AUDIO_MODE (V4L2_CID_MPEG_BASE+105) + enum v4l2_mpeg_audio_mode { + V4L2_MPEG_AUDIO_MODE_STEREO = 0, + V4L2_MPEG_AUDIO_MODE_JOINT_STEREO = 1, + V4L2_MPEG_AUDIO_MODE_DUAL = 2, + V4L2_MPEG_AUDIO_MODE_MONO = 3, + }; +-#define V4L2_CID_MPEG_AUDIO_MODE_EXTENSION (V4L2_CID_MPEG_BASE+106) ++#define V4L2_CID_MPEG_AUDIO_MODE_EXTENSION (V4L2_CID_MPEG_BASE+106) + enum v4l2_mpeg_audio_mode_extension { + V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_4 = 0, + V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_8 = 1, + V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_12 = 2, + V4L2_MPEG_AUDIO_MODE_EXTENSION_BOUND_16 = 3, + }; +-#define V4L2_CID_MPEG_AUDIO_EMPHASIS (V4L2_CID_MPEG_BASE+107) ++#define V4L2_CID_MPEG_AUDIO_EMPHASIS (V4L2_CID_MPEG_BASE+107) + enum v4l2_mpeg_audio_emphasis { + V4L2_MPEG_AUDIO_EMPHASIS_NONE = 0, + V4L2_MPEG_AUDIO_EMPHASIS_50_DIV_15_uS = 1, + V4L2_MPEG_AUDIO_EMPHASIS_CCITT_J17 = 2, + }; +-#define V4L2_CID_MPEG_AUDIO_CRC (V4L2_CID_MPEG_BASE+108) ++#define V4L2_CID_MPEG_AUDIO_CRC (V4L2_CID_MPEG_BASE+108) + enum v4l2_mpeg_audio_crc { + V4L2_MPEG_AUDIO_CRC_NONE = 0, + V4L2_MPEG_AUDIO_CRC_CRC16 = 1, + }; +-#define V4L2_CID_MPEG_AUDIO_MUTE (V4L2_CID_MPEG_BASE+109) ++#define V4L2_CID_MPEG_AUDIO_MUTE (V4L2_CID_MPEG_BASE+109) + #define V4L2_CID_MPEG_AUDIO_AAC_BITRATE (V4L2_CID_MPEG_BASE+110) + #define V4L2_CID_MPEG_AUDIO_AC3_BITRATE (V4L2_CID_MPEG_BASE+111) + enum v4l2_mpeg_audio_ac3_bitrate { +@@ -345,33 +346,33 @@ enum v4l2_mpeg_audio_dec_playback { + #define V4L2_CID_MPEG_AUDIO_DEC_MULTILINGUAL_PLAYBACK (V4L2_CID_MPEG_BASE+113) + + /* MPEG video controls specific to multiplexed streams */ +-#define V4L2_CID_MPEG_VIDEO_ENCODING (V4L2_CID_MPEG_BASE+200) ++#define V4L2_CID_MPEG_VIDEO_ENCODING (V4L2_CID_MPEG_BASE+200) + enum v4l2_mpeg_video_encoding { + V4L2_MPEG_VIDEO_ENCODING_MPEG_1 = 0, + V4L2_MPEG_VIDEO_ENCODING_MPEG_2 = 1, + V4L2_MPEG_VIDEO_ENCODING_MPEG_4_AVC = 2, + }; +-#define V4L2_CID_MPEG_VIDEO_ASPECT (V4L2_CID_MPEG_BASE+201) ++#define V4L2_CID_MPEG_VIDEO_ASPECT (V4L2_CID_MPEG_BASE+201) + enum v4l2_mpeg_video_aspect { + V4L2_MPEG_VIDEO_ASPECT_1x1 = 0, + V4L2_MPEG_VIDEO_ASPECT_4x3 = 1, + V4L2_MPEG_VIDEO_ASPECT_16x9 = 2, + V4L2_MPEG_VIDEO_ASPECT_221x100 = 3, + }; +-#define V4L2_CID_MPEG_VIDEO_B_FRAMES (V4L2_CID_MPEG_BASE+202) +-#define V4L2_CID_MPEG_VIDEO_GOP_SIZE (V4L2_CID_MPEG_BASE+203) +-#define V4L2_CID_MPEG_VIDEO_GOP_CLOSURE (V4L2_CID_MPEG_BASE+204) +-#define V4L2_CID_MPEG_VIDEO_PULLDOWN (V4L2_CID_MPEG_BASE+205) +-#define V4L2_CID_MPEG_VIDEO_BITRATE_MODE (V4L2_CID_MPEG_BASE+206) ++#define V4L2_CID_MPEG_VIDEO_B_FRAMES (V4L2_CID_MPEG_BASE+202) ++#define V4L2_CID_MPEG_VIDEO_GOP_SIZE (V4L2_CID_MPEG_BASE+203) ++#define V4L2_CID_MPEG_VIDEO_GOP_CLOSURE (V4L2_CID_MPEG_BASE+204) ++#define V4L2_CID_MPEG_VIDEO_PULLDOWN (V4L2_CID_MPEG_BASE+205) ++#define V4L2_CID_MPEG_VIDEO_BITRATE_MODE (V4L2_CID_MPEG_BASE+206) + enum v4l2_mpeg_video_bitrate_mode { + V4L2_MPEG_VIDEO_BITRATE_MODE_VBR = 0, + V4L2_MPEG_VIDEO_BITRATE_MODE_CBR = 1, + }; +-#define V4L2_CID_MPEG_VIDEO_BITRATE (V4L2_CID_MPEG_BASE+207) +-#define V4L2_CID_MPEG_VIDEO_BITRATE_PEAK (V4L2_CID_MPEG_BASE+208) ++#define V4L2_CID_MPEG_VIDEO_BITRATE (V4L2_CID_MPEG_BASE+207) ++#define V4L2_CID_MPEG_VIDEO_BITRATE_PEAK (V4L2_CID_MPEG_BASE+208) + #define V4L2_CID_MPEG_VIDEO_TEMPORAL_DECIMATION (V4L2_CID_MPEG_BASE+209) +-#define V4L2_CID_MPEG_VIDEO_MUTE (V4L2_CID_MPEG_BASE+210) +-#define V4L2_CID_MPEG_VIDEO_MUTE_YUV (V4L2_CID_MPEG_BASE+211) ++#define V4L2_CID_MPEG_VIDEO_MUTE (V4L2_CID_MPEG_BASE+210) ++#define V4L2_CID_MPEG_VIDEO_MUTE_YUV (V4L2_CID_MPEG_BASE+211) + #define V4L2_CID_MPEG_VIDEO_DECODER_SLICE_INTERFACE (V4L2_CID_MPEG_BASE+212) + #define V4L2_CID_MPEG_VIDEO_DECODER_MPEG4_DEBLOCK_FILTER (V4L2_CID_MPEG_BASE+213) + #define V4L2_CID_MPEG_VIDEO_CYCLIC_INTRA_REFRESH_MB (V4L2_CID_MPEG_BASE+214) +@@ -586,17 +587,125 @@ enum v4l2_vp8_golden_frame_sel { + #define V4L2_CID_MPEG_VIDEO_VPX_MAX_QP (V4L2_CID_MPEG_BASE+508) + #define V4L2_CID_MPEG_VIDEO_VPX_I_FRAME_QP (V4L2_CID_MPEG_BASE+509) + #define V4L2_CID_MPEG_VIDEO_VPX_P_FRAME_QP (V4L2_CID_MPEG_BASE+510) +-#define V4L2_CID_MPEG_VIDEO_VPX_PROFILE (V4L2_CID_MPEG_BASE+511) ++ ++#define V4L2_CID_MPEG_VIDEO_VP8_PROFILE (V4L2_CID_MPEG_BASE+511) ++enum v4l2_mpeg_video_vp8_profile { ++ V4L2_MPEG_VIDEO_VP8_PROFILE_0 = 0, ++ V4L2_MPEG_VIDEO_VP8_PROFILE_1 = 1, ++ V4L2_MPEG_VIDEO_VP8_PROFILE_2 = 2, ++ V4L2_MPEG_VIDEO_VP8_PROFILE_3 = 3, ++}; ++/* Deprecated alias for compatibility reasons. */ ++#define V4L2_CID_MPEG_VIDEO_VPX_PROFILE V4L2_CID_MPEG_VIDEO_VP8_PROFILE ++#define V4L2_CID_MPEG_VIDEO_VP9_PROFILE (V4L2_CID_MPEG_BASE+512) ++enum v4l2_mpeg_video_vp9_profile { ++ V4L2_MPEG_VIDEO_VP9_PROFILE_0 = 0, ++ V4L2_MPEG_VIDEO_VP9_PROFILE_1 = 1, ++ V4L2_MPEG_VIDEO_VP9_PROFILE_2 = 2, ++ V4L2_MPEG_VIDEO_VP9_PROFILE_3 = 3, ++}; ++ ++/* CIDs for HEVC encoding. */ ++ ++#define V4L2_CID_MPEG_VIDEO_HEVC_MIN_QP (V4L2_CID_MPEG_BASE + 600) ++#define V4L2_CID_MPEG_VIDEO_HEVC_MAX_QP (V4L2_CID_MPEG_BASE + 601) ++#define V4L2_CID_MPEG_VIDEO_HEVC_I_FRAME_QP (V4L2_CID_MPEG_BASE + 602) ++#define V4L2_CID_MPEG_VIDEO_HEVC_P_FRAME_QP (V4L2_CID_MPEG_BASE + 603) ++#define V4L2_CID_MPEG_VIDEO_HEVC_B_FRAME_QP (V4L2_CID_MPEG_BASE + 604) ++#define V4L2_CID_MPEG_VIDEO_HEVC_HIER_QP (V4L2_CID_MPEG_BASE + 605) ++#define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_TYPE (V4L2_CID_MPEG_BASE + 606) ++enum v4l2_mpeg_video_hevc_hier_coding_type { ++ V4L2_MPEG_VIDEO_HEVC_HIERARCHICAL_CODING_B = 0, ++ V4L2_MPEG_VIDEO_HEVC_HIERARCHICAL_CODING_P = 1, ++}; ++#define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_LAYER (V4L2_CID_MPEG_BASE + 607) ++#define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L0_QP (V4L2_CID_MPEG_BASE + 608) ++#define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L1_QP (V4L2_CID_MPEG_BASE + 609) ++#define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L2_QP (V4L2_CID_MPEG_BASE + 610) ++#define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L3_QP (V4L2_CID_MPEG_BASE + 611) ++#define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L4_QP (V4L2_CID_MPEG_BASE + 612) ++#define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L5_QP (V4L2_CID_MPEG_BASE + 613) ++#define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L6_QP (V4L2_CID_MPEG_BASE + 614) ++#define V4L2_CID_MPEG_VIDEO_HEVC_PROFILE (V4L2_CID_MPEG_BASE + 615) ++enum v4l2_mpeg_video_hevc_profile { ++ V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN = 0, ++ V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN_STILL_PICTURE = 1, ++ V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN_10 = 2, ++}; ++#define V4L2_CID_MPEG_VIDEO_HEVC_LEVEL (V4L2_CID_MPEG_BASE + 616) ++enum v4l2_mpeg_video_hevc_level { ++ V4L2_MPEG_VIDEO_HEVC_LEVEL_1 = 0, ++ V4L2_MPEG_VIDEO_HEVC_LEVEL_2 = 1, ++ V4L2_MPEG_VIDEO_HEVC_LEVEL_2_1 = 2, ++ V4L2_MPEG_VIDEO_HEVC_LEVEL_3 = 3, ++ V4L2_MPEG_VIDEO_HEVC_LEVEL_3_1 = 4, ++ V4L2_MPEG_VIDEO_HEVC_LEVEL_4 = 5, ++ V4L2_MPEG_VIDEO_HEVC_LEVEL_4_1 = 6, ++ V4L2_MPEG_VIDEO_HEVC_LEVEL_5 = 7, ++ V4L2_MPEG_VIDEO_HEVC_LEVEL_5_1 = 8, ++ V4L2_MPEG_VIDEO_HEVC_LEVEL_5_2 = 9, ++ V4L2_MPEG_VIDEO_HEVC_LEVEL_6 = 10, ++ V4L2_MPEG_VIDEO_HEVC_LEVEL_6_1 = 11, ++ V4L2_MPEG_VIDEO_HEVC_LEVEL_6_2 = 12, ++}; ++#define V4L2_CID_MPEG_VIDEO_HEVC_FRAME_RATE_RESOLUTION (V4L2_CID_MPEG_BASE + 617) ++#define V4L2_CID_MPEG_VIDEO_HEVC_TIER (V4L2_CID_MPEG_BASE + 618) ++enum v4l2_mpeg_video_hevc_tier { ++ V4L2_MPEG_VIDEO_HEVC_TIER_MAIN = 0, ++ V4L2_MPEG_VIDEO_HEVC_TIER_HIGH = 1, ++}; ++#define V4L2_CID_MPEG_VIDEO_HEVC_MAX_PARTITION_DEPTH (V4L2_CID_MPEG_BASE + 619) ++#define V4L2_CID_MPEG_VIDEO_HEVC_LOOP_FILTER_MODE (V4L2_CID_MPEG_BASE + 620) ++enum v4l2_cid_mpeg_video_hevc_loop_filter_mode { ++ V4L2_MPEG_VIDEO_HEVC_LOOP_FILTER_MODE_DISABLED = 0, ++ V4L2_MPEG_VIDEO_HEVC_LOOP_FILTER_MODE_ENABLED = 1, ++ V4L2_MPEG_VIDEO_HEVC_LOOP_FILTER_MODE_DISABLED_AT_SLICE_BOUNDARY = 2, ++}; ++#define V4L2_CID_MPEG_VIDEO_HEVC_LF_BETA_OFFSET_DIV2 (V4L2_CID_MPEG_BASE + 621) ++#define V4L2_CID_MPEG_VIDEO_HEVC_LF_TC_OFFSET_DIV2 (V4L2_CID_MPEG_BASE + 622) ++#define V4L2_CID_MPEG_VIDEO_HEVC_REFRESH_TYPE (V4L2_CID_MPEG_BASE + 623) ++enum v4l2_cid_mpeg_video_hevc_refresh_type { ++ V4L2_MPEG_VIDEO_HEVC_REFRESH_NONE = 0, ++ V4L2_MPEG_VIDEO_HEVC_REFRESH_CRA = 1, ++ V4L2_MPEG_VIDEO_HEVC_REFRESH_IDR = 2, ++}; ++#define V4L2_CID_MPEG_VIDEO_HEVC_REFRESH_PERIOD (V4L2_CID_MPEG_BASE + 624) ++#define V4L2_CID_MPEG_VIDEO_HEVC_LOSSLESS_CU (V4L2_CID_MPEG_BASE + 625) ++#define V4L2_CID_MPEG_VIDEO_HEVC_CONST_INTRA_PRED (V4L2_CID_MPEG_BASE + 626) ++#define V4L2_CID_MPEG_VIDEO_HEVC_WAVEFRONT (V4L2_CID_MPEG_BASE + 627) ++#define V4L2_CID_MPEG_VIDEO_HEVC_GENERAL_PB (V4L2_CID_MPEG_BASE + 628) ++#define V4L2_CID_MPEG_VIDEO_HEVC_TEMPORAL_ID (V4L2_CID_MPEG_BASE + 629) ++#define V4L2_CID_MPEG_VIDEO_HEVC_STRONG_SMOOTHING (V4L2_CID_MPEG_BASE + 630) ++#define V4L2_CID_MPEG_VIDEO_HEVC_MAX_NUM_MERGE_MV_MINUS1 (V4L2_CID_MPEG_BASE + 631) ++#define V4L2_CID_MPEG_VIDEO_HEVC_INTRA_PU_SPLIT (V4L2_CID_MPEG_BASE + 632) ++#define V4L2_CID_MPEG_VIDEO_HEVC_TMV_PREDICTION (V4L2_CID_MPEG_BASE + 633) ++#define V4L2_CID_MPEG_VIDEO_HEVC_WITHOUT_STARTCODE (V4L2_CID_MPEG_BASE + 634) ++#define V4L2_CID_MPEG_VIDEO_HEVC_SIZE_OF_LENGTH_FIELD (V4L2_CID_MPEG_BASE + 635) ++enum v4l2_cid_mpeg_video_hevc_size_of_length_field { ++ V4L2_MPEG_VIDEO_HEVC_SIZE_0 = 0, ++ V4L2_MPEG_VIDEO_HEVC_SIZE_1 = 1, ++ V4L2_MPEG_VIDEO_HEVC_SIZE_2 = 2, ++ V4L2_MPEG_VIDEO_HEVC_SIZE_4 = 3, ++}; ++#define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L0_BR (V4L2_CID_MPEG_BASE + 636) ++#define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L1_BR (V4L2_CID_MPEG_BASE + 637) ++#define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L2_BR (V4L2_CID_MPEG_BASE + 638) ++#define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L3_BR (V4L2_CID_MPEG_BASE + 639) ++#define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L4_BR (V4L2_CID_MPEG_BASE + 640) ++#define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L5_BR (V4L2_CID_MPEG_BASE + 641) ++#define V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L6_BR (V4L2_CID_MPEG_BASE + 642) ++#define V4L2_CID_MPEG_VIDEO_REF_NUMBER_FOR_PFRAMES (V4L2_CID_MPEG_BASE + 643) ++#define V4L2_CID_MPEG_VIDEO_PREPEND_SPSPPS_TO_IDR (V4L2_CID_MPEG_BASE + 644) + + /* MPEG-class control IDs specific to the CX2341x driver as defined by V4L2 */ +-#define V4L2_CID_MPEG_CX2341X_BASE (V4L2_CTRL_CLASS_MPEG | 0x1000) +-#define V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE (V4L2_CID_MPEG_CX2341X_BASE+0) ++#define V4L2_CID_MPEG_CX2341X_BASE (V4L2_CTRL_CLASS_MPEG | 0x1000) ++#define V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE (V4L2_CID_MPEG_CX2341X_BASE+0) + enum v4l2_mpeg_cx2341x_video_spatial_filter_mode { + V4L2_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE_MANUAL = 0, + V4L2_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE_AUTO = 1, + }; +-#define V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER (V4L2_CID_MPEG_CX2341X_BASE+1) +-#define V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE (V4L2_CID_MPEG_CX2341X_BASE+2) ++#define V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER (V4L2_CID_MPEG_CX2341X_BASE+1) ++#define V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE (V4L2_CID_MPEG_CX2341X_BASE+2) + enum v4l2_mpeg_cx2341x_video_luma_spatial_filter_type { + V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_OFF = 0, + V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_1D_HOR = 1, +@@ -604,18 +713,18 @@ enum v4l2_mpeg_cx2341x_video_luma_spatial_filter_type { + V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_2D_HV_SEPARABLE = 3, + V4L2_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE_2D_SYM_NON_SEPARABLE = 4, + }; +-#define V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE (V4L2_CID_MPEG_CX2341X_BASE+3) ++#define V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE (V4L2_CID_MPEG_CX2341X_BASE+3) + enum v4l2_mpeg_cx2341x_video_chroma_spatial_filter_type { + V4L2_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE_OFF = 0, + V4L2_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE_1D_HOR = 1, + }; +-#define V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE (V4L2_CID_MPEG_CX2341X_BASE+4) ++#define V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE (V4L2_CID_MPEG_CX2341X_BASE+4) + enum v4l2_mpeg_cx2341x_video_temporal_filter_mode { + V4L2_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE_MANUAL = 0, + V4L2_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE_AUTO = 1, + }; +-#define V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER (V4L2_CID_MPEG_CX2341X_BASE+5) +-#define V4L2_CID_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE (V4L2_CID_MPEG_CX2341X_BASE+6) ++#define V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER (V4L2_CID_MPEG_CX2341X_BASE+5) ++#define V4L2_CID_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE (V4L2_CID_MPEG_CX2341X_BASE+6) + enum v4l2_mpeg_cx2341x_video_median_filter_type { + V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_OFF = 0, + V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_HOR = 1, +@@ -623,11 +732,11 @@ enum v4l2_mpeg_cx2341x_video_median_filter_type { + V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_HOR_VERT = 3, + V4L2_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE_DIAG = 4, + }; +-#define V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_BOTTOM (V4L2_CID_MPEG_CX2341X_BASE+7) +-#define V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_TOP (V4L2_CID_MPEG_CX2341X_BASE+8) ++#define V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_BOTTOM (V4L2_CID_MPEG_CX2341X_BASE+7) ++#define V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_TOP (V4L2_CID_MPEG_CX2341X_BASE+8) + #define V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_BOTTOM (V4L2_CID_MPEG_CX2341X_BASE+9) +-#define V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_TOP (V4L2_CID_MPEG_CX2341X_BASE+10) +-#define V4L2_CID_MPEG_CX2341X_STREAM_INSERT_NAV_PACKETS (V4L2_CID_MPEG_CX2341X_BASE+11) ++#define V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_TOP (V4L2_CID_MPEG_CX2341X_BASE+10) ++#define V4L2_CID_MPEG_CX2341X_STREAM_INSERT_NAV_PACKETS (V4L2_CID_MPEG_CX2341X_BASE+11) + + /* MPEG-class control IDs specific to the Samsung MFC 5.1 driver as defined by V4L2 */ + #define V4L2_CID_MPEG_MFC51_BASE (V4L2_CTRL_CLASS_MPEG | 0x1100) +@@ -656,11 +765,10 @@ enum v4l2_mpeg_mfc51_video_force_frame_type { + #define V4L2_CID_MPEG_MFC51_VIDEO_H264_ADAPTIVE_RC_STATIC (V4L2_CID_MPEG_MFC51_BASE+53) + #define V4L2_CID_MPEG_MFC51_VIDEO_H264_NUM_REF_PIC_FOR_P (V4L2_CID_MPEG_MFC51_BASE+54) + +- + /* Camera class control IDs */ + +-#define V4L2_CID_CAMERA_CLASS_BASE (V4L2_CTRL_CLASS_CAMERA | 0x900) +-#define V4L2_CID_CAMERA_CLASS (V4L2_CTRL_CLASS_CAMERA | 1) ++#define V4L2_CID_CAMERA_CLASS_BASE (V4L2_CTRL_CLASS_CAMERA | 0x900) ++#define V4L2_CID_CAMERA_CLASS (V4L2_CTRL_CLASS_CAMERA | 1) + + #define V4L2_CID_EXPOSURE_AUTO (V4L2_CID_CAMERA_CLASS_BASE+1) + enum v4l2_exposure_auto_type { +diff --git a/sys/v4l2/ext/videodev2.h b/sys/v4l2/ext/videodev2.h +index 59e1f3d..d478d89 100644 +--- a/sys/v4l2/ext/videodev2.h ++++ b/sys/v4l2/ext/videodev2.h +@@ -1,3 +1,4 @@ ++/* SPDX-License-Identifier: ((GPL-2.0+ WITH Linux-syscall-note) OR BSD-3-Clause) */ + /* + * Video for Linux Two header file + * +@@ -104,14 +105,14 @@ enum v4l2_field { + transmitted first */ + }; + #define V4L2_FIELD_HAS_TOP(field) \ +- ((field) == V4L2_FIELD_TOP ||\ ++ ((field) == V4L2_FIELD_TOP ||\ + (field) == V4L2_FIELD_INTERLACED ||\ + (field) == V4L2_FIELD_INTERLACED_TB ||\ + (field) == V4L2_FIELD_INTERLACED_BT ||\ + (field) == V4L2_FIELD_SEQ_TB ||\ + (field) == V4L2_FIELD_SEQ_BT) + #define V4L2_FIELD_HAS_BOTTOM(field) \ +- ((field) == V4L2_FIELD_BOTTOM ||\ ++ ((field) == V4L2_FIELD_BOTTOM ||\ + (field) == V4L2_FIELD_INTERLACED ||\ + (field) == V4L2_FIELD_INTERLACED_TB ||\ + (field) == V4L2_FIELD_INTERLACED_BT ||\ +@@ -464,12 +465,12 @@ struct v4l2_capability { + * V I D E O I M A G E F O R M A T + */ + struct v4l2_pix_format { +- __u32 width; ++ __u32 width; + __u32 height; + __u32 pixelformat; + __u32 field; /* enum v4l2_field */ +- __u32 bytesperline; /* for padding, zero if unused */ +- __u32 sizeimage; ++ __u32 bytesperline; /* for padding, zero if unused */ ++ __u32 sizeimage; + __u32 colorspace; /* enum v4l2_colorspace */ + __u32 priv; /* private data, depends on pixelformat */ + __u32 flags; /* format flags (V4L2_PIX_FMT_FLAG_*) */ +@@ -519,6 +520,7 @@ struct v4l2_pix_format { + + /* Grey bit-packed formats */ + #define V4L2_PIX_FMT_Y10BPACK v4l2_fourcc('Y', '1', '0', 'B') /* 10 Greyscale bit-packed */ ++#define V4L2_PIX_FMT_Y10P v4l2_fourcc('Y', '1', '0', 'P') /* 10 Greyscale, MIPI RAW10 packed */ + + /* Palette formats */ + #define V4L2_PIX_FMT_PAL8 v4l2_fourcc('P', 'A', 'L', '8') /* 8 8-bit palette */ +@@ -601,6 +603,16 @@ struct v4l2_pix_format { + #define V4L2_PIX_FMT_SGBRG12 v4l2_fourcc('G', 'B', '1', '2') /* 12 GBGB.. RGRG.. */ + #define V4L2_PIX_FMT_SGRBG12 v4l2_fourcc('B', 'A', '1', '2') /* 12 GRGR.. BGBG.. */ + #define V4L2_PIX_FMT_SRGGB12 v4l2_fourcc('R', 'G', '1', '2') /* 12 RGRG.. GBGB.. */ ++ /* 12bit raw bayer packed, 6 bytes for every 4 pixels */ ++#define V4L2_PIX_FMT_SBGGR12P v4l2_fourcc('p', 'B', 'C', 'C') ++#define V4L2_PIX_FMT_SGBRG12P v4l2_fourcc('p', 'G', 'C', 'C') ++#define V4L2_PIX_FMT_SGRBG12P v4l2_fourcc('p', 'g', 'C', 'C') ++#define V4L2_PIX_FMT_SRGGB12P v4l2_fourcc('p', 'R', 'C', 'C') ++ /* 14bit raw bayer packed, 7 bytes for every 4 pixels */ ++#define V4L2_PIX_FMT_SBGGR14P v4l2_fourcc('p', 'B', 'E', 'E') ++#define V4L2_PIX_FMT_SGBRG14P v4l2_fourcc('p', 'G', 'E', 'E') ++#define V4L2_PIX_FMT_SGRBG14P v4l2_fourcc('p', 'g', 'E', 'E') ++#define V4L2_PIX_FMT_SRGGB14P v4l2_fourcc('p', 'R', 'E', 'E') + #define V4L2_PIX_FMT_SBGGR16 v4l2_fourcc('B', 'Y', 'R', '2') /* 16 BGBG.. GRGR.. */ + #define V4L2_PIX_FMT_SGBRG16 v4l2_fourcc('G', 'B', '1', '6') /* 16 GBGB.. RGRG.. */ + #define V4L2_PIX_FMT_SGRBG16 v4l2_fourcc('G', 'R', '1', '6') /* 16 GRGR.. BGBG.. */ +@@ -627,6 +639,8 @@ struct v4l2_pix_format { + #define V4L2_PIX_FMT_VC1_ANNEX_L v4l2_fourcc('V', 'C', '1', 'L') /* SMPTE 421M Annex L compliant stream */ + #define V4L2_PIX_FMT_VP8 v4l2_fourcc('V', 'P', '8', '0') /* VP8 */ + #define V4L2_PIX_FMT_VP9 v4l2_fourcc('V', 'P', '9', '0') /* VP9 */ ++#define V4L2_PIX_FMT_HEVC v4l2_fourcc('H', 'E', 'V', 'C') /* HEVC aka H.265 */ ++#define V4L2_PIX_FMT_FWHT v4l2_fourcc('F', 'W', 'H', 'T') /* Fast Walsh Hadamard Transform (vicodec) */ + + /* Vendor-specific formats */ + #define V4L2_PIX_FMT_CPIA1 v4l2_fourcc('C', 'P', 'I', 'A') /* cpia1 YUV */ +@@ -661,6 +675,12 @@ struct v4l2_pix_format { + #define V4L2_PIX_FMT_MT21C v4l2_fourcc('M', 'T', '2', '1') /* Mediatek compressed block mode */ + #define V4L2_PIX_FMT_INZI v4l2_fourcc('I', 'N', 'Z', 'I') /* Intel Planar Greyscale 10-bit and Depth 16-bit */ + ++/* 10bit raw bayer packed, 32 bytes for every 25 pixels, last LSB 6 bits unused */ ++#define V4L2_PIX_FMT_IPU3_SBGGR10 v4l2_fourcc('i', 'p', '3', 'b') /* IPU3 packed 10-bit BGGR bayer */ ++#define V4L2_PIX_FMT_IPU3_SGBRG10 v4l2_fourcc('i', 'p', '3', 'g') /* IPU3 packed 10-bit GBRG bayer */ ++#define V4L2_PIX_FMT_IPU3_SGRBG10 v4l2_fourcc('i', 'p', '3', 'G') /* IPU3 packed 10-bit GRBG bayer */ ++#define V4L2_PIX_FMT_IPU3_SRGGB10 v4l2_fourcc('i', 'p', '3', 'r') /* IPU3 packed 10-bit RGGB bayer */ ++ + /* SDR formats - used only for Software Defined Radio devices */ + #define V4L2_SDR_FMT_CU8 v4l2_fourcc('C', 'U', '0', '8') /* IQ u8 */ + #define V4L2_SDR_FMT_CU16LE v4l2_fourcc('C', 'U', '1', '6') /* IQ u16le */ +@@ -680,6 +700,8 @@ struct v4l2_pix_format { + /* Meta-data formats */ + #define V4L2_META_FMT_VSP1_HGO v4l2_fourcc('V', 'S', 'P', 'H') /* R-Car VSP1 1-D Histogram */ + #define V4L2_META_FMT_VSP1_HGT v4l2_fourcc('V', 'S', 'P', 'T') /* R-Car VSP1 2-D Histogram */ ++#define V4L2_META_FMT_UVC v4l2_fourcc('U', 'V', 'C', 'H') /* UVC Payload Header metadata */ ++#define V4L2_META_FMT_D4XX v4l2_fourcc('D', '4', 'X', 'X') /* D4XX Payload Header metadata */ + + /* priv field value to indicates that subsequent fields are valid. */ + #define V4L2_PIX_FMT_PRIV_MAGIC 0xfeedcafe +@@ -1158,7 +1180,7 @@ typedef __u64 v4l2_std_id; + V4L2_STD_NTSC_M_JP |\ + V4L2_STD_NTSC_M_KR) + /* Secam macros */ +-#define V4L2_STD_SECAM_DK (V4L2_STD_SECAM_D |\ ++#define V4L2_STD_SECAM_DK (V4L2_STD_SECAM_D |\ + V4L2_STD_SECAM_K |\ + V4L2_STD_SECAM_K1) + /* All Secam Standards */ +@@ -1239,7 +1261,7 @@ struct v4l2_standard { + }; + + /* +- * D V B T T I M I N G S ++ * D V B T T I M I N G S + */ + + /** struct v4l2_bt_timings - BT.656/BT.1120 timing data +@@ -1377,6 +1399,13 @@ struct v4l2_bt_timings { + * InfoFrame). + */ + #define V4L2_DV_FL_HAS_HDMI_VIC (1 << 8) ++/* ++ * CEA-861 specific: only valid for video receivers. ++ * If set, then HW can detect the difference between regular FPS and ++ * 1000/1001 FPS. Note: This flag is only valid for HDMI VIC codes with ++ * the V4L2_DV_FL_CAN_REDUCE_FPS flag set. ++ */ ++#define V4L2_DV_FL_CAN_DETECT_REDUCED_FPS (1 << 9) + + /* A few useful defines to calculate the total blanking and frame sizes */ + #define V4L2_DV_BT_BLANKING_WIDTH(bt) \ +@@ -1580,7 +1609,7 @@ struct v4l2_ext_controls { + struct v4l2_ext_control *controls; + }; + +-#define V4L2_CTRL_ID_MASK (0x0fffffff) ++#define V4L2_CTRL_ID_MASK (0x0fffffff) + #ifndef __KERNEL__ + #define V4L2_CTRL_ID2CLASS(id) ((id) & 0x0fff0000UL) + #endif +@@ -1652,11 +1681,11 @@ struct v4l2_querymenu { + /* Control flags */ + #define V4L2_CTRL_FLAG_DISABLED 0x0001 + #define V4L2_CTRL_FLAG_GRABBED 0x0002 +-#define V4L2_CTRL_FLAG_READ_ONLY 0x0004 +-#define V4L2_CTRL_FLAG_UPDATE 0x0008 +-#define V4L2_CTRL_FLAG_INACTIVE 0x0010 +-#define V4L2_CTRL_FLAG_SLIDER 0x0020 +-#define V4L2_CTRL_FLAG_WRITE_ONLY 0x0040 ++#define V4L2_CTRL_FLAG_READ_ONLY 0x0004 ++#define V4L2_CTRL_FLAG_UPDATE 0x0008 ++#define V4L2_CTRL_FLAG_INACTIVE 0x0010 ++#define V4L2_CTRL_FLAG_SLIDER 0x0020 ++#define V4L2_CTRL_FLAG_WRITE_ONLY 0x0040 + #define V4L2_CTRL_FLAG_VOLATILE 0x0080 + #define V4L2_CTRL_FLAG_HAS_PAYLOAD 0x0100 + #define V4L2_CTRL_FLAG_EXECUTE_ON_WRITE 0x0200 +@@ -1770,21 +1799,21 @@ struct v4l2_hw_freq_seek { + */ + + struct v4l2_rds_data { +- __u8 lsb; +- __u8 msb; +- __u8 block; ++ __u8 lsb; ++ __u8 msb; ++ __u8 block; + } __attribute__ ((packed)); + +-#define V4L2_RDS_BLOCK_MSK 0x7 +-#define V4L2_RDS_BLOCK_A 0 +-#define V4L2_RDS_BLOCK_B 1 +-#define V4L2_RDS_BLOCK_C 2 +-#define V4L2_RDS_BLOCK_D 3 +-#define V4L2_RDS_BLOCK_C_ALT 4 +-#define V4L2_RDS_BLOCK_INVALID 7 ++#define V4L2_RDS_BLOCK_MSK 0x7 ++#define V4L2_RDS_BLOCK_A 0 ++#define V4L2_RDS_BLOCK_B 1 ++#define V4L2_RDS_BLOCK_C 2 ++#define V4L2_RDS_BLOCK_D 3 ++#define V4L2_RDS_BLOCK_C_ALT 4 ++#define V4L2_RDS_BLOCK_INVALID 7 + + #define V4L2_RDS_BLOCK_CORRECTED 0x40 +-#define V4L2_RDS_BLOCK_ERROR 0x80 ++#define V4L2_RDS_BLOCK_ERROR 0x80 + + /* + * A U D I O +@@ -2294,7 +2323,6 @@ struct v4l2_create_buffers { + * + */ + #define VIDIOC_QUERYCAP _IOR('V', 0, struct v4l2_capability) +-#define VIDIOC_RESERVED _IO('V', 1) + #define VIDIOC_ENUM_FMT _IOWR('V', 2, struct v4l2_fmtdesc) + #define VIDIOC_G_FMT _IOWR('V', 4, struct v4l2_format) + #define VIDIOC_S_FMT _IOWR('V', 5, struct v4l2_format) +@@ -2340,8 +2368,8 @@ struct v4l2_create_buffers { + #define VIDIOC_S_CROP _IOW('V', 60, struct v4l2_crop) + #define VIDIOC_G_JPEGCOMP _IOR('V', 61, struct v4l2_jpegcompression) + #define VIDIOC_S_JPEGCOMP _IOW('V', 62, struct v4l2_jpegcompression) +-#define VIDIOC_QUERYSTD _IOR('V', 63, v4l2_std_id) +-#define VIDIOC_TRY_FMT _IOWR('V', 64, struct v4l2_format) ++#define VIDIOC_QUERYSTD _IOR('V', 63, v4l2_std_id) ++#define VIDIOC_TRY_FMT _IOWR('V', 64, struct v4l2_format) + #define VIDIOC_ENUMAUDIO _IOWR('V', 65, struct v4l2_audio) + #define VIDIOC_ENUMAUDOUT _IOWR('V', 66, struct v4l2_audioout) + #define VIDIOC_G_PRIORITY _IOR('V', 67, __u32) /* enum v4l2_priority */ +@@ -2362,8 +2390,8 @@ struct v4l2_create_buffers { + * Only implemented if CONFIG_VIDEO_ADV_DEBUG is defined. + * You must be root to use these ioctls. Never use these in applications! + */ +-#define VIDIOC_DBG_S_REGISTER _IOW('V', 79, struct v4l2_dbg_register) +-#define VIDIOC_DBG_G_REGISTER _IOWR('V', 80, struct v4l2_dbg_register) ++#define VIDIOC_DBG_S_REGISTER _IOW('V', 79, struct v4l2_dbg_register) ++#define VIDIOC_DBG_G_REGISTER _IOWR('V', 80, struct v4l2_dbg_register) + + #define VIDIOC_S_HW_FREQ_SEEK _IOW('V', 82, struct v4l2_hw_freq_seek) + #define VIDIOC_S_DV_TIMINGS _IOWR('V', 87, struct v4l2_dv_timings) +-- +1.9.1 + diff --git a/meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/0002-v4l2videodec-Add-HEVC-decoder-support.patch b/meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/0002-v4l2videodec-Add-HEVC-decoder-support.patch new file mode 100644 index 0000000..ab6404c --- /dev/null +++ b/meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/0002-v4l2videodec-Add-HEVC-decoder-support.patch @@ -0,0 +1,60 @@ +From 70982aa13af7c7cb571d253706bc1458336c20a1 Mon Sep 17 00:00:00 2001 +From: Song Bing <[email protected]> +Date: Thu, 13 Sep 2018 03:16:32 +0000 +Subject: [PATCH 2/2] v4l2videodec: Add HEVC decoder support + +https://bugzilla.gnome.org/show_bug.cgi?id=771686 +--- + sys/v4l2/gstv4l2object.c | 8 ++++++++ + sys/v4l2/gstv4l2videodec.c | 2 ++ + 2 files changed, 10 insertions(+) + +diff --git a/sys/v4l2/gstv4l2object.c b/sys/v4l2/gstv4l2object.c +index 211f835..c32608c 100644 +--- a/sys/v4l2/gstv4l2object.c ++++ b/sys/v4l2/gstv4l2object.c +@@ -171,6 +171,7 @@ static const GstV4L2FormatDesc gst_v4l2_formats[] = { + {V4L2_PIX_FMT_H264, FALSE, GST_V4L2_CODEC}, + {V4L2_PIX_FMT_H264_NO_SC, FALSE, GST_V4L2_CODEC}, + {V4L2_PIX_FMT_H264_MVC, FALSE, GST_V4L2_CODEC}, ++ {V4L2_PIX_FMT_HEVC, FALSE, GST_V4L2_CODEC}, + {V4L2_PIX_FMT_H263, FALSE, GST_V4L2_CODEC}, + {V4L2_PIX_FMT_MPEG1, FALSE, GST_V4L2_CODEC}, + {V4L2_PIX_FMT_MPEG2, FALSE, GST_V4L2_CODEC}, +@@ -1433,6 +1434,11 @@ gst_v4l2_object_v4l2fourcc_to_bare_struct (guint32 fourcc) + "stream-format", G_TYPE_STRING, "avc", "alignment", + G_TYPE_STRING, "au", NULL); + break; ++ case V4L2_PIX_FMT_HEVC: /* H.265 */ ++ structure = gst_structure_new ("video/x-h265", ++ "stream-format", G_TYPE_STRING, "byte-stream", "alignment", ++ G_TYPE_STRING, "au", NULL); ++ break; + case V4L2_PIX_FMT_VC1_ANNEX_G: + case V4L2_PIX_FMT_VC1_ANNEX_L: + structure = gst_structure_new ("video/x-wmv", +@@ -1809,6 +1815,8 @@ gst_v4l2_object_get_caps_info (GstV4l2Object * v4l2object, GstCaps * caps, + fourcc = V4L2_PIX_FMT_H264_NO_SC; + else + fourcc = V4L2_PIX_FMT_H264; ++ } else if (g_str_equal (mimetype, "video/x-h265")) { ++ fourcc = V4L2_PIX_FMT_HEVC; + } else if (g_str_equal (mimetype, "video/x-vp8")) { + fourcc = V4L2_PIX_FMT_VP8; + } else if (g_str_equal (mimetype, "video/x-vp9")) { +diff --git a/sys/v4l2/gstv4l2videodec.c b/sys/v4l2/gstv4l2videodec.c +index 838ebff..ece20bd 100644 +--- a/sys/v4l2/gstv4l2videodec.c ++++ b/sys/v4l2/gstv4l2videodec.c +@@ -1083,6 +1083,8 @@ G_STMT_START { \ + SET_META ("H263"); + } else if (gst_structure_has_name (s, "video/x-h264")) { + SET_META ("H264"); ++ } else if (gst_structure_has_name (s, "video/x-h265")) { ++ SET_META ("H265"); + } else if (gst_structure_has_name (s, "video/x-wmv")) { + SET_META ("VC1"); + } else if (gst_structure_has_name (s, "video/x-vp8")) { +-- +1.9.1 + diff --git a/meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.14.4.bbappend b/meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.14.4.bbappend index edffa28..e262424 100644 --- a/meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.14.4.bbappend +++ b/meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.14.4.bbappend @@ -1,8 +1,10 @@ -PR_append = ".arago0" +PR_append = ".arago1" FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" SRC_URI += " \ file://0001-v4l2src-Increase-minimum-num-buffers-by-3.patch \ file://0002-v4l2src-Use-generic-dmabuf-import-in-v4l2src.patch \ + file://0001-v4l2-Sync-kernel-header-with-linuxtv-tree.patch \ + file://0002-v4l2videodec-Add-HEVC-decoder-support.patch \ " -- 1.9.1 _______________________________________________ meta-arago mailing list [email protected] http://arago-project.org/cgi-bin/mailman/listinfo/meta-arago
