Loading camera/camera2/ICameraDeviceCallbacks.cpp +21 −1 Original line number Diff line number Diff line Loading @@ -37,6 +37,7 @@ enum { CAMERA_IDLE, CAPTURE_STARTED, RESULT_RECEIVED, PREPARED }; class BpCameraDeviceCallbacks: public BpInterface<ICameraDeviceCallbacks> Loading Loading @@ -80,7 +81,6 @@ public: data.writeNoException(); } void onResultReceived(const CameraMetadata& metadata, const CaptureResultExtras& resultExtras) { ALOGV("onResultReceived"); Loading @@ -93,6 +93,17 @@ public: remote()->transact(RESULT_RECEIVED, data, &reply, IBinder::FLAG_ONEWAY); data.writeNoException(); } void onPrepared(int streamId) { ALOGV("onPrepared"); Parcel data, reply; data.writeInterfaceToken(ICameraDeviceCallbacks::getInterfaceDescriptor()); data.writeInt32(streamId); remote()->transact(PREPARED, data, &reply, IBinder::FLAG_ONEWAY); data.writeNoException(); } }; IMPLEMENT_META_INTERFACE(CameraDeviceCallbacks, Loading Loading @@ -160,6 +171,15 @@ status_t BnCameraDeviceCallbacks::onTransact( data.readExceptionCode(); return NO_ERROR; } break; case PREPARED: { ALOGV("onPrepared"); CHECK_INTERFACE(ICameraDeviceCallbacks, data, reply); CaptureResultExtras result; int streamId = data.readInt32(); onPrepared(streamId); data.readExceptionCode(); return NO_ERROR; } break; default: return BBinder::onTransact(code, data, reply, flags); } Loading camera/camera2/ICameraDeviceUser.cpp +24 −1 Original line number Diff line number Diff line Loading @@ -47,7 +47,8 @@ enum { CREATE_DEFAULT_REQUEST, GET_CAMERA_INFO, WAIT_UNTIL_IDLE, FLUSH FLUSH, PREPARE }; namespace { Loading Loading @@ -348,6 +349,20 @@ public: return res; } virtual status_t prepare(int streamId) { ALOGV("prepare"); Parcel data, reply; data.writeInterfaceToken(ICameraDeviceUser::getInterfaceDescriptor()); data.writeInt32(streamId); remote()->transact(PREPARE, data, &reply); reply.readExceptionCode(); return reply.readInt32(); } private: Loading Loading @@ -545,6 +560,14 @@ status_t BnCameraDeviceUser::onTransact( reply->writeInt32(endConfigure()); return NO_ERROR; } break; case PREPARE: { CHECK_INTERFACE(ICameraDeviceUser, data, reply); int streamId = data.readInt32(); reply->writeNoException(); reply->writeInt32(prepare(streamId)); return NO_ERROR; } break; default: return BBinder::onTransact(code, data, reply, flags); } Loading include/camera/camera2/ICameraDeviceCallbacks.h +3 −0 Original line number Diff line number Diff line Loading @@ -65,6 +65,9 @@ public: // One way virtual void onResultReceived(const CameraMetadata& metadata, const CaptureResultExtras& resultExtras) = 0; // One way virtual void onPrepared(int streamId) = 0; }; // ---------------------------------------------------------------------------- Loading include/camera/camera2/ICameraDeviceUser.h +5 −0 Original line number Diff line number Diff line Loading @@ -133,6 +133,11 @@ public: */ virtual status_t flush(/*out*/ int64_t* lastFrameNumber = NULL) = 0; /** * Preallocate buffers for a given output stream asynchronously. */ virtual status_t prepare(int streamId) = 0; }; // ---------------------------------------------------------------------------- Loading services/camera/libcameraservice/api2/CameraDeviceClient.cpp +44 −0 Original line number Diff line number Diff line Loading @@ -671,6 +671,42 @@ status_t CameraDeviceClient::flush(int64_t* lastFrameNumber) { return mDevice->flush(lastFrameNumber); } status_t CameraDeviceClient::prepare(int streamId) { ATRACE_CALL(); ALOGV("%s", __FUNCTION__); status_t res = OK; if ( (res = checkPid(__FUNCTION__) ) != OK) return res; Mutex::Autolock icl(mBinderSerializationLock); // Guard against trying to prepare non-created streams ssize_t index = NAME_NOT_FOUND; for (size_t i = 0; i < mStreamMap.size(); ++i) { if (streamId == mStreamMap.valueAt(i)) { index = i; break; } } if (index == NAME_NOT_FOUND) { ALOGW("%s: Camera %d: Invalid stream ID (%d) specified, no stream " "created yet", __FUNCTION__, mCameraId, streamId); return BAD_VALUE; } // Also returns BAD_VALUE if stream ID was not valid res = mDevice->prepare(streamId); if (res == BAD_VALUE) { ALOGE("%s: Camera %d: Unexpected BAD_VALUE when preparing stream, but we" " already checked and the stream ID (%d) should be valid.", __FUNCTION__, mCameraId, streamId); } return res; } status_t CameraDeviceClient::dump(int fd, const Vector<String16>& args) { String8 result; result.appendFormat("CameraDeviceClient[%d] (%p) dump:\n", Loading Loading @@ -730,6 +766,14 @@ void CameraDeviceClient::notifyShutter(const CaptureResultExtras& resultExtras, } } void CameraDeviceClient::notifyPrepared(int streamId) { // Thread safe. Don't bother locking. sp<ICameraDeviceCallbacks> remoteCb = getRemoteCallback(); if (remoteCb != 0) { remoteCb->onPrepared(streamId); } } void CameraDeviceClient::detachDevice() { if (mDevice == 0) return; Loading Loading
camera/camera2/ICameraDeviceCallbacks.cpp +21 −1 Original line number Diff line number Diff line Loading @@ -37,6 +37,7 @@ enum { CAMERA_IDLE, CAPTURE_STARTED, RESULT_RECEIVED, PREPARED }; class BpCameraDeviceCallbacks: public BpInterface<ICameraDeviceCallbacks> Loading Loading @@ -80,7 +81,6 @@ public: data.writeNoException(); } void onResultReceived(const CameraMetadata& metadata, const CaptureResultExtras& resultExtras) { ALOGV("onResultReceived"); Loading @@ -93,6 +93,17 @@ public: remote()->transact(RESULT_RECEIVED, data, &reply, IBinder::FLAG_ONEWAY); data.writeNoException(); } void onPrepared(int streamId) { ALOGV("onPrepared"); Parcel data, reply; data.writeInterfaceToken(ICameraDeviceCallbacks::getInterfaceDescriptor()); data.writeInt32(streamId); remote()->transact(PREPARED, data, &reply, IBinder::FLAG_ONEWAY); data.writeNoException(); } }; IMPLEMENT_META_INTERFACE(CameraDeviceCallbacks, Loading Loading @@ -160,6 +171,15 @@ status_t BnCameraDeviceCallbacks::onTransact( data.readExceptionCode(); return NO_ERROR; } break; case PREPARED: { ALOGV("onPrepared"); CHECK_INTERFACE(ICameraDeviceCallbacks, data, reply); CaptureResultExtras result; int streamId = data.readInt32(); onPrepared(streamId); data.readExceptionCode(); return NO_ERROR; } break; default: return BBinder::onTransact(code, data, reply, flags); } Loading
camera/camera2/ICameraDeviceUser.cpp +24 −1 Original line number Diff line number Diff line Loading @@ -47,7 +47,8 @@ enum { CREATE_DEFAULT_REQUEST, GET_CAMERA_INFO, WAIT_UNTIL_IDLE, FLUSH FLUSH, PREPARE }; namespace { Loading Loading @@ -348,6 +349,20 @@ public: return res; } virtual status_t prepare(int streamId) { ALOGV("prepare"); Parcel data, reply; data.writeInterfaceToken(ICameraDeviceUser::getInterfaceDescriptor()); data.writeInt32(streamId); remote()->transact(PREPARE, data, &reply); reply.readExceptionCode(); return reply.readInt32(); } private: Loading Loading @@ -545,6 +560,14 @@ status_t BnCameraDeviceUser::onTransact( reply->writeInt32(endConfigure()); return NO_ERROR; } break; case PREPARE: { CHECK_INTERFACE(ICameraDeviceUser, data, reply); int streamId = data.readInt32(); reply->writeNoException(); reply->writeInt32(prepare(streamId)); return NO_ERROR; } break; default: return BBinder::onTransact(code, data, reply, flags); } Loading
include/camera/camera2/ICameraDeviceCallbacks.h +3 −0 Original line number Diff line number Diff line Loading @@ -65,6 +65,9 @@ public: // One way virtual void onResultReceived(const CameraMetadata& metadata, const CaptureResultExtras& resultExtras) = 0; // One way virtual void onPrepared(int streamId) = 0; }; // ---------------------------------------------------------------------------- Loading
include/camera/camera2/ICameraDeviceUser.h +5 −0 Original line number Diff line number Diff line Loading @@ -133,6 +133,11 @@ public: */ virtual status_t flush(/*out*/ int64_t* lastFrameNumber = NULL) = 0; /** * Preallocate buffers for a given output stream asynchronously. */ virtual status_t prepare(int streamId) = 0; }; // ---------------------------------------------------------------------------- Loading
services/camera/libcameraservice/api2/CameraDeviceClient.cpp +44 −0 Original line number Diff line number Diff line Loading @@ -671,6 +671,42 @@ status_t CameraDeviceClient::flush(int64_t* lastFrameNumber) { return mDevice->flush(lastFrameNumber); } status_t CameraDeviceClient::prepare(int streamId) { ATRACE_CALL(); ALOGV("%s", __FUNCTION__); status_t res = OK; if ( (res = checkPid(__FUNCTION__) ) != OK) return res; Mutex::Autolock icl(mBinderSerializationLock); // Guard against trying to prepare non-created streams ssize_t index = NAME_NOT_FOUND; for (size_t i = 0; i < mStreamMap.size(); ++i) { if (streamId == mStreamMap.valueAt(i)) { index = i; break; } } if (index == NAME_NOT_FOUND) { ALOGW("%s: Camera %d: Invalid stream ID (%d) specified, no stream " "created yet", __FUNCTION__, mCameraId, streamId); return BAD_VALUE; } // Also returns BAD_VALUE if stream ID was not valid res = mDevice->prepare(streamId); if (res == BAD_VALUE) { ALOGE("%s: Camera %d: Unexpected BAD_VALUE when preparing stream, but we" " already checked and the stream ID (%d) should be valid.", __FUNCTION__, mCameraId, streamId); } return res; } status_t CameraDeviceClient::dump(int fd, const Vector<String16>& args) { String8 result; result.appendFormat("CameraDeviceClient[%d] (%p) dump:\n", Loading Loading @@ -730,6 +766,14 @@ void CameraDeviceClient::notifyShutter(const CaptureResultExtras& resultExtras, } } void CameraDeviceClient::notifyPrepared(int streamId) { // Thread safe. Don't bother locking. sp<ICameraDeviceCallbacks> remoteCb = getRemoteCallback(); if (remoteCb != 0) { remoteCb->onPrepared(streamId); } } void CameraDeviceClient::detachDevice() { if (mDevice == 0) return; Loading