diff options
Diffstat (limited to 'libs/camera/Camera.cpp')
-rw-r--r-- | libs/camera/Camera.cpp | 43 |
1 files changed, 29 insertions, 14 deletions
diff --git a/libs/camera/Camera.cpp b/libs/camera/Camera.cpp index 7efc6d7..450971d 100644 --- a/libs/camera/Camera.cpp +++ b/libs/camera/Camera.cpp @@ -167,39 +167,52 @@ status_t Camera::unlock() return c->unlock(); } -// pass the buffered ISurface to the camera service +// pass the buffered Surface to the camera service status_t Camera::setPreviewDisplay(const sp<Surface>& surface) { - LOGV("setPreviewDisplay"); + LOGV("setPreviewDisplay(%p)", surface.get()); sp <ICamera> c = mCamera; if (c == 0) return NO_INIT; if (surface != 0) { - return c->setPreviewDisplay(surface->getISurface()); + return c->setPreviewDisplay(surface); } else { LOGD("app passed NULL surface"); return c->setPreviewDisplay(0); } } -status_t Camera::setPreviewDisplay(const sp<ISurface>& surface) +// start preview mode +status_t Camera::startPreview() { - LOGV("setPreviewDisplay"); - if (surface == 0) { - LOGD("app passed NULL surface"); - } + LOGV("startPreview"); sp <ICamera> c = mCamera; if (c == 0) return NO_INIT; - return c->setPreviewDisplay(surface); + return c->startPreview(); } +int32_t Camera::getNumberOfVideoBuffers() const +{ + LOGV("getNumberOfVideoBuffers"); + sp <ICamera> c = mCamera; + if (c == 0) return 0; + return c->getNumberOfVideoBuffers(); +} -// start preview mode -status_t Camera::startPreview() +sp<IMemory> Camera::getVideoBuffer(int32_t index) const { - LOGV("startPreview"); + LOGV("getVideoBuffer: %d", index); + sp <ICamera> c = mCamera; + if (c == 0) return 0; + return c->getVideoBuffer(index); +} + +status_t Camera::storeMetaDataInBuffers(bool enabled) +{ + LOGV("storeMetaDataInBuffers: %s", + enabled? "true": "false"); sp <ICamera> c = mCamera; if (c == 0) return NO_INIT; - return c->startPreview(); + return c->storeMetaDataInBuffers(enabled); } // start recording mode, must call setPreviewDisplay first @@ -359,6 +372,9 @@ void Camera::dataCallbackTimestamp(nsecs_t timestamp, int32_t msgType, const sp< } if (listener != NULL) { listener->postDataTimestamp(timestamp, msgType, dataPtr); + } else { + LOGW("No listener was set. Drop a recording frame."); + releaseRecordingFrame(dataPtr); } } @@ -375,4 +391,3 @@ void Camera::DeathNotifier::binderDied(const wp<IBinder>& who) { } }; // namespace android - |