video: driver: Add support to advanced bitrate ctrls
Add support to below properties: - HFI_PROP_BITRATE_BOOST - HFI_PROP_CONTENT_ADAPTIVE_CODING - HFI_PROP_MAINTAIN_MIN_QUALITY - HFI_PROP_VBV_DELAY - HFI_PROP_TOTAL_PEAK_BITRATE - HFI_PROP_BITRATE_LAYERx. Change-Id: I1072f97c7c202c7f4fc38c26e0ab9274ae06fce0 Signed-off-by: Akshata Sahukar <asahukar@codeaurora.org>
This commit is contained in:
@@ -19,6 +19,7 @@
|
|||||||
#define MIN_CHROMA_QP_OFFSET -12
|
#define MIN_CHROMA_QP_OFFSET -12
|
||||||
#define MAX_CHROMA_QP_OFFSET 0
|
#define MAX_CHROMA_QP_OFFSET 0
|
||||||
#define MAX_BITRATE 220000000
|
#define MAX_BITRATE 220000000
|
||||||
|
#define DEFAULT_BITRATE 20000000
|
||||||
#define MIN_QP_10BIT -12
|
#define MIN_QP_10BIT -12
|
||||||
#define MIN_QP_8BIT 0
|
#define MIN_QP_8BIT 0
|
||||||
#define MAX_QP 51
|
#define MAX_QP 51
|
||||||
@@ -308,12 +309,12 @@ static struct msm_platform_inst_capability instance_data_waipio[] = {
|
|||||||
* Dec: there's no use of Bitrate cap
|
* Dec: there's no use of Bitrate cap
|
||||||
*/
|
*/
|
||||||
{BIT_RATE, ENC, H264|HEVC,
|
{BIT_RATE, ENC, H264|HEVC,
|
||||||
1, 220000000, 1, 20000000,
|
1, MAX_BITRATE, 1, DEFAULT_BITRATE,
|
||||||
V4L2_CID_MPEG_VIDEO_BITRATE,
|
V4L2_CID_MPEG_VIDEO_BITRATE,
|
||||||
HFI_PROP_TOTAL_BITRATE,
|
HFI_PROP_TOTAL_BITRATE,
|
||||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED,
|
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED,
|
||||||
{0}, {0},
|
{ENH_LAYER_COUNT, BITRATE_MODE}, {PEAK_BITRATE},
|
||||||
NULL, msm_vidc_set_u32},
|
msm_vidc_adjust_bitrate, msm_vidc_set_bitrate},
|
||||||
|
|
||||||
{BITRATE_MODE, ENC, H264,
|
{BITRATE_MODE, ENC, H264,
|
||||||
V4L2_MPEG_VIDEO_BITRATE_MODE_VBR,
|
V4L2_MPEG_VIDEO_BITRATE_MODE_VBR,
|
||||||
@@ -326,7 +327,8 @@ static struct msm_platform_inst_capability instance_data_waipio[] = {
|
|||||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU,
|
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU,
|
||||||
{0},
|
{0},
|
||||||
{LTR_COUNT, IR_RANDOM, TIME_DELTA_BASED_RC, I_FRAME_QP,
|
{LTR_COUNT, IR_RANDOM, TIME_DELTA_BASED_RC, I_FRAME_QP,
|
||||||
ENH_LAYER_COUNT},
|
ENH_LAYER_COUNT, BIT_RATE, CONTENT_ADAPTIVE_CODING,
|
||||||
|
BITRATE_BOOST, MIN_QUALITY, VBV_DELAY, PEAK_BITRATE},
|
||||||
msm_vidc_adjust_bitrate_mode, msm_vidc_set_u32_enum},
|
msm_vidc_adjust_bitrate_mode, msm_vidc_set_u32_enum},
|
||||||
|
|
||||||
{BITRATE_MODE, ENC, HEVC,
|
{BITRATE_MODE, ENC, HEVC,
|
||||||
@@ -340,8 +342,11 @@ static struct msm_platform_inst_capability instance_data_waipio[] = {
|
|||||||
HFI_PROP_RATE_CONTROL,
|
HFI_PROP_RATE_CONTROL,
|
||||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU,
|
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU,
|
||||||
{0},
|
{0},
|
||||||
{LTR_COUNT, IR_RANDOM, TIME_DELTA_BASED_RC,
|
{LTR_COUNT, IR_RANDOM, TIME_DELTA_BASED_RC, I_FRAME_QP,
|
||||||
I_FRAME_QP, CONSTANT_QUALITY, ENH_LAYER_COUNT},
|
CONSTANT_QUALITY, ENH_LAYER_COUNT,
|
||||||
|
CONTENT_ADAPTIVE_CODING, BIT_RATE,
|
||||||
|
BITRATE_BOOST, MIN_QUALITY, VBV_DELAY,
|
||||||
|
PEAK_BITRATE},
|
||||||
msm_vidc_adjust_bitrate_mode, msm_vidc_set_u32_enum},
|
msm_vidc_adjust_bitrate_mode, msm_vidc_set_u32_enum},
|
||||||
|
|
||||||
{LOSSLESS, ENC, HEVC|HEIC,
|
{LOSSLESS, ENC, HEVC|HEIC,
|
||||||
@@ -496,17 +501,49 @@ static struct msm_platform_inst_capability instance_data_waipio[] = {
|
|||||||
1, V4L2_MPEG_MSM_VIDC_ENABLE,
|
1, V4L2_MPEG_MSM_VIDC_ENABLE,
|
||||||
V4L2_CID_MPEG_VIDC_CONTENT_ADAPTIVE_CODING,
|
V4L2_CID_MPEG_VIDC_CONTENT_ADAPTIVE_CODING,
|
||||||
HFI_PROP_CONTENT_ADAPTIVE_CODING,
|
HFI_PROP_CONTENT_ADAPTIVE_CODING,
|
||||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
CAP_FLAG_OUTPUT_PORT,
|
||||||
|
{BITRATE_MODE}, {0},
|
||||||
|
NULL, msm_vidc_set_vbr_related_properties},
|
||||||
|
|
||||||
{BITRATE_BOOST, ENC, H264|HEVC,
|
{BITRATE_BOOST, ENC, H264|HEVC,
|
||||||
0, 100, 25, 25,
|
0, 50, 25, 25,
|
||||||
V4L2_CID_MPEG_VIDC_QUALITY_BITRATE_BOOST,
|
V4L2_CID_MPEG_VIDC_QUALITY_BITRATE_BOOST,
|
||||||
HFI_PROP_BITRATE_BOOST,
|
HFI_PROP_BITRATE_BOOST,
|
||||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
CAP_FLAG_OUTPUT_PORT,
|
||||||
|
{BITRATE_MODE},
|
||||||
|
{0},
|
||||||
|
NULL, msm_vidc_set_vbr_related_properties},
|
||||||
|
|
||||||
|
{MIN_QUALITY, ENC, H264|HEVC,
|
||||||
|
0, 80, 80, 80,
|
||||||
|
V4L2_CID_MPEG_VIDC_MIN_QUALITY,
|
||||||
|
HFI_PROP_MAINTAIN_MIN_QUALITY,
|
||||||
|
CAP_FLAG_OUTPUT_PORT,
|
||||||
|
{BITRATE_MODE},
|
||||||
|
{0},
|
||||||
|
NULL, msm_vidc_set_vbr_related_properties},
|
||||||
|
|
||||||
{VBV_DELAY, ENC, H264|HEVC,
|
{VBV_DELAY, ENC, H264|HEVC,
|
||||||
0, 1000, 500, 0,
|
500, 2000, 500, 500,
|
||||||
V4L2_CID_MPEG_VIDEO_VBV_DELAY},
|
V4L2_CID_MPEG_VIDEO_VBV_DELAY,
|
||||||
|
HFI_PROP_VBV_DELAY,
|
||||||
|
CAP_FLAG_OUTPUT_PORT,
|
||||||
|
{BITRATE_MODE},
|
||||||
|
{0},
|
||||||
|
NULL, msm_vidc_set_cbr_related_properties},
|
||||||
|
|
||||||
|
{PEAK_BITRATE, ENC, H264|HEVC,
|
||||||
|
/* default peak bitrate is 10% larger than avrg bitrate */
|
||||||
|
1, MAX_BITRATE, 1,
|
||||||
|
(DEFAULT_BITRATE +
|
||||||
|
(DEFAULT_BITRATE / PERCENT_PEAK_BITRATE_INCREASED)),
|
||||||
|
V4L2_CID_MPEG_VIDEO_BITRATE_PEAK,
|
||||||
|
HFI_PROP_TOTAL_PEAK_BITRATE,
|
||||||
|
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED,
|
||||||
|
{BITRATE_MODE, BIT_RATE},
|
||||||
|
{0},
|
||||||
|
msm_vidc_adjust_peak_bitrate,
|
||||||
|
msm_vidc_set_cbr_related_properties},
|
||||||
|
|
||||||
{MIN_FRAME_QP, ENC, H264,
|
{MIN_FRAME_QP, ENC, H264,
|
||||||
MIN_QP_8BIT, MAX_QP, 1, MIN_QP_8BIT,
|
MIN_QP_8BIT, MAX_QP, 1, MIN_QP_8BIT,
|
||||||
@@ -627,42 +664,6 @@ static struct msm_platform_inst_capability instance_data_waipio[] = {
|
|||||||
MIN_QP_8BIT, MAX_QP, 1, DEFAULT_QP,
|
MIN_QP_8BIT, MAX_QP, 1, DEFAULT_QP,
|
||||||
V4L2_CID_MPEG_VIDEO_H264_B_FRAME_QP},
|
V4L2_CID_MPEG_VIDEO_H264_B_FRAME_QP},
|
||||||
|
|
||||||
{L0_QP, ENC, HEVC,
|
|
||||||
0, 51, 1, 20,
|
|
||||||
V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L0_QP,
|
|
||||||
HFI_PROP_QP_PACKED,
|
|
||||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
|
||||||
|
|
||||||
{L1_QP, ENC, HEVC,
|
|
||||||
0, 51, 1, 20,
|
|
||||||
V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L1_QP,
|
|
||||||
HFI_PROP_QP_PACKED,
|
|
||||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
|
||||||
|
|
||||||
{L2_QP, ENC, HEVC,
|
|
||||||
0, 51, 1, 20,
|
|
||||||
V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L2_QP,
|
|
||||||
HFI_PROP_QP_PACKED,
|
|
||||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
|
||||||
|
|
||||||
{L3_QP, ENC, HEVC,
|
|
||||||
0, 51, 1, 20,
|
|
||||||
V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L3_QP,
|
|
||||||
HFI_PROP_QP_PACKED,
|
|
||||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
|
||||||
|
|
||||||
{L4_QP, ENC, HEVC,
|
|
||||||
0, 51, 1, 20,
|
|
||||||
V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L4_QP,
|
|
||||||
HFI_PROP_QP_PACKED,
|
|
||||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
|
||||||
|
|
||||||
{L5_QP, ENC, HEVC,
|
|
||||||
0, 51, 1, 20,
|
|
||||||
V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L5_QP,
|
|
||||||
HFI_PROP_QP_PACKED,
|
|
||||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
|
||||||
|
|
||||||
{HIER_LAYER_QP, ENC, H264,
|
{HIER_LAYER_QP, ENC, H264,
|
||||||
0, 0x0060033, 1, 20,
|
0, 0x0060033, 1, 20,
|
||||||
V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_LAYER_QP,
|
V4L2_CID_MPEG_VIDEO_H264_HIERARCHICAL_CODING_LAYER_QP,
|
||||||
@@ -701,7 +702,7 @@ static struct msm_platform_inst_capability instance_data_waipio[] = {
|
|||||||
HFI_PROP_LAYER_COUNT,
|
HFI_PROP_LAYER_COUNT,
|
||||||
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED,
|
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED,
|
||||||
{BITRATE_MODE},
|
{BITRATE_MODE},
|
||||||
{GOP_SIZE, B_FRAME},
|
{GOP_SIZE, B_FRAME, BIT_RATE},
|
||||||
msm_vidc_adjust_layer_count, msm_vidc_set_layer_count_and_type},
|
msm_vidc_adjust_layer_count, msm_vidc_set_layer_count_and_type},
|
||||||
|
|
||||||
{ENH_LAYER_COUNT, ENC, H264,
|
{ENH_LAYER_COUNT, ENC, H264,
|
||||||
@@ -710,44 +711,108 @@ static struct msm_platform_inst_capability instance_data_waipio[] = {
|
|||||||
HFI_PROP_LAYER_COUNT,
|
HFI_PROP_LAYER_COUNT,
|
||||||
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED,
|
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED,
|
||||||
{BITRATE_MODE},
|
{BITRATE_MODE},
|
||||||
{GOP_SIZE, B_FRAME},
|
{GOP_SIZE, B_FRAME, BIT_RATE},
|
||||||
msm_vidc_adjust_layer_count, msm_vidc_set_layer_count_and_type},
|
msm_vidc_adjust_layer_count, msm_vidc_set_layer_count_and_type},
|
||||||
|
|
||||||
|
/*
|
||||||
|
* layer bitrate is treated as BIT_RATE cap sibling and
|
||||||
|
* is handled in bitrate adjust and set functions
|
||||||
|
*/
|
||||||
{L0_BR, ENC, HEVC,
|
{L0_BR, ENC, HEVC,
|
||||||
1, 220000000, 1, 20000000,
|
1, MAX_BITRATE, 1, DEFAULT_BITRATE,
|
||||||
V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L0_BR,
|
V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L0_BR,
|
||||||
HFI_PROP_BITRATE_LAYER1,
|
HFI_PROP_BITRATE_LAYER1,
|
||||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED,
|
||||||
|
{0}, {0},
|
||||||
|
msm_vidc_adjust_bitrate, msm_vidc_set_bitrate},
|
||||||
|
|
||||||
{L1_BR, ENC, HEVC,
|
{L1_BR, ENC, HEVC,
|
||||||
1, 220000000, 1, 20000000,
|
1, MAX_BITRATE, 1, DEFAULT_BITRATE,
|
||||||
V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L1_BR,
|
V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L1_BR,
|
||||||
HFI_PROP_BITRATE_LAYER2,
|
HFI_PROP_BITRATE_LAYER2,
|
||||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED,
|
||||||
|
{0}, {0},
|
||||||
|
msm_vidc_adjust_bitrate, msm_vidc_set_bitrate},
|
||||||
|
|
||||||
{L2_BR, ENC, HEVC,
|
{L2_BR, ENC, HEVC,
|
||||||
1, 220000000, 1, 20000000,
|
1, MAX_BITRATE, 1, DEFAULT_BITRATE,
|
||||||
V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L2_BR,
|
V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L2_BR,
|
||||||
HFI_PROP_BITRATE_LAYER3,
|
HFI_PROP_BITRATE_LAYER3,
|
||||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED,
|
||||||
|
{0}, {0},
|
||||||
|
msm_vidc_adjust_bitrate, msm_vidc_set_bitrate},
|
||||||
|
|
||||||
{L3_BR, ENC, HEVC,
|
{L3_BR, ENC, HEVC,
|
||||||
1, 220000000, 1, 20000000,
|
1, MAX_BITRATE, 1, DEFAULT_BITRATE,
|
||||||
V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L3_BR,
|
V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L3_BR,
|
||||||
HFI_PROP_BITRATE_LAYER4,
|
HFI_PROP_BITRATE_LAYER4,
|
||||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED,
|
||||||
|
{0}, {0},
|
||||||
|
msm_vidc_adjust_bitrate, msm_vidc_set_bitrate},
|
||||||
|
|
||||||
{L4_BR, ENC, HEVC,
|
{L4_BR, ENC, HEVC,
|
||||||
1, 220000000, 1, 20000000,
|
1, MAX_BITRATE, 1, DEFAULT_BITRATE,
|
||||||
V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L4_BR,
|
V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L4_BR,
|
||||||
HFI_PROP_BITRATE_LAYER5,
|
HFI_PROP_BITRATE_LAYER5,
|
||||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED,
|
||||||
|
{0}, {0},
|
||||||
|
msm_vidc_adjust_bitrate, msm_vidc_set_bitrate},
|
||||||
|
|
||||||
{L5_BR, ENC, HEVC,
|
{L5_BR, ENC, HEVC,
|
||||||
1, 220000000, 1, 20000000,
|
1, MAX_BITRATE, 1, DEFAULT_BITRATE,
|
||||||
V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L5_BR,
|
V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L5_BR,
|
||||||
HFI_PROP_BITRATE_LAYER6,
|
HFI_PROP_BITRATE_LAYER6,
|
||||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED,
|
||||||
|
{0}, {0},
|
||||||
|
msm_vidc_adjust_bitrate, msm_vidc_set_bitrate},
|
||||||
|
|
||||||
|
{L0_BR, ENC, H264,
|
||||||
|
1, MAX_BITRATE, 1, DEFAULT_BITRATE,
|
||||||
|
V4L2_CID_MPEG_VIDEO_H264_HIER_CODING_L0_BR,
|
||||||
|
HFI_PROP_BITRATE_LAYER1,
|
||||||
|
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED,
|
||||||
|
{0}, {0},
|
||||||
|
msm_vidc_adjust_bitrate, msm_vidc_set_bitrate},
|
||||||
|
|
||||||
|
{L1_BR, ENC, H264,
|
||||||
|
1, MAX_BITRATE, 1, DEFAULT_BITRATE,
|
||||||
|
V4L2_CID_MPEG_VIDEO_H264_HIER_CODING_L1_BR,
|
||||||
|
HFI_PROP_BITRATE_LAYER2,
|
||||||
|
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED,
|
||||||
|
{0}, {0},
|
||||||
|
msm_vidc_adjust_bitrate, msm_vidc_set_bitrate},
|
||||||
|
|
||||||
|
{L2_BR, ENC, H264,
|
||||||
|
1, MAX_BITRATE, 1, DEFAULT_BITRATE,
|
||||||
|
V4L2_CID_MPEG_VIDEO_H264_HIER_CODING_L2_BR,
|
||||||
|
HFI_PROP_BITRATE_LAYER3,
|
||||||
|
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED,
|
||||||
|
{0}, {0},
|
||||||
|
msm_vidc_adjust_bitrate, msm_vidc_set_bitrate},
|
||||||
|
|
||||||
|
{L3_BR, ENC, H264,
|
||||||
|
1, MAX_BITRATE, 1, DEFAULT_BITRATE,
|
||||||
|
V4L2_CID_MPEG_VIDEO_H264_HIER_CODING_L3_BR,
|
||||||
|
HFI_PROP_BITRATE_LAYER4,
|
||||||
|
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED,
|
||||||
|
{0}, {0},
|
||||||
|
msm_vidc_adjust_bitrate, msm_vidc_set_bitrate},
|
||||||
|
|
||||||
|
{L4_BR, ENC, H264,
|
||||||
|
1, MAX_BITRATE, 1, DEFAULT_BITRATE,
|
||||||
|
V4L2_CID_MPEG_VIDEO_H264_HIER_CODING_L4_BR,
|
||||||
|
HFI_PROP_BITRATE_LAYER5,
|
||||||
|
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED,
|
||||||
|
{0}, {0},
|
||||||
|
msm_vidc_adjust_bitrate, msm_vidc_set_bitrate},
|
||||||
|
|
||||||
|
{L5_BR, ENC, H264,
|
||||||
|
1, MAX_BITRATE, 1, DEFAULT_BITRATE,
|
||||||
|
V4L2_CID_MPEG_VIDEO_H264_HIER_CODING_L5_BR,
|
||||||
|
HFI_PROP_BITRATE_LAYER6,
|
||||||
|
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED,
|
||||||
|
{0}, {0},
|
||||||
|
msm_vidc_adjust_bitrate, msm_vidc_set_bitrate},
|
||||||
|
|
||||||
{ENTROPY_MODE, ENC, H264,
|
{ENTROPY_MODE, ENC, H264,
|
||||||
V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CAVLC,
|
V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CAVLC,
|
||||||
|
@@ -31,6 +31,8 @@ int msm_vidc_adjust_transform_8x8(void *instance, struct v4l2_ctrl *ctrl);
|
|||||||
int msm_vidc_adjust_layer_count(void *instance, struct v4l2_ctrl *ctrl);
|
int msm_vidc_adjust_layer_count(void *instance, struct v4l2_ctrl *ctrl);
|
||||||
int msm_vidc_adjust_gop_size(void *instance, struct v4l2_ctrl *ctrl);
|
int msm_vidc_adjust_gop_size(void *instance, struct v4l2_ctrl *ctrl);
|
||||||
int msm_vidc_adjust_b_frame(void *instance, struct v4l2_ctrl *ctrl);
|
int msm_vidc_adjust_b_frame(void *instance, struct v4l2_ctrl *ctrl);
|
||||||
|
int msm_vidc_adjust_bitrate(void *instance, struct v4l2_ctrl *ctrl);
|
||||||
|
int msm_vidc_adjust_peak_bitrate(void *instance, struct v4l2_ctrl *ctrl);
|
||||||
int msm_vidc_adjust_hevc_min_qp(void *instance, struct v4l2_ctrl *ctrl);
|
int msm_vidc_adjust_hevc_min_qp(void *instance, struct v4l2_ctrl *ctrl);
|
||||||
int msm_vidc_adjust_hevc_max_qp(void *instance, struct v4l2_ctrl *ctrl);
|
int msm_vidc_adjust_hevc_max_qp(void *instance, struct v4l2_ctrl *ctrl);
|
||||||
int msm_vidc_adjust_hevc_frame_qp(void *instance, struct v4l2_ctrl *ctrl);
|
int msm_vidc_adjust_hevc_frame_qp(void *instance, struct v4l2_ctrl *ctrl);
|
||||||
@@ -56,12 +58,18 @@ int msm_vidc_set_layer_count_and_type(void *instance,
|
|||||||
enum msm_vidc_inst_capability_type cap_id);
|
enum msm_vidc_inst_capability_type cap_id);
|
||||||
int msm_vidc_set_gop_size(void *instance,
|
int msm_vidc_set_gop_size(void *instance,
|
||||||
enum msm_vidc_inst_capability_type cap_id);
|
enum msm_vidc_inst_capability_type cap_id);
|
||||||
|
int msm_vidc_set_bitrate(void *instance,
|
||||||
|
enum msm_vidc_inst_capability_type cap_id);
|
||||||
int msm_vidc_set_u32(void *instance,
|
int msm_vidc_set_u32(void *instance,
|
||||||
enum msm_vidc_inst_capability_type cap_id);
|
enum msm_vidc_inst_capability_type cap_id);
|
||||||
int msm_vidc_set_u32_enum(void *instance,
|
int msm_vidc_set_u32_enum(void *instance,
|
||||||
enum msm_vidc_inst_capability_type cap_id);
|
enum msm_vidc_inst_capability_type cap_id);
|
||||||
int msm_vidc_set_constant_quality(void *instance,
|
int msm_vidc_set_constant_quality(void *instance,
|
||||||
enum msm_vidc_inst_capability_type cap_id);
|
enum msm_vidc_inst_capability_type cap_id);
|
||||||
|
int msm_vidc_set_vbr_related_properties(
|
||||||
|
void *instance, enum msm_vidc_inst_capability_type cap_id);
|
||||||
|
int msm_vidc_set_cbr_related_properties(void *instance,
|
||||||
|
enum msm_vidc_inst_capability_type cap_id);
|
||||||
int msm_vidc_set_use_and_mark_ltr(void *instance,
|
int msm_vidc_set_use_and_mark_ltr(void *instance,
|
||||||
enum msm_vidc_inst_capability_type cap_id);
|
enum msm_vidc_inst_capability_type cap_id);
|
||||||
int msm_vidc_set_nal_length(void* instance,
|
int msm_vidc_set_nal_length(void* instance,
|
||||||
|
@@ -55,6 +55,7 @@
|
|||||||
#define MAX_HEVC_ENH_LAYER_SLIDING_WINDOW 5
|
#define MAX_HEVC_ENH_LAYER_SLIDING_WINDOW 5
|
||||||
#define MAX_AVC_ENH_LAYER_SLIDING_WINDOW 3
|
#define MAX_AVC_ENH_LAYER_SLIDING_WINDOW 3
|
||||||
#define MAX_AVC_ENH_LAYER_HYBRID_HP 5
|
#define MAX_AVC_ENH_LAYER_HYBRID_HP 5
|
||||||
|
#define PERCENT_PEAK_BITRATE_INCREASED 10
|
||||||
|
|
||||||
/* TODO
|
/* TODO
|
||||||
* #define MAX_SUPERFRAME_COUNT 32
|
* #define MAX_SUPERFRAME_COUNT 32
|
||||||
@@ -360,7 +361,9 @@ enum msm_vidc_inst_capability_type {
|
|||||||
TIME_DELTA_BASED_RC,
|
TIME_DELTA_BASED_RC,
|
||||||
CONTENT_ADAPTIVE_CODING,
|
CONTENT_ADAPTIVE_CODING,
|
||||||
BITRATE_BOOST,
|
BITRATE_BOOST,
|
||||||
|
MIN_QUALITY,
|
||||||
VBV_DELAY,
|
VBV_DELAY,
|
||||||
|
PEAK_BITRATE,
|
||||||
MIN_FRAME_QP,
|
MIN_FRAME_QP,
|
||||||
I_FRAME_MIN_QP,
|
I_FRAME_MIN_QP,
|
||||||
P_FRAME_MIN_QP,
|
P_FRAME_MIN_QP,
|
||||||
@@ -373,12 +376,6 @@ enum msm_vidc_inst_capability_type {
|
|||||||
I_FRAME_QP,
|
I_FRAME_QP,
|
||||||
P_FRAME_QP,
|
P_FRAME_QP,
|
||||||
B_FRAME_QP,
|
B_FRAME_QP,
|
||||||
L0_QP,
|
|
||||||
L1_QP,
|
|
||||||
L2_QP,
|
|
||||||
L3_QP,
|
|
||||||
L4_QP,
|
|
||||||
L5_QP,
|
|
||||||
HIER_LAYER_QP,
|
HIER_LAYER_QP,
|
||||||
LAYER_TYPE,
|
LAYER_TYPE,
|
||||||
LAYER_ENABLE,
|
LAYER_ENABLE,
|
||||||
|
@@ -1241,6 +1241,135 @@ exit:
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int msm_vidc_adjust_bitrate(void *instance, struct v4l2_ctrl *ctrl)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
struct msm_vidc_inst_capability *capability;
|
||||||
|
s32 adjusted_value;
|
||||||
|
struct msm_vidc_inst *inst = (struct msm_vidc_inst *) instance;
|
||||||
|
s32 rc_type = -1, enh_layer_count = -1;
|
||||||
|
u32 cap_id = 0, cumulative_bitrate = 0;
|
||||||
|
bool layer_bitrate_set = false;
|
||||||
|
u32 layer_br_caps[6] = {L0_BR, L1_BR, L2_BR, L3_BR, L4_BR, L5_BR};
|
||||||
|
|
||||||
|
if (!inst || !inst->capabilities) {
|
||||||
|
d_vpr_e("%s: invalid params\n", __func__);
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
capability = inst->capabilities;
|
||||||
|
|
||||||
|
adjusted_value = ctrl ? ctrl->val :
|
||||||
|
capability->cap[BIT_RATE].value;
|
||||||
|
|
||||||
|
/* ignore layer bitrate when total bitrate is set */
|
||||||
|
if (capability->cap[BIT_RATE].flags & CAP_FLAG_CLIENT_SET)
|
||||||
|
goto exit;
|
||||||
|
|
||||||
|
if (msm_vidc_get_parent_value(inst, BIT_RATE,
|
||||||
|
ENH_LAYER_COUNT, &enh_layer_count, __func__))
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
if (msm_vidc_get_parent_value(inst, BIT_RATE,
|
||||||
|
BITRATE_MODE, &rc_type, __func__))
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* ENH_LAYER_COUNT cap max is positive only if
|
||||||
|
* layer encoding is enabled for static setting
|
||||||
|
*/
|
||||||
|
if (capability->cap[ENH_LAYER_COUNT].max) {
|
||||||
|
layer_bitrate_set = true;
|
||||||
|
for (i = 0; i <= enh_layer_count; i++) {
|
||||||
|
if (i >= ARRAY_SIZE(layer_br_caps))
|
||||||
|
break;
|
||||||
|
cap_id = layer_br_caps[i];
|
||||||
|
if (!(capability->cap[cap_id].flags & CAP_FLAG_CLIENT_SET)) {
|
||||||
|
layer_bitrate_set = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
cumulative_bitrate += capability->cap[cap_id].value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* layer bitrate supported only for CBR rc */
|
||||||
|
if (layer_bitrate_set &&
|
||||||
|
(rc_type == HFI_RC_CBR_CFR || rc_type == HFI_RC_CBR_VFR)) {
|
||||||
|
if (cumulative_bitrate > capability->cap[BIT_RATE].max)
|
||||||
|
cumulative_bitrate =
|
||||||
|
capability->cap[BIT_RATE].max;
|
||||||
|
adjusted_value = cumulative_bitrate;
|
||||||
|
i_vpr_h(inst,
|
||||||
|
"%s: update BIT_RATE with cumulative bitrate\n",
|
||||||
|
__func__);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (i = 0; i < sizeof(layer_br_caps) / sizeof(u32); i++) {
|
||||||
|
if (i >= ARRAY_SIZE(layer_br_caps))
|
||||||
|
break;
|
||||||
|
cap_id = layer_br_caps[i];
|
||||||
|
/*
|
||||||
|
* layer bitrate cannot be set
|
||||||
|
* when layer encoding is disabled
|
||||||
|
*/
|
||||||
|
if (capability->cap[cap_id].flags &
|
||||||
|
CAP_FLAG_CLIENT_SET) {
|
||||||
|
i_vpr_e(inst,
|
||||||
|
"%s: invalid layer bitrate set\n",
|
||||||
|
__func__);
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
exit:
|
||||||
|
msm_vidc_update_cap_value(inst, BIT_RATE,
|
||||||
|
adjusted_value, __func__);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int msm_vidc_adjust_peak_bitrate(void *instance, struct v4l2_ctrl *ctrl)
|
||||||
|
{
|
||||||
|
struct msm_vidc_inst_capability *capability;
|
||||||
|
s32 adjusted_value;
|
||||||
|
struct msm_vidc_inst *inst = (struct msm_vidc_inst *) instance;
|
||||||
|
s32 rc_type = -1, bitrate = -1;
|
||||||
|
|
||||||
|
if (!inst || !inst->capabilities) {
|
||||||
|
d_vpr_e("%s: invalid params\n", __func__);
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
capability = inst->capabilities;
|
||||||
|
|
||||||
|
adjusted_value = ctrl ? ctrl->val :
|
||||||
|
capability->cap[PEAK_BITRATE].value;
|
||||||
|
|
||||||
|
if (msm_vidc_get_parent_value(inst, PEAK_BITRATE,
|
||||||
|
BITRATE_MODE, &rc_type, __func__))
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
if (rc_type != HFI_RC_CBR_CFR &&
|
||||||
|
rc_type != HFI_RC_CBR_VFR)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (msm_vidc_get_parent_value(inst, PEAK_BITRATE,
|
||||||
|
BIT_RATE, &bitrate, __func__))
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
/* Peak Bitrate should be larger than or equal to avg bitrate */
|
||||||
|
if (capability->cap[PEAK_BITRATE].flags & CAP_FLAG_CLIENT_SET) {
|
||||||
|
if (adjusted_value < bitrate)
|
||||||
|
adjusted_value = bitrate;
|
||||||
|
} else {
|
||||||
|
adjusted_value = capability->cap[BIT_RATE].value +
|
||||||
|
(capability->cap[BIT_RATE].value /
|
||||||
|
PERCENT_PEAK_BITRATE_INCREASED);
|
||||||
|
}
|
||||||
|
|
||||||
|
msm_vidc_update_cap_value(inst, PEAK_BITRATE,
|
||||||
|
adjusted_value, __func__);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int msm_vidc_adjust_hevc_min_qp(void *instance, struct v4l2_ctrl *ctrl)
|
int msm_vidc_adjust_hevc_min_qp(void *instance, struct v4l2_ctrl *ctrl)
|
||||||
{
|
{
|
||||||
int rc = 0;
|
int rc = 0;
|
||||||
@@ -1449,6 +1578,63 @@ int msm_vidc_set_constant_quality(void *instance,
|
|||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int msm_vidc_set_vbr_related_properties(void *instance,
|
||||||
|
enum msm_vidc_inst_capability_type cap_id)
|
||||||
|
{
|
||||||
|
int rc = 0;
|
||||||
|
struct msm_vidc_inst *inst = (struct msm_vidc_inst *)instance;
|
||||||
|
u32 hfi_value = 0;
|
||||||
|
s32 rc_type = -1;
|
||||||
|
|
||||||
|
if (!inst || !inst->capabilities) {
|
||||||
|
d_vpr_e("%s: invalid params\n", __func__);
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (msm_vidc_get_parent_value(inst, cap_id,
|
||||||
|
BITRATE_MODE, &rc_type, __func__))
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
if (rc_type != HFI_RC_VBR_CFR)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
hfi_value = inst->capabilities->cap[cap_id].value;
|
||||||
|
|
||||||
|
rc = msm_vidc_packetize_control(inst, cap_id, HFI_PAYLOAD_U32,
|
||||||
|
&hfi_value, sizeof(u32), __func__);
|
||||||
|
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
|
int msm_vidc_set_cbr_related_properties(void *instance,
|
||||||
|
enum msm_vidc_inst_capability_type cap_id)
|
||||||
|
{
|
||||||
|
int rc = 0;
|
||||||
|
struct msm_vidc_inst *inst = (struct msm_vidc_inst *)instance;
|
||||||
|
u32 hfi_value = 0;
|
||||||
|
s32 rc_type = -1;
|
||||||
|
|
||||||
|
if (!inst || !inst->capabilities) {
|
||||||
|
d_vpr_e("%s: invalid params\n", __func__);
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (msm_vidc_get_parent_value(inst, cap_id,
|
||||||
|
BITRATE_MODE, &rc_type, __func__))
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
if (rc_type != HFI_RC_CBR_VFR &&
|
||||||
|
rc_type != HFI_RC_CBR_CFR)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
hfi_value = inst->capabilities->cap[cap_id].value;
|
||||||
|
|
||||||
|
rc = msm_vidc_packetize_control(inst, cap_id, HFI_PAYLOAD_U32,
|
||||||
|
&hfi_value, sizeof(u32), __func__);
|
||||||
|
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
int msm_vidc_set_use_and_mark_ltr(void *instance,
|
int msm_vidc_set_use_and_mark_ltr(void *instance,
|
||||||
enum msm_vidc_inst_capability_type cap_id)
|
enum msm_vidc_inst_capability_type cap_id)
|
||||||
{
|
{
|
||||||
@@ -1845,6 +2031,73 @@ int msm_vidc_set_gop_size(void *instance,
|
|||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int msm_vidc_set_bitrate(void *instance,
|
||||||
|
enum msm_vidc_inst_capability_type cap_id)
|
||||||
|
{
|
||||||
|
int rc = 0, i;
|
||||||
|
struct msm_vidc_inst *inst = (struct msm_vidc_inst *)instance;
|
||||||
|
u32 hfi_value = 0;
|
||||||
|
s32 rc_type = -1, enh_layer_count = -1;
|
||||||
|
u32 layer_br_caps[6] = {L0_BR, L1_BR, L2_BR, L3_BR, L4_BR, L5_BR};
|
||||||
|
bool layer_bitrate_set = false;
|
||||||
|
|
||||||
|
if (!inst || !inst->capabilities) {
|
||||||
|
d_vpr_e("%s: invalid params\n", __func__);
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* set Total Bitrate */
|
||||||
|
if (inst->capabilities->cap[BIT_RATE].flags & CAP_FLAG_CLIENT_SET)
|
||||||
|
goto set_total_bitrate;
|
||||||
|
|
||||||
|
if (msm_vidc_get_parent_value(inst, BIT_RATE,
|
||||||
|
ENH_LAYER_COUNT, &enh_layer_count, __func__))
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
if (msm_vidc_get_parent_value(inst, BIT_RATE,
|
||||||
|
BITRATE_MODE, &rc_type, __func__))
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
if (inst->capabilities->cap[ENH_LAYER_COUNT].max &&
|
||||||
|
(rc_type == HFI_RC_CBR_CFR ||
|
||||||
|
rc_type == HFI_RC_CBR_VFR)) {
|
||||||
|
layer_bitrate_set = true;
|
||||||
|
for (i = 0; i <= enh_layer_count; i++) {
|
||||||
|
if (i >= ARRAY_SIZE(layer_br_caps))
|
||||||
|
break;
|
||||||
|
cap_id = layer_br_caps[i];
|
||||||
|
if (!(inst->capabilities->cap[cap_id].flags &
|
||||||
|
CAP_FLAG_CLIENT_SET)) {
|
||||||
|
layer_bitrate_set = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (layer_bitrate_set) {
|
||||||
|
/* set Layer Bitrate */
|
||||||
|
for (i = 0; i <= enh_layer_count; i++) {
|
||||||
|
if (i >= ARRAY_SIZE(layer_br_caps))
|
||||||
|
break;
|
||||||
|
cap_id = layer_br_caps[i];
|
||||||
|
hfi_value = inst->capabilities->cap[cap_id].value;
|
||||||
|
rc = msm_vidc_packetize_control(inst, cap_id,
|
||||||
|
HFI_PAYLOAD_U32, &hfi_value,
|
||||||
|
sizeof(u32), __func__);
|
||||||
|
if (rc)
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
set_total_bitrate:
|
||||||
|
hfi_value = inst->capabilities->cap[BIT_RATE].value;
|
||||||
|
rc = msm_vidc_packetize_control(inst, BIT_RATE, HFI_PAYLOAD_U32,
|
||||||
|
&hfi_value, sizeof(u32), __func__);
|
||||||
|
exit:
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
/* TODO
|
/* TODO
|
||||||
int msm_vidc_set_flip(void *instance,
|
int msm_vidc_set_flip(void *instance,
|
||||||
enum msm_vidc_inst_capability_type cap_id)
|
enum msm_vidc_inst_capability_type cap_id)
|
||||||
|
@@ -103,7 +103,9 @@ static const struct msm_vidc_cap_name cap_name_arr[] = {
|
|||||||
{TIME_DELTA_BASED_RC, "TIME_DELTA_BASED_RC" },
|
{TIME_DELTA_BASED_RC, "TIME_DELTA_BASED_RC" },
|
||||||
{CONTENT_ADAPTIVE_CODING, "CONTENT_ADAPTIVE_CODING" },
|
{CONTENT_ADAPTIVE_CODING, "CONTENT_ADAPTIVE_CODING" },
|
||||||
{BITRATE_BOOST, "BITRATE_BOOST" },
|
{BITRATE_BOOST, "BITRATE_BOOST" },
|
||||||
|
{MIN_QUALITY, "MIN_QUALITY" },
|
||||||
{VBV_DELAY, "VBV_DELAY" },
|
{VBV_DELAY, "VBV_DELAY" },
|
||||||
|
{PEAK_BITRATE, "PEAK_BITRATE" },
|
||||||
{MIN_FRAME_QP, "MIN_FRAME_QP" },
|
{MIN_FRAME_QP, "MIN_FRAME_QP" },
|
||||||
{I_FRAME_MIN_QP, "I_FRAME_MIN_QP" },
|
{I_FRAME_MIN_QP, "I_FRAME_MIN_QP" },
|
||||||
{P_FRAME_MIN_QP, "P_FRAME_MIN_QP" },
|
{P_FRAME_MIN_QP, "P_FRAME_MIN_QP" },
|
||||||
@@ -116,12 +118,6 @@ static const struct msm_vidc_cap_name cap_name_arr[] = {
|
|||||||
{I_FRAME_QP, "I_FRAME_QP" },
|
{I_FRAME_QP, "I_FRAME_QP" },
|
||||||
{P_FRAME_QP, "P_FRAME_QP" },
|
{P_FRAME_QP, "P_FRAME_QP" },
|
||||||
{B_FRAME_QP, "B_FRAME_QP" },
|
{B_FRAME_QP, "B_FRAME_QP" },
|
||||||
{L0_QP, "L0_QP" },
|
|
||||||
{L1_QP, "L1_QP" },
|
|
||||||
{L2_QP, "L2_QP" },
|
|
||||||
{L3_QP, "L3_QP" },
|
|
||||||
{L4_QP, "L4_QP" },
|
|
||||||
{L5_QP, "L5_QP" },
|
|
||||||
{HIER_LAYER_QP, "HIER_LAYER_QP" },
|
{HIER_LAYER_QP, "HIER_LAYER_QP" },
|
||||||
{LAYER_TYPE, "LAYER_TYPE" },
|
{LAYER_TYPE, "LAYER_TYPE" },
|
||||||
{LAYER_ENABLE, "LAYER_ENABLE" },
|
{LAYER_ENABLE, "LAYER_ENABLE" },
|
||||||
|
@@ -147,6 +147,8 @@ enum v4l2_mpeg_vidc_blur_types {
|
|||||||
/* Encoder Input Compression Ratio control */
|
/* Encoder Input Compression Ratio control */
|
||||||
#define V4L2_CID_MPEG_VIDC_ENC_INPUT_COMPRESSION_RATIO \
|
#define V4L2_CID_MPEG_VIDC_ENC_INPUT_COMPRESSION_RATIO \
|
||||||
(V4L2_CID_MPEG_VIDC_BASE + 0x2C)
|
(V4L2_CID_MPEG_VIDC_BASE + 0x2C)
|
||||||
|
#define V4L2_CID_MPEG_VIDC_MIN_QUALITY \
|
||||||
|
(V4L2_CID_MPEG_VIDC_BASE + 0x2D)
|
||||||
|
|
||||||
enum v4l2_mpeg_vidc_metapayload_header_flags {
|
enum v4l2_mpeg_vidc_metapayload_header_flags {
|
||||||
METADATA_FLAGS_NONE = 0,
|
METADATA_FLAGS_NONE = 0,
|
||||||
|
Reference in New Issue
Block a user