From 45d8a8c80e9a516f9fa1362291f00f4edab5a5cc Mon Sep 17 00:00:00 2001 From: Darshana Patil Date: Thu, 14 Jan 2021 14:34:22 -0800 Subject: [PATCH] video: driver: add decoder bitstream size overwrite support add decoder bitsream size overwrite support Change-Id: Id2968c3ac7d485109a47ff7a570a1c18d74dfe43 Signed-off-by: Darshana Patil --- driver/platform/waipio/src/msm_vidc_waipio.c | 3 +++ driver/vidc/inc/msm_vidc_internal.h | 1 + driver/vidc/src/msm_vidc_buffer.c | 20 ++++++++++--------- driver/vidc/src/msm_vidc_control.c | 2 ++ .../uapi/vidc/media/v4l2_vidc_extensions.h | 2 ++ 5 files changed, 19 insertions(+), 9 deletions(-) diff --git a/driver/platform/waipio/src/msm_vidc_waipio.c b/driver/platform/waipio/src/msm_vidc_waipio.c index 2d6093ec21..7cde2a68b6 100644 --- a/driver/platform/waipio/src/msm_vidc_waipio.c +++ b/driver/platform/waipio/src/msm_vidc_waipio.c @@ -945,6 +945,9 @@ static struct msm_platform_inst_capability instance_data_waipio[] = { {CODEC_CONFIG, DEC, H264|HEVC, 0, 1, 1, 0, V4L2_CID_MPEG_VIDC_CODEC_CONFIG}, + {BITSTREAM_SIZE_OVERWRITE, DEC, CODECS_ALL, 0, INT_MAX, 1, 0, + V4L2_CID_MPEG_VIDC_MIN_BITSTREAM_SIZE_OVERWRITE}, + {META_LTR_MARK_USE, ENC, CODECS_ALL, V4L2_MPEG_MSM_VIDC_DISABLE, V4L2_MPEG_MSM_VIDC_ENABLE, 1, V4L2_MPEG_MSM_VIDC_DISABLE, diff --git a/driver/vidc/inc/msm_vidc_internal.h b/driver/vidc/inc/msm_vidc_internal.h index e14038e643..e0bd21da9a 100644 --- a/driver/vidc/inc/msm_vidc_internal.h +++ b/driver/vidc/inc/msm_vidc_internal.h @@ -340,6 +340,7 @@ enum msm_vidc_inst_capability_type { CODED_FRAMES, BIT_DEPTH, CODEC_CONFIG, + BITSTREAM_SIZE_OVERWRITE, META_LTR_MARK_USE, META_DPB_MISR, META_OPB_MISR, diff --git a/driver/vidc/src/msm_vidc_buffer.c b/driver/vidc/src/msm_vidc_buffer.c index 1e7d427bde..979a6b1679 100644 --- a/driver/vidc/src/msm_vidc_buffer.c +++ b/driver/vidc/src/msm_vidc_buffer.c @@ -169,13 +169,22 @@ u32 msm_vidc_decoder_input_size(struct msm_vidc_inst *inst) u32 div_factor = 1; u32 base_res_mbs = NUM_MBS_4k; struct v4l2_format *f; - u32 buffer_size_limit = 0; // TODO: fix me + u32 bitstream_size_overwrite = 0; if (!inst || !inst->capabilities) { d_vpr_e("%s: invalid params\n"); return 0; } + bitstream_size_overwrite = + inst->capabilities->cap[BITSTREAM_SIZE_OVERWRITE].value; + if (bitstream_size_overwrite) { + frame_size = bitstream_size_overwrite; + s_vpr_h(inst->sid, "client configured bitstream buffer size %d\n", + frame_size); + return frame_size; + } + /* * Decoder input size calculation: * For 8k resolution, buffer size is calculated as 8k mbs / 4 and @@ -214,14 +223,7 @@ u32 msm_vidc_decoder_input_size(struct msm_vidc_inst *inst) f->fmt.pix_mp.pixelformat == V4L2_PIX_FMT_HEVC) frame_size = frame_size + (frame_size >> 2); - if (buffer_size_limit && (buffer_size_limit < frame_size)) { - frame_size = buffer_size_limit; - s_vpr_h(inst->sid, "input buffer size limited to %d\n", - frame_size); - } else { - s_vpr_h(inst->sid, "set input buffer size to %d\n", - frame_size); - } + s_vpr_h(inst->sid, "set input buffer size to %d\n", frame_size); return ALIGN(frame_size, SZ_4K); } diff --git a/driver/vidc/src/msm_vidc_control.c b/driver/vidc/src/msm_vidc_control.c index 7f0654ab9c..c32611dbd9 100644 --- a/driver/vidc/src/msm_vidc_control.c +++ b/driver/vidc/src/msm_vidc_control.c @@ -169,6 +169,8 @@ static const char *msm_vidc_get_priv_ctrl_name(u32 sid, u32 control_id) return "Timestamp Metadata"; case V4L2_CID_MPEG_VIDC_METADATA_ENC_QP_METADATA: return "Encoder QP Metadata"; + case V4L2_CID_MPEG_VIDC_MIN_BITSTREAM_SIZE_OVERWRITE: + return "Bitstream Size Overwrite"; default: s_vpr_e(sid, "%s: ctrl name not available for ctrl id %#x\n", __func__, control_id); diff --git a/include/uapi/vidc/media/v4l2_vidc_extensions.h b/include/uapi/vidc/media/v4l2_vidc_extensions.h index 31e8fde888..53e09c17be 100644 --- a/include/uapi/vidc/media/v4l2_vidc_extensions.h +++ b/include/uapi/vidc/media/v4l2_vidc_extensions.h @@ -103,6 +103,8 @@ enum v4l2_mpeg_vidc_blur_types { (V4L2_CID_MPEG_VIDC_BASE + 0x21) #define V4L2_CID_MPEG_VIDC_METADATA_ENC_QP_METADATA \ (V4L2_CID_MPEG_VIDC_BASE + 0x22) +#define V4L2_CID_MPEG_VIDC_MIN_BITSTREAM_SIZE_OVERWRITE \ + (V4L2_CID_MPEG_VIDC_BASE + 0x23) enum v4l2_mpeg_vidc_metapayload_header_flags { METADATA_FLAGS_NONE = 0,