• 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 #ifndef ANDROID_GUI_BUFFERITEMCONSUMER_H
18 #define ANDROID_GUI_BUFFERITEMCONSUMER_H
19 
20 #include <com_android_graphics_libgui_flags.h>
21 #include <gui/BufferQueue.h>
22 #include <gui/ConsumerBase.h>
23 #include <gui/IGraphicBufferConsumer.h>
24 #include <utils/RefBase.h>
25 
26 namespace android {
27 
28 class BufferItemConsumer : public ConsumerBase {
29 public:
30     BufferItemConsumer(const sp<IGraphicBufferConsumer>& consumer, uint64_t consumerUsage,
31                        int bufferCount = -1, bool controlledByApp = false)
mConsumer(consumer)32           : mConsumer(consumer) {}
33 
34 #if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ)
35     BufferItemConsumer(uint64_t consumerUsage, int bufferCount = -1,
36                        bool controlledByApp = false, bool isConsumerSurfaceFlinger = false) {
37         sp<IGraphicBufferProducer> producer;
38         BufferQueue::createBufferQueue(&producer, &mConsumer);
39         mSurface = sp<Surface>::make(producer, controlledByApp);
40     }
41 
setConsumerIsProtected(bool isProtected)42     status_t setConsumerIsProtected(bool isProtected) {
43         return OK;
44     }
45 #endif // COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ)
46 
47     status_t acquireBuffer(BufferItem* item, nsecs_t presentWhen, bool waitForFence = true) {
48         return mConsumer->acquireBuffer(item, presentWhen, 0);
49     }
50 
attachBuffer(BufferItem *,const sp<GraphicBuffer> &)51     status_t attachBuffer(BufferItem*, const sp<GraphicBuffer>&) {
52         return INVALID_OPERATION;
53     }
54 
55     status_t releaseBuffer(const BufferItem& item,
56                            const sp<Fence>& releaseFence = Fence::NO_FENCE) {
57         return OK;
58     }
59 
setName(const String8 & name)60     void setName(const String8& name) {}
61 
setFrameAvailableListener(const wp<FrameAvailableListener> & listener)62     void setFrameAvailableListener(const wp<FrameAvailableListener>& listener) {}
63 
setDefaultBufferSize(uint32_t width,uint32_t height)64     status_t setDefaultBufferSize(uint32_t width, uint32_t height) {
65         return mConsumer->setDefaultBufferSize(width, height);
66     }
67 
setDefaultBufferFormat(PixelFormat defaultFormat)68     status_t setDefaultBufferFormat(PixelFormat defaultFormat) {
69         return mConsumer->setDefaultBufferFormat(defaultFormat);
70     }
71 
setDefaultBufferDataSpace(android_dataspace defaultDataSpace)72     status_t setDefaultBufferDataSpace(android_dataspace defaultDataSpace) {
73         return mConsumer->setDefaultBufferDataSpace(defaultDataSpace);
74     }
75 
abandon()76     void abandon() {}
77 
detachBuffer(int slot)78     status_t detachBuffer(int slot) {
79         return OK;
80     }
81 
discardFreeBuffers()82     status_t discardFreeBuffers() {
83         return OK;
84     }
85 
freeBufferLocked(int slotIndex)86     void freeBufferLocked(int slotIndex) {}
87 
addReleaseFenceLocked(int slot,const sp<GraphicBuffer> graphicBuffer,const sp<Fence> & fence)88     status_t addReleaseFenceLocked(int slot, const sp<GraphicBuffer> graphicBuffer,
89                                    const sp<Fence>& fence) {
90         return OK;
91     }
92 
93 #if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ)
94 // Returns a Surface that can be used as the producer for this consumer.
getSurface()95     sp<Surface> getSurface() const {
96         return mSurface;
97     }
98 #endif // COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ)
99 
100 private:
101     sp<IGraphicBufferConsumer> mConsumer;
102 #if COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ)
103         // This Surface wraps the IGraphicBufferConsumer created for this
104     // ConsumerBase.
105     sp<Surface> mSurface;
106 #endif // COM_ANDROID_GRAPHICS_LIBGUI_FLAGS(WB_CONSUMER_BASE_OWNS_BQ)
107 };
108 
109 } // namespace android
110 
111 #endif // ANDROID_GUI_BUFFERITEMCONSUMER_H
112