diff options
| author | 2010-06-23 10:32:53 -0700 | |
|---|---|---|
| committer | 2010-06-23 10:32:53 -0700 | |
| commit | 84d000e3c4d8883afec1e47662f719c6119cfefc (patch) | |
| tree | 92d3dba26a8dbfaa55e6d14c2f8872e00b4fbb13 | |
| parent | 320742b15a710ede57862eee170945da26ef0172 (diff) | |
| parent | 9666d3c0e7fc8ca98b4f5744d8427d008a79e698 (diff) | |
am 9666d3c0: am 750600a1: Merge "Single track optimization" into gingerbread
Merge commit '9666d3c0e7fc8ca98b4f5744d8427d008a79e698'
* commit '9666d3c0e7fc8ca98b4f5744d8427d008a79e698':
Single track optimization
| -rw-r--r-- | include/media/stagefright/MPEG4Writer.h | 1 | ||||
| -rw-r--r-- | media/libstagefright/MPEG4Writer.cpp | 20 |
2 files changed, 20 insertions, 1 deletions
diff --git a/include/media/stagefright/MPEG4Writer.h b/include/media/stagefright/MPEG4Writer.h index 9812e41d9161..d62df46297e2 100644 --- a/include/media/stagefright/MPEG4Writer.h +++ b/include/media/stagefright/MPEG4Writer.h @@ -81,6 +81,7 @@ private: void setStartTimestampUs(int64_t timeUs); int64_t getStartTimestampUs(); // Not const status_t startTracks(); + size_t numTracks(); void lock(); void unlock(); diff --git a/media/libstagefright/MPEG4Writer.cpp b/media/libstagefright/MPEG4Writer.cpp index b6bbde7f22fd..cd20ec7ca792 100644 --- a/media/libstagefright/MPEG4Writer.cpp +++ b/media/libstagefright/MPEG4Writer.cpp @@ -559,6 +559,11 @@ int64_t MPEG4Writer::getStartTimestampUs() { return mStartTimestampUs; } +size_t MPEG4Writer::numTracks() { + Mutex::Autolock autolock(mLock); + return mTracks.size(); +} + //////////////////////////////////////////////////////////////////////////////// MPEG4Writer::Track::Track( @@ -979,6 +984,16 @@ void MPEG4Writer::Track::threadEntry() { mStssTableEntries.push_back(mSampleInfos.size()); } + if (mOwner->numTracks() == 1) { + off_t offset = is_avc? mOwner->addLengthPrefixedSample_l(copy) + : mOwner->addSample_l(copy); + if (mChunkOffsets.empty()) { + mChunkOffsets.push_back(offset); + } + copy->release(); + copy = NULL; + continue; + } mChunkSamples.push_back(copy); if (interleaveDurationUs == 0) { @@ -1012,7 +1027,10 @@ void MPEG4Writer::Track::threadEntry() { } // Last chunk - if (!mChunkSamples.empty()) { + if (mOwner->numTracks() == 1) { + StscTableEntry stscEntry(1, mSampleInfos.size(), 1); + mStscTableEntries.push_back(stscEntry); + } else if (!mChunkSamples.empty()) { ++nChunks; StscTableEntry stscEntry(nChunks, mChunkSamples.size(), 1); mStscTableEntries.push_back(stscEntry); |