blob: 7e14b88a47fa394023a0cf9c91efb1021963b5e9 [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>
Jerome Gaillard52f95ff2024-04-23 12:58:59 +010018#include <system/window.h>
19
Fedor Kudasov15e58b42019-07-04 17:52:39 +010020namespace android {
21
22class HostBufferQueue : public IGraphicBufferProducer, public IGraphicBufferConsumer {
23public:
Jerome Gaillardc935f272024-04-23 14:26:29 +010024 HostBufferQueue() : mWidth(0), mHeight(0) {}
Fedor Kudasov15e58b42019-07-04 17:52:39 +010025
Jerome Gaillardc935f272024-04-23 14:26:29 +010026 // Consumer
27 virtual status_t setConsumerIsProtected(bool isProtected) {
28 return OK;
29 }
Fedor Kudasov15e58b42019-07-04 17:52:39 +010030
Jerome Gaillardc935f272024-04-23 14:26:29 +010031 virtual status_t detachBuffer(int slot) {
32 return OK;
33 }
Fedor Kudasov15e58b42019-07-04 17:52:39 +010034
Jerome Gaillardc935f272024-04-23 14:26:29 +010035 virtual status_t getReleasedBuffers(uint64_t* slotMask) {
36 return OK;
37 }
Fedor Kudasov15e58b42019-07-04 17:52:39 +010038
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
Jerome Gaillardc935f272024-04-23 14:26:29 +010046 virtual status_t setDefaultBufferFormat(PixelFormat defaultFormat) {
47 return OK;
48 }
Fedor Kudasov15e58b42019-07-04 17:52:39 +010049
Jerome Gaillardc935f272024-04-23 14:26:29 +010050 virtual status_t setDefaultBufferDataSpace(android_dataspace defaultDataSpace) {
51 return OK;
52 }
Fedor Kudasov15e58b42019-07-04 17:52:39 +010053
Jerome Gaillardc935f272024-04-23 14:26:29 +010054 virtual status_t discardFreeBuffers() {
55 return OK;
56 }
Fedor Kudasov15e58b42019-07-04 17:52:39 +010057
58 virtual status_t acquireBuffer(BufferItem* buffer, nsecs_t presentWhen,
Jerome Gaillardc935f272024-04-23 14:26:29 +010059 uint64_t maxFrameNumber = 0) {
Fedor Kudasov15e58b42019-07-04 17:52:39 +010060 buffer->mGraphicBuffer = mBuffer;
61 buffer->mSlot = 0;
62 return OK;
63 }
64
Jerome Gaillardc935f272024-04-23 14:26:29 +010065 virtual status_t setMaxAcquiredBufferCount(int maxAcquiredBuffers) {
66 return OK;
67 }
Fedor Kudasov15e58b42019-07-04 17:52:39 +010068
Jerome Gaillardc935f272024-04-23 14:26:29 +010069 virtual status_t setConsumerUsageBits(uint64_t usage) {
70 return OK;
71 }
Jerome Gaillard52f95ff2024-04-23 12:58:59 +010072
Jerome Gaillardc935f272024-04-23 14:26:29 +010073 // Producer
Jerome Gaillard52f95ff2024-04-23 12:58:59 +010074 virtual int query(int what, int* value) {
Jerome Gaillardc935f272024-04-23 14:26:29 +010075 switch (what) {
Jerome Gaillard52f95ff2024-04-23 12:58:59 +010076 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
89 virtual status_t requestBuffer(int slot, sp<GraphicBuffer>* buf) {
90 *buf = mBuffer;
91 return OK;
92 }
93
Fedor Kudasov15e58b42019-07-04 17:52:39 +010094private:
95 sp<GraphicBuffer> mBuffer;
96 uint32_t mWidth;
97 uint32_t mHeight;
98};
99
100void BufferQueue::createBufferQueue(sp<IGraphicBufferProducer>* outProducer,
Jerome Gaillardc935f272024-04-23 14:26:29 +0100101 sp<IGraphicBufferConsumer>* outConsumer) {
Fedor Kudasov15e58b42019-07-04 17:52:39 +0100102 sp<HostBufferQueue> obj(new HostBufferQueue());
103
104 *outProducer = obj;
105 *outConsumer = obj;
106}
107
108} // namespace android