Loading drivers/media/platform/msm/vidc/msm_venc.c +15 −0 Original line number Diff line number Diff line Loading @@ -1507,12 +1507,14 @@ int msm_venc_s_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl) case V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE: { int temp = 0; enable.enable = false; switch (ctrl->val) { case V4L2_MPEG_VIDEO_MULTI_SICE_MODE_MAX_MB: temp = V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_MB; break; case V4L2_MPEG_VIDEO_MULTI_SICE_MODE_MAX_BYTES: temp = V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_BYTES; enable.enable = true; break; case V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_SINGLE: default: Loading @@ -1520,6 +1522,19 @@ int msm_venc_s_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl) break; } temp_ctrl = TRY_GET_CTRL(V4L2_CID_MPEG_VIDC_VIDEO_LOWLATENCY_MODE); if (!temp_ctrl->val) { rc = msm_comm_try_set_prop(inst, HAL_PARAM_VENC_LOW_LATENCY, &enable.enable); if (rc) dprintk(VIDC_ERR, "SliceMode Low Latency enable fail\n"); else inst->clk_data.low_latency_mode = (bool) enable.enable; } if (temp) temp_ctrl = TRY_GET_CTRL(temp); Loading drivers/media/platform/msm/vidc/msm_vidc_clocks.c +19 −33 Original line number Diff line number Diff line Loading @@ -1035,7 +1035,6 @@ int msm_vidc_decide_work_route(struct msm_vidc_inst *inst) int rc = 0; struct hfi_device *hdev; struct hal_video_work_route pdata; u32 yuv_size = 0; if (!inst || !inst->core || !inst->core->device) { dprintk(VIDC_ERR, Loading @@ -1059,7 +1058,6 @@ int msm_vidc_decide_work_route(struct msm_vidc_inst *inst) break; } } else if (inst->session_type == MSM_VIDC_ENCODER) { u32 rc_mode = 0; u32 slice_mode = 0; switch (inst->fmts[CAPTURE_PORT].fourcc) { Loading @@ -1069,24 +1067,12 @@ int msm_vidc_decide_work_route(struct msm_vidc_inst *inst) goto decision_done; } yuv_size = inst->prop.height[CAPTURE_PORT] * inst->prop.width[CAPTURE_PORT]; if ((yuv_size <= 1920 * 1088) && inst->prop.fps <= 60) { rc_mode = msm_comm_g_ctrl_for_id(inst, V4L2_CID_MPEG_VIDEO_BITRATE_MODE); slice_mode = msm_comm_g_ctrl_for_id(inst, V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE); if ((rc_mode == V4L2_MPEG_VIDEO_BITRATE_MODE_CBR) || (rc_mode == V4L2_MPEG_VIDEO_BITRATE_MODE_CBR_VFR) || (slice_mode == V4L2_MPEG_VIDEO_MULTI_SICE_MODE_MAX_BYTES)) { if (slice_mode == V4L2_MPEG_VIDEO_MULTI_SICE_MODE_MAX_BYTES) { pdata.video_work_route = 1; } } } else { return -EINVAL; } Loading Loading @@ -1123,7 +1109,6 @@ int msm_vidc_decide_work_mode(struct msm_vidc_inst *inst) if (inst->clk_data.low_latency_mode) { pdata.video_work_mode = VIDC_WORK_MODE_1; goto decision_done; } Loading @@ -1146,26 +1131,27 @@ int msm_vidc_decide_work_mode(struct msm_vidc_inst *inst) break; } } else if (inst->session_type == MSM_VIDC_ENCODER) { u32 rc_mode = 0; u32 slice_mode = 0; u32 codec = inst->fmts[CAPTURE_PORT].fourcc; u32 width = inst->prop.width[OUTPUT_PORT]; pdata.video_work_mode = VIDC_WORK_MODE_1; pdata.video_work_mode = VIDC_WORK_MODE_2; switch (inst->fmts[CAPTURE_PORT].fourcc) { switch (codec) { case V4L2_PIX_FMT_VP8: { if (width <= 3840) { pdata.video_work_mode = VIDC_WORK_MODE_1; goto decision_done; } break; } case V4L2_PIX_FMT_TME: { pdata.video_work_mode = VIDC_WORK_MODE_1; goto decision_done; } } slice_mode = msm_comm_g_ctrl_for_id(inst, V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE); rc_mode = msm_comm_g_ctrl_for_id(inst, V4L2_CID_MPEG_VIDEO_BITRATE_MODE); if ((slice_mode == V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_SINGLE) && ((rc_mode == V4L2_MPEG_VIDEO_BITRATE_MODE_VBR) || (rc_mode == V4L2_MPEG_VIDEO_BITRATE_MODE_MBR) || (rc_mode == V4L2_MPEG_VIDEO_BITRATE_MODE_MBR_VFR))) pdata.video_work_mode = VIDC_WORK_MODE_2; } else { return -EINVAL; } Loading Loading
drivers/media/platform/msm/vidc/msm_venc.c +15 −0 Original line number Diff line number Diff line Loading @@ -1507,12 +1507,14 @@ int msm_venc_s_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl) case V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE: { int temp = 0; enable.enable = false; switch (ctrl->val) { case V4L2_MPEG_VIDEO_MULTI_SICE_MODE_MAX_MB: temp = V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_MB; break; case V4L2_MPEG_VIDEO_MULTI_SICE_MODE_MAX_BYTES: temp = V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MAX_BYTES; enable.enable = true; break; case V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_SINGLE: default: Loading @@ -1520,6 +1522,19 @@ int msm_venc_s_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl) break; } temp_ctrl = TRY_GET_CTRL(V4L2_CID_MPEG_VIDC_VIDEO_LOWLATENCY_MODE); if (!temp_ctrl->val) { rc = msm_comm_try_set_prop(inst, HAL_PARAM_VENC_LOW_LATENCY, &enable.enable); if (rc) dprintk(VIDC_ERR, "SliceMode Low Latency enable fail\n"); else inst->clk_data.low_latency_mode = (bool) enable.enable; } if (temp) temp_ctrl = TRY_GET_CTRL(temp); Loading
drivers/media/platform/msm/vidc/msm_vidc_clocks.c +19 −33 Original line number Diff line number Diff line Loading @@ -1035,7 +1035,6 @@ int msm_vidc_decide_work_route(struct msm_vidc_inst *inst) int rc = 0; struct hfi_device *hdev; struct hal_video_work_route pdata; u32 yuv_size = 0; if (!inst || !inst->core || !inst->core->device) { dprintk(VIDC_ERR, Loading @@ -1059,7 +1058,6 @@ int msm_vidc_decide_work_route(struct msm_vidc_inst *inst) break; } } else if (inst->session_type == MSM_VIDC_ENCODER) { u32 rc_mode = 0; u32 slice_mode = 0; switch (inst->fmts[CAPTURE_PORT].fourcc) { Loading @@ -1069,24 +1067,12 @@ int msm_vidc_decide_work_route(struct msm_vidc_inst *inst) goto decision_done; } yuv_size = inst->prop.height[CAPTURE_PORT] * inst->prop.width[CAPTURE_PORT]; if ((yuv_size <= 1920 * 1088) && inst->prop.fps <= 60) { rc_mode = msm_comm_g_ctrl_for_id(inst, V4L2_CID_MPEG_VIDEO_BITRATE_MODE); slice_mode = msm_comm_g_ctrl_for_id(inst, V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE); if ((rc_mode == V4L2_MPEG_VIDEO_BITRATE_MODE_CBR) || (rc_mode == V4L2_MPEG_VIDEO_BITRATE_MODE_CBR_VFR) || (slice_mode == V4L2_MPEG_VIDEO_MULTI_SICE_MODE_MAX_BYTES)) { if (slice_mode == V4L2_MPEG_VIDEO_MULTI_SICE_MODE_MAX_BYTES) { pdata.video_work_route = 1; } } } else { return -EINVAL; } Loading Loading @@ -1123,7 +1109,6 @@ int msm_vidc_decide_work_mode(struct msm_vidc_inst *inst) if (inst->clk_data.low_latency_mode) { pdata.video_work_mode = VIDC_WORK_MODE_1; goto decision_done; } Loading @@ -1146,26 +1131,27 @@ int msm_vidc_decide_work_mode(struct msm_vidc_inst *inst) break; } } else if (inst->session_type == MSM_VIDC_ENCODER) { u32 rc_mode = 0; u32 slice_mode = 0; u32 codec = inst->fmts[CAPTURE_PORT].fourcc; u32 width = inst->prop.width[OUTPUT_PORT]; pdata.video_work_mode = VIDC_WORK_MODE_1; pdata.video_work_mode = VIDC_WORK_MODE_2; switch (inst->fmts[CAPTURE_PORT].fourcc) { switch (codec) { case V4L2_PIX_FMT_VP8: { if (width <= 3840) { pdata.video_work_mode = VIDC_WORK_MODE_1; goto decision_done; } break; } case V4L2_PIX_FMT_TME: { pdata.video_work_mode = VIDC_WORK_MODE_1; goto decision_done; } } slice_mode = msm_comm_g_ctrl_for_id(inst, V4L2_CID_MPEG_VIDEO_MULTI_SLICE_MODE); rc_mode = msm_comm_g_ctrl_for_id(inst, V4L2_CID_MPEG_VIDEO_BITRATE_MODE); if ((slice_mode == V4L2_MPEG_VIDEO_MULTI_SLICE_MODE_SINGLE) && ((rc_mode == V4L2_MPEG_VIDEO_BITRATE_MODE_VBR) || (rc_mode == V4L2_MPEG_VIDEO_BITRATE_MODE_MBR) || (rc_mode == V4L2_MPEG_VIDEO_BITRATE_MODE_MBR_VFR))) pdata.video_work_mode = VIDC_WORK_MODE_2; } else { return -EINVAL; } Loading