summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--camera/IProCameraUser.cpp11
-rw-r--r--camera/ProCamera.cpp9
-rw-r--r--include/camera/IProCameraUser.h9
-rw-r--r--services/camera/libcameraservice/ProCamera2Client.cpp12
-rw-r--r--services/camera/libcameraservice/ProCamera2Client.h6
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