summaryrefslogtreecommitdiffstats
path: root/media/libstagefright/SurfaceMediaSource.cpp
diff options
context:
space:
mode:
authorJames Dong <jdong@google.com>2012-08-23 09:23:07 -0700
committerJamie Gennis <jgennis@google.com>2012-08-30 13:33:10 -0700
commit56fc8fb5437e08131a84063041183d5ce8a678cc (patch)
tree5518284ca9efd7f5f43f5f4d6f927265fe9cd8b2 /media/libstagefright/SurfaceMediaSource.cpp
parent6db33a9272da8f011be1c51675220b81655fd470 (diff)
downloadframeworks_av-56fc8fb5437e08131a84063041183d5ce8a678cc.zip
frameworks_av-56fc8fb5437e08131a84063041183d5ce8a678cc.tar.gz
frameworks_av-56fc8fb5437e08131a84063041183d5ce8a678cc.tar.bz2
Don't hard code the number of buffers for SurfaceMediaSource
Change-Id: I9ce17b3dc82a5d3e4a66569c76ad9745ceedacd6
Diffstat (limited to 'media/libstagefright/SurfaceMediaSource.cpp')
-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;