OSDN Git Service

msm: vidc: add support for maximum bitrate rate control mode
authorDeepak Kushwah <dkushwah@codeaurora.org>
Wed, 29 Jun 2016 07:23:58 +0000 (12:53 +0530)
committerGerrit - the friendly Code Review server <code-review@localhost>
Tue, 19 Jul 2016 10:32:33 +0000 (03:32 -0700)
Add support for maximum bitrate rate control mode which will be
enabled by low bitrate applications to get better Video quality.

CRs-Fixed: 1043369
Change-Id: I20253a0f0762982fe7d7cb0bde9f64f58a8068fb
Signed-off-by: Deepak Kushwah <dkushwah@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.h
drivers/media/platform/msm/vidc/vidc_hfi_api.h
include/uapi/linux/v4l2-controls.h

index 32a7fe4..5d28958 100644 (file)
@@ -1448,6 +1448,12 @@ int create_pkt_cmd_session_set_property(
                case HAL_RATE_CONTROL_VBR_VFR:
                        pkt->rg_property_data[1] = HFI_RATE_CONTROL_VBR_VFR;
                        break;
+               case HAL_RATE_CONTROL_MBR_CFR:
+                       pkt->rg_property_data[1] = HFI_RATE_CONTROL_MBR_CFR;
+                       break;
+               case HAL_RATE_CONTROL_MBR_VFR:
+                       pkt->rg_property_data[1] = HFI_RATE_CONTROL_MBR_VFR;
+                       break;
                default:
                        dprintk(VIDC_ERR,
                                        "Invalid Rate control setting: %p\n",
index 5c9dc6a..68efa8c 100644 (file)
@@ -73,6 +73,8 @@ static const char *const mpeg_video_rate_control[] = {
        "VBR CFR",
        "CBR VFR",
        "CBR CFR",
+       "MBR CFR",
+       "MBR VFR",
        NULL
 };
 
@@ -233,7 +235,7 @@ static struct msm_vidc_ctrl msm_venc_ctrls[] = {
                .name = "Video Framerate and Bitrate Control",
                .type = V4L2_CTRL_TYPE_MENU,
                .minimum = V4L2_CID_MPEG_VIDC_VIDEO_RATE_CONTROL_OFF,
-               .maximum = V4L2_CID_MPEG_VIDC_VIDEO_RATE_CONTROL_CBR_CFR,
+               .maximum = V4L2_CID_MPEG_VIDC_VIDEO_RATE_CONTROL_MBR_VFR,
                .default_value = V4L2_CID_MPEG_VIDC_VIDEO_RATE_CONTROL_OFF,
                .step = 0,
                .menu_skip_mask = ~(
@@ -241,7 +243,9 @@ static struct msm_vidc_ctrl msm_venc_ctrls[] = {
                (1 << V4L2_CID_MPEG_VIDC_VIDEO_RATE_CONTROL_VBR_VFR) |
                (1 << V4L2_CID_MPEG_VIDC_VIDEO_RATE_CONTROL_VBR_CFR) |
                (1 << V4L2_CID_MPEG_VIDC_VIDEO_RATE_CONTROL_CBR_VFR) |
-               (1 << V4L2_CID_MPEG_VIDC_VIDEO_RATE_CONTROL_CBR_CFR)
+               (1 << V4L2_CID_MPEG_VIDC_VIDEO_RATE_CONTROL_CBR_CFR) |
+               (1 << V4L2_CID_MPEG_VIDC_VIDEO_RATE_CONTROL_MBR_CFR) |
+               (1 << V4L2_CID_MPEG_VIDC_VIDEO_RATE_CONTROL_MBR_VFR)
                ),
                .qmenu = mpeg_video_rate_control,
        },
@@ -2200,10 +2204,14 @@ static int try_set_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl)
                        case V4L2_CID_MPEG_VIDC_VIDEO_RATE_CONTROL_VBR_CFR:
                                update_ctrl.val =
                                        V4L2_MPEG_VIDEO_BITRATE_MODE_VBR;
+                               break;
                        case V4L2_CID_MPEG_VIDC_VIDEO_RATE_CONTROL_CBR_VFR:
                        case V4L2_CID_MPEG_VIDC_VIDEO_RATE_CONTROL_CBR_CFR:
+                       case V4L2_CID_MPEG_VIDC_VIDEO_RATE_CONTROL_MBR_CFR:
+                       case V4L2_CID_MPEG_VIDC_VIDEO_RATE_CONTROL_MBR_VFR:
                                update_ctrl.val =
                                        V4L2_MPEG_VIDEO_BITRATE_MODE_CBR;
+                               break;
                        }
 
                        final_mode = ctrl->val;
index 8c4fa78..cbb4e35 100644 (file)
@@ -363,6 +363,9 @@ struct hfi_hybrid_hierp {
 #define HFI_RATE_CONTROL_VBR_CFR       (HFI_OX_BASE + 0x3)
 #define HFI_RATE_CONTROL_CBR_VFR       (HFI_OX_BASE + 0x4)
 #define HFI_RATE_CONTROL_CBR_CFR       (HFI_OX_BASE + 0x5)
+#define HFI_RATE_CONTROL_MBR_CFR       (HFI_OX_BASE + 0x6)
+#define HFI_RATE_CONTROL_MBR_VFR       (HFI_OX_BASE + 0x7)
+
 
 struct hfi_uncompressed_plane_actual_constraints_info {
        u32 buffer_type;
index a368257..6998813 100644 (file)
@@ -710,6 +710,8 @@ enum hal_rate_control {
        HAL_RATE_CONTROL_VBR_CFR,
        HAL_RATE_CONTROL_CBR_VFR,
        HAL_RATE_CONTROL_CBR_CFR,
+       HAL_RATE_CONTROL_MBR_CFR,
+       HAL_RATE_CONTROL_MBR_VFR,
        HAL_UNUSED_RC = 0x10000000,
 };
 
index 0c5c83a..317a3ad 100644 (file)
@@ -702,7 +702,13 @@ enum v4l2_mpeg_vidc_video_rate_control {
        V4L2_CID_MPEG_VIDC_VIDEO_RATE_CONTROL_VBR_CFR = 2,
        V4L2_CID_MPEG_VIDC_VIDEO_RATE_CONTROL_CBR_VFR = 3,
        V4L2_CID_MPEG_VIDC_VIDEO_RATE_CONTROL_CBR_CFR = 4,
+       V4L2_CID_MPEG_VIDC_VIDEO_RATE_CONTROL_MBR_CFR = 5,
+       V4L2_CID_MPEG_VIDC_VIDEO_RATE_CONTROL_MBR_VFR = 6,
 };
+#define V4L2_CID_MPEG_VIDC_VIDEO_RATE_CONTROL_MBR_CFR  \
+                       V4L2_CID_MPEG_VIDC_VIDEO_RATE_CONTROL_MBR_CFR
+#define V4L2_CID_MPEG_VIDC_VIDEO_RATE_CONTROL_MBR_VFR  \
+                       V4L2_CID_MPEG_VIDC_VIDEO_RATE_CONTROL_MBR_VFR
 
 #define V4L2_CID_MPEG_VIDC_VIDEO_ROTATION (V4L2_CID_MPEG_MSM_VIDC_BASE+14)
 enum v4l2_mpeg_vidc_video_rotation {