Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

media: venus: venc: Use helper to set profile and level

We have a new helper to set profile and level use it
instead.

Signed-off-by: Stanimir Varbanov <stanimir.varbanov@linaro.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>

authored by

Stanimir Varbanov and committed by
Mauro Carvalho Chehab
435c53c3 5a86626e

+6 -180
+2 -11
drivers/media/platform/qcom/venus/core.h
··· 239 239 240 240 u32 header_mode; 241 241 242 - struct { 243 - u32 mpeg4; 244 - u32 h264; 245 - u32 vpx; 246 - u32 hevc; 247 - } profile; 248 - struct { 249 - u32 mpeg4; 250 - u32 h264; 251 - u32 hevc; 252 - } level; 242 + u32 profile; 243 + u32 level; 253 244 }; 254 245 255 246 struct venus_buffer {
+2 -157
drivers/media/platform/qcom/venus/venc.c
··· 113 113 static int venc_v4l2_to_hfi(int id, int value) 114 114 { 115 115 switch (id) { 116 - case V4L2_CID_MPEG_VIDEO_MPEG4_LEVEL: 117 - switch (value) { 118 - case V4L2_MPEG_VIDEO_MPEG4_LEVEL_0: 119 - default: 120 - return HFI_MPEG4_LEVEL_0; 121 - case V4L2_MPEG_VIDEO_MPEG4_LEVEL_0B: 122 - return HFI_MPEG4_LEVEL_0b; 123 - case V4L2_MPEG_VIDEO_MPEG4_LEVEL_1: 124 - return HFI_MPEG4_LEVEL_1; 125 - case V4L2_MPEG_VIDEO_MPEG4_LEVEL_2: 126 - return HFI_MPEG4_LEVEL_2; 127 - case V4L2_MPEG_VIDEO_MPEG4_LEVEL_3: 128 - return HFI_MPEG4_LEVEL_3; 129 - case V4L2_MPEG_VIDEO_MPEG4_LEVEL_4: 130 - return HFI_MPEG4_LEVEL_4; 131 - case V4L2_MPEG_VIDEO_MPEG4_LEVEL_5: 132 - return HFI_MPEG4_LEVEL_5; 133 - } 134 - case V4L2_CID_MPEG_VIDEO_MPEG4_PROFILE: 135 - switch (value) { 136 - case V4L2_MPEG_VIDEO_MPEG4_PROFILE_SIMPLE: 137 - default: 138 - return HFI_MPEG4_PROFILE_SIMPLE; 139 - case V4L2_MPEG_VIDEO_MPEG4_PROFILE_ADVANCED_SIMPLE: 140 - return HFI_MPEG4_PROFILE_ADVANCEDSIMPLE; 141 - } 142 - case V4L2_CID_MPEG_VIDEO_H264_PROFILE: 143 - switch (value) { 144 - case V4L2_MPEG_VIDEO_H264_PROFILE_BASELINE: 145 - return HFI_H264_PROFILE_BASELINE; 146 - case V4L2_MPEG_VIDEO_H264_PROFILE_CONSTRAINED_BASELINE: 147 - return HFI_H264_PROFILE_CONSTRAINED_BASE; 148 - case V4L2_MPEG_VIDEO_H264_PROFILE_MAIN: 149 - return HFI_H264_PROFILE_MAIN; 150 - case V4L2_MPEG_VIDEO_H264_PROFILE_HIGH: 151 - default: 152 - return HFI_H264_PROFILE_HIGH; 153 - } 154 - case V4L2_CID_MPEG_VIDEO_H264_LEVEL: 155 - switch (value) { 156 - case V4L2_MPEG_VIDEO_H264_LEVEL_1_0: 157 - return HFI_H264_LEVEL_1; 158 - case V4L2_MPEG_VIDEO_H264_LEVEL_1B: 159 - return HFI_H264_LEVEL_1b; 160 - case V4L2_MPEG_VIDEO_H264_LEVEL_1_1: 161 - return HFI_H264_LEVEL_11; 162 - case V4L2_MPEG_VIDEO_H264_LEVEL_1_2: 163 - return HFI_H264_LEVEL_12; 164 - case V4L2_MPEG_VIDEO_H264_LEVEL_1_3: 165 - return HFI_H264_LEVEL_13; 166 - case V4L2_MPEG_VIDEO_H264_LEVEL_2_0: 167 - return HFI_H264_LEVEL_2; 168 - case V4L2_MPEG_VIDEO_H264_LEVEL_2_1: 169 - return HFI_H264_LEVEL_21; 170 - case V4L2_MPEG_VIDEO_H264_LEVEL_2_2: 171 - return HFI_H264_LEVEL_22; 172 - case V4L2_MPEG_VIDEO_H264_LEVEL_3_0: 173 - return HFI_H264_LEVEL_3; 174 - case V4L2_MPEG_VIDEO_H264_LEVEL_3_1: 175 - return HFI_H264_LEVEL_31; 176 - case V4L2_MPEG_VIDEO_H264_LEVEL_3_2: 177 - return HFI_H264_LEVEL_32; 178 - case V4L2_MPEG_VIDEO_H264_LEVEL_4_0: 179 - return HFI_H264_LEVEL_4; 180 - case V4L2_MPEG_VIDEO_H264_LEVEL_4_1: 181 - return HFI_H264_LEVEL_41; 182 - case V4L2_MPEG_VIDEO_H264_LEVEL_4_2: 183 - return HFI_H264_LEVEL_42; 184 - case V4L2_MPEG_VIDEO_H264_LEVEL_5_0: 185 - default: 186 - return HFI_H264_LEVEL_5; 187 - case V4L2_MPEG_VIDEO_H264_LEVEL_5_1: 188 - return HFI_H264_LEVEL_51; 189 - } 190 116 case V4L2_CID_MPEG_VIDEO_H264_ENTROPY_MODE: 191 117 switch (value) { 192 118 case V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CAVLC: ··· 120 194 return HFI_H264_ENTROPY_CAVLC; 121 195 case V4L2_MPEG_VIDEO_H264_ENTROPY_MODE_CABAC: 122 196 return HFI_H264_ENTROPY_CABAC; 123 - } 124 - case V4L2_CID_MPEG_VIDEO_VP8_PROFILE: 125 - switch (value) { 126 - case 0: 127 - default: 128 - return HFI_VPX_PROFILE_VERSION_0; 129 - case 1: 130 - return HFI_VPX_PROFILE_VERSION_1; 131 - case 2: 132 - return HFI_VPX_PROFILE_VERSION_2; 133 - case 3: 134 - return HFI_VPX_PROFILE_VERSION_3; 135 197 } 136 198 case V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_MODE: 137 199 switch (value) { ··· 130 216 return HFI_H264_DB_MODE_DISABLE; 131 217 case V4L2_MPEG_VIDEO_H264_LOOP_FILTER_MODE_DISABLED_AT_SLICE_BOUNDARY: 132 218 return HFI_H264_DB_MODE_SKIP_SLICE_BOUNDARY; 133 - } 134 - case V4L2_CID_MPEG_VIDEO_HEVC_PROFILE: 135 - switch (value) { 136 - case V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN: 137 - default: 138 - return HFI_HEVC_PROFILE_MAIN; 139 - case V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN_STILL_PICTURE: 140 - return HFI_HEVC_PROFILE_MAIN_STILL_PIC; 141 - case V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN_10: 142 - return HFI_HEVC_PROFILE_MAIN10; 143 - } 144 - case V4L2_CID_MPEG_VIDEO_HEVC_LEVEL: 145 - switch (value) { 146 - case V4L2_MPEG_VIDEO_HEVC_LEVEL_1: 147 - default: 148 - return HFI_HEVC_LEVEL_1; 149 - case V4L2_MPEG_VIDEO_HEVC_LEVEL_2: 150 - return HFI_HEVC_LEVEL_2; 151 - case V4L2_MPEG_VIDEO_HEVC_LEVEL_2_1: 152 - return HFI_HEVC_LEVEL_21; 153 - case V4L2_MPEG_VIDEO_HEVC_LEVEL_3: 154 - return HFI_HEVC_LEVEL_3; 155 - case V4L2_MPEG_VIDEO_HEVC_LEVEL_3_1: 156 - return HFI_HEVC_LEVEL_31; 157 - case V4L2_MPEG_VIDEO_HEVC_LEVEL_4: 158 - return HFI_HEVC_LEVEL_4; 159 - case V4L2_MPEG_VIDEO_HEVC_LEVEL_4_1: 160 - return HFI_HEVC_LEVEL_41; 161 - case V4L2_MPEG_VIDEO_HEVC_LEVEL_5: 162 - return HFI_HEVC_LEVEL_5; 163 - case V4L2_MPEG_VIDEO_HEVC_LEVEL_5_1: 164 - return HFI_HEVC_LEVEL_51; 165 - case V4L2_MPEG_VIDEO_HEVC_LEVEL_5_2: 166 - return HFI_HEVC_LEVEL_52; 167 - case V4L2_MPEG_VIDEO_HEVC_LEVEL_6: 168 - return HFI_HEVC_LEVEL_6; 169 - case V4L2_MPEG_VIDEO_HEVC_LEVEL_6_1: 170 - return HFI_HEVC_LEVEL_61; 171 - case V4L2_MPEG_VIDEO_HEVC_LEVEL_6_2: 172 - return HFI_HEVC_LEVEL_62; 173 219 } 174 220 } 175 221 ··· 531 657 { 532 658 struct venc_controls *ctr = &inst->controls.enc; 533 659 struct hfi_intra_period intra_period; 534 - struct hfi_profile_level pl; 535 660 struct hfi_framerate frate; 536 661 struct hfi_bitrate brate; 537 662 struct hfi_idr_period idrp; 538 663 struct hfi_quantization quant; 539 664 struct hfi_quantization_range quant_range; 540 - u32 ptype, rate_control, bitrate, profile = 0, level = 0; 665 + u32 ptype, rate_control, bitrate; 541 666 int ret; 542 667 543 668 ret = venus_helper_set_work_mode(inst, VIDC_WORK_MODE_2); ··· 684 811 if (ret) 685 812 return ret; 686 813 687 - if (inst->fmt_cap->pixfmt == V4L2_PIX_FMT_H264) { 688 - profile = venc_v4l2_to_hfi(V4L2_CID_MPEG_VIDEO_H264_PROFILE, 689 - ctr->profile.h264); 690 - level = venc_v4l2_to_hfi(V4L2_CID_MPEG_VIDEO_H264_LEVEL, 691 - ctr->level.h264); 692 - } else if (inst->fmt_cap->pixfmt == V4L2_PIX_FMT_VP8) { 693 - profile = venc_v4l2_to_hfi(V4L2_CID_MPEG_VIDEO_VP8_PROFILE, 694 - ctr->profile.vpx); 695 - level = 0; 696 - } else if (inst->fmt_cap->pixfmt == V4L2_PIX_FMT_MPEG4) { 697 - profile = venc_v4l2_to_hfi(V4L2_CID_MPEG_VIDEO_MPEG4_PROFILE, 698 - ctr->profile.mpeg4); 699 - level = venc_v4l2_to_hfi(V4L2_CID_MPEG_VIDEO_MPEG4_LEVEL, 700 - ctr->level.mpeg4); 701 - } else if (inst->fmt_cap->pixfmt == V4L2_PIX_FMT_H263) { 702 - profile = 0; 703 - level = 0; 704 - } else if (inst->fmt_cap->pixfmt == V4L2_PIX_FMT_HEVC) { 705 - profile = venc_v4l2_to_hfi(V4L2_CID_MPEG_VIDEO_HEVC_PROFILE, 706 - ctr->profile.hevc); 707 - level = venc_v4l2_to_hfi(V4L2_CID_MPEG_VIDEO_HEVC_LEVEL, 708 - ctr->level.hevc); 709 - } 710 - 711 - ptype = HFI_PROPERTY_PARAM_PROFILE_LEVEL_CURRENT; 712 - pl.profile = profile; 713 - pl.level = level; 714 - 715 - ret = hfi_session_set_property(inst, ptype, &pl); 814 + ret = venus_helper_set_profile_level(inst, ctr->profile, ctr->level); 716 815 if (ret) 717 816 return ret; 718 817
+2 -12
drivers/media/platform/qcom/venus/venc_ctrls.c
··· 103 103 ctr->h264_entropy_mode = ctrl->val; 104 104 break; 105 105 case V4L2_CID_MPEG_VIDEO_MPEG4_PROFILE: 106 - ctr->profile.mpeg4 = ctrl->val; 107 - break; 108 106 case V4L2_CID_MPEG_VIDEO_H264_PROFILE: 109 - ctr->profile.h264 = ctrl->val; 110 - break; 111 107 case V4L2_CID_MPEG_VIDEO_HEVC_PROFILE: 112 - ctr->profile.hevc = ctrl->val; 113 - break; 114 108 case V4L2_CID_MPEG_VIDEO_VP8_PROFILE: 115 - ctr->profile.vpx = ctrl->val; 109 + ctr->profile = ctrl->val; 116 110 break; 117 111 case V4L2_CID_MPEG_VIDEO_MPEG4_LEVEL: 118 - ctr->level.mpeg4 = ctrl->val; 119 - break; 120 112 case V4L2_CID_MPEG_VIDEO_H264_LEVEL: 121 - ctr->level.h264 = ctrl->val; 122 - break; 123 113 case V4L2_CID_MPEG_VIDEO_HEVC_LEVEL: 124 - ctr->level.hevc = ctrl->val; 114 + ctr->level = ctrl->val; 125 115 break; 126 116 case V4L2_CID_MPEG_VIDEO_H264_I_FRAME_QP: 127 117 ctr->h264_i_qp = ctrl->val;