1*495ae853SAndroid Build Coastguard Worker /******************************************************************************
2*495ae853SAndroid Build Coastguard Worker *
3*495ae853SAndroid Build Coastguard Worker * Copyright (C) 2015 The Android Open Source Project
4*495ae853SAndroid Build Coastguard Worker *
5*495ae853SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
6*495ae853SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
7*495ae853SAndroid Build Coastguard Worker * You may obtain a copy of the License at:
8*495ae853SAndroid Build Coastguard Worker *
9*495ae853SAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0
10*495ae853SAndroid Build Coastguard Worker *
11*495ae853SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
12*495ae853SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
13*495ae853SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*495ae853SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
15*495ae853SAndroid Build Coastguard Worker * limitations under the License.
16*495ae853SAndroid Build Coastguard Worker *
17*495ae853SAndroid Build Coastguard Worker *****************************************************************************
18*495ae853SAndroid Build Coastguard Worker * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
19*495ae853SAndroid Build Coastguard Worker */
20*495ae853SAndroid Build Coastguard Worker
21*495ae853SAndroid Build Coastguard Worker /**
22*495ae853SAndroid Build Coastguard Worker *******************************************************************************
23*495ae853SAndroid Build Coastguard Worker * @file
24*495ae853SAndroid Build Coastguard Worker * ih264_buf_mgr.c
25*495ae853SAndroid Build Coastguard Worker *
26*495ae853SAndroid Build Coastguard Worker * @brief
27*495ae853SAndroid Build Coastguard Worker * Contains function definitions for buffer management
28*495ae853SAndroid Build Coastguard Worker *
29*495ae853SAndroid Build Coastguard Worker * @author
30*495ae853SAndroid Build Coastguard Worker * ittiam
31*495ae853SAndroid Build Coastguard Worker *
32*495ae853SAndroid Build Coastguard Worker * @par List of Functions:
33*495ae853SAndroid Build Coastguard Worker * - ih264_buf_mgr_size
34*495ae853SAndroid Build Coastguard Worker * - ih264_buf_mgr_lock
35*495ae853SAndroid Build Coastguard Worker * - ih264_buf_mgr_unlock
36*495ae853SAndroid Build Coastguard Worker * - ih264_buf_mgr_yield
37*495ae853SAndroid Build Coastguard Worker * - ih264_buf_mgr_free
38*495ae853SAndroid Build Coastguard Worker * - ih264_buf_mgr_init
39*495ae853SAndroid Build Coastguard Worker * - ih264_buf_mgr_add
40*495ae853SAndroid Build Coastguard Worker * - ih264_buf_mgr_get_next_free
41*495ae853SAndroid Build Coastguard Worker * - ih264_buf_mgr_check_free
42*495ae853SAndroid Build Coastguard Worker * - ih264_buf_mgr_release
43*495ae853SAndroid Build Coastguard Worker * - ih264_buf_mgr_set_status
44*495ae853SAndroid Build Coastguard Worker * - ih264_buf_mgr_get_status
45*495ae853SAndroid Build Coastguard Worker * - ih264_buf_mgr_get_buf
46*495ae853SAndroid Build Coastguard Worker * - ih264_buf_mgr_get_bufid
47*495ae853SAndroid Build Coastguard Worker * - ih264_buf_mgr_get_num_active_buf
48*495ae853SAndroid Build Coastguard Worker *
49*495ae853SAndroid Build Coastguard Worker * @remarks
50*495ae853SAndroid Build Coastguard Worker * none
51*495ae853SAndroid Build Coastguard Worker *
52*495ae853SAndroid Build Coastguard Worker *******************************************************************************
53*495ae853SAndroid Build Coastguard Worker */
54*495ae853SAndroid Build Coastguard Worker
55*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
56*495ae853SAndroid Build Coastguard Worker /* File Includes */
57*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
58*495ae853SAndroid Build Coastguard Worker
59*495ae853SAndroid Build Coastguard Worker /* System Include Files */
60*495ae853SAndroid Build Coastguard Worker #include <stdio.h>
61*495ae853SAndroid Build Coastguard Worker #include <stdlib.h>
62*495ae853SAndroid Build Coastguard Worker
63*495ae853SAndroid Build Coastguard Worker /* User Include Files */
64*495ae853SAndroid Build Coastguard Worker #include "ih264_typedefs.h"
65*495ae853SAndroid Build Coastguard Worker #include "ithread.h"
66*495ae853SAndroid Build Coastguard Worker #include "ih264_macros.h"
67*495ae853SAndroid Build Coastguard Worker #include "ih264_error.h"
68*495ae853SAndroid Build Coastguard Worker #include "ih264_defs.h"
69*495ae853SAndroid Build Coastguard Worker #include "ih264_buf_mgr.h"
70*495ae853SAndroid Build Coastguard Worker
71*495ae853SAndroid Build Coastguard Worker
72*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
73*495ae853SAndroid Build Coastguard Worker /* Function Definitions */
74*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
75*495ae853SAndroid Build Coastguard Worker
76*495ae853SAndroid Build Coastguard Worker /**
77*495ae853SAndroid Build Coastguard Worker *******************************************************************************
78*495ae853SAndroid Build Coastguard Worker *
79*495ae853SAndroid Build Coastguard Worker * @brief Returns size for buffer queue context. Does not include the size of the
80*495ae853SAndroid Build Coastguard Worker * actual buffers that are stored here.
81*495ae853SAndroid Build Coastguard Worker *
82*495ae853SAndroid Build Coastguard Worker * @par Description
83*495ae853SAndroid Build Coastguard Worker * Returns size for buf queue context. Does not include the size of the
84*495ae853SAndroid Build Coastguard Worker * actual buffers that are stored here.
85*495ae853SAndroid Build Coastguard Worker *
86*495ae853SAndroid Build Coastguard Worker * @returns Size of the buf queue context
87*495ae853SAndroid Build Coastguard Worker *
88*495ae853SAndroid Build Coastguard Worker * @remarks none
89*495ae853SAndroid Build Coastguard Worker *
90*495ae853SAndroid Build Coastguard Worker *******************************************************************************
91*495ae853SAndroid Build Coastguard Worker */
ih264_buf_mgr_size(void)92*495ae853SAndroid Build Coastguard Worker WORD32 ih264_buf_mgr_size(void)
93*495ae853SAndroid Build Coastguard Worker {
94*495ae853SAndroid Build Coastguard Worker WORD32 size;
95*495ae853SAndroid Build Coastguard Worker
96*495ae853SAndroid Build Coastguard Worker size = sizeof(buf_mgr_t);
97*495ae853SAndroid Build Coastguard Worker size += ithread_get_mutex_lock_size();
98*495ae853SAndroid Build Coastguard Worker
99*495ae853SAndroid Build Coastguard Worker return size;
100*495ae853SAndroid Build Coastguard Worker }
101*495ae853SAndroid Build Coastguard Worker
102*495ae853SAndroid Build Coastguard Worker /**
103*495ae853SAndroid Build Coastguard Worker *******************************************************************************
104*495ae853SAndroid Build Coastguard Worker *
105*495ae853SAndroid Build Coastguard Worker * @brief Locks the buffer manager context
106*495ae853SAndroid Build Coastguard Worker *
107*495ae853SAndroid Build Coastguard Worker * @par Description
108*495ae853SAndroid Build Coastguard Worker * Locks the buffer manager context by calling ithread_mutex_lock()
109*495ae853SAndroid Build Coastguard Worker *
110*495ae853SAndroid Build Coastguard Worker * @param[in] ps_buf_mgr
111*495ae853SAndroid Build Coastguard Worker * Pointer to the buffer manager
112*495ae853SAndroid Build Coastguard Worker *
113*495ae853SAndroid Build Coastguard Worker * @returns IH264_FAIL if mutex lock fails else IH264_SUCCESS
114*495ae853SAndroid Build Coastguard Worker *
115*495ae853SAndroid Build Coastguard Worker * @remarks none
116*495ae853SAndroid Build Coastguard Worker *
117*495ae853SAndroid Build Coastguard Worker *******************************************************************************
118*495ae853SAndroid Build Coastguard Worker */
ih264_buf_mgr_lock(buf_mgr_t * ps_buf_mgr)119*495ae853SAndroid Build Coastguard Worker IH264_ERROR_T ih264_buf_mgr_lock(buf_mgr_t *ps_buf_mgr)
120*495ae853SAndroid Build Coastguard Worker {
121*495ae853SAndroid Build Coastguard Worker WORD32 retval;
122*495ae853SAndroid Build Coastguard Worker
123*495ae853SAndroid Build Coastguard Worker retval = ithread_mutex_lock(ps_buf_mgr->pv_mutex);
124*495ae853SAndroid Build Coastguard Worker if(retval)
125*495ae853SAndroid Build Coastguard Worker return IH264_FAIL;
126*495ae853SAndroid Build Coastguard Worker return IH264_SUCCESS;
127*495ae853SAndroid Build Coastguard Worker }
128*495ae853SAndroid Build Coastguard Worker
129*495ae853SAndroid Build Coastguard Worker /**
130*495ae853SAndroid Build Coastguard Worker *******************************************************************************
131*495ae853SAndroid Build Coastguard Worker *
132*495ae853SAndroid Build Coastguard Worker * @brief Unlocks the buffer manager context
133*495ae853SAndroid Build Coastguard Worker *
134*495ae853SAndroid Build Coastguard Worker * @par Description
135*495ae853SAndroid Build Coastguard Worker * Unlocks the buffer manager context by calling ithread_mutex_unlock()
136*495ae853SAndroid Build Coastguard Worker *
137*495ae853SAndroid Build Coastguard Worker * @param[in] ps_buf_mgr
138*495ae853SAndroid Build Coastguard Worker * Pointer to the buffer manager
139*495ae853SAndroid Build Coastguard Worker *
140*495ae853SAndroid Build Coastguard Worker * @returns IH264_FAIL if mutex unlock fails else IH264_SUCCESS
141*495ae853SAndroid Build Coastguard Worker *
142*495ae853SAndroid Build Coastguard Worker * @remarks
143*495ae853SAndroid Build Coastguard Worker *
144*495ae853SAndroid Build Coastguard Worker *******************************************************************************
145*495ae853SAndroid Build Coastguard Worker */
ih264_buf_mgr_unlock(buf_mgr_t * ps_buf_mgr)146*495ae853SAndroid Build Coastguard Worker IH264_ERROR_T ih264_buf_mgr_unlock(buf_mgr_t *ps_buf_mgr)
147*495ae853SAndroid Build Coastguard Worker {
148*495ae853SAndroid Build Coastguard Worker WORD32 retval;
149*495ae853SAndroid Build Coastguard Worker
150*495ae853SAndroid Build Coastguard Worker retval = ithread_mutex_unlock(ps_buf_mgr->pv_mutex);
151*495ae853SAndroid Build Coastguard Worker if(retval)
152*495ae853SAndroid Build Coastguard Worker return IH264_FAIL;
153*495ae853SAndroid Build Coastguard Worker return IH264_SUCCESS;
154*495ae853SAndroid Build Coastguard Worker }
155*495ae853SAndroid Build Coastguard Worker
156*495ae853SAndroid Build Coastguard Worker /**
157*495ae853SAndroid Build Coastguard Worker *******************************************************************************
158*495ae853SAndroid Build Coastguard Worker *
159*495ae853SAndroid Build Coastguard Worker * @brief Yields the thread
160*495ae853SAndroid Build Coastguard Worker *
161*495ae853SAndroid Build Coastguard Worker * @par Description
162*495ae853SAndroid Build Coastguard Worker * Unlocks the buf_mgr context by calling ih264_buf_mgr_unlock(),
163*495ae853SAndroid Build Coastguard Worker * ithread_yield() and then ih264_buf_mgr_lock(). buf_mgr is unlocked before to
164*495ae853SAndroid Build Coastguard Worker * ensure the buf_mgr can be accessed by other threads. If unlock is not done
165*495ae853SAndroid Build Coastguard Worker * before calling yield then no other thread can access the buf_mgr functions
166*495ae853SAndroid Build Coastguard Worker * and update buf_mgr.
167*495ae853SAndroid Build Coastguard Worker *
168*495ae853SAndroid Build Coastguard Worker * @param[in] ps_buf_mgr
169*495ae853SAndroid Build Coastguard Worker * Pointer to the buffer manager
170*495ae853SAndroid Build Coastguard Worker *
171*495ae853SAndroid Build Coastguard Worker * @returns IH264_FAIL if mutex lock unlock or yield fails else IH264_SUCCESS
172*495ae853SAndroid Build Coastguard Worker *
173*495ae853SAndroid Build Coastguard Worker * @remarks
174*495ae853SAndroid Build Coastguard Worker *
175*495ae853SAndroid Build Coastguard Worker *******************************************************************************
176*495ae853SAndroid Build Coastguard Worker */
ih264_buf_mgr_yield(buf_mgr_t * ps_buf_mgr)177*495ae853SAndroid Build Coastguard Worker IH264_ERROR_T ih264_buf_mgr_yield(buf_mgr_t *ps_buf_mgr)
178*495ae853SAndroid Build Coastguard Worker {
179*495ae853SAndroid Build Coastguard Worker IH264_ERROR_T ret;
180*495ae853SAndroid Build Coastguard Worker
181*495ae853SAndroid Build Coastguard Worker ret = ih264_buf_mgr_unlock(ps_buf_mgr);
182*495ae853SAndroid Build Coastguard Worker RETURN_IF((ret != IH264_SUCCESS), ret);
183*495ae853SAndroid Build Coastguard Worker
184*495ae853SAndroid Build Coastguard Worker //ithread_usleep(10);
185*495ae853SAndroid Build Coastguard Worker ithread_yield();
186*495ae853SAndroid Build Coastguard Worker
187*495ae853SAndroid Build Coastguard Worker ret = ih264_buf_mgr_lock(ps_buf_mgr);
188*495ae853SAndroid Build Coastguard Worker RETURN_IF((ret != IH264_SUCCESS), ret);
189*495ae853SAndroid Build Coastguard Worker return IH264_SUCCESS;
190*495ae853SAndroid Build Coastguard Worker }
191*495ae853SAndroid Build Coastguard Worker
192*495ae853SAndroid Build Coastguard Worker /**
193*495ae853SAndroid Build Coastguard Worker *******************************************************************************
194*495ae853SAndroid Build Coastguard Worker *
195*495ae853SAndroid Build Coastguard Worker * @brief frees the buffer manager context
196*495ae853SAndroid Build Coastguard Worker *
197*495ae853SAndroid Build Coastguard Worker * @par Description
198*495ae853SAndroid Build Coastguard Worker * Frees the buffer manager context
199*495ae853SAndroid Build Coastguard Worker *
200*495ae853SAndroid Build Coastguard Worker * @param[in] ps_buf_mgr
201*495ae853SAndroid Build Coastguard Worker * Pointer to the buffer manager
202*495ae853SAndroid Build Coastguard Worker *
203*495ae853SAndroid Build Coastguard Worker * @returns IH264_FAIL if mutex destory fails else IH264_SUCCESS
204*495ae853SAndroid Build Coastguard Worker *
205*495ae853SAndroid Build Coastguard Worker * @remarks
206*495ae853SAndroid Build Coastguard Worker * Since it will be called only once by master thread this is not thread safe.
207*495ae853SAndroid Build Coastguard Worker *
208*495ae853SAndroid Build Coastguard Worker *******************************************************************************
209*495ae853SAndroid Build Coastguard Worker */
ih264_buf_mgr_free(buf_mgr_t * ps_buf_mgr)210*495ae853SAndroid Build Coastguard Worker IH264_ERROR_T ih264_buf_mgr_free(buf_mgr_t *ps_buf_mgr)
211*495ae853SAndroid Build Coastguard Worker {
212*495ae853SAndroid Build Coastguard Worker WORD32 ret;
213*495ae853SAndroid Build Coastguard Worker
214*495ae853SAndroid Build Coastguard Worker ret = ithread_mutex_destroy(ps_buf_mgr->pv_mutex);
215*495ae853SAndroid Build Coastguard Worker if(0 == ret)
216*495ae853SAndroid Build Coastguard Worker return IH264_SUCCESS;
217*495ae853SAndroid Build Coastguard Worker return IH264_FAIL;
218*495ae853SAndroid Build Coastguard Worker }
219*495ae853SAndroid Build Coastguard Worker
220*495ae853SAndroid Build Coastguard Worker /**
221*495ae853SAndroid Build Coastguard Worker *******************************************************************************
222*495ae853SAndroid Build Coastguard Worker *
223*495ae853SAndroid Build Coastguard Worker * @brief Buffer manager context initialization.
224*495ae853SAndroid Build Coastguard Worker *
225*495ae853SAndroid Build Coastguard Worker * @par Description:
226*495ae853SAndroid Build Coastguard Worker * Initializes the buffer manager structure
227*495ae853SAndroid Build Coastguard Worker *
228*495ae853SAndroid Build Coastguard Worker * @param[in] pv_buf
229*495ae853SAndroid Build Coastguard Worker * Pointer to the buffer manager
230*495ae853SAndroid Build Coastguard Worker *
231*495ae853SAndroid Build Coastguard Worker * @returns none
232*495ae853SAndroid Build Coastguard Worker *
233*495ae853SAndroid Build Coastguard Worker * @remarks none
234*495ae853SAndroid Build Coastguard Worker *
235*495ae853SAndroid Build Coastguard Worker *******************************************************************************
236*495ae853SAndroid Build Coastguard Worker */
ih264_buf_mgr_init(void * pv_buf)237*495ae853SAndroid Build Coastguard Worker void* ih264_buf_mgr_init(void *pv_buf)
238*495ae853SAndroid Build Coastguard Worker {
239*495ae853SAndroid Build Coastguard Worker WORD32 id;
240*495ae853SAndroid Build Coastguard Worker UWORD8 *pu1_buf = (UWORD8 *)pv_buf;
241*495ae853SAndroid Build Coastguard Worker buf_mgr_t *ps_buf_mgr = (buf_mgr_t *)pu1_buf;
242*495ae853SAndroid Build Coastguard Worker
243*495ae853SAndroid Build Coastguard Worker pu1_buf += sizeof(buf_mgr_t);
244*495ae853SAndroid Build Coastguard Worker ps_buf_mgr->pv_mutex = pu1_buf;
245*495ae853SAndroid Build Coastguard Worker
246*495ae853SAndroid Build Coastguard Worker pu1_buf += ithread_get_mutex_lock_size();
247*495ae853SAndroid Build Coastguard Worker ithread_mutex_init(ps_buf_mgr->pv_mutex);
248*495ae853SAndroid Build Coastguard Worker
249*495ae853SAndroid Build Coastguard Worker ps_buf_mgr->i4_max_buf_cnt = BUF_MGR_MAX_CNT;
250*495ae853SAndroid Build Coastguard Worker ps_buf_mgr->i4_active_buf_cnt = 0;
251*495ae853SAndroid Build Coastguard Worker for(id = 0; id < BUF_MGR_MAX_CNT; id++)
252*495ae853SAndroid Build Coastguard Worker {
253*495ae853SAndroid Build Coastguard Worker ps_buf_mgr->au4_status[id] = 0;
254*495ae853SAndroid Build Coastguard Worker ps_buf_mgr->apv_ptr[id] = NULL;
255*495ae853SAndroid Build Coastguard Worker }
256*495ae853SAndroid Build Coastguard Worker
257*495ae853SAndroid Build Coastguard Worker return ps_buf_mgr;
258*495ae853SAndroid Build Coastguard Worker }
259*495ae853SAndroid Build Coastguard Worker
260*495ae853SAndroid Build Coastguard Worker /**
261*495ae853SAndroid Build Coastguard Worker *******************************************************************************
262*495ae853SAndroid Build Coastguard Worker *
263*495ae853SAndroid Build Coastguard Worker * @brief Buffer manager reset function.
264*495ae853SAndroid Build Coastguard Worker *
265*495ae853SAndroid Build Coastguard Worker * @par Description:
266*495ae853SAndroid Build Coastguard Worker * resets the buffer manager structure
267*495ae853SAndroid Build Coastguard Worker *
268*495ae853SAndroid Build Coastguard Worker * @param[in] pv_buf
269*495ae853SAndroid Build Coastguard Worker * Pointer to the buffer manager
270*495ae853SAndroid Build Coastguard Worker *
271*495ae853SAndroid Build Coastguard Worker * @returns none
272*495ae853SAndroid Build Coastguard Worker *
273*495ae853SAndroid Build Coastguard Worker * @remarks none
274*495ae853SAndroid Build Coastguard Worker *
275*495ae853SAndroid Build Coastguard Worker *******************************************************************************
276*495ae853SAndroid Build Coastguard Worker */
ih264_buf_mgr_reset(void * pv_buf_mgr)277*495ae853SAndroid Build Coastguard Worker void ih264_buf_mgr_reset(void *pv_buf_mgr)
278*495ae853SAndroid Build Coastguard Worker {
279*495ae853SAndroid Build Coastguard Worker WORD32 id;
280*495ae853SAndroid Build Coastguard Worker buf_mgr_t *ps_buf_mgr;
281*495ae853SAndroid Build Coastguard Worker
282*495ae853SAndroid Build Coastguard Worker ps_buf_mgr = (buf_mgr_t *) pv_buf_mgr;
283*495ae853SAndroid Build Coastguard Worker
284*495ae853SAndroid Build Coastguard Worker for(id = 0; id < BUF_MGR_MAX_CNT; id++)
285*495ae853SAndroid Build Coastguard Worker {
286*495ae853SAndroid Build Coastguard Worker ps_buf_mgr->au4_status[id] = 0;
287*495ae853SAndroid Build Coastguard Worker }
288*495ae853SAndroid Build Coastguard Worker
289*495ae853SAndroid Build Coastguard Worker return;
290*495ae853SAndroid Build Coastguard Worker }
291*495ae853SAndroid Build Coastguard Worker
292*495ae853SAndroid Build Coastguard Worker /**
293*495ae853SAndroid Build Coastguard Worker *******************************************************************************
294*495ae853SAndroid Build Coastguard Worker *
295*495ae853SAndroid Build Coastguard Worker * @brief Adds and increments the buffer and buffer count.
296*495ae853SAndroid Build Coastguard Worker *
297*495ae853SAndroid Build Coastguard Worker * @par Description:
298*495ae853SAndroid Build Coastguard Worker * Adds a buffer to the buffer manager if it is not already present and
299*495ae853SAndroid Build Coastguard Worker * increments the active buffer count
300*495ae853SAndroid Build Coastguard Worker *
301*495ae853SAndroid Build Coastguard Worker * @param[in] ps_buf_mgr
302*495ae853SAndroid Build Coastguard Worker * Pointer to the buffer manager
303*495ae853SAndroid Build Coastguard Worker *
304*495ae853SAndroid Build Coastguard Worker * @param[in] pv_ptr
305*495ae853SAndroid Build Coastguard Worker * Pointer to the buffer to be added
306*495ae853SAndroid Build Coastguard Worker *
307*495ae853SAndroid Build Coastguard Worker * @param[in] buf_id
308*495ae853SAndroid Build Coastguard Worker * buffer id
309*495ae853SAndroid Build Coastguard Worker *
310*495ae853SAndroid Build Coastguard Worker * @returns Returns 0 on success, -1 otherwise
311*495ae853SAndroid Build Coastguard Worker *
312*495ae853SAndroid Build Coastguard Worker * @remarks
313*495ae853SAndroid Build Coastguard Worker * none
314*495ae853SAndroid Build Coastguard Worker *
315*495ae853SAndroid Build Coastguard Worker *******************************************************************************
316*495ae853SAndroid Build Coastguard Worker */
ih264_buf_mgr_add(buf_mgr_t * ps_buf_mgr,void * pv_ptr,WORD32 buf_id)317*495ae853SAndroid Build Coastguard Worker IH264_ERROR_T ih264_buf_mgr_add(buf_mgr_t *ps_buf_mgr,
318*495ae853SAndroid Build Coastguard Worker void *pv_ptr,
319*495ae853SAndroid Build Coastguard Worker WORD32 buf_id)
320*495ae853SAndroid Build Coastguard Worker {
321*495ae853SAndroid Build Coastguard Worker IH264_ERROR_T ret = IH264_SUCCESS;
322*495ae853SAndroid Build Coastguard Worker
323*495ae853SAndroid Build Coastguard Worker ret = ih264_buf_mgr_lock(ps_buf_mgr);
324*495ae853SAndroid Build Coastguard Worker RETURN_IF((ret != IH264_SUCCESS), ret);
325*495ae853SAndroid Build Coastguard Worker
326*495ae853SAndroid Build Coastguard Worker /* Check if buffer ID is within allowed range */
327*495ae853SAndroid Build Coastguard Worker if(buf_id >= ps_buf_mgr->i4_max_buf_cnt)
328*495ae853SAndroid Build Coastguard Worker {
329*495ae853SAndroid Build Coastguard Worker ret = ih264_buf_mgr_unlock(ps_buf_mgr);
330*495ae853SAndroid Build Coastguard Worker RETURN_IF((ret != IH264_SUCCESS), ret);
331*495ae853SAndroid Build Coastguard Worker return IH264_FAIL;
332*495ae853SAndroid Build Coastguard Worker }
333*495ae853SAndroid Build Coastguard Worker
334*495ae853SAndroid Build Coastguard Worker /* Check if the current ID is being used to hold some other buffer */
335*495ae853SAndroid Build Coastguard Worker if((ps_buf_mgr->apv_ptr[buf_id] != NULL) &&
336*495ae853SAndroid Build Coastguard Worker (ps_buf_mgr->apv_ptr[buf_id] != pv_ptr))
337*495ae853SAndroid Build Coastguard Worker {
338*495ae853SAndroid Build Coastguard Worker ret = ih264_buf_mgr_unlock(ps_buf_mgr);
339*495ae853SAndroid Build Coastguard Worker RETURN_IF((ret != IH264_SUCCESS), ret);
340*495ae853SAndroid Build Coastguard Worker return IH264_FAIL;
341*495ae853SAndroid Build Coastguard Worker }
342*495ae853SAndroid Build Coastguard Worker ps_buf_mgr->apv_ptr[buf_id] = pv_ptr;
343*495ae853SAndroid Build Coastguard Worker ps_buf_mgr->i4_active_buf_cnt++;
344*495ae853SAndroid Build Coastguard Worker
345*495ae853SAndroid Build Coastguard Worker ret = ih264_buf_mgr_unlock(ps_buf_mgr);
346*495ae853SAndroid Build Coastguard Worker RETURN_IF((ret != IH264_SUCCESS), ret);
347*495ae853SAndroid Build Coastguard Worker
348*495ae853SAndroid Build Coastguard Worker return ret;
349*495ae853SAndroid Build Coastguard Worker }
350*495ae853SAndroid Build Coastguard Worker
351*495ae853SAndroid Build Coastguard Worker /**
352*495ae853SAndroid Build Coastguard Worker *******************************************************************************
353*495ae853SAndroid Build Coastguard Worker *
354*495ae853SAndroid Build Coastguard Worker * @brief Gets the next free buffer.
355*495ae853SAndroid Build Coastguard Worker *
356*495ae853SAndroid Build Coastguard Worker * @par Description:
357*495ae853SAndroid Build Coastguard Worker * Returns the next free buffer available and sets the corresponding status
358*495ae853SAndroid Build Coastguard Worker * to Busy
359*495ae853SAndroid Build Coastguard Worker *
360*495ae853SAndroid Build Coastguard Worker * @param[in] ps_buf_mgr
361*495ae853SAndroid Build Coastguard Worker * Pointer to the buffer manager
362*495ae853SAndroid Build Coastguard Worker *
363*495ae853SAndroid Build Coastguard Worker * @param[in] pi4_buf_id
364*495ae853SAndroid Build Coastguard Worker * Pointer to the id of the free buffer
365*495ae853SAndroid Build Coastguard Worker *
366*495ae853SAndroid Build Coastguard Worker * @returns Pointer to the free buffer
367*495ae853SAndroid Build Coastguard Worker *
368*495ae853SAndroid Build Coastguard Worker * @remarks
369*495ae853SAndroid Build Coastguard Worker * none
370*495ae853SAndroid Build Coastguard Worker *
371*495ae853SAndroid Build Coastguard Worker *******************************************************************************
372*495ae853SAndroid Build Coastguard Worker */
ih264_buf_mgr_get_next_free(buf_mgr_t * ps_buf_mgr,WORD32 * pi4_buf_id)373*495ae853SAndroid Build Coastguard Worker void* ih264_buf_mgr_get_next_free(buf_mgr_t *ps_buf_mgr, WORD32 *pi4_buf_id)
374*495ae853SAndroid Build Coastguard Worker {
375*495ae853SAndroid Build Coastguard Worker WORD32 id;
376*495ae853SAndroid Build Coastguard Worker void *pv_ret_ptr = NULL;
377*495ae853SAndroid Build Coastguard Worker IH264_ERROR_T ret = IH264_SUCCESS;
378*495ae853SAndroid Build Coastguard Worker
379*495ae853SAndroid Build Coastguard Worker ret = ih264_buf_mgr_lock(ps_buf_mgr);
380*495ae853SAndroid Build Coastguard Worker RETURN_IF((ret != IH264_SUCCESS), NULL);
381*495ae853SAndroid Build Coastguard Worker
382*495ae853SAndroid Build Coastguard Worker for(id = 0; id < ps_buf_mgr->i4_active_buf_cnt; id++)
383*495ae853SAndroid Build Coastguard Worker {
384*495ae853SAndroid Build Coastguard Worker /* Check if the buffer is non-null and status is zero */
385*495ae853SAndroid Build Coastguard Worker if((ps_buf_mgr->au4_status[id] == 0) && (ps_buf_mgr->apv_ptr[id]))
386*495ae853SAndroid Build Coastguard Worker {
387*495ae853SAndroid Build Coastguard Worker *pi4_buf_id = id;
388*495ae853SAndroid Build Coastguard Worker /* mark buffer as busy before returning */
389*495ae853SAndroid Build Coastguard Worker ps_buf_mgr->au4_status[id] = 1;
390*495ae853SAndroid Build Coastguard Worker pv_ret_ptr = ps_buf_mgr->apv_ptr[id];
391*495ae853SAndroid Build Coastguard Worker break;
392*495ae853SAndroid Build Coastguard Worker }
393*495ae853SAndroid Build Coastguard Worker }
394*495ae853SAndroid Build Coastguard Worker ret = ih264_buf_mgr_unlock(ps_buf_mgr);
395*495ae853SAndroid Build Coastguard Worker RETURN_IF((ret != IH264_SUCCESS), NULL);
396*495ae853SAndroid Build Coastguard Worker
397*495ae853SAndroid Build Coastguard Worker return pv_ret_ptr;
398*495ae853SAndroid Build Coastguard Worker }
399*495ae853SAndroid Build Coastguard Worker
400*495ae853SAndroid Build Coastguard Worker /**
401*495ae853SAndroid Build Coastguard Worker *******************************************************************************
402*495ae853SAndroid Build Coastguard Worker *
403*495ae853SAndroid Build Coastguard Worker * @brief Checks the buffer manager for free buffers available.
404*495ae853SAndroid Build Coastguard Worker *
405*495ae853SAndroid Build Coastguard Worker * @par Description:
406*495ae853SAndroid Build Coastguard Worker * Checks if there are any free buffers available
407*495ae853SAndroid Build Coastguard Worker *
408*495ae853SAndroid Build Coastguard Worker * @param[in] ps_buf_mgr
409*495ae853SAndroid Build Coastguard Worker * Pointer to the buffer manager
410*495ae853SAndroid Build Coastguard Worker *
411*495ae853SAndroid Build Coastguard Worker * @returns Returns IH264_SUCCESS if available, IH264_FAIL otherwise
412*495ae853SAndroid Build Coastguard Worker *
413*495ae853SAndroid Build Coastguard Worker * @remarks
414*495ae853SAndroid Build Coastguard Worker * none
415*495ae853SAndroid Build Coastguard Worker *
416*495ae853SAndroid Build Coastguard Worker *******************************************************************************
417*495ae853SAndroid Build Coastguard Worker */
ih264_buf_mgr_check_free(buf_mgr_t * ps_buf_mgr)418*495ae853SAndroid Build Coastguard Worker IH264_ERROR_T ih264_buf_mgr_check_free(buf_mgr_t *ps_buf_mgr)
419*495ae853SAndroid Build Coastguard Worker {
420*495ae853SAndroid Build Coastguard Worker WORD32 id;
421*495ae853SAndroid Build Coastguard Worker IH264_ERROR_T ret = IH264_FAIL;
422*495ae853SAndroid Build Coastguard Worker IH264_ERROR_T rettmp = IH264_SUCCESS;
423*495ae853SAndroid Build Coastguard Worker
424*495ae853SAndroid Build Coastguard Worker rettmp = ih264_buf_mgr_lock(ps_buf_mgr);
425*495ae853SAndroid Build Coastguard Worker RETURN_IF((rettmp != IH264_SUCCESS), rettmp);
426*495ae853SAndroid Build Coastguard Worker
427*495ae853SAndroid Build Coastguard Worker for(id = 0; id < ps_buf_mgr->i4_active_buf_cnt; id++)
428*495ae853SAndroid Build Coastguard Worker {
429*495ae853SAndroid Build Coastguard Worker if((ps_buf_mgr->au4_status[id] == 0) &&
430*495ae853SAndroid Build Coastguard Worker (ps_buf_mgr->apv_ptr[id]))
431*495ae853SAndroid Build Coastguard Worker {
432*495ae853SAndroid Build Coastguard Worker ret = IH264_SUCCESS;
433*495ae853SAndroid Build Coastguard Worker break;
434*495ae853SAndroid Build Coastguard Worker }
435*495ae853SAndroid Build Coastguard Worker }
436*495ae853SAndroid Build Coastguard Worker rettmp = ih264_buf_mgr_unlock(ps_buf_mgr);
437*495ae853SAndroid Build Coastguard Worker RETURN_IF((rettmp != IH264_SUCCESS), rettmp);
438*495ae853SAndroid Build Coastguard Worker
439*495ae853SAndroid Build Coastguard Worker return ret;
440*495ae853SAndroid Build Coastguard Worker }
441*495ae853SAndroid Build Coastguard Worker
442*495ae853SAndroid Build Coastguard Worker /**
443*495ae853SAndroid Build Coastguard Worker *******************************************************************************
444*495ae853SAndroid Build Coastguard Worker *
445*495ae853SAndroid Build Coastguard Worker * @brief Release buffer to buffer manager
446*495ae853SAndroid Build Coastguard Worker *
447*495ae853SAndroid Build Coastguard Worker * @par Description:
448*495ae853SAndroid Build Coastguard Worker * Clear the status bit basing on the mask. If the buffer is no longer used by
449*495ae853SAndroid Build Coastguard Worker * the codec then release back to the pool
450*495ae853SAndroid Build Coastguard Worker *
451*495ae853SAndroid Build Coastguard Worker * @param[in] ps_buf_mgr
452*495ae853SAndroid Build Coastguard Worker * Pointer to the buffer manager
453*495ae853SAndroid Build Coastguard Worker *
454*495ae853SAndroid Build Coastguard Worker * @param[in] buf_id
455*495ae853SAndroid Build Coastguard Worker * ID of the buffer status to be released
456*495ae853SAndroid Build Coastguard Worker *
457*495ae853SAndroid Build Coastguard Worker * @param[in] mask
458*495ae853SAndroid Build Coastguard Worker * Contains the bits that are to be reset
459*495ae853SAndroid Build Coastguard Worker *
460*495ae853SAndroid Build Coastguard Worker * @returns IH264_SUCCESS if success, IH264_FAIL otherwise
461*495ae853SAndroid Build Coastguard Worker *
462*495ae853SAndroid Build Coastguard Worker * @remarks
463*495ae853SAndroid Build Coastguard Worker * none
464*495ae853SAndroid Build Coastguard Worker *
465*495ae853SAndroid Build Coastguard Worker *******************************************************************************
466*495ae853SAndroid Build Coastguard Worker */
ih264_buf_mgr_release(buf_mgr_t * ps_buf_mgr,WORD32 buf_id,UWORD32 mask)467*495ae853SAndroid Build Coastguard Worker IH264_ERROR_T ih264_buf_mgr_release(buf_mgr_t *ps_buf_mgr,
468*495ae853SAndroid Build Coastguard Worker WORD32 buf_id,
469*495ae853SAndroid Build Coastguard Worker UWORD32 mask)
470*495ae853SAndroid Build Coastguard Worker {
471*495ae853SAndroid Build Coastguard Worker IH264_ERROR_T ret = IH264_SUCCESS;
472*495ae853SAndroid Build Coastguard Worker
473*495ae853SAndroid Build Coastguard Worker ret = ih264_buf_mgr_lock(ps_buf_mgr);
474*495ae853SAndroid Build Coastguard Worker RETURN_IF((ret != IH264_SUCCESS), ret);
475*495ae853SAndroid Build Coastguard Worker
476*495ae853SAndroid Build Coastguard Worker /* If the given id is pointing to an id which is not yet added */
477*495ae853SAndroid Build Coastguard Worker if(buf_id >= ps_buf_mgr->i4_active_buf_cnt)
478*495ae853SAndroid Build Coastguard Worker {
479*495ae853SAndroid Build Coastguard Worker ret = ih264_buf_mgr_unlock(ps_buf_mgr);
480*495ae853SAndroid Build Coastguard Worker RETURN_IF((ret != IH264_SUCCESS), ret);
481*495ae853SAndroid Build Coastguard Worker return IH264_FAIL;
482*495ae853SAndroid Build Coastguard Worker }
483*495ae853SAndroid Build Coastguard Worker
484*495ae853SAndroid Build Coastguard Worker ps_buf_mgr->au4_status[buf_id] &= ~mask;
485*495ae853SAndroid Build Coastguard Worker
486*495ae853SAndroid Build Coastguard Worker /* If both the REF and DISP are zero, DEC is set to zero */
487*495ae853SAndroid Build Coastguard Worker if(ps_buf_mgr->au4_status[buf_id] == 1)
488*495ae853SAndroid Build Coastguard Worker {
489*495ae853SAndroid Build Coastguard Worker ps_buf_mgr->au4_status[buf_id] = 0;
490*495ae853SAndroid Build Coastguard Worker }
491*495ae853SAndroid Build Coastguard Worker
492*495ae853SAndroid Build Coastguard Worker ret = ih264_buf_mgr_unlock(ps_buf_mgr);
493*495ae853SAndroid Build Coastguard Worker RETURN_IF((ret != IH264_SUCCESS), ret);
494*495ae853SAndroid Build Coastguard Worker
495*495ae853SAndroid Build Coastguard Worker return ret;
496*495ae853SAndroid Build Coastguard Worker }
497*495ae853SAndroid Build Coastguard Worker
498*495ae853SAndroid Build Coastguard Worker /**
499*495ae853SAndroid Build Coastguard Worker *******************************************************************************
500*495ae853SAndroid Build Coastguard Worker *
501*495ae853SAndroid Build Coastguard Worker * @brief Sets the status bit.
502*495ae853SAndroid Build Coastguard Worker *
503*495ae853SAndroid Build Coastguard Worker * @par Description:
504*495ae853SAndroid Build Coastguard Worker * sets the status bits that the mask contains (status corresponding to the id)
505*495ae853SAndroid Build Coastguard Worker *
506*495ae853SAndroid Build Coastguard Worker * @param[in] ps_buf_mgr
507*495ae853SAndroid Build Coastguard Worker * Pointer to the buffer manager
508*495ae853SAndroid Build Coastguard Worker *
509*495ae853SAndroid Build Coastguard Worker * @param[in] buf_id
510*495ae853SAndroid Build Coastguard Worker * ID of the buffer whose status needs to be modified
511*495ae853SAndroid Build Coastguard Worker *
512*495ae853SAndroid Build Coastguard Worker * @param[in] mask
513*495ae853SAndroid Build Coastguard Worker * Contains the bits that are to be set
514*495ae853SAndroid Build Coastguard Worker *
515*495ae853SAndroid Build Coastguard Worker * @returns IH264_SUCCESS if success, IH264_FAIL otherwise
516*495ae853SAndroid Build Coastguard Worker *
517*495ae853SAndroid Build Coastguard Worker * @remarks
518*495ae853SAndroid Build Coastguard Worker * none
519*495ae853SAndroid Build Coastguard Worker *
520*495ae853SAndroid Build Coastguard Worker *******************************************************************************
521*495ae853SAndroid Build Coastguard Worker */
ih264_buf_mgr_set_status(buf_mgr_t * ps_buf_mgr,WORD32 buf_id,UWORD32 mask)522*495ae853SAndroid Build Coastguard Worker IH264_ERROR_T ih264_buf_mgr_set_status(buf_mgr_t *ps_buf_mgr,
523*495ae853SAndroid Build Coastguard Worker WORD32 buf_id,
524*495ae853SAndroid Build Coastguard Worker UWORD32 mask)
525*495ae853SAndroid Build Coastguard Worker {
526*495ae853SAndroid Build Coastguard Worker IH264_ERROR_T ret = IH264_SUCCESS;
527*495ae853SAndroid Build Coastguard Worker
528*495ae853SAndroid Build Coastguard Worker ret = ih264_buf_mgr_lock(ps_buf_mgr);
529*495ae853SAndroid Build Coastguard Worker RETURN_IF((ret != IH264_SUCCESS), ret);
530*495ae853SAndroid Build Coastguard Worker
531*495ae853SAndroid Build Coastguard Worker if(buf_id >= ps_buf_mgr->i4_active_buf_cnt)
532*495ae853SAndroid Build Coastguard Worker {
533*495ae853SAndroid Build Coastguard Worker ret = ih264_buf_mgr_unlock(ps_buf_mgr);
534*495ae853SAndroid Build Coastguard Worker RETURN_IF((ret != IH264_SUCCESS), ret);
535*495ae853SAndroid Build Coastguard Worker return IH264_FAIL;
536*495ae853SAndroid Build Coastguard Worker }
537*495ae853SAndroid Build Coastguard Worker
538*495ae853SAndroid Build Coastguard Worker if((ps_buf_mgr->au4_status[buf_id] & mask) != 0)
539*495ae853SAndroid Build Coastguard Worker {
540*495ae853SAndroid Build Coastguard Worker ret = ih264_buf_mgr_unlock(ps_buf_mgr);
541*495ae853SAndroid Build Coastguard Worker RETURN_IF((ret != IH264_SUCCESS), ret);
542*495ae853SAndroid Build Coastguard Worker return IH264_FAIL;
543*495ae853SAndroid Build Coastguard Worker }
544*495ae853SAndroid Build Coastguard Worker
545*495ae853SAndroid Build Coastguard Worker ps_buf_mgr->au4_status[buf_id] |= mask;
546*495ae853SAndroid Build Coastguard Worker ret = ih264_buf_mgr_unlock(ps_buf_mgr);
547*495ae853SAndroid Build Coastguard Worker RETURN_IF((ret != IH264_SUCCESS), ret);
548*495ae853SAndroid Build Coastguard Worker
549*495ae853SAndroid Build Coastguard Worker return ret;
550*495ae853SAndroid Build Coastguard Worker }
551*495ae853SAndroid Build Coastguard Worker
552*495ae853SAndroid Build Coastguard Worker /**
553*495ae853SAndroid Build Coastguard Worker *******************************************************************************
554*495ae853SAndroid Build Coastguard Worker *
555*495ae853SAndroid Build Coastguard Worker * @brief Returns the status of the buffer.
556*495ae853SAndroid Build Coastguard Worker *
557*495ae853SAndroid Build Coastguard Worker * @par Description:
558*495ae853SAndroid Build Coastguard Worker * Returns the status of the buffer corresponding to the id
559*495ae853SAndroid Build Coastguard Worker *
560*495ae853SAndroid Build Coastguard Worker * @param[in] ps_buf_mgr
561*495ae853SAndroid Build Coastguard Worker * Pointer to the buffer manager
562*495ae853SAndroid Build Coastguard Worker *
563*495ae853SAndroid Build Coastguard Worker * @param[in] buf_id
564*495ae853SAndroid Build Coastguard Worker * ID of the buffer status required
565*495ae853SAndroid Build Coastguard Worker *
566*495ae853SAndroid Build Coastguard Worker * @returns Status of the buffer corresponding to the id
567*495ae853SAndroid Build Coastguard Worker *
568*495ae853SAndroid Build Coastguard Worker * @remarks
569*495ae853SAndroid Build Coastguard Worker * none
570*495ae853SAndroid Build Coastguard Worker *
571*495ae853SAndroid Build Coastguard Worker *******************************************************************************
572*495ae853SAndroid Build Coastguard Worker */
ih264_buf_mgr_get_status(buf_mgr_t * ps_buf_mgr,WORD32 buf_id)573*495ae853SAndroid Build Coastguard Worker WORD32 ih264_buf_mgr_get_status(buf_mgr_t *ps_buf_mgr, WORD32 buf_id)
574*495ae853SAndroid Build Coastguard Worker {
575*495ae853SAndroid Build Coastguard Worker IH264_ERROR_T ret = IH264_SUCCESS;
576*495ae853SAndroid Build Coastguard Worker UWORD32 status;
577*495ae853SAndroid Build Coastguard Worker
578*495ae853SAndroid Build Coastguard Worker ret = ih264_buf_mgr_lock(ps_buf_mgr);
579*495ae853SAndroid Build Coastguard Worker RETURN_IF((ret != IH264_SUCCESS), ret);
580*495ae853SAndroid Build Coastguard Worker
581*495ae853SAndroid Build Coastguard Worker status = ps_buf_mgr->au4_status[buf_id];
582*495ae853SAndroid Build Coastguard Worker
583*495ae853SAndroid Build Coastguard Worker ret = ih264_buf_mgr_unlock(ps_buf_mgr);
584*495ae853SAndroid Build Coastguard Worker RETURN_IF((ret != IH264_SUCCESS), ret);
585*495ae853SAndroid Build Coastguard Worker
586*495ae853SAndroid Build Coastguard Worker return status;
587*495ae853SAndroid Build Coastguard Worker }
588*495ae853SAndroid Build Coastguard Worker
589*495ae853SAndroid Build Coastguard Worker /**
590*495ae853SAndroid Build Coastguard Worker *******************************************************************************
591*495ae853SAndroid Build Coastguard Worker *
592*495ae853SAndroid Build Coastguard Worker * @brief Gets the buffer from the buffer manager
593*495ae853SAndroid Build Coastguard Worker *
594*495ae853SAndroid Build Coastguard Worker * @par Description:
595*495ae853SAndroid Build Coastguard Worker * Returns the pointer to the buffer corresponding to the id
596*495ae853SAndroid Build Coastguard Worker *
597*495ae853SAndroid Build Coastguard Worker * @param[in] ps_buf_mgr
598*495ae853SAndroid Build Coastguard Worker * Pointer to the buffer manager
599*495ae853SAndroid Build Coastguard Worker *
600*495ae853SAndroid Build Coastguard Worker * @param[in] buf_id
601*495ae853SAndroid Build Coastguard Worker * ID of the buffer required
602*495ae853SAndroid Build Coastguard Worker *
603*495ae853SAndroid Build Coastguard Worker * @returns Pointer to the buffer required
604*495ae853SAndroid Build Coastguard Worker *
605*495ae853SAndroid Build Coastguard Worker * @remarks
606*495ae853SAndroid Build Coastguard Worker * none
607*495ae853SAndroid Build Coastguard Worker *
608*495ae853SAndroid Build Coastguard Worker *******************************************************************************
609*495ae853SAndroid Build Coastguard Worker */
ih264_buf_mgr_get_buf(buf_mgr_t * ps_buf_mgr,WORD32 buf_id)610*495ae853SAndroid Build Coastguard Worker void* ih264_buf_mgr_get_buf(buf_mgr_t *ps_buf_mgr, WORD32 buf_id)
611*495ae853SAndroid Build Coastguard Worker {
612*495ae853SAndroid Build Coastguard Worker IH264_ERROR_T ret = IH264_SUCCESS;
613*495ae853SAndroid Build Coastguard Worker void *pv_buf;
614*495ae853SAndroid Build Coastguard Worker
615*495ae853SAndroid Build Coastguard Worker ret = ih264_buf_mgr_lock(ps_buf_mgr);
616*495ae853SAndroid Build Coastguard Worker RETURN_IF((ret != IH264_SUCCESS), NULL);
617*495ae853SAndroid Build Coastguard Worker
618*495ae853SAndroid Build Coastguard Worker pv_buf = ps_buf_mgr->apv_ptr[buf_id];
619*495ae853SAndroid Build Coastguard Worker
620*495ae853SAndroid Build Coastguard Worker ret = ih264_buf_mgr_unlock(ps_buf_mgr);
621*495ae853SAndroid Build Coastguard Worker RETURN_IF((ret != IH264_SUCCESS), NULL);
622*495ae853SAndroid Build Coastguard Worker
623*495ae853SAndroid Build Coastguard Worker return pv_buf;
624*495ae853SAndroid Build Coastguard Worker }
625*495ae853SAndroid Build Coastguard Worker
626*495ae853SAndroid Build Coastguard Worker /**
627*495ae853SAndroid Build Coastguard Worker *******************************************************************************
628*495ae853SAndroid Build Coastguard Worker *
629*495ae853SAndroid Build Coastguard Worker * @brief Gets the buffer id from the buffer manager if the buffer is added to
630*495ae853SAndroid Build Coastguard Worker * the buffer manager
631*495ae853SAndroid Build Coastguard Worker *
632*495ae853SAndroid Build Coastguard Worker * @par Description:
633*495ae853SAndroid Build Coastguard Worker * Returns the buffer id corresponding to the given buffer if it exists
634*495ae853SAndroid Build Coastguard Worker *
635*495ae853SAndroid Build Coastguard Worker * @param[in] ps_buf_mgr
636*495ae853SAndroid Build Coastguard Worker * Pointer to the buffer manager
637*495ae853SAndroid Build Coastguard Worker *
638*495ae853SAndroid Build Coastguard Worker * @param[in] pv_buf
639*495ae853SAndroid Build Coastguard Worker * Pointer to the buffer
640*495ae853SAndroid Build Coastguard Worker *
641*495ae853SAndroid Build Coastguard Worker * @returns Buffer id if exists, else -1
642*495ae853SAndroid Build Coastguard Worker *
643*495ae853SAndroid Build Coastguard Worker * @remarks
644*495ae853SAndroid Build Coastguard Worker * none
645*495ae853SAndroid Build Coastguard Worker *
646*495ae853SAndroid Build Coastguard Worker *******************************************************************************
647*495ae853SAndroid Build Coastguard Worker */
ih264_buf_mgr_get_bufid(buf_mgr_t * ps_buf_mgr,void * pv_buf)648*495ae853SAndroid Build Coastguard Worker WORD32 ih264_buf_mgr_get_bufid(buf_mgr_t *ps_buf_mgr, void *pv_buf)
649*495ae853SAndroid Build Coastguard Worker {
650*495ae853SAndroid Build Coastguard Worker WORD32 id;
651*495ae853SAndroid Build Coastguard Worker WORD32 buf_id = -1;
652*495ae853SAndroid Build Coastguard Worker IH264_ERROR_T ret = IH264_SUCCESS;
653*495ae853SAndroid Build Coastguard Worker
654*495ae853SAndroid Build Coastguard Worker ret = ih264_buf_mgr_lock(ps_buf_mgr);
655*495ae853SAndroid Build Coastguard Worker RETURN_IF((ret != IH264_SUCCESS), ret);
656*495ae853SAndroid Build Coastguard Worker
657*495ae853SAndroid Build Coastguard Worker for(id = 0; id < ps_buf_mgr->i4_active_buf_cnt; id++)
658*495ae853SAndroid Build Coastguard Worker {
659*495ae853SAndroid Build Coastguard Worker if(ps_buf_mgr->apv_ptr[id] == pv_buf)
660*495ae853SAndroid Build Coastguard Worker {
661*495ae853SAndroid Build Coastguard Worker buf_id = id;
662*495ae853SAndroid Build Coastguard Worker break;
663*495ae853SAndroid Build Coastguard Worker }
664*495ae853SAndroid Build Coastguard Worker }
665*495ae853SAndroid Build Coastguard Worker ret = ih264_buf_mgr_unlock(ps_buf_mgr);
666*495ae853SAndroid Build Coastguard Worker RETURN_IF((ret != IH264_SUCCESS), ret);
667*495ae853SAndroid Build Coastguard Worker
668*495ae853SAndroid Build Coastguard Worker return buf_id;
669*495ae853SAndroid Build Coastguard Worker }
670*495ae853SAndroid Build Coastguard Worker
671*495ae853SAndroid Build Coastguard Worker /**
672*495ae853SAndroid Build Coastguard Worker *******************************************************************************
673*495ae853SAndroid Build Coastguard Worker *
674*495ae853SAndroid Build Coastguard Worker * @brief Gets the no.of active buffer
675*495ae853SAndroid Build Coastguard Worker *
676*495ae853SAndroid Build Coastguard Worker * @par Description:
677*495ae853SAndroid Build Coastguard Worker * Return the number of active buffers in the buffer manager
678*495ae853SAndroid Build Coastguard Worker *
679*495ae853SAndroid Build Coastguard Worker * @param[in] ps_buf_mgr
680*495ae853SAndroid Build Coastguard Worker * Pointer to the buffer manager
681*495ae853SAndroid Build Coastguard Worker *
682*495ae853SAndroid Build Coastguard Worker * @returns number of active buffers
683*495ae853SAndroid Build Coastguard Worker *
684*495ae853SAndroid Build Coastguard Worker * @remarks
685*495ae853SAndroid Build Coastguard Worker * none
686*495ae853SAndroid Build Coastguard Worker *
687*495ae853SAndroid Build Coastguard Worker *******************************************************************************
688*495ae853SAndroid Build Coastguard Worker */
ih264_buf_mgr_get_num_active_buf(buf_mgr_t * ps_buf_mgr)689*495ae853SAndroid Build Coastguard Worker UWORD32 ih264_buf_mgr_get_num_active_buf(buf_mgr_t *ps_buf_mgr)
690*495ae853SAndroid Build Coastguard Worker {
691*495ae853SAndroid Build Coastguard Worker UWORD32 u4_buf_cnt = 0;
692*495ae853SAndroid Build Coastguard Worker IH264_ERROR_T ret = IH264_SUCCESS;
693*495ae853SAndroid Build Coastguard Worker
694*495ae853SAndroid Build Coastguard Worker ret = ih264_buf_mgr_lock(ps_buf_mgr);
695*495ae853SAndroid Build Coastguard Worker RETURN_IF((ret != IH264_SUCCESS), ret);
696*495ae853SAndroid Build Coastguard Worker
697*495ae853SAndroid Build Coastguard Worker u4_buf_cnt = ps_buf_mgr->i4_active_buf_cnt;
698*495ae853SAndroid Build Coastguard Worker
699*495ae853SAndroid Build Coastguard Worker ret = ih264_buf_mgr_unlock(ps_buf_mgr);
700*495ae853SAndroid Build Coastguard Worker RETURN_IF((ret != IH264_SUCCESS), ret);
701*495ae853SAndroid Build Coastguard Worker
702*495ae853SAndroid Build Coastguard Worker return u4_buf_cnt;
703*495ae853SAndroid Build Coastguard Worker }
704