diff options
author | Robert Shih <robertshih@google.com> | 2015-05-15 10:12:21 -0700 |
---|---|---|
committer | Robert Shih <robertshih@google.com> | 2015-05-15 11:09:38 -0700 |
commit | 055404ea1309d4cbc5d313332b026f86bd6f0da1 (patch) | |
tree | 6d09c7670510fa7055db77399fb1ddcb9292e9fd /media/libmediaplayerservice/nuplayer/HTTPLiveSource.cpp | |
parent | 804a77d1045c6c4023f73a0975a09025b2e8eef2 (diff) | |
download | frameworks_av-055404ea1309d4cbc5d313332b026f86bd6f0da1.zip frameworks_av-055404ea1309d4cbc5d313332b026f86bd6f0da1.tar.gz frameworks_av-055404ea1309d4cbc5d313332b026f86bd6f0da1.tar.bz2 |
HTTPLiveSource: fix non timed id3 track selection
Non timed id3 track selection generates INVALID_OPERATION when performed
on the last track.
The buggy logic reads:
if (not last track) {
// non-timed-id3 related work
} else if (has timed id3) {
// timed id3 related work
} // last track but non timed id3 not handled
It should read:
if (has no timed id3 || not last track) {
// non-timed-id3 track related work
} else {
// timed id3 related work
}
Bug: 21195284
Change-Id: I2ddb5d8e2a1ecba4cc071c7ee14c6697fe8e220d
Diffstat (limited to 'media/libmediaplayerservice/nuplayer/HTTPLiveSource.cpp')
-rw-r--r-- | media/libmediaplayerservice/nuplayer/HTTPLiveSource.cpp | 24 |
1 files changed, 11 insertions, 13 deletions
diff --git a/media/libmediaplayerservice/nuplayer/HTTPLiveSource.cpp b/media/libmediaplayerservice/nuplayer/HTTPLiveSource.cpp index 39b8d09..126625a 100644 --- a/media/libmediaplayerservice/nuplayer/HTTPLiveSource.cpp +++ b/media/libmediaplayerservice/nuplayer/HTTPLiveSource.cpp @@ -161,24 +161,22 @@ status_t NuPlayer::HTTPLiveSource::selectTrack(size_t trackIndex, bool select, i status_t err = INVALID_OPERATION; bool postFetchMsg = false, isSub = false; - if (trackIndex != mLiveSession->getTrackCount() - 1) { + if (!mHasMetadata || trackIndex != mLiveSession->getTrackCount() - 1) { err = mLiveSession->selectTrack(trackIndex, select); postFetchMsg = select; isSub = true; } else { - // metadata track - if (mHasMetadata) { - if (mMetadataSelected && !select) { - err = OK; - } else if (!mMetadataSelected && select) { - postFetchMsg = true; - err = OK; - } else { - err = BAD_VALUE; // behave as LiveSession::selectTrack - } - - mMetadataSelected = select; + // metadata track; i.e. (mHasMetadata && trackIndex == mLiveSession->getTrackCount() - 1) + if (mMetadataSelected && !select) { + err = OK; + } else if (!mMetadataSelected && select) { + postFetchMsg = true; + err = OK; + } else { + err = BAD_VALUE; // behave as LiveSession::selectTrack } + + mMetadataSelected = select; } if (err == OK) { |