소스 검색

video: driver: enable transcode stat for decoder

Subscribe and enable HFI_PROP_TRANSCODING_STAT_INFO property
in order to enable transcoding stat for decoder.
This stat is used further by encoder to improve encoder quality
decision for transcode case.
Ideally we want to avoid CAC-BRS multiple times for same encoded bitstream.

When user does recording (1st encode), So we have CAC enabled bitstream.
Now, if user wants to send it via some app.
So, it will be decode -> (optional GPU) -> (2nd) encode

For 2nd encode -> we would like to not apply same CAC. It needs either tuning.
But we don't have a way from bitstream to know whether it went via CAC.

This feature enables to use the stat info received from decoder to fine tune encoding.

Change-Id: Iaf640878f5554b16aad3314ba4e26f99638c43af
Signed-off-by: Mahesh Kumar Sharma <[email protected]>
Mahesh Kumar Sharma 3 년 전
부모
커밋
8d0a217984

+ 16 - 0
driver/platform/kalama/src/msm_vidc_kalama.c

@@ -1532,6 +1532,22 @@ static struct msm_platform_inst_capability instance_cap_data_kalama[] = {
 		HFI_PROP_HISTOGRAM_INFO,
 		CAP_FLAG_BITMASK},
 
+	{META_TRANSCODING_STAT_INFO, DEC, HEVC|H264,
+		V4L2_MPEG_VIDC_META_DISABLE,
+		V4L2_MPEG_VIDC_META_ENABLE | V4L2_MPEG_VIDC_META_RX_OUTPUT,
+		0, V4L2_MPEG_VIDC_META_DISABLE,
+		V4L2_CID_MPEG_VIDC_METADATA_TRANSCODE_STAT_INFO,
+		HFI_PROP_TRANSCODING_STAT_INFO,
+		CAP_FLAG_BITMASK},
+
+	{META_TRANSCODING_STAT_INFO, ENC, HEVC|H264,
+		V4L2_MPEG_VIDC_META_DISABLE,
+		V4L2_MPEG_VIDC_META_ENABLE | V4L2_MPEG_VIDC_META_TX_INPUT,
+		0, V4L2_MPEG_VIDC_META_DISABLE,
+		V4L2_CID_MPEG_VIDC_METADATA_TRANSCODE_STAT_INFO,
+		HFI_PROP_TRANSCODING_STAT_INFO,
+		CAP_FLAG_BITMASK},
+
 	{META_PICTURE_TYPE, DEC, CODECS_ALL,
 		V4L2_MPEG_VIDC_META_DISABLE,
 		V4L2_MPEG_VIDC_META_ENABLE | V4L2_MPEG_VIDC_META_RX_INPUT,

+ 2 - 0
driver/vidc/inc/hfi_property.h

@@ -559,6 +559,8 @@ enum hfi_saliency_type {
 
 #define HFI_PROP_UBWC_STRIDE_SCANLINE                           0x03000190
 
+#define HFI_PROP_TRANSCODING_STAT_INFO                          0x03000191
+
 #define HFI_PROP_END                                            0x03FFFFFF
 
 #define HFI_SESSION_ERROR_BEGIN                                 0x04000000

+ 1 - 0
driver/vidc/inc/msm_vidc_internal.h

@@ -383,6 +383,7 @@ enum msm_vidc_inst_capability_type {
 	META_EVA_STATS,
 	META_ROI_INFO,
 	META_SALIENCY_INFO,
+	META_TRANSCODING_STAT_INFO,
 	META_CAP_MAX,
 	/* end of metadata caps */
 	FRAME_WIDTH,

+ 0 - 1
driver/vidc/src/msm_vidc_control.c

@@ -4004,7 +4004,6 @@ int msm_vidc_set_preprocess(void *instance,
 	struct msm_vidc_inst *inst = (struct msm_vidc_inst *)instance;
 	u32 hfi_value;
 
-	d_vpr_e("%s: \n", __func__);
 	if (!inst || !inst->capabilities) {
 		d_vpr_e("%s: invalid params\n", __func__);
 		return -EINVAL;

+ 3 - 0
include/uapi/vidc/media/v4l2_vidc_extensions.h

@@ -149,6 +149,8 @@ enum v4l2_mpeg_vidc_metadata_bits {
 	(V4L2_CID_MPEG_VIDC_BASE + 0x25)
 #define V4L2_CID_MPEG_VIDC_METADATA_SALIENCY_INFO                             \
 	(V4L2_CID_MPEG_VIDC_BASE + 0x26)
+#define V4L2_CID_MPEG_VIDC_METADATA_TRANSCODE_STAT_INFO                       \
+	(V4L2_CID_MPEG_VIDC_BASE + 0x27)
 
 /* Encoder Super frame control */
 #define V4L2_CID_MPEG_VIDC_SUPERFRAME           (V4L2_CID_MPEG_VIDC_BASE + 0x28)
@@ -401,6 +403,7 @@ enum v4l2_mpeg_vidc_metadata {
 	METADATA_MAX_NUM_REORDER_FRAMES       = 0x03000127,
 	METADATA_SALIENCY_INFO                = 0x0300018A,
 	METADATA_FENCE                        = 0x0300018B,
+	METADATA_TRANSCODING_STAT_INFO        = 0x03000191,
 };
 enum meta_interlace_info {
 	META_INTERLACE_INFO_NONE                            = 0x00000000,