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",
    ]
    ...
}
相关推荐
换元不配限2 小时前
从 AsyncTask 到现代并发:Android 异步方案的演进与替代实践
android·asynctask·异步编程·方案对比·asynctask替代方案
用户2018792831672 小时前
你的 App 为什么是「电量刺客」?——从一条 WakeLock 追到 Linux 内核的 Android 省电原理全解
android
mmsx2 小时前
Android 安全校验下沉到原生层:防 patch 与构建期自动化
android·安全·自动化
老牛日常随笔4 小时前
Google把Android测试搬进AI对话:ARTEMIS如何用自然语言操作你的手机
android·人工智能·智能手机
朱涛的自习室4 小时前
预算 1000 美金的开源软件,DeepSeek 只花 1 美金就做完了(Day 6)
android·前端·人工智能
mmsx5 小时前
Android APK 加固方案怎么落地:从加壳到校验的组合取舍
android·网络·安全·签名
hunterandroid5 小时前
Navigation Component 工程落地:从单 Activity 架构到深度链接配置
android·前端
撩得Android一次心动5 小时前
Jetpack Compose 知识点整理3【个人用】
android·笔记·学习·kotlin·android compose
Kapaseker6 小时前
别再只会写 <T>:Kotlin 泛型的实战用法
android·kotlin