diff options
author | Chong Zhang <chz@google.com> | 2015-03-06 14:00:54 -0800 |
---|---|---|
committer | Chong Zhang <chz@google.com> | 2015-03-17 09:53:35 -0700 |
commit | c4547ba77f78632172db3647a09659d9863d3b5c (patch) | |
tree | a1d76a900d2bafdb64414ccea16cacdcffead747 /media/libstagefright/mpeg2ts | |
parent | c84eb736fd051c37e1d7e8585d14612713388a58 (diff) | |
download | frameworks_av-c4547ba77f78632172db3647a09659d9863d3b5c.zip frameworks_av-c4547ba77f78632172db3647a09659d9863d3b5c.tar.gz frameworks_av-c4547ba77f78632172db3647a09659d9863d3b5c.tar.bz2 |
HLS: some fixes for seek with discontinuity.
- keep old fetcher when seeking, unless the URI is changing.
- when restarting after a seek, check discontinuity seq, and
queue format change if it's changed.
- add a simple kill switch to abort when stop (or pause for seek).
- when seeking, if searching for start time goes into 2nd segment,
do not signal time discontinuity or reset first PTS.
- use setFormat() to set format in AnotherPacketSource, otherwise
video/audio flags are not updated and format are not cleared on
discontinuities.
- do not start queueing video access unit until first IDR after start
bug: 19656539
Change-Id: I79108d26964f59ea00d2eeac8f5f9318747f8541
Diffstat (limited to 'media/libstagefright/mpeg2ts')
-rw-r--r-- | media/libstagefright/mpeg2ts/AnotherPacketSource.cpp | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/media/libstagefright/mpeg2ts/AnotherPacketSource.cpp b/media/libstagefright/mpeg2ts/AnotherPacketSource.cpp index bb05417..79a9b04 100644 --- a/media/libstagefright/mpeg2ts/AnotherPacketSource.cpp +++ b/media/libstagefright/mpeg2ts/AnotherPacketSource.cpp @@ -48,7 +48,10 @@ AnotherPacketSource::AnotherPacketSource(const sp<MetaData> &meta) } void AnotherPacketSource::setFormat(const sp<MetaData> &meta) { - CHECK(mFormat == NULL); + if (mFormat != NULL) { + // Only allowed to be set once. Requires explicit clear to reset. + return; + } mIsAudio = false; mIsVideo = false; @@ -94,7 +97,8 @@ sp<MetaData> AnotherPacketSource::getFormat() { if (!buffer->meta()->findInt32("discontinuity", &discontinuity)) { sp<RefBase> object; if (buffer->meta()->findObject("format", &object)) { - return mFormat = static_cast<MetaData*>(object.get()); + setFormat(static_cast<MetaData*>(object.get())); + return mFormat; } } @@ -129,7 +133,7 @@ status_t AnotherPacketSource::dequeueAccessUnit(sp<ABuffer> *buffer) { sp<RefBase> object; if ((*buffer)->meta()->findObject("format", &object)) { - mFormat = static_cast<MetaData*>(object.get()); + setFormat(static_cast<MetaData*>(object.get())); } return OK; @@ -164,7 +168,7 @@ status_t AnotherPacketSource::read( sp<RefBase> object; if (buffer->meta()->findObject("format", &object)) { - mFormat = static_cast<MetaData*>(object.get()); + setFormat(static_cast<MetaData*>(object.get())); } int64_t timeUs; |