Check actual read bytes for TS packets

Check actual bytes read when feeding the data to TS parser.

Bug: 140177694
Test: poc in bug; StreamingMediaPlayerTest

Merged-In: I4b498fe375af657e17838e5839e6348e1463d559
Change-Id: I4b498fe375af657e17838e5839e6348e1463d559
gugelfrei
Chong Zhang 5 years ago committed by Bryan Ferris
parent 9ed54cdf4d
commit 1eba80de4e

@ -130,29 +130,32 @@ void NuPlayer::StreamingSource::onReadBuffer() {
} else if (n < 0) {
break;
} else {
if (buffer[0] == 0x00) {
if (buffer[0] == 0x00) { // OK to access buffer[0] since n must be > 0 here
// XXX legacy
if (extra == NULL) {
extra = new AMessage;
}
uint8_t type = buffer[1];
uint8_t type = 0;
if (n > 1) {
type = buffer[1];
if (type & 2) {
int64_t mediaTimeUs;
memcpy(&mediaTimeUs, &buffer[2], sizeof(mediaTimeUs));
if ((type & 2) && (n >= 2 + sizeof(int64_t))) {
int64_t mediaTimeUs;
memcpy(&mediaTimeUs, &buffer[2], sizeof(mediaTimeUs));
extra->setInt64(kATSParserKeyMediaTimeUs, mediaTimeUs);
extra->setInt64(kATSParserKeyMediaTimeUs, mediaTimeUs);
}
}
mTSParser->signalDiscontinuity(
((type & 1) == 0)
? ATSParser::DISCONTINUITY_TIME
: ATSParser::DISCONTINUITY_FORMATCHANGE,
? ATSParser::DISCONTINUITY_TIME
: ATSParser::DISCONTINUITY_FORMATCHANGE,
extra);
} else {
status_t err = mTSParser->feedTSPacket(buffer, sizeof(buffer));
status_t err = mTSParser->feedTSPacket(buffer, n);
if (err != OK) {
ALOGE("TS Parser returned error %d", err);

Loading…
Cancel
Save