camera|16.一种修改摄像头分辨率的方法

调试camera修改分辨率是无法绕开的一个知识点,本文以oc13850为例,讲解如何修改摄像头的分辨率。

c 复制代码
soc:rk3568
sdk版本:rk_android11.0_sdk

1. 查看datasheet

ov13850支持3种分辨率:

c 复制代码
4224 x 3136
2112x1568
4224x2376

这几种分辨率要如何设置寄存器,

datasheet并没有说明。

2. 查看驱动

linux内核自带的驱动,有厂家优化好的2种分辨率寄存器配置信息。

驱动文件:

c 复制代码
drivers\media\i2c\ov13850.c

支持的分辨率:

数组supported_modes中列举了所有支持的分辨率:

c 复制代码
653 static const struct ov13850_mode supported_modes[] = {
 654     {
 655         .width = 2112,
 656         .height = 1568,
 657         .max_fps = {
 658             .numerator = 10000,
 659             .denominator = 300000,
 660         },
 661         .exp_def = 0x0600,
 662         .hts_def = 0x12c0,
 663         .vts_def = 0x0680,
 664         .reg_list = ov13850_2112x1568_regs,
 665     }
 666 
 667 ,{
 668         .width = 4224,
 669         .height = 3136,
 670         .max_fps = {
 671             .numerator = 20000,
 672             .denominator = 150000,
 673         },
 674         .exp_def = 0x0600,
 675         .hts_def = 0x12c0,
 676         .vts_def = 0x0d00,
 677         .reg_list = ov13850_4224x3136_regs,
 678     },
 679 };                                 

在驱动的回调函数ov13850_pad_ops-enum_frame_size ,会根据fse->index显示指定的分辨率

c 复制代码
875 static int ov13850_enum_frame_sizes(struct v4l2_subdev *sd,
 876                     struct v4l2_subdev_pad_config *cfg,
 877                    struct v4l2_subdev_frame_size_enum *fse)
 878 {
 879     if (fse->index >= ARRAY_SIZE(supported_modes))                                                                                                                        
 880         return -EINVAL;
 881 
 882     if (fse->code != MEDIA_BUS_FMT_SBGGR10_1X10)
 883         return -EINVAL;
 884 
 885     fse->min_width  = supported_modes[fse->index].width;
 886     fse->max_width  = supported_modes[fse->index].width;
 887     fse->max_height = supported_modes[fse->index].height;
 888     fse->min_height = supported_modes[fse->index].height;
 889 
 890     return 0;
 891 }


1310 static const struct v4l2_subdev_pad_ops ov13850_pad_ops = {
1311     .enum_mbus_code = ov13850_enum_mbus_code,
1312     .enum_frame_size = ov13850_enum_frame_sizes,                                                                                                                          
1313     .enum_frame_interval = ov13850_enum_frame_interval,
1314     .get_fmt = ov13850_get_fmt,
1315     .set_fmt = ov13850_set_fmt,
1316 };

但是我们实际用sdk自带的app打开摄像头时,分辨率始终是4224 x 3136

如果想将默认分辨率设置为2112*1568

可以简单粗暴点,把不用的分辨率注释掉

3. 修改xml

除了修改驱动,我们还要修改安卓部分的配置文件,

sdk中该xml文件并不支持2112x1568分辨率

所以需要添加对应的分辨率配置:

复制代码
hardware/rockchip/camera/etc/camera/camera3_profiles_rk356x.xml
bash 复制代码
diff --git a/etc/camera/camera3_profiles.xml b/etc/camera/camera3_profiles.xml
index c716305..b3ad66b 100644
--- a/etc/camera/camera3_profiles.xml
+++ b/etc/camera/camera3_profiles.xml
@@ -40,7 +40,7 @@
             <control.availableVideoStabilizationModes value="OFF"/>
             <control.maxRegions value="1,0,1"/>
             <!-- JPEG -->
-            <jpeg.maxSize value="11985408"/>  <!-- 3264*2448*1.5 -->
+            <jpeg.maxSize value="4967424"/>  <!-- 3264*2448*1.5=11985408  2112x1568*1.5= 4967424-->
             <jpeg.availableThumbnailSizes value="0,0,160,120,320,180,320,240"/> <!-- INCREASING ORDER -->
             <!-- Lens Info-->
             <!-- TODO: availableApertures now is fake for we do not get the real apertures -->
@@ -151,6 +151,7 @@
             <scaler.availableInputOutputFormatsMap value="IMPLEMENTATION_DEFINED,2,YCbCr_420_888,BLOB,YCbCr_420_888,2,YCbCr_420_888,BLOB"/>
             <scaler.availableStreamConfigurations value="BLOB,3264x2448,OUTPUT,
                 BLOB,2592x1944,OUTPUT,
+                BLOB,2112x1568,OUTPUT,
                 BLOB,1920x1080,OUTPUT,
                 BLOB,1280x960,OUTPUT,
                 BLOB,1280x720,OUTPUT,
@@ -160,6 +161,7 @@
                 YCbCr_420_888,3264x2448,OUTPUT,
                 YCbCr_420_888,2592x1944,OUTPUT,
                 YCbCr_420_888,1920x1080,OUTPUT,
+                YCbCr_420_888,2112x1568,OUTPUT,
                 YCbCr_420_888,1280x960,OUTPUT,
                 YCbCr_420_888,1280x720,OUTPUT,
                 YCbCr_420_888,640x480,OUTPUT,
@@ -167,6 +169,7 @@
                 YCbCr_420_888,176x144,OUTPUT,
                 IMPLEMENTATION_DEFINED,3264x2448,OUTPUT,
                 IMPLEMENTATION_DEFINED,2592x1944,OUTPUT,
+                IMPLEMENTATION_DEFINED,2112x1568,OUTPUT,
                 IMPLEMENTATION_DEFINED,1920x1080,OUTPUT,
                 IMPLEMENTATION_DEFINED,1280x960,OUTPUT,
                 IMPLEMENTATION_DEFINED,1280x720,OUTPUT,
@@ -175,6 +178,7 @@
                 IMPLEMENTATION_DEFINED,176x144,OUTPUT"/>
             <scaler.availableMinFrameDurations value="BLOB,3264x2448,33333333,
                 BLOB,2592x1944,33333333,
+                BLOB,2112x1568,33333333,
                 BLOB,1920x1080,33333333,
                 BLOB,1280x960,33333333,
                 BLOB,1280x720,33333333,
@@ -183,6 +187,7 @@
                 BLOB,176x144,33333333,
                 YCbCr_420_888,3264x2448,33333333,
                 YCbCr_420_888,2592x1944,33333333,
+                YCbCr_420_888,2112x1568,33333333,
                 YCbCr_420_888,1920x1080,33333333,
                 YCbCr_420_888,1280x960,33333333,
                 YCbCr_420_888,1280x720,33333333,
@@ -191,6 +196,7 @@
                 YCbCr_420_888,176x144,33333333,
                 IMPLEMENTATION_DEFINED,3264x2448,33333333,
                 IMPLEMENTATION_DEFINED,2592x1944,33333333,
+                IMPLEMENTATION_DEFINED,2112x1568,33333333,
                 IMPLEMENTATION_DEFINED,1920x1080,33333333,
                 IMPLEMENTATION_DEFINED,1280x960,33333333,
                 IMPLEMENTATION_DEFINED,1280x720,33333333,
@@ -199,6 +205,7 @@
                 IMPLEMENTATION_DEFINED,176x144,33333333" />
             <scaler.availableStallDurations value="BLOB,3264x2448,33333333,
                                                    BLOB,2592x1944,33333333,
+                                                   BLOB,2112x1568,33333333,
                                                    BLOB,1920x1080,33333333,
                                                    BLOB,1280x960,33333333,
                                                    BLOB,1280x720,33333333,
@@ -207,13 +214,13 @@
                                                    BLOB,176x144,33333333" />
             <scaler.croppingType value="CENTER_ONLY"/>
             <!-- Sensor Info -->
-            <sensor.info.activeArraySize value="0,0,3264,2448"/>
+            <sensor.info.activeArraySize value="0,0,2112,1568"/>
             <sensor.info.sensitivityRange value="32,2400"/>
             <sensor.info.colorFilterArrangement value="BGGR"/> <!-- HAL may override this value from CMC for RAW sensors -->
             <sensor.info.exposureTimeRange value="100000,333333330"/>
             <sensor.info.maxFrameDuration value="66666666"/>
             <sensor.info.physicalSize value="5.5,4.5"/> <!-- 4224x1.12um 3136x1.12um -->
-            <sensor.info.pixelArraySize value="3264x2448"/>
+            <sensor.info.pixelArraySize value="2112x1568"/>
             <sensor.info.whiteLevel value="0"/> <!-- HAL may override this value from CMC for RAW sensors -->
             <sensor.info.timestampSource value="UNKNOWN"/>
             <!-- Sensor -->
@@ -255,7 +262,7 @@
         <Hal_tuning_RKISP1> <!-- Parameters to tune the HAL and hacks for the HAL that are camera dependent -->
             <flipping value="" value_v=""/> <!-- value: SENSOR_FLIP_H or "", value_v: SENSOR_FLIP_V or "" -->
             <supportIsoMap value="false"/>
-            <supportTuningSize value="3264x2448"/>
+            <supportTuningSize value="2112x1568"/>
         </Hal_tuning_RKISP1>
 
         <Sensor_info_RKISP1> <!-- Information that parametrizes the behavior or qualities of the physical sensor -->
diff --git a/etc/camera/camera3_profiles_rk356x.xml b/etc/camera/camera3_profiles_rk356x.xml
index cddeba3..972994a 100644
--- a/etc/camera/camera3_profiles_rk356x.xml
+++ b/etc/camera/camera3_profiles_rk356x.xml
@@ -40,7 +40,7 @@
             <control.availableVideoStabilizationModes value="OFF"/>
             <control.maxRegions value="1,0,1"/>
             <!-- JPEG -->
-            <jpeg.maxSize value="11985408"/>  <!-- 3264*2448*1.5 -->
+            <jpeg.maxSize value="4967424"/>  <!-- 3264*2448*1.5=11985408  2112x1568*1.5 = 4,967,424 -->
             <jpeg.availableThumbnailSizes value="0,0,160,120,320,180,320,240"/> <!-- INCREASING ORDER -->
             <!-- Lens Info-->
             <!-- TODO: availableApertures now is fake for we do not get the real apertures -->
@@ -149,7 +149,7 @@
             <!-- Scaler -->
             <scaler.availableMaxDigitalZoom value="4.0"/>
             <scaler.availableInputOutputFormatsMap value="IMPLEMENTATION_DEFINED,2,YCbCr_420_888,BLOB,YCbCr_420_888,2,YCbCr_420_888,BLOB"/>
-            <scaler.availableStreamConfigurations value="BLOB,3264x2448,OUTPUT,
+            <scaler.availableStreamConfigurations value="BLOB,2112x1568,OUTPUT,
                 BLOB,2592x1944,OUTPUT,
                 BLOB,1920x1080,OUTPUT,
                 BLOB,1280x960,OUTPUT,
@@ -173,7 +173,7 @@
                 IMPLEMENTATION_DEFINED,640x480,OUTPUT,
                 IMPLEMENTATION_DEFINED,320x240,OUTPUT,
                 IMPLEMENTATION_DEFINED,176x144,OUTPUT"/>
-            <scaler.availableMinFrameDurations value="BLOB,3264x2448,33333333,
+            <scaler.availableMinFrameDurations value="BLOB,2112x1568,33333333,
                 BLOB,2592x1944,33333333,
                 BLOB,1920x1080,33333333,
                 BLOB,1280x960,33333333,
@@ -197,7 +197,7 @@
                 IMPLEMENTATION_DEFINED,640x480,33333333,
                 IMPLEMENTATION_DEFINED,320x240,33333333,
                 IMPLEMENTATION_DEFINED,176x144,33333333" />
-            <scaler.availableStallDurations value="BLOB,3264x2448,33333333,
+            <scaler.availableStallDurations value="BLOB,2112x1568,33333333,
                                                    BLOB,2592x1944,33333333,
                                                    BLOB,1920x1080,33333333,
                                                    BLOB,1280x960,33333333,
@@ -207,13 +207,13 @@
                                                    BLOB,176x144,33333333" />
             <scaler.croppingType value="CENTER_ONLY"/>
             <!-- Sensor Info -->
-            <sensor.info.activeArraySize value="0,0,3264,2448"/>
+            <sensor.info.activeArraySize value="0,0,2112,1568"/>
             <sensor.info.sensitivityRange value="32,2400"/>
             <sensor.info.colorFilterArrangement value="BGGR"/> <!-- HAL may override this value from CMC for RAW sensors -->
             <sensor.info.exposureTimeRange value="100000,333333330"/>
             <sensor.info.maxFrameDuration value="66666666"/>
             <sensor.info.physicalSize value="5.5,4.5"/> <!-- 4224x1.12um 3136x1.12um -->
-            <sensor.info.pixelArraySize value="3264x2448"/>
+            <sensor.info.pixelArraySize value="2112x1568"/>
             <sensor.info.whiteLevel value="0"/> <!-- HAL may override this value from CMC for RAW sensors -->
             <sensor.info.timestampSource value="UNKNOWN"/>
             <!-- Sensor -->
@@ -255,7 +255,7 @@
         <Hal_tuning_RKISP1> <!-- Parameters to tune the HAL and hacks for the HAL that are camera dependent -->
             <flipping value="" value_v=""/> <!-- value: SENSOR_FLIP_H or "", value_v: SENSOR_FLIP_V or "" -->
             <supportIsoMap value="false"/>
-            <supportTuningSize value="3264x2448"/>
+            <supportTuningSize value="2112x1568"/>
         </Hal_tuning_RKISP1>
 
         <Sensor_info_RKISP1> <!-- Information that parametrizes the behavior or qualities of the physical sensor -->

4. 查看

编译重新启动,通过命令**media-ctl **查看信息

复制代码
# media-ctl -d /dev/media0 -p

......
- entity 74: m00_b_ov13850 4-0010 (1 pad, 1 link)
             type V4L2 subdev subtype Sensor
             device node name /dev/v4l-subdev4
        pad0: Source
                [fmt:SBGGR10/2112x1568]
                -> "rockchip-csi2-dphy0":0 []

可以看到分辨率修改了。

好了更多瑞芯微相关资料,请转发回复:rxw

相关推荐
唐·柯里昂7981 天前
[rk3566AI模型部署]泰山派buildroot部署yolov5 使用rknn_model_zoo
c语言·c++·笔记·yolo·rk3566·瑞芯微·泰山派
jamie_chu4 天前
显微图像采集 - 工业摄像机与图像采集软件介绍
图像处理·数码相机·camera·摄像头·图像测量·jcamerapro
Just_Paranoid4 天前
【Settings】Android 常见外设检测机制
android·sd·usb·camera·keyboard·sim
木 东12 天前
《ISP调试实战课程》
图像处理·camera·isp
Industio_触觉智能23 天前
瑞芯微RK3568平台FFmpeg硬件编解码移植及性能测试实战攻略
ffmpeg·rk3588·rk3568·瑞芯微·rk3562·rk3576
Industio_触觉智能1 个月前
RK3576轻松搭建RTMP视频推流,基于FFmpeg+Nginx协同
nginx·ffmpeg·实时音视频·rtmp·瑞芯微·视频推流·rk3576
Industio_触觉智能1 个月前
瑞芯微RK3562平台FFmpeg硬件编解码移植及性能测试实战攻略
ffmpeg·视频编解码·瑞芯微·rk3562·触觉智能
塞北山巅1 个月前
camera hal层(AF)
c++·camera
奔跑吧 android2 个月前
【瑞芯微】【rk3128】【移植 qt 5.12.9】
qt·arm·瑞芯微·rk3128