Loading msm/vidc/msm_venc.c +34 −9 Original line number Diff line number Diff line Loading @@ -1506,6 +1506,29 @@ static int msm_venc_resolve_rate_control(struct msm_vidc_inst *inst, return 0; } static int msm_venc_update_bitrate(struct msm_vidc_inst *inst) { u32 cabac_max_bitrate = 0; if (!inst) { d_vpr_e("%s: invalid params %pK\n", __func__); return -EINVAL; } if (get_v4l2_codec(inst) == V4L2_PIX_FMT_H264) { cabac_max_bitrate = inst->capability.cap[CAP_CABAC_BITRATE].max; if ((inst->clk_data.bitrate > cabac_max_bitrate) && (inst->entropy_mode == HFI_H264_ENTROPY_CABAC)) { s_vpr_h(inst->sid, "%s: update bitrate %u to max allowed cabac bitrate %u\n", __func__, inst->clk_data.bitrate, cabac_max_bitrate); inst->clk_data.bitrate = cabac_max_bitrate; } } return 0; } int msm_venc_s_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl) { int rc = 0; Loading Loading @@ -1564,6 +1587,10 @@ int msm_venc_s_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl) case V4L2_CID_MPEG_VIDEO_BITRATE: inst->clk_data.bitrate = ctrl->val; if (inst->state == MSM_VIDC_START_DONE) { rc = msm_venc_update_bitrate(inst); if (rc) s_vpr_e(sid, "%s: Update bitrate failed\n", __func__); rc = msm_venc_set_bitrate(inst); if (rc) s_vpr_e(sid, "%s: set bitrate failed\n", Loading Loading @@ -2645,7 +2672,6 @@ int msm_venc_set_bitrate(struct msm_vidc_inst *inst) { int rc = 0; struct hfi_device *hdev; struct v4l2_ctrl *ctrl; struct hfi_bitrate bitrate; struct hfi_enable enable; Loading @@ -2671,8 +2697,7 @@ int msm_venc_set_bitrate(struct msm_vidc_inst *inst) return rc; } ctrl = get_ctrl(inst, V4L2_CID_MPEG_VIDEO_BITRATE); bitrate.bit_rate = ctrl->val; bitrate.bit_rate = inst->clk_data.bitrate; bitrate.layer_id = MSM_VIDC_ALL_LAYER_ID; s_vpr_h(inst->sid, "%s: %d\n", __func__, bitrate.bit_rate); rc = call_hfi_op(hdev, session_set_property, inst->session, Loading @@ -2688,12 +2713,12 @@ int msm_venc_set_layer_bitrate(struct msm_vidc_inst *inst) { int rc = 0, i = 0; struct hfi_device *hdev; struct v4l2_ctrl *bitrate = NULL; struct v4l2_ctrl *layer = NULL; struct v4l2_ctrl *max_layer = NULL; struct v4l2_ctrl *layer_br_ratios[MAX_HIER_CODING_LAYER] = {NULL}; struct hfi_bitrate layer_br; struct hfi_enable enable; u32 bitrate; if (!inst || !inst->core) { d_vpr_e("%s: invalid params %pK\n", __func__, inst); Loading Loading @@ -2760,10 +2785,10 @@ int msm_venc_set_layer_bitrate(struct msm_vidc_inst *inst) goto error; } bitrate = get_ctrl(inst, V4L2_CID_MPEG_VIDEO_BITRATE); bitrate = inst->clk_data.bitrate; for (i = 0; i < layer->val; ++i) { layer_br.bit_rate = bitrate->val * layer_br_ratios[i]->val / 100; bitrate * layer_br_ratios[i]->val / 100; layer_br.layer_id = i; s_vpr_h(inst->sid, "%s: Bitrate for Layer[%u]: [%u]\n", __func__, layer_br.layer_id, layer_br.bit_rate); Loading Loading @@ -4485,6 +4510,9 @@ int msm_venc_set_properties(struct msm_vidc_inst *inst) int rc = 0; rc = msm_venc_update_entropy_mode(inst); if (rc) goto exit; rc = msm_venc_update_bitrate(inst); if (rc) goto exit; rc = handle_all_intra_restrictions(inst); Loading Loading @@ -4512,9 +4540,6 @@ int msm_venc_set_properties(struct msm_vidc_inst *inst) if (rc) goto exit; rc = msm_venc_set_8x8_transform(inst); if (rc) goto exit; rc = msm_venc_set_bitrate(inst); if (rc) goto exit; rc = msm_venc_set_entropy_mode(inst); Loading msm/vidc/msm_vidc_platform.c +5 −1 Original line number Diff line number Diff line Loading @@ -185,6 +185,7 @@ static struct msm_vidc_codec_capability lito_capabilities_v0[] = { {CAP_MBS_PER_SECOND, DOMAINS_ALL, CODECS_ALL, 36, 1958400, 1, 1958400}, {CAP_FRAMERATE, DOMAINS_ALL, CODECS_ALL, 1, 480, 1, 30}, {CAP_BITRATE, DOMAINS_ALL, CODECS_ALL, 1, 200000000, 1, 20000000}, {CAP_CABAC_BITRATE, ENC, H264, 1, 200000000, 1, 20000000}, {CAP_SCALE_X, ENC, CODECS_ALL, 8192, 65536, 1, 8192}, {CAP_SCALE_Y, ENC, CODECS_ALL, 8192, 65536, 1, 8192}, {CAP_SCALE_X, DEC, CODECS_ALL, 65536, 65536, 1, 65536}, Loading Loading @@ -279,6 +280,7 @@ static struct msm_vidc_codec_capability lito_capabilities_v1[] = { {CAP_MBS_PER_SECOND, DOMAINS_ALL, CODECS_ALL, 36, 1224000, 1, 1224000}, {CAP_FRAMERATE, DOMAINS_ALL, CODECS_ALL, 1, 240, 1, 30}, {CAP_BITRATE, DOMAINS_ALL, CODECS_ALL, 1, 100000000, 1, 20000000}, {CAP_CABAC_BITRATE, ENC, H264, 1, 100000000, 1, 20000000}, {CAP_SCALE_X, ENC, CODECS_ALL, 8192, 65536, 1, 8192}, {CAP_SCALE_Y, ENC, CODECS_ALL, 8192, 65536, 1, 8192}, {CAP_SCALE_X, DEC, CODECS_ALL, 65536, 65536, 1, 65536}, Loading Loading @@ -406,6 +408,8 @@ static struct msm_vidc_codec_capability kona_capabilities[] = { {CAP_MBS_PER_SECOND, DOMAINS_ALL, CODECS_ALL, 64, 7833600, 1, 7833600}, {CAP_FRAMERATE, DOMAINS_ALL, CODECS_ALL, 1, 960, 1, 30}, {CAP_BITRATE, DOMAINS_ALL, CODECS_ALL, 1, 220000000, 1, 20000000}, {CAP_BITRATE, ENC, HEVC, 1, 160000000, 1, 20000000}, {CAP_CABAC_BITRATE, ENC, H264, 1, 160000000, 1, 20000000}, {CAP_SCALE_X, ENC, CODECS_ALL, 8192, 65536, 1, 8192}, {CAP_SCALE_Y, ENC, CODECS_ALL, 8192, 65536, 1, 8192}, {CAP_SCALE_X, DEC, CODECS_ALL, 65536, 65536, 1, 65536}, Loading Loading @@ -438,7 +442,7 @@ static struct msm_vidc_codec_capability kona_capabilities[] = { {CAP_FRAMERATE, ENC, VP8, 1, 60, 1, 30}, {CAP_FRAMERATE, DEC, VP8, 1, 120, 1, 30}, {CAP_BITRATE, ENC, VP8, 1, 74000000, 1, 20000000}, {CAP_BITRATE, DEC, VP8, 1, 220000000, 1, 20000000}, {CAP_BITRATE, DEC, VP8, 1, 100000000, 1, 20000000}, /* Mpeg2 decoder specific */ {CAP_FRAME_WIDTH, DEC, MPEG2, 128, 1920, 1, 1920}, Loading msm/vidc/vidc_hfi_api.h +1 −0 Original line number Diff line number Diff line Loading @@ -247,6 +247,7 @@ enum hal_capability { CAP_SCALE_X, CAP_SCALE_Y, CAP_BITRATE, CAP_CABAC_BITRATE, CAP_BFRAME, CAP_PEAKBITRATE, CAP_HIER_P_NUM_ENH_LAYERS, Loading Loading
msm/vidc/msm_venc.c +34 −9 Original line number Diff line number Diff line Loading @@ -1506,6 +1506,29 @@ static int msm_venc_resolve_rate_control(struct msm_vidc_inst *inst, return 0; } static int msm_venc_update_bitrate(struct msm_vidc_inst *inst) { u32 cabac_max_bitrate = 0; if (!inst) { d_vpr_e("%s: invalid params %pK\n", __func__); return -EINVAL; } if (get_v4l2_codec(inst) == V4L2_PIX_FMT_H264) { cabac_max_bitrate = inst->capability.cap[CAP_CABAC_BITRATE].max; if ((inst->clk_data.bitrate > cabac_max_bitrate) && (inst->entropy_mode == HFI_H264_ENTROPY_CABAC)) { s_vpr_h(inst->sid, "%s: update bitrate %u to max allowed cabac bitrate %u\n", __func__, inst->clk_data.bitrate, cabac_max_bitrate); inst->clk_data.bitrate = cabac_max_bitrate; } } return 0; } int msm_venc_s_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl) { int rc = 0; Loading Loading @@ -1564,6 +1587,10 @@ int msm_venc_s_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl) case V4L2_CID_MPEG_VIDEO_BITRATE: inst->clk_data.bitrate = ctrl->val; if (inst->state == MSM_VIDC_START_DONE) { rc = msm_venc_update_bitrate(inst); if (rc) s_vpr_e(sid, "%s: Update bitrate failed\n", __func__); rc = msm_venc_set_bitrate(inst); if (rc) s_vpr_e(sid, "%s: set bitrate failed\n", Loading Loading @@ -2645,7 +2672,6 @@ int msm_venc_set_bitrate(struct msm_vidc_inst *inst) { int rc = 0; struct hfi_device *hdev; struct v4l2_ctrl *ctrl; struct hfi_bitrate bitrate; struct hfi_enable enable; Loading @@ -2671,8 +2697,7 @@ int msm_venc_set_bitrate(struct msm_vidc_inst *inst) return rc; } ctrl = get_ctrl(inst, V4L2_CID_MPEG_VIDEO_BITRATE); bitrate.bit_rate = ctrl->val; bitrate.bit_rate = inst->clk_data.bitrate; bitrate.layer_id = MSM_VIDC_ALL_LAYER_ID; s_vpr_h(inst->sid, "%s: %d\n", __func__, bitrate.bit_rate); rc = call_hfi_op(hdev, session_set_property, inst->session, Loading @@ -2688,12 +2713,12 @@ int msm_venc_set_layer_bitrate(struct msm_vidc_inst *inst) { int rc = 0, i = 0; struct hfi_device *hdev; struct v4l2_ctrl *bitrate = NULL; struct v4l2_ctrl *layer = NULL; struct v4l2_ctrl *max_layer = NULL; struct v4l2_ctrl *layer_br_ratios[MAX_HIER_CODING_LAYER] = {NULL}; struct hfi_bitrate layer_br; struct hfi_enable enable; u32 bitrate; if (!inst || !inst->core) { d_vpr_e("%s: invalid params %pK\n", __func__, inst); Loading Loading @@ -2760,10 +2785,10 @@ int msm_venc_set_layer_bitrate(struct msm_vidc_inst *inst) goto error; } bitrate = get_ctrl(inst, V4L2_CID_MPEG_VIDEO_BITRATE); bitrate = inst->clk_data.bitrate; for (i = 0; i < layer->val; ++i) { layer_br.bit_rate = bitrate->val * layer_br_ratios[i]->val / 100; bitrate * layer_br_ratios[i]->val / 100; layer_br.layer_id = i; s_vpr_h(inst->sid, "%s: Bitrate for Layer[%u]: [%u]\n", __func__, layer_br.layer_id, layer_br.bit_rate); Loading Loading @@ -4485,6 +4510,9 @@ int msm_venc_set_properties(struct msm_vidc_inst *inst) int rc = 0; rc = msm_venc_update_entropy_mode(inst); if (rc) goto exit; rc = msm_venc_update_bitrate(inst); if (rc) goto exit; rc = handle_all_intra_restrictions(inst); Loading Loading @@ -4512,9 +4540,6 @@ int msm_venc_set_properties(struct msm_vidc_inst *inst) if (rc) goto exit; rc = msm_venc_set_8x8_transform(inst); if (rc) goto exit; rc = msm_venc_set_bitrate(inst); if (rc) goto exit; rc = msm_venc_set_entropy_mode(inst); Loading
msm/vidc/msm_vidc_platform.c +5 −1 Original line number Diff line number Diff line Loading @@ -185,6 +185,7 @@ static struct msm_vidc_codec_capability lito_capabilities_v0[] = { {CAP_MBS_PER_SECOND, DOMAINS_ALL, CODECS_ALL, 36, 1958400, 1, 1958400}, {CAP_FRAMERATE, DOMAINS_ALL, CODECS_ALL, 1, 480, 1, 30}, {CAP_BITRATE, DOMAINS_ALL, CODECS_ALL, 1, 200000000, 1, 20000000}, {CAP_CABAC_BITRATE, ENC, H264, 1, 200000000, 1, 20000000}, {CAP_SCALE_X, ENC, CODECS_ALL, 8192, 65536, 1, 8192}, {CAP_SCALE_Y, ENC, CODECS_ALL, 8192, 65536, 1, 8192}, {CAP_SCALE_X, DEC, CODECS_ALL, 65536, 65536, 1, 65536}, Loading Loading @@ -279,6 +280,7 @@ static struct msm_vidc_codec_capability lito_capabilities_v1[] = { {CAP_MBS_PER_SECOND, DOMAINS_ALL, CODECS_ALL, 36, 1224000, 1, 1224000}, {CAP_FRAMERATE, DOMAINS_ALL, CODECS_ALL, 1, 240, 1, 30}, {CAP_BITRATE, DOMAINS_ALL, CODECS_ALL, 1, 100000000, 1, 20000000}, {CAP_CABAC_BITRATE, ENC, H264, 1, 100000000, 1, 20000000}, {CAP_SCALE_X, ENC, CODECS_ALL, 8192, 65536, 1, 8192}, {CAP_SCALE_Y, ENC, CODECS_ALL, 8192, 65536, 1, 8192}, {CAP_SCALE_X, DEC, CODECS_ALL, 65536, 65536, 1, 65536}, Loading Loading @@ -406,6 +408,8 @@ static struct msm_vidc_codec_capability kona_capabilities[] = { {CAP_MBS_PER_SECOND, DOMAINS_ALL, CODECS_ALL, 64, 7833600, 1, 7833600}, {CAP_FRAMERATE, DOMAINS_ALL, CODECS_ALL, 1, 960, 1, 30}, {CAP_BITRATE, DOMAINS_ALL, CODECS_ALL, 1, 220000000, 1, 20000000}, {CAP_BITRATE, ENC, HEVC, 1, 160000000, 1, 20000000}, {CAP_CABAC_BITRATE, ENC, H264, 1, 160000000, 1, 20000000}, {CAP_SCALE_X, ENC, CODECS_ALL, 8192, 65536, 1, 8192}, {CAP_SCALE_Y, ENC, CODECS_ALL, 8192, 65536, 1, 8192}, {CAP_SCALE_X, DEC, CODECS_ALL, 65536, 65536, 1, 65536}, Loading Loading @@ -438,7 +442,7 @@ static struct msm_vidc_codec_capability kona_capabilities[] = { {CAP_FRAMERATE, ENC, VP8, 1, 60, 1, 30}, {CAP_FRAMERATE, DEC, VP8, 1, 120, 1, 30}, {CAP_BITRATE, ENC, VP8, 1, 74000000, 1, 20000000}, {CAP_BITRATE, DEC, VP8, 1, 220000000, 1, 20000000}, {CAP_BITRATE, DEC, VP8, 1, 100000000, 1, 20000000}, /* Mpeg2 decoder specific */ {CAP_FRAME_WIDTH, DEC, MPEG2, 128, 1920, 1, 1920}, Loading
msm/vidc/vidc_hfi_api.h +1 −0 Original line number Diff line number Diff line Loading @@ -247,6 +247,7 @@ enum hal_capability { CAP_SCALE_X, CAP_SCALE_Y, CAP_BITRATE, CAP_CABAC_BITRATE, CAP_BFRAME, CAP_PEAKBITRATE, CAP_HIER_P_NUM_ENH_LAYERS, Loading