blob: b4fd5d9aab3dd20ff35a79b1e7bc36c398fe9944 [file] [log] [blame]
Fedor Kudasov15e58b42019-07-04 17:52:39 +01001/*
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
Jerome Gaillard52f95ff2024-04-23 12:58:59 +010019#include <system/window.h>
20
Fedor Kudasov15e58b42019-07-04 17:52:39 +010021namespace android {
22
23class HostBufferQueue : public IGraphicBufferProducer, public IGraphicBufferConsumer {
24public:
25 HostBufferQueue() : mWidth(0), mHeight(0) { }
26
Jerome Gaillard52f95ff2024-04-23 12:58:59 +010027// Consumer
Fedor Kudasov15e58b42019-07-04 17:52:39 +010028 virtual status_t setConsumerIsProtected(bool isProtected) { return OK; }
29
30 virtual status_t detachBuffer(int slot) { return OK; }
31
32 virtual status_t getReleasedBuffers(uint64_t* slotMask) { return OK; }
33
34 virtual status_t setDefaultBufferSize(uint32_t w, uint32_t h) {
35 mWidth = w;
36 mHeight = h;
37 mBuffer = sp<GraphicBuffer>(new GraphicBuffer(mWidth, mHeight));
38 return OK;
39 }
40
41 virtual status_t setDefaultBufferFormat(PixelFormat defaultFormat) { return OK; }
42
43 virtual status_t setDefaultBufferDataSpace(android_dataspace defaultDataSpace) { return OK; }
44
45 virtual status_t discardFreeBuffers() { return OK; }
46
47 virtual status_t acquireBuffer(BufferItem* buffer, nsecs_t presentWhen,
48 uint64_t maxFrameNumber = 0) {
49 buffer->mGraphicBuffer = mBuffer;
50 buffer->mSlot = 0;
51 return OK;
52 }
53
54 virtual status_t setMaxAcquiredBufferCount(int maxAcquiredBuffers) { return OK; }
55
56 virtual status_t setConsumerUsageBits(uint64_t usage) { return OK; }
Jerome Gaillard52f95ff2024-04-23 12:58:59 +010057
58// Producer
59 virtual int query(int what, int* value) {
60 switch(what) {
61 case NATIVE_WINDOW_WIDTH:
62 *value = mWidth;
63 break;
64 case NATIVE_WINDOW_HEIGHT:
65 *value = mHeight;
66 break;
67 default:
68 *value = 0;
69 break;
70 }
71 return OK;
72 }
73
74 virtual status_t requestBuffer(int slot, sp<GraphicBuffer>* buf) {
75 *buf = mBuffer;
76 return OK;
77 }
78
Fedor Kudasov15e58b42019-07-04 17:52:39 +010079private:
80 sp<GraphicBuffer> mBuffer;
81 uint32_t mWidth;
82 uint32_t mHeight;
83};
84
85void BufferQueue::createBufferQueue(sp<IGraphicBufferProducer>* outProducer,
86 sp<IGraphicBufferConsumer>* outConsumer) {
87
88 sp<HostBufferQueue> obj(new HostBufferQueue());
89
90 *outProducer = obj;
91 *outConsumer = obj;
92}
93
94} // namespace android