diff --git a/media/java/android/media/MediaRecorder.java b/media/java/android/media/MediaRecorder.java index 65f1e4d34fd9e..271831ce57bc3 100644 --- a/media/java/android/media/MediaRecorder.java +++ b/media/java/android/media/MediaRecorder.java @@ -288,9 +288,12 @@ public class MediaRecorder * @hide */ public void setTimeLapseParameters(boolean enableTimeLapse, + boolean useStillCameraForTimeLapse, int timeBetweenTimeLapseFrameCaptureMs, int encoderLevel) { setParameter(String.format("time-lapse-enable=%d", (enableTimeLapse) ? 1 : 0)); + setParameter(String.format("use-still-camera-for-time-lapse=%d", + (useStillCameraForTimeLapse) ? 1 : 0)); setParameter(String.format("time-between-time-lapse-frame-capture=%d", timeBetweenTimeLapseFrameCaptureMs)); setVideoEncoderLevel(encoderLevel); diff --git a/media/libmediaplayerservice/StagefrightRecorder.cpp b/media/libmediaplayerservice/StagefrightRecorder.cpp index 8cdb9b06232ae..e3f394c93c9b6 100644 --- a/media/libmediaplayerservice/StagefrightRecorder.cpp +++ b/media/libmediaplayerservice/StagefrightRecorder.cpp @@ -486,6 +486,19 @@ status_t StagefrightRecorder::setParamTimeLapseEnable(int32_t timeLapseEnable) { return OK; } +status_t StagefrightRecorder::setParamUseStillCameraForTimeLapse(int32_t useStillCamera) { + LOGV("setParamUseStillCameraForTimeLapse: %d", useStillCamera); + + if(useStillCamera == 0) { + mUseStillCameraForTimeLapse= false; + } else if (useStillCamera == 1) { + mUseStillCameraForTimeLapse= true; + } else { + return BAD_VALUE; + } + return OK; +} + status_t StagefrightRecorder::setParamTimeBetweenTimeLapseFrameCapture(int64_t timeUs) { LOGV("setParamTimeBetweenTimeLapseFrameCapture: %lld us", timeUs); @@ -587,6 +600,11 @@ status_t StagefrightRecorder::setParameter( if (safe_strtoi32(value.string(), &timeLapseEnable)) { return setParamTimeLapseEnable(timeLapseEnable); } + } else if (key == "use-still-camera-for-time-lapse") { + int32_t useStillCamera; + if (safe_strtoi32(value.string(), &useStillCamera)) { + return setParamUseStillCameraForTimeLapse(useStillCamera); + } } else if (key == "time-between-time-lapse-frame-capture") { int64_t timeBetweenTimeLapseFrameCaptureMs; if (safe_strtoi64(value.string(), &timeBetweenTimeLapseFrameCaptureMs)) { @@ -930,7 +948,7 @@ status_t StagefrightRecorder::setupVideoEncoder(const sp& writer) { if (err != OK) return err; sp cameraSource = (mCaptureTimeLapse) ? - CameraSourceTimeLapse::CreateFromCamera(mCamera, true, + CameraSourceTimeLapse::CreateFromCamera(mCamera, mUseStillCameraForTimeLapse, mTimeBetweenTimeLapseFrameCaptureUs, mVideoWidth, mVideoHeight, mFrameRate): CameraSource::CreateFromCamera(mCamera); CHECK(cameraSource != NULL); @@ -1133,6 +1151,7 @@ status_t StagefrightRecorder::reset() { mMaxFileSizeBytes = 0; mTrackEveryTimeDurationUs = 0; mCaptureTimeLapse = false; + mUseStillCameraForTimeLapse = true; mTimeBetweenTimeLapseFrameCaptureUs = -1; mEncoderProfiles = MediaProfiles::getInstance(); diff --git a/media/libmediaplayerservice/StagefrightRecorder.h b/media/libmediaplayerservice/StagefrightRecorder.h index fc287a26f8b24..03f0b61cffa9b 100644 --- a/media/libmediaplayerservice/StagefrightRecorder.h +++ b/media/libmediaplayerservice/StagefrightRecorder.h @@ -93,6 +93,7 @@ private: int64_t mTrackEveryTimeDurationUs; bool mCaptureTimeLapse; + bool mUseStillCameraForTimeLapse; int64_t mTimeBetweenTimeLapseFrameCaptureUs; String8 mParams; @@ -116,6 +117,7 @@ private: status_t setParamAudioSamplingRate(int32_t sampleRate); status_t setParamAudioTimeScale(int32_t timeScale); status_t setParamTimeLapseEnable(int32_t timeLapseEnable); + status_t setParamUseStillCameraForTimeLapse(int32_t useStillCamera); status_t setParamTimeBetweenTimeLapseFrameCapture(int64_t timeUs); status_t setParamVideoEncodingBitRate(int32_t bitRate); status_t setParamVideoIFramesInterval(int32_t seconds);