diff options
Diffstat (limited to 'include/gui/BufferQueue.h')
| -rw-r--r-- | include/gui/BufferQueue.h | 119 | 
1 files changed, 19 insertions, 100 deletions
diff --git a/include/gui/BufferQueue.h b/include/gui/BufferQueue.h index 039e7b0745..ae99160181 100644 --- a/include/gui/BufferQueue.h +++ b/include/gui/BufferQueue.h @@ -40,7 +40,6 @@ public:      };      enum { NUM_BUFFER_SLOTS = 32 };      enum { NO_CONNECTED_API = 0 }; -    enum { INVALID_BUFFER_SLOT = -1 };      struct FrameAvailableListener : public virtual RefBase {          // onFrameAvailable() is called from queueBuffer() each time an @@ -120,91 +119,8 @@ public:      // connected to the specified client API.      virtual status_t disconnect(int api); -    // dump our state in a String -    virtual void dump(String8& result) const; -    virtual void dump(String8& result, const char* prefix, char* buffer, size_t SIZE) const; - -    // public facing structure for BufferSlot -    struct BufferItem { - -        BufferItem() -         : -           mTransform(0), -           mScalingMode(NATIVE_WINDOW_SCALING_MODE_FREEZE), -           mTimestamp(0), -           mFrameNumber(0), -           mBuf(INVALID_BUFFER_SLOT) { -             mCrop.makeInvalid(); -         } -        // mGraphicBuffer points to the buffer allocated for this slot or is NULL -        // if no buffer has been allocated. -        sp<GraphicBuffer> mGraphicBuffer; - -        // mCrop is the current crop rectangle for this buffer slot. This gets -        // set to mNextCrop each time queueBuffer gets called for this buffer. -        Rect mCrop; - -        // mTransform is the current transform flags for this buffer slot. This -        // gets set to mNextTransform each time queueBuffer gets called for this -        // slot. -        uint32_t mTransform; - -        // mScalingMode is the current scaling mode for this buffer slot. This -        // gets set to mNextScalingMode each time queueBuffer gets called for -        // this slot. -        uint32_t mScalingMode; - -        // mTimestamp is the current timestamp for this buffer slot. This gets -        // to set by queueBuffer each time this slot is queued. -        int64_t mTimestamp; +protected: -        // mFrameNumber is the number of the queued frame for this slot. -        uint64_t mFrameNumber; - -        // buf is the slot index of this buffer -        int mBuf; - -    }; - -    // The following public functions is the consumer facing interface - -    // acquire consumes a buffer by transferring its ownership to a consumer. -    // buffer contains the GraphicBuffer and its corresponding information. -    // buffer.mGraphicsBuffer will be NULL when the buffer has been already -    // acquired by the consumer. - -    status_t acquire(BufferItem *buffer); - -    // releaseBuffer releases a buffer slot from the consumer back to the -    // BufferQueue pending a fence sync. -    status_t releaseBuffer(int buf, EGLDisplay display, EGLSyncKHR fence); - -    // consumerDisconnect disconnects a consumer from the BufferQueue. All -    // buffers will be freed. -    status_t consumerDisconnect(); - -    // setDefaultBufferSize is used to set the size of buffers returned by -    // requestBuffers when a with and height of zero is requested. -    status_t setDefaultBufferSize(uint32_t w, uint32_t h); - -    // setBufferCountServer set the buffer count. If the client has requested -    // a buffer count using setBufferCount, the server-buffer count will -    // take effect once the client sets the count back to zero. -    status_t setBufferCountServer(int bufferCount); - -    // isSynchronousMode returns whether the SurfaceTexture is currently in -    // synchronous mode. -    bool isSynchronousMode() const; - -    // setConsumerName sets the name used in logging -    void setConsumerName(const String8& name); - -    // setFrameAvailableListener sets the listener object that will be notified -    // when a new frame becomes available. -    void setFrameAvailableListener(const sp<FrameAvailableListener>& listener); - - -private:      // freeBufferLocked frees the resources (both GraphicBuffer and EGLImage)      // for the given slot.      void freeBufferLocked(int index); @@ -229,18 +145,20 @@ private:      status_t setBufferCountServerLocked(int bufferCount); +    enum { INVALID_BUFFER_SLOT = -1 }; +      struct BufferSlot {          BufferSlot() -        : mEglDisplay(EGL_NO_DISPLAY), +        : mEglImage(EGL_NO_IMAGE_KHR), +          mEglDisplay(EGL_NO_DISPLAY),            mBufferState(BufferSlot::FREE),            mRequestBufferCalled(false),            mTransform(0),            mScalingMode(NATIVE_WINDOW_SCALING_MODE_FREEZE),            mTimestamp(0),            mFrameNumber(0), -          mFence(EGL_NO_SYNC_KHR), -          mAcquireCalled(false) { +          mFence(EGL_NO_SYNC_KHR) {              mCrop.makeInvalid();          } @@ -248,6 +166,9 @@ private:          // if no buffer has been allocated.          sp<GraphicBuffer> mGraphicBuffer; +        // mEglImage is the EGLImage created from mGraphicBuffer. +        EGLImageKHR mEglImage; +          // mEglDisplay is the EGLDisplay used to create mEglImage.          EGLDisplay mEglDisplay; @@ -257,7 +178,6 @@ private:              // FREE indicates that the buffer is not currently being used and              // will not be used in the future until it gets dequeued and              // subsequently queued by the client. -            // aka "owned by BufferQueue, ready to be dequeued"              FREE = 0,              // DEQUEUED indicates that the buffer has been dequeued by the @@ -270,7 +190,6 @@ private:              // dequeued by the client.  That means that the current buffer can              // be in either the DEQUEUED or QUEUED state.  In asynchronous mode,              // however, the current buffer is always in the QUEUED state. -            // aka "owned by producer, ready to be queued"              DEQUEUED = 1,              // QUEUED indicates that the buffer has been queued by the client, @@ -280,11 +199,7 @@ private:              // the current buffer may be dequeued by the client under some              // circumstances. See the note about the current buffer in the              // documentation for DEQUEUED. -            // aka "owned by BufferQueue, ready to be acquired"              QUEUED = 2, - -            // aka "owned by consumer, ready to be released" -            ACQUIRED = 3          };          // mBufferState is the current state of this buffer slot. @@ -321,9 +236,6 @@ private:          // to EGL_NO_SYNC_KHR when the buffer is created and (optionally, based          // on a compile-time option) set to a new sync object in updateTexImage.          EGLSyncKHR mFence; - -        // Indicates whether this buffer has been seen by a consumer yet -        bool mAcquireCalled;      };      // mSlots is the array of buffer slots that must be mirrored on the client @@ -333,6 +245,7 @@ private:      // for a slot when requestBuffer is called with that slot's index.      BufferSlot mSlots[NUM_BUFFER_SLOTS]; +      // mDefaultWidth holds the default width of allocated buffers. It is used      // in requestBuffers() if a width and height of zero is specified.      uint32_t mDefaultWidth; @@ -358,6 +271,14 @@ private:      // mServerBufferCount buffer count requested by the server-side      int mServerBufferCount; +    // mCurrentTexture is the buffer slot index of the buffer that is currently +    // bound to the OpenGL texture. It is initialized to INVALID_BUFFER_SLOT, +    // indicating that no buffer slot is currently bound to the texture. Note, +    // however, that a value of INVALID_BUFFER_SLOT does not necessarily mean +    // that no buffer is bound to the texture. A call to setBufferCount will +    // reset mCurrentTexture to INVALID_BUFFER_SLOT. +    int mCurrentTexture; +      // mNextCrop is the crop rectangle that will be used for the next buffer      // that gets queued. It is set by calling setCrop.      Rect mNextCrop; @@ -406,7 +327,7 @@ private:      // mName is a string used to identify the BufferQueue in log messages.      // It is set by the setName method. -    String8 mConsumerName; +    String8 mName;      // mMutex is the mutex used to prevent concurrent access to the member      // variables of BufferQueue objects. It must be locked whenever the @@ -416,8 +337,6 @@ private:      // mFrameCounter is the free running counter, incremented for every buffer queued      // with the surface Texture.      uint64_t mFrameCounter; - -    bool mBufferHasBeenQueued;  };  // ----------------------------------------------------------------------------  |