diff options
-rw-r--r-- | camera/IProCameraUser.cpp | 11 | ||||
-rw-r--r-- | camera/ProCamera.cpp | 9 | ||||
-rw-r--r-- | include/camera/IProCameraUser.h | 9 | ||||
-rw-r--r-- | services/camera/libcameraservice/ProCamera2Client.cpp | 12 | ||||
-rw-r--r-- | services/camera/libcameraservice/ProCamera2Client.h | 6 |
5 files changed, 30 insertions, 17 deletions
diff --git a/camera/IProCameraUser.cpp b/camera/IProCameraUser.cpp index cd7bf5c..e60cfe5 100644 --- a/camera/IProCameraUser.cpp +++ b/camera/IProCameraUser.cpp @@ -219,7 +219,7 @@ public: } virtual status_t createStream(int width, int height, int format, - const sp<Surface>& surface, + const sp<IGraphicBufferProducer>& bufferProducer, /*out*/ int* streamId) { @@ -229,7 +229,9 @@ public: data.writeInt32(height); data.writeInt32(format); - Surface::writeToParcel(surface, &data); + sp<IBinder> b(bufferProducer->asBinder()); + data.writeStrongBinder(b); + remote()->transact(CREATE_STREAM, data, &reply); int sId = reply.readInt32(); @@ -340,11 +342,12 @@ status_t BnProCameraUser::onTransact( height = data.readInt32(); format = data.readInt32(); - sp<Surface> surface = Surface::readFromParcel(data); + sp<IGraphicBufferProducer> bp = + interface_cast<IGraphicBufferProducer>(data.readStrongBinder()); int streamId = -1; status_t ret; - ret = createStream(width, height, format, surface, &streamId); + ret = createStream(width, height, format, bp, &streamId); reply->writeInt32(streamId); reply->writeInt32(ret); diff --git a/camera/ProCamera.cpp b/camera/ProCamera.cpp index 92ec9d6..8fd08f4 100644 --- a/camera/ProCamera.cpp +++ b/camera/ProCamera.cpp @@ -278,7 +278,8 @@ status_t ProCamera::createStream(int width, int height, int format, sp <IProCameraUser> c = mCamera; if (c == 0) return NO_INIT; - return c->createStream(width, height, format, surface, streamId); + return c->createStream(width, height, format, surface->getIGraphicBufferProducer(), + streamId); } status_t ProCamera::createStream(int width, int height, int format, @@ -293,10 +294,10 @@ status_t ProCamera::createStream(int width, int height, int format, status_t stat = INVALID_OPERATION; if (bufferProducer != 0) { - binder = bufferProducer->asBinder(); + sp <IProCameraUser> c = mCamera; + if (c == 0) return NO_INIT; - ALOGV("%s: createStreamT END (%d), StreamID = %d", __FUNCTION__, stat, - *streamId); + return c->createStream(width, height, format, bufferProducer, streamId); } else { *streamId = -1; diff --git a/include/camera/IProCameraUser.h b/include/camera/IProCameraUser.h index 3ef4676..a141769 100644 --- a/include/camera/IProCameraUser.h +++ b/include/camera/IProCameraUser.h @@ -63,10 +63,11 @@ public: virtual status_t requestStream(int streamId) = 0; virtual status_t cancelStream(int streamId) = 0; - virtual status_t createStream(int width, int height, int format, - const sp<Surface>& surface, - /*out*/ - int* streamId) = 0; + virtual status_t createStream( + int width, int height, int format, + const sp<IGraphicBufferProducer>& bufferProducer, + /*out*/ + int* streamId) = 0; // Create a request object from a template. virtual status_t createDefaultRequest(int templateId, diff --git a/services/camera/libcameraservice/ProCamera2Client.cpp b/services/camera/libcameraservice/ProCamera2Client.cpp index 5ebe713..aa02f10 100644 --- a/services/camera/libcameraservice/ProCamera2Client.cpp +++ b/services/camera/libcameraservice/ProCamera2Client.cpp @@ -238,7 +238,7 @@ status_t ProCamera2Client::cancelStream(int streamId) { } status_t ProCamera2Client::createStream(int width, int height, int format, - const sp<Surface>& surface, + const sp<IGraphicBufferProducer>& bufferProducer, /*out*/ int* streamId) { @@ -254,7 +254,15 @@ status_t ProCamera2Client::createStream(int width, int height, int format, Mutex::Autolock icl(mIProCameraUserLock); - return mDevice->createStream(surface, width, height, format, /*size*/1, streamId); + sp<IBinder> binder; + sp<ANativeWindow> window; + if (bufferProducer != 0) { + binder = bufferProducer->asBinder(); + window = new Surface(bufferProducer); + } + + return mDevice->createStream(window, width, height, format, /*size*/1, + streamId); } // Create a request object from a template. diff --git a/services/camera/libcameraservice/ProCamera2Client.h b/services/camera/libcameraservice/ProCamera2Client.h index ed42e22..b72fd63 100644 --- a/services/camera/libcameraservice/ProCamera2Client.h +++ b/services/camera/libcameraservice/ProCamera2Client.h @@ -53,9 +53,9 @@ public: virtual status_t cancelStream(int streamId); virtual status_t createStream(int width, int height, int format, - const sp<Surface>& surface, - /*out*/ - int* streamId); + const sp<IGraphicBufferProducer>& bufferProducer, + /*out*/ + int* streamId); // Create a request object from a template. // -- Caller owns the newly allocated metadata |