| Dan Stoza | 289ade1 | 2014-02-28 11:17:17 -0800 | [diff] [blame] | 1 | /* | 
|  | 2 | * Copyright 2014 The Android Open Source Project | 
|  | 3 | * | 
|  | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); | 
|  | 5 | * you may not use this file except in compliance with the License. | 
|  | 6 | * You may obtain a copy of the License at | 
|  | 7 | * | 
|  | 8 | *      http://www.apache.org/licenses/LICENSE-2.0 | 
|  | 9 | * | 
|  | 10 | * Unless required by applicable law or agreed to in writing, software | 
|  | 11 | * distributed under the License is distributed on an "AS IS" BASIS, | 
|  | 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
|  | 13 | * See the License for the specific language governing permissions and | 
|  | 14 | * limitations under the License. | 
|  | 15 | */ | 
|  | 16 |  | 
|  | 17 | #ifndef ANDROID_GUI_BUFFERITEM_H | 
|  | 18 | #define ANDROID_GUI_BUFFERITEM_H | 
|  | 19 |  | 
|  | 20 | #include <EGL/egl.h> | 
|  | 21 | #include <EGL/eglext.h> | 
|  | 22 |  | 
|  | 23 | #include <gui/IGraphicBufferConsumer.h> | 
|  | 24 |  | 
|  | 25 | #include <ui/Rect.h> | 
|  | 26 |  | 
|  | 27 | #include <utils/Flattenable.h> | 
|  | 28 | #include <utils/StrongPointer.h> | 
|  | 29 |  | 
|  | 30 | namespace android { | 
|  | 31 |  | 
|  | 32 | class Fence; | 
|  | 33 | class GraphicBuffer; | 
|  | 34 |  | 
|  | 35 | class BufferItem : public Flattenable<BufferItem> { | 
|  | 36 | friend class Flattenable<BufferItem>; | 
|  | 37 | size_t getPodSize() const; | 
|  | 38 | size_t getFlattenedSize() const; | 
|  | 39 | size_t getFdCount() const; | 
|  | 40 | status_t flatten(void*& buffer, size_t& size, int*& fds, size_t& count) const; | 
|  | 41 | status_t unflatten(void const*& buffer, size_t& size, int const*& fds, size_t& count); | 
|  | 42 |  | 
|  | 43 | public: | 
|  | 44 | // The default value of mBuf, used to indicate this doesn't correspond to a slot. | 
|  | 45 | enum { INVALID_BUFFER_SLOT = -1 }; | 
|  | 46 | BufferItem(); | 
| Dan Stoza | 8dc5539 | 2014-11-04 11:37:46 -0800 | [diff] [blame] | 47 | ~BufferItem(); | 
| Dan Stoza | 289ade1 | 2014-02-28 11:17:17 -0800 | [diff] [blame] | 48 | operator IGraphicBufferConsumer::BufferItem() const; | 
|  | 49 |  | 
|  | 50 | static const char* scalingModeName(uint32_t scalingMode); | 
|  | 51 |  | 
|  | 52 | // mGraphicBuffer points to the buffer allocated for this slot, or is NULL | 
|  | 53 | // if the buffer in this slot has been acquired in the past (see | 
|  | 54 | // BufferSlot.mAcquireCalled). | 
|  | 55 | sp<GraphicBuffer> mGraphicBuffer; | 
|  | 56 |  | 
|  | 57 | // mFence is a fence that will signal when the buffer is idle. | 
|  | 58 | sp<Fence> mFence; | 
|  | 59 |  | 
|  | 60 | // mCrop is the current crop rectangle for this buffer slot. | 
|  | 61 | Rect mCrop; | 
|  | 62 |  | 
|  | 63 | // mTransform is the current transform flags for this buffer slot. | 
|  | 64 | // refer to NATIVE_WINDOW_TRANSFORM_* in <window.h> | 
|  | 65 | uint32_t mTransform; | 
|  | 66 |  | 
|  | 67 | // mScalingMode is the current scaling mode for this buffer slot. | 
|  | 68 | // refer to NATIVE_WINDOW_SCALING_* in <window.h> | 
|  | 69 | uint32_t mScalingMode; | 
|  | 70 |  | 
|  | 71 | // mTimestamp is the current timestamp for this buffer slot. This gets | 
|  | 72 | // to set by queueBuffer each time this slot is queued. This value | 
|  | 73 | // is guaranteed to be monotonically increasing for each newly | 
|  | 74 | // acquired buffer. | 
|  | 75 | int64_t mTimestamp; | 
|  | 76 |  | 
|  | 77 | // mIsAutoTimestamp indicates whether mTimestamp was generated | 
|  | 78 | // automatically when the buffer was queued. | 
|  | 79 | bool mIsAutoTimestamp; | 
|  | 80 |  | 
|  | 81 | // mFrameNumber is the number of the queued frame for this slot. | 
|  | 82 | uint64_t mFrameNumber; | 
|  | 83 |  | 
|  | 84 | // mSlot is the slot index of this buffer (default INVALID_BUFFER_SLOT). | 
|  | 85 | int mSlot; | 
|  | 86 |  | 
|  | 87 | // mIsDroppable whether this buffer was queued with the | 
|  | 88 | // property that it can be replaced by a new buffer for the purpose of | 
|  | 89 | // making sure dequeueBuffer() won't block. | 
|  | 90 | // i.e.: was the BufferQueue in "mDequeueBufferCannotBlock" when this buffer | 
|  | 91 | // was queued. | 
|  | 92 | bool mIsDroppable; | 
|  | 93 |  | 
|  | 94 | // Indicates whether this buffer has been seen by a consumer yet | 
|  | 95 | bool mAcquireCalled; | 
|  | 96 |  | 
|  | 97 | // Indicates this buffer must be transformed by the inverse transform of the screen | 
|  | 98 | // it is displayed onto. This is applied after mTransform. | 
|  | 99 | bool mTransformToDisplayInverse; | 
|  | 100 | }; | 
|  | 101 |  | 
|  | 102 | } // namespace android | 
|  | 103 |  | 
|  | 104 | #endif |