video: driver: Add NAL length based encoding
Add support to set HFI_PROP_NAL_LENGTH_FIELD property to video firmware. Change-Id: I20db36bad394fe0b5163a156199340836af3f740 Signed-off-by: Akshata Sahukar <asahukar@codeaurora.org>
This commit is contained in:
@@ -279,6 +279,26 @@ static struct msm_platform_inst_capability instance_data_waipio[] = {
|
|||||||
1, V4L2_MPEG_MSM_VIDC_DISABLE,
|
1, V4L2_MPEG_MSM_VIDC_DISABLE,
|
||||||
V4L2_CID_MPEG_VIDC_METADATA_SEQ_HEADER_NAL},
|
V4L2_CID_MPEG_VIDC_METADATA_SEQ_HEADER_NAL},
|
||||||
|
|
||||||
|
{WITHOUT_STARTCODE, ENC, CODECS_ALL,
|
||||||
|
V4L2_MPEG_MSM_VIDC_DISABLE,
|
||||||
|
V4L2_MPEG_MSM_VIDC_ENABLE,
|
||||||
|
1, V4L2_MPEG_MSM_VIDC_DISABLE,
|
||||||
|
V4L2_CID_MPEG_VIDEO_HEVC_WITHOUT_STARTCODE,
|
||||||
|
HFI_PROP_NAL_LENGTH_FIELD,
|
||||||
|
CAP_FLAG_ROOT | CAP_FLAG_OUTPUT_PORT,
|
||||||
|
{0}, {0},
|
||||||
|
NULL, msm_vidc_set_nal_length},
|
||||||
|
|
||||||
|
{NAL_LENGTH_FIELD, ENC, CODECS_ALL,
|
||||||
|
V4L2_MPEG_VIDEO_HEVC_SIZE_0,
|
||||||
|
V4L2_MPEG_VIDEO_HEVC_SIZE_4,
|
||||||
|
BIT(V4L2_MPEG_VIDEO_HEVC_SIZE_0) |
|
||||||
|
BIT(V4L2_MPEG_VIDEO_HEVC_SIZE_4),
|
||||||
|
V4L2_MPEG_VIDEO_HEVC_SIZE_0,
|
||||||
|
V4L2_CID_MPEG_VIDEO_HEVC_SIZE_OF_LENGTH_FIELD,
|
||||||
|
HFI_PROP_NAL_LENGTH_FIELD,
|
||||||
|
CAP_FLAG_MENU | CAP_FLAG_OUTPUT_PORT},
|
||||||
|
|
||||||
/* TODO: Firmware introduced enumeration type for this
|
/* TODO: Firmware introduced enumeration type for this
|
||||||
* with and without seq header.
|
* with and without seq header.
|
||||||
*/
|
*/
|
||||||
|
@@ -476,6 +476,20 @@ enum hfi_picture_type {
|
|||||||
#define HFI_BITMASK_RAW_HEIGHT 0x0000ffff
|
#define HFI_BITMASK_RAW_HEIGHT 0x0000ffff
|
||||||
#define HFI_PROP_RAW_RESOLUTION 0x03000178
|
#define HFI_PROP_RAW_RESOLUTION 0x03000178
|
||||||
|
|
||||||
|
#define HFI_PROP_DPB_TAG_LIST 0x03000179
|
||||||
|
|
||||||
|
#define HFI_PROP_DPB_LIST 0x0300017A
|
||||||
|
|
||||||
|
enum hfi_nal_length_field_type {
|
||||||
|
HFI_NAL_LENGTH_STARTCODES = 0,
|
||||||
|
HFI_NAL_LENGTH_SIZE_4 = 4,
|
||||||
|
};
|
||||||
|
#define HFI_PROP_NAL_LENGTH_FIELD 0x0300017B
|
||||||
|
|
||||||
|
#define HFI_PROP_TOTAL_PEAK_BITRATE 0x0300017C
|
||||||
|
|
||||||
|
#define HFI_PROP_MAINTAIN_MIN_QUALITY 0x0300017D
|
||||||
|
|
||||||
#define HFI_PROP_END 0x03FFFFFF
|
#define HFI_PROP_END 0x03FFFFFF
|
||||||
|
|
||||||
#define HFI_SESSION_ERROR_BEGIN 0x04000000
|
#define HFI_SESSION_ERROR_BEGIN 0x04000000
|
||||||
|
@@ -57,6 +57,8 @@ 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_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,
|
||||||
|
enum msm_vidc_inst_capability_type cap_id);
|
||||||
int msm_vidc_set_s32(void *instance,
|
int msm_vidc_set_s32(void *instance,
|
||||||
enum msm_vidc_inst_capability_type cap_id);
|
enum msm_vidc_inst_capability_type cap_id);
|
||||||
int msm_vidc_set_array(void *instance,
|
int msm_vidc_set_array(void *instance,
|
||||||
|
@@ -329,6 +329,8 @@ enum msm_vidc_inst_capability_type {
|
|||||||
HEADER_MODE,
|
HEADER_MODE,
|
||||||
PREPEND_SPSPPS_TO_IDR,
|
PREPEND_SPSPPS_TO_IDR,
|
||||||
META_SEQ_HDR_NAL,
|
META_SEQ_HDR_NAL,
|
||||||
|
WITHOUT_STARTCODE,
|
||||||
|
NAL_LENGTH_FIELD,
|
||||||
REQUEST_I_FRAME,
|
REQUEST_I_FRAME,
|
||||||
BIT_RATE,
|
BIT_RATE,
|
||||||
BITRATE_MODE,
|
BITRATE_MODE,
|
||||||
|
@@ -1550,6 +1550,32 @@ int msm_vidc_set_slice_count(void* instance,
|
|||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int msm_vidc_set_nal_length(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 = HFI_NAL_LENGTH_STARTCODES;
|
||||||
|
|
||||||
|
if (!inst || !inst->capabilities) {
|
||||||
|
d_vpr_e("%s: invalid params\n", __func__);
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!inst->capabilities->cap[WITHOUT_STARTCODE].value) {
|
||||||
|
hfi_value = HFI_NAL_LENGTH_STARTCODES;
|
||||||
|
} else {
|
||||||
|
rc = msm_vidc_v4l2_to_hfi_enum(inst, NAL_LENGTH_FIELD, &hfi_value);
|
||||||
|
if (rc)
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
rc = msm_vidc_packetize_control(inst, cap_id, HFI_PAYLOAD_U32_ENUM,
|
||||||
|
&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)
|
||||||
@@ -1863,6 +1889,16 @@ int msm_vidc_v4l2_to_hfi_enum(struct msm_vidc_inst *inst,
|
|||||||
goto set_default;
|
goto set_default;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
case V4L2_CID_MPEG_VIDEO_HEVC_SIZE_OF_LENGTH_FIELD:
|
||||||
|
switch (capability->cap[cap_id].value) {
|
||||||
|
case V4L2_MPEG_VIDEO_HEVC_SIZE_4:
|
||||||
|
*value = HFI_NAL_LENGTH_SIZE_4;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
*value = HFI_NAL_LENGTH_STARTCODES;
|
||||||
|
goto set_default;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
default:
|
default:
|
||||||
i_vpr_e(inst,
|
i_vpr_e(inst,
|
||||||
"%s: mapping not specified for ctrl_id: %#x\n",
|
"%s: mapping not specified for ctrl_id: %#x\n",
|
||||||
|
Reference in New Issue
Block a user