1 /******************************************************************************
2 *
3 * Copyright (C) 2012 Ittiam Systems Pvt Ltd, Bangalore
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at:
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 *
17 ******************************************************************************/
18 /**
19 *******************************************************************************
20 * @file
21 *  ihevc_buf_mgr.h
22 *
23 * @brief
24 *  Function declarations used for buffer management
25 *
26 * @author
27 *  Srinivas T
28 *
29 * @remarks
30 *  None
31 *
32 *******************************************************************************
33 */
34 #ifndef _BUF_MGR_H_
35 #define _BUF_MGR_H_
36 
37 #define BUF_MGR_MAX_CNT 64
38 
39 #define BUF_MGR_DEC         1
40 #define BUF_MGR_REF         (1 << 1)
41 #define BUF_MGR_DISP        (1 << 2)
42 
43 typedef struct
44 {
45     /**
46      * max_buf_cnt
47      */
48     UWORD32 u4_max_buf_cnt;
49 
50     /**
51      * active_buf_cnt
52      */
53     UWORD32 u4_active_buf_cnt;
54     /**
55      *  au4_status[BUF_MGR_MAX_CNT]
56      */
57     UWORD32 au4_status[BUF_MGR_MAX_CNT];
58     /* The last three bit of status are:    */
59     /* Bit 0 - DEC                          */
60     /* Bit 1 - REF                          */
61     /* Bit 2 - DISP                         */
62 
63     void    *apv_ptr[BUF_MGR_MAX_CNT];
64 }buf_mgr_t;
65 
66 // intializes the buffer API structure
67 void ihevc_buf_mgr_init(
68                 buf_mgr_t *ps_buf_mgr);
69 
70 // Add buffer to buffer manager. 0: success, -1: fail (u4_active_buf_cnt has reached u4_max_buf_cnt)
71 WORD32 ihevc_buf_mgr_add(
72                 buf_mgr_t *ps_buf_mgr,
73                 void *pv_ptr,
74                 WORD32 buf_id);
75 
76 // this function will set the buffer status to DEC
77 void* ihevc_buf_mgr_get_next_free(
78                 buf_mgr_t *ps_buf_mgr,
79                 WORD32 *pi4_id);
80 
81 // this function will check if there are any free buffers
82 WORD32 ihevc_buf_mgr_check_free(
83                 buf_mgr_t *ps_buf_mgr);
84 
85 // mask will have who released it: DISP:REF:DEC
86 WORD32 ihevc_buf_mgr_release(
87                 buf_mgr_t *ps_buf_mgr,
88                 WORD32 id,
89                 UWORD32 mask);
90 
91 // sets the status to one or all of DISP:REF:DEC
92 WORD32 ihevc_buf_mgr_set_status(
93                 buf_mgr_t *ps_buf_mgr,
94                 WORD32 id,
95                 UWORD32 mask);
96 
97 // Gets status of the buffer
98 UWORD32 ihevc_buf_mgr_get_status(
99                 buf_mgr_t *ps_buf_mgr,
100                 WORD32 id);
101 
102 // pass the ID - buffer will be returned
103 void* ihevc_buf_mgr_get_buf(
104                 buf_mgr_t *ps_buf_mgr,
105                 WORD32 id);
106 
107 // will return number of active buffers
108 UWORD32 ihevc_buf_mgr_get_num_active_buf(
109                 buf_mgr_t *ps_buf_mgr);
110 
111 
112 
113 #endif  //_BUF_MGR_H_
114