diff options
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 |