• Home
  • History
  • Annotate
  • 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         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