欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 维修 > Android 底层判断/dev/video节点是否是可用摄像头

Android 底层判断/dev/video节点是否是可用摄像头

2025/4/24 5:52:58 来源:https://blog.csdn.net/u010689853/article/details/145746097  浏览:    关键词:Android 底层判断/dev/video节点是否是可用摄像头

Android 底层判断/dev/video节点是否是可用摄像头
峥嵘life
于 2021-09-05 18:02:33 发布
阅读量3.7k
收藏 5
点赞数 3
分类专栏: Camera android 文章标签: android
版权
android 同时被 2 个专栏收录
419 篇文章 58 订阅
订阅专栏
Camera
7 篇文章 2 订阅
订阅专栏
Android 底层判断/dev/video节点是否是可用摄像头

Android设备Camera节点数据是存在/dev/下面的,
比如有设备三个摄像头/dev目录会有下面的节点名称:video0、video1、video2

Android 设备插入Usb摄像头时,会有出现有些设备存在多个video节点,但是并不是所有的节点都能显示预览

Android java的java代码是无法用读取文件的方式进行video节点信息进行读取

但是可以C++代码进行open,根据返回的数值判断是否是支持Camera预览的节点。

代码如下:

/frameworks/base/services/core/jni/com_android_server_camera_CameraServiceProxy.cpp

static bool isSupportCameraDevice(const char* device) {
    ALOGD("is support device = %s", device);
    struct v4l2_fmtdesc fmt;
    fmt.index = 0;
    fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
    int fd = open(device, O_RDWR);
    ALOGD("is support device fd = %d", fd);
    if (fd < 0) {
        return false;
    }
    while(ioctl(fd, VIDIOC_ENUM_FMT, &fmt) == 0) {
        ALOGD("is support device = %c %c %c %c",
                (fmt.pixelformat) & 0xFF, (fmt.pixelformat >> 8) & 0xFF,
                (fmt.pixelformat >> 16) & 0xFF, (fmt.pixelformat >> 24) & 0xFF);
        // 重点:
        if ( SUPPORT_FORMAT(fmt.pixelformat, "YUYV")
            || SUPPORT_FORMAT(fmt.pixelformat, "yuyv")
            || SUPPORT_FORMAT(fmt.pixelformat, "MJPG")
            || SUPPORT_FORMAT(fmt.pixelformat, "mjpg")) {
                ALOGD("is support device true");
                    int fdColde = close(fd);
                    ALOGD("is support device fdColde = %d", fdColde);
                return true;
            }
        fmt.index;
    }
    int fdColde2 = close(fd);
    ALOGD("is support device fdColde2 = %d", fdColde2);
    return false;
}

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32

其中传入的device字符串是绝对路径,比如"/dev/video0"

这里是在jni代码中判断,其实也是可以在更下的C++底层判断。

重要的是里面判断节点属性支持的格式代码,这个是关键点
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
                        
原文链接:https://blog.csdn.net/wenzhi20102321/article/details/120118593

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词