20230520查找中国移动的APP在RK3566下调用UVC摄像头出错

20230520查找中国移动的APP在RK3566下调用UVC摄像头出错
2023/5/20 23:34


SDK:Android12
RK3566平台  android12  UVC camera  没插摄像头,但是/dev/video0-13标号被占用,是啥原因导致的
板子上也没有摄像头
【板子没有接CSI/MIPI接口的I2C通道的摄像头】


1、查找/dev/videoX尝试确认问题:
v4l2-ctl --list-devices
确定有多余的东西
v4l2-ctl --list-formats-ext --device /dev/video9  


v4l2-ctl --list-formats-ext --device /dev/video9  
rk3566_s:/ # v4l2-ctl --list-devices
rkisp-statistics (platform: rkisp):
    /dev/video12
    /dev/video13

rkcif (platform:rkcif_mipi_lvds):
    /dev/video0
    /dev/video1
    /dev/video2
    /dev/video3
    /dev/video4

rkisp_mainpath (platform:rkisp-vir0):
    /dev/video5
    /dev/video6
    /dev/video7
    /dev/video8
    /dev/video9
    /dev/video10
    /dev/video11


应该是2手(SDK),没有其他开发板了,所以没测试过。
只对比过之前公司一个项目是其他公司的板子,上面也是RK3566和Android11,是正常的。
怀疑rkcif (platform:rkcif_mipi_lvds)这些节点是RK自己生成的


2、SDK的编译步骤:
source build/envsetup.sh
lunch rk3566_s-userdebug
./build.sh -AUCKu -d rk3566-evb2-lp4x-v10


E/Camera-JNI: android_hardware_Camera_getCameraInfo: Unknown camera ID 114


RK3566使用Android12(linux-5.10)
<11>[  529.484636][    T1] init: Control message: Could not find 'aidl/SurfaceFlinger' for ctl.interface_start from pid: 231 (/system/bin/servicemanager)
<11>[  530.460081][    T1] init: Control message: Could not find 'aidl/SurfaceFlinger' for ctl.interface_start from pid: 231 (/system/bin/servicemanager)
<11>[  530.485531][    T1] init: Control message: Could not find 'aidl/SurfaceFlinger' for ctl.interface_start from pid: 231 (/system/bin/servicemanager)
<14>[  530.832660][    T1] init: starting service 'surfaceflinger'...

卡在开机了起不来


3、这里的100改为0就可以
/media/imab/data/rk/RK3566/hardware/interfaces/camera/device/3.4/default /ExternalCamerautils.cpp (hardware)

Z:\RK3588-sdk\hardware\interfaces\camera\device\3.4\default\ExternalCameraUtils.cpp


int AllocatedV4L2Frame::getData(uint8_t** outData, size_t* dataSize) {
    if (outData == nullptr || dataSize == nullptr) {
        ALOGE("%s: outData(%p)/dataSize(%p) must not be null", __FUNCTION__, outData, dataSize);
        return -1;
    }

    *outData = mData.data();
    *dataSize = mData.size();
    return 0;
}

AllocatedV4L2Frame::~AllocatedV4L2Frame() {}

}  // namespace implementation
}  // namespace V3_6
}  // namespace device


namespace external {
namespace common {

namespace {
    const int kDefaultCameraIdOffset = 0;  // 100
    const int kDefaultJpegBufSize = 5 << 20; // 5MB
    const int kDefaultNumVideoBuffer = 4;
    const int kDefaultNumStillBuffer = 2;
    const int kDefaultOrientation = 0; // suitable for natural landscape displays like tablet/TV
                                       // For phone devices 270 is better
} // anonymous namespace

const char* ExternalCameraConfig::kDefaultCfgPath = "/vendor/etc/external_camera_config.xml";


结论:
移动云APP是调用的camera1接口,那个接口应该是被camera2接口取代了,那里面对camera id的判断逻辑有点问题。
而我们现在的USB camera的id默认会加100的offset值,比如说设备节点是/dev/video14,camera id就是114。
这样导致在那里面会直接抛异常,现在就是在camera的HAL层生成camera id时去掉那个offset值,直接和设备节点保持匹配就能适配camera1了。


这样干之后会有其他后果不!比如和i2c摄像头冲突
不会的,如果有其他摄像头会排在usb camera前面


cvitek晶视的cv1826也出现这种情况了 
从video100开始:
/dev/video100
/dev/video102
/dev/video103
/dev/video104
/dev/video105
/dev/video106
/dev/video107
/dev/video109


RK3566+Android12:我那个代码是4.19

Z:\smartpen\linux\build\cv1826_wevb_0005a\.config
CV1826:# Linux/arm 4.19.164 Kernel Configuration


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android 10上,应用程序可以使用UVC(USB Video Class)标准来打开摄像头UVC是一种基于USB设备的视频通信标准,它允许应用程序与外部摄像头进行通信并接收视频流。下面是使用UVC打开摄像头的步骤: 1. 在AndroidManifest.xml文件中添加相应的权限。例如,添加相机权限:<uses-permission android:name="android.permission.CAMERA" /> 2. 在应用程序中使用摄像头API来检测是否有支持UVC摄像头设备。可以使用USBManager类来获取连接的USB设备列表,并判断其中是否有UVC摄像头。 3. 如果有支持UVC摄像头设备,则可以使用USBManager类打开该设备。使用openDevice()方法打开设备,然后使用claimInterface()方法请求访问USB接口。 4. 打开摄像头设备之后,可以使用相应的UVC命令来设置和控制摄像头的功能。例如,使用UVC命令来调整曝光、对焦、白平衡等设置。 5. 接下来,可以使用UVC摄像头的输出流来获取视频数据。可以使用USBManager的bulkTransfer()方法从USB设备接收视频数据流,并进行相应的处理和显示。 需要注意的是,在使用UVC打开摄像头时,需要保证设备具有UVC驱动程序的支持,并且摄像头设备已正确连接到Android设备的USB端口。此外,还需要注意权限的申请和正确的UVC命令的使用,以便能够正确地与UVC摄像头进行通信和控制。 总之,使用UVC打开摄像头可以为Android 10上的应用程序提供与外部摄像头的连接和视频数据传输功能,让应用程序能够更加灵活地处理和显示摄像头的图像数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值