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