diff options
author | Andreas Huber <andih@google.com> | 2009-10-09 14:11:28 -0700 |
---|---|---|
committer | Andreas Huber <andih@google.com> | 2009-10-13 09:46:46 -0700 |
commit | 7f281f87670c63775ea1ae8b24af31822d5ad416 (patch) | |
tree | c04964f9bc176627df0eec3688b00bc17479bc06 /media/libstagefright/OMXCodec.cpp | |
parent | 0bf3921522461b1c7d321d0c667c1020ab3110bc (diff) | |
download | frameworks_av-7f281f87670c63775ea1ae8b24af31822d5ad416.zip frameworks_av-7f281f87670c63775ea1ae8b24af31822d5ad416.tar.gz frameworks_av-7f281f87670c63775ea1ae8b24af31822d5ad416.tar.bz2 |
OMXCodec now notifies the reader of changes in the output format by returning a special result/error code.
Diffstat (limited to 'media/libstagefright/OMXCodec.cpp')
-rw-r--r-- | media/libstagefright/OMXCodec.cpp | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/media/libstagefright/OMXCodec.cpp b/media/libstagefright/OMXCodec.cpp index 11c207c..8eb4738 100644 --- a/media/libstagefright/OMXCodec.cpp +++ b/media/libstagefright/OMXCodec.cpp @@ -677,6 +677,7 @@ OMXCodec::OMXCodec( mInitialBufferSubmit(true), mSignalledEOS(false), mNoMoreOutputData(false), + mOutputPortSettingsHaveChanged(false), mSeekTimeUs(-1) { mPortStatus[kPortIndexInput] = ENABLED; mPortStatus[kPortIndexOutput] = ENABLED; @@ -1078,6 +1079,9 @@ void OMXCodec::onCmdComplete(OMX_COMMANDTYPE cmd, OMX_U32 data) { if (mState == RECONFIGURING) { CHECK_EQ(portIndex, kPortIndexOutput); + initOutputFormat(mSource->getFormat()); + mOutputPortSettingsHaveChanged = true; + enablePortAsync(portIndex); status_t err = allocateBuffersOnPort(portIndex); @@ -1782,6 +1786,7 @@ status_t OMXCodec::start(MetaData *) { mInitialBufferSubmit = true; mSignalledEOS = false; mNoMoreOutputData = false; + mOutputPortSettingsHaveChanged = false; mSeekTimeUs = -1; mFilledBuffers.clear(); @@ -1852,6 +1857,8 @@ status_t OMXCodec::stop() { } sp<MetaData> OMXCodec::getFormat() { + Mutex::Autolock autoLock(mLock); + return mOutputFormat; } @@ -1915,6 +1922,12 @@ status_t OMXCodec::read( return ERROR_END_OF_STREAM; } + if (mOutputPortSettingsHaveChanged) { + mOutputPortSettingsHaveChanged = false; + + return INFO_FORMAT_CHANGED; + } + size_t index = *mFilledBuffers.begin(); mFilledBuffers.erase(mFilledBuffers.begin()); |