summaryrefslogtreecommitdiffstats
path: root/media/libstagefright/OMXCodec.cpp
diff options
context:
space:
mode:
authorAndreas Huber <andih@google.com>2009-10-09 14:11:28 -0700
committerAndreas Huber <andih@google.com>2009-10-13 09:46:46 -0700
commit7f281f87670c63775ea1ae8b24af31822d5ad416 (patch)
treec04964f9bc176627df0eec3688b00bc17479bc06 /media/libstagefright/OMXCodec.cpp
parent0bf3921522461b1c7d321d0c667c1020ab3110bc (diff)
downloadframeworks_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.cpp13
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());