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