video: driver: add support to few properties
Add support to below properties - HFI_PROP_MULTI_SLICE_BYTES_COUNT - HFI_PROP_MULTI_SLICE_MB_COUNT - HFI_PROP_CHROMA_QP_OFFSET - HFI_PROP_REQUEST_SYNC_FRAME Change-Id: I4cc62870756d058e7a7b15290f5d6797b3be243c Signed-off-by: Akshata Sahukar <asahukar@codeaurora.org>
This commit is contained in:

committed by
Gerrit - the friendly Code Review server

parent
d4b5661567
commit
17addfbc6d
@@ -280,7 +280,9 @@ static struct msm_platform_inst_capability instance_data_waipio[] = {
|
|||||||
0, 0, 0, 0,
|
0, 0, 0, 0,
|
||||||
V4L2_CID_MPEG_VIDEO_FORCE_KEY_FRAME,
|
V4L2_CID_MPEG_VIDEO_FORCE_KEY_FRAME,
|
||||||
HFI_PROP_REQUEST_SYNC_FRAME,
|
HFI_PROP_REQUEST_SYNC_FRAME,
|
||||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED},
|
CAP_FLAG_INPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED,
|
||||||
|
{0}, {0},
|
||||||
|
NULL, msm_vidc_set_req_sync_frame},
|
||||||
|
|
||||||
/* Enc: Keeping CABAC and CAVLC as same bitrate.
|
/* Enc: Keeping CABAC and CAVLC as same bitrate.
|
||||||
* Dec: there's no use of Bitrate cap
|
* Dec: there's no use of Bitrate cap
|
||||||
@@ -920,20 +922,6 @@ static struct msm_platform_inst_capability instance_data_waipio[] = {
|
|||||||
-6, 6, 1, 0,
|
-6, 6, 1, 0,
|
||||||
V4L2_CID_MPEG_VIDEO_HEVC_LF_BETA_OFFSET_DIV2},
|
V4L2_CID_MPEG_VIDEO_HEVC_LF_BETA_OFFSET_DIV2},
|
||||||
|
|
||||||
{SLICE_MAX_BYTES, ENC, H264|HEVC,
|
|
||||||
1, MAX_BITRATE / DEFAULT_FPS / 8 / 10,
|
|
||||||
1, MAX_BITRATE / DEFAULT_FPS / 8 / 10,
|
|
||||||
V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_BYTES,
|
|
||||||
HFI_PROP_MULTI_SLICE_BYTES_COUNT,
|
|
||||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
|
||||||
|
|
||||||
{SLICE_MAX_MB, ENC, H264|HEVC,
|
|
||||||
1, (MAX_WIDTH * MAX_HEIGHT) / 256 / DEFAULT_FPS / 10,
|
|
||||||
1, (MAX_WIDTH * MAX_HEIGHT) / 256 / DEFAULT_FPS / 10,
|
|
||||||
V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_MB,
|
|
||||||
HFI_PROP_MULTI_SLICE_MB_COUNT,
|
|
||||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
|
||||||
|
|
||||||
{SLICE_MODE, ENC, H264|HEVC,
|
{SLICE_MODE, ENC, H264|HEVC,
|
||||||
V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_SINGLE,
|
V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_SINGLE,
|
||||||
V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_MAX_BYTES,
|
V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_MAX_BYTES,
|
||||||
@@ -943,7 +931,21 @@ static struct msm_platform_inst_capability instance_data_waipio[] = {
|
|||||||
V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_SINGLE,
|
V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_SINGLE,
|
||||||
V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE,
|
V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE,
|
||||||
0,
|
0,
|
||||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU},
|
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU,
|
||||||
|
{0}, {0},
|
||||||
|
NULL, msm_vidc_set_slice_count},
|
||||||
|
|
||||||
|
{SLICE_MAX_BYTES, ENC, H264|HEVC,
|
||||||
|
1, INT_MAX, 1, INT_MAX,
|
||||||
|
V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_BYTES,
|
||||||
|
HFI_PROP_MULTI_SLICE_BYTES_COUNT,
|
||||||
|
CAP_FLAG_OUTPUT_PORT},
|
||||||
|
|
||||||
|
{SLICE_MAX_MB, ENC, H264|HEVC,
|
||||||
|
1, INT_MAX, 1, INT_MAX,
|
||||||
|
V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_MB,
|
||||||
|
HFI_PROP_MULTI_SLICE_MB_COUNT,
|
||||||
|
CAP_FLAG_OUTPUT_PORT},
|
||||||
|
|
||||||
// TODO: MB level RC - mapping
|
// TODO: MB level RC - mapping
|
||||||
{MB_RC, ENC, CODECS_ALL,
|
{MB_RC, ENC, CODECS_ALL,
|
||||||
@@ -967,7 +969,9 @@ static struct msm_platform_inst_capability instance_data_waipio[] = {
|
|||||||
1, MAX_CHROMA_QP_OFFSET,
|
1, MAX_CHROMA_QP_OFFSET,
|
||||||
V4L2_CID_MPEG_VIDEO_H264_CHROMA_QP_INDEX_OFFSET,
|
V4L2_CID_MPEG_VIDEO_H264_CHROMA_QP_INDEX_OFFSET,
|
||||||
HFI_PROP_CHROMA_QP_OFFSET,
|
HFI_PROP_CHROMA_QP_OFFSET,
|
||||||
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT},
|
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT,
|
||||||
|
{0}, {0},
|
||||||
|
NULL, msm_vidc_set_chroma_qp_index_offset},
|
||||||
|
|
||||||
{DISPLAY_DELAY_ENABLE, DEC, CODECS_ALL,
|
{DISPLAY_DELAY_ENABLE, DEC, CODECS_ALL,
|
||||||
V4L2_MPEG_MSM_VIDC_DISABLE, V4L2_MPEG_MSM_VIDC_ENABLE,
|
V4L2_MPEG_MSM_VIDC_DISABLE, V4L2_MPEG_MSM_VIDC_ENABLE,
|
||||||
|
@@ -283,6 +283,10 @@ enum hfi_layer_encoding_type {
|
|||||||
|
|
||||||
#define HFI_PROP_LAYER_COUNT 0x03000139
|
#define HFI_PROP_LAYER_COUNT 0x03000139
|
||||||
|
|
||||||
|
enum hfi_chromaqp_offset_mode {
|
||||||
|
HFI_ADAPTIVE_CHROMAQP_OFFSET = 0x0,
|
||||||
|
HFI_FIXED_CHROMAQP_OFFSET = 0x1,
|
||||||
|
};
|
||||||
#define HFI_BITMASK_CHROMA_CB_OFFSET 0x0000ffff
|
#define HFI_BITMASK_CHROMA_CB_OFFSET 0x0000ffff
|
||||||
#define HFI_BITMASK_CHROMA_CR_OFFSET 0xffff0000
|
#define HFI_BITMASK_CHROMA_CR_OFFSET 0xffff0000
|
||||||
#define HFI_PROP_CHROMA_QP_OFFSET 0x0300013a
|
#define HFI_PROP_CHROMA_QP_OFFSET 0x0300013a
|
||||||
|
@@ -43,6 +43,12 @@ int msm_vidc_set_max_qp(void *instance,
|
|||||||
enum msm_vidc_inst_capability_type cap_id);
|
enum msm_vidc_inst_capability_type cap_id);
|
||||||
int msm_vidc_set_frame_qp(void *instance,
|
int msm_vidc_set_frame_qp(void *instance,
|
||||||
enum msm_vidc_inst_capability_type cap_id);
|
enum msm_vidc_inst_capability_type cap_id);
|
||||||
|
int msm_vidc_set_req_sync_frame(void *instance,
|
||||||
|
enum msm_vidc_inst_capability_type cap_id);
|
||||||
|
int msm_vidc_set_chroma_qp_index_offset(void *instance,
|
||||||
|
enum msm_vidc_inst_capability_type cap_id);
|
||||||
|
int msm_vidc_set_slice_count(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,
|
||||||
|
@@ -332,9 +332,9 @@ enum msm_vidc_inst_capability_type {
|
|||||||
LF_MODE,
|
LF_MODE,
|
||||||
LF_ALPHA,
|
LF_ALPHA,
|
||||||
LF_BETA,
|
LF_BETA,
|
||||||
|
SLICE_MODE,
|
||||||
SLICE_MAX_BYTES,
|
SLICE_MAX_BYTES,
|
||||||
SLICE_MAX_MB,
|
SLICE_MAX_MB,
|
||||||
SLICE_MODE,
|
|
||||||
MB_RC,
|
MB_RC,
|
||||||
TRANSFORM_8X8,
|
TRANSFORM_8X8,
|
||||||
CHROMA_QP_INDEX_OFFSET,
|
CHROMA_QP_INDEX_OFFSET,
|
||||||
|
@@ -1464,6 +1464,92 @@ int msm_vidc_set_frame_qp(void *instance,
|
|||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int msm_vidc_set_req_sync_frame(void *instance,
|
||||||
|
enum msm_vidc_inst_capability_type cap_id)
|
||||||
|
{
|
||||||
|
int rc = 0;
|
||||||
|
struct msm_vidc_inst *inst = (struct msm_vidc_inst *)instance;
|
||||||
|
s32 prepend_spspps;
|
||||||
|
u32 hfi_value = 0;
|
||||||
|
|
||||||
|
if (!inst || !inst->capabilities) {
|
||||||
|
d_vpr_e("%s: invalid params\n", __func__);
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
prepend_spspps = inst->capabilities->cap[PREPEND_SPSPPS_TO_IDR].value;
|
||||||
|
if (prepend_spspps)
|
||||||
|
hfi_value = HFI_SYNC_FRAME_REQUEST_WITH_PREFIX_SEQ_HDR;
|
||||||
|
else
|
||||||
|
hfi_value = HFI_SYNC_FRAME_REQUEST_WITHOUT_SEQ_HDR;
|
||||||
|
|
||||||
|
rc = msm_vidc_packetize_control(inst, cap_id, HFI_PAYLOAD_U32_ENUM,
|
||||||
|
&hfi_value, sizeof(u32), __func__);
|
||||||
|
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
|
int msm_vidc_set_chroma_qp_index_offset(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, chroma_qp_offset_mode = 0, chroma_qp = 0;
|
||||||
|
u32 offset = 12;
|
||||||
|
|
||||||
|
if (!inst || !inst->capabilities) {
|
||||||
|
d_vpr_e("%s: invalid params\n", __func__);
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (inst->capabilities->cap[cap_id].flags & CAP_FLAG_CLIENT_SET)
|
||||||
|
chroma_qp_offset_mode = HFI_FIXED_CHROMAQP_OFFSET;
|
||||||
|
else
|
||||||
|
chroma_qp_offset_mode = HFI_ADAPTIVE_CHROMAQP_OFFSET;
|
||||||
|
|
||||||
|
chroma_qp = inst->capabilities->cap[cap_id].value + offset;
|
||||||
|
hfi_value = chroma_qp_offset_mode | chroma_qp << 8 | chroma_qp << 16 ;
|
||||||
|
|
||||||
|
rc = msm_vidc_packetize_control(inst, cap_id, HFI_PAYLOAD_32_PACKED,
|
||||||
|
&hfi_value, sizeof(u32), __func__);
|
||||||
|
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
|
int msm_vidc_set_slice_count(void* instance,
|
||||||
|
enum msm_vidc_inst_capability_type cap_id)
|
||||||
|
{
|
||||||
|
int rc = 0;
|
||||||
|
struct msm_vidc_inst* inst = (struct msm_vidc_inst*)instance;
|
||||||
|
s32 slice_mode = -1;
|
||||||
|
u32 hfi_value = 0, set_cap_id = 0;
|
||||||
|
|
||||||
|
if (!inst || !inst->capabilities) {
|
||||||
|
d_vpr_e("%s: invalid params\n", __func__);
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
slice_mode = inst->capabilities->cap[SLICE_MODE].value;
|
||||||
|
|
||||||
|
if (slice_mode == V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_SINGLE) {
|
||||||
|
i_vpr_l(inst, "%s: slice mode is: %u, ignore setting to fw\n",
|
||||||
|
__func__, slice_mode);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (slice_mode == V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_MAX_MB) {
|
||||||
|
hfi_value = inst->capabilities->cap[SLICE_MAX_MB].value;
|
||||||
|
set_cap_id = SLICE_MAX_MB;
|
||||||
|
} else if (slice_mode == V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_MAX_BYTES) {
|
||||||
|
hfi_value = inst->capabilities->cap[SLICE_MAX_BYTES].value;
|
||||||
|
set_cap_id = SLICE_MAX_BYTES;
|
||||||
|
}
|
||||||
|
|
||||||
|
rc = msm_vidc_packetize_control(inst, set_cap_id, HFI_PAYLOAD_U32,
|
||||||
|
&hfi_value, sizeof(u32), __func__);
|
||||||
|
|
||||||
|
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)
|
||||||
|
Reference in New Issue
Block a user