1*a97c2a1fSXin Li /****************************************************************************** 2*a97c2a1fSXin Li * 3*a97c2a1fSXin Li * Copyright (C) 2015 The Android Open Source Project 4*a97c2a1fSXin Li * 5*a97c2a1fSXin Li * Licensed under the Apache License, Version 2.0 (the "License"); 6*a97c2a1fSXin Li * you may not use this file except in compliance with the License. 7*a97c2a1fSXin Li * You may obtain a copy of the License at: 8*a97c2a1fSXin Li * 9*a97c2a1fSXin Li * http://www.apache.org/licenses/LICENSE-2.0 10*a97c2a1fSXin Li * 11*a97c2a1fSXin Li * Unless required by applicable law or agreed to in writing, software 12*a97c2a1fSXin Li * distributed under the License is distributed on an "AS IS" BASIS, 13*a97c2a1fSXin Li * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14*a97c2a1fSXin Li * See the License for the specific language governing permissions and 15*a97c2a1fSXin Li * limitations under the License. 16*a97c2a1fSXin Li * 17*a97c2a1fSXin Li ***************************************************************************** 18*a97c2a1fSXin Li * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore 19*a97c2a1fSXin Li */ 20*a97c2a1fSXin Li /** 21*a97c2a1fSXin Li ******************************************************************************* 22*a97c2a1fSXin Li * @file 23*a97c2a1fSXin Li * impeg2_buf_mgr.h 24*a97c2a1fSXin Li * 25*a97c2a1fSXin Li * @brief 26*a97c2a1fSXin Li * Function declarations used for buffer management 27*a97c2a1fSXin Li * 28*a97c2a1fSXin Li * @author 29*a97c2a1fSXin Li * Srinivas T 30*a97c2a1fSXin Li * 31*a97c2a1fSXin Li * @remarks 32*a97c2a1fSXin Li * None 33*a97c2a1fSXin Li * 34*a97c2a1fSXin Li ******************************************************************************* 35*a97c2a1fSXin Li */ 36*a97c2a1fSXin Li #ifndef _IMPEG2_BUF_MGR_H_ 37*a97c2a1fSXin Li #define _IMPEG2_BUF_MGR_H_ 38*a97c2a1fSXin Li 39*a97c2a1fSXin Li #define BUF_MGR_MAX_CNT 64 40*a97c2a1fSXin Li 41*a97c2a1fSXin Li #define BUF_MGR_DEC 1 42*a97c2a1fSXin Li #define BUF_MGR_REF (1 << 1) 43*a97c2a1fSXin Li #define BUF_MGR_DISP (1 << 2) 44*a97c2a1fSXin Li 45*a97c2a1fSXin Li typedef struct 46*a97c2a1fSXin Li { 47*a97c2a1fSXin Li /** 48*a97c2a1fSXin Li * max_buf_cnt 49*a97c2a1fSXin Li */ 50*a97c2a1fSXin Li UWORD32 u4_max_buf_cnt; 51*a97c2a1fSXin Li 52*a97c2a1fSXin Li /** 53*a97c2a1fSXin Li * active_buf_cnt 54*a97c2a1fSXin Li */ 55*a97c2a1fSXin Li UWORD32 u4_active_buf_cnt; 56*a97c2a1fSXin Li /** 57*a97c2a1fSXin Li * au4_status[BUF_MGR_MAX_CNT] 58*a97c2a1fSXin Li */ 59*a97c2a1fSXin Li UWORD32 au4_status[BUF_MGR_MAX_CNT]; 60*a97c2a1fSXin Li /* The last three bit of status are: */ 61*a97c2a1fSXin Li /* Bit 0 - DEC */ 62*a97c2a1fSXin Li /* Bit 1 - REF */ 63*a97c2a1fSXin Li /* Bit 2 - DISP */ 64*a97c2a1fSXin Li 65*a97c2a1fSXin Li void *apv_ptr[BUF_MGR_MAX_CNT]; 66*a97c2a1fSXin Li }buf_mgr_t; 67*a97c2a1fSXin Li 68*a97c2a1fSXin Li // intializes the buffer API structure 69*a97c2a1fSXin Li void impeg2_buf_mgr_init( 70*a97c2a1fSXin Li buf_mgr_t *ps_buf_mgr); 71*a97c2a1fSXin Li 72*a97c2a1fSXin Li // resets the buffer API structure 73*a97c2a1fSXin Li void impeg2_buf_mgr_reset( 74*a97c2a1fSXin Li buf_mgr_t *ps_buf_mgr); 75*a97c2a1fSXin Li 76*a97c2a1fSXin Li // Add buffer to buffer manager. 0: success, -1: fail (u4_active_buf_cnt has reached u4_max_buf_cnt) 77*a97c2a1fSXin Li WORD32 impeg2_buf_mgr_add( 78*a97c2a1fSXin Li buf_mgr_t *ps_buf_mgr, 79*a97c2a1fSXin Li void *pv_ptr, 80*a97c2a1fSXin Li WORD32 buf_id); 81*a97c2a1fSXin Li 82*a97c2a1fSXin Li // this function will set the buffer status to DEC 83*a97c2a1fSXin Li void* impeg2_buf_mgr_get_next_free( 84*a97c2a1fSXin Li buf_mgr_t *ps_buf_mgr, 85*a97c2a1fSXin Li WORD32 *pi4_id); 86*a97c2a1fSXin Li 87*a97c2a1fSXin Li // this function will check if there are any free buffers 88*a97c2a1fSXin Li WORD32 impeg2_buf_mgr_check_free( 89*a97c2a1fSXin Li buf_mgr_t *ps_buf_mgr); 90*a97c2a1fSXin Li 91*a97c2a1fSXin Li // mask will have who released it: DISP:REF:DEC 92*a97c2a1fSXin Li WORD32 impeg2_buf_mgr_release( 93*a97c2a1fSXin Li buf_mgr_t *ps_buf_mgr, 94*a97c2a1fSXin Li WORD32 id, 95*a97c2a1fSXin Li UWORD32 mask); 96*a97c2a1fSXin Li 97*a97c2a1fSXin Li // sets the status to one or all of DISP:REF:DEC 98*a97c2a1fSXin Li WORD32 impeg2_buf_mgr_set_status( 99*a97c2a1fSXin Li buf_mgr_t *ps_buf_mgr, 100*a97c2a1fSXin Li WORD32 id, 101*a97c2a1fSXin Li UWORD32 mask); 102*a97c2a1fSXin Li 103*a97c2a1fSXin Li // Gets status of the buffer 104*a97c2a1fSXin Li UWORD32 impeg2_buf_mgr_get_status( 105*a97c2a1fSXin Li buf_mgr_t *ps_buf_mgr, 106*a97c2a1fSXin Li WORD32 id); 107*a97c2a1fSXin Li 108*a97c2a1fSXin Li // pass the ID - buffer will be returned 109*a97c2a1fSXin Li void* impeg2_buf_mgr_get_buf( 110*a97c2a1fSXin Li buf_mgr_t *ps_buf_mgr, 111*a97c2a1fSXin Li WORD32 id); 112*a97c2a1fSXin Li 113*a97c2a1fSXin Li // will return number of active buffers 114*a97c2a1fSXin Li UWORD32 impeg2_buf_mgr_get_num_active_buf( 115*a97c2a1fSXin Li buf_mgr_t *ps_buf_mgr); 116*a97c2a1fSXin Li 117*a97c2a1fSXin Li 118*a97c2a1fSXin Li 119*a97c2a1fSXin Li #endif //_IMPEG2_BUF_MGR_H_ 120