BufferQueue: Allow returning interfaces as I*/Bn*

This adds a second createBufferQueue method that returns
sp<IGraphicBuffer*> interfaces instead of sp<BnGraphicBuffer*>, since
most clients don't actually need the Binderized versions (but some
might).

Change-Id: Iaf4f719c96ddb6f704afc75cf52be22588173e32
This commit is contained in:
Dan Stoza 2014-03-12 10:17:20 -07:00
parent c9ed7d3768
commit f522af7eb6
2 changed files with 22 additions and 4 deletions

View File

@ -106,14 +106,19 @@ public:
wp<ConsumerListener> mConsumerListener; wp<ConsumerListener> mConsumerListener;
}; };
static void createBufferQueue(sp<BnGraphicBufferProducer>* outProducer,
sp<BnGraphicBufferConsumer>* outConsumer,
const sp<IGraphicBufferAlloc>& allocator = NULL);
// BufferQueue manages a pool of gralloc memory slots to be used by // BufferQueue manages a pool of gralloc memory slots to be used by
// producers and consumers. allocator is used to allocate all the // producers and consumers. allocator is used to allocate all the
// needed gralloc buffers. // needed gralloc buffers.
BufferQueue(const sp<IGraphicBufferAlloc>& allocator = NULL); BufferQueue(const sp<IGraphicBufferAlloc>& allocator = NULL);
static void createBufferQueue(sp<BnGraphicBufferProducer>* outProducer,
sp<BnGraphicBufferConsumer>* outConsumer,
const sp<IGraphicBufferAlloc>& allocator = NULL);
static void createBufferQueue(sp<IGraphicBufferProducer>* outProducer,
sp<IGraphicBufferConsumer>* outConsumer,
const sp<IGraphicBufferAlloc>& allocator = NULL);
virtual ~BufferQueue(); virtual ~BufferQueue();
/* /*

View File

@ -56,6 +56,19 @@ void BufferQueue::createBufferQueue(sp<BnGraphicBufferProducer>* outProducer,
*outConsumer = new BufferQueueConsumer(core); *outConsumer = new BufferQueueConsumer(core);
} }
void BufferQueue::createBufferQueue(sp<IGraphicBufferProducer>* outProducer,
sp<IGraphicBufferConsumer>* outConsumer,
const sp<IGraphicBufferAlloc>& allocator) {
LOG_ALWAYS_FATAL_IF(outProducer == NULL,
"BufferQueue: outProducer must not be NULL");
LOG_ALWAYS_FATAL_IF(outConsumer == NULL,
"BufferQueue: outConsumer must not be NULL");
sp<BufferQueueCore> core(new BufferQueueCore(allocator));
*outProducer = new BufferQueueProducer(core);
*outConsumer = new BufferQueueConsumer(core);
}
BufferQueue::BufferQueue(const sp<IGraphicBufferAlloc>& allocator) : BufferQueue::BufferQueue(const sp<IGraphicBufferAlloc>& allocator) :
mProducer(), mProducer(),
mConsumer() mConsumer()