OSDN Git Service

Remove fixed USAGE_HW_TEXTURE flag from BufferQueue.
authorEino-Ville Talvala <etalvala@google.com>
Fri, 13 Apr 2012 22:16:31 +0000 (15:16 -0700)
committerEino-Ville Talvala <etalvala@google.com>
Wed, 18 Apr 2012 17:56:06 +0000 (10:56 -0700)
USAGE_HW_TEXTURE applies to SurfaceTexture, not to all uses of
BufferQueue. Refactor accordingly.

Change-Id: Ic7add5e1f2bbec3d3e796ba7f15eaa0633945d8f

include/gui/SurfaceTexture.h
libs/gui/BufferQueue.cpp
libs/gui/SurfaceTexture.cpp

index 1a0d779..3699cdf 100644 (file)
@@ -257,6 +257,12 @@ private:
     // before the outstanding accesses have completed.
     status_t syncForReleaseLocked(EGLDisplay dpy);
 
+    // The default consumer usage flags that SurfaceTexture always sets on its
+    // BufferQueue instance; these will be OR:d with any additional flags passed
+    // from the SurfaceTexture user. In particular, SurfaceTexture will always
+    // consume buffers as hardware textures.
+    static const uint32_t DEFAULT_USAGE_FLAGS = GraphicBuffer::USAGE_HW_TEXTURE;
+
     // mCurrentTextureBuf is the graphic buffer of the current texture. It's
     // possible that this buffer is not associated with any buffer slot, so we
     // must track it separately in order to support the getCurrentBuffer method.
index ece0494..c851e86 100644 (file)
@@ -450,7 +450,6 @@ status_t BufferQueue::dequeueBuffer(int *outBuf, uint32_t w, uint32_t h,
             (uint32_t(buffer->format) != format) ||
             ((uint32_t(buffer->usage) & usage) != usage))
         {
-            usage |= GraphicBuffer::USAGE_HW_TEXTURE;
             status_t error;
             sp<GraphicBuffer> graphicBuffer(
                     mGraphicBufferAlloc->createGraphicBuffer(
index a6ee971..a6e8dbf 100644 (file)
@@ -150,6 +150,7 @@ SurfaceTexture::SurfaceTexture(GLuint tex, bool allowSynchronousMode,
                 strerror(-err), err);
     } else {
         mBufferQueue->setConsumerName(mName);
+        mBufferQueue->setConsumerUsageBits(DEFAULT_USAGE_FLAGS);
     }
 }
 
@@ -720,6 +721,7 @@ status_t SurfaceTexture::setDefaultBufferFormat(uint32_t defaultFormat) {
 
 status_t SurfaceTexture::setConsumerUsageBits(uint32_t usage) {
     Mutex::Autolock lock(mMutex);
+    usage |= DEFAULT_USAGE_FLAGS;
     return mBufferQueue->setConsumerUsageBits(usage);
 }