diff options
author | Gloria Wang <gwang@google.com> | 2011-05-03 15:59:03 -0700 |
---|---|---|
committer | Gloria Wang <gwang@google.com> | 2011-05-03 16:41:17 -0700 |
commit | 7a1e3e81264189e23a1db2b174e1b5a5d4c7d1c3 (patch) | |
tree | d75e0a639df8f389786d9bdf6c6de1f22729b135 /media/libstagefright/MPEG4Extractor.cpp | |
parent | 10d227074b5a67a2e738d72888ece4dd24537c66 (diff) | |
download | frameworks_av-7a1e3e81264189e23a1db2b174e1b5a5d4c7d1c3.zip frameworks_av-7a1e3e81264189e23a1db2b174e1b5a5d4c7d1c3.tar.gz frameworks_av-7a1e3e81264189e23a1db2b174e1b5a5d4c7d1c3.tar.bz2 |
Initial CL for the timed text support:
- Add support for MP4 timed text
- Add API for app to turn on/off a text track
- Add timed text metadata(language) in the MediaMetadataRetriever
Change-Id: I0055beba38ac761627dbcc6d581ae9582d68bb94
Diffstat (limited to 'media/libstagefright/MPEG4Extractor.cpp')
-rw-r--r-- | media/libstagefright/MPEG4Extractor.cpp | 38 |
1 files changed, 37 insertions, 1 deletions
diff --git a/media/libstagefright/MPEG4Extractor.cpp b/media/libstagefright/MPEG4Extractor.cpp index 8787214..c79d02e 100644 --- a/media/libstagefright/MPEG4Extractor.cpp +++ b/media/libstagefright/MPEG4Extractor.cpp @@ -19,6 +19,8 @@ #include "include/MPEG4Extractor.h" #include "include/SampleTable.h" +#include "include/ESDS.h" +#include "include/TimedTextPlayer.h" #include <arpa/inet.h> @@ -29,7 +31,6 @@ #include <media/stagefright/foundation/ADebug.h> #include <media/stagefright/DataSource.h> -#include "include/ESDS.h" #include <media/stagefright/MediaBuffer.h> #include <media/stagefright/MediaBufferGroup.h> #include <media/stagefright/MediaDefs.h> @@ -832,6 +833,33 @@ status_t MPEG4Extractor::parseChunk(off64_t *offset, int depth) { mLastTrack->meta->setInt64( kKeyDuration, (duration * 1000000) / mLastTrack->timescale); + uint8_t lang[2]; + off64_t lang_offset; + if (version == 1) { + lang_offset = timescale_offset + 4 + 8; + } else if (version == 0) { + lang_offset = timescale_offset + 4 + 4; + } else { + return ERROR_IO; + } + + if (mDataSource->readAt(lang_offset, &lang, sizeof(lang)) + < (ssize_t)sizeof(lang)) { + return ERROR_IO; + } + + // To get the ISO-639-2/T three character language code + // 1 bit pad followed by 3 5-bits characters. Each character + // is packed as the difference between its ASCII value and 0x60. + char lang_code[4]; + lang_code[0] = ((lang[0] >> 2) & 0x1f) + 0x60; + lang_code[1] = ((lang[0] & 0x3) << 3 | (lang[1] >> 5)) + 0x60; + lang_code[2] = (lang[1] & 0x1f) + 0x60; + lang_code[3] = '\0'; + + mLastTrack->meta->setCString( + kKeyMediaLanguage, lang_code); + *offset += chunk_size; break; } @@ -1295,6 +1323,14 @@ status_t MPEG4Extractor::parseChunk(off64_t *offset, int depth) { return parseDrmSINF(offset, data_offset); } + case FOURCC('t', 'x', '3', 'g'): + { + mLastTrack->meta->setCString(kKeyMIMEType, MEDIA_MIMETYPE_TEXT_3GPP); + + *offset += chunk_size; + break; + } + default: { *offset += chunk_size; |