diff options
Diffstat (limited to 'include/gui/ISurfaceTexture.h')
-rw-r--r-- | include/gui/ISurfaceTexture.h | 35 |
1 files changed, 27 insertions, 8 deletions
diff --git a/include/gui/ISurfaceTexture.h b/include/gui/ISurfaceTexture.h index 1e33764..8b4025d 100644 --- a/include/gui/ISurfaceTexture.h +++ b/include/gui/ISurfaceTexture.h @@ -25,6 +25,7 @@ #include <binder/IInterface.h> +#include <ui/Fence.h> #include <ui/GraphicBuffer.h> #include <ui/Rect.h> @@ -67,8 +68,13 @@ protected: // in the contents of its associated buffer contents and call queueBuffer. // If dequeueBuffer return BUFFER_NEEDS_REALLOCATION, the client is // expected to call requestBuffer immediately. - virtual status_t dequeueBuffer(int *slot, uint32_t w, uint32_t h, - uint32_t format, uint32_t usage) = 0; + // + // The fence parameter will be updated to hold the fence associated with + // the buffer. The contents of the buffer must not be overwritten until the + // fence signals. If the fence is NULL, the buffer may be written + // immediately. + virtual status_t dequeueBuffer(int *slot, sp<Fence>& fence, + uint32_t w, uint32_t h, uint32_t format, uint32_t usage) = 0; // queueBuffer indicates that the client has finished filling in the // contents of the buffer associated with slot and transfers ownership of @@ -83,24 +89,37 @@ protected: // and height of the window and current transform applied to buffers, // respectively. - // QueueBufferInput must be a POD structure - struct QueueBufferInput { + struct QueueBufferInput : public Flattenable { + inline QueueBufferInput(const Parcel& parcel); inline QueueBufferInput(int64_t timestamp, - const Rect& crop, int scalingMode, uint32_t transform) + const Rect& crop, int scalingMode, uint32_t transform, + sp<Fence> fence) : timestamp(timestamp), crop(crop), scalingMode(scalingMode), - transform(transform) { } + transform(transform), fence(fence) { } inline void deflate(int64_t* outTimestamp, Rect* outCrop, - int* outScalingMode, uint32_t* outTransform) const { + int* outScalingMode, uint32_t* outTransform, + sp<Fence>* outFence) const { *outTimestamp = timestamp; *outCrop = crop; *outScalingMode = scalingMode; *outTransform = transform; + *outFence = fence; } + + // Flattenable interface + virtual size_t getFlattenedSize() const; + virtual size_t getFdCount() const; + virtual status_t flatten(void* buffer, size_t size, + int fds[], size_t count) const; + virtual status_t unflatten(void const* buffer, size_t size, + int fds[], size_t count); + private: int64_t timestamp; Rect crop; int scalingMode; uint32_t transform; + sp<Fence> fence; }; // QueueBufferOutput must be a POD structure @@ -135,7 +154,7 @@ protected: // cancelBuffer indicates that the client does not wish to fill in the // buffer associated with slot and transfers ownership of the slot back to // the server. - virtual void cancelBuffer(int slot) = 0; + virtual void cancelBuffer(int slot, sp<Fence> fence) = 0; // query retrieves some information for this surface // 'what' tokens allowed are that of android_natives.h |