Loading media/extractors/mpeg2/ExtractorBundle.cpp +2 −0 Original line number Original line Diff line number Diff line Loading @@ -29,6 +29,8 @@ struct CDataSource; static const char *extensions[] = { static const char *extensions[] = { "m2p", "m2p", "m2ts", "mts", "ts", "ts", NULL NULL }; }; Loading media/extractors/mpeg2/MPEG2TSExtractor.cpp +22 −6 Original line number Original line Diff line number Diff line Loading @@ -238,6 +238,12 @@ MPEG2TSExtractor::MPEG2TSExtractor(DataSourceHelper *source) mParser(new ATSParser), mParser(new ATSParser), mLastSyncEvent(0), mLastSyncEvent(0), mOffset(0) { mOffset(0) { char header; if (source->readAt(0, &header, 1) == 1 && header == 0x47) { mHeaderSkip = 0; } else { mHeaderSkip = 4; } init(); init(); } } Loading Loading @@ -460,7 +466,7 @@ status_t MPEG2TSExtractor::feedMore(bool isInit) { Mutex::Autolock autoLock(mLock); Mutex::Autolock autoLock(mLock); uint8_t packet[kTSPacketSize]; 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 < (ssize_t)kTSPacketSize) { if (n >= 0) { if (n >= 0) { Loading @@ -470,7 +476,7 @@ status_t MPEG2TSExtractor::feedMore(bool isInit) { } } ATSParser::SyncEvent event(mOffset); ATSParser::SyncEvent event(mOffset); mOffset += n; mOffset += mHeaderSkip + n; status_t err = mParser->feedTSPacket(packet, kTSPacketSize, &event); status_t err = mParser->feedTSPacket(packet, kTSPacketSize, &event); if (event.hasReturnedData()) { if (event.hasReturnedData()) { if (isInit) { if (isInit) { Loading Loading @@ -539,15 +545,15 @@ status_t MPEG2TSExtractor::estimateDurationsFromTimesUsAtEnd() { break; break; } } ssize_t n = mDataSource->readAt(offset, packet, kTSPacketSize); ssize_t n = mDataSource->readAt(offset+mHeaderSkip, packet, kTSPacketSize); if (n < 0) { if (n < 0) { return n; return n; } else if (n < (ssize_t)kTSPacketSize) { } else if (n < (ssize_t)kTSPacketSize) { break; break; } } offset += kTSPacketSize; offset += kTSPacketSize + mHeaderSkip; bytesRead += kTSPacketSize; bytesRead += kTSPacketSize + mHeaderSkip; err = parser->feedTSPacket(packet, kTSPacketSize, &ev); err = parser->feedTSPacket(packet, kTSPacketSize, &ev); if (err != OK) { if (err != OK) { return err; return err; Loading Loading @@ -791,9 +797,19 @@ bool SniffMPEG2TS(DataSourceHelper *source, float *confidence) { char header; char header; if (source->readAt(kTSPacketSize * i, &header, 1) != 1 if (source->readAt(kTSPacketSize * i, &header, 1) != 1 || header != 0x47) { || 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; return false; } } } } ALOGV("this is m2ts file\n"); break; } } *confidence = 0.1f; *confidence = 0.1f; Loading media/extractors/mpeg2/MPEG2TSExtractor.h +1 −0 Original line number Original line Diff line number Diff line Loading @@ -102,6 +102,7 @@ private: status_t estimateDurationsFromTimesUsAtEnd(); status_t estimateDurationsFromTimesUsAtEnd(); size_t mHeaderSkip; DISALLOW_EVIL_CONSTRUCTORS(MPEG2TSExtractor); DISALLOW_EVIL_CONSTRUCTORS(MPEG2TSExtractor); }; }; Loading Loading
media/extractors/mpeg2/ExtractorBundle.cpp +2 −0 Original line number Original line Diff line number Diff line Loading @@ -29,6 +29,8 @@ struct CDataSource; static const char *extensions[] = { static const char *extensions[] = { "m2p", "m2p", "m2ts", "mts", "ts", "ts", NULL NULL }; }; Loading
media/extractors/mpeg2/MPEG2TSExtractor.cpp +22 −6 Original line number Original line Diff line number Diff line Loading @@ -238,6 +238,12 @@ MPEG2TSExtractor::MPEG2TSExtractor(DataSourceHelper *source) mParser(new ATSParser), mParser(new ATSParser), mLastSyncEvent(0), mLastSyncEvent(0), mOffset(0) { mOffset(0) { char header; if (source->readAt(0, &header, 1) == 1 && header == 0x47) { mHeaderSkip = 0; } else { mHeaderSkip = 4; } init(); init(); } } Loading Loading @@ -460,7 +466,7 @@ status_t MPEG2TSExtractor::feedMore(bool isInit) { Mutex::Autolock autoLock(mLock); Mutex::Autolock autoLock(mLock); uint8_t packet[kTSPacketSize]; 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 < (ssize_t)kTSPacketSize) { if (n >= 0) { if (n >= 0) { Loading @@ -470,7 +476,7 @@ status_t MPEG2TSExtractor::feedMore(bool isInit) { } } ATSParser::SyncEvent event(mOffset); ATSParser::SyncEvent event(mOffset); mOffset += n; mOffset += mHeaderSkip + n; status_t err = mParser->feedTSPacket(packet, kTSPacketSize, &event); status_t err = mParser->feedTSPacket(packet, kTSPacketSize, &event); if (event.hasReturnedData()) { if (event.hasReturnedData()) { if (isInit) { if (isInit) { Loading Loading @@ -539,15 +545,15 @@ status_t MPEG2TSExtractor::estimateDurationsFromTimesUsAtEnd() { break; break; } } ssize_t n = mDataSource->readAt(offset, packet, kTSPacketSize); ssize_t n = mDataSource->readAt(offset+mHeaderSkip, packet, kTSPacketSize); if (n < 0) { if (n < 0) { return n; return n; } else if (n < (ssize_t)kTSPacketSize) { } else if (n < (ssize_t)kTSPacketSize) { break; break; } } offset += kTSPacketSize; offset += kTSPacketSize + mHeaderSkip; bytesRead += kTSPacketSize; bytesRead += kTSPacketSize + mHeaderSkip; err = parser->feedTSPacket(packet, kTSPacketSize, &ev); err = parser->feedTSPacket(packet, kTSPacketSize, &ev); if (err != OK) { if (err != OK) { return err; return err; Loading Loading @@ -791,9 +797,19 @@ bool SniffMPEG2TS(DataSourceHelper *source, float *confidence) { char header; char header; if (source->readAt(kTSPacketSize * i, &header, 1) != 1 if (source->readAt(kTSPacketSize * i, &header, 1) != 1 || header != 0x47) { || 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; return false; } } } } ALOGV("this is m2ts file\n"); break; } } *confidence = 0.1f; *confidence = 0.1f; Loading
media/extractors/mpeg2/MPEG2TSExtractor.h +1 −0 Original line number Original line Diff line number Diff line Loading @@ -102,6 +102,7 @@ private: status_t estimateDurationsFromTimesUsAtEnd(); status_t estimateDurationsFromTimesUsAtEnd(); size_t mHeaderSkip; DISALLOW_EVIL_CONSTRUCTORS(MPEG2TSExtractor); DISALLOW_EVIL_CONSTRUCTORS(MPEG2TSExtractor); }; }; Loading