xref: /aosp_15_r20/external/libavc/common/ih264_disp_mgr.c (revision 495ae853bb871d1e5a258cb02c2cc13cde8ddb9a)
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_disp_mgr.c
25*495ae853SAndroid Build Coastguard Worker *
26*495ae853SAndroid Build Coastguard Worker * @brief
27*495ae853SAndroid Build Coastguard Worker *  Contains function definitions for display 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_disp_mgr_init
34*495ae853SAndroid Build Coastguard Worker *  - ih264_disp_mgr_add
35*495ae853SAndroid Build Coastguard Worker *  - ih264_disp_mgr_get
36*495ae853SAndroid Build Coastguard Worker *
37*495ae853SAndroid Build Coastguard Worker * @remarks
38*495ae853SAndroid Build Coastguard Worker *  none
39*495ae853SAndroid Build Coastguard Worker *
40*495ae853SAndroid Build Coastguard Worker *******************************************************************************
41*495ae853SAndroid Build Coastguard Worker */
42*495ae853SAndroid Build Coastguard Worker 
43*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
44*495ae853SAndroid Build Coastguard Worker /* File Includes                                                             */
45*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
46*495ae853SAndroid Build Coastguard Worker 
47*495ae853SAndroid Build Coastguard Worker /* System Include Files */
48*495ae853SAndroid Build Coastguard Worker #include <stdlib.h>
49*495ae853SAndroid Build Coastguard Worker 
50*495ae853SAndroid Build Coastguard Worker /* User Include Files */
51*495ae853SAndroid Build Coastguard Worker #include "ih264_typedefs.h"
52*495ae853SAndroid Build Coastguard Worker #include "ih264_macros.h"
53*495ae853SAndroid Build Coastguard Worker #include "ih264_disp_mgr.h"
54*495ae853SAndroid Build Coastguard Worker 
55*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
56*495ae853SAndroid Build Coastguard Worker /* Function Definitions                                                      */
57*495ae853SAndroid Build Coastguard Worker /*****************************************************************************/
58*495ae853SAndroid Build Coastguard Worker 
59*495ae853SAndroid Build Coastguard Worker /**
60*495ae853SAndroid Build Coastguard Worker *******************************************************************************
61*495ae853SAndroid Build Coastguard Worker *
62*495ae853SAndroid Build Coastguard Worker * @brief Initialization function for display buffer manager
63*495ae853SAndroid Build Coastguard Worker *
64*495ae853SAndroid Build Coastguard Worker * @par Description
65*495ae853SAndroid Build Coastguard Worker *  Initializes the display buffer management structure
66*495ae853SAndroid Build Coastguard Worker *
67*495ae853SAndroid Build Coastguard Worker * @param[in] ps_disp_mgr
68*495ae853SAndroid Build Coastguard Worker *  Pointer to the display buffer management structure
69*495ae853SAndroid Build Coastguard Worker *
70*495ae853SAndroid Build Coastguard Worker * @returns none
71*495ae853SAndroid Build Coastguard Worker *
72*495ae853SAndroid Build Coastguard Worker * @remarks none
73*495ae853SAndroid Build Coastguard Worker *
74*495ae853SAndroid Build Coastguard Worker *******************************************************************************
75*495ae853SAndroid Build Coastguard Worker */
ih264_disp_mgr_init(disp_mgr_t * ps_disp_mgr)76*495ae853SAndroid Build Coastguard Worker void ih264_disp_mgr_init(disp_mgr_t *ps_disp_mgr)
77*495ae853SAndroid Build Coastguard Worker {
78*495ae853SAndroid Build Coastguard Worker     WORD32 id;
79*495ae853SAndroid Build Coastguard Worker 
80*495ae853SAndroid Build Coastguard Worker     ps_disp_mgr->u4_last_abs_poc = DEFAULT_POC;
81*495ae853SAndroid Build Coastguard Worker 
82*495ae853SAndroid Build Coastguard Worker     for(id = 0; id < DISP_MGR_MAX_CNT; id++)
83*495ae853SAndroid Build Coastguard Worker     {
84*495ae853SAndroid Build Coastguard Worker         ps_disp_mgr->ai4_abs_poc[id] = DEFAULT_POC;
85*495ae853SAndroid Build Coastguard Worker         ps_disp_mgr->apv_ptr[id] = NULL;
86*495ae853SAndroid Build Coastguard Worker     }
87*495ae853SAndroid Build Coastguard Worker }
88*495ae853SAndroid Build Coastguard Worker 
89*495ae853SAndroid Build Coastguard Worker /**
90*495ae853SAndroid Build Coastguard Worker *******************************************************************************
91*495ae853SAndroid Build Coastguard Worker *
92*495ae853SAndroid Build Coastguard Worker * @brief Adds a buffer to the display manager
93*495ae853SAndroid Build Coastguard Worker *
94*495ae853SAndroid Build Coastguard Worker * @par Description:
95*495ae853SAndroid Build Coastguard Worker *  Adds a buffer to the display buffer manager
96*495ae853SAndroid Build Coastguard Worker *
97*495ae853SAndroid Build Coastguard Worker * @param[in] ps_disp_mgr
98*495ae853SAndroid Build Coastguard Worker *  Pointer to the display buffer management structure
99*495ae853SAndroid Build Coastguard Worker *
100*495ae853SAndroid Build Coastguard Worker * @param[in] buf_id
101*495ae853SAndroid Build Coastguard Worker *  ID of the display buffer
102*495ae853SAndroid Build Coastguard Worker *
103*495ae853SAndroid Build Coastguard Worker * @param[in] abs_poc
104*495ae853SAndroid Build Coastguard Worker *  Absolute POC of the display buffer
105*495ae853SAndroid Build Coastguard Worker *
106*495ae853SAndroid Build Coastguard Worker * @param[in] pv_ptr
107*495ae853SAndroid Build Coastguard Worker *  Pointer to the display buffer
108*495ae853SAndroid Build Coastguard Worker *
109*495ae853SAndroid Build Coastguard Worker * @returns  0 if success, -1 otherwise
110*495ae853SAndroid Build Coastguard Worker *
111*495ae853SAndroid Build Coastguard Worker * @remarks
112*495ae853SAndroid Build Coastguard Worker *  None
113*495ae853SAndroid Build Coastguard Worker *
114*495ae853SAndroid Build Coastguard Worker *******************************************************************************
115*495ae853SAndroid Build Coastguard Worker */
ih264_disp_mgr_add(disp_mgr_t * ps_disp_mgr,WORD32 buf_id,WORD32 abs_poc,void * pv_ptr)116*495ae853SAndroid Build Coastguard Worker WORD32 ih264_disp_mgr_add(disp_mgr_t *ps_disp_mgr,
117*495ae853SAndroid Build Coastguard Worker                           WORD32 buf_id,
118*495ae853SAndroid Build Coastguard Worker                           WORD32 abs_poc,
119*495ae853SAndroid Build Coastguard Worker                           void *pv_ptr)
120*495ae853SAndroid Build Coastguard Worker {
121*495ae853SAndroid Build Coastguard Worker     if(buf_id >= DISP_MGR_MAX_CNT)
122*495ae853SAndroid Build Coastguard Worker     {
123*495ae853SAndroid Build Coastguard Worker         return (-1);
124*495ae853SAndroid Build Coastguard Worker     }
125*495ae853SAndroid Build Coastguard Worker 
126*495ae853SAndroid Build Coastguard Worker     if(ps_disp_mgr->apv_ptr[buf_id] != NULL)
127*495ae853SAndroid Build Coastguard Worker     {
128*495ae853SAndroid Build Coastguard Worker         return (-1);
129*495ae853SAndroid Build Coastguard Worker     }
130*495ae853SAndroid Build Coastguard Worker 
131*495ae853SAndroid Build Coastguard Worker     ps_disp_mgr->apv_ptr[buf_id] = pv_ptr;
132*495ae853SAndroid Build Coastguard Worker     ps_disp_mgr->ai4_abs_poc[buf_id] = abs_poc;
133*495ae853SAndroid Build Coastguard Worker 
134*495ae853SAndroid Build Coastguard Worker     return 0;
135*495ae853SAndroid Build Coastguard Worker }
136*495ae853SAndroid Build Coastguard Worker 
137*495ae853SAndroid Build Coastguard Worker /**
138*495ae853SAndroid Build Coastguard Worker *******************************************************************************
139*495ae853SAndroid Build Coastguard Worker *
140*495ae853SAndroid Build Coastguard Worker * @brief Gets the next buffer
141*495ae853SAndroid Build Coastguard Worker *
142*495ae853SAndroid Build Coastguard Worker * @par Description:
143*495ae853SAndroid Build Coastguard Worker *  Gets the next display buffer
144*495ae853SAndroid Build Coastguard Worker *
145*495ae853SAndroid Build Coastguard Worker * @param[in] ps_disp_mgr
146*495ae853SAndroid Build Coastguard Worker *  Pointer to the display buffer structure
147*495ae853SAndroid Build Coastguard Worker *
148*495ae853SAndroid Build Coastguard Worker * @param[out]  pi4_buf_id
149*495ae853SAndroid Build Coastguard Worker *  Pointer to hold buffer id of the display buffer being returned
150*495ae853SAndroid Build Coastguard Worker *
151*495ae853SAndroid Build Coastguard Worker * @returns  Pointer to the next display buffer
152*495ae853SAndroid Build Coastguard Worker *
153*495ae853SAndroid Build Coastguard Worker * @remarks
154*495ae853SAndroid Build Coastguard Worker *  None
155*495ae853SAndroid Build Coastguard Worker *
156*495ae853SAndroid Build Coastguard Worker *******************************************************************************
157*495ae853SAndroid Build Coastguard Worker */
ih264_disp_mgr_get(disp_mgr_t * ps_disp_mgr,WORD32 * pi4_buf_id)158*495ae853SAndroid Build Coastguard Worker void* ih264_disp_mgr_get(disp_mgr_t *ps_disp_mgr, WORD32 *pi4_buf_id)
159*495ae853SAndroid Build Coastguard Worker {
160*495ae853SAndroid Build Coastguard Worker     WORD32 id;
161*495ae853SAndroid Build Coastguard Worker     void *pv_ret_ptr = NULL;
162*495ae853SAndroid Build Coastguard Worker     WORD32 i4_min_poc = 0x7FFFFFFF;
163*495ae853SAndroid Build Coastguard Worker     WORD32 min_poc_id = -1;
164*495ae853SAndroid Build Coastguard Worker 
165*495ae853SAndroid Build Coastguard Worker     /* Find minimum POC */
166*495ae853SAndroid Build Coastguard Worker     for(id = 0; id < DISP_MGR_MAX_CNT; id++)
167*495ae853SAndroid Build Coastguard Worker     {
168*495ae853SAndroid Build Coastguard Worker         if((DEFAULT_POC != ps_disp_mgr->ai4_abs_poc[id]) &&
169*495ae853SAndroid Build Coastguard Worker            (ps_disp_mgr->ai4_abs_poc[id] <= i4_min_poc))
170*495ae853SAndroid Build Coastguard Worker         {
171*495ae853SAndroid Build Coastguard Worker             i4_min_poc = ps_disp_mgr->ai4_abs_poc[id];
172*495ae853SAndroid Build Coastguard Worker             min_poc_id = id;
173*495ae853SAndroid Build Coastguard Worker         }
174*495ae853SAndroid Build Coastguard Worker     }
175*495ae853SAndroid Build Coastguard Worker     *pi4_buf_id = min_poc_id;
176*495ae853SAndroid Build Coastguard Worker     /* If all pocs are still default_poc then return NULL */
177*495ae853SAndroid Build Coastguard Worker     if(-1 == min_poc_id)
178*495ae853SAndroid Build Coastguard Worker     {
179*495ae853SAndroid Build Coastguard Worker         return NULL;
180*495ae853SAndroid Build Coastguard Worker     }
181*495ae853SAndroid Build Coastguard Worker 
182*495ae853SAndroid Build Coastguard Worker     pv_ret_ptr = ps_disp_mgr->apv_ptr[min_poc_id];
183*495ae853SAndroid Build Coastguard Worker 
184*495ae853SAndroid Build Coastguard Worker     /* Set abs poc to default and apv_ptr to null so that the buffer is not returned again */
185*495ae853SAndroid Build Coastguard Worker     ps_disp_mgr->apv_ptr[min_poc_id] = NULL;
186*495ae853SAndroid Build Coastguard Worker     ps_disp_mgr->ai4_abs_poc[min_poc_id] = DEFAULT_POC;
187*495ae853SAndroid Build Coastguard Worker 
188*495ae853SAndroid Build Coastguard Worker     return pv_ret_ptr;
189*495ae853SAndroid Build Coastguard Worker }
190