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

Commit 7e50e1c0 authored by Robert Shih's avatar Robert Shih Committed by Lajos Molnar
Browse files

AnotherPacketSource support to get latest buffered MetaData.

Bug: 11854054
Change-Id: Ib3b6e0984036082bf3c4eb7901a2b29be52fdd29
parent 933a4d33
Loading
Loading
Loading
Loading
+22 −2
Original line number Original line Diff line number Diff line
@@ -34,7 +34,8 @@ AnotherPacketSource::AnotherPacketSource(const sp<MetaData> &meta)
    : mIsAudio(false),
    : mIsAudio(false),
      mFormat(NULL),
      mFormat(NULL),
      mLastQueuedTimeUs(0),
      mLastQueuedTimeUs(0),
      mEOSResult(OK) {
      mEOSResult(OK),
      mLatestEnqueuedMeta(NULL) {
    setFormat(meta);
    setFormat(meta);
}
}


@@ -182,12 +183,24 @@ void AnotherPacketSource::queueAccessUnit(const sp<ABuffer> &buffer) {
        return;
        return;
    }
    }


    CHECK(buffer->meta()->findInt64("timeUs", &mLastQueuedTimeUs));
    int64_t lastQueuedTimeUs;
    CHECK(buffer->meta()->findInt64("timeUs", &lastQueuedTimeUs));
    mLastQueuedTimeUs = lastQueuedTimeUs;
    ALOGV("queueAccessUnit timeUs=%lld us (%.2f secs)", mLastQueuedTimeUs, mLastQueuedTimeUs / 1E6);
    ALOGV("queueAccessUnit timeUs=%lld us (%.2f secs)", mLastQueuedTimeUs, mLastQueuedTimeUs / 1E6);


    Mutex::Autolock autoLock(mLock);
    Mutex::Autolock autoLock(mLock);
    mBuffers.push_back(buffer);
    mBuffers.push_back(buffer);
    mCondition.signal();
    mCondition.signal();

    if (!mLatestEnqueuedMeta.get()) {
        mLatestEnqueuedMeta = buffer->meta();
    } else {
        int64_t latestTimeUs = 0;
        CHECK(mLatestEnqueuedMeta->findInt64("timeUs", &latestTimeUs));
        if (lastQueuedTimeUs > latestTimeUs) {
            mLatestEnqueuedMeta = buffer->meta();
        }
    }
}
}


void AnotherPacketSource::clear() {
void AnotherPacketSource::clear() {
@@ -197,6 +210,7 @@ void AnotherPacketSource::clear() {
    mEOSResult = OK;
    mEOSResult = OK;


    mFormat = NULL;
    mFormat = NULL;
    mLatestEnqueuedMeta = NULL;
}
}


void AnotherPacketSource::queueDiscontinuity(
void AnotherPacketSource::queueDiscontinuity(
@@ -221,6 +235,7 @@ void AnotherPacketSource::queueDiscontinuity(


    mEOSResult = OK;
    mEOSResult = OK;
    mLastQueuedTimeUs = 0;
    mLastQueuedTimeUs = 0;
    mLatestEnqueuedMeta = NULL;


    sp<ABuffer> buffer = new ABuffer(0);
    sp<ABuffer> buffer = new ABuffer(0);
    buffer->meta()->setInt32("discontinuity", static_cast<int32_t>(type));
    buffer->meta()->setInt32("discontinuity", static_cast<int32_t>(type));
@@ -308,4 +323,9 @@ bool AnotherPacketSource::isFinished(int64_t duration) const {
    return (mEOSResult != OK);
    return (mEOSResult != OK);
}
}


sp<AMessage> AnotherPacketSource::getLatestMeta() {
    Mutex::Autolock autoLock(mLock);
    return mLatestEnqueuedMeta;
}

}  // namespace android
}  // namespace android
+3 −0
Original line number Original line Diff line number Diff line
@@ -62,6 +62,8 @@ struct AnotherPacketSource : public MediaSource {


    bool isFinished(int64_t duration) const;
    bool isFinished(int64_t duration) const;


    sp<AMessage> getLatestMeta();

protected:
protected:
    virtual ~AnotherPacketSource();
    virtual ~AnotherPacketSource();


@@ -74,6 +76,7 @@ private:
    int64_t mLastQueuedTimeUs;
    int64_t mLastQueuedTimeUs;
    List<sp<ABuffer> > mBuffers;
    List<sp<ABuffer> > mBuffers;
    status_t mEOSResult;
    status_t mEOSResult;
    sp<AMessage> mLatestEnqueuedMeta;


    bool wasFormatChange(int32_t discontinuityType) const;
    bool wasFormatChange(int32_t discontinuityType) const;