Loading media/extractors/mpeg2/ExtractorBundle.cpp +2 −0 Original line number Diff line number Diff line Loading @@ -29,6 +29,8 @@ struct CDataSource; static const char *extensions[] = { "m2p", "m2ts", "mts", "ts", NULL }; Loading media/extractors/mpeg2/MPEG2TSExtractor.cpp +22 −6 Original line number Diff line number Diff line Loading @@ -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(); } Loading Loading @@ -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) { Loading @@ -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) { Loading Loading @@ -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; Loading Loading @@ -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; Loading media/extractors/mpeg2/MPEG2TSExtractor.h +1 −0 Original line number Diff line number Diff line Loading @@ -102,6 +102,7 @@ private: status_t estimateDurationsFromTimesUsAtEnd(); size_t mHeaderSkip; DISALLOW_EVIL_CONSTRUCTORS(MPEG2TSExtractor); }; Loading Loading
media/extractors/mpeg2/ExtractorBundle.cpp +2 −0 Original line number Diff line number Diff line Loading @@ -29,6 +29,8 @@ struct CDataSource; static const char *extensions[] = { "m2p", "m2ts", "mts", "ts", NULL }; Loading
media/extractors/mpeg2/MPEG2TSExtractor.cpp +22 −6 Original line number Diff line number Diff line Loading @@ -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(); } Loading Loading @@ -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) { Loading @@ -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) { Loading Loading @@ -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; Loading Loading @@ -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; Loading
media/extractors/mpeg2/MPEG2TSExtractor.h +1 −0 Original line number Diff line number Diff line Loading @@ -102,6 +102,7 @@ private: status_t estimateDurationsFromTimesUsAtEnd(); size_t mHeaderSkip; DISALLOW_EVIL_CONSTRUCTORS(MPEG2TSExtractor); }; Loading