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

Commit 04352de2 authored by Lajos Molnar's avatar Lajos Molnar Committed by Android Git Automerger
Browse files

am e0c3058a: Merge "AnotherPacketSource support to get latest buffered MetaData." into klp-dev

* commit 'e0c3058a':
  AnotherPacketSource support to get latest buffered MetaData.
parents 72d09f62 e0c3058a
Loading
Loading
Loading
Loading
+22 −2
Original line number Diff line number Diff line
@@ -34,7 +34,8 @@ AnotherPacketSource::AnotherPacketSource(const sp<MetaData> &meta)
    : mIsAudio(false),
      mFormat(NULL),
      mLastQueuedTimeUs(0),
      mEOSResult(OK) {
      mEOSResult(OK),
      mLatestEnqueuedMeta(NULL) {
    setFormat(meta);
}

@@ -182,12 +183,24 @@ void AnotherPacketSource::queueAccessUnit(const sp<ABuffer> &buffer) {
        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);

    Mutex::Autolock autoLock(mLock);
    mBuffers.push_back(buffer);
    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() {
@@ -197,6 +210,7 @@ void AnotherPacketSource::clear() {
    mEOSResult = OK;

    mFormat = NULL;
    mLatestEnqueuedMeta = NULL;
}

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

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

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

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

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

    bool isFinished(int64_t duration) const;

    sp<AMessage> getLatestMeta();

protected:
    virtual ~AnotherPacketSource();

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

    bool wasFormatChange(int32_t discontinuityType) const;