1 /*
2 * Copyright (C) 2019 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 #include <gui/BufferQueue.h>
18 #include <system/window.h>
19
20 namespace android {
21
22 class HostBufferQueue : public IGraphicBufferProducer, public IGraphicBufferConsumer {
23 public:
HostBufferQueue()24 HostBufferQueue() : mWidth(0), mHeight(0) {}
25
26 // Consumer
setConsumerIsProtected(bool isProtected)27 virtual status_t setConsumerIsProtected(bool isProtected) {
28 return OK;
29 }
30
detachBuffer(int slot)31 virtual status_t detachBuffer(int slot) {
32 return OK;
33 }
34
getReleasedBuffers(uint64_t * slotMask)35 virtual status_t getReleasedBuffers(uint64_t* slotMask) {
36 return OK;
37 }
38
setDefaultBufferSize(uint32_t w,uint32_t h)39 virtual status_t setDefaultBufferSize(uint32_t w, uint32_t h) {
40 mWidth = w;
41 mHeight = h;
42 mBuffer = sp<GraphicBuffer>(new GraphicBuffer(mWidth, mHeight));
43 return OK;
44 }
45
setDefaultBufferFormat(PixelFormat defaultFormat)46 virtual status_t setDefaultBufferFormat(PixelFormat defaultFormat) {
47 return OK;
48 }
49
setDefaultBufferDataSpace(android_dataspace defaultDataSpace)50 virtual status_t setDefaultBufferDataSpace(android_dataspace defaultDataSpace) {
51 return OK;
52 }
53
discardFreeBuffers()54 virtual status_t discardFreeBuffers() {
55 return OK;
56 }
57
acquireBuffer(BufferItem * buffer,nsecs_t presentWhen,uint64_t maxFrameNumber=0)58 virtual status_t acquireBuffer(BufferItem* buffer, nsecs_t presentWhen,
59 uint64_t maxFrameNumber = 0) {
60 buffer->mGraphicBuffer = mBuffer;
61 buffer->mSlot = 0;
62 return OK;
63 }
64
setMaxAcquiredBufferCount(int maxAcquiredBuffers)65 virtual status_t setMaxAcquiredBufferCount(int maxAcquiredBuffers) {
66 return OK;
67 }
68
setConsumerUsageBits(uint64_t usage)69 virtual status_t setConsumerUsageBits(uint64_t usage) {
70 return OK;
71 }
72
73 // Producer
query(int what,int * value)74 virtual int query(int what, int* value) {
75 switch (what) {
76 case NATIVE_WINDOW_WIDTH:
77 *value = mWidth;
78 break;
79 case NATIVE_WINDOW_HEIGHT:
80 *value = mHeight;
81 break;
82 default:
83 *value = 0;
84 break;
85 }
86 return OK;
87 }
88
requestBuffer(int slot,sp<GraphicBuffer> * buf)89 virtual status_t requestBuffer(int slot, sp<GraphicBuffer>* buf) {
90 *buf = mBuffer;
91 return OK;
92 }
93
94 private:
95 sp<GraphicBuffer> mBuffer;
96 uint32_t mWidth;
97 uint32_t mHeight;
98 };
99
createBufferQueue(sp<IGraphicBufferProducer> * outProducer,sp<IGraphicBufferConsumer> * outConsumer)100 void BufferQueue::createBufferQueue(sp<IGraphicBufferProducer>* outProducer,
101 sp<IGraphicBufferConsumer>* outConsumer) {
102 sp<HostBufferQueue> obj(new HostBufferQueue());
103
104 *outProducer = obj;
105 *outConsumer = obj;
106 }
107
108 } // namespace android
109