Loading media/libmediaplayerservice/nuplayer/HTTPLiveSource.cpp +8 −0 Original line number Diff line number Diff line Loading @@ -139,6 +139,14 @@ sp<AMessage> NuPlayer::HTTPLiveSource::getTrackInfo(size_t trackIndex) const { return mLiveSession->getTrackInfo(trackIndex); } ssize_t NuPlayer::HTTPLiveSource::getSelectedTrack(media_track_type type) const { if (mLiveSession == NULL) { return -1; } else { return mLiveSession->getSelectedTrack(type); } } status_t NuPlayer::HTTPLiveSource::selectTrack(size_t trackIndex, bool select) { status_t err = mLiveSession->selectTrack(trackIndex, select); Loading media/libmediaplayerservice/nuplayer/HTTPLiveSource.h +1 −0 Original line number Diff line number Diff line Loading @@ -42,6 +42,7 @@ struct NuPlayer::HTTPLiveSource : public NuPlayer::Source { virtual status_t getDuration(int64_t *durationUs); virtual size_t getTrackCount() const; virtual sp<AMessage> getTrackInfo(size_t trackIndex) const; virtual ssize_t getSelectedTrack(media_track_type /* type */) const; virtual status_t selectTrack(size_t trackIndex, bool select); virtual status_t seekTo(int64_t seekTimeUs); Loading media/libstagefright/httplive/LiveSession.cpp +8 −0 Original line number Diff line number Diff line Loading @@ -1164,6 +1164,14 @@ status_t LiveSession::selectTrack(size_t index, bool select) { return err; } ssize_t LiveSession::getSelectedTrack(media_track_type type) const { if (mPlaylist == NULL) { return -1; } else { return mPlaylist->getSelectedTrack(type); } } bool LiveSession::canSwitchUp() { // Allow upwards bandwidth switch when a stream has buffered at least 10 seconds. status_t err = OK; Loading media/libstagefright/httplive/LiveSession.h +2 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ #define LIVE_SESSION_H_ #include <media/stagefright/foundation/AHandler.h> #include <media/mediaplayer.h> #include <utils/String8.h> Loading Loading @@ -73,6 +74,7 @@ struct LiveSession : public AHandler { size_t getTrackCount() const; sp<AMessage> getTrackInfo(size_t trackIndex) const; status_t selectTrack(size_t index, bool select); ssize_t getSelectedTrack(media_track_type /* type */) const; bool isSeekable() const; bool hasDynamicDuration() const; Loading media/libstagefright/httplive/M3UParser.cpp +35 −0 Original line number Diff line number Diff line Loading @@ -66,6 +66,9 @@ protected: virtual ~MediaGroup(); private: friend struct M3UParser; struct Media { AString mName; AString mURI; Loading Loading @@ -356,6 +359,38 @@ ssize_t M3UParser::getSelectedIndex() const { return mSelectedIndex; } ssize_t M3UParser::getSelectedTrack(media_track_type type) const { MediaGroup::Type groupType; switch (type) { case MEDIA_TRACK_TYPE_VIDEO: groupType = MediaGroup::TYPE_VIDEO; break; case MEDIA_TRACK_TYPE_AUDIO: groupType = MediaGroup::TYPE_AUDIO; break; case MEDIA_TRACK_TYPE_SUBTITLE: groupType = MediaGroup::TYPE_SUBS; break; default: return -1; } for (size_t i = 0, ii = 0; i < mMediaGroups.size(); ++i) { sp<MediaGroup> group = mMediaGroups.valueAt(i); size_t tracks = group->countTracks(); if (groupType != group->mType) { ii += tracks; } else if (group->mSelectedIndex >= 0) { return ii + group->mSelectedIndex; } } return -1; } bool M3UParser::getTypeURI(size_t index, const char *key, AString *uri) const { if (!mIsVariantPlaylist) { *uri = mBaseURI; Loading Loading
media/libmediaplayerservice/nuplayer/HTTPLiveSource.cpp +8 −0 Original line number Diff line number Diff line Loading @@ -139,6 +139,14 @@ sp<AMessage> NuPlayer::HTTPLiveSource::getTrackInfo(size_t trackIndex) const { return mLiveSession->getTrackInfo(trackIndex); } ssize_t NuPlayer::HTTPLiveSource::getSelectedTrack(media_track_type type) const { if (mLiveSession == NULL) { return -1; } else { return mLiveSession->getSelectedTrack(type); } } status_t NuPlayer::HTTPLiveSource::selectTrack(size_t trackIndex, bool select) { status_t err = mLiveSession->selectTrack(trackIndex, select); Loading
media/libmediaplayerservice/nuplayer/HTTPLiveSource.h +1 −0 Original line number Diff line number Diff line Loading @@ -42,6 +42,7 @@ struct NuPlayer::HTTPLiveSource : public NuPlayer::Source { virtual status_t getDuration(int64_t *durationUs); virtual size_t getTrackCount() const; virtual sp<AMessage> getTrackInfo(size_t trackIndex) const; virtual ssize_t getSelectedTrack(media_track_type /* type */) const; virtual status_t selectTrack(size_t trackIndex, bool select); virtual status_t seekTo(int64_t seekTimeUs); Loading
media/libstagefright/httplive/LiveSession.cpp +8 −0 Original line number Diff line number Diff line Loading @@ -1164,6 +1164,14 @@ status_t LiveSession::selectTrack(size_t index, bool select) { return err; } ssize_t LiveSession::getSelectedTrack(media_track_type type) const { if (mPlaylist == NULL) { return -1; } else { return mPlaylist->getSelectedTrack(type); } } bool LiveSession::canSwitchUp() { // Allow upwards bandwidth switch when a stream has buffered at least 10 seconds. status_t err = OK; Loading
media/libstagefright/httplive/LiveSession.h +2 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ #define LIVE_SESSION_H_ #include <media/stagefright/foundation/AHandler.h> #include <media/mediaplayer.h> #include <utils/String8.h> Loading Loading @@ -73,6 +74,7 @@ struct LiveSession : public AHandler { size_t getTrackCount() const; sp<AMessage> getTrackInfo(size_t trackIndex) const; status_t selectTrack(size_t index, bool select); ssize_t getSelectedTrack(media_track_type /* type */) const; bool isSeekable() const; bool hasDynamicDuration() const; Loading
media/libstagefright/httplive/M3UParser.cpp +35 −0 Original line number Diff line number Diff line Loading @@ -66,6 +66,9 @@ protected: virtual ~MediaGroup(); private: friend struct M3UParser; struct Media { AString mName; AString mURI; Loading Loading @@ -356,6 +359,38 @@ ssize_t M3UParser::getSelectedIndex() const { return mSelectedIndex; } ssize_t M3UParser::getSelectedTrack(media_track_type type) const { MediaGroup::Type groupType; switch (type) { case MEDIA_TRACK_TYPE_VIDEO: groupType = MediaGroup::TYPE_VIDEO; break; case MEDIA_TRACK_TYPE_AUDIO: groupType = MediaGroup::TYPE_AUDIO; break; case MEDIA_TRACK_TYPE_SUBTITLE: groupType = MediaGroup::TYPE_SUBS; break; default: return -1; } for (size_t i = 0, ii = 0; i < mMediaGroups.size(); ++i) { sp<MediaGroup> group = mMediaGroups.valueAt(i); size_t tracks = group->countTracks(); if (groupType != group->mType) { ii += tracks; } else if (group->mSelectedIndex >= 0) { return ii + group->mSelectedIndex; } } return -1; } bool M3UParser::getTypeURI(size_t index, const char *key, AString *uri) const { if (!mIsVariantPlaylist) { *uri = mBaseURI; Loading