summaryrefslogtreecommitdiffstats
path: root/media
diff options
context:
space:
mode:
authorJamie Gennis <jgennis@google.com>2012-08-30 18:30:05 -0700
committerAndroid Git Automerger <android-git-automerger@android.com>2012-08-30 18:30:05 -0700
commit6ad3c8582085c8008c6fd01b76db27ac0be200a1 (patch)
treea602e3e189a593f2684c5d4f453c96e65088f08a /media
parentfdca11917d73c21971054aa8cb9fc9ae28fa3164 (diff)
parentc95733ea17815bade8b8734000b14bd8513efc51 (diff)
downloadframeworks_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.cpp28
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;