video: driver: fix slice mode support

Allow client to set slice mode control to slice off for
HEIC codec.

Change-Id: Iffc8be23990a5dad451550cccb8236cc32951b2a
Signed-off-by: Akshata Sahukar <quic_asahukar@quicinc.com>
This commit is contained in:
Akshata Sahukar
2022-05-31 11:35:39 -07:00
parent 93742170e9
commit 5713e9a303
5 ha cambiato i file con 39 aggiunte e 8 eliminazioni

Vedi File

@@ -1236,14 +1236,23 @@ static struct msm_platform_inst_capability instance_cap_data_kalama[] = {
0,
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU},
{SLICE_MAX_BYTES, ENC, H264|HEVC|HEIC,
{SLICE_MODE, ENC, HEIC,
V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_SINGLE,
V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_SINGLE,
BIT(V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_SINGLE),
V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_SINGLE,
V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE,
0,
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU},
{SLICE_MAX_BYTES, ENC, H264|HEVC,
MIN_SLICE_BYTE_SIZE, MAX_SLICE_BYTE_SIZE,
1, MIN_SLICE_BYTE_SIZE,
V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_BYTES,
HFI_PROP_MULTI_SLICE_BYTES_COUNT,
CAP_FLAG_OUTPUT_PORT},
{SLICE_MAX_MB, ENC, H264|HEVC|HEIC,
{SLICE_MAX_MB, ENC, H264|HEVC,
1, MAX_SLICE_MB_SIZE, 1, 1,
V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_MB,
HFI_PROP_MULTI_SLICE_MB_COUNT,
@@ -2190,6 +2199,12 @@ static struct msm_platform_inst_cap_dependency instance_cap_dependency_data_kala
msm_vidc_adjust_slice_count,
msm_vidc_set_slice_count},
{SLICE_MODE, ENC, HEIC,
{0},
{0},
msm_vidc_adjust_slice_count,
msm_vidc_set_slice_count},
{TRANSFORM_8X8, ENC, H264,
{PROFILE},
{0},

Vedi File

@@ -1141,14 +1141,23 @@ static struct msm_platform_inst_capability instance_cap_data_waipio[] = {
0,
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU},
{SLICE_MAX_BYTES, ENC, H264|HEVC|HEIC,
{SLICE_MODE, ENC, HEIC,
V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_SINGLE,
V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_SINGLE,
BIT(V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_SINGLE),
V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_SINGLE,
V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE,
0,
CAP_FLAG_OUTPUT_PORT | CAP_FLAG_MENU},
{SLICE_MAX_BYTES, ENC, H264|HEVC,
MIN_SLICE_BYTE_SIZE, MAX_SLICE_BYTE_SIZE,
1, MIN_SLICE_BYTE_SIZE,
V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_BYTES,
HFI_PROP_MULTI_SLICE_BYTES_COUNT,
CAP_FLAG_OUTPUT_PORT},
{SLICE_MAX_MB, ENC, H264|HEVC|HEIC,
{SLICE_MAX_MB, ENC, H264|HEVC,
1, MAX_SLICE_MB_SIZE, 1, 1,
V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_MB,
HFI_PROP_MULTI_SLICE_MB_COUNT,
@@ -1969,6 +1978,12 @@ static struct msm_platform_inst_cap_dependency instance_cap_dependency_data_waip
msm_vidc_adjust_slice_count,
msm_vidc_set_slice_count},
{SLICE_MODE, ENC, HEIC,
{0},
{0},
msm_vidc_adjust_slice_count,
msm_vidc_set_slice_count},
{TRANSFORM_8X8, ENC, H264,
{PROFILE},
{0},

Vedi File

@@ -1713,15 +1713,15 @@ int msm_vidc_adjust_slice_count(void *instance, struct v4l2_ctrl *ctrl)
slice_mode = ctrl ? ctrl->val :
capability->cap[SLICE_MODE].value;
if (slice_mode == V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_SINGLE)
return 0;
if (msm_vidc_get_parent_value(inst, SLICE_MODE,
BITRATE_MODE, &rc_type, __func__) ||
msm_vidc_get_parent_value(inst, SLICE_MODE,
ALL_INTRA, &all_intra, __func__))
return -EINVAL;
if (slice_mode == V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_SINGLE)
return 0;
fps = capability->cap[FRAME_RATE].value >> 16;
if (fps > MAX_SLICES_FRAME_RATE ||
(rc_type != HFI_RC_OFF &&

Vedi File

@@ -82,6 +82,7 @@ static const struct msm_vidc_cap_name cap_name_arr[] = {
{META_EVA_STATS, "META_EVA_STATS" },
{META_ROI_INFO, "META_ROI_INFO" },
{META_SALIENCY_INFO, "META_SALIENCY_INFO" },
{META_TRANSCODING_STAT_INFO, "META_TRANSCODING_STAT_INFO" },
{META_CAP_MAX, "META_CAP_MAX" },
{FRAME_WIDTH, "FRAME_WIDTH" },
{LOSSLESS_FRAME_WIDTH, "LOSSLESS_FRAME_WIDTH" },

Vedi File

@@ -201,6 +201,7 @@ int msm_vidc_fence_init(struct msm_vidc_inst *inst)
}
inst->fence_context.ctx_num = dma_fence_context_alloc(1);
spin_lock_init(&inst->fence_context.lock);
snprintf(inst->fence_context.name, sizeof(inst->fence_context.name),
"msm_vidc_fence: %s: %llu", inst->debug_str,
inst->fence_context.ctx_num);
@@ -217,7 +218,6 @@ void msm_vidc_fence_deinit(struct msm_vidc_inst *inst)
}
i_vpr_h(inst, "%s: %s\n", __func__, inst->fence_context.name);
inst->fence_context.ctx_num = 0;
spin_lock_init(&inst->fence_context.lock);
snprintf(inst->fence_context.name, sizeof(inst->fence_context.name),
"%s", "");
}