OSDN Git Service

vidc: Enable skip output buffers for video encoder
authorShiju Mathew <shijum@codeaurora.org>
Tue, 1 Aug 2017 14:34:53 +0000 (10:34 -0400)
committerGerrit - the friendly Code Review server <code-review@localhost>
Fri, 22 Sep 2017 03:45:02 +0000 (20:45 -0700)
Added feature to configure video h/w to send empty output buffer
for skipped frame due to rate control.

Change-Id: Id47344c3bae216fec6384ff205bcb658ec27cb06
Signed-off-by: Shiju Mathew <shijum@codeaurora.org>
drivers/media/platform/msm/vidc/hfi_packetization.c
drivers/media/platform/msm/vidc/msm_venc.c
drivers/media/platform/msm/vidc/vidc_hfi_api.h
drivers/media/platform/msm/vidc/vidc_hfi_helper.h
include/uapi/linux/v4l2-controls.h

index 037c6f3..53de11d 100644 (file)
@@ -2180,6 +2180,15 @@ int create_pkt_cmd_session_set_property(
                pkt->size += sizeof(u32) + sizeof(struct hfi_iframe_size);
                break;
        }
+       case HAL_PARAM_VENC_SEND_OUTPUT_FOR_SKIPPED_FRAME:
+       {
+               create_pkt_enable(pkt->rg_property_data,
+                       HFI_PROPERTY_PARAM_VENC_SEND_OUTPUT_FOR_SKIPPED_FRAMES,
+                       ((struct hal_enable *)pdata)->enable);
+               pkt->size += sizeof(u32) + sizeof(struct hfi_enable);
+               break;
+       }
+
        /* FOLLOWING PROPERTIES ARE NOT IMPLEMENTED IN CORE YET */
        case HAL_CONFIG_BUFFER_REQUIREMENTS:
        case HAL_CONFIG_PRIORITY:
index 947ade9..ec6695a 100644 (file)
@@ -1423,7 +1423,16 @@ static struct msm_vidc_ctrl msm_venc_ctrls[] = {
                        (1 << V4L2_CID_MPEG_VIDC_VIDEO_IFRAME_SIZE_UNLIMITED)),
                .qmenu = iframe_sizes,
        },
-
+       {
+               .id = V4L2_CID_MPEG_VIDC_VIDEO_SEND_SKIPPED_FRAME,
+               .name = "Send encoder output buffer for skipped frames",
+               .type = V4L2_CTRL_TYPE_BOOLEAN,
+               .minimum = V4L2_MPEG_VIDC_VIDEO_SEND_SKIPPED_FRAME_DISABLE,
+               .maximum = V4L2_MPEG_VIDC_VIDEO_SEND_SKIPPED_FRAME_ENABLE,
+               .default_value =
+                       V4L2_MPEG_VIDC_VIDEO_SEND_SKIPPED_FRAME_DISABLE,
+               .step = 1,
+       }
 };
 
 #define NUM_CTRLS ARRAY_SIZE(msm_venc_ctrls)
@@ -3712,6 +3721,25 @@ static int try_set_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl)
                                ctrl->val);
                pdata = &iframesize_type;
                break;
+       case V4L2_CID_MPEG_VIDC_VIDEO_SEND_SKIPPED_FRAME:
+               property_id = HAL_PARAM_VENC_SEND_OUTPUT_FOR_SKIPPED_FRAME;
+               switch (ctrl->val) {
+               case V4L2_MPEG_VIDC_VIDEO_SEND_SKIPPED_FRAME_ENABLE:
+                       enable.enable = 1;
+                       break;
+               case V4L2_MPEG_VIDC_VIDEO_SEND_SKIPPED_FRAME_DISABLE:
+                       enable.enable = 0;
+                       break;
+               default:
+                       dprintk(VIDC_ERR,
+                               "Invalid send skipped frames control value %d\n",
+                               ctrl->val);
+                       rc = -ENOTSUPP;
+                       break;
+               }
+               pdata = &enable;
+               break;
+
        default:
                dprintk(VIDC_ERR, "Unsupported index: %x\n", ctrl->id);
                rc = -ENOTSUPP;
index 6cc5f9f..d946b03 100644 (file)
@@ -243,6 +243,7 @@ enum hal_property {
        HAL_PARAM_VENC_H264_TRANSFORM_8x8,
        HAL_PARAM_VENC_VIDEO_SIGNAL_INFO,
        HAL_PARAM_VENC_IFRAMESIZE_TYPE,
+       HAL_PARAM_VENC_SEND_OUTPUT_FOR_SKIPPED_FRAME
 };
 
 enum hal_domain {
index 31af06c..1218f0a 100644 (file)
@@ -388,6 +388,8 @@ struct hfi_buffer_info {
        (HFI_PROPERTY_PARAM_VENC_COMMON_START + 0x033)
 #define  HFI_PROPERTY_PARAM_VENC_IFRAMESIZE                    \
        (HFI_PROPERTY_PARAM_VENC_COMMON_START + 0x034)
+#define  HFI_PROPERTY_PARAM_VENC_SEND_OUTPUT_FOR_SKIPPED_FRAMES    \
+       (HFI_PROPERTY_PARAM_VENC_COMMON_START + 0x035)
 
 #define HFI_PROPERTY_CONFIG_VENC_COMMON_START                          \
        (HFI_DOMAIN_BASE_VENC + HFI_ARCH_COMMON_OFFSET + 0x6000)
index 0d87fa1..25cb17c 100644 (file)
@@ -1225,6 +1225,13 @@ enum v4l2_mpeg_vidc_video_au_delimiter {
        V4L2_MPEG_VIDC_VIDEO_AU_DELIMITER_ENABLED = 1
 };
 
+#define V4L2_CID_MPEG_VIDC_VIDEO_SEND_SKIPPED_FRAME \
+               (V4L2_CID_MPEG_MSM_VIDC_BASE + 103)
+enum v4l2_mpeg_vidc_video_venc_send_skipped_frame {
+       V4L2_MPEG_VIDC_VIDEO_SEND_SKIPPED_FRAME_DISABLE = 0,
+       V4L2_MPEG_VIDC_VIDEO_SEND_SKIPPED_FRAME_ENABLE = 1
+};
+
 
 /*  Camera class control IDs */