Loading media/libmediaplayerservice/nuplayer/NuPlayer.cpp +25 −2 Original line number Diff line number Diff line Loading @@ -32,6 +32,8 @@ #include "ATSParser.h" #include "SoftwareRenderer.h" #include <cutils/properties.h> // for property_get #include <media/stagefright/foundation/hexdump.h> #include <media/stagefright/foundation/ABuffer.h> Loading Loading @@ -146,6 +148,7 @@ NuPlayer::NuPlayer() : mUIDValid(false), mSourceFlags(0), mVideoIsAVC(false), mNeedsSwRenderer(false), mAudioEOS(false), mVideoEOS(false), mScanSourcesPending(false), Loading Loading @@ -444,6 +447,7 @@ void NuPlayer::onMessageReceived(const sp<AMessage> &msg) { ALOGV("kWhatStart"); mVideoIsAVC = false; mNeedsSwRenderer = false; mAudioEOS = false; mVideoEOS = false; mSkipRenderingAudioUntilMediaTimeUs = -1; Loading Loading @@ -680,6 +684,20 @@ void NuPlayer::onMessageReceived(const sp<AMessage> &msg) { notifyListener( MEDIA_SET_VIDEO_SIZE, displayWidth, displayHeight); if (mNeedsSwRenderer && mNativeWindow != NULL) { int32_t colorFormat; CHECK(codecRequest->findInt32("color-format", &colorFormat)); sp<MetaData> meta = new MetaData; meta->setInt32(kKeyWidth, width); meta->setInt32(kKeyHeight, height); meta->setRect(kKeyCropRect, cropLeft, cropTop, cropRight, cropBottom); meta->setInt32(kKeyColorFormat, colorFormat); mRenderer->setSoftRenderer( new SoftwareRenderer(mNativeWindow->getNativeWindow(), meta)); } } } else if (what == ACodec::kWhatShutdownCompleted) { ALOGV("%s shutdown completed", audio ? "audio" : "video"); Loading @@ -703,8 +721,13 @@ void NuPlayer::onMessageReceived(const sp<AMessage> &msg) { mRenderer->queueEOS(audio, UNKNOWN_ERROR); } else if (what == ACodec::kWhatDrainThisBuffer) { renderBuffer(audio, codecRequest); } else if (what != ACodec::kWhatComponentAllocated && what != ACodec::kWhatComponentConfigured } else if (what == ACodec::kWhatComponentAllocated) { if (!audio) { AString name; CHECK(codecRequest->findString("componentName", &name)); mNeedsSwRenderer = name.startsWith("OMX.google."); } } else if (what != ACodec::kWhatComponentConfigured && what != ACodec::kWhatBuffersAllocated) { ALOGV("Unhandled codec notification %d '%c%c%c%c'.", what, Loading media/libmediaplayerservice/nuplayer/NuPlayer.h +1 −0 Original line number Diff line number Diff line Loading @@ -116,6 +116,7 @@ private: sp<MediaPlayerBase::AudioSink> mAudioSink; sp<Decoder> mVideoDecoder; bool mVideoIsAVC; bool mNeedsSwRenderer; sp<Decoder> mAudioDecoder; sp<Renderer> mRenderer; Loading media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp +12 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,8 @@ #include "NuPlayerRenderer.h" #include "SoftwareRenderer.h" #include <media/stagefright/foundation/ABuffer.h> #include <media/stagefright/foundation/ADebug.h> #include <media/stagefright/foundation/AMessage.h> Loading @@ -34,6 +36,7 @@ NuPlayer::Renderer::Renderer( const sp<AMessage> ¬ify, uint32_t flags) : mAudioSink(sink), mSoftRenderer(NULL), mNotify(notify), mFlags(flags), mNumFramesWritten(0), Loading @@ -57,6 +60,12 @@ NuPlayer::Renderer::Renderer( } NuPlayer::Renderer::~Renderer() { delete mSoftRenderer; } void NuPlayer::Renderer::setSoftRenderer(SoftwareRenderer *softRenderer) { delete mSoftRenderer; mSoftRenderer = softRenderer; } void NuPlayer::Renderer::queueBuffer( Loading Loading @@ -414,6 +423,9 @@ void NuPlayer::Renderer::onDrainVideoQueue() { mVideoLateByUs, mVideoLateByUs / 1E6); } else { ALOGV("rendering video at media time %.2f secs", mediaTimeUs / 1E6); if (mSoftRenderer != NULL) { mSoftRenderer->render(entry->mBuffer->data(), entry->mBuffer->size(), NULL); } } entry->mNotifyConsumed->setInt32("render", !tooLate); Loading media/libmediaplayerservice/nuplayer/NuPlayerRenderer.h +4 −0 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ namespace android { struct ABuffer; class SoftwareRenderer; struct NuPlayer::Renderer : public AHandler { enum Flags { Loading Loading @@ -56,6 +57,8 @@ struct NuPlayer::Renderer : public AHandler { kWhatMediaRenderingStart = 'mdrd', }; void setSoftRenderer(SoftwareRenderer *softRenderer); protected: virtual ~Renderer(); Loading Loading @@ -83,6 +86,7 @@ private: static const int64_t kMinPositionUpdateDelayUs; sp<MediaPlayerBase::AudioSink> mAudioSink; SoftwareRenderer *mSoftRenderer; sp<AMessage> mNotify; uint32_t mFlags; List<QueueEntry> mAudioQueue; Loading Loading
media/libmediaplayerservice/nuplayer/NuPlayer.cpp +25 −2 Original line number Diff line number Diff line Loading @@ -32,6 +32,8 @@ #include "ATSParser.h" #include "SoftwareRenderer.h" #include <cutils/properties.h> // for property_get #include <media/stagefright/foundation/hexdump.h> #include <media/stagefright/foundation/ABuffer.h> Loading Loading @@ -146,6 +148,7 @@ NuPlayer::NuPlayer() : mUIDValid(false), mSourceFlags(0), mVideoIsAVC(false), mNeedsSwRenderer(false), mAudioEOS(false), mVideoEOS(false), mScanSourcesPending(false), Loading Loading @@ -444,6 +447,7 @@ void NuPlayer::onMessageReceived(const sp<AMessage> &msg) { ALOGV("kWhatStart"); mVideoIsAVC = false; mNeedsSwRenderer = false; mAudioEOS = false; mVideoEOS = false; mSkipRenderingAudioUntilMediaTimeUs = -1; Loading Loading @@ -680,6 +684,20 @@ void NuPlayer::onMessageReceived(const sp<AMessage> &msg) { notifyListener( MEDIA_SET_VIDEO_SIZE, displayWidth, displayHeight); if (mNeedsSwRenderer && mNativeWindow != NULL) { int32_t colorFormat; CHECK(codecRequest->findInt32("color-format", &colorFormat)); sp<MetaData> meta = new MetaData; meta->setInt32(kKeyWidth, width); meta->setInt32(kKeyHeight, height); meta->setRect(kKeyCropRect, cropLeft, cropTop, cropRight, cropBottom); meta->setInt32(kKeyColorFormat, colorFormat); mRenderer->setSoftRenderer( new SoftwareRenderer(mNativeWindow->getNativeWindow(), meta)); } } } else if (what == ACodec::kWhatShutdownCompleted) { ALOGV("%s shutdown completed", audio ? "audio" : "video"); Loading @@ -703,8 +721,13 @@ void NuPlayer::onMessageReceived(const sp<AMessage> &msg) { mRenderer->queueEOS(audio, UNKNOWN_ERROR); } else if (what == ACodec::kWhatDrainThisBuffer) { renderBuffer(audio, codecRequest); } else if (what != ACodec::kWhatComponentAllocated && what != ACodec::kWhatComponentConfigured } else if (what == ACodec::kWhatComponentAllocated) { if (!audio) { AString name; CHECK(codecRequest->findString("componentName", &name)); mNeedsSwRenderer = name.startsWith("OMX.google."); } } else if (what != ACodec::kWhatComponentConfigured && what != ACodec::kWhatBuffersAllocated) { ALOGV("Unhandled codec notification %d '%c%c%c%c'.", what, Loading
media/libmediaplayerservice/nuplayer/NuPlayer.h +1 −0 Original line number Diff line number Diff line Loading @@ -116,6 +116,7 @@ private: sp<MediaPlayerBase::AudioSink> mAudioSink; sp<Decoder> mVideoDecoder; bool mVideoIsAVC; bool mNeedsSwRenderer; sp<Decoder> mAudioDecoder; sp<Renderer> mRenderer; Loading
media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp +12 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,8 @@ #include "NuPlayerRenderer.h" #include "SoftwareRenderer.h" #include <media/stagefright/foundation/ABuffer.h> #include <media/stagefright/foundation/ADebug.h> #include <media/stagefright/foundation/AMessage.h> Loading @@ -34,6 +36,7 @@ NuPlayer::Renderer::Renderer( const sp<AMessage> ¬ify, uint32_t flags) : mAudioSink(sink), mSoftRenderer(NULL), mNotify(notify), mFlags(flags), mNumFramesWritten(0), Loading @@ -57,6 +60,12 @@ NuPlayer::Renderer::Renderer( } NuPlayer::Renderer::~Renderer() { delete mSoftRenderer; } void NuPlayer::Renderer::setSoftRenderer(SoftwareRenderer *softRenderer) { delete mSoftRenderer; mSoftRenderer = softRenderer; } void NuPlayer::Renderer::queueBuffer( Loading Loading @@ -414,6 +423,9 @@ void NuPlayer::Renderer::onDrainVideoQueue() { mVideoLateByUs, mVideoLateByUs / 1E6); } else { ALOGV("rendering video at media time %.2f secs", mediaTimeUs / 1E6); if (mSoftRenderer != NULL) { mSoftRenderer->render(entry->mBuffer->data(), entry->mBuffer->size(), NULL); } } entry->mNotifyConsumed->setInt32("render", !tooLate); Loading
media/libmediaplayerservice/nuplayer/NuPlayerRenderer.h +4 −0 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ namespace android { struct ABuffer; class SoftwareRenderer; struct NuPlayer::Renderer : public AHandler { enum Flags { Loading Loading @@ -56,6 +57,8 @@ struct NuPlayer::Renderer : public AHandler { kWhatMediaRenderingStart = 'mdrd', }; void setSoftRenderer(SoftwareRenderer *softRenderer); protected: virtual ~Renderer(); Loading Loading @@ -83,6 +86,7 @@ private: static const int64_t kMinPositionUpdateDelayUs; sp<MediaPlayerBase::AudioSink> mAudioSink; SoftwareRenderer *mSoftRenderer; sp<AMessage> mNotify; uint32_t mFlags; List<QueueEntry> mAudioQueue; Loading