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

Commit 5d166509 authored by Robert Shih's avatar Robert Shih Committed by Android Git Automerger
Browse files

am 71fb0565: am 0893eaf7: Merge "httplive: timestamp reporting, track selection" into lmp-dev

* commit '71fb0565':
  httplive: timestamp reporting, track selection
parents a72b7ec4 71fb0565
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -290,7 +290,7 @@ void NuPlayer::GenericSource::onMessageReceived(const sp<AMessage> &msg) {

          int64_t timeUs, actualTimeUs;
          const bool formatChange = true;
          sp<AMessage> latestMeta = track->mPackets->getLatestMeta();
          sp<AMessage> latestMeta = track->mPackets->getLatestEnqueuedMeta();
          CHECK(latestMeta != NULL && latestMeta->findInt64("timeUs", &timeUs));
          readBuffer(trackType, timeUs, &actualTimeUs, formatChange);
          readBuffer(counterpartType, -1, NULL, formatChange);
+220 −59

File changed.

Preview size limit exceeded, changes collapsed.

+21 −3
Original line number Diff line number Diff line
@@ -125,8 +125,19 @@ private:
    struct StreamItem {
        const char *mType;
        AString mUri;
        StreamItem() : mType("") {}
        StreamItem(const char *type) : mType(type) {}
        size_t mCurDiscontinuitySeq;
        int64_t mLastDequeuedTimeUs;
        int64_t mLastSampleDurationUs;
        StreamItem()
            : mType(""),
              mCurDiscontinuitySeq(0),
              mLastDequeuedTimeUs(0),
              mLastSampleDurationUs(0) {}
        StreamItem(const char *type)
            : mType(type),
              mCurDiscontinuitySeq(0),
              mLastDequeuedTimeUs(0),
              mLastSampleDurationUs(0) {}
        AString uriKey() {
            AString key(mType);
            key.append("URI");
@@ -147,7 +158,7 @@ private:
    AString mMasterURL;

    Vector<BandwidthItem> mBandwidthItems;
    ssize_t mPrevBandwidthIndex;
    ssize_t mCurBandwidthIndex;

    sp<M3UParser> mPlaylist;

@@ -163,6 +174,7 @@ private:
    // we use this to track reconfiguration progress.
    uint32_t mSwapMask;

    KeyedVector<StreamType, sp<AnotherPacketSource> > mDiscontinuities;
    KeyedVector<StreamType, sp<AnotherPacketSource> > mPacketSources;
    // A second set of packet sources that buffer content for the variant we're switching to.
    KeyedVector<StreamType, sp<AnotherPacketSource> > mPacketSources2;
@@ -187,6 +199,12 @@ private:
    uint32_t mDisconnectReplyID;
    uint32_t mSeekReplyID;

    bool mFirstTimeUsValid;
    int64_t mFirstTimeUs;
    int64_t mLastSeekTimeUs;
    KeyedVector<size_t, int64_t> mDiscontinuityAbsStartTimesUs;
    KeyedVector<size_t, int64_t> mDiscontinuityOffsetTimesUs;

    sp<PlaylistFetcher> addFetcher(const char *uri);

    void onConnect(const sp<AMessage> &msg);
+37 −2
Original line number Diff line number Diff line
@@ -157,8 +157,8 @@ void M3UParser::MediaGroup::pickRandomMediaItems() {
}

status_t M3UParser::MediaGroup::selectTrack(size_t index, bool select) {
    if (mType != TYPE_SUBS) {
        ALOGE("only select subtitile tracks for now!");
    if (mType != TYPE_SUBS && mType != TYPE_AUDIO) {
        ALOGE("only select subtitile/audio tracks for now!");
        return INVALID_OPERATION;
    }

@@ -246,6 +246,7 @@ M3UParser::M3UParser(
      mIsVariantPlaylist(false),
      mIsComplete(false),
      mIsEvent(false),
      mDiscontinuitySeq(0),
      mSelectedIndex(-1) {
    mInitCheck = parse(data, size);
}
@@ -273,6 +274,10 @@ bool M3UParser::isEvent() const {
    return mIsEvent;
}

size_t M3UParser::getDiscontinuitySeq() const {
    return mDiscontinuitySeq;
}

sp<AMessage> M3UParser::meta() {
    return mMeta;
}
@@ -567,6 +572,12 @@ status_t M3UParser::parse(const void *_data, size_t size) {
                }
            } else if (line.startsWith("#EXT-X-MEDIA")) {
                err = parseMedia(line);
            } else if (line.startsWith("#EXT-X-DISCONTINUITY-SEQUENCE")) {
                size_t seq;
                err = parseDiscontinuitySequence(line, &seq);
                if (err == OK) {
                    mDiscontinuitySeq = seq;
                }
            }

            if (err != OK) {
@@ -1109,6 +1120,30 @@ status_t M3UParser::parseMedia(const AString &line) {
            flags);
}

// static
status_t M3UParser::parseDiscontinuitySequence(const AString &line, size_t *seq) {
    ssize_t colonPos = line.find(":");

    if (colonPos < 0) {
        return ERROR_MALFORMED;
    }

    int32_t x;
    status_t err = ParseInt32(line.c_str() + colonPos + 1, &x);
    if (err != OK) {
        return err;
    }

    if (x < 0) {
        return ERROR_MALFORMED;
    }

    if (seq) {
        *seq = x;
    }
    return OK;
}

// static
status_t M3UParser::ParseInt32(const char *s, int32_t *x) {
    char *end;
+4 −0
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@ struct M3UParser : public RefBase {
    bool isVariantPlaylist() const;
    bool isComplete() const;
    bool isEvent() const;
    size_t getDiscontinuitySeq() const;

    sp<AMessage> meta();

@@ -66,6 +67,7 @@ private:
    bool mIsVariantPlaylist;
    bool mIsComplete;
    bool mIsEvent;
    size_t mDiscontinuitySeq;

    sp<AMessage> mMeta;
    Vector<Item> mItems;
@@ -94,6 +96,8 @@ private:

    status_t parseMedia(const AString &line);

    static status_t parseDiscontinuitySequence(const AString &line, size_t *seq);

    static status_t ParseInt32(const char *s, int32_t *x);
    static status_t ParseDouble(const char *s, double *x);

Loading