OSDN Git Service

Changed parsing of trkn and disk from 8 bits to 16 bits
authorAndreas Lillvik <andreas.lillvik@sonyericsson.com>
Wed, 13 Oct 2010 13:37:01 +0000 (15:37 +0200)
committerJohan Redestig <johan.redestig@sonymobile.com>
Mon, 19 Nov 2012 11:52:46 +0000 (12:52 +0100)
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

index dc8e4a3..cc71d4c 100644 (file)
@@ -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);
             }