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

Where to find the implementation of the Android Camera API locking mechanism?

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

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

锁是这样试的:

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

其中 remote() 似乎是系统服务。参考这个关于远程的回答:Implementation of remote()

Android源代码

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();
    }
}