summaryrefslogtreecommitdiffstats
path: root/media/libstagefright
diff options
context:
space:
mode:
authorAndreas Huber <andih@google.com>2010-12-22 10:03:04 -0800
committerAndreas Huber <andih@google.com>2010-12-22 10:03:04 -0800
commit53df1a460bcfdd129ca2bc416dee2009e35c042e (patch)
treeab7d4a70f4a09211ba62f4725c7eb735ccf10587 /media/libstagefright
parentdf42f949c8bd05b81d94633767514fff88f52062 (diff)
downloadframeworks_av-53df1a460bcfdd129ca2bc416dee2009e35c042e.zip
frameworks_av-53df1a460bcfdd129ca2bc416dee2009e35c042e.tar.gz
frameworks_av-53df1a460bcfdd129ca2bc416dee2009e35c042e.tar.bz2
Distinguish discontinuities w/ a format change from those without.
Shutdown decoders as needed in anticipation of a format change, otherwise just flush. Change-Id: Ieb04f8aa8658569b091409c4903075fd496e5abb
Diffstat (limited to 'media/libstagefright')
-rw-r--r--media/libstagefright/mpeg2ts/ATSParser.cpp4
-rw-r--r--media/libstagefright/mpeg2ts/AnotherPacketSource.cpp8
-rw-r--r--media/libstagefright/mpeg2ts/AnotherPacketSource.h2
3 files changed, 8 insertions, 6 deletions
diff --git a/media/libstagefright/mpeg2ts/ATSParser.cpp b/media/libstagefright/mpeg2ts/ATSParser.cpp
index afacb2e..ee9b573 100644
--- a/media/libstagefright/mpeg2ts/ATSParser.cpp
+++ b/media/libstagefright/mpeg2ts/ATSParser.cpp
@@ -334,7 +334,7 @@ void ATSParser::Stream::signalDiscontinuity(DiscontinuityType type) {
if (mStreamType == 0x1b && mSource != NULL) {
// Don't signal discontinuities on audio streams.
- mSource->queueDiscontinuity();
+ mSource->queueDiscontinuity(true /* formatChange */);
}
break;
}
@@ -348,7 +348,7 @@ void ATSParser::Stream::signalDiscontinuity(DiscontinuityType type) {
if (mSource != NULL) {
mSource->clear();
- mSource->queueDiscontinuity();
+ mSource->queueDiscontinuity(!isASeek);
}
break;
}
diff --git a/media/libstagefright/mpeg2ts/AnotherPacketSource.cpp b/media/libstagefright/mpeg2ts/AnotherPacketSource.cpp
index 7a1d5b0..a8fe2c1 100644
--- a/media/libstagefright/mpeg2ts/AnotherPacketSource.cpp
+++ b/media/libstagefright/mpeg2ts/AnotherPacketSource.cpp
@@ -63,8 +63,6 @@ status_t AnotherPacketSource::dequeueAccessUnit(sp<ABuffer> *buffer) {
int32_t discontinuity;
if ((*buffer)->meta()->findInt32("discontinuity", &discontinuity)
&& discontinuity) {
- buffer->clear();
-
return INFO_DISCONTINUITY;
}
@@ -125,10 +123,14 @@ void AnotherPacketSource::queueAccessUnit(const sp<ABuffer> &buffer) {
mCondition.signal();
}
-void AnotherPacketSource::queueDiscontinuity() {
+void AnotherPacketSource::queueDiscontinuity(bool formatChange) {
sp<ABuffer> buffer = new ABuffer(0);
buffer->meta()->setInt32("discontinuity", true);
+ if (formatChange) {
+ buffer->meta()->setInt32("format-change", true);
+ }
+
Mutex::Autolock autoLock(mLock);
mBuffers.push_back(buffer);
diff --git a/media/libstagefright/mpeg2ts/AnotherPacketSource.h b/media/libstagefright/mpeg2ts/AnotherPacketSource.h
index 2bc7404..f25a067 100644
--- a/media/libstagefright/mpeg2ts/AnotherPacketSource.h
+++ b/media/libstagefright/mpeg2ts/AnotherPacketSource.h
@@ -42,7 +42,7 @@ struct AnotherPacketSource : public MediaSource {
status_t nextBufferTime(int64_t *timeUs);
void queueAccessUnit(const sp<ABuffer> &buffer);
- void queueDiscontinuity();
+ void queueDiscontinuity(bool formatChange);
void signalEOS(status_t result);
void clear();