1 /* 2 * Copyright (c) 2020-2022 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef GRAPHIC_LITE_BUFFER_QUEUE_CONSUMER_H 17 #define GRAPHIC_LITE_BUFFER_QUEUE_CONSUMER_H 18 19 #include "buffer_queue.h" 20 #include "surface_buffer.h" 21 22 namespace OHOS { 23 /** 24 * @brief Surface consumer abstract class. Provide acquire, release and set buffer queue ability. 25 */ 26 class BufferQueueConsumer { 27 public: 28 explicit BufferQueueConsumer(BufferQueue& bufferQueue); 29 /** 30 * @brief BufferQueueConsumer Destructor. Free all buffers. 31 */ 32 ~BufferQueueConsumer(); 33 34 /** 35 * @brief Acquire buffer. When producer has flush and push buffer to free list, 36 * Consumer acquire the buffer. 37 * @returns buffer pointer. 38 */ 39 40 SurfaceBufferImpl* AcquireBuffer(); 41 42 /** 43 * @brief Release buffer. Consumer release buffer and push to free list for producer request it. 44 * @param [in] SurfaceBufferImpl pointer, Which buffer need to release. 45 * @returns Whether release buffer succeed or not. 46 */ 47 bool ReleaseBuffer(const SurfaceBufferImpl& buffer); 48 49 /** 50 * @brief Set Buffer Queue to acquire and release buffer. 51 * @param [in] Buffer Queue pointer, Which buffer need to release. 52 */ 53 void SetBufferQueue(BufferQueue* bufferQueue); 54 55 private: 56 BufferQueue* bufferQueue_; 57 }; 58 } // end namespace 59 60 #endif 61