Loading include/media/stagefright/CameraSource.h +3 −2 Original line number Diff line number Diff line Loading @@ -62,8 +62,9 @@ private: int mWidth, mHeight; int64_t mFirstFrameTimeUs; int64_t mLastFrameTimestampUs; int32_t mNumFrames; int32_t mNumFramesReleased; int32_t mNumFramesReceived; int32_t mNumFramesEncoded; int32_t mNumFramesDropped; bool mStarted; CameraSource(const sp<Camera> &camera); Loading include/media/stagefright/MPEG4Writer.h +9 −2 Original line number Diff line number Diff line Loading @@ -49,6 +49,8 @@ public: void writeFourcc(const char *fourcc); void write(const void *data, size_t size); void endBox(); uint32_t interleaveDuration() const { return mInterleaveDurationUs; } status_t setInterleaveDuration(uint32_t duration); protected: virtual ~MPEG4Writer(); Loading @@ -59,14 +61,19 @@ private: FILE *mFile; off_t mOffset; off_t mMdatOffset; uint32_t mInterleaveDurationUs; Mutex mLock; List<Track *> mTracks; List<off_t> mBoxes; off_t addSample(MediaBuffer *buffer); off_t addLengthPrefixedSample(MediaBuffer *buffer); void lock(); void unlock(); // Acquire lock before calling these methods off_t addSample_l(MediaBuffer *buffer); off_t addLengthPrefixedSample_l(MediaBuffer *buffer); MPEG4Writer(const MPEG4Writer &); MPEG4Writer &operator=(const MPEG4Writer &); Loading media/libmediaplayerservice/StagefrightRecorder.cpp +16 −4 Original line number Diff line number Diff line Loading @@ -213,25 +213,31 @@ status_t StagefrightRecorder::setParamVideoEncodingBitRate(int32_t bitRate) { return OK; } status_t StagefrightRecorder::setMaxDurationOrFileSize(int32_t limit, bool limit_is_duration) { LOGV("setMaxDurationOrFileSize: limit (%d) for %s", status_t StagefrightRecorder::setParamMaxDurationOrFileSize(int32_t limit, bool limit_is_duration) { LOGV("setParamMaxDurationOrFileSize: limit (%d) for %s", limit, limit_is_duration?"duration":"size"); return OK; } status_t StagefrightRecorder::setParamInterleaveDuration(int32_t durationUs) { LOGV("setParamInterleaveDuration: %d", durationUs); mInterleaveDurationUs = durationUs; return OK; } status_t StagefrightRecorder::setParameter( const String8 &key, const String8 &value) { LOGV("setParameter: key (%s) => value (%s)", key.string(), value.string()); if (key == "max-duration") { int32_t max_duration_ms; if (safe_strtoi64(value.string(), &max_duration_ms)) { return setMaxDurationOrFileSize( return setParamMaxDurationOrFileSize( max_duration_ms, true /* limit_is_duration */); } } else if (key == "max-filesize") { int32_t max_filesize_bytes; if (safe_strtoi64(value.string(), &max_filesize_bytes)) { return setMaxDurationOrFileSize( return setParamMaxDurationOrFileSize( max_filesize_bytes, false /* limit is filesize */); } } else if (key == "audio-param-sampling-rate") { Loading @@ -254,6 +260,11 @@ status_t StagefrightRecorder::setParameter( if (safe_strtoi64(value.string(), &video_bitrate)) { return setParamVideoEncodingBitRate(video_bitrate); } } else if (key == "param-interleave-duration-us") { int32_t durationUs; if (safe_strtoi64(value.string(), &durationUs)) { return setParamInterleaveDuration(durationUs); } } else { LOGE("setParameter: failed to find key %s", key.string()); return BAD_VALUE; Loading Loading @@ -480,6 +491,7 @@ status_t StagefrightRecorder::startMPEG4Recording() { mWriter->addSource(encoder); } ((MPEG4Writer *)mWriter.get())->setInterleaveDuration(mInterleaveDurationUs); mWriter->start(); return OK; } Loading media/libmediaplayerservice/StagefrightRecorder.h +3 −1 Original line number Diff line number Diff line Loading @@ -74,6 +74,7 @@ private: int32_t mAudioBitRate; int32_t mAudioChannels; int32_t mSampleRate; int32_t mInterleaveDurationUs; String8 mParams; int mOutputFd; Loading @@ -87,7 +88,8 @@ private: status_t setParamAudioEncodingBitRate(int32_t bitRate); status_t setParamAudioNumberOfChannels(int32_t channles); status_t setParamAudioSamplingRate(int32_t sampleRate); status_t setMaxDurationOrFileSize(int32_t limit, bool limit_is_duration); status_t setParamInterleaveDuration(int32_t durationUs); status_t setParamMaxDurationOrFileSize(int32_t limit, bool limit_is_duration); StagefrightRecorder(const StagefrightRecorder &); StagefrightRecorder &operator=(const StagefrightRecorder &); Loading media/libstagefright/CameraSource.cpp +13 −10 Original line number Diff line number Diff line Loading @@ -130,8 +130,9 @@ CameraSource::CameraSource(const sp<Camera> &camera) mHeight(0), mFirstFrameTimeUs(0), mLastFrameTimestampUs(0), mNumFrames(0), mNumFramesReleased(0), mNumFramesReceived(0), mNumFramesEncoded(0), mNumFramesDropped(0), mStarted(false) { String8 s = mCamera->getParameters(); printf("params: \"%s\"\n", s.string()); Loading Loading @@ -178,9 +179,11 @@ status_t CameraSource::stop() { mCamera->stopRecording(); releaseQueuedFrames(); LOGI("Frames received/released: %d/%d, timestamp (us) last/first: %lld/%lld", mNumFrames, mNumFramesReleased, LOGI("Frames received/encoded/dropped: %d/%d/%d, timestamp (us) last/first: %lld/%lld", mNumFramesReceived, mNumFramesEncoded, mNumFramesDropped, mLastFrameTimestampUs, mFirstFrameTimeUs); CHECK_EQ(mNumFramesReceived, mNumFramesEncoded + mNumFramesDropped); return OK; } Loading @@ -190,7 +193,7 @@ void CameraSource::releaseQueuedFrames() { it = mFrames.begin(); mCamera->releaseRecordingFrame(*it); mFrames.erase(it); ++mNumFramesReleased; ++mNumFramesDropped; } } Loading Loading @@ -231,7 +234,7 @@ status_t CameraSource::read( frameTime = *mFrameTimes.begin(); mFrameTimes.erase(mFrameTimes.begin()); ++mNumFramesReleased; ++mNumFramesEncoded; } *buffer = new MediaBuffer(frame->size()); Loading @@ -252,15 +255,15 @@ void CameraSource::dataCallbackTimestamp(int64_t timestampUs, Mutex::Autolock autoLock(mLock); if (!mStarted) { mCamera->releaseRecordingFrame(data); ++mNumFrames; ++mNumFramesReleased; ++mNumFramesReceived; ++mNumFramesDropped; return; } if (mNumFrames == 0) { if (mNumFramesReceived == 0) { mFirstFrameTimeUs = timestampUs; } ++mNumFrames; ++mNumFramesReceived; mFrames.push_back(data); mFrameTimes.push_back(timestampUs - mFirstFrameTimeUs); Loading Loading
include/media/stagefright/CameraSource.h +3 −2 Original line number Diff line number Diff line Loading @@ -62,8 +62,9 @@ private: int mWidth, mHeight; int64_t mFirstFrameTimeUs; int64_t mLastFrameTimestampUs; int32_t mNumFrames; int32_t mNumFramesReleased; int32_t mNumFramesReceived; int32_t mNumFramesEncoded; int32_t mNumFramesDropped; bool mStarted; CameraSource(const sp<Camera> &camera); Loading
include/media/stagefright/MPEG4Writer.h +9 −2 Original line number Diff line number Diff line Loading @@ -49,6 +49,8 @@ public: void writeFourcc(const char *fourcc); void write(const void *data, size_t size); void endBox(); uint32_t interleaveDuration() const { return mInterleaveDurationUs; } status_t setInterleaveDuration(uint32_t duration); protected: virtual ~MPEG4Writer(); Loading @@ -59,14 +61,19 @@ private: FILE *mFile; off_t mOffset; off_t mMdatOffset; uint32_t mInterleaveDurationUs; Mutex mLock; List<Track *> mTracks; List<off_t> mBoxes; off_t addSample(MediaBuffer *buffer); off_t addLengthPrefixedSample(MediaBuffer *buffer); void lock(); void unlock(); // Acquire lock before calling these methods off_t addSample_l(MediaBuffer *buffer); off_t addLengthPrefixedSample_l(MediaBuffer *buffer); MPEG4Writer(const MPEG4Writer &); MPEG4Writer &operator=(const MPEG4Writer &); Loading
media/libmediaplayerservice/StagefrightRecorder.cpp +16 −4 Original line number Diff line number Diff line Loading @@ -213,25 +213,31 @@ status_t StagefrightRecorder::setParamVideoEncodingBitRate(int32_t bitRate) { return OK; } status_t StagefrightRecorder::setMaxDurationOrFileSize(int32_t limit, bool limit_is_duration) { LOGV("setMaxDurationOrFileSize: limit (%d) for %s", status_t StagefrightRecorder::setParamMaxDurationOrFileSize(int32_t limit, bool limit_is_duration) { LOGV("setParamMaxDurationOrFileSize: limit (%d) for %s", limit, limit_is_duration?"duration":"size"); return OK; } status_t StagefrightRecorder::setParamInterleaveDuration(int32_t durationUs) { LOGV("setParamInterleaveDuration: %d", durationUs); mInterleaveDurationUs = durationUs; return OK; } status_t StagefrightRecorder::setParameter( const String8 &key, const String8 &value) { LOGV("setParameter: key (%s) => value (%s)", key.string(), value.string()); if (key == "max-duration") { int32_t max_duration_ms; if (safe_strtoi64(value.string(), &max_duration_ms)) { return setMaxDurationOrFileSize( return setParamMaxDurationOrFileSize( max_duration_ms, true /* limit_is_duration */); } } else if (key == "max-filesize") { int32_t max_filesize_bytes; if (safe_strtoi64(value.string(), &max_filesize_bytes)) { return setMaxDurationOrFileSize( return setParamMaxDurationOrFileSize( max_filesize_bytes, false /* limit is filesize */); } } else if (key == "audio-param-sampling-rate") { Loading @@ -254,6 +260,11 @@ status_t StagefrightRecorder::setParameter( if (safe_strtoi64(value.string(), &video_bitrate)) { return setParamVideoEncodingBitRate(video_bitrate); } } else if (key == "param-interleave-duration-us") { int32_t durationUs; if (safe_strtoi64(value.string(), &durationUs)) { return setParamInterleaveDuration(durationUs); } } else { LOGE("setParameter: failed to find key %s", key.string()); return BAD_VALUE; Loading Loading @@ -480,6 +491,7 @@ status_t StagefrightRecorder::startMPEG4Recording() { mWriter->addSource(encoder); } ((MPEG4Writer *)mWriter.get())->setInterleaveDuration(mInterleaveDurationUs); mWriter->start(); return OK; } Loading
media/libmediaplayerservice/StagefrightRecorder.h +3 −1 Original line number Diff line number Diff line Loading @@ -74,6 +74,7 @@ private: int32_t mAudioBitRate; int32_t mAudioChannels; int32_t mSampleRate; int32_t mInterleaveDurationUs; String8 mParams; int mOutputFd; Loading @@ -87,7 +88,8 @@ private: status_t setParamAudioEncodingBitRate(int32_t bitRate); status_t setParamAudioNumberOfChannels(int32_t channles); status_t setParamAudioSamplingRate(int32_t sampleRate); status_t setMaxDurationOrFileSize(int32_t limit, bool limit_is_duration); status_t setParamInterleaveDuration(int32_t durationUs); status_t setParamMaxDurationOrFileSize(int32_t limit, bool limit_is_duration); StagefrightRecorder(const StagefrightRecorder &); StagefrightRecorder &operator=(const StagefrightRecorder &); Loading
media/libstagefright/CameraSource.cpp +13 −10 Original line number Diff line number Diff line Loading @@ -130,8 +130,9 @@ CameraSource::CameraSource(const sp<Camera> &camera) mHeight(0), mFirstFrameTimeUs(0), mLastFrameTimestampUs(0), mNumFrames(0), mNumFramesReleased(0), mNumFramesReceived(0), mNumFramesEncoded(0), mNumFramesDropped(0), mStarted(false) { String8 s = mCamera->getParameters(); printf("params: \"%s\"\n", s.string()); Loading Loading @@ -178,9 +179,11 @@ status_t CameraSource::stop() { mCamera->stopRecording(); releaseQueuedFrames(); LOGI("Frames received/released: %d/%d, timestamp (us) last/first: %lld/%lld", mNumFrames, mNumFramesReleased, LOGI("Frames received/encoded/dropped: %d/%d/%d, timestamp (us) last/first: %lld/%lld", mNumFramesReceived, mNumFramesEncoded, mNumFramesDropped, mLastFrameTimestampUs, mFirstFrameTimeUs); CHECK_EQ(mNumFramesReceived, mNumFramesEncoded + mNumFramesDropped); return OK; } Loading @@ -190,7 +193,7 @@ void CameraSource::releaseQueuedFrames() { it = mFrames.begin(); mCamera->releaseRecordingFrame(*it); mFrames.erase(it); ++mNumFramesReleased; ++mNumFramesDropped; } } Loading Loading @@ -231,7 +234,7 @@ status_t CameraSource::read( frameTime = *mFrameTimes.begin(); mFrameTimes.erase(mFrameTimes.begin()); ++mNumFramesReleased; ++mNumFramesEncoded; } *buffer = new MediaBuffer(frame->size()); Loading @@ -252,15 +255,15 @@ void CameraSource::dataCallbackTimestamp(int64_t timestampUs, Mutex::Autolock autoLock(mLock); if (!mStarted) { mCamera->releaseRecordingFrame(data); ++mNumFrames; ++mNumFramesReleased; ++mNumFramesReceived; ++mNumFramesDropped; return; } if (mNumFrames == 0) { if (mNumFramesReceived == 0) { mFirstFrameTimeUs = timestampUs; } ++mNumFrames; ++mNumFramesReceived; mFrames.push_back(data); mFrameTimes.push_back(timestampUs - mFirstFrameTimeUs); Loading