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

Commit 541a9ac7 authored by Marco Nelissen's avatar Marco Nelissen Committed by Android Git Automerger
Browse files

am 8cd4132a: am 3f22f5a2: Merge "Signal EOS at end of mpeg video to flush out final sample"

* commit '8cd4132a':
  Signal EOS at end of mpeg video to flush out final sample
parents 382bcd5a 8cd4132a
Loading
Loading
Loading
Loading
+8 −0
Original line number Original line Diff line number Diff line
@@ -136,6 +136,7 @@ private:
    sp<ABuffer> mBuffer;
    sp<ABuffer> mBuffer;
    sp<AnotherPacketSource> mSource;
    sp<AnotherPacketSource> mSource;
    bool mPayloadStarted;
    bool mPayloadStarted;
    bool mEOSReached;


    uint64_t mPrevPTS;
    uint64_t mPrevPTS;


@@ -493,6 +494,7 @@ ATSParser::Stream::Stream(
      mPCR_PID(PCR_PID),
      mPCR_PID(PCR_PID),
      mExpectedContinuityCounter(-1),
      mExpectedContinuityCounter(-1),
      mPayloadStarted(false),
      mPayloadStarted(false),
      mEOSReached(false),
      mPrevPTS(0),
      mPrevPTS(0),
      mQueue(NULL) {
      mQueue(NULL) {
    switch (mStreamType) {
    switch (mStreamType) {
@@ -692,6 +694,8 @@ void ATSParser::Stream::signalEOS(status_t finalResult) {
    if (mSource != NULL) {
    if (mSource != NULL) {
        mSource->signalEOS(finalResult);
        mSource->signalEOS(finalResult);
    }
    }
    mEOSReached = true;
    flush();
}
}


status_t ATSParser::Stream::parsePES(ABitReader *br) {
status_t ATSParser::Stream::parsePES(ABitReader *br) {
@@ -902,6 +906,10 @@ void ATSParser::Stream::onPayloadData(


    status_t err = mQueue->appendData(data, size, timeUs);
    status_t err = mQueue->appendData(data, size, timeUs);


    if (mEOSReached) {
        mQueue->signalEOS();
    }

    if (err != OK) {
    if (err != OK) {
        return;
        return;
    }
    }
+20 −1
Original line number Original line Diff line number Diff line
@@ -38,7 +38,8 @@ namespace android {


ElementaryStreamQueue::ElementaryStreamQueue(Mode mode, uint32_t flags)
ElementaryStreamQueue::ElementaryStreamQueue(Mode mode, uint32_t flags)
    : mMode(mode),
    : mMode(mode),
      mFlags(flags) {
      mFlags(flags),
      mEOSReached(false) {
}
}


sp<MetaData> ElementaryStreamQueue::getFormat() {
sp<MetaData> ElementaryStreamQueue::getFormat() {
@@ -244,6 +245,11 @@ static bool IsSeeminglyValidMPEGAudioHeader(const uint8_t *ptr, size_t size) {


status_t ElementaryStreamQueue::appendData(
status_t ElementaryStreamQueue::appendData(
        const void *data, size_t size, int64_t timeUs) {
        const void *data, size_t size, int64_t timeUs) {

    if (mEOSReached) {
        ALOGE("appending data after EOS");
        return ERROR_MALFORMED;
    }
    if (mBuffer == NULL || mBuffer->size() == 0) {
    if (mBuffer == NULL || mBuffer->size() == 0) {
        switch (mMode) {
        switch (mMode) {
            case H264:
            case H264:
@@ -1282,4 +1288,17 @@ sp<ABuffer> ElementaryStreamQueue::dequeueAccessUnitMPEG4Video() {
    return NULL;
    return NULL;
}
}


void ElementaryStreamQueue::signalEOS() {
    if (!mEOSReached) {
        if (mMode == MPEG_VIDEO) {
            const char *theEnd = "\x00\x00\x01\x00";
            appendData(theEnd, 4, 0);
        }
        mEOSReached = true;
    } else {
        ALOGW("EOS already signaled");
    }
}


}  // namespace android
}  // namespace android
+2 −0
Original line number Original line Diff line number Diff line
@@ -46,6 +46,7 @@ struct ElementaryStreamQueue {
    ElementaryStreamQueue(Mode mode, uint32_t flags = 0);
    ElementaryStreamQueue(Mode mode, uint32_t flags = 0);


    status_t appendData(const void *data, size_t size, int64_t timeUs);
    status_t appendData(const void *data, size_t size, int64_t timeUs);
    void signalEOS();
    void clear(bool clearFormat);
    void clear(bool clearFormat);


    sp<ABuffer> dequeueAccessUnit();
    sp<ABuffer> dequeueAccessUnit();
@@ -60,6 +61,7 @@ private:


    Mode mMode;
    Mode mMode;
    uint32_t mFlags;
    uint32_t mFlags;
    bool mEOSReached;


    sp<ABuffer> mBuffer;
    sp<ABuffer> mBuffer;
    List<RangeInfo> mRangeInfos;
    List<RangeInfo> mRangeInfos;
+3 −0
Original line number Original line Diff line number Diff line
@@ -204,6 +204,9 @@ status_t MPEG2TSExtractor::feedMore() {
    ssize_t n = mDataSource->readAt(mOffset, packet, kTSPacketSize);
    ssize_t n = mDataSource->readAt(mOffset, packet, kTSPacketSize);


    if (n < (ssize_t)kTSPacketSize) {
    if (n < (ssize_t)kTSPacketSize) {
        if (n >= 0) {
            mParser->signalEOS(ERROR_END_OF_STREAM);
        }
        return (n < 0) ? (status_t)n : ERROR_END_OF_STREAM;
        return (n < 0) ? (status_t)n : ERROR_END_OF_STREAM;
    }
    }