BlastBufferQueue: Handle queue to window composer queries
When queuing protected buffers, libstagefright queries
ANativeWindow to check if the ANativeWindow sends buffers
directly to SurfaceFlinger. This check works by verifying
the IGBP matches one of the tracked IGBPs in SurfaceFlinger.
This does not apply to blast layers since SurfaceFlinger does
not create IGBPs and there may not be any IGBP used to
submit buffers. To fix this for the blast adapter, we query the
blast buffer queue producer to see if it queues to
SurfaceFlinger.
Bug: b/175904021, b/168917217
Test: atest BlastBufferQueueTest
Test: Play protected content via Google Play on AndroidTV
Change-Id: Id1affce09742c6b438c7499b525615b8bd294b9a
diff --git a/libs/gui/BLASTBufferQueue.cpp b/libs/gui/BLASTBufferQueue.cpp
index ee5552f..89de629 100644
--- a/libs/gui/BLASTBufferQueue.cpp
+++ b/libs/gui/BLASTBufferQueue.cpp
@@ -600,6 +600,14 @@
return BufferQueueProducer::connect(new AsyncProducerListener(listener), api,
producerControlledByApp, output);
}
+
+ int query(int what, int* value) override {
+ if (what == NATIVE_WINDOW_QUEUES_TO_WINDOW_COMPOSER) {
+ *value = 1;
+ return NO_ERROR;
+ }
+ return BufferQueueProducer::query(what, value);
+ }
};
// Similar to BufferQueue::createBufferQueue but creates an adapter specific bufferqueue producer.