diff options
author | James Dong <jdong@google.com> | 2010-04-26 17:48:26 -0700 |
---|---|---|
committer | James Dong <jdong@google.com> | 2010-04-28 11:55:47 -0700 |
commit | c32cd79d9ad4aba7d959b5b3be7361b4715e6f18 (patch) | |
tree | 8a3b2842c196b748fd50d633b038ce33c9d6ee1a /media/libmediaplayerservice | |
parent | 261741e728f2137f12b28df25c25e96acd942de9 (diff) | |
download | frameworks_av-c32cd79d9ad4aba7d959b5b3be7361b4715e6f18.zip frameworks_av-c32cd79d9ad4aba7d959b5b3be7361b4715e6f18.tar.gz frameworks_av-c32cd79d9ad4aba7d959b5b3be7361b4715e6f18.tar.bz2 |
Use timestamp from camera driver for CameraSource
Change-Id: I09ddec69997c43b8f17fdd21304c76cb4c5ab8cf
Diffstat (limited to 'media/libmediaplayerservice')
-rw-r--r-- | media/libmediaplayerservice/Android.mk | 1 | ||||
-rw-r--r-- | media/libmediaplayerservice/StagefrightRecorder.cpp | 38 | ||||
-rw-r--r-- | media/libmediaplayerservice/StagefrightRecorder.h | 9 |
3 files changed, 45 insertions, 3 deletions
diff --git a/media/libmediaplayerservice/Android.mk b/media/libmediaplayerservice/Android.mk index cf97b23..3b678cb 100644 --- a/media/libmediaplayerservice/Android.mk +++ b/media/libmediaplayerservice/Android.mk @@ -37,6 +37,7 @@ LOCAL_SHARED_LIBRARIES := \ libvorbisidec \ libsonivox \ libmedia \ + libcamera_client \ libandroid_runtime \ libstagefright \ libstagefright_omx \ diff --git a/media/libmediaplayerservice/StagefrightRecorder.cpp b/media/libmediaplayerservice/StagefrightRecorder.cpp index 531fd11..a63d94b 100644 --- a/media/libmediaplayerservice/StagefrightRecorder.cpp +++ b/media/libmediaplayerservice/StagefrightRecorder.cpp @@ -20,6 +20,7 @@ #include "StagefrightRecorder.h" +#include <binder/IPCThreadState.h> #include <media/stagefright/AudioSource.h> #include <media/stagefright/AMRWriter.h> #include <media/stagefright/CameraSource.h> @@ -30,8 +31,11 @@ #include <media/stagefright/OMXClient.h> #include <media/stagefright/OMXCodec.h> #include <camera/ICamera.h> +#include <camera/Camera.h> #include <surfaceflinger/ISurface.h> #include <utils/Errors.h> +#include <sys/types.h> +#include <unistd.h> namespace android { @@ -96,7 +100,25 @@ status_t StagefrightRecorder::setVideoFrameRate(int frames_per_second) { } status_t StagefrightRecorder::setCamera(const sp<ICamera> &camera) { - mCamera = camera; + LOGV("setCamera: pid %d pid %d", IPCThreadState::self()->getCallingPid(), getpid()); + if (camera == 0) { + LOGE("camera is NULL"); + return UNKNOWN_ERROR; + } + + mFlags &= ~ FLAGS_SET_CAMERA | FLAGS_HOT_CAMERA; + mCamera = Camera::create(camera); + if (mCamera == 0) { + LOGE("Unable to connect to camera"); + return UNKNOWN_ERROR; + } + + LOGV("Connected to camera"); + mFlags |= FLAGS_SET_CAMERA; + if (mCamera->previewEnabled()) { + LOGV("camera is hot"); + mFlags |= FLAGS_HOT_CAMERA; + } return OK; } @@ -240,7 +262,7 @@ status_t StagefrightRecorder::startMPEG4Recording() { CHECK(mCamera != NULL); sp<CameraSource> cameraSource = - CameraSource::CreateFromICamera(mCamera); + CameraSource::CreateFromCamera(mCamera); CHECK(cameraSource != NULL); @@ -314,6 +336,17 @@ status_t StagefrightRecorder::stop() { status_t StagefrightRecorder::close() { stop(); + if (mCamera != 0) { + if ((mFlags & FLAGS_HOT_CAMERA) == 0) { + LOGV("Camera was cold when we started, stopping preview"); + mCamera->stopPreview(); + } + if (mFlags & FLAGS_SET_CAMERA) { + LOGV("Unlocking camera"); + mCamera->unlock(); + } + mFlags = 0; + } return OK; } @@ -329,6 +362,7 @@ status_t StagefrightRecorder::reset() { mVideoHeight = -1; mFrameRate = -1; mOutputFd = -1; + mFlags = 0; return OK; } diff --git a/media/libmediaplayerservice/StagefrightRecorder.h b/media/libmediaplayerservice/StagefrightRecorder.h index 7ec412d..2f2f748 100644 --- a/media/libmediaplayerservice/StagefrightRecorder.h +++ b/media/libmediaplayerservice/StagefrightRecorder.h @@ -23,6 +23,7 @@ namespace android { +class Camera; struct MediaSource; struct MediaWriter; @@ -52,7 +53,12 @@ struct StagefrightRecorder : public MediaRecorderBase { virtual status_t getMaxAmplitude(int *max); private: - sp<ICamera> mCamera; + enum CameraFlags { + FLAGS_SET_CAMERA = 1L << 0, + FLAGS_HOT_CAMERA = 1L << 1, + }; + + sp<Camera> mCamera; sp<ISurface> mPreviewSurface; sp<IMediaPlayerClient> mListener; sp<MediaWriter> mWriter; @@ -66,6 +72,7 @@ private: int mFrameRate; String8 mParams; int mOutputFd; + int32_t mFlags; status_t startMPEG4Recording(); status_t startAMRRecording(); |