Loading camera/Camera.cpp +14 −18 Original line number Diff line number Diff line Loading @@ -99,23 +99,21 @@ status_t Camera::unlock() return c->unlock(); } // pass the buffered IGraphicBufferProducer to the camera service status_t Camera::setPreviewTarget(const sp<IGraphicBufferProducer>& bufferProducer) { ALOGV("setPreviewTarget(%p)", bufferProducer.get()); // pass the Surface to the camera service status_t Camera::setPreviewTarget(const sp<SurfaceType>& target) { ALOGV("setPreviewTarget(%p)", target.get()); sp<::android::hardware::ICamera> c = mCamera; if (c == 0) return NO_INIT; ALOGD_IF(bufferProducer == 0, "app passed NULL surface"); return c->setPreviewTarget(bufferProducer); ALOGD_IF(target == 0, "app passed NULL surface"); return c->setPreviewTarget(target); } status_t Camera::setVideoTarget(const sp<IGraphicBufferProducer>& bufferProducer) { ALOGV("setVideoTarget(%p)", bufferProducer.get()); status_t Camera::setVideoTarget(const sp<SurfaceType>& target) { ALOGV("setVideoTarget(%p)", target.get()); sp<::android::hardware::ICamera> c = mCamera; if (c == 0) return NO_INIT; ALOGD_IF(bufferProducer == 0, "app passed NULL video surface"); return c->setVideoTarget(bufferProducer); ALOGD_IF(target == 0, "app passed NULL video surface"); return c->setVideoTarget(target); } // start preview mode Loading Loading @@ -272,12 +270,10 @@ void Camera::setPreviewCallbackFlags(int flag) c->setPreviewCallbackFlag(flag); } status_t Camera::setPreviewCallbackTarget( const sp<IGraphicBufferProducer>& callbackProducer) { status_t Camera::setPreviewCallbackTarget(const sp<SurfaceType>& target) { sp<::android::hardware::ICamera> c = mCamera; if (c == 0) return NO_INIT; return c->setPreviewCallbackTarget(callbackProducer); return c->setPreviewCallbackTarget(target); } status_t Camera::setAudioRestriction(int32_t mode) Loading camera/ICamera.cpp +88 −17 Original line number Diff line number Diff line Loading @@ -17,16 +17,16 @@ //#define LOG_NDEBUG 0 #define LOG_TAG "ICamera" #include <utils/Log.h> #include <stdint.h> #include <sys/types.h> #include <binder/Parcel.h> #include <camera/CameraUtils.h> #include <android/hardware/ICamera.h> #include <android/hardware/ICameraClient.h> #include <gui/IGraphicBufferProducer.h> #include <binder/Parcel.h> #include <camera/CameraUtils.h> #include <gui/Surface.h> #include <gui/view/Surface.h> #include <media/hardware/HardwareAPI.h> #include <stdint.h> #include <sys/types.h> #include <utils/Log.h> namespace android { namespace hardware { Loading @@ -34,8 +34,14 @@ namespace hardware { enum { DISCONNECT = IBinder::FIRST_CALL_TRANSACTION, SET_PREVIEW_TARGET, #if WB_LIBCAMERASERVICE_WITH_DEPENDENCIES SET_PREVIEW_TARGET_SURFACE, #endif SET_PREVIEW_CALLBACK_FLAG, SET_PREVIEW_CALLBACK_TARGET, #if WB_LIBCAMERASERVICE_WITH_DEPENDENCIES SET_PREVIEW_CALLBACK_TARGET_SURFACE, #endif START_PREVIEW, STOP_PREVIEW, AUTO_FOCUS, Loading @@ -54,6 +60,9 @@ enum { RELEASE_RECORDING_FRAME, SET_VIDEO_BUFFER_MODE, SET_VIDEO_BUFFER_TARGET, #if WB_LIBCAMERASERVICE_WITH_DEPENDENCIES SET_VIDEO_BUFFER_TARGET_SURFACE, #endif RELEASE_RECORDING_FRAME_HANDLE, RELEASE_RECORDING_FRAME_HANDLE_BATCH, SET_AUDIO_RESTRICTION, Loading @@ -79,15 +88,20 @@ public: return binder::Status::ok(); } // pass the buffered IGraphicBufferProducer to the camera service status_t setPreviewTarget(const sp<IGraphicBufferProducer>& bufferProducer) { // pass the Surface to the camera service status_t setPreviewTarget(const sp<SurfaceType>& target) { ALOGV("setPreviewTarget"); Parcel data, reply; data.writeInterfaceToken(ICamera::getInterfaceDescriptor()); sp<IBinder> b(IInterface::asBinder(bufferProducer)); #if WB_LIBCAMERASERVICE_WITH_DEPENDENCIES view::Surface viewSurfaceProducer = view::Surface::fromSurface(target); data.writeParcelable(viewSurfaceProducer); remote()->transact(SET_PREVIEW_TARGET_SURFACE, data, &reply); #else sp<IBinder> b(IInterface::asBinder(target)); data.writeStrongBinder(b); remote()->transact(SET_PREVIEW_TARGET, data, &reply); #endif return reply.readInt32(); } Loading @@ -102,15 +116,19 @@ public: remote()->transact(SET_PREVIEW_CALLBACK_FLAG, data, &reply); } status_t setPreviewCallbackTarget( const sp<IGraphicBufferProducer>& callbackProducer) { status_t setPreviewCallbackTarget(const sp<SurfaceType>& target) { ALOGV("setPreviewCallbackTarget"); Parcel data, reply; data.writeInterfaceToken(ICamera::getInterfaceDescriptor()); sp<IBinder> b(IInterface::asBinder(callbackProducer)); #if WB_LIBCAMERASERVICE_WITH_DEPENDENCIES view::Surface viewCallbackProducer = view::Surface::fromSurface(target); data.writeParcelable(viewCallbackProducer); remote()->transact(SET_PREVIEW_CALLBACK_TARGET_SURFACE, data, &reply); #else sp<IBinder> b(IInterface::asBinder(target)); data.writeStrongBinder(b); remote()->transact(SET_PREVIEW_CALLBACK_TARGET, data, &reply); #endif return reply.readInt32(); } Loading Loading @@ -326,14 +344,19 @@ public: return reply.readInt32(); } status_t setVideoTarget(const sp<IGraphicBufferProducer>& bufferProducer) { status_t setVideoTarget(const sp<SurfaceType>& target) { ALOGV("setVideoTarget"); Parcel data, reply; data.writeInterfaceToken(ICamera::getInterfaceDescriptor()); sp<IBinder> b(IInterface::asBinder(bufferProducer)); #if WB_LIBCAMERASERVICE_WITH_DEPENDENCIES view::Surface viewSurfaceProducer = view::Surface::fromSurface(target); data.writeParcelable(viewSurfaceProducer); remote()->transact(SET_VIDEO_BUFFER_TARGET_SURFACE, data, &reply); #else sp<IBinder> b(IInterface::asBinder(target)); data.writeStrongBinder(b); remote()->transact(SET_VIDEO_BUFFER_TARGET, data, &reply); #endif return reply.readInt32(); } }; Loading @@ -358,9 +381,25 @@ status_t BnCamera::onTransact( CHECK_INTERFACE(ICamera, data, reply); sp<IGraphicBufferProducer> st = interface_cast<IGraphicBufferProducer>(data.readStrongBinder()); #if WB_LIBCAMERASERVICE_WITH_DEPENDENCIES sp<Surface> sp = new Surface(st); reply->writeInt32(setPreviewTarget(sp)); #else reply->writeInt32(setPreviewTarget(st)); #endif return NO_ERROR; } break; #if WB_LIBCAMERASERVICE_WITH_DEPENDENCIES case SET_PREVIEW_TARGET_SURFACE: { ALOGV("SET_PREVIEW_TARGET_SURFACE"); CHECK_INTERFACE(ICamera, data, reply); view::Surface viewSurface; data.readParcelable(&viewSurface); sp<Surface> st = viewSurface.toSurface(); reply->writeInt32(setPreviewTarget(st)); return NO_ERROR; } break; #endif case SET_PREVIEW_CALLBACK_FLAG: { ALOGV("SET_PREVIEW_CALLBACK_TYPE"); CHECK_INTERFACE(ICamera, data, reply); Loading @@ -373,9 +412,25 @@ status_t BnCamera::onTransact( CHECK_INTERFACE(ICamera, data, reply); sp<IGraphicBufferProducer> cp = interface_cast<IGraphicBufferProducer>(data.readStrongBinder()); #if WB_LIBCAMERASERVICE_WITH_DEPENDENCIES sp<Surface> sp = new Surface(cp); reply->writeInt32(setPreviewCallbackTarget(sp)); #else reply->writeInt32(setPreviewCallbackTarget(cp)); #endif return NO_ERROR; } #if WB_LIBCAMERASERVICE_WITH_DEPENDENCIES case SET_PREVIEW_CALLBACK_TARGET_SURFACE: { ALOGV("SET_PREVIEW_CALLBACK_TARGET_SURFACE"); CHECK_INTERFACE(ICamera, data, reply); view::Surface viewSurface; data.readParcelable(&viewSurface); sp<Surface> cp = viewSurface.toSurface(); reply->writeInt32(setPreviewCallbackTarget(cp)); return NO_ERROR; } #endif case START_PREVIEW: { ALOGV("START_PREVIEW"); CHECK_INTERFACE(ICamera, data, reply); Loading Loading @@ -508,9 +563,25 @@ status_t BnCamera::onTransact( CHECK_INTERFACE(ICamera, data, reply); sp<IGraphicBufferProducer> st = interface_cast<IGraphicBufferProducer>(data.readStrongBinder()); #if WB_LIBCAMERASERVICE_WITH_DEPENDENCIES sp<Surface> sp = new Surface(st); reply->writeInt32(setVideoTarget(sp)); #else reply->writeInt32(setVideoTarget(st)); #endif return NO_ERROR; } break; #if WB_LIBCAMERASERVICE_WITH_DEPENDENCIES case SET_VIDEO_BUFFER_TARGET_SURFACE: { ALOGV("SET_VIDEO_BUFFER_TARGET_SURFACE"); CHECK_INTERFACE(ICamera, data, reply); view::Surface viewSurface; data.readParcelable(&viewSurface); sp<Surface> cp = viewSurface.toSurface(); reply->writeInt32(setVideoTarget(cp)); return NO_ERROR; } break; #endif case SET_AUDIO_RESTRICTION: { CHECK_INTERFACE(ICamera, data, reply); int32_t mode = data.readInt32(); Loading camera/include/camera/Camera.h +13 −9 Original line number Diff line number Diff line Loading @@ -21,13 +21,18 @@ #include <android/hardware/ICameraService.h> #include <gui/IGraphicBufferProducer.h> #include <system/camera.h> #include <camera/CameraBase.h> #include <camera/CameraUtils.h> #include <camera/ICameraRecordingProxy.h> #include <camera/android/hardware/ICamera.h> #include <camera/android/hardware/ICameraClient.h> #include <camera/CameraBase.h> #include <camera/CameraUtils.h> #include <gui/Flags.h> #if WB_LIBCAMERASERVICE_WITH_DEPENDENCIES #include <gui/Surface.h> #else #include <gui/IGraphicBufferProducer.h> #endif #include <system/camera.h> namespace android { Loading Loading @@ -91,8 +96,8 @@ public: status_t lock(); status_t unlock(); // pass the buffered IGraphicBufferProducer to the camera service status_t setPreviewTarget(const sp<IGraphicBufferProducer>& bufferProducer); // pass the SurfaceType to the camera service status_t setPreviewTarget(const sp<SurfaceType>& target); // start preview mode, must call setPreviewTarget first status_t startPreview(); Loading Loading @@ -148,7 +153,7 @@ public: // Set the video buffer producer for camera to use in VIDEO_BUFFER_MODE_BUFFER_QUEUE // mode. status_t setVideoTarget(const sp<IGraphicBufferProducer>& bufferProducer); status_t setVideoTarget(const sp<SurfaceType>& target); void setListener(const sp<CameraListener>& listener); Loading @@ -158,8 +163,7 @@ public: // disabled by calling it with CAMERA_FRAME_CALLBACK_FLAG_NOOP, and // Target by calling it with a NULL interface. void setPreviewCallbackFlags(int preview_callback_flag); status_t setPreviewCallbackTarget( const sp<IGraphicBufferProducer>& callbackProducer); status_t setPreviewCallbackTarget(const sp<SurfaceType>& target); sp<ICameraRecordingProxy> getRecordingProxy(); Loading camera/include/camera/android/hardware/ICamera.h +5 −7 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ #include <binder/Parcel.h> #include <binder/IMemory.h> #include <binder/Status.h> #include <gui/Flags.h> #include <utils/String8.h> namespace android { Loading Loading @@ -61,9 +62,8 @@ public: // allow other processes to use this ICamera interface virtual status_t unlock() = 0; // pass the buffered IGraphicBufferProducer to the camera service virtual status_t setPreviewTarget( const sp<IGraphicBufferProducer>& bufferProducer) = 0; // pass the SurfaceType to the camera service virtual status_t setPreviewTarget(const sp<SurfaceType>& bufferProducer) = 0; // set the preview callback flag to affect how the received frames from // preview are handled. Enabling preview callback flags disables any active Loading @@ -73,8 +73,7 @@ public: // of preview callback buffers. Passing a valid interface here disables any // active preview callbacks set by setPreviewCallbackFlag(). Passing NULL // disables the use of the callback target. virtual status_t setPreviewCallbackTarget( const sp<IGraphicBufferProducer>& callbackProducer) = 0; virtual status_t setPreviewCallbackTarget(const sp<SurfaceType>& callbackProducer) = 0; // start preview mode, must call setPreviewTarget first virtual status_t startPreview() = 0; Loading Loading @@ -138,8 +137,7 @@ public: virtual status_t setVideoBufferMode(int32_t videoBufferMode) = 0; // Set the video buffer producer for camera to use in VIDEO_BUFFER_MODE_BUFFER_QUEUE mode. virtual status_t setVideoTarget( const sp<IGraphicBufferProducer>& bufferProducer) = 0; virtual status_t setVideoTarget(const sp<SurfaceType>& bufferProducer) = 0; // Set the audio restriction mode virtual status_t setAudioRestriction(int32_t mode) = 0; Loading camera/tests/CameraZSLTests.cpp +13 −9 Original line number Diff line number Diff line Loading @@ -20,17 +20,18 @@ #include <gtest/gtest.h> #include <android/content/AttributionSourceState.h> #include <android/hardware/ICameraService.h> #include <binder/ProcessState.h> #include <utils/Errors.h> #include <utils/Log.h> #include <gui/Surface.h> #include <gui/SurfaceComposerClient.h> #include <camera/CameraParameters.h> #include <camera/CameraMetadata.h> #include <camera/Camera.h> #include <camera/CameraMetadata.h> #include <camera/CameraParameters.h> #include <camera/CameraUtils.h> #include <camera/StringUtils.h> #include <android/hardware/ICameraService.h> #include <gui/Flags.h> #include <gui/Surface.h> #include <gui/SurfaceComposerClient.h> #include <utils/Errors.h> #include <utils/Log.h> using namespace android; using namespace android::hardware; Loading Loading @@ -276,8 +277,11 @@ TEST_F(CameraZSLTests, TestAllPictureSizes) { previewSurface = surfaceControl->getSurface(); ASSERT_TRUE(previewSurface != NULL); ASSERT_EQ(NO_ERROR, cameraDevice->setPreviewTarget( previewSurface->getIGraphicBufferProducer())); ASSERT_EQ(NO_ERROR, cameraDevice->setPreviewTarget(previewSurface #if !WB_LIBCAMERASERVICE_WITH_DEPENDENCIES ->getIGraphicBufferProducer() #endif )); cameraDevice->setPreviewCallbackFlag( CAMERA_FRAME_CALLBACK_FLAG_CAMCORDER); Loading Loading
camera/Camera.cpp +14 −18 Original line number Diff line number Diff line Loading @@ -99,23 +99,21 @@ status_t Camera::unlock() return c->unlock(); } // pass the buffered IGraphicBufferProducer to the camera service status_t Camera::setPreviewTarget(const sp<IGraphicBufferProducer>& bufferProducer) { ALOGV("setPreviewTarget(%p)", bufferProducer.get()); // pass the Surface to the camera service status_t Camera::setPreviewTarget(const sp<SurfaceType>& target) { ALOGV("setPreviewTarget(%p)", target.get()); sp<::android::hardware::ICamera> c = mCamera; if (c == 0) return NO_INIT; ALOGD_IF(bufferProducer == 0, "app passed NULL surface"); return c->setPreviewTarget(bufferProducer); ALOGD_IF(target == 0, "app passed NULL surface"); return c->setPreviewTarget(target); } status_t Camera::setVideoTarget(const sp<IGraphicBufferProducer>& bufferProducer) { ALOGV("setVideoTarget(%p)", bufferProducer.get()); status_t Camera::setVideoTarget(const sp<SurfaceType>& target) { ALOGV("setVideoTarget(%p)", target.get()); sp<::android::hardware::ICamera> c = mCamera; if (c == 0) return NO_INIT; ALOGD_IF(bufferProducer == 0, "app passed NULL video surface"); return c->setVideoTarget(bufferProducer); ALOGD_IF(target == 0, "app passed NULL video surface"); return c->setVideoTarget(target); } // start preview mode Loading Loading @@ -272,12 +270,10 @@ void Camera::setPreviewCallbackFlags(int flag) c->setPreviewCallbackFlag(flag); } status_t Camera::setPreviewCallbackTarget( const sp<IGraphicBufferProducer>& callbackProducer) { status_t Camera::setPreviewCallbackTarget(const sp<SurfaceType>& target) { sp<::android::hardware::ICamera> c = mCamera; if (c == 0) return NO_INIT; return c->setPreviewCallbackTarget(callbackProducer); return c->setPreviewCallbackTarget(target); } status_t Camera::setAudioRestriction(int32_t mode) Loading
camera/ICamera.cpp +88 −17 Original line number Diff line number Diff line Loading @@ -17,16 +17,16 @@ //#define LOG_NDEBUG 0 #define LOG_TAG "ICamera" #include <utils/Log.h> #include <stdint.h> #include <sys/types.h> #include <binder/Parcel.h> #include <camera/CameraUtils.h> #include <android/hardware/ICamera.h> #include <android/hardware/ICameraClient.h> #include <gui/IGraphicBufferProducer.h> #include <binder/Parcel.h> #include <camera/CameraUtils.h> #include <gui/Surface.h> #include <gui/view/Surface.h> #include <media/hardware/HardwareAPI.h> #include <stdint.h> #include <sys/types.h> #include <utils/Log.h> namespace android { namespace hardware { Loading @@ -34,8 +34,14 @@ namespace hardware { enum { DISCONNECT = IBinder::FIRST_CALL_TRANSACTION, SET_PREVIEW_TARGET, #if WB_LIBCAMERASERVICE_WITH_DEPENDENCIES SET_PREVIEW_TARGET_SURFACE, #endif SET_PREVIEW_CALLBACK_FLAG, SET_PREVIEW_CALLBACK_TARGET, #if WB_LIBCAMERASERVICE_WITH_DEPENDENCIES SET_PREVIEW_CALLBACK_TARGET_SURFACE, #endif START_PREVIEW, STOP_PREVIEW, AUTO_FOCUS, Loading @@ -54,6 +60,9 @@ enum { RELEASE_RECORDING_FRAME, SET_VIDEO_BUFFER_MODE, SET_VIDEO_BUFFER_TARGET, #if WB_LIBCAMERASERVICE_WITH_DEPENDENCIES SET_VIDEO_BUFFER_TARGET_SURFACE, #endif RELEASE_RECORDING_FRAME_HANDLE, RELEASE_RECORDING_FRAME_HANDLE_BATCH, SET_AUDIO_RESTRICTION, Loading @@ -79,15 +88,20 @@ public: return binder::Status::ok(); } // pass the buffered IGraphicBufferProducer to the camera service status_t setPreviewTarget(const sp<IGraphicBufferProducer>& bufferProducer) { // pass the Surface to the camera service status_t setPreviewTarget(const sp<SurfaceType>& target) { ALOGV("setPreviewTarget"); Parcel data, reply; data.writeInterfaceToken(ICamera::getInterfaceDescriptor()); sp<IBinder> b(IInterface::asBinder(bufferProducer)); #if WB_LIBCAMERASERVICE_WITH_DEPENDENCIES view::Surface viewSurfaceProducer = view::Surface::fromSurface(target); data.writeParcelable(viewSurfaceProducer); remote()->transact(SET_PREVIEW_TARGET_SURFACE, data, &reply); #else sp<IBinder> b(IInterface::asBinder(target)); data.writeStrongBinder(b); remote()->transact(SET_PREVIEW_TARGET, data, &reply); #endif return reply.readInt32(); } Loading @@ -102,15 +116,19 @@ public: remote()->transact(SET_PREVIEW_CALLBACK_FLAG, data, &reply); } status_t setPreviewCallbackTarget( const sp<IGraphicBufferProducer>& callbackProducer) { status_t setPreviewCallbackTarget(const sp<SurfaceType>& target) { ALOGV("setPreviewCallbackTarget"); Parcel data, reply; data.writeInterfaceToken(ICamera::getInterfaceDescriptor()); sp<IBinder> b(IInterface::asBinder(callbackProducer)); #if WB_LIBCAMERASERVICE_WITH_DEPENDENCIES view::Surface viewCallbackProducer = view::Surface::fromSurface(target); data.writeParcelable(viewCallbackProducer); remote()->transact(SET_PREVIEW_CALLBACK_TARGET_SURFACE, data, &reply); #else sp<IBinder> b(IInterface::asBinder(target)); data.writeStrongBinder(b); remote()->transact(SET_PREVIEW_CALLBACK_TARGET, data, &reply); #endif return reply.readInt32(); } Loading Loading @@ -326,14 +344,19 @@ public: return reply.readInt32(); } status_t setVideoTarget(const sp<IGraphicBufferProducer>& bufferProducer) { status_t setVideoTarget(const sp<SurfaceType>& target) { ALOGV("setVideoTarget"); Parcel data, reply; data.writeInterfaceToken(ICamera::getInterfaceDescriptor()); sp<IBinder> b(IInterface::asBinder(bufferProducer)); #if WB_LIBCAMERASERVICE_WITH_DEPENDENCIES view::Surface viewSurfaceProducer = view::Surface::fromSurface(target); data.writeParcelable(viewSurfaceProducer); remote()->transact(SET_VIDEO_BUFFER_TARGET_SURFACE, data, &reply); #else sp<IBinder> b(IInterface::asBinder(target)); data.writeStrongBinder(b); remote()->transact(SET_VIDEO_BUFFER_TARGET, data, &reply); #endif return reply.readInt32(); } }; Loading @@ -358,9 +381,25 @@ status_t BnCamera::onTransact( CHECK_INTERFACE(ICamera, data, reply); sp<IGraphicBufferProducer> st = interface_cast<IGraphicBufferProducer>(data.readStrongBinder()); #if WB_LIBCAMERASERVICE_WITH_DEPENDENCIES sp<Surface> sp = new Surface(st); reply->writeInt32(setPreviewTarget(sp)); #else reply->writeInt32(setPreviewTarget(st)); #endif return NO_ERROR; } break; #if WB_LIBCAMERASERVICE_WITH_DEPENDENCIES case SET_PREVIEW_TARGET_SURFACE: { ALOGV("SET_PREVIEW_TARGET_SURFACE"); CHECK_INTERFACE(ICamera, data, reply); view::Surface viewSurface; data.readParcelable(&viewSurface); sp<Surface> st = viewSurface.toSurface(); reply->writeInt32(setPreviewTarget(st)); return NO_ERROR; } break; #endif case SET_PREVIEW_CALLBACK_FLAG: { ALOGV("SET_PREVIEW_CALLBACK_TYPE"); CHECK_INTERFACE(ICamera, data, reply); Loading @@ -373,9 +412,25 @@ status_t BnCamera::onTransact( CHECK_INTERFACE(ICamera, data, reply); sp<IGraphicBufferProducer> cp = interface_cast<IGraphicBufferProducer>(data.readStrongBinder()); #if WB_LIBCAMERASERVICE_WITH_DEPENDENCIES sp<Surface> sp = new Surface(cp); reply->writeInt32(setPreviewCallbackTarget(sp)); #else reply->writeInt32(setPreviewCallbackTarget(cp)); #endif return NO_ERROR; } #if WB_LIBCAMERASERVICE_WITH_DEPENDENCIES case SET_PREVIEW_CALLBACK_TARGET_SURFACE: { ALOGV("SET_PREVIEW_CALLBACK_TARGET_SURFACE"); CHECK_INTERFACE(ICamera, data, reply); view::Surface viewSurface; data.readParcelable(&viewSurface); sp<Surface> cp = viewSurface.toSurface(); reply->writeInt32(setPreviewCallbackTarget(cp)); return NO_ERROR; } #endif case START_PREVIEW: { ALOGV("START_PREVIEW"); CHECK_INTERFACE(ICamera, data, reply); Loading Loading @@ -508,9 +563,25 @@ status_t BnCamera::onTransact( CHECK_INTERFACE(ICamera, data, reply); sp<IGraphicBufferProducer> st = interface_cast<IGraphicBufferProducer>(data.readStrongBinder()); #if WB_LIBCAMERASERVICE_WITH_DEPENDENCIES sp<Surface> sp = new Surface(st); reply->writeInt32(setVideoTarget(sp)); #else reply->writeInt32(setVideoTarget(st)); #endif return NO_ERROR; } break; #if WB_LIBCAMERASERVICE_WITH_DEPENDENCIES case SET_VIDEO_BUFFER_TARGET_SURFACE: { ALOGV("SET_VIDEO_BUFFER_TARGET_SURFACE"); CHECK_INTERFACE(ICamera, data, reply); view::Surface viewSurface; data.readParcelable(&viewSurface); sp<Surface> cp = viewSurface.toSurface(); reply->writeInt32(setVideoTarget(cp)); return NO_ERROR; } break; #endif case SET_AUDIO_RESTRICTION: { CHECK_INTERFACE(ICamera, data, reply); int32_t mode = data.readInt32(); Loading
camera/include/camera/Camera.h +13 −9 Original line number Diff line number Diff line Loading @@ -21,13 +21,18 @@ #include <android/hardware/ICameraService.h> #include <gui/IGraphicBufferProducer.h> #include <system/camera.h> #include <camera/CameraBase.h> #include <camera/CameraUtils.h> #include <camera/ICameraRecordingProxy.h> #include <camera/android/hardware/ICamera.h> #include <camera/android/hardware/ICameraClient.h> #include <camera/CameraBase.h> #include <camera/CameraUtils.h> #include <gui/Flags.h> #if WB_LIBCAMERASERVICE_WITH_DEPENDENCIES #include <gui/Surface.h> #else #include <gui/IGraphicBufferProducer.h> #endif #include <system/camera.h> namespace android { Loading Loading @@ -91,8 +96,8 @@ public: status_t lock(); status_t unlock(); // pass the buffered IGraphicBufferProducer to the camera service status_t setPreviewTarget(const sp<IGraphicBufferProducer>& bufferProducer); // pass the SurfaceType to the camera service status_t setPreviewTarget(const sp<SurfaceType>& target); // start preview mode, must call setPreviewTarget first status_t startPreview(); Loading Loading @@ -148,7 +153,7 @@ public: // Set the video buffer producer for camera to use in VIDEO_BUFFER_MODE_BUFFER_QUEUE // mode. status_t setVideoTarget(const sp<IGraphicBufferProducer>& bufferProducer); status_t setVideoTarget(const sp<SurfaceType>& target); void setListener(const sp<CameraListener>& listener); Loading @@ -158,8 +163,7 @@ public: // disabled by calling it with CAMERA_FRAME_CALLBACK_FLAG_NOOP, and // Target by calling it with a NULL interface. void setPreviewCallbackFlags(int preview_callback_flag); status_t setPreviewCallbackTarget( const sp<IGraphicBufferProducer>& callbackProducer); status_t setPreviewCallbackTarget(const sp<SurfaceType>& target); sp<ICameraRecordingProxy> getRecordingProxy(); Loading
camera/include/camera/android/hardware/ICamera.h +5 −7 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ #include <binder/Parcel.h> #include <binder/IMemory.h> #include <binder/Status.h> #include <gui/Flags.h> #include <utils/String8.h> namespace android { Loading Loading @@ -61,9 +62,8 @@ public: // allow other processes to use this ICamera interface virtual status_t unlock() = 0; // pass the buffered IGraphicBufferProducer to the camera service virtual status_t setPreviewTarget( const sp<IGraphicBufferProducer>& bufferProducer) = 0; // pass the SurfaceType to the camera service virtual status_t setPreviewTarget(const sp<SurfaceType>& bufferProducer) = 0; // set the preview callback flag to affect how the received frames from // preview are handled. Enabling preview callback flags disables any active Loading @@ -73,8 +73,7 @@ public: // of preview callback buffers. Passing a valid interface here disables any // active preview callbacks set by setPreviewCallbackFlag(). Passing NULL // disables the use of the callback target. virtual status_t setPreviewCallbackTarget( const sp<IGraphicBufferProducer>& callbackProducer) = 0; virtual status_t setPreviewCallbackTarget(const sp<SurfaceType>& callbackProducer) = 0; // start preview mode, must call setPreviewTarget first virtual status_t startPreview() = 0; Loading Loading @@ -138,8 +137,7 @@ public: virtual status_t setVideoBufferMode(int32_t videoBufferMode) = 0; // Set the video buffer producer for camera to use in VIDEO_BUFFER_MODE_BUFFER_QUEUE mode. virtual status_t setVideoTarget( const sp<IGraphicBufferProducer>& bufferProducer) = 0; virtual status_t setVideoTarget(const sp<SurfaceType>& bufferProducer) = 0; // Set the audio restriction mode virtual status_t setAudioRestriction(int32_t mode) = 0; Loading
camera/tests/CameraZSLTests.cpp +13 −9 Original line number Diff line number Diff line Loading @@ -20,17 +20,18 @@ #include <gtest/gtest.h> #include <android/content/AttributionSourceState.h> #include <android/hardware/ICameraService.h> #include <binder/ProcessState.h> #include <utils/Errors.h> #include <utils/Log.h> #include <gui/Surface.h> #include <gui/SurfaceComposerClient.h> #include <camera/CameraParameters.h> #include <camera/CameraMetadata.h> #include <camera/Camera.h> #include <camera/CameraMetadata.h> #include <camera/CameraParameters.h> #include <camera/CameraUtils.h> #include <camera/StringUtils.h> #include <android/hardware/ICameraService.h> #include <gui/Flags.h> #include <gui/Surface.h> #include <gui/SurfaceComposerClient.h> #include <utils/Errors.h> #include <utils/Log.h> using namespace android; using namespace android::hardware; Loading Loading @@ -276,8 +277,11 @@ TEST_F(CameraZSLTests, TestAllPictureSizes) { previewSurface = surfaceControl->getSurface(); ASSERT_TRUE(previewSurface != NULL); ASSERT_EQ(NO_ERROR, cameraDevice->setPreviewTarget( previewSurface->getIGraphicBufferProducer())); ASSERT_EQ(NO_ERROR, cameraDevice->setPreviewTarget(previewSurface #if !WB_LIBCAMERASERVICE_WITH_DEPENDENCIES ->getIGraphicBufferProducer() #endif )); cameraDevice->setPreviewCallbackFlag( CAMERA_FRAME_CALLBACK_FLAG_CAMCORDER); Loading