• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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