diff options
author | Andreas Huber <andih@google.com> | 2011-09-15 12:25:04 -0700 |
---|---|---|
committer | Andreas Huber <andih@google.com> | 2011-09-16 10:44:02 -0700 |
commit | 078cfcf7cce9185ec7559910d08b0bc02bfc88a3 (patch) | |
tree | d4fb458318a3f0b3982b05e0c79a2cfc447dd732 /media/libstagefright | |
parent | 5dc2812abddde309234edc786a541d251c4f820a (diff) | |
download | frameworks_av-078cfcf7cce9185ec7559910d08b0bc02bfc88a3.zip frameworks_av-078cfcf7cce9185ec7559910d08b0bc02bfc88a3.tar.gz frameworks_av-078cfcf7cce9185ec7559910d08b0bc02bfc88a3.tar.bz2 |
Various improvements to nuplayer playback
- Drastically cut down the number of times we supply the AudioSink with data
by estimating the time until the sink would run out of data and then scheduling
a refill in advance of that.
- Use a dedicated looper for video decoders since they are currently taking
too long to return from OMX_FillThisBuffer (bug 5325201)
- Revise thread priorities for the OMX dispatcher and software codecs, instead
of running them at ANDROID_PRIORITY_AUDIO, they now only run at
ANDROID_PRIORITY_FOREGROUND
- Since threads created by pthread_create inherit all of the parent threads
attributes including thread priority, briefly reset thread priority to
ANDROID_PRIORITY_FOREGROUND before instantiating OMX components and then
restore it.
Change-Id: If9332a3a20dad5485333d68c11de0d2d5d3fffc3
Diffstat (limited to 'media/libstagefright')
-rw-r--r-- | media/libstagefright/ACodec.cpp | 19 | ||||
-rw-r--r-- | media/libstagefright/chromium_http/support.cpp | 22 | ||||
-rw-r--r-- | media/libstagefright/foundation/AMessage.cpp | 9 | ||||
-rw-r--r-- | media/libstagefright/omx/OMX.cpp | 2 | ||||
-rw-r--r-- | media/libstagefright/omx/SimpleSoftOMXComponent.cpp | 2 |
5 files changed, 47 insertions, 7 deletions
diff --git a/media/libstagefright/ACodec.cpp b/media/libstagefright/ACodec.cpp index 2ba2273..a2d9e59 100644 --- a/media/libstagefright/ACodec.cpp +++ b/media/libstagefright/ACodec.cpp @@ -1377,8 +1377,13 @@ void ACodec::BaseState::onInputBufferFilled(const sp<AMessage> &msg) { memcpy(info->mData->data(), buffer->data(), buffer->size()); } - LOGV("[%s] calling emptyBuffer %p", - mCodec->mComponentName.c_str(), bufferID); + if (flags & OMX_BUFFERFLAG_CODECCONFIG) { + LOGV("[%s] calling emptyBuffer %p w/ codec specific data", + mCodec->mComponentName.c_str(), bufferID); + } else { + LOGV("[%s] calling emptyBuffer %p w/ time %lld us", + mCodec->mComponentName.c_str(), bufferID, timeUs); + } CHECK_EQ(mCodec->mOMX->emptyBuffer( mCodec->mNode, @@ -1396,7 +1401,7 @@ void ACodec::BaseState::onInputBufferFilled(const sp<AMessage> &msg) { LOGV("[%s] Signalling EOS on the input port", mCodec->mComponentName.c_str()); - LOGV("[%s] calling emptyBuffer %p", + LOGV("[%s] calling emptyBuffer %p signalling EOS", mCodec->mComponentName.c_str(), bufferID); CHECK_EQ(mCodec->mOMX->emptyBuffer( @@ -1457,8 +1462,8 @@ bool ACodec::BaseState::onOMXFillBufferDone( int64_t timeUs, void *platformPrivate, void *dataPtr) { - LOGV("[%s] onOMXFillBufferDone %p", - mCodec->mComponentName.c_str(), bufferID); + LOGV("[%s] onOMXFillBufferDone %p time %lld us", + mCodec->mComponentName.c_str(), bufferID, timeUs); ssize_t index; BufferInfo *info = @@ -1686,7 +1691,11 @@ void ACodec::UninitializedState::onSetup( ++matchIndex) { componentName = matchingCodecs.itemAt(matchIndex).string(); + pid_t tid = androidGetTid(); + int prevPriority = androidGetThreadPriority(tid); + androidSetThreadPriority(tid, ANDROID_PRIORITY_FOREGROUND); status_t err = omx->allocateNode(componentName.c_str(), observer, &node); + androidSetThreadPriority(tid, prevPriority); if (err == OK) { break; diff --git a/media/libstagefright/chromium_http/support.cpp b/media/libstagefright/chromium_http/support.cpp index de936c4..f15014e 100644 --- a/media/libstagefright/chromium_http/support.cpp +++ b/media/libstagefright/chromium_http/support.cpp @@ -74,10 +74,32 @@ bool logMessageHandler( return false; } +struct AutoPrioritySaver { + AutoPrioritySaver() + : mTID(androidGetTid()), + mPrevPriority(androidGetThreadPriority(mTID)) { + androidSetThreadPriority(mTID, ANDROID_PRIORITY_NORMAL); + } + + ~AutoPrioritySaver() { + androidSetThreadPriority(mTID, mPrevPriority); + } + +private: + pid_t mTID; + int mPrevPriority; + + DISALLOW_EVIL_CONSTRUCTORS(AutoPrioritySaver); +}; static void InitializeNetworkThreadIfNecessary() { Mutex::Autolock autoLock(gNetworkThreadLock); + if (gNetworkThread == NULL) { + // Make sure any threads spawned by the chromium framework are + // running at normal priority instead of inheriting this thread's. + AutoPrioritySaver saver; + gNetworkThread = new base::Thread("network"); base::Thread::Options options; options.message_loop_type = MessageLoop::TYPE_IO; diff --git a/media/libstagefright/foundation/AMessage.cpp b/media/libstagefright/foundation/AMessage.cpp index 582bdba..f039bc1 100644 --- a/media/libstagefright/foundation/AMessage.cpp +++ b/media/libstagefright/foundation/AMessage.cpp @@ -385,6 +385,15 @@ AString AMessage::debugString(int32_t indent) const { item.u.refValue)->debugString( indent + strlen(item.mName) + 14).c_str()); break; + case kTypeRect: + tmp = StringPrintf( + "Rect %s(%d, %d, %d, %d)", + item.mName, + item.u.rectValue.mLeft, + item.u.rectValue.mTop, + item.u.rectValue.mRight, + item.u.rectValue.mBottom); + break; default: TRESPASS(); } diff --git a/media/libstagefright/omx/OMX.cpp b/media/libstagefright/omx/OMX.cpp index bc24dbb..33d3f30 100644 --- a/media/libstagefright/omx/OMX.cpp +++ b/media/libstagefright/omx/OMX.cpp @@ -85,7 +85,7 @@ OMX::CallbackDispatcher::CallbackDispatcher(OMXNodeInstance *owner) : mOwner(owner), mDone(false) { mThread = new CallbackDispatcherThread(this); - mThread->run("OMXCallbackDisp", ANDROID_PRIORITY_AUDIO); + mThread->run("OMXCallbackDisp", ANDROID_PRIORITY_FOREGROUND); } OMX::CallbackDispatcher::~CallbackDispatcher() { diff --git a/media/libstagefright/omx/SimpleSoftOMXComponent.cpp b/media/libstagefright/omx/SimpleSoftOMXComponent.cpp index f7330f3..b705d00 100644 --- a/media/libstagefright/omx/SimpleSoftOMXComponent.cpp +++ b/media/libstagefright/omx/SimpleSoftOMXComponent.cpp @@ -42,7 +42,7 @@ SimpleSoftOMXComponent::SimpleSoftOMXComponent( mLooper->start( false, // runOnCallingThread false, // canCallJava - PRIORITY_AUDIO); + ANDROID_PRIORITY_FOREGROUND); } void SimpleSoftOMXComponent::prepareForDestruction() { |