1 /*
2  * Copyright (c) 2022 Huawei Device Co., Ltd.
3  *
4  * HDF is dual licensed: you can use it either under the terms of
5  * the GPL, or the BSD license, at your option.
6  * See the LICENSE file in the root of this repository for complete details.
7  */
8 
9 #ifndef CAMERA_BUFFER_MANAGER_H
10 #define CAMERA_BUFFER_MANAGER_H
11 
12 #include <hdf_dlist.h>
13 #include <osal_atomic.h>
14 #include <osal_mutex.h>
15 #include <osal_spinlock.h>
16 #include <camera/camera_product.h>
17 #include "camera_buffer_manager_adapter.h"
18 #include "camera_buffer.h"
19 
20 /* extern used function */
21 int32_t BufferQueueFindPlaneByOffset(struct BufferQueue *queue,
22     unsigned long off, uint32_t *bufferId, uint32_t *planeId);
23 void CameraBufferDone(struct CameraBuffer *buffer, enum BufferState state);
24 void *CameraBufferGetPlaneVaddr(struct CameraBuffer *buffer, uint32_t planeId);
25 
26 /* init queue */
27 int32_t BufferQueueInit(struct BufferQueue *queue);
28 /* request buffers */
29 int32_t BufferQueueRequest(struct BufferQueue *queue, struct UserCameraReq *userRequest);
30 /* query buffer */
31 int32_t BufferQueueQueryBuffer(struct BufferQueue *queue, struct UserCameraBuffer *userBuffer);
32 /* return buffer */
33 int32_t BufferQueueReturnBuffer(struct BufferQueue *queue, struct UserCameraBuffer *userBuffer);
34 /* acquire buffer */
35 int32_t BufferQueueAcquireBuffer(struct BufferQueue *queue, struct UserCameraBuffer *userBuffer);
36 /* stream on */
37 int32_t BufferQueueStreamOn(struct BufferQueue *queue);
38 /* stream off */
39 int32_t BufferQueueStreamOff(struct BufferQueue *queue);
40 /* set curent queue for mmap */
41 void BufferQueueSetQueueForMmap(struct BufferQueue *queue);
42 /* get curent queue for mmap */
43 struct BufferQueue *BufferQueueGetQueueForMmap(void);
44 
45 #endif  // CAMERA_BUFFER_MANAGER_H