blob: ef5406250251e080132c6bb7f5882fe06285c6dd [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) {
Jerome Gaillardeae382b2025-03-06 12:01:17 +000032 mBuffer.clear();
Jerome Gaillardc935f272024-04-23 14:26:29 +010033 return OK;
34 }
Fedor Kudasov15e58b42019-07-04 17:52:39 +010035
Jerome Gaillardc935f272024-04-23 14:26:29 +010036 virtual status_t getReleasedBuffers(uint64_t* slotMask) {
37 return OK;
38 }
Fedor Kudasov15e58b42019-07-04 17:52:39 +010039
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
Jerome Gaillardc935f272024-04-23 14:26:29 +010047 virtual status_t setDefaultBufferFormat(PixelFormat defaultFormat) {
48 return OK;
49 }
Fedor Kudasov15e58b42019-07-04 17:52:39 +010050
Jerome Gaillardc935f272024-04-23 14:26:29 +010051 virtual status_t setDefaultBufferDataSpace(android_dataspace defaultDataSpace) {
52 return OK;
53 }
Fedor Kudasov15e58b42019-07-04 17:52:39 +010054
Jerome Gaillardc935f272024-04-23 14:26:29 +010055 virtual status_t discardFreeBuffers() {
56 return OK;
57 }
Fedor Kudasov15e58b42019-07-04 17:52:39 +010058
59 virtual status_t acquireBuffer(BufferItem* buffer, nsecs_t presentWhen,
Jerome Gaillardc935f272024-04-23 14:26:29 +010060 uint64_t maxFrameNumber = 0) {
Fedor Kudasov15e58b42019-07-04 17:52:39 +010061 buffer->mGraphicBuffer = mBuffer;
62 buffer->mSlot = 0;
63 return OK;
64 }
65
Jerome Gaillardc935f272024-04-23 14:26:29 +010066 virtual status_t setMaxAcquiredBufferCount(int maxAcquiredBuffers) {
67 return OK;
68 }
Fedor Kudasov15e58b42019-07-04 17:52:39 +010069
Jerome Gaillardc935f272024-04-23 14:26:29 +010070 virtual status_t setConsumerUsageBits(uint64_t usage) {
71 return OK;
72 }
Jerome Gaillard52f95ff2024-04-23 12:58:59 +010073
Jerome Gaillardc935f272024-04-23 14:26:29 +010074 // Producer
Jerome Gaillard52f95ff2024-04-23 12:58:59 +010075 virtual int query(int what, int* value) {
Jerome Gaillardc935f272024-04-23 14:26:29 +010076 switch (what) {
Jerome Gaillard52f95ff2024-04-23 12:58:59 +010077 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
90 virtual status_t requestBuffer(int slot, sp<GraphicBuffer>* buf) {
91 *buf = mBuffer;
92 return OK;
93 }
94
Fedor Kudasov15e58b42019-07-04 17:52:39 +010095private:
96 sp<GraphicBuffer> mBuffer;
97 uint32_t mWidth;
98 uint32_t mHeight;
99};
100
101void BufferQueue::createBufferQueue(sp<IGraphicBufferProducer>* outProducer,
Jerome Gaillardc935f272024-04-23 14:26:29 +0100102 sp<IGraphicBufferConsumer>* outConsumer) {
Fedor Kudasov15e58b42019-07-04 17:52:39 +0100103 sp<HostBufferQueue> obj(new HostBufferQueue());
104
105 *outProducer = obj;
106 *outConsumer = obj;
107}
108
109} // namespace android