diff options
author | James Dong <jdong@google.com> | 2011-07-08 16:51:16 -0700 |
---|---|---|
committer | James Dong <jdong@google.com> | 2011-07-11 12:51:21 -0700 |
commit | 0e27fce92348bc765a13a94d31405069ec596426 (patch) | |
tree | 97bb27463da01c648976201f142786bfc6ea4ed7 /media | |
parent | 6dabb63307a0b63f9386d61e8444aed29db2081e (diff) | |
download | frameworks_base-0e27fce92348bc765a13a94d31405069ec596426.zip frameworks_base-0e27fce92348bc765a13a94d31405069ec596426.tar.gz frameworks_base-0e27fce92348bc765a13a94d31405069ec596426.tar.bz2 |
Do not wait for unlaunched threads in stop()
Change-Id: If681749753bb96ee98c1539658cfd919eeb0cb65
Diffstat (limited to 'media')
-rw-r--r-- | media/libstagefright/MPEG4Writer.cpp | 33 |
1 files changed, 24 insertions, 9 deletions
diff --git a/media/libstagefright/MPEG4Writer.cpp b/media/libstagefright/MPEG4Writer.cpp index f075699..eaad2c3 100644 --- a/media/libstagefright/MPEG4Writer.cpp +++ b/media/libstagefright/MPEG4Writer.cpp @@ -246,6 +246,7 @@ MPEG4Writer::MPEG4Writer(const char *filename) mIsFileSizeLimitExplicitlyRequested(false), mPaused(false), mStarted(false), + mWriterThreadStarted(false), mOffset(0), mMdatOffset(0), mEstimatedMoovBoxSize(0), @@ -269,6 +270,7 @@ MPEG4Writer::MPEG4Writer(int fd) mIsFileSizeLimitExplicitlyRequested(false), mPaused(false), mStarted(false), + mWriterThreadStarted(false), mOffset(0), mMdatOffset(0), mEstimatedMoovBoxSize(0), @@ -538,6 +540,9 @@ status_t MPEG4Writer::pause() { void MPEG4Writer::stopWriterThread() { LOGD("Stopping writer thread"); + if (!mWriterThreadStarted) { + return; + } { Mutex::Autolock autolock(mLock); @@ -548,6 +553,7 @@ void MPEG4Writer::stopWriterThread() { void *dummy; pthread_join(mThread, &dummy); + mWriterThreadStarted = false; LOGD("Writer thread stopped"); } @@ -603,10 +609,25 @@ void MPEG4Writer::writeCompositionMatrix(int degrees) { writeInt32(0x40000000); // w } +void MPEG4Writer::release() { + close(mFd); + mFd = -1; + mInitCheck = NO_INIT; + mStarted = false; +} status_t MPEG4Writer::stop() { if (mInitCheck != OK) { return OK; + } else { + if (!mWriterThreadStarted || + !mStarted) { + if (mWriterThreadStarted) { + stopWriterThread(); + } + release(); + return OK; + } } status_t err = OK; @@ -637,10 +658,7 @@ status_t MPEG4Writer::stop() { // Do not write out movie header on error. if (err != OK) { - close(mFd); - mFd = -1; - mInitCheck = NO_INIT; - mStarted = false; + release(); return err; } @@ -688,11 +706,7 @@ status_t MPEG4Writer::stop() { CHECK(mBoxes.empty()); - close(mFd); - mFd = -1; - mInitCheck = NO_INIT; - mStarted = false; - + release(); return err; } @@ -1415,6 +1429,7 @@ status_t MPEG4Writer::startWriterThread() { pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); pthread_create(&mThread, &attr, ThreadWrapper, this); pthread_attr_destroy(&attr); + mWriterThreadStarted = true; return OK; } |