diff options
author | Hamsalekha S <hamsalekha.s@ittiam.com> | 2015-03-13 21:24:58 +0530 |
---|---|---|
committer | Hamsalekha S <hamsalekha.s@ittiam.com> | 2015-04-02 15:59:02 +0530 |
commit | 8d3d303c7942ced6a987a52db8977d768dc3605f (patch) | |
tree | cc806c96794356996b13ba9970941d0aed74a97e /common/ih264_disp_mgr.c | |
parent | 3956d913d37327dcb340f836e604b04bd478b158 (diff) | |
download | android_external_libavc-8d3d303c7942ced6a987a52db8977d768dc3605f.tar.gz android_external_libavc-8d3d303c7942ced6a987a52db8977d768dc3605f.tar.bz2 android_external_libavc-8d3d303c7942ced6a987a52db8977d768dc3605f.zip |
Initial version
Change-Id: I7efe9a589cd24edf86e8d086b40c27cbbf8b4017
Diffstat (limited to 'common/ih264_disp_mgr.c')
-rwxr-xr-x | common/ih264_disp_mgr.c | 186 |
1 files changed, 186 insertions, 0 deletions
diff --git a/common/ih264_disp_mgr.c b/common/ih264_disp_mgr.c new file mode 100755 index 0000000..2bdb524 --- /dev/null +++ b/common/ih264_disp_mgr.c @@ -0,0 +1,186 @@ +/****************************************************************************** + * + * Copyright (C) 2015 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ***************************************************************************** + * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore +*/ +/** +******************************************************************************* +* @file +* ih264_disp_mgr.c +* +* @brief +* Contains function definitions for display management +* +* @author +* Srinivas T +* +* @par List of Functions: +* - ih264_disp_mgr_init() +* - ih264_disp_mgr_add() +* - ih264_disp_mgr_get() +* +* @remarks +* None +* +******************************************************************************* +*/ +#include <stdlib.h> +#include "ih264_typedefs.h" +#include "ih264_macros.h" +#include "ih264_disp_mgr.h" + + +/** +******************************************************************************* +* +* @brief +* Initialization function for display buffer manager +* +* @par Description: +* Initializes the display buffer management structure +* +* @param[in] ps_disp_mgr +* Pointer to the display buffer management structure +* +* @returns none +* +* @remarks +* None +* +******************************************************************************* +*/ +void ih264_disp_mgr_init(disp_mgr_t *ps_disp_mgr) +{ + WORD32 id; + + ps_disp_mgr->u4_last_abs_poc = DEFAULT_POC; + + for(id = 0; id < DISP_MGR_MAX_CNT; id++) + { + ps_disp_mgr->ai4_abs_poc[id] = DEFAULT_POC; + ps_disp_mgr->apv_ptr[id] = NULL; + } +} + + +/** +******************************************************************************* +* +* @brief +* Adds a buffer to the display manager +* +* @par Description: +* Adds a buffer to the display buffer manager +* +* @param[in] ps_disp_mgr +* Pointer to the display buffer management structure +* +* @param[in] buf_id +* ID of the display buffer +* +* @param[in] abs_poc +* Absolute POC of the display buffer +* +* @param[in] pv_ptr +* Pointer to the display buffer +* +* @returns 0 if success, -1 otherwise +* +* @remarks +* None +* +******************************************************************************* +*/ +WORD32 ih264_disp_mgr_add(disp_mgr_t *ps_disp_mgr, + WORD32 buf_id, + WORD32 abs_poc, + void *pv_ptr) +{ + if(buf_id >= DISP_MGR_MAX_CNT) + { + return (-1); + } + + if(ps_disp_mgr->apv_ptr[buf_id] != NULL) + { + return (-1); + } + + ps_disp_mgr->apv_ptr[buf_id] = pv_ptr; + ps_disp_mgr->ai4_abs_poc[buf_id] = abs_poc; + return 0; +} + + +/** +******************************************************************************* +* +* @brief +* Gets the next buffer +* +* @par Description: +* Gets the next display buffer +* +* @param[in] ps_disp_mgr +* Pointer to the display buffer structure +* +* @param[out] pi4_buf_id +* Pointer to hold buffer id of the display buffer being returned +* +* @returns Pointer to the next display buffer +* +* @remarks +* None +* +******************************************************************************* +*/ +void* ih264_disp_mgr_get(disp_mgr_t *ps_disp_mgr, WORD32 *pi4_buf_id) +{ + WORD32 id; + void *pv_ret_ptr; + WORD32 i4_min_poc; + WORD32 min_poc_id; + + + pv_ret_ptr = NULL; + i4_min_poc = 0x7FFFFFFF; + min_poc_id = -1; + + /* Find minimum POC */ + for(id = 0; id < DISP_MGR_MAX_CNT; id++) + { + if((DEFAULT_POC != ps_disp_mgr->ai4_abs_poc[id]) && + (ps_disp_mgr->ai4_abs_poc[id] <= i4_min_poc)) + { + i4_min_poc = ps_disp_mgr->ai4_abs_poc[id]; + min_poc_id = id; + } + } + *pi4_buf_id = min_poc_id; + /* If all pocs are still default_poc then return NULL */ + if(-1 == min_poc_id) + { + return NULL; + } + + pv_ret_ptr = ps_disp_mgr->apv_ptr[min_poc_id]; + + /* Set abs poc to default and apv_ptr to null so that the buffer is not returned again */ + ps_disp_mgr->apv_ptr[min_poc_id] = NULL; + ps_disp_mgr->ai4_abs_poc[min_poc_id] = DEFAULT_POC; + return pv_ret_ptr; +} |