diff options
author | James Dong <jdong@google.com> | 2010-11-03 17:27:58 -0700 |
---|---|---|
committer | James Dong <jdong@google.com> | 2010-11-03 17:49:55 -0700 |
commit | f1febe470ac30f8992066cb263c10f58493c4c34 (patch) | |
tree | 74ec7cfff81325daa762dcf5545953700c2353a0 /media/libmediaplayerservice | |
parent | f3847e875eb1c58094a2d159a2a6f3f0b381d77a (diff) | |
download | frameworks_base-f1febe470ac30f8992066cb263c10f58493c4c34.zip frameworks_base-f1febe470ac30f8992066cb263c10f58493c4c34.tar.gz frameworks_base-f1febe470ac30f8992066cb263c10f58493c4c34.tar.bz2 |
Support rotation in media recorder
o needs to be tested with camera hal and camcorder application
Change-Id: Ie343185c8ad3ec55da8850efbdcf19cf98993232
Diffstat (limited to 'media/libmediaplayerservice')
-rw-r--r-- | media/libmediaplayerservice/StagefrightRecorder.cpp | 25 | ||||
-rw-r--r-- | media/libmediaplayerservice/StagefrightRecorder.h | 2 |
2 files changed, 27 insertions, 0 deletions
diff --git a/media/libmediaplayerservice/StagefrightRecorder.cpp b/media/libmediaplayerservice/StagefrightRecorder.cpp index d37d83d..50d7f6d 100644 --- a/media/libmediaplayerservice/StagefrightRecorder.cpp +++ b/media/libmediaplayerservice/StagefrightRecorder.cpp @@ -462,6 +462,17 @@ status_t StagefrightRecorder::setParamVideoTimeScale(int32_t timeScale) { return OK; } +status_t StagefrightRecorder::setParamVideoRotation(int32_t degreesClockwise) { + LOGV("setParamVideoRotation: %d", degreesClockwise); + + if (degreesClockwise < 0 || degreesClockwise % 90 != 0) { + LOGE("Unsupported video rotation angle: %d", degreesClockwise); + return BAD_VALUE; + } + mClockwiseRotationDegrees = degreesClockwise; + return OK; +} + status_t StagefrightRecorder::setParamAudioTimeScale(int32_t timeScale) { LOGV("setParamAudioTimeScale: %d", timeScale); @@ -557,6 +568,11 @@ status_t StagefrightRecorder::setParameter( if (safe_strtoi32(value.string(), &timeScale)) { return setParamVideoTimeScale(timeScale); } + } else if (key == "video-param-clockwise-rotation-degrees") { + int32_t degrees; + if (safe_strtoi32(value.string(), °rees)) { + return setParamVideoRotation(degrees); + } } else { LOGE("setParameter: failed to find key %s", key.string()); } @@ -921,6 +937,12 @@ status_t StagefrightRecorder::setupCameraSource() { CameraParameters params(mCamera->getParameters()); params.setPreviewSize(mVideoWidth, mVideoHeight); params.setPreviewFrameRate(mFrameRate); + { + // Optional feature: setting the rotation degrees. + char degrees[4]; + snprintf(degrees, 4, "%d", mClockwiseRotationDegrees); + params.set(CameraParameters::KEY_ROTATION, degrees); + } String8 s = params.flatten(); if (OK != mCamera->setParameters(s)) { LOGE("Could not change settings." @@ -1188,6 +1210,7 @@ status_t StagefrightRecorder::reset() { mMaxFileSizeBytes = 0; mTrackEveryTimeDurationUs = 0; mEncoderProfiles = MediaProfiles::getInstance(); + mClockwiseRotationDegrees = 0; mOutputFd = -1; mFlags = 0; @@ -1261,6 +1284,8 @@ status_t StagefrightRecorder::dump( result.append(buffer); snprintf(buffer, SIZE, " Camera flags: %d\n", mFlags); result.append(buffer); + snprintf(buffer, SIZE, " Rotation (clockwise) degrees: %d\n", mClockwiseRotationDegrees); + result.append(buffer); snprintf(buffer, SIZE, " Encoder: %d\n", mVideoEncoder); result.append(buffer); snprintf(buffer, SIZE, " Encoder profile: %d\n", mVideoEncoderProfile); diff --git a/media/libmediaplayerservice/StagefrightRecorder.h b/media/libmediaplayerservice/StagefrightRecorder.h index ad0dfa0..383fec5 100644 --- a/media/libmediaplayerservice/StagefrightRecorder.h +++ b/media/libmediaplayerservice/StagefrightRecorder.h @@ -91,6 +91,7 @@ private: int64_t mMaxFileSizeBytes; int64_t mMaxFileDurationUs; int64_t mTrackEveryTimeDurationUs; + int32_t mClockwiseRotationDegrees; String8 mParams; int mOutputFd; @@ -120,6 +121,7 @@ private: status_t setParamVideoEncoderLevel(int32_t level); status_t setParamVideoCameraId(int32_t cameraId); status_t setParamVideoTimeScale(int32_t timeScale); + status_t setParamVideoRotation(int32_t degreesClockwise); status_t setParamTrackTimeStatus(int64_t timeDurationUs); status_t setParamInterleaveDuration(int32_t durationUs); status_t setParam64BitFileOffset(bool use64BitFileOffset); |