Loading core/java/android/hardware/photography/ICameraDeviceUser.aidl +2 −0 Original line number Diff line number Diff line Loading @@ -43,4 +43,6 @@ interface ICameraDeviceUser int createDefaultRequest(int templateId, out CameraMetadata request); int getCameraInfo(out CameraMetadata info); int waitUntilIdle(); } core/java/android/hardware/photography/impl/CameraDevice.java +21 −4 Original line number Diff line number Diff line Loading @@ -65,9 +65,6 @@ public class CameraDevice implements android.hardware.photography.CameraDevice { return mCallbacks; } /** * @hide */ public void setRemoteDevice(ICameraDeviceUser remoteDevice) { mRemoteDevice = remoteDevice; } Loading Loading @@ -209,7 +206,22 @@ public class CameraDevice implements android.hardware.photography.CameraDevice { @Override public void waitUntilIdle() throws CameraAccessException { // TODO: implement synchronized (mLock) { checkIfCameraClosed(); if (!mRepeatingRequestIdStack.isEmpty()) { throw new IllegalStateException("Active repeating request ongoing"); } try { mRemoteDevice.waitUntilIdle(); } catch (CameraRuntimeException e) { throw e.asChecked(); } catch (RemoteException e) { // impossible return; } } } @Override Loading Loading @@ -329,4 +341,9 @@ public class CameraDevice implements android.hardware.photography.CameraDevice { } private void checkIfCameraClosed() { if (mRemoteDevice == null) { throw new IllegalStateException("CameraDevice was already closed"); } } } media/jni/android_media_ImageReader.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -300,7 +300,7 @@ static void Image_getLockedBufferInfo(JNIEnv* env, CpuConsumer::LockedBuffer* bu ALOG_ASSERT(size != NULL, "size is NULL!!!"); ALOG_ASSERT((idx < IMAGE_READER_MAX_NUM_PLANES) && (idx >= 0)); ALOGV("%s: buffer: 0x%p", __FUNCTION__, buffer); ALOGV("%s: buffer: %p", __FUNCTION__, buffer); uint32_t dataSize, ySize, cSize, cStride; uint8_t *cb, *cr; Loading Loading @@ -633,7 +633,7 @@ static jboolean ImageReader_imageSetup(JNIEnv* env, jobject thiz, } status_t res = consumer->lockNextBuffer(buffer); if (res != NO_ERROR) { ALOGE("%s Fail to lockNextBuffer with error: 0x%x ", __FUNCTION__, res); ALOGE("%s Fail to lockNextBuffer with error: %d ", __FUNCTION__, res); return false; } Loading media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/integration/CameraBinderTestUtils.java +1 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ public class CameraBinderTestUtils { protected static final int USE_CALLING_UID = -1; protected static final int BAD_VALUE = -22; protected static final int INVALID_OPERATION = -38; protected static final int ALREADY_EXISTS = -17; public static final int NO_ERROR = 0; private final Context mContext; Loading media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/integration/CameraDeviceBinderTest.java +45 −0 Original line number Diff line number Diff line Loading @@ -307,4 +307,49 @@ public class CameraDeviceBinderTest extends AndroidTestCase { assertNotNull(info.get(CameraPropertiesKeys.Scaler.AVAILABLE_FORMATS)); } @SmallTest public void testWaitUntilIdle() throws Exception { CameraMetadata metadata = new CameraMetadata(); assertTrue(metadata.isEmpty()); CaptureRequest request = new CaptureRequest(); assertTrue(request.isEmpty()); // Create default request from template. int status = mCameraUser.createDefaultRequest(TEMPLATE_PREVIEW, /* out */metadata); assertEquals(CameraBinderTestUtils.NO_ERROR, status); assertFalse(metadata.isEmpty()); request.swap(metadata); assertFalse(request.isEmpty()); assertTrue(metadata.isEmpty()); SurfaceTexture surfaceTexture = new SurfaceTexture(/* ignored */0); surfaceTexture.setDefaultBufferSize(640, 480); Surface surface = new Surface(surfaceTexture); // Create stream first. Pre-requisite to submitting a request using that // stream. int streamId = mCameraUser.createStream(/* ignored */10, /* ignored */20, /* ignored */30, surface); assertEquals(0, streamId); request.addTarget(surface); int requestIdStreaming = mCameraUser.submitRequest(request, /* streaming */true); assertTrue("Request IDs should be non-negative", requestIdStreaming >= 0); // Test Bad case first: waitUntilIdle when there is active repeating request status = mCameraUser.waitUntilIdle(); assertEquals("waitUntilIdle is invalid operation when there is active repeating request", CameraBinderTestUtils.INVALID_OPERATION, status); // Test good case, waitUntilIdle when there is no active repeating request status = mCameraUser.cancelRequest(requestIdStreaming); assertEquals(CameraBinderTestUtils.NO_ERROR, status); status = mCameraUser.waitUntilIdle(); assertEquals(CameraBinderTestUtils.NO_ERROR, status); } } Loading
core/java/android/hardware/photography/ICameraDeviceUser.aidl +2 −0 Original line number Diff line number Diff line Loading @@ -43,4 +43,6 @@ interface ICameraDeviceUser int createDefaultRequest(int templateId, out CameraMetadata request); int getCameraInfo(out CameraMetadata info); int waitUntilIdle(); }
core/java/android/hardware/photography/impl/CameraDevice.java +21 −4 Original line number Diff line number Diff line Loading @@ -65,9 +65,6 @@ public class CameraDevice implements android.hardware.photography.CameraDevice { return mCallbacks; } /** * @hide */ public void setRemoteDevice(ICameraDeviceUser remoteDevice) { mRemoteDevice = remoteDevice; } Loading Loading @@ -209,7 +206,22 @@ public class CameraDevice implements android.hardware.photography.CameraDevice { @Override public void waitUntilIdle() throws CameraAccessException { // TODO: implement synchronized (mLock) { checkIfCameraClosed(); if (!mRepeatingRequestIdStack.isEmpty()) { throw new IllegalStateException("Active repeating request ongoing"); } try { mRemoteDevice.waitUntilIdle(); } catch (CameraRuntimeException e) { throw e.asChecked(); } catch (RemoteException e) { // impossible return; } } } @Override Loading Loading @@ -329,4 +341,9 @@ public class CameraDevice implements android.hardware.photography.CameraDevice { } private void checkIfCameraClosed() { if (mRemoteDevice == null) { throw new IllegalStateException("CameraDevice was already closed"); } } }
media/jni/android_media_ImageReader.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -300,7 +300,7 @@ static void Image_getLockedBufferInfo(JNIEnv* env, CpuConsumer::LockedBuffer* bu ALOG_ASSERT(size != NULL, "size is NULL!!!"); ALOG_ASSERT((idx < IMAGE_READER_MAX_NUM_PLANES) && (idx >= 0)); ALOGV("%s: buffer: 0x%p", __FUNCTION__, buffer); ALOGV("%s: buffer: %p", __FUNCTION__, buffer); uint32_t dataSize, ySize, cSize, cStride; uint8_t *cb, *cr; Loading Loading @@ -633,7 +633,7 @@ static jboolean ImageReader_imageSetup(JNIEnv* env, jobject thiz, } status_t res = consumer->lockNextBuffer(buffer); if (res != NO_ERROR) { ALOGE("%s Fail to lockNextBuffer with error: 0x%x ", __FUNCTION__, res); ALOGE("%s Fail to lockNextBuffer with error: %d ", __FUNCTION__, res); return false; } Loading
media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/integration/CameraBinderTestUtils.java +1 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ public class CameraBinderTestUtils { protected static final int USE_CALLING_UID = -1; protected static final int BAD_VALUE = -22; protected static final int INVALID_OPERATION = -38; protected static final int ALREADY_EXISTS = -17; public static final int NO_ERROR = 0; private final Context mContext; Loading
media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/integration/CameraDeviceBinderTest.java +45 −0 Original line number Diff line number Diff line Loading @@ -307,4 +307,49 @@ public class CameraDeviceBinderTest extends AndroidTestCase { assertNotNull(info.get(CameraPropertiesKeys.Scaler.AVAILABLE_FORMATS)); } @SmallTest public void testWaitUntilIdle() throws Exception { CameraMetadata metadata = new CameraMetadata(); assertTrue(metadata.isEmpty()); CaptureRequest request = new CaptureRequest(); assertTrue(request.isEmpty()); // Create default request from template. int status = mCameraUser.createDefaultRequest(TEMPLATE_PREVIEW, /* out */metadata); assertEquals(CameraBinderTestUtils.NO_ERROR, status); assertFalse(metadata.isEmpty()); request.swap(metadata); assertFalse(request.isEmpty()); assertTrue(metadata.isEmpty()); SurfaceTexture surfaceTexture = new SurfaceTexture(/* ignored */0); surfaceTexture.setDefaultBufferSize(640, 480); Surface surface = new Surface(surfaceTexture); // Create stream first. Pre-requisite to submitting a request using that // stream. int streamId = mCameraUser.createStream(/* ignored */10, /* ignored */20, /* ignored */30, surface); assertEquals(0, streamId); request.addTarget(surface); int requestIdStreaming = mCameraUser.submitRequest(request, /* streaming */true); assertTrue("Request IDs should be non-negative", requestIdStreaming >= 0); // Test Bad case first: waitUntilIdle when there is active repeating request status = mCameraUser.waitUntilIdle(); assertEquals("waitUntilIdle is invalid operation when there is active repeating request", CameraBinderTestUtils.INVALID_OPERATION, status); // Test good case, waitUntilIdle when there is no active repeating request status = mCameraUser.cancelRequest(requestIdStreaming); assertEquals(CameraBinderTestUtils.NO_ERROR, status); status = mCameraUser.waitUntilIdle(); assertEquals(CameraBinderTestUtils.NO_ERROR, status); } }