Android15 EVS HAL中使用Camera HAL Provider接口

EVS HAL和Camera HAL是Android系统中访问相机设备节点的两条路径,理论上是独立的两个HAL层。现在想做一个验证:EVS HAL初始化阶段通过Camera HAL Provider接口设备节点是否可行(理论上是可行的),查询操作的耗时怎样。

跨HAL访问Camera HAL Provider接口如下:

1.添加ICameraProvider的引用

cpp 复制代码
//packages/services/Car/cpp/evs/sampleDriver/aidl/src/EvsEnumerator.h
//添加ICameraProvider.h引用
#include <aidl/android/hardware/camera/provider/ICameraProvider.h>

//packages/services/Car/cpp/evs/sampleDriver/aidl/src/EvsEnumerator.cpp
//添加ICameraProvider namespace声明和接口使用
using ::aidl::android::hardware::camera::provider::ICameraProvider;

void EvsEnumerator::enumerateCameras() {
    if (!sConfigManager) {
        return;
    }

    //如下是查询CameraProvider
    LOG(INFO) << "#####START ";
    {
        std::vector<std::string> cameraList;
        const std::string serviceDescriptor = 
            std::string(ICameraProvider::descriptor) + "/internal/0";
        ndk::SpAIBinder cameraProviderBinder = 
            ndk::SpAIBinder(AServiceManager_waitForService(serviceDescriptor.c_str()));
        if (cameraProviderBinder.get() == nullptr) {
            LOG(ERROR) << "Get camera service failed.";
            return;
        }
        std::shared_ptr<ICameraProvider> cameraProvider = 
            ICameraProvider::fromBinder(cameraProviderBinder);
        if (cameraProvider.get() == nullptr) {
            LOG(ERROR) << "Get camera service failed.";
            return;
        }

        ScopedAStatus ret = cameraProvider->getCameraIdList(&cameraList);
        if (ret.get() == nullptr) {
            LOG(ERROR) << "Get camera list failed.";
        } else {
            LOG(INFO) << "The platform has " << cameraList.size() << " cameras";
        }
    }
    LOG(INFO) << "#####STOP ";
    ...
}

2.添加对ICameraProvider的依赖关系

cpp 复制代码
//packages/services/Car/cpp/evs/sampleDriver/aidl/Android.bp
cc_binary {
    name: "android.hardware.automotive.evs-default",
    defaults: ["android.hardware.graphics.common-ndk_static"],
    ...
    static_libs: [
        "android.frameworks.automotive.display-V2-ndk",
        "android.hardware.automotive.evs-V2-ndk",
        "android.hardware.common-V2-ndk",
        "libaidlcommonsupport",
        "libcutils",
        "android.hardware.camera.provider-V3-ndk",
    ]
    ...
}
相关推荐
2601_9637713711 小时前
Offloading WP-Cron and Securing Ticket Webhooks on Enterprise IT Sites
android
花燃柳卧11 小时前
跨平台路由组件工程源码补充上传
android·flutter·kotlin
apihz12 小时前
随机驾考题目(C 照科一 / 科四 2000+ 题)免费API调用教程
android·java·c语言·开发语言·网络协议·tcp/ip
宸翰12 小时前
uni-app 设置 Android 底部虚拟导航栏背景色
android·前端·uni-app
TechNomad12 小时前
Kotlin类对象与接口详解
android·kotlin
QiLinkOS17 小时前
QiLink OS的失败数据共享平台的运作模式是否适用于所有行业?
android·开发语言·人工智能·算法·重构·开源
杉氧18 小时前
Framework 补完计划 (2):BufferQueue 与 SurfaceFlinger —— 像素的跨进程“接力赛”
android·架构·android jetpack
牢七18 小时前
RCE?复现成功
android
一化十18 小时前
Android16 自定义全局手势 任意界面依次点击屏幕四个角返回Home界面
android
三少爷的鞋20 小时前
Android 面试系列:Kotlin 协程的 delay 到底发生在哪个线程?
android