diff options
author | James Dong <jdong@google.com> | 2012-04-17 13:07:56 -0700 |
---|---|---|
committer | James Dong <jdong@google.com> | 2012-04-26 11:27:43 -0700 |
commit | 514bcaf1e842e8e90fbeabf35e7e654622b75b02 (patch) | |
tree | f3618f1e77ee62d210395dc63623779e58094ea9 /media/libstagefright/AwesomePlayer.cpp | |
parent | 0756aa99dffd5740d963fdda60699fdefe58ce85 (diff) | |
download | frameworks_av-514bcaf1e842e8e90fbeabf35e7e654622b75b02.zip frameworks_av-514bcaf1e842e8e90fbeabf35e7e654622b75b02.tar.gz frameworks_av-514bcaf1e842e8e90fbeabf35e7e654622b75b02.tar.bz2 |
Handle the case when there is no timed text track
o also replaced mTimedTextLock with mLock, since there is no particular reason to use a separate lock for timed text
o related-to-bug: 6110705
Change-Id: Ia687e96956692c42d492e57992e5721ca1e8e18b
Diffstat (limited to 'media/libstagefright/AwesomePlayer.cpp')
-rw-r--r-- | media/libstagefright/AwesomePlayer.cpp | 51 |
1 files changed, 29 insertions, 22 deletions
diff --git a/media/libstagefright/AwesomePlayer.cpp b/media/libstagefright/AwesomePlayer.cpp index b15cb67..1387e74 100644 --- a/media/libstagefright/AwesomePlayer.cpp +++ b/media/libstagefright/AwesomePlayer.cpp @@ -1345,7 +1345,7 @@ void AwesomePlayer::setAudioSource(sp<MediaSource> source) { } void AwesomePlayer::addTextSource(size_t trackIndex, const sp<MediaSource>& source) { - Mutex::Autolock autoLock(mTimedTextLock); + Mutex::Autolock autoLock(mLock); CHECK(source != NULL); if (mTextDriver == NULL) { @@ -1395,7 +1395,6 @@ status_t AwesomePlayer::initAudioDecoder() { if (mAudioSource != NULL) { Mutex::Autolock autoLock(mStatsLock); TrackStat *stat = &mStats.mTracks.editItemAt(mStats.mAudioTrackIndex); - const char *component; if (!mAudioSource->getFormat() ->findCString(kKeyDecoderComponent, &component)) { @@ -2268,13 +2267,13 @@ status_t AwesomePlayer::getParameter(int key, Parcel *reply) { } status_t AwesomePlayer::getTrackInfo(Parcel *reply) const { - Mutex::Autolock autoLock(mTimedTextLock); - if (mTextDriver == NULL) { - return INVALID_OPERATION; + Mutex::Autolock autoLock(mLock); + size_t trackCount = mExtractor->countTracks(); + if (mTextDriver != NULL) { + trackCount += mTextDriver->countExternalTracks(); } - reply->writeInt32(mTextDriver->countExternalTracks() + - mExtractor->countTracks()); + reply->writeInt32(trackCount); for (size_t i = 0; i < mExtractor->countTracks(); ++i) { sp<MetaData> meta = mExtractor->getTrackMetaData(i); @@ -2296,28 +2295,31 @@ status_t AwesomePlayer::getTrackInfo(Parcel *reply) const { } const char *lang; - if (meta->findCString(kKeyMediaLanguage, &lang)) { - reply->writeString16(String16(lang)); - } else { - reply->writeString16(String16("")); + if (!meta->findCString(kKeyMediaLanguage, &lang)) { + lang = "und"; } + reply->writeString16(String16(lang)); } - mTextDriver->getExternalTrackInfo(reply); + if (mTextDriver != NULL) { + mTextDriver->getExternalTrackInfo(reply); + } return OK; } // FIXME: // At present, only timed text track is able to be selected or unselected. status_t AwesomePlayer::selectTrack(size_t trackIndex, bool select) { - Mutex::Autolock autoLock(mTimedTextLock); - if (mTextDriver == NULL) { - return INVALID_OPERATION; + ALOGV("selectTrack: trackIndex = %d and select=%d", trackIndex, select); + Mutex::Autolock autoLock(mLock); + size_t trackCount = mExtractor->countTracks(); + if (mTextDriver != NULL) { + trackCount += mTextDriver->countExternalTracks(); } - if (trackIndex >= mExtractor->countTracks() - + mTextDriver->countExternalTracks()) { - return BAD_VALUE; + if (trackIndex >= trackCount) { + ALOGE("Track index (%d) is out of range [0, %d)", trackIndex, trackCount); + return ERROR_OUT_OF_RANGE; } if (trackIndex < mExtractor->countTracks()) { @@ -2331,6 +2333,11 @@ status_t AwesomePlayer::selectTrack(size_t trackIndex, bool select) { } } + // Timed text track handling + if (mTextDriver == NULL) { + return INVALID_OPERATION; + } + status_t err = OK; if (select) { err = mTextDriver->selectTrack(trackIndex); @@ -2371,7 +2378,7 @@ status_t AwesomePlayer::invoke(const Parcel &request, Parcel *reply) { } case INVOKE_ID_ADD_EXTERNAL_SOURCE: { - Mutex::Autolock autoLock(mTimedTextLock); + Mutex::Autolock autoLock(mLock); if (mTextDriver == NULL) { mTextDriver = new TimedTextDriver(mListener); } @@ -2383,7 +2390,7 @@ status_t AwesomePlayer::invoke(const Parcel &request, Parcel *reply) { } case INVOKE_ID_ADD_EXTERNAL_SOURCE_FD: { - Mutex::Autolock autoLock(mTimedTextLock); + Mutex::Autolock autoLock(mLock); if (mTextDriver == NULL) { mTextDriver = new TimedTextDriver(mListener); } @@ -2398,12 +2405,12 @@ status_t AwesomePlayer::invoke(const Parcel &request, Parcel *reply) { case INVOKE_ID_SELECT_TRACK: { int trackIndex = request.readInt32(); - return selectTrack(trackIndex, true); + return selectTrack(trackIndex, true /* select */); } case INVOKE_ID_UNSELECT_TRACK: { int trackIndex = request.readInt32(); - return selectTrack(trackIndex, false); + return selectTrack(trackIndex, false /* select */); } default: { |