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

Commit 5448dc22 authored by Marco Nelissen's avatar Marco Nelissen Committed by Android (Google) Code Review
Browse files

Merge "MPEG2TSExtractor: support m2ts container" into qt-dev

parents 66ea3929 22a12398
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -29,6 +29,8 @@ struct CDataSource;

static const char *extensions[] = {
   "m2p",
   "m2ts",
   "mts",
   "ts",
   NULL
};
+22 −6
Original line number Diff line number Diff line
@@ -238,6 +238,12 @@ MPEG2TSExtractor::MPEG2TSExtractor(DataSourceHelper *source)
      mParser(new ATSParser),
      mLastSyncEvent(0),
      mOffset(0) {
    char header;
    if (source->readAt(0, &header, 1) == 1 && header == 0x47) {
        mHeaderSkip = 0;
    } else {
        mHeaderSkip = 4;
    }
    init();
}

@@ -460,7 +466,7 @@ status_t MPEG2TSExtractor::feedMore(bool isInit) {
    Mutex::Autolock autoLock(mLock);

    uint8_t packet[kTSPacketSize];
    ssize_t n = mDataSource->readAt(mOffset, packet, kTSPacketSize);
    ssize_t n = mDataSource->readAt(mOffset + mHeaderSkip, packet, kTSPacketSize);

    if (n < (ssize_t)kTSPacketSize) {
        if (n >= 0) {
@@ -470,7 +476,7 @@ status_t MPEG2TSExtractor::feedMore(bool isInit) {
    }

    ATSParser::SyncEvent event(mOffset);
    mOffset += n;
    mOffset += mHeaderSkip + n;
    status_t err = mParser->feedTSPacket(packet, kTSPacketSize, &event);
    if (event.hasReturnedData()) {
        if (isInit) {
@@ -539,15 +545,15 @@ status_t MPEG2TSExtractor::estimateDurationsFromTimesUsAtEnd() {
                break;
            }

            ssize_t n = mDataSource->readAt(offset, packet, kTSPacketSize);
            ssize_t n = mDataSource->readAt(offset+mHeaderSkip, packet, kTSPacketSize);
            if (n < 0) {
                return n;
            } else if (n < (ssize_t)kTSPacketSize) {
                break;
            }

            offset += kTSPacketSize;
            bytesRead += kTSPacketSize;
            offset += kTSPacketSize + mHeaderSkip;
            bytesRead += kTSPacketSize + mHeaderSkip;
            err = parser->feedTSPacket(packet, kTSPacketSize, &ev);
            if (err != OK) {
                return err;
@@ -791,9 +797,19 @@ bool SniffMPEG2TS(DataSourceHelper *source, float *confidence) {
        char header;
        if (source->readAt(kTSPacketSize * i, &header, 1) != 1
                || header != 0x47) {
            // not ts file, check if m2ts file
            for (int j = 0; j < 5; ++j) {
                char headers[5];
                if (source->readAt((kTSPacketSize + 4) * j, &headers, 5) != 5
                    || headers[4] != 0x47) {
                    // not m2ts file too, return
                    return false;
                }
            }
            ALOGV("this is m2ts file\n");
            break;
        }
    }

    *confidence = 0.1f;

+1 −0
Original line number Diff line number Diff line
@@ -102,6 +102,7 @@ private:

    status_t  estimateDurationsFromTimesUsAtEnd();

    size_t mHeaderSkip;
    DISALLOW_EVIL_CONSTRUCTORS(MPEG2TSExtractor);
};