Loading include/media/IStreamSource.h +3 −0 Original line number Diff line number Diff line Loading @@ -37,6 +37,9 @@ struct IStreamSource : public IInterface { enum { // Video PES packets contain exactly one (aligned) access unit. kFlagAlignedVideoData = 1, // Timestamps are in ALooper::GetNowUs() units. kFlagIsRealTimeData = 2, }; virtual uint32_t flags() const { return 0; } }; Loading media/libmediaplayerservice/nuplayer/NuPlayer.cpp +8 −1 Original line number Diff line number Diff line Loading @@ -381,9 +381,16 @@ void NuPlayer::onMessageReceived(const sp<AMessage> &msg) { mSource->start(); uint32_t flags = 0; if (mSource->isRealTime()) { flags |= Renderer::FLAG_REAL_TIME; } mRenderer = new Renderer( mAudioSink, new AMessage(kWhatRendererNotify, id())); new AMessage(kWhatRendererNotify, id()), flags); looper()->registerHandler(mRenderer); Loading media/libmediaplayerservice/nuplayer/NuPlayerDriver.cpp +1 −0 Original line number Diff line number Diff line Loading @@ -378,6 +378,7 @@ status_t NuPlayerDriver::invoke(const Parcel &request, Parcel *reply) { int mode = request.readInt32(); return mPlayer->setVideoScalingMode(mode); } default: { return INVALID_OPERATION; Loading media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp +17 −5 Original line number Diff line number Diff line Loading @@ -31,9 +31,11 @@ const int64_t NuPlayer::Renderer::kMinPositionUpdateDelayUs = 100000ll; NuPlayer::Renderer::Renderer( const sp<MediaPlayerBase::AudioSink> &sink, const sp<AMessage> ¬ify) const sp<AMessage> ¬ify, uint32_t flags) : mAudioSink(sink), mNotify(notify), mFlags(flags), mNumFramesWritten(0), mDrainAudioQueuePending(false), mDrainVideoQueuePending(false), Loading Loading @@ -323,6 +325,11 @@ void NuPlayer::Renderer::postDrainVideoQueue() { if (entry.mBuffer == NULL) { // EOS doesn't carry a timestamp. delayUs = 0; } else if (mFlags & FLAG_REAL_TIME) { int64_t mediaTimeUs; CHECK(entry.mBuffer->meta()->findInt64("timeUs", &mediaTimeUs)); delayUs = mediaTimeUs - ALooper::GetNowUs(); } else { int64_t mediaTimeUs; CHECK(entry.mBuffer->meta()->findInt64("timeUs", &mediaTimeUs)); Loading Loading @@ -368,12 +375,17 @@ void NuPlayer::Renderer::onDrainVideoQueue() { return; } int64_t realTimeUs; if (mFlags & FLAG_REAL_TIME) { CHECK(entry->mBuffer->meta()->findInt64("timeUs", &realTimeUs)); } else { int64_t mediaTimeUs; CHECK(entry->mBuffer->meta()->findInt64("timeUs", &mediaTimeUs)); int64_t realTimeUs = mediaTimeUs - mAnchorTimeMediaUs + mAnchorTimeRealUs; mVideoLateByUs = ALooper::GetNowUs() - realTimeUs; realTimeUs = mediaTimeUs - mAnchorTimeMediaUs + mAnchorTimeRealUs; } mVideoLateByUs = ALooper::GetNowUs() - realTimeUs; bool tooLate = (mVideoLateByUs > 40000); if (tooLate) { Loading media/libmediaplayerservice/nuplayer/NuPlayerRenderer.h +6 −1 Original line number Diff line number Diff line Loading @@ -25,8 +25,12 @@ namespace android { struct ABuffer; struct NuPlayer::Renderer : public AHandler { enum Flags { FLAG_REAL_TIME = 1, }; Renderer(const sp<MediaPlayerBase::AudioSink> &sink, const sp<AMessage> ¬ify); const sp<AMessage> ¬ify, uint32_t flags = 0); void queueBuffer( bool audio, Loading Loading @@ -79,6 +83,7 @@ private: sp<MediaPlayerBase::AudioSink> mAudioSink; sp<AMessage> mNotify; uint32_t mFlags; List<QueueEntry> mAudioQueue; List<QueueEntry> mVideoQueue; uint32_t mNumFramesWritten; Loading Loading
include/media/IStreamSource.h +3 −0 Original line number Diff line number Diff line Loading @@ -37,6 +37,9 @@ struct IStreamSource : public IInterface { enum { // Video PES packets contain exactly one (aligned) access unit. kFlagAlignedVideoData = 1, // Timestamps are in ALooper::GetNowUs() units. kFlagIsRealTimeData = 2, }; virtual uint32_t flags() const { return 0; } }; Loading
media/libmediaplayerservice/nuplayer/NuPlayer.cpp +8 −1 Original line number Diff line number Diff line Loading @@ -381,9 +381,16 @@ void NuPlayer::onMessageReceived(const sp<AMessage> &msg) { mSource->start(); uint32_t flags = 0; if (mSource->isRealTime()) { flags |= Renderer::FLAG_REAL_TIME; } mRenderer = new Renderer( mAudioSink, new AMessage(kWhatRendererNotify, id())); new AMessage(kWhatRendererNotify, id()), flags); looper()->registerHandler(mRenderer); Loading
media/libmediaplayerservice/nuplayer/NuPlayerDriver.cpp +1 −0 Original line number Diff line number Diff line Loading @@ -378,6 +378,7 @@ status_t NuPlayerDriver::invoke(const Parcel &request, Parcel *reply) { int mode = request.readInt32(); return mPlayer->setVideoScalingMode(mode); } default: { return INVALID_OPERATION; Loading
media/libmediaplayerservice/nuplayer/NuPlayerRenderer.cpp +17 −5 Original line number Diff line number Diff line Loading @@ -31,9 +31,11 @@ const int64_t NuPlayer::Renderer::kMinPositionUpdateDelayUs = 100000ll; NuPlayer::Renderer::Renderer( const sp<MediaPlayerBase::AudioSink> &sink, const sp<AMessage> ¬ify) const sp<AMessage> ¬ify, uint32_t flags) : mAudioSink(sink), mNotify(notify), mFlags(flags), mNumFramesWritten(0), mDrainAudioQueuePending(false), mDrainVideoQueuePending(false), Loading Loading @@ -323,6 +325,11 @@ void NuPlayer::Renderer::postDrainVideoQueue() { if (entry.mBuffer == NULL) { // EOS doesn't carry a timestamp. delayUs = 0; } else if (mFlags & FLAG_REAL_TIME) { int64_t mediaTimeUs; CHECK(entry.mBuffer->meta()->findInt64("timeUs", &mediaTimeUs)); delayUs = mediaTimeUs - ALooper::GetNowUs(); } else { int64_t mediaTimeUs; CHECK(entry.mBuffer->meta()->findInt64("timeUs", &mediaTimeUs)); Loading Loading @@ -368,12 +375,17 @@ void NuPlayer::Renderer::onDrainVideoQueue() { return; } int64_t realTimeUs; if (mFlags & FLAG_REAL_TIME) { CHECK(entry->mBuffer->meta()->findInt64("timeUs", &realTimeUs)); } else { int64_t mediaTimeUs; CHECK(entry->mBuffer->meta()->findInt64("timeUs", &mediaTimeUs)); int64_t realTimeUs = mediaTimeUs - mAnchorTimeMediaUs + mAnchorTimeRealUs; mVideoLateByUs = ALooper::GetNowUs() - realTimeUs; realTimeUs = mediaTimeUs - mAnchorTimeMediaUs + mAnchorTimeRealUs; } mVideoLateByUs = ALooper::GetNowUs() - realTimeUs; bool tooLate = (mVideoLateByUs > 40000); if (tooLate) { Loading
media/libmediaplayerservice/nuplayer/NuPlayerRenderer.h +6 −1 Original line number Diff line number Diff line Loading @@ -25,8 +25,12 @@ namespace android { struct ABuffer; struct NuPlayer::Renderer : public AHandler { enum Flags { FLAG_REAL_TIME = 1, }; Renderer(const sp<MediaPlayerBase::AudioSink> &sink, const sp<AMessage> ¬ify); const sp<AMessage> ¬ify, uint32_t flags = 0); void queueBuffer( bool audio, Loading Loading @@ -79,6 +83,7 @@ private: sp<MediaPlayerBase::AudioSink> mAudioSink; sp<AMessage> mNotify; uint32_t mFlags; List<QueueEntry> mAudioQueue; List<QueueEntry> mVideoQueue; uint32_t mNumFramesWritten; Loading