summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBryan Ferris <bferris@google.com>2019-12-20 20:08:55 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2019-12-20 20:08:55 +0000
commit8f72d008d0c51da507fc3c447e68e02b9e2d8535 (patch)
tree0fbe702fc55c1c2aef632dc49386a12608a039ca
parent06e89d68d671ee486eeda3ab3bbf064ef21b83ee (diff)
parent1eba80de4e733a5222459020517ed93327966640 (diff)
downloadframeworks_av-8f72d008d0c51da507fc3c447e68e02b9e2d8535.tar.gz
frameworks_av-8f72d008d0c51da507fc3c447e68e02b9e2d8535.tar.bz2
frameworks_av-8f72d008d0c51da507fc3c447e68e02b9e2d8535.zip
Merge "Check actual read bytes for TS packets" into qt-qpr1-dev
-rw-r--r--media/libmediaplayerservice/nuplayer/StreamingSource.cpp21
1 files changed, 12 insertions, 9 deletions
diff --git a/media/libmediaplayerservice/nuplayer/StreamingSource.cpp b/media/libmediaplayerservice/nuplayer/StreamingSource.cpp
index afdcd3739f..f21d2b3323 100644
--- a/media/libmediaplayerservice/nuplayer/StreamingSource.cpp
+++ b/media/libmediaplayerservice/nuplayer/StreamingSource.cpp
@@ -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);