diff options
| author | Andreas Huber <andih@google.com> | 2012-09-05 08:38:34 -0700 |
|---|---|---|
| committer | Android Git Automerger <android-git-automerger@android.com> | 2012-09-05 08:38:34 -0700 |
| commit | 2316c56dc9311a1b66c93ce7e3da6e243c412450 (patch) | |
| tree | 6fbee0fc78013f46a2cd6e0d3e0b02ff11f169a9 | |
| parent | 05e73de0664765a144414e73d4fcf4e1caf3c0f3 (diff) | |
| parent | 6c75ad21705cde0a11f78c755dc70bdec76890e6 (diff) | |
| download | frameworks_av-2316c56dc9311a1b66c93ce7e3da6e243c412450.zip frameworks_av-2316c56dc9311a1b66c93ce7e3da6e243c412450.tar.gz frameworks_av-2316c56dc9311a1b66c93ce7e3da6e243c412450.tar.bz2 | |
am 6c75ad21: Merge "Configure the SurfaceMediaSource to emit the same number of buffers" into jb-mr1-dev
* commit '6c75ad21705cde0a11f78c755dc70bdec76890e6':
Configure the SurfaceMediaSource to emit the same number of buffers
5 files changed, 28 insertions, 21 deletions
diff --git a/include/media/stagefright/SurfaceMediaSource.h b/include/media/stagefright/SurfaceMediaSource.h index 724c68d..840b4aa 100644 --- a/include/media/stagefright/SurfaceMediaSource.h +++ b/include/media/stagefright/SurfaceMediaSource.h @@ -111,6 +111,9 @@ public: sp<BufferQueue> getBufferQueue() const { return mBufferQueue; } + // To be called before start() + status_t setMaxAcquiredBufferCount(size_t count); + protected: // Implementation of the BufferQueue::ConsumerListener interface. These diff --git a/media/libstagefright/SurfaceMediaSource.cpp b/media/libstagefright/SurfaceMediaSource.cpp index c478b28..867f76d 100644 --- a/media/libstagefright/SurfaceMediaSource.cpp +++ b/media/libstagefright/SurfaceMediaSource.cpp @@ -167,6 +167,10 @@ status_t SurfaceMediaSource::start(MetaData *params) return OK; } +status_t SurfaceMediaSource::setMaxAcquiredBufferCount(size_t count) { + return mBufferQueue->setMaxAcquiredBufferCount(count); +} + status_t SurfaceMediaSource::stop() { diff --git a/media/libstagefright/wifi-display/source/Converter.cpp b/media/libstagefright/wifi-display/source/Converter.cpp index ee05e45..b8b8688 100644 --- a/media/libstagefright/wifi-display/source/Converter.cpp +++ b/media/libstagefright/wifi-display/source/Converter.cpp @@ -54,6 +54,10 @@ status_t Converter::initCheck() const { return mInitCheck; } +size_t Converter::getInputBufferCount() const { + return mEncoderInputBuffers.size(); +} + sp<AMessage> Converter::getOutputFormat() const { return mOutputFormat; } diff --git a/media/libstagefright/wifi-display/source/Converter.h b/media/libstagefright/wifi-display/source/Converter.h index 6700a32..67471c7 100644 --- a/media/libstagefright/wifi-display/source/Converter.h +++ b/media/libstagefright/wifi-display/source/Converter.h @@ -36,6 +36,8 @@ struct Converter : public AHandler { status_t initCheck() const; + size_t getInputBufferCount() const; + sp<AMessage> getOutputFormat() const; void feedAccessUnit(const sp<ABuffer> &accessUnit); diff --git a/media/libstagefright/wifi-display/source/PlaybackSession.cpp b/media/libstagefright/wifi-display/source/PlaybackSession.cpp index f9223d6..c9d6562 100644 --- a/media/libstagefright/wifi-display/source/PlaybackSession.cpp +++ b/media/libstagefright/wifi-display/source/PlaybackSession.cpp @@ -600,27 +600,6 @@ status_t WifiDisplaySource::PlaybackSession::setupPacketizer() { // sp<SurfaceMediaSource> source = new SurfaceMediaSource(info.w, info.h); sp<SurfaceMediaSource> source = new SurfaceMediaSource(720, 1280); - sp<IServiceManager> sm = defaultServiceManager(); - sp<IBinder> binder = sm->getService(String16("SurfaceFlinger")); - sp<ISurfaceComposer> service = interface_cast<ISurfaceComposer>(binder); - CHECK(service != NULL); - - service->connectDisplay(source->getBufferQueue()); - -#if 0 - { - ALOGI("reading buffer"); - - CHECK_EQ((status_t)OK, source->start()); - MediaBuffer *mbuf; - CHECK_EQ((status_t)OK, source->read(&mbuf)); - mbuf->release(); - mbuf = NULL; - - ALOGI("got buffer"); - } -#endif - #if 0 ssize_t index = mSerializer->addSource(source); #else @@ -644,10 +623,25 @@ status_t WifiDisplaySource::PlaybackSession::setupPacketizer() { sp<Converter> converter = new Converter(notify, mCodecLooper, format); + CHECK_EQ(converter->initCheck(), (status_t)OK); + + size_t numInputBuffers = converter->getInputBufferCount(); + ALOGI("numInputBuffers to the encoder is %d", numInputBuffers); looper()->registerHandler(converter); mTracks.add(index, new Track(converter)); + + sp<IServiceManager> sm = defaultServiceManager(); + sp<IBinder> binder = sm->getService(String16("SurfaceFlinger")); + sp<ISurfaceComposer> service = interface_cast<ISurfaceComposer>(binder); + CHECK(service != NULL); + + // Add one reference to account for the serializer. + err = source->setMaxAcquiredBufferCount(numInputBuffers + 1); + CHECK_EQ(err, (status_t)OK); + + service->connectDisplay(source->getBufferQueue()); #endif #if 0 |
