summaryrefslogtreecommitdiffstats
path: root/media/libstagefright/MP3Extractor.cpp
diff options
context:
space:
mode:
authorAndreas Huber <andih@google.com>2010-09-09 09:48:41 -0700
committerAndreas Huber <andih@google.com>2010-09-09 09:48:41 -0700
commit772bcc27ba7c1fd42c72ecaca55d533328bd18e7 (patch)
tree58bac08f3f0f4d446a4f9e5faabe6f8be315c7ab /media/libstagefright/MP3Extractor.cpp
parentfbf7162465ee5b9e928d5676d439a475c93b0725 (diff)
downloadframeworks_av-772bcc27ba7c1fd42c72ecaca55d533328bd18e7.zip
frameworks_av-772bcc27ba7c1fd42c72ecaca55d533328bd18e7.tar.gz
frameworks_av-772bcc27ba7c1fd42c72ecaca55d533328bd18e7.tar.bz2
Instead of asserting, publish no tracks if an MP3Extractor is used on non-mp3 content.
Change-Id: I26db4524c5306bf2346438d2bd359c5cfb95cead related-to-bug: 2900419
Diffstat (limited to 'media/libstagefright/MP3Extractor.cpp')
-rw-r--r--media/libstagefright/MP3Extractor.cpp76
1 files changed, 39 insertions, 37 deletions
diff --git a/media/libstagefright/MP3Extractor.cpp b/media/libstagefright/MP3Extractor.cpp
index 2e36968..82c0426 100644
--- a/media/libstagefright/MP3Extractor.cpp
+++ b/media/libstagefright/MP3Extractor.cpp
@@ -459,7 +459,8 @@ private:
MP3Extractor::MP3Extractor(
const sp<DataSource> &source, const sp<AMessage> &meta)
- : mDataSource(source),
+ : mInitCheck(NO_INIT),
+ mDataSource(source),
mFirstFramePos(-1),
mFixedHeader(0),
mByteNumber(0) {
@@ -480,53 +481,54 @@ MP3Extractor::MP3Extractor(
success = true;
} else {
success = Resync(mDataSource, 0, &pos, &header);
- CHECK(success);
}
- if (success) {
- mFirstFramePos = pos;
- mFixedHeader = header;
-
- size_t frame_size;
- int sample_rate;
- int num_channels;
- int bitrate;
- get_mp3_frame_size(
- header, &frame_size, &sample_rate, &num_channels, &bitrate);
-
- mMeta = new MetaData;
+ if (!success) {
+ // mInitCheck will remain NO_INIT
+ return;
+ }
- mMeta->setCString(kKeyMIMEType, MEDIA_MIMETYPE_AUDIO_MPEG);
- mMeta->setInt32(kKeySampleRate, sample_rate);
- mMeta->setInt32(kKeyBitRate, bitrate * 1000);
- mMeta->setInt32(kKeyChannelCount, num_channels);
+ mFirstFramePos = pos;
+ mFixedHeader = header;
- int64_t duration;
- parse_xing_header(
- mDataSource, mFirstFramePos, NULL, &mByteNumber,
- mTableOfContents, NULL, &duration);
- if (duration > 0) {
- mMeta->setInt64(kKeyDuration, duration);
- } else {
- off_t fileSize;
- if (mDataSource->getSize(&fileSize) == OK) {
- mMeta->setInt64(
- kKeyDuration,
- 8000LL * (fileSize - mFirstFramePos) / bitrate);
- }
+ size_t frame_size;
+ int sample_rate;
+ int num_channels;
+ int bitrate;
+ get_mp3_frame_size(
+ header, &frame_size, &sample_rate, &num_channels, &bitrate);
+
+ mMeta = new MetaData;
+
+ mMeta->setCString(kKeyMIMEType, MEDIA_MIMETYPE_AUDIO_MPEG);
+ mMeta->setInt32(kKeySampleRate, sample_rate);
+ mMeta->setInt32(kKeyBitRate, bitrate * 1000);
+ mMeta->setInt32(kKeyChannelCount, num_channels);
+
+ int64_t duration;
+ parse_xing_header(
+ mDataSource, mFirstFramePos, NULL, &mByteNumber,
+ mTableOfContents, NULL, &duration);
+ if (duration > 0) {
+ mMeta->setInt64(kKeyDuration, duration);
+ } else {
+ off_t fileSize;
+ if (mDataSource->getSize(&fileSize) == OK) {
+ mMeta->setInt64(
+ kKeyDuration,
+ 8000LL * (fileSize - mFirstFramePos) / bitrate);
}
}
-}
-MP3Extractor::~MP3Extractor() {
+ mInitCheck = OK;
}
size_t MP3Extractor::countTracks() {
- return (mFirstFramePos < 0) ? 0 : 1;
+ return mInitCheck != OK ? 0 : 1;
}
sp<MediaSource> MP3Extractor::getTrack(size_t index) {
- if (mFirstFramePos < 0 || index != 0) {
+ if (mInitCheck != OK || index != 0) {
return NULL;
}
@@ -536,7 +538,7 @@ sp<MediaSource> MP3Extractor::getTrack(size_t index) {
}
sp<MetaData> MP3Extractor::getTrackMetaData(size_t index, uint32_t flags) {
- if (mFirstFramePos < 0 || index != 0) {
+ if (mInitCheck != OK || index != 0) {
return NULL;
}
@@ -713,7 +715,7 @@ status_t MP3Source::read(
sp<MetaData> MP3Extractor::getMetaData() {
sp<MetaData> meta = new MetaData;
- if (mFirstFramePos < 0) {
+ if (mInitCheck != OK) {
return meta;
}