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
43typedef 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
67void 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)
71WORD32 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
77void* 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
82WORD32 ihevc_buf_mgr_check_free(
83                buf_mgr_t *ps_buf_mgr);
84
85// mask will have who released it: DISP:REF:DEC
86WORD32 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
92WORD32 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
98UWORD32 ihevc_buf_mgr_get_status(
99                buf_mgr_t *ps_buf_mgr,
100                WORD32 id);
101
102// pass the ID - buffer will be returned
103void* ihevc_buf_mgr_get_buf(
104                buf_mgr_t *ps_buf_mgr,
105                WORD32 id);
106
107// will return number of active buffers
108UWORD32 ihevc_buf_mgr_get_num_active_buf(
109                buf_mgr_t *ps_buf_mgr);
110
111
112
113#endif  //_BUF_MGR_H_
114