diff options
author | ztenghui <ztenghui@google.com> | 2013-03-20 17:00:50 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2013-03-20 17:00:50 +0000 |
commit | 3a29ea87c8fdcd45987bcc9cd2b68961ac971d27 (patch) | |
tree | 799496b667decd5c7cffeef3e56e3865b393f357 /media | |
parent | aab193b107e302e145b5c3d6e6c87f92ac296186 (diff) | |
parent | 11287471298193ff51ffb429686f5d63a84a621b (diff) | |
download | frameworks_av-3a29ea87c8fdcd45987bcc9cd2b68961ac971d27.zip frameworks_av-3a29ea87c8fdcd45987bcc9cd2b68961ac971d27.tar.gz frameworks_av-3a29ea87c8fdcd45987bcc9cd2b68961ac971d27.tar.bz2 |
Merge "Add the presentation rotation support" into jb-mr2-dev
Diffstat (limited to 'media')
-rw-r--r-- | media/libstagefright/MediaMuxer.cpp | 48 |
1 files changed, 34 insertions, 14 deletions
diff --git a/media/libstagefright/MediaMuxer.cpp b/media/libstagefright/MediaMuxer.cpp index 21841b3..b948fe2 100644 --- a/media/libstagefright/MediaMuxer.cpp +++ b/media/libstagefright/MediaMuxer.cpp @@ -36,18 +36,21 @@ namespace android { MediaMuxer::MediaMuxer(const char *path, OutputFormat format) - : mState(UNINITED) { + : mState(UNINITIALIZED) { if (format == OUTPUT_FORMAT_MPEG_4) { mWriter = new MPEG4Writer(path); - mState = INITED; + mFileMeta = new MetaData; + mState = INITIALIZED; } + } MediaMuxer::MediaMuxer(int fd, OutputFormat format) - : mState(UNINITED) { + : mState(UNINITIALIZED) { if (format == OUTPUT_FORMAT_MPEG_4) { mWriter = new MPEG4Writer(fd); - mState = INITED; + mFileMeta = new MetaData; + mState = INITIALIZED; } } @@ -55,6 +58,7 @@ MediaMuxer::~MediaMuxer() { Mutex::Autolock autoLock(mMuxerLock); // Clean up all the internal resources. + mFileMeta.clear(); mWriter.clear(); mTrackList.clear(); } @@ -67,15 +71,15 @@ ssize_t MediaMuxer::addTrack(const sp<AMessage> &format) { return -EINVAL; } - if (mState != INITED) { + if (mState != INITIALIZED) { ALOGE("addTrack() must be called after constructor and before start()."); return INVALID_OPERATION; } - sp<MetaData> meta = new MetaData; - convertMessageToMetaData(format, meta); + sp<MetaData> trackMeta = new MetaData; + convertMessageToMetaData(format, trackMeta); - sp<MediaAdapter> newTrack = new MediaAdapter(meta); + sp<MediaAdapter> newTrack = new MediaAdapter(trackMeta); status_t result = mWriter->addSource(newTrack); if (result == OK) { return mTrackList.add(newTrack); @@ -83,11 +87,27 @@ ssize_t MediaMuxer::addTrack(const sp<AMessage> &format) { return -1; } +status_t MediaMuxer::setOrientationHint(int degrees) { + Mutex::Autolock autoLock(mMuxerLock); + if (mState != INITIALIZED) { + ALOGE("setOrientationHint() must be called before start()."); + return INVALID_OPERATION; + } + + if (degrees != 0 && degrees != 90 && degrees != 180 && degrees != 270) { + ALOGE("setOrientationHint() get invalid degrees"); + return -EINVAL; + } + + mFileMeta->setInt32(kKeyRotation, degrees); + return OK; +} + status_t MediaMuxer::start() { Mutex::Autolock autoLock(mMuxerLock); - if (mState == INITED) { + if (mState == INITIALIZED) { mState = STARTED; - return mWriter->start(); + return mWriter->start(mFileMeta.get()); } else { ALOGE("start() is called in invalid state %d", mState); return INVALID_OPERATION; @@ -135,13 +155,13 @@ status_t MediaMuxer::writeSampleData(const sp<ABuffer> &buffer, size_t trackInde mediaBuffer->add_ref(); // Released in MediaAdapter::signalBufferReturned(). mediaBuffer->set_range(buffer->offset(), buffer->size()); - sp<MetaData> metaData = mediaBuffer->meta_data(); - metaData->setInt64(kKeyTime, timeUs); + sp<MetaData> sampleMetaData = mediaBuffer->meta_data(); + sampleMetaData->setInt64(kKeyTime, timeUs); // Just set the kKeyDecodingTime as the presentation time for now. - metaData->setInt64(kKeyDecodingTime, timeUs); + sampleMetaData->setInt64(kKeyDecodingTime, timeUs); if (flags & SAMPLE_FLAG_SYNC) { - metaData->setInt32(kKeyIsSyncFrame, true); + sampleMetaData->setInt32(kKeyIsSyncFrame, true); } sp<MediaAdapter> currentTrack = mTrackList[trackIndex]; |