diff options
author | Jamie Gennis <jgennis@google.com> | 2012-08-30 18:30:05 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2012-08-30 18:30:05 -0700 |
commit | 6ad3c8582085c8008c6fd01b76db27ac0be200a1 (patch) | |
tree | a602e3e189a593f2684c5d4f453c96e65088f08a /media | |
parent | fdca11917d73c21971054aa8cb9fc9ae28fa3164 (diff) | |
parent | c95733ea17815bade8b8734000b14bd8513efc51 (diff) | |
download | frameworks_av-6ad3c8582085c8008c6fd01b76db27ac0be200a1.zip frameworks_av-6ad3c8582085c8008c6fd01b76db27ac0be200a1.tar.gz frameworks_av-6ad3c8582085c8008c6fd01b76db27ac0be200a1.tar.bz2 |
am 5262df1f: am 64d7b68f: Merge "Don\'t hard code the number of buffers for SurfaceMediaSource" into jb-mr1-dev
* commit '5262df1fd48ed6c4a350124a6319d664e838a8a6':
Don't hard code the number of buffers for SurfaceMediaSource
Diffstat (limited to 'media')
-rw-r--r-- | media/libstagefright/SurfaceMediaSource.cpp | 28 |
1 files changed, 25 insertions, 3 deletions
diff --git a/media/libstagefright/SurfaceMediaSource.cpp b/media/libstagefright/SurfaceMediaSource.cpp index f5c8c93..c478b28 100644 --- a/media/libstagefright/SurfaceMediaSource.cpp +++ b/media/libstagefright/SurfaceMediaSource.cpp @@ -52,7 +52,7 @@ SurfaceMediaSource::SurfaceMediaSource(uint32_t bufferWidth, uint32_t bufferHeig ALOGE("Invalid dimensions %dx%d", bufferWidth, bufferHeight); } - mBufferQueue = new BufferQueue(true, MIN_UNDEQUEUED_BUFFERS); + mBufferQueue = new BufferQueue(true); mBufferQueue->setDefaultBufferSize(bufferWidth, bufferHeight); mBufferQueue->setSynchronousMode(true); mBufferQueue->setConsumerUsageBits(GRALLOC_USAGE_HW_VIDEO_ENCODER | @@ -136,10 +136,32 @@ status_t SurfaceMediaSource::start(MetaData *params) { ALOGV("start"); + Mutex::Autolock lock(mMutex); + mStartTimeNs = 0; int64_t startTimeUs; - if (params && params->findInt64(kKeyTime, &startTimeUs)) { - mStartTimeNs = startTimeUs * 1000; + int32_t bufferCount = 0; + if (params) { + if (params->findInt64(kKeyTime, &startTimeUs)) { + mStartTimeNs = startTimeUs * 1000; + } + + if (!params->findInt32(kKeyNumBuffers, &bufferCount)) { + ALOGE("Failed to find the advertised buffer count"); + return UNKNOWN_ERROR; + } + + if (bufferCount <= 1) { + ALOGE("bufferCount %d is too small", bufferCount); + return BAD_VALUE; + } + } + + if (bufferCount != 0) { + status_t err = mBufferQueue->setMaxAcquiredBufferCount(bufferCount); + if (err != OK) { + return err; + } } return OK; |