Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d5e56231 authored by Andreas Huber's avatar Andreas Huber
Browse files

Squashed commit of the following:

commit f4edf442741886cdbe071e2d15f6e6247269f7c5
Author: Andreas Huber <andih@google.com>
Date:   Tue Mar 12 09:09:18 2013 -0700

    Pass additional flags to the sink, use TCP by default in wolfiecast mode.

    Change-Id: I41e11a2375d4199656e45c4f149d8441d0016092

commit 6302602ed280a38287f507159abfb40a1da38c5a
Author: Andreas Huber <andih@google.com>
Date:   Tue Mar 12 08:51:58 2013 -0700

    tweaks

    Change-Id: Ie29e422d7258be522f4bb1f6c5afcf74c937e547

commit a38a860e4979ba563cadbaafa21b084439449d26
Author: Andreas Huber <andih@google.com>
Date:   Mon Mar 11 16:57:43 2013 -0700

    Report average lateness all the way from NuPlayerRenderer...

    Change-Id: I2e7700703ae656515e44b9c25610d26c75778111

commit a7d49b11675ea88be4029dd8451d1649db94571d
Author: Andreas Huber <andih@google.com>
Date:   Mon Mar 11 14:54:19 2013 -0700

    Make TimeSyncer smarter, enable TunnelRenderer

    Change-Id: I27377a60cd8feb01589da456967fddd34532c20e

commit 0f214c8ef68179f7b61512c37040939554013151
Author: Andreas Huber <andih@google.com>
Date:   Thu Mar 7 15:57:56 2013 -0800

    convert source timestamps to sink timestamps, report lateness.

    Change-Id: I051a60fbbceca2f7b508ae3dac6e01e402bae39e

commit 04a4f8e16bad09157b5615a5fa45310438955832
Author: Andreas Huber <andih@google.com>
Date:   Thu Mar 7 09:00:28 2013 -0800

    Sync time between sink and source.

    Change-Id: Ie8b4d75c957aa48310e7c81d1279761b9f821efe

commit aebe20e6184e3636a99082f8ece08e708015cb8d
Author: Andreas Huber <andih@google.com>
Date:   Wed Mar 6 09:03:12 2013 -0800

    play with back pressure

    Change-Id: I51eb69257e6a79e76f5f9c75ff99d8adbd083947

Change-Id: Ifdf57228667fed7fc71c5090a2c3f7cea1037c5c
parent e6800cea
Loading
Loading
Loading
Loading
+3 −0
Original line number Original line Diff line number Diff line
@@ -37,6 +37,9 @@ struct IStreamSource : public IInterface {
    enum {
    enum {
        // Video PES packets contain exactly one (aligned) access unit.
        // Video PES packets contain exactly one (aligned) access unit.
        kFlagAlignedVideoData = 1,
        kFlagAlignedVideoData = 1,

        // Timestamps are in ALooper::GetNowUs() units.
        kFlagIsRealTimeData   = 2,
    };
    };
    virtual uint32_t flags() const { return 0; }
    virtual uint32_t flags() const { return 0; }
};
};
+8 −1
Original line number Original line Diff line number Diff line
@@ -381,9 +381,16 @@ void NuPlayer::onMessageReceived(const sp<AMessage> &msg) {


            mSource->start();
            mSource->start();


            uint32_t flags = 0;

            if (mSource->isRealTime()) {
                flags |= Renderer::FLAG_REAL_TIME;
            }

            mRenderer = new Renderer(
            mRenderer = new Renderer(
                    mAudioSink,
                    mAudioSink,
                    new AMessage(kWhatRendererNotify, id()));
                    new AMessage(kWhatRendererNotify, id()),
                    flags);


            looper()->registerHandler(mRenderer);
            looper()->registerHandler(mRenderer);


+1 −0
Original line number Original line Diff line number Diff line
@@ -378,6 +378,7 @@ status_t NuPlayerDriver::invoke(const Parcel &request, Parcel *reply) {
            int mode = request.readInt32();
            int mode = request.readInt32();
            return mPlayer->setVideoScalingMode(mode);
            return mPlayer->setVideoScalingMode(mode);
        }
        }

        default:
        default:
        {
        {
            return INVALID_OPERATION;
            return INVALID_OPERATION;
+17 −5
Original line number Original line Diff line number Diff line
@@ -31,9 +31,11 @@ const int64_t NuPlayer::Renderer::kMinPositionUpdateDelayUs = 100000ll;


NuPlayer::Renderer::Renderer(
NuPlayer::Renderer::Renderer(
        const sp<MediaPlayerBase::AudioSink> &sink,
        const sp<MediaPlayerBase::AudioSink> &sink,
        const sp<AMessage> &notify)
        const sp<AMessage> &notify,
        uint32_t flags)
    : mAudioSink(sink),
    : mAudioSink(sink),
      mNotify(notify),
      mNotify(notify),
      mFlags(flags),
      mNumFramesWritten(0),
      mNumFramesWritten(0),
      mDrainAudioQueuePending(false),
      mDrainAudioQueuePending(false),
      mDrainVideoQueuePending(false),
      mDrainVideoQueuePending(false),
@@ -323,6 +325,11 @@ void NuPlayer::Renderer::postDrainVideoQueue() {
    if (entry.mBuffer == NULL) {
    if (entry.mBuffer == NULL) {
        // EOS doesn't carry a timestamp.
        // EOS doesn't carry a timestamp.
        delayUs = 0;
        delayUs = 0;
    } else if (mFlags & FLAG_REAL_TIME) {
        int64_t mediaTimeUs;
        CHECK(entry.mBuffer->meta()->findInt64("timeUs", &mediaTimeUs));

        delayUs = mediaTimeUs - ALooper::GetNowUs();
    } else {
    } else {
        int64_t mediaTimeUs;
        int64_t mediaTimeUs;
        CHECK(entry.mBuffer->meta()->findInt64("timeUs", &mediaTimeUs));
        CHECK(entry.mBuffer->meta()->findInt64("timeUs", &mediaTimeUs));
@@ -368,12 +375,17 @@ void NuPlayer::Renderer::onDrainVideoQueue() {
        return;
        return;
    }
    }


    int64_t realTimeUs;
    if (mFlags & FLAG_REAL_TIME) {
        CHECK(entry->mBuffer->meta()->findInt64("timeUs", &realTimeUs));
    } else {
        int64_t mediaTimeUs;
        int64_t mediaTimeUs;
        CHECK(entry->mBuffer->meta()->findInt64("timeUs", &mediaTimeUs));
        CHECK(entry->mBuffer->meta()->findInt64("timeUs", &mediaTimeUs));


    int64_t realTimeUs = mediaTimeUs - mAnchorTimeMediaUs + mAnchorTimeRealUs;
        realTimeUs = mediaTimeUs - mAnchorTimeMediaUs + mAnchorTimeRealUs;
    mVideoLateByUs = ALooper::GetNowUs() - realTimeUs;
    }


    mVideoLateByUs = ALooper::GetNowUs() - realTimeUs;
    bool tooLate = (mVideoLateByUs > 40000);
    bool tooLate = (mVideoLateByUs > 40000);


    if (tooLate) {
    if (tooLate) {
+6 −1
Original line number Original line Diff line number Diff line
@@ -25,8 +25,12 @@ namespace android {
struct ABuffer;
struct ABuffer;


struct NuPlayer::Renderer : public AHandler {
struct NuPlayer::Renderer : public AHandler {
    enum Flags {
        FLAG_REAL_TIME = 1,
    };
    Renderer(const sp<MediaPlayerBase::AudioSink> &sink,
    Renderer(const sp<MediaPlayerBase::AudioSink> &sink,
             const sp<AMessage> &notify);
             const sp<AMessage> &notify,
             uint32_t flags = 0);


    void queueBuffer(
    void queueBuffer(
            bool audio,
            bool audio,
@@ -79,6 +83,7 @@ private:


    sp<MediaPlayerBase::AudioSink> mAudioSink;
    sp<MediaPlayerBase::AudioSink> mAudioSink;
    sp<AMessage> mNotify;
    sp<AMessage> mNotify;
    uint32_t mFlags;
    List<QueueEntry> mAudioQueue;
    List<QueueEntry> mAudioQueue;
    List<QueueEntry> mVideoQueue;
    List<QueueEntry> mVideoQueue;
    uint32_t mNumFramesWritten;
    uint32_t mNumFramesWritten;
Loading