From afa28a823724a2f76e1a53b15358533388003666 Mon Sep 17 00:00:00 2001 From: Andreas Lillvik Date: Wed, 13 Oct 2010 15:37:01 +0200 Subject: Changed parsing of trkn and disk from 8 bits to 16 bits The MPEG4Extractor was parsing 8 bits instead of 16 bits when parsing 'trkn' and 'disk'. Also added support for 16 bytes size 'disk'. Change-Id: I22b4de2ac800881884d5759776cb380917522a87 --- media/libstagefright/MPEG4Extractor.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'media/libstagefright/MPEG4Extractor.cpp') diff --git a/media/libstagefright/MPEG4Extractor.cpp b/media/libstagefright/MPEG4Extractor.cpp index dc8e4a3..cc71d4c 100644 --- a/media/libstagefright/MPEG4Extractor.cpp +++ b/media/libstagefright/MPEG4Extractor.cpp @@ -1633,8 +1633,9 @@ status_t MPEG4Extractor::parseMetaData(off64_t offset, size_t size) { { if (size == 16 && flags == 0) { char tmp[16]; - sprintf(tmp, "%d/%d", - (int)buffer[size - 5], (int)buffer[size - 3]); + uint16_t* pTrack = (uint16_t*)&buffer[10]; + uint16_t* pTotalTracks = (uint16_t*)&buffer[12]; + sprintf(tmp, "%d/%d", ntohs(*pTrack), ntohs(*pTotalTracks)); mFileMetaData->setCString(kKeyCDTrackNumber, tmp); } @@ -1642,10 +1643,11 @@ status_t MPEG4Extractor::parseMetaData(off64_t offset, size_t size) { } case FOURCC('d', 'i', 's', 'k'): { - if (size == 14 && flags == 0) { + if ((size == 14 || size == 16) && flags == 0) { char tmp[16]; - sprintf(tmp, "%d/%d", - (int)buffer[size - 3], (int)buffer[size - 1]); + uint16_t* pDisc = (uint16_t*)&buffer[10]; + uint16_t* pTotalDiscs = (uint16_t*)&buffer[12]; + sprintf(tmp, "%d/%d", ntohs(*pDisc), ntohs(*pTotalDiscs)); mFileMetaData->setCString(kKeyDiscNumber, tmp); } -- cgit v1.1