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,
|
||||
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
|
||||
* with and without seq header.
|
||||
*/
|
||||
|
@@ -476,6 +476,20 @@ enum hfi_picture_type {
|
||||
#define HFI_BITMASK_RAW_HEIGHT 0x0000ffff
|
||||
#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_SESSION_ERROR_BEGIN 0x04000000
|
||||
|
@@ -57,6 +57,8 @@ int msm_vidc_set_constant_quality(void *instance,
|
||||
enum msm_vidc_inst_capability_type cap_id);
|
||||
int msm_vidc_set_use_and_mark_ltr(void *instance,
|
||||
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,
|
||||
enum msm_vidc_inst_capability_type cap_id);
|
||||
int msm_vidc_set_array(void *instance,
|
||||
|
@@ -329,6 +329,8 @@ enum msm_vidc_inst_capability_type {
|
||||
HEADER_MODE,
|
||||
PREPEND_SPSPPS_TO_IDR,
|
||||
META_SEQ_HDR_NAL,
|
||||
WITHOUT_STARTCODE,
|
||||
NAL_LENGTH_FIELD,
|
||||
REQUEST_I_FRAME,
|
||||
BIT_RATE,
|
||||
BITRATE_MODE,
|
||||
|
@@ -1550,6 +1550,32 @@ int msm_vidc_set_slice_count(void* instance,
|
||||
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
|
||||
int msm_vidc_set_flip(void *instance,
|
||||
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;
|
||||
}
|
||||
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:
|
||||
i_vpr_e(inst,
|
||||
"%s: mapping not specified for ctrl_id: %#x\n",
|
||||
|
Reference in New Issue
Block a user