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:
@@ -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},
|
||||
|
@@ -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},
|
||||
|
@@ -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 &&
|
||||
|
@@ -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" },
|
||||
|
@@ -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", "");
|
||||
}
|
||||
|
Fai riferimento in un nuovo problema
Block a user