QC关闭camer HAL3

最近有个项目用测方头,需要raw12数据流。驱动调通HAL1,没调HAL3,客户apk用camera ndk开发,走平台默认HAL version,好死不死是HAL3,所以问高通如何默认走HAL1,然后QC简单粗暴告诉我直接不支持HAL3就好了,牛逼牛逼!

hal3 支持raw12的;
关闭hal3命令:
adb root,
adb shell setprop persist.vendor.camera.HAL3.enabled 0
默认关闭hal3的话需要更改代码,
persist.vendor.camera.HAL3.enabled置为0即可。

另外,提及一下QC camera HAL适配RAW12数据:
项目中有用到特殊的摄像头,用的是raw12数据,底层都已打通,和上层的连接出现问题,主要是QC msm8953支持raw12但没有完善代码,需要odm自己适配。
patch如下:

Index: hardware/qcom/camera/QCamera2/HAL3/QCamera3Channel.cpp
===================================================================
--- hardware/qcom/camera/QCamera2/HAL3/QCamera3Channel.cpp	(版本 121)
+++ hardware/qcom/camera/QCamera2/HAL3/QCamera3Channel.cpp	(工作副本)
@@ -1483,6 +1483,10 @@
             streamType = CAM_STREAM_TYPE_RAW;
             streamFormat = CAM_FORMAT_BAYER_MIPI_RAW_10BPP_GBRG;
             break;
+        case HAL_PIXEL_FORMAT_RAW12:
+            streamType = CAM_STREAM_TYPE_RAW;
+            streamFormat = CAM_FORMAT_BAYER_MIPI_RAW_12BPP_BGGR;
+            break;
         default:
             return -EINVAL;
     }
Index: hardware/qcom/camera/QCamera2/HAL3/QCamera3HWI.cpp
===================================================================
--- hardware/qcom/camera/QCamera2/HAL3/QCamera3HWI.cpp	(版本 121)
+++ hardware/qcom/camera/QCamera2/HAL3/QCamera3HWI.cpp	(工作副本)
@@ -1037,6 +1037,7 @@
         case ANDROID_SCALER_AVAILABLE_FORMATS_RAW16:
         case ANDROID_SCALER_AVAILABLE_FORMATS_RAW_OPAQUE:
         case HAL_PIXEL_FORMAT_RAW10:
+        case HAL_PIXEL_FORMAT_RAW12:
             count = MIN(gCamCapability[mCameraId]->supported_raw_dim_cnt, MAX_SIZES_CNT);
             for (size_t i = 0; i < count; i++) {
                 if ((gCamCapability[mCameraId]->raw_dim[i].width == (int32_t)rotatedWidth) &&
@@ -1141,6 +1142,7 @@
         switch(streamList->streams[i]->format) {
             case HAL_PIXEL_FORMAT_RAW_OPAQUE:
             case HAL_PIXEL_FORMAT_RAW10:
+            case HAL_PIXEL_FORMAT_RAW12:
             case HAL_PIXEL_FORMAT_RAW16:
             case HAL_PIXEL_FORMAT_BLOB:
                 break;
@@ -1625,6 +1627,7 @@
                 }
                 break;
             case HAL_PIXEL_FORMAT_RAW10:
+            case HAL_PIXEL_FORMAT_RAW12:
             case HAL_PIXEL_FORMAT_RAW_OPAQUE:
             case HAL_PIXEL_FORMAT_RAW16:
                 rawStreamCnt++;
@@ -2041,6 +2044,7 @@
             case HAL_PIXEL_FORMAT_RAW_OPAQUE:
             case HAL_PIXEL_FORMAT_RAW16:
             case HAL_PIXEL_FORMAT_RAW10:
+            case HAL_PIXEL_FORMAT_RAW12:
                 mStreamConfigInfo.type[mStreamConfigInfo.num_streams] = CAM_STREAM_TYPE_RAW;
                 mStreamConfigInfo.postprocess_mask[mStreamConfigInfo.num_streams] = CAM_QCOM_FEATURE_NONE;
                 isRawStreamRequested = true;
@@ -2172,6 +2176,7 @@
                 case HAL_PIXEL_FORMAT_RAW_OPAQUE:
                 case HAL_PIXEL_FORMAT_RAW16:
                 case HAL_PIXEL_FORMAT_RAW10:
+                case HAL_PIXEL_FORMAT_RAW12:
                     mRawChannel = new QCamera3RawChannel(
                             mCameraHandle->camera_handle, mChannelHandle,
                             mCameraHandle->ops, captureResultCb,
@@ -2560,6 +2565,7 @@
                 maxJpegDim = dimension;
         } else if ((*it)->stream->format == HAL_PIXEL_FORMAT_RAW_OPAQUE ||
                 (*it)->stream->format == HAL_PIXEL_FORMAT_RAW10 ||
+                (*it)->stream->format == HAL_PIXEL_FORMAT_RAW12 ||
                 (*it)->stream->format == HAL_PIXEL_FORMAT_RAW16) {
             if (dimension > maxRawDim)
                 maxRawDim = dimension;
@@ -2628,6 +2634,7 @@
             hasJpegStream = true;
         else if (stream->format == HAL_PIXEL_FORMAT_RAW_OPAQUE ||
                 stream->format == HAL_PIXEL_FORMAT_RAW10 ||
+                stream->format == HAL_PIXEL_FORMAT_RAW12 ||
                 stream->format == HAL_PIXEL_FORMAT_RAW16)
             hasRawStream = true;
     }
@@ -6839,6 +6846,7 @@
             it != mStreamInfo.end();) {
         if ((*it)->stream->format != HAL_PIXEL_FORMAT_RAW_OPAQUE &&
                 (*it)->stream->format != HAL_PIXEL_FORMAT_RAW10 &&
+                (*it)->stream->format != HAL_PIXEL_FORMAT_RAW12 &&
                 (*it)->stream->format != HAL_PIXEL_FORMAT_RAW16) {
             newStreamInfo.push_back(*it);
             it = mStreamInfo.erase(it);
@@ -7552,6 +7560,7 @@
             ANDROID_SCALER_AVAILABLE_FORMATS_YCbCr_420_888,
             ANDROID_SCALER_AVAILABLE_FORMATS_BLOB,
             HAL_PIXEL_FORMAT_RAW10,
+            HAL_PIXEL_FORMAT_RAW12,
             HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED};
     size_t scalar_formats_count = sizeof(scalar_formats) / sizeof(int32_t);
     staticInfo.update(ANDROID_SCALER_AVAILABLE_FORMATS,
@@ -7682,6 +7691,7 @@
         case ANDROID_SCALER_AVAILABLE_FORMATS_RAW16:
         case ANDROID_SCALER_AVAILABLE_FORMATS_RAW_OPAQUE:
         case HAL_PIXEL_FORMAT_RAW10:
+        case HAL_PIXEL_FORMAT_RAW12:
             for (size_t i = 0; i < MIN(MAX_SIZES_CNT,
                     gCamCapability[cameraId]->supported_raw_dim_cnt); i++) {
                 addStreamConfig(available_stream_configs, scalar_formats[j],
@@ -7740,6 +7750,7 @@
         case ANDROID_SCALER_AVAILABLE_FORMATS_RAW16:
         case ANDROID_SCALER_AVAILABLE_FORMATS_RAW_OPAQUE:
         case HAL_PIXEL_FORMAT_RAW10:
+        case HAL_PIXEL_FORMAT_RAW12:
             for (size_t i = 0; i < MIN(MAX_SIZES_CNT,
                     gCamCapability[cameraId]->supported_raw_dim_cnt); i++) {
                 available_min_durations.add(scalar_formats[j]);

其实只要在有raw10的地方加上raw12即可。

Android相机开发是指在Android系统中使用相机功能进行应用开发的过程。Android系统提供了丰富的相机API,使开发者可以轻松地实现与相机相关的功能。 首先,要在Android应用中使用相机,需要先获取相机实例。可以通过Camera类来获取相机实例,其提供了与相机硬件进行交互的方法和属性。可以通过调用open()方法来打开相机,并通过设置参数来配置相机的各种属性,如照片分辨率、闪光灯模式等。 接下来,可以使用SurfaceView来预览相机所拍摄的画面。SurfaceView是Android中用于显示实时画面的控件,可以通过SurfaceHolder来获取并控制SurfaceView的显示。 在进行拍照操作时,可以通过设置Camera.PictureCallback接口的实现来获取相机所拍摄的照片数据,并将其保存到指定的文件中。可以通过调用takePicture()方法来触发拍照动作,并在PictureCallback的回调方法中处理照片数据。 除了拍照功能,Android相机开发还可以实现其他功能,如录制视频、切换摄像头等。可以通过设置MediaRecorder来实现视频录制功能,通过调用Camera类中的方法来切换前后摄像头。 Android相机开发需要注意相机资源的管理和释放。在使用相机之前,需要先获取相机的访问权限,并在不使用相机时及时释放相机资源,避免资源泄漏。 总之,Android相机开发提供了丰富的API和功能,使开发者可以灵活地利用相机进行应用开发,实现各种有趣的相机功能和交互体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值