From 772bcc27ba7c1fd42c72ecaca55d533328bd18e7 Mon Sep 17 00:00:00 2001 From: Andreas Huber Date: Thu, 9 Sep 2010 09:48:41 -0700 Subject: Instead of asserting, publish no tracks if an MP3Extractor is used on non-mp3 content. Change-Id: I26db4524c5306bf2346438d2bd359c5cfb95cead related-to-bug: 2900419 --- media/libstagefright/MP3Extractor.cpp | 76 ++++++++++++++++++----------------- 1 file changed, 39 insertions(+), 37 deletions(-) (limited to 'media/libstagefright/MP3Extractor.cpp') 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 &source, const sp &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 MP3Extractor::getTrack(size_t index) { - if (mFirstFramePos < 0 || index != 0) { + if (mInitCheck != OK || index != 0) { return NULL; } @@ -536,7 +538,7 @@ sp MP3Extractor::getTrack(size_t index) { } sp 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 MP3Extractor::getMetaData() { sp meta = new MetaData; - if (mFirstFramePos < 0) { + if (mInitCheck != OK) { return meta; } -- cgit v1.1