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