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",
    ]
    ...
}
相关推荐
2501_915918412 小时前
除了 Perfdog,如何在 Windows 环境中完成 iOS App 的性能测试工作
android·ios·小程序·https·uni-app·iphone·webview
泓博2 小时前
Android状态栏文字图标设置失效
android·composer
叶羽西3 小时前
Android15系统中(娱乐框架和车机框架)中对摄像头的朝向是怎么定义的
android
Java小白中的菜鸟3 小时前
安卓studio链接夜神模拟器的一些问题
android
莫比乌斯环3 小时前
【Android技能点】深入解析 Android 中 Handler、Looper 和 Message 的关系及全局监听方案
android·消息队列
编程之路从0到13 小时前
React Native新架构之Android端初始化源码分析
android·react native·源码阅读
行稳方能走远3 小时前
Android java 学习笔记2
android·java
编程之路从0到14 小时前
React Native 之Android端 Bolts库
android·前端·react native
爬山算法4 小时前
Hibernate(38)如何在Hibernate中配置乐观锁?
android·java·hibernate