summaryrefslogtreecommitdiffstats
path: root/media/libstagefright/AwesomePlayer.cpp
diff options
context:
space:
mode:
authorJames Dong <jdong@google.com>2012-04-17 13:07:56 -0700
committerJames Dong <jdong@google.com>2012-04-26 11:27:43 -0700
commit514bcaf1e842e8e90fbeabf35e7e654622b75b02 (patch)
treef3618f1e77ee62d210395dc63623779e58094ea9 /media/libstagefright/AwesomePlayer.cpp
parent0756aa99dffd5740d963fdda60699fdefe58ce85 (diff)
downloadframeworks_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.cpp51
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:
{