diff options
| author | 2012-02-22 11:47:07 -0800 | |
|---|---|---|
| committer | 2012-02-22 11:47:07 -0800 | |
| commit | a352d1e2418f2f43d0e0a82f73799027e304fd96 (patch) | |
| tree | 67ddc0b421d793c46d71c6897767f60405b02da0 | |
| parent | 0b2cfd8cb168481dbdc674e066e477bc555c9d32 (diff) | |
| parent | a4d205d02c0c69fd2a783ef86747058fa00e066e (diff) | |
Merge "Allow to record time lapse videos without using setProfile()"
| -rw-r--r-- | media/java/android/media/MediaRecorder.java | 14 | ||||
| -rw-r--r-- | media/libmediaplayerservice/StagefrightRecorder.cpp | 6 |
2 files changed, 17 insertions, 3 deletions
diff --git a/media/java/android/media/MediaRecorder.java b/media/java/android/media/MediaRecorder.java index 85d99c153298..63196308364c 100644 --- a/media/java/android/media/MediaRecorder.java +++ b/media/java/android/media/MediaRecorder.java @@ -303,6 +303,8 @@ public class MediaRecorder /** * Uses the settings from a CamcorderProfile object for recording. This method should * be called after the video AND audio sources are set, and before setOutputFile(). + * If a time lapse CamcorderProfile is used, audio related source or recording + * parameters are ignored. * * @param profile the CamcorderProfile to use * @see android.media.CamcorderProfile @@ -315,8 +317,8 @@ public class MediaRecorder setVideoEncoder(profile.videoCodec); if (profile.quality >= CamcorderProfile.QUALITY_TIME_LAPSE_LOW && profile.quality <= CamcorderProfile.QUALITY_TIME_LAPSE_QVGA) { - // Enable time lapse. Also don't set audio for time lapse. - setParameter(String.format("time-lapse-enable=1")); + // Nothing needs to be done. Call to setCaptureRate() enables + // time lapse video recording. } else { setAudioEncodingBitRate(profile.audioBitRate); setAudioChannels(profile.audioChannels); @@ -327,7 +329,10 @@ public class MediaRecorder /** * Set video frame capture rate. This can be used to set a different video frame capture - * rate than the recorded video's playback rate. Currently this works only for time lapse mode. + * rate than the recorded video's playback rate. This method also sets the recording mode + * to time lapse. In time lapse video recording, only video is recorded. Audio related + * parameters are ignored when a time lapse recording session starts, if an application + * sets them. * * @param fps Rate at which frames should be captured in frames per second. * The fps can go as low as desired. However the fastest fps will be limited by the hardware. @@ -339,6 +344,9 @@ public class MediaRecorder * possible. */ public void setCaptureRate(double fps) { + // Make sure that time lapse is enabled when this method is called. + setParameter(String.format("time-lapse-enable=1")); + double timeBetweenFrameCapture = 1 / fps; int timeBetweenFrameCaptureMs = (int) (1000 * timeBetweenFrameCapture); setParameter(String.format("time-between-time-lapse-frame-capture=%d", diff --git a/media/libmediaplayerservice/StagefrightRecorder.cpp b/media/libmediaplayerservice/StagefrightRecorder.cpp index fe519b095f30..c5f4f86d38de 100644 --- a/media/libmediaplayerservice/StagefrightRecorder.cpp +++ b/media/libmediaplayerservice/StagefrightRecorder.cpp @@ -1291,6 +1291,12 @@ status_t StagefrightRecorder::setupCameraSource( videoSize.width = mVideoWidth; videoSize.height = mVideoHeight; if (mCaptureTimeLapse) { + if (mTimeBetweenTimeLapseFrameCaptureUs < 0) { + ALOGE("Invalid mTimeBetweenTimeLapseFrameCaptureUs value: %lld", + mTimeBetweenTimeLapseFrameCaptureUs); + return BAD_VALUE; + } + mCameraSourceTimeLapse = CameraSourceTimeLapse::CreateFromCamera( mCamera, mCameraProxy, mCameraId, videoSize, mFrameRate, mPreviewSurface, |