哪里可以找到 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相机的API和camera2 API问题,怎么解决
android.hardware.camera2.full 来自哪里?