Loading include/media/stagefright/CameraSource.h +54 −5 Original line number Diff line number Diff line Loading @@ -56,6 +56,14 @@ public: * @param frameRate the target frames per second * @param surface the preview surface for display where preview * frames are sent to * @param storeMetaDataInVideoBuffers true to request the camera * source to store meta data in video buffers; false to * request the camera source to store real YUV frame data * in the video buffers. The camera source may not support * storing meta data in video buffers, if so, a request * to do that will NOT be honored. To find out whether * meta data is actually being stored in video buffers * during recording, call isMetaDataStoredInVideoBuffers(). * * @return NULL on error. */ Loading @@ -63,12 +71,15 @@ public: int32_t cameraId, Size videoSize, int32_t frameRate, const sp<Surface>& surface); const sp<Surface>& surface, bool storeMetaDataInVideoBuffers = false); virtual ~CameraSource(); virtual status_t start(MetaData *params = NULL); virtual status_t stop(); virtual status_t read( MediaBuffer **buffer, const ReadOptions *options = NULL); /** * Check whether a CameraSource object is properly initialized. Loading @@ -87,8 +98,43 @@ public: */ virtual sp<MetaData> getFormat(); virtual status_t read( MediaBuffer **buffer, const ReadOptions *options = NULL); /** * Retrieve the total number of video buffers available from * this source. * * This method is useful if these video buffers are used * for passing video frame data to other media components, * such as OMX video encoders, in order to eliminate the * memcpy of the data. * * @return the total numbner of video buffers. Returns 0 to * indicate that this source does not make the video * buffer information availalble. */ size_t getNumberOfVideoBuffers() const; /** * Retrieve the individual video buffer available from * this source. * * @param index the index corresponding to the video buffer. * Valid range of the index is [0, n], where n = * getNumberOfVideoBuffers() - 1. * * @return the video buffer corresponding to the given index. * If index is out of range, 0 should be returned. */ sp<IMemory> getVideoBuffer(size_t index) const; /** * Tell whether this camera source stores meta data or real YUV * frame data in video buffers. * * @return true if meta data is stored in the video * buffers; false if real YUV data is stored in * the video buffers. */ bool isMetaDataStoredInVideoBuffers() const; virtual void signalBufferReturned(MediaBuffer* buffer); Loading @@ -115,7 +161,8 @@ protected: CameraSource(const sp<ICamera>& camera, int32_t cameraId, Size videoSize, int32_t frameRate, const sp<Surface>& surface); const sp<Surface>& surface, bool storeMetaDataInVideoBuffers); virtual void startCameraRecording(); virtual void stopCameraRecording(); Loading Loading @@ -147,13 +194,15 @@ private: int32_t mNumGlitches; int64_t mGlitchDurationThresholdUs; bool mCollectStats; bool mIsMetaDataStoredInVideoBuffers; void releaseQueuedFrames(); void releaseOneRecordingFrame(const sp<IMemory>& frame); status_t init(const sp<ICamera>& camera, int32_t cameraId, Size videoSize, int32_t frameRate); Size videoSize, int32_t frameRate, bool storeMetaDataInVideoBuffers); status_t isCameraAvailable(const sp<ICamera>& camera, int32_t cameraId); status_t isCameraColorFormatSupported(const CameraParameters& params); status_t configureCamera(CameraParameters* params, Loading media/libstagefright/CameraSource.cpp +50 −6 Original line number Diff line number Diff line Loading @@ -115,7 +115,7 @@ CameraSource *CameraSource::Create() { size.height = -1; sp<ICamera> camera; return new CameraSource(camera, 0, size, -1, NULL); return new CameraSource(camera, 0, size, -1, NULL, false); } // static Loading @@ -124,10 +124,12 @@ CameraSource *CameraSource::CreateFromCamera( int32_t cameraId, Size videoSize, int32_t frameRate, const sp<Surface>& surface) { const sp<Surface>& surface, bool storeMetaDataInVideoBuffers) { CameraSource *source = new CameraSource(camera, cameraId, videoSize, frameRate, surface); videoSize, frameRate, surface, storeMetaDataInVideoBuffers); if (source != NULL) { if (source->initCheck() != OK) { Loading @@ -143,7 +145,8 @@ CameraSource::CameraSource( int32_t cameraId, Size videoSize, int32_t frameRate, const sp<Surface>& surface) const sp<Surface>& surface, bool storeMetaDataInVideoBuffers) : mCameraFlags(0), mVideoFrameRate(-1), mCamera(0), Loading @@ -161,7 +164,9 @@ CameraSource::CameraSource( mVideoSize.width = -1; mVideoSize.height = -1; mInitCheck = init(camera, cameraId, videoSize, frameRate); mInitCheck = init(camera, cameraId, videoSize, frameRate, storeMetaDataInVideoBuffers); } status_t CameraSource::initCheck() const { Loading Loading @@ -411,13 +416,19 @@ status_t CameraSource::checkFrameRate( * width and heigth settings by the camera * @param frameRate the target frame rate in frames per second. * if it is -1, use the current camera frame rate setting. * @param storeMetaDataInVideoBuffers request to store meta * data or real YUV data in video buffers. Request to * store meta data in video buffers may not be honored * if the source does not support this feature. * * @return OK if no error. */ status_t CameraSource::init( const sp<ICamera>& camera, int32_t cameraId, Size videoSize, int32_t frameRate) { int32_t frameRate, bool storeMetaDataInVideoBuffers) { status_t err = OK; int64_t token = IPCThreadState::self()->clearCallingIdentity(); Loading Loading @@ -452,6 +463,12 @@ status_t CameraSource::init( // check earlier by calling mCamera->setParameters(). CHECK_EQ(OK, mCamera->setPreviewDisplay(mSurface)); mIsMetaDataStoredInVideoBuffers = false; if (storeMetaDataInVideoBuffers && OK == mCamera->storeMetaDataInBuffers(true)) { mIsMetaDataStoredInVideoBuffers = true; } /* * mCamera->startRecording() signals camera hal to make * available the video buffers (for instance, allocation Loading Loading @@ -722,4 +739,31 @@ void CameraSource::dataCallbackTimestamp(int64_t timestampUs, mFrameAvailableCondition.signal(); } size_t CameraSource::getNumberOfVideoBuffers() const { LOGV("getNumberOfVideoBuffers"); size_t nBuffers = 0; int64_t token = IPCThreadState::self()->clearCallingIdentity(); if (mInitCheck == OK && mCamera != 0) { nBuffers = mCamera->getNumberOfVideoBuffers(); } IPCThreadState::self()->restoreCallingIdentity(token); return nBuffers; } sp<IMemory> CameraSource::getVideoBuffer(size_t index) const { LOGV("getVideoBuffer: %d", index); sp<IMemory> buffer = 0; int64_t token = IPCThreadState::self()->clearCallingIdentity(); if (mInitCheck == OK && mCamera != 0) { buffer = mCamera->getVideoBuffer(index); } IPCThreadState::self()->restoreCallingIdentity(token); return buffer; } bool CameraSource::isMetaDataStoredInVideoBuffers() const { LOGV("isMetaDataStoredInVideoBuffers"); return mIsMetaDataStoredInVideoBuffers; } } // namespace android media/libstagefright/CameraSourceTimeLapse.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -66,7 +66,7 @@ CameraSourceTimeLapse::CameraSourceTimeLapse( int32_t videoFrameRate, const sp<Surface>& surface, int64_t timeBetweenTimeLapseFrameCaptureUs) : CameraSource(camera, cameraId, videoSize, videoFrameRate, surface), : CameraSource(camera, cameraId, videoSize, videoFrameRate, surface, false), mTimeBetweenTimeLapseFrameCaptureUs(timeBetweenTimeLapseFrameCaptureUs), mTimeBetweenTimeLapseVideoFramesUs(1E6/videoFrameRate), mLastTimeLapseFrameRealTimestampUs(0), Loading Loading
include/media/stagefright/CameraSource.h +54 −5 Original line number Diff line number Diff line Loading @@ -56,6 +56,14 @@ public: * @param frameRate the target frames per second * @param surface the preview surface for display where preview * frames are sent to * @param storeMetaDataInVideoBuffers true to request the camera * source to store meta data in video buffers; false to * request the camera source to store real YUV frame data * in the video buffers. The camera source may not support * storing meta data in video buffers, if so, a request * to do that will NOT be honored. To find out whether * meta data is actually being stored in video buffers * during recording, call isMetaDataStoredInVideoBuffers(). * * @return NULL on error. */ Loading @@ -63,12 +71,15 @@ public: int32_t cameraId, Size videoSize, int32_t frameRate, const sp<Surface>& surface); const sp<Surface>& surface, bool storeMetaDataInVideoBuffers = false); virtual ~CameraSource(); virtual status_t start(MetaData *params = NULL); virtual status_t stop(); virtual status_t read( MediaBuffer **buffer, const ReadOptions *options = NULL); /** * Check whether a CameraSource object is properly initialized. Loading @@ -87,8 +98,43 @@ public: */ virtual sp<MetaData> getFormat(); virtual status_t read( MediaBuffer **buffer, const ReadOptions *options = NULL); /** * Retrieve the total number of video buffers available from * this source. * * This method is useful if these video buffers are used * for passing video frame data to other media components, * such as OMX video encoders, in order to eliminate the * memcpy of the data. * * @return the total numbner of video buffers. Returns 0 to * indicate that this source does not make the video * buffer information availalble. */ size_t getNumberOfVideoBuffers() const; /** * Retrieve the individual video buffer available from * this source. * * @param index the index corresponding to the video buffer. * Valid range of the index is [0, n], where n = * getNumberOfVideoBuffers() - 1. * * @return the video buffer corresponding to the given index. * If index is out of range, 0 should be returned. */ sp<IMemory> getVideoBuffer(size_t index) const; /** * Tell whether this camera source stores meta data or real YUV * frame data in video buffers. * * @return true if meta data is stored in the video * buffers; false if real YUV data is stored in * the video buffers. */ bool isMetaDataStoredInVideoBuffers() const; virtual void signalBufferReturned(MediaBuffer* buffer); Loading @@ -115,7 +161,8 @@ protected: CameraSource(const sp<ICamera>& camera, int32_t cameraId, Size videoSize, int32_t frameRate, const sp<Surface>& surface); const sp<Surface>& surface, bool storeMetaDataInVideoBuffers); virtual void startCameraRecording(); virtual void stopCameraRecording(); Loading Loading @@ -147,13 +194,15 @@ private: int32_t mNumGlitches; int64_t mGlitchDurationThresholdUs; bool mCollectStats; bool mIsMetaDataStoredInVideoBuffers; void releaseQueuedFrames(); void releaseOneRecordingFrame(const sp<IMemory>& frame); status_t init(const sp<ICamera>& camera, int32_t cameraId, Size videoSize, int32_t frameRate); Size videoSize, int32_t frameRate, bool storeMetaDataInVideoBuffers); status_t isCameraAvailable(const sp<ICamera>& camera, int32_t cameraId); status_t isCameraColorFormatSupported(const CameraParameters& params); status_t configureCamera(CameraParameters* params, Loading
media/libstagefright/CameraSource.cpp +50 −6 Original line number Diff line number Diff line Loading @@ -115,7 +115,7 @@ CameraSource *CameraSource::Create() { size.height = -1; sp<ICamera> camera; return new CameraSource(camera, 0, size, -1, NULL); return new CameraSource(camera, 0, size, -1, NULL, false); } // static Loading @@ -124,10 +124,12 @@ CameraSource *CameraSource::CreateFromCamera( int32_t cameraId, Size videoSize, int32_t frameRate, const sp<Surface>& surface) { const sp<Surface>& surface, bool storeMetaDataInVideoBuffers) { CameraSource *source = new CameraSource(camera, cameraId, videoSize, frameRate, surface); videoSize, frameRate, surface, storeMetaDataInVideoBuffers); if (source != NULL) { if (source->initCheck() != OK) { Loading @@ -143,7 +145,8 @@ CameraSource::CameraSource( int32_t cameraId, Size videoSize, int32_t frameRate, const sp<Surface>& surface) const sp<Surface>& surface, bool storeMetaDataInVideoBuffers) : mCameraFlags(0), mVideoFrameRate(-1), mCamera(0), Loading @@ -161,7 +164,9 @@ CameraSource::CameraSource( mVideoSize.width = -1; mVideoSize.height = -1; mInitCheck = init(camera, cameraId, videoSize, frameRate); mInitCheck = init(camera, cameraId, videoSize, frameRate, storeMetaDataInVideoBuffers); } status_t CameraSource::initCheck() const { Loading Loading @@ -411,13 +416,19 @@ status_t CameraSource::checkFrameRate( * width and heigth settings by the camera * @param frameRate the target frame rate in frames per second. * if it is -1, use the current camera frame rate setting. * @param storeMetaDataInVideoBuffers request to store meta * data or real YUV data in video buffers. Request to * store meta data in video buffers may not be honored * if the source does not support this feature. * * @return OK if no error. */ status_t CameraSource::init( const sp<ICamera>& camera, int32_t cameraId, Size videoSize, int32_t frameRate) { int32_t frameRate, bool storeMetaDataInVideoBuffers) { status_t err = OK; int64_t token = IPCThreadState::self()->clearCallingIdentity(); Loading Loading @@ -452,6 +463,12 @@ status_t CameraSource::init( // check earlier by calling mCamera->setParameters(). CHECK_EQ(OK, mCamera->setPreviewDisplay(mSurface)); mIsMetaDataStoredInVideoBuffers = false; if (storeMetaDataInVideoBuffers && OK == mCamera->storeMetaDataInBuffers(true)) { mIsMetaDataStoredInVideoBuffers = true; } /* * mCamera->startRecording() signals camera hal to make * available the video buffers (for instance, allocation Loading Loading @@ -722,4 +739,31 @@ void CameraSource::dataCallbackTimestamp(int64_t timestampUs, mFrameAvailableCondition.signal(); } size_t CameraSource::getNumberOfVideoBuffers() const { LOGV("getNumberOfVideoBuffers"); size_t nBuffers = 0; int64_t token = IPCThreadState::self()->clearCallingIdentity(); if (mInitCheck == OK && mCamera != 0) { nBuffers = mCamera->getNumberOfVideoBuffers(); } IPCThreadState::self()->restoreCallingIdentity(token); return nBuffers; } sp<IMemory> CameraSource::getVideoBuffer(size_t index) const { LOGV("getVideoBuffer: %d", index); sp<IMemory> buffer = 0; int64_t token = IPCThreadState::self()->clearCallingIdentity(); if (mInitCheck == OK && mCamera != 0) { buffer = mCamera->getVideoBuffer(index); } IPCThreadState::self()->restoreCallingIdentity(token); return buffer; } bool CameraSource::isMetaDataStoredInVideoBuffers() const { LOGV("isMetaDataStoredInVideoBuffers"); return mIsMetaDataStoredInVideoBuffers; } } // namespace android
media/libstagefright/CameraSourceTimeLapse.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -66,7 +66,7 @@ CameraSourceTimeLapse::CameraSourceTimeLapse( int32_t videoFrameRate, const sp<Surface>& surface, int64_t timeBetweenTimeLapseFrameCaptureUs) : CameraSource(camera, cameraId, videoSize, videoFrameRate, surface), : CameraSource(camera, cameraId, videoSize, videoFrameRate, surface, false), mTimeBetweenTimeLapseFrameCaptureUs(timeBetweenTimeLapseFrameCaptureUs), mTimeBetweenTimeLapseVideoFramesUs(1E6/videoFrameRate), mLastTimeLapseFrameRealTimestampUs(0), Loading