发布时间 : 星期三 文章Android Camera API2中采用CameraMetadata用于从APP到HAL的参数交互更新完毕开始阅读cd02a0ac27d3240c8547ef44
d .add_camera_metadata_entry完成全新的entry更新与写入,即这个TAG目前不存在于这个camera_metadata_t中;update_camera_metadata_entry则是直接完成数据的更新。
[cpp] view plaincopy
1. mPreviewBuilder.set(CaptureRequest.CONTROL_AF_MODE, 2. CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE); 3. mPreviewBuilder.set(CaptureRequest.CONTROL_AE_MODE, 4. CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH); 5. session.setRepeatingRequest(mPreviewBuilder.build(), mSessionCaptureCallback, mHandler);
4. Java层中CameraMetadata.java和CameraMetadataNative.java 下面以API2中java层中设置AF的工作模式为例,来说明这个参数设置的过程:
[java] view plaincopy
1. mPreviewBuilder.set(CaptureRequest.CONTROL_AF_MODE, 2. CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE); 3. mPreviewBuilder.set(CaptureRequest.CONTROL_AE_MODE, 4. CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH); 5. session.setRepeatingRequest(mPreviewBuilder.build(), mSessionCaptureCallback, mHandler);
其中CONTROL_AF_MODE定义在CaptureRequest,java中如下以一个Key的形式存在:
[cpp] view plaincopy
1. public static final Key
1. public Key(String name, Class
1. public Key(String name, Class
其中CONTROL_AF_MODE_CONTINUOUS_PICTURE定义在CameraMetadata.java中 [cpp] view plaincopy
1. public static final int CONTROL_AF_MODE_CONTINUOUS_PICTURE = 4; 逐一定位set的入口:
a. mPreviewBuilder是CaptureRequest.java的build类,其会构建一个CaptureRequest
[cpp] view plaincopy
1. public Builder(CameraMetadataNative template) { 2. mRequest = new CaptureRequest(template); 3. } [java] view plaincopy
1. private CaptureRequest() { 2. mSettings = new CameraMetadataNative(); 3. mSurfaceSet = new HashSet
[java] view plaincopy
1. public CameraMetadataNative() { 2. super(); 3. mMetadataPtr = nativeAllocate(); 4. if (mMetadataPtr == 0) { 5. throw new OutOfMemoryError(\e CameraMetadata\); 6. } 7. }
b. CaptureRequest.Build.set() [cpp] view plaincopy
1. public
1. public
[java] view plaincopy
1. public CameraMetadataNative.Key
1. public
1. private
1. public final int getTag() { 2. if (!mHasTag) { 3. mTag = CameraMetadataNative.getTag(mName); 4. mHasTag = true; 5. } 6. return mTag; 7. } [java] view plaincopy