Loading camera/libcameraservice/CameraService.cpp +2 −1 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ ** limitations under the License. */ //#define LOG_NDEBUG 0 #define LOG_TAG "CameraService" #include <utils/Log.h> Loading Loading @@ -247,7 +248,7 @@ CameraService::Client::Client(const sp<CameraService>& cameraService, status_t CameraService::Client::checkPid() { int callingPid = getCallingPid(); if (mClientPid == callingPid) return NO_ERROR; if (mClientPid == callingPid || callingPid == getpid()) return NO_ERROR; LOGW("Attempt to use locked camera (client %p) from different process " " (old pid %d, new pid %d)", getCameraClient()->asBinder().get(), mClientPid, callingPid); Loading include/media/stagefright/CameraSource.h +7 −2 Original line number Diff line number Diff line Loading @@ -34,7 +34,7 @@ class Camera; class CameraSource : public MediaSource { public: static CameraSource *Create(); static CameraSource *CreateFromICamera(const sp<ICamera> &icamera); static CameraSource *CreateFromCamera(const sp<Camera> &camera); virtual ~CameraSource(); Loading @@ -61,12 +61,17 @@ private: int mWidth, mHeight; int64_t mFirstFrameTimeUs; int64_t mLastFrameTimestampUs; int32_t mNumFrames; int32_t mNumFramesReleased; bool mStarted; CameraSource(const sp<Camera> &camera); void dataCallback(int32_t msgType, const sp<IMemory> &data); void dataCallbackTimestamp( int64_t timestampUs, int32_t msgType, const sp<IMemory> &data); void releaseQueuedFrames(); CameraSource(const CameraSource &); CameraSource &operator=(const CameraSource &); Loading media/libmediaplayerservice/Android.mk +1 −0 Original line number Diff line number Diff line Loading @@ -37,6 +37,7 @@ LOCAL_SHARED_LIBRARIES := \ libvorbisidec \ libsonivox \ libmedia \ libcamera_client \ libandroid_runtime \ libstagefright \ libstagefright_omx \ Loading media/libmediaplayerservice/StagefrightRecorder.cpp +36 −2 Original line number Diff line number Diff line Loading @@ -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> Loading @@ -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 { Loading Loading @@ -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; } Loading Loading @@ -240,7 +262,7 @@ status_t StagefrightRecorder::startMPEG4Recording() { CHECK(mCamera != NULL); sp<CameraSource> cameraSource = CameraSource::CreateFromICamera(mCamera); CameraSource::CreateFromCamera(mCamera); CHECK(cameraSource != NULL); Loading Loading @@ -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; } Loading @@ -329,6 +362,7 @@ status_t StagefrightRecorder::reset() { mVideoHeight = -1; mFrameRate = -1; mOutputFd = -1; mFlags = 0; return OK; } Loading media/libmediaplayerservice/StagefrightRecorder.h +8 −1 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ namespace android { class Camera; struct MediaSource; struct MediaWriter; Loading Loading @@ -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; Loading @@ -66,6 +72,7 @@ private: int mFrameRate; String8 mParams; int mOutputFd; int32_t mFlags; status_t startMPEG4Recording(); status_t startAMRRecording(); Loading Loading
camera/libcameraservice/CameraService.cpp +2 −1 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ ** limitations under the License. */ //#define LOG_NDEBUG 0 #define LOG_TAG "CameraService" #include <utils/Log.h> Loading Loading @@ -247,7 +248,7 @@ CameraService::Client::Client(const sp<CameraService>& cameraService, status_t CameraService::Client::checkPid() { int callingPid = getCallingPid(); if (mClientPid == callingPid) return NO_ERROR; if (mClientPid == callingPid || callingPid == getpid()) return NO_ERROR; LOGW("Attempt to use locked camera (client %p) from different process " " (old pid %d, new pid %d)", getCameraClient()->asBinder().get(), mClientPid, callingPid); Loading
include/media/stagefright/CameraSource.h +7 −2 Original line number Diff line number Diff line Loading @@ -34,7 +34,7 @@ class Camera; class CameraSource : public MediaSource { public: static CameraSource *Create(); static CameraSource *CreateFromICamera(const sp<ICamera> &icamera); static CameraSource *CreateFromCamera(const sp<Camera> &camera); virtual ~CameraSource(); Loading @@ -61,12 +61,17 @@ private: int mWidth, mHeight; int64_t mFirstFrameTimeUs; int64_t mLastFrameTimestampUs; int32_t mNumFrames; int32_t mNumFramesReleased; bool mStarted; CameraSource(const sp<Camera> &camera); void dataCallback(int32_t msgType, const sp<IMemory> &data); void dataCallbackTimestamp( int64_t timestampUs, int32_t msgType, const sp<IMemory> &data); void releaseQueuedFrames(); CameraSource(const CameraSource &); CameraSource &operator=(const CameraSource &); Loading
media/libmediaplayerservice/Android.mk +1 −0 Original line number Diff line number Diff line Loading @@ -37,6 +37,7 @@ LOCAL_SHARED_LIBRARIES := \ libvorbisidec \ libsonivox \ libmedia \ libcamera_client \ libandroid_runtime \ libstagefright \ libstagefright_omx \ Loading
media/libmediaplayerservice/StagefrightRecorder.cpp +36 −2 Original line number Diff line number Diff line Loading @@ -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> Loading @@ -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 { Loading Loading @@ -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; } Loading Loading @@ -240,7 +262,7 @@ status_t StagefrightRecorder::startMPEG4Recording() { CHECK(mCamera != NULL); sp<CameraSource> cameraSource = CameraSource::CreateFromICamera(mCamera); CameraSource::CreateFromCamera(mCamera); CHECK(cameraSource != NULL); Loading Loading @@ -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; } Loading @@ -329,6 +362,7 @@ status_t StagefrightRecorder::reset() { mVideoHeight = -1; mFrameRate = -1; mOutputFd = -1; mFlags = 0; return OK; } Loading
media/libmediaplayerservice/StagefrightRecorder.h +8 −1 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ namespace android { class Camera; struct MediaSource; struct MediaWriter; Loading Loading @@ -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; Loading @@ -66,6 +72,7 @@ private: int mFrameRate; String8 mParams; int mOutputFd; int32_t mFlags; status_t startMPEG4Recording(); status_t startAMRRecording(); Loading