diff options
author | Andreas Huber <andih@google.com> | 2013-02-06 10:44:39 -0800 |
---|---|---|
committer | Andreas Huber <andih@google.com> | 2013-02-06 10:44:39 -0800 |
commit | 0df36ec3303c2c6bf9b42c07945ac8bd234153f3 (patch) | |
tree | 558d8e8d18ce64e84114d3b3d53209c0b4e27693 /media/libmediaplayerservice/nuplayer/HTTPLiveSource.cpp | |
parent | ec0c597cabf169ca646bcea5faac1bd81ed4484d (diff) | |
download | frameworks_av-0df36ec3303c2c6bf9b42c07945ac8bd234153f3.zip frameworks_av-0df36ec3303c2c6bf9b42c07945ac8bd234153f3.tar.gz frameworks_av-0df36ec3303c2c6bf9b42c07945ac8bd234153f3.tar.bz2 |
HLS now properly publishes its "seekable" flags after connection
has successfully completed and a sufficient amount of data fetched,
and only then signals that preparation is completed.
Change-Id: I7684a14238b826909f518f2af506966e522dfcfc
Diffstat (limited to 'media/libmediaplayerservice/nuplayer/HTTPLiveSource.cpp')
-rw-r--r-- | media/libmediaplayerservice/nuplayer/HTTPLiveSource.cpp | 74 |
1 files changed, 57 insertions, 17 deletions
diff --git a/media/libmediaplayerservice/nuplayer/HTTPLiveSource.cpp b/media/libmediaplayerservice/nuplayer/HTTPLiveSource.cpp index ae67906..655ee55 100644 --- a/media/libmediaplayerservice/nuplayer/HTTPLiveSource.cpp +++ b/media/libmediaplayerservice/nuplayer/HTTPLiveSource.cpp @@ -71,7 +71,10 @@ void NuPlayer::HTTPLiveSource::prepareAsync() { mLiveLooper->setName("http live"); mLiveLooper->start(); + sp<AMessage> notify = new AMessage(kWhatSessionNotify, id()); + mLiveSession = new LiveSession( + notify, (mFlags & kFlagIncognito) ? LiveSession::kFlagIncognito : 0, mUIDValid, mUID); @@ -81,23 +84,6 @@ void NuPlayer::HTTPLiveSource::prepareAsync() { mURL.c_str(), mExtraHeaders.isEmpty() ? NULL : &mExtraHeaders); mTSParser = new ATSParser; - - notifyVideoSizeChanged(0, 0); - - uint32_t flags = FLAG_CAN_PAUSE; - if (mLiveSession->isSeekable()) { - flags |= FLAG_CAN_SEEK; - flags |= FLAG_CAN_SEEK_BACKWARD; - flags |= FLAG_CAN_SEEK_FORWARD; - } - - if (mLiveSession->hasDynamicDuration()) { - flags |= FLAG_DYNAMIC_DURATION; - } - - notifyFlagsChanged(flags); - - notifyPrepared(); } void NuPlayer::HTTPLiveSource::start() { @@ -214,5 +200,59 @@ status_t NuPlayer::HTTPLiveSource::seekTo(int64_t seekTimeUs) { return OK; } +void NuPlayer::HTTPLiveSource::onMessageReceived(const sp<AMessage> &msg) { + switch (msg->what()) { + case kWhatSessionNotify: + { + onSessionNotify(msg); + break; + } + + default: + Source::onMessageReceived(msg); + break; + } +} + +void NuPlayer::HTTPLiveSource::onSessionNotify(const sp<AMessage> &msg) { + int32_t what; + CHECK(msg->findInt32("what", &what)); + + switch (what) { + case LiveSession::kWhatPrepared: + { + notifyVideoSizeChanged(0, 0); + + uint32_t flags = FLAG_CAN_PAUSE; + if (mLiveSession->isSeekable()) { + flags |= FLAG_CAN_SEEK; + flags |= FLAG_CAN_SEEK_BACKWARD; + flags |= FLAG_CAN_SEEK_FORWARD; + } + + if (mLiveSession->hasDynamicDuration()) { + flags |= FLAG_DYNAMIC_DURATION; + } + + notifyFlagsChanged(flags); + + notifyPrepared(); + break; + } + + case LiveSession::kWhatPreparationFailed: + { + status_t err; + CHECK(msg->findInt32("err", &err)); + + notifyPrepared(err); + break; + } + + default: + TRESPASS(); + } +} + } // namespace android |