xref: /aosp_15_r20/external/libhevc/common/ihevc_disp_mgr.c (revision c83a76b084498d55f252f48b2e3786804cdf24b7)
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