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",
    ]
    ...
}
相关推荐
传奇开心果编程1 小时前
【Jetpack Compose进阶学与练】第14课:系列收尾复习总结;Compose项目常见坑点汇总;学习路线与后续学习方向
android·学习·ui·kotlin·android jetpack
李游Leo3 小时前
《HarmonyOS 7 精准碰一碰跨设备协作开发实战》07:异常恢复、状态机与CrossDrop工程收尾【鸿蒙心迹】
android·harmonyos
方白羽6 小时前
Android APK安全防护
android·安全·apk
小黄人软件6 小时前
AndroidStudio老项目 macOS运行BlueTooth蓝牙串口助手(Android+Studio源码).rar
android·macos
00后程序员张6 小时前
苹果App Store上架指南:费用、原理与步骤详解
android·ios·小程序·https·uni-app·iphone·webview
天神哥哥啊6 小时前
cocos联调注意事项-安卓
android
TDengine (老段)6 小时前
TDengine TSDB 实战排障四(升级与兼容)
android·java·大数据·数据库·物联网·时序数据库·tdengine
蓝速科技7 小时前
政务自助终端信创选型与无人值守落地方案
android·大数据·数据库·人工智能·科技·技术分享·政务
硫酸锌018 小时前
在手机上运行Python增量备份手机数据到PC电脑
android·windows·python
hai_android9 小时前
子 View 被压小时,如何向父容器"告状"?——MEASURED_STATE_TOO_SMALL 向上传递机制
android·kotlin·android jetpack