diff options
author | James Dong <jdong@google.com> | 2010-10-04 16:41:53 -0700 |
---|---|---|
committer | James Dong <jdong@google.com> | 2010-10-04 16:54:59 -0700 |
commit | a007e8229fb2be4866c483f9cd6c4af238a2da5e (patch) | |
tree | 48ef6f33a27a4cdba76218932db8ade197ae190e /media/libstagefright/MPEG4Writer.cpp | |
parent | 3754a7901b6bed448eaecfbd29a4705b30a6b656 (diff) | |
download | frameworks_av-a007e8229fb2be4866c483f9cd6c4af238a2da5e.zip frameworks_av-a007e8229fb2be4866c483f9cd6c4af238a2da5e.tar.gz frameworks_av-a007e8229fb2be4866c483f9cd6c4af238a2da5e.tar.bz2 |
Fixed an issue where the reserved free space in the file writer was larger than intended
The problem was that even though user does not explicitly request the max file size
limit via MediaRecorder.setMaxFileSize(), the file writer sets an implicit file
size limit if 32-bit file offset is used on user's behalf. The reserved free space
is estimated based on the file size, if the file size limit is set by the user.
The fix is to add an extra bool to tell the difference between an
explit requested file size and an implicit file limit and use that
to set the estimated moov box size accordingly.
Change-Id: I731aca6c7833aa764ed7b905edb77721577471b3
Diffstat (limited to 'media/libstagefright/MPEG4Writer.cpp')
-rw-r--r-- | media/libstagefright/MPEG4Writer.cpp | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/media/libstagefright/MPEG4Writer.cpp b/media/libstagefright/MPEG4Writer.cpp index 90b1aab..6d00d7c 100644 --- a/media/libstagefright/MPEG4Writer.cpp +++ b/media/libstagefright/MPEG4Writer.cpp @@ -212,6 +212,7 @@ MPEG4Writer::MPEG4Writer(const char *filename) : mFile(fopen(filename, "wb")), mUse4ByteNalLength(true), mUse32BitOffset(true), + mIsFileSizeLimitExplicitlyRequested(false), mPaused(false), mStarted(false), mOffset(0), @@ -225,6 +226,7 @@ MPEG4Writer::MPEG4Writer(int fd) : mFile(fdopen(fd, "wb")), mUse4ByteNalLength(true), mUse32BitOffset(true), + mIsFileSizeLimitExplicitlyRequested(false), mPaused(false), mStarted(false), mOffset(0), @@ -322,7 +324,7 @@ int64_t MPEG4Writer::estimateMoovBoxSize(int32_t bitRate) { static const int64_t MAX_MOOV_BOX_SIZE = (180 * 3000000 * 6LL / 8000); int64_t size = MIN_MOOV_BOX_SIZE; - if (mMaxFileSizeLimitBytes != 0) { + if (mMaxFileSizeLimitBytes != 0 && mIsFileSizeLimitExplicitlyRequested) { size = mMaxFileSizeLimitBytes * 4 / 1000; } else if (mMaxFileDurationLimitUs != 0) { if (bitRate <= 0) { @@ -342,7 +344,7 @@ int64_t MPEG4Writer::estimateMoovBoxSize(int32_t bitRate) { size = MAX_MOOV_BOX_SIZE; } - LOGV("limits: %lld/%lld bytes/us, bit rate: %d bps and the estimated" + LOGI("limits: %lld/%lld bytes/us, bit rate: %d bps and the estimated" " moov size %lld bytes", mMaxFileSizeLimitBytes, mMaxFileDurationLimitUs, bitRate, size); return factor * size; @@ -353,6 +355,16 @@ status_t MPEG4Writer::start(MetaData *param) { return UNKNOWN_ERROR; } + /* + * Check mMaxFileSizeLimitBytes at the beginning + * since mMaxFileSizeLimitBytes may be implicitly + * changed later for 32-bit file offset even if + * user does not ask to set it explicitly. + */ + if (mMaxFileSizeLimitBytes != 0) { + mIsFileSizeLimitExplicitlyRequested = true; + } + int32_t use64BitOffset; if (param && param->findInt32(kKey64BitFileOffset, &use64BitOffset) && |