1*c83a76b0SSuyog Pawar /******************************************************************************
2*c83a76b0SSuyog Pawar *
3*c83a76b0SSuyog Pawar * Copyright (C) 2012 Ittiam Systems Pvt Ltd, Bangalore
4*c83a76b0SSuyog Pawar *
5*c83a76b0SSuyog Pawar * Licensed under the Apache License, Version 2.0 (the "License");
6*c83a76b0SSuyog Pawar * you may not use this file except in compliance with the License.
7*c83a76b0SSuyog Pawar * You may obtain a copy of the License at:
8*c83a76b0SSuyog Pawar *
9*c83a76b0SSuyog Pawar * http://www.apache.org/licenses/LICENSE-2.0
10*c83a76b0SSuyog Pawar *
11*c83a76b0SSuyog Pawar * Unless required by applicable law or agreed to in writing, software
12*c83a76b0SSuyog Pawar * distributed under the License is distributed on an "AS IS" BASIS,
13*c83a76b0SSuyog Pawar * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*c83a76b0SSuyog Pawar * See the License for the specific language governing permissions and
15*c83a76b0SSuyog Pawar * limitations under the License.
16*c83a76b0SSuyog Pawar *
17*c83a76b0SSuyog Pawar ******************************************************************************/
18*c83a76b0SSuyog Pawar /**
19*c83a76b0SSuyog Pawar *******************************************************************************
20*c83a76b0SSuyog Pawar * @file
21*c83a76b0SSuyog Pawar * ihevc_disp_mgr.c
22*c83a76b0SSuyog Pawar *
23*c83a76b0SSuyog Pawar * @brief
24*c83a76b0SSuyog Pawar * Contains function definitions for display management
25*c83a76b0SSuyog Pawar *
26*c83a76b0SSuyog Pawar * @author
27*c83a76b0SSuyog Pawar * Srinivas T
28*c83a76b0SSuyog Pawar *
29*c83a76b0SSuyog Pawar * @par List of Functions:
30*c83a76b0SSuyog Pawar * - ihevc_disp_mgr_init()
31*c83a76b0SSuyog Pawar * - ihevc_disp_mgr_add()
32*c83a76b0SSuyog Pawar * - ihevc_disp_mgr_get()
33*c83a76b0SSuyog Pawar *
34*c83a76b0SSuyog Pawar * @remarks
35*c83a76b0SSuyog Pawar * None
36*c83a76b0SSuyog Pawar *
37*c83a76b0SSuyog Pawar *******************************************************************************
38*c83a76b0SSuyog Pawar */
39*c83a76b0SSuyog Pawar #include <stdlib.h>
40*c83a76b0SSuyog Pawar #include "ihevc_typedefs.h"
41*c83a76b0SSuyog Pawar #include "ihevc_macros.h"
42*c83a76b0SSuyog Pawar #include "ihevc_func_selector.h"
43*c83a76b0SSuyog Pawar #include "ihevc_disp_mgr.h"
44*c83a76b0SSuyog Pawar
45*c83a76b0SSuyog Pawar
46*c83a76b0SSuyog Pawar /**
47*c83a76b0SSuyog Pawar *******************************************************************************
48*c83a76b0SSuyog Pawar *
49*c83a76b0SSuyog Pawar * @brief
50*c83a76b0SSuyog Pawar * Initialization function for display buffer manager
51*c83a76b0SSuyog Pawar *
52*c83a76b0SSuyog Pawar * @par Description:
53*c83a76b0SSuyog Pawar * Initializes the display buffer management structure
54*c83a76b0SSuyog Pawar *
55*c83a76b0SSuyog Pawar * @param[in] ps_disp_mgr
56*c83a76b0SSuyog Pawar * Pointer to the display buffer management structure
57*c83a76b0SSuyog Pawar *
58*c83a76b0SSuyog Pawar * @returns none
59*c83a76b0SSuyog Pawar *
60*c83a76b0SSuyog Pawar * @remarks
61*c83a76b0SSuyog Pawar * None
62*c83a76b0SSuyog Pawar *
63*c83a76b0SSuyog Pawar *******************************************************************************
64*c83a76b0SSuyog Pawar */
ihevc_disp_mgr_init(disp_mgr_t * ps_disp_mgr)65*c83a76b0SSuyog Pawar void ihevc_disp_mgr_init(
66*c83a76b0SSuyog Pawar disp_mgr_t *ps_disp_mgr)
67*c83a76b0SSuyog Pawar {
68*c83a76b0SSuyog Pawar WORD32 id;
69*c83a76b0SSuyog Pawar
70*c83a76b0SSuyog Pawar ps_disp_mgr->u4_last_abs_poc = DEFAULT_POC;
71*c83a76b0SSuyog Pawar
72*c83a76b0SSuyog Pawar for(id = 0; id < DISP_MGR_MAX_CNT; id++)
73*c83a76b0SSuyog Pawar {
74*c83a76b0SSuyog Pawar ps_disp_mgr->ai4_abs_poc[id] = DEFAULT_POC;
75*c83a76b0SSuyog Pawar ps_disp_mgr->apv_ptr[id] = NULL;
76*c83a76b0SSuyog Pawar }
77*c83a76b0SSuyog Pawar }
78*c83a76b0SSuyog Pawar
79*c83a76b0SSuyog Pawar
80*c83a76b0SSuyog Pawar /**
81*c83a76b0SSuyog Pawar *******************************************************************************
82*c83a76b0SSuyog Pawar *
83*c83a76b0SSuyog Pawar * @brief
84*c83a76b0SSuyog Pawar * Adds a buffer to the display manager
85*c83a76b0SSuyog Pawar *
86*c83a76b0SSuyog Pawar * @par Description:
87*c83a76b0SSuyog Pawar * Adds a buffer to the display buffer manager
88*c83a76b0SSuyog Pawar *
89*c83a76b0SSuyog Pawar * @param[in] ps_disp_mgr
90*c83a76b0SSuyog Pawar * Pointer to the diaplay buffer management structure
91*c83a76b0SSuyog Pawar *
92*c83a76b0SSuyog Pawar * @param[in] buf_id
93*c83a76b0SSuyog Pawar * ID of the display buffer
94*c83a76b0SSuyog Pawar *
95*c83a76b0SSuyog Pawar * @param[in] abs_poc
96*c83a76b0SSuyog Pawar * Absolute POC of the display buffer
97*c83a76b0SSuyog Pawar *
98*c83a76b0SSuyog Pawar * @param[in] pv_ptr
99*c83a76b0SSuyog Pawar * Pointer to the display buffer
100*c83a76b0SSuyog Pawar *
101*c83a76b0SSuyog Pawar * @returns 0 if success, -1 otherwise
102*c83a76b0SSuyog Pawar *
103*c83a76b0SSuyog Pawar * @remarks
104*c83a76b0SSuyog Pawar * None
105*c83a76b0SSuyog Pawar *
106*c83a76b0SSuyog Pawar *******************************************************************************
107*c83a76b0SSuyog Pawar */
ihevc_disp_mgr_add(disp_mgr_t * ps_disp_mgr,WORD32 buf_id,WORD32 abs_poc,void * pv_ptr)108*c83a76b0SSuyog Pawar WORD32 ihevc_disp_mgr_add(disp_mgr_t *ps_disp_mgr,
109*c83a76b0SSuyog Pawar WORD32 buf_id,
110*c83a76b0SSuyog Pawar WORD32 abs_poc,
111*c83a76b0SSuyog Pawar void *pv_ptr)
112*c83a76b0SSuyog Pawar {
113*c83a76b0SSuyog Pawar if(buf_id >= DISP_MGR_MAX_CNT)
114*c83a76b0SSuyog Pawar {
115*c83a76b0SSuyog Pawar return (-1);
116*c83a76b0SSuyog Pawar }
117*c83a76b0SSuyog Pawar
118*c83a76b0SSuyog Pawar if(ps_disp_mgr->apv_ptr[buf_id] != NULL)
119*c83a76b0SSuyog Pawar {
120*c83a76b0SSuyog Pawar return (-1);
121*c83a76b0SSuyog Pawar }
122*c83a76b0SSuyog Pawar
123*c83a76b0SSuyog Pawar ps_disp_mgr->apv_ptr[buf_id] = pv_ptr;
124*c83a76b0SSuyog Pawar ps_disp_mgr->ai4_abs_poc[buf_id] = abs_poc;
125*c83a76b0SSuyog Pawar return 0;
126*c83a76b0SSuyog Pawar }
127*c83a76b0SSuyog Pawar
128*c83a76b0SSuyog Pawar
129*c83a76b0SSuyog Pawar /**
130*c83a76b0SSuyog Pawar *******************************************************************************
131*c83a76b0SSuyog Pawar *
132*c83a76b0SSuyog Pawar * @brief
133*c83a76b0SSuyog Pawar * Gets the next buffer
134*c83a76b0SSuyog Pawar *
135*c83a76b0SSuyog Pawar * @par Description:
136*c83a76b0SSuyog Pawar * Gets the next display buffer
137*c83a76b0SSuyog Pawar *
138*c83a76b0SSuyog Pawar * @param[in] ps_disp_mgr
139*c83a76b0SSuyog Pawar * Pointer to the display buffer structure
140*c83a76b0SSuyog Pawar *
141*c83a76b0SSuyog Pawar * @param[out] pi4_buf_id
142*c83a76b0SSuyog Pawar * Pointer to hold buffer id of the display buffer being returned
143*c83a76b0SSuyog Pawar *
144*c83a76b0SSuyog Pawar * @returns Pointer to the next display buffer
145*c83a76b0SSuyog Pawar *
146*c83a76b0SSuyog Pawar * @remarks
147*c83a76b0SSuyog Pawar * None
148*c83a76b0SSuyog Pawar *
149*c83a76b0SSuyog Pawar *******************************************************************************
150*c83a76b0SSuyog Pawar */
ihevc_disp_mgr_get(disp_mgr_t * ps_disp_mgr,WORD32 * pi4_buf_id)151*c83a76b0SSuyog Pawar void* ihevc_disp_mgr_get(
152*c83a76b0SSuyog Pawar disp_mgr_t *ps_disp_mgr,
153*c83a76b0SSuyog Pawar WORD32 *pi4_buf_id)
154*c83a76b0SSuyog Pawar {
155*c83a76b0SSuyog Pawar WORD32 id;
156*c83a76b0SSuyog Pawar void *pv_ret_ptr;
157*c83a76b0SSuyog Pawar WORD32 i4_min_poc;
158*c83a76b0SSuyog Pawar WORD32 min_poc_id;
159*c83a76b0SSuyog Pawar
160*c83a76b0SSuyog Pawar
161*c83a76b0SSuyog Pawar pv_ret_ptr = NULL;
162*c83a76b0SSuyog Pawar i4_min_poc = 0x7FFFFFFF;
163*c83a76b0SSuyog Pawar min_poc_id = -1;
164*c83a76b0SSuyog Pawar
165*c83a76b0SSuyog Pawar /* Find minimum POC */
166*c83a76b0SSuyog Pawar for(id = 0; id < DISP_MGR_MAX_CNT; id++)
167*c83a76b0SSuyog Pawar {
168*c83a76b0SSuyog Pawar if((DEFAULT_POC != ps_disp_mgr->ai4_abs_poc[id]) &&
169*c83a76b0SSuyog Pawar (ps_disp_mgr->ai4_abs_poc[id] <= i4_min_poc))
170*c83a76b0SSuyog Pawar {
171*c83a76b0SSuyog Pawar i4_min_poc = ps_disp_mgr->ai4_abs_poc[id];
172*c83a76b0SSuyog Pawar min_poc_id = id;
173*c83a76b0SSuyog Pawar }
174*c83a76b0SSuyog Pawar }
175*c83a76b0SSuyog Pawar *pi4_buf_id = min_poc_id;
176*c83a76b0SSuyog Pawar /* If all pocs are still default_poc then return NULL */
177*c83a76b0SSuyog Pawar if(-1 == min_poc_id)
178*c83a76b0SSuyog Pawar {
179*c83a76b0SSuyog Pawar return NULL;
180*c83a76b0SSuyog Pawar }
181*c83a76b0SSuyog Pawar
182*c83a76b0SSuyog Pawar pv_ret_ptr = ps_disp_mgr->apv_ptr[min_poc_id];
183*c83a76b0SSuyog Pawar
184*c83a76b0SSuyog Pawar /* Set abs poc to default and apv_ptr to null so that the buffer is not returned again */
185*c83a76b0SSuyog Pawar ps_disp_mgr->apv_ptr[min_poc_id] = NULL;
186*c83a76b0SSuyog Pawar ps_disp_mgr->ai4_abs_poc[min_poc_id] = DEFAULT_POC;
187*c83a76b0SSuyog Pawar return pv_ret_ptr;
188*c83a76b0SSuyog Pawar }
189