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,
|
||||
V4L2_CID_MPEG_VIDEO_FORCE_KEY_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.
|
||||
* 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,
|
||||
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,
|
||||
V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_SINGLE,
|
||||
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_CID_MPEG_VIDEO_MULTI_SLICE_MODE,
|
||||
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
|
||||
{MB_RC, ENC, CODECS_ALL,
|
||||
@@ -967,7 +969,9 @@ static struct msm_platform_inst_capability instance_data_waipio[] = {
|
||||
1, MAX_CHROMA_QP_OFFSET,
|
||||
V4L2_CID_MPEG_VIDEO_H264_CHROMA_QP_INDEX_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,
|
||||
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
|
||||
|
||||
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_CR_OFFSET 0xffff0000
|
||||
#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);
|
||||
int msm_vidc_set_frame_qp(void *instance,
|
||||
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,
|
||||
enum msm_vidc_inst_capability_type cap_id);
|
||||
int msm_vidc_set_u32_enum(void *instance,
|
||||
|
@@ -332,9 +332,9 @@ enum msm_vidc_inst_capability_type {
|
||||
LF_MODE,
|
||||
LF_ALPHA,
|
||||
LF_BETA,
|
||||
SLICE_MODE,
|
||||
SLICE_MAX_BYTES,
|
||||
SLICE_MAX_MB,
|
||||
SLICE_MODE,
|
||||
MB_RC,
|
||||
TRANSFORM_8X8,
|
||||
CHROMA_QP_INDEX_OFFSET,
|
||||
|
@@ -1464,6 +1464,92 @@ int msm_vidc_set_frame_qp(void *instance,
|
||||
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
|
||||
int msm_vidc_set_flip(void *instance,
|
||||
enum msm_vidc_inst_capability_type cap_id)
|
||||
|
Reference in New Issue
Block a user