哪里可以找到 Android Camera API 锁定机制的实现?

Posted

技术标签:

【中文标题】哪里可以找到 Android Camera API 锁定机制的实现?【英文标题】:Where to find the implementation of the Android Camera API locking mechanism? 【发布时间】:2017-04-05 20:32:13 【问题描述】:

相机 API 使用 open() 和 release() 调用来防止来自不同应用程序/进程的多次访问,但我有点想知道底层机制是如何工作的。例如,不同进程之间是否存在互斥量共享?谁能指出我正确的地方,我做了一些谷歌搜索,但我找不到源代码。

【问题讨论】:

【参考方案1】:

我链接了一些 kitkat 源,因为它是 android.hardware.camera2 引入之前的最后一个版本。

锁是这样尝试的:

remote()->transact(LOCK, data, &reply);

remote() 似乎是系统服务。远程参考这个答案:Implementation of remote()

安卓源代码

https://android.googlesource.com/platform/frameworks/base/+/android-4.4.4_r2.0.1/core/java/android/hardware/Camera.java:

public native final void lock();

https://android.googlesource.com/platform/frameworks/base/+/android-4.4.4_r2.0.1/core/jni/android_hardware_Camera.cpp:

static void android_hardware_Camera_lock(JNIEnv *env, jobject thiz)

    ALOGV("lock");
    sp<Camera> camera = get_native_camera(env, thiz, NULL);
    if (camera == 0) return;
    if (camera->lock() != NO_ERROR) 
        jniThrowRuntimeException(env, "lock failed");
    

https://android.googlesource.com/platform/frameworks/av/+/android-4.4.4_r2.0.1/camera/Camera.cpp:

status_t Camera::lock()

    sp <ICamera> c = mCamera;
    if (c == 0) return NO_INIT;
    return c->lock();

https://android.googlesource.com/platform/frameworks/av/+/android-4.4.4_r2.0.1/include/camera/ICamera.h:

class ICamera: public IInterface

    // prevent other processes from using this ICamera interface
    virtual status_t        lock() = 0;

https://android.googlesource.com/platform/frameworks/av/+/android-4.4.4_r2.0.1/camera/ICamera.cpp:

class BpCamera: public BpInterface<ICamera>

    virtual status_t lock()
    
        Parcel data, reply;
        data.writeInterfaceToken(ICamera::getInterfaceDescriptor());
        remote()->transact(LOCK, data, &reply);
        return reply.readInt32();
    

【讨论】:

以上是关于哪里可以找到 Android Camera API 锁定机制的实现?的主要内容,如果未能解决你的问题,请参考以下文章

Android Camera开发系列(干货满满)

Android Camera2 API:捕获视频而不预览

问题支持Android相机的API和camera2 API问题,怎么解决

android.hardware.camera2.full 来自哪里?

Android 10(api 29)camera2 api回归与广角相机

Android Camera2画面黑屏,录像仅1秒