18d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/****************************************************************************** 28d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 38d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * Copyright (C) 2015 The Android Open Source Project 48d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 58d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * Licensed under the Apache License, Version 2.0 (the "License"); 68d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * you may not use this file except in compliance with the License. 78d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * You may obtain a copy of the License at: 88d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 98d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * http://www.apache.org/licenses/LICENSE-2.0 108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * Unless required by applicable law or agreed to in writing, software 128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * distributed under the License is distributed on an "AS IS" BASIS, 138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * See the License for the specific language governing permissions and 158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * limitations under the License. 168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * 178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ***************************************************************************** 188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore 198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*/ 208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/** 228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S****************************************************************************** 238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @file 248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* ih264e_rc_mem_interface.c 258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @brief 278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* This file contains api function definitions for rate control memtabs 288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @author 308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* ittiam 318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* List of Functions 338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* - fill_memtab() 348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* - use_or_fill_base() 358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* - ih264e_map_rc_mem_recs_to_itt_api() 368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* - ih264e_map_itt_mem_rec_to_rc_mem_rec() 378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* - ih264e_get_rate_control_mem_tab() 388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @remarks 408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* None 418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S******************************************************************************* 438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*/ 448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* File Includes */ 488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* System include files */ 518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include <stdio.h> 528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include <string.h> 538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include <stdlib.h> 548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include <assert.h> 558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include <stdarg.h> 568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include <math.h> 578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* User Include Files */ 598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264e_config.h" 608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264_typedefs.h" 618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264_size_defs.h" 628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "iv2.h" 638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ive2.h" 648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ime_distortion_metrics.h" 65134291ea0b1b9794b4d7feee2c3ffdbd941c5237Harinarayanan K K#include "ime_defs.h" 668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ime_structs.h" 678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264e.h" 688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ithread.h" 698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264_defs.h" 708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264_debug.h" 718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264_macros.h" 728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264_platform_macros.h" 738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264_error.h" 748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264_structs.h" 758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264_trans_quant_itrans_iquant.h" 768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264_inter_pred_filters.h" 778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264_mem_fns.h" 788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264_padding.h" 798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264_intra_pred_filters.h" 808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264_deblk_edge_filters.h" 818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264_common_tables.h" 828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264_list.h" 83134291ea0b1b9794b4d7feee2c3ffdbd941c5237Harinarayanan K K#include "ih264_cabac_tables.h" 848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264e_error.h" 858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264e_defs.h" 868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264e_bitstream.h" 878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "irc_cntrl_param.h" 888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "irc_frame_info_collector.h" 898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264e_rate_control.h" 90134291ea0b1b9794b4d7feee2c3ffdbd941c5237Harinarayanan K K#include "ih264e_cabac_structs.h" 918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264e_structs.h" 928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264e_master.h" 938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264_buf_mgr.h" 948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264_dpb_mgr.h" 958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264e_utils.h" 968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264e_platform_macros.h" 978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264_cavlc_tables.h" 988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264e_statistics.h" 998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264e_trace.h" 1008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264e_fmt_conv.h" 1018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264e_cavlc.h" 1028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264e_rc_mem_interface.h" 1038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264e_time_stamp.h" 1048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "irc_common.h" 1058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "irc_rd_model.h" 1068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "irc_est_sad.h" 1078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "irc_fixed_point_error_bits.h" 1088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "irc_vbr_storage_vbv.h" 1098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "irc_picture_type.h" 1108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "irc_bit_allocation.h" 1118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "irc_mb_model_based.h" 1128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "irc_cbr_buffer_control.h" 1138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "irc_vbr_str_prms.h" 1148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "irc_rate_control_api.h" 1158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "irc_rate_control_api_structs.h" 1168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264e_modify_frm_rate.h" 1178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 1188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 1198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 1208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Function Definitions */ 1218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 1228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 1238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/** 1248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S****************************************************************************** 1258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 1268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @brief This function fills memory record attributes 1278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 1288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @par Description 1298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* This function fills memory record attributes 1308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 1318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] ps_mem_tab 1328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* pointer to mem records 1338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 1348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] u4_size 1358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* size of the record 1368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 1378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] i4_alignment 1388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* memory alignment size 1398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 1408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] e_usage 1418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* usage 1428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 1438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] e_mem_region 1448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* mem region 1458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 1468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @return void 1478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 1488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S****************************************************************************** 1498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*/ 1508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid fill_memtab(itt_memtab_t *ps_mem_tab, 1518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 u4_size, 1528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 i4_alignment, 1538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ITT_MEM_USAGE_TYPE_E e_usage, 1548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ITT_MEM_REGION_E e_mem_region) 1558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 1568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Make the size next multiple of alignment */ 1578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 i4_aligned_size = (((u4_size) + (i4_alignment-1)) & (~(i4_alignment-1))); 1588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 1598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Fill the memtab */ 1608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_mem_tab->u4_size = i4_aligned_size; 1618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_mem_tab->i4_alignment = i4_alignment; 1628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_mem_tab->e_usage = e_usage; 1638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_mem_tab->e_mem_region = e_mem_region; 1648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 1658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 1668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/** 1678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S****************************************************************************** 1688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 1698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @brief This function fills memory record attributes 1708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 1718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @par Description 1728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* This function fills memory record attributes 1738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 1748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] ps_mem_tab 1758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* pointer to mem records 1768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 1778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] ptr_to_be_filled 1788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* handle to the memory record storage space 1798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 1808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] e_func_type 1818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* enum that dictates fill memory records or use memory records 1828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 1838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @return void 1848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 1858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S****************************************************************************** 1868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*/ 1878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha SWORD32 use_or_fill_base(itt_memtab_t *ps_mem_tab, 1888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S void **ptr_to_be_filled, 1898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ITT_FUNC_TYPE_E e_func_type) 1908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 1918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Fill base for freeing the allocated memory */ 1928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if (e_func_type == FILL_BASE) 1938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 1948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if (ptr_to_be_filled[0] != 0) 1958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 1968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_mem_tab->pv_base = ptr_to_be_filled[0]; 1978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return (0); 1988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 1998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 2008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 2018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return (-1); 2028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 2038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 2048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* obtain the allocated memory from base pointer */ 2058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if (e_func_type == USE_BASE) 2068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 2078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if (ps_mem_tab->pv_base != 0) 2088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 2098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ptr_to_be_filled[0] = ps_mem_tab->pv_base; 2108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return (0); 2118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 2128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 2138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 2148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return (-1); 2158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 2168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 2178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return (0); 2188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 2198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 2208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/** 2218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S****************************************************************************** 2228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 2238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @brief This function maps rc mem records structure to encoder lib mem records 2248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* structure 2258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 2268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @par Description 2278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* This function maps rc mem records structure to encoder lib mem records 2288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* structure 2298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 2308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] ps_mem 2318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* pointer to encoder lib mem records 2328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 2338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] rc_memtab 2348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* pointer to rc mem records 2358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 2368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] num_mem_recs 2378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* number of memory records 2388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 2398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @return void 2408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 2418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S****************************************************************************** 2428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*/ 2438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264e_map_rc_mem_recs_to_itt_api(iv_mem_rec_t *ps_mem, 2448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S itt_memtab_t *rc_memtab, 2458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 num_mem_recs) 2468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 2478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 j; 2488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 Size, align; 2498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 2508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for (j = 0; j < num_mem_recs; j++) 2518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 2528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S Size = rc_memtab->u4_size; 2538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S align = rc_memtab->i4_alignment; 2548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 2558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* we always ask for external persistent cacheable memory */ 2568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S FILL_MEMTAB(ps_mem, j, Size, align, IV_EXTERNAL_CACHEABLE_PERSISTENT_MEM); 2578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 2588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S rc_memtab++; 2598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 2608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 2618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 2628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/** 2638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S******************************************************************************* 2648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 2658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @brief This function maps encoder lib mem records structure to RC memory 2668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* records structure 2678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 2688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @par Description 2698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* This function maps encoder lib mem records structure to RC memory 2708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* records structure 2718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 2728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] ps_mem 2738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* pointer to encoder lib mem records 2748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 2758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] rc_memtab 2768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* pointer to rc mem records 2778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 2788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] num_mem_recs 2798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* Number of memory records 2808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 2818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @returns none 2828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 2838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @remarks 2848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 2858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S******************************************************************************* 2868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*/ 2878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264e_map_itt_mem_rec_to_rc_mem_rec(iv_mem_rec_t *ps_mem, 2888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S itt_memtab_t *rc_memtab, 2898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 num_mem_recs) 2908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 2918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 i; 2928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 2938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for (i = 0; i < num_mem_recs; i++) 2948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 2958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S rc_memtab->i4_alignment = ps_mem->u4_mem_alignment; 2968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S rc_memtab->u4_size = ps_mem->u4_mem_size; 2978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S rc_memtab->pv_base = ps_mem->pv_base; 2988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 2998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* only DDR memory is available */ 3008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S rc_memtab->e_mem_region = DDR; 3018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S rc_memtab->e_usage = PERSISTENT; 3028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 3038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S rc_memtab++; 3048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_mem++; 3058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 3068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 3078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 3088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/** 3098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S****************************************************************************** 3108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 3118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @brief Get memtabs for rate control 3128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 3138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @par Description 3148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* This routine is used to Get/init memtabs for rate control 3158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 3168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] pv_rate_control 3178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* pointer to rate control context (handle) 3188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 3198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] ps_mem 3208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* pointer to encoder lib mem records 3218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 3228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] e_func_type 3238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* enum that dictates fill memory records or Init memory records 3248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 3258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @return total number of mem records 3268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 3278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S****************************************************************************** 3288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*/ 3298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha SWORD32 ih264e_get_rate_control_mem_tab(void *pv_rate_control, 3308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S iv_mem_rec_t *ps_mem, 3318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ITT_FUNC_TYPE_E e_func_type) 3328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 3337313602decf30364e4823f6a9c34045432f0bd9fMartin Storsjo itt_memtab_t as_itt_memtab[NUM_RC_MEMTABS]; 3348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 i4_num_memtab = 0, j = 0; 3358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S void *refptr2[4]; 3368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S void **refptr1[4]; 3378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S rate_control_ctxt_t *ps_rate_control = pv_rate_control; 3388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 3398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for (j = 0; j < 4; j++) 3408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S refptr1[j] = &(refptr2[j]); 3418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 3428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S j = 0; 3438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 3448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if (e_func_type == USE_BASE || e_func_type == FILL_BASE) 3458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 3468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S refptr1[1] = &ps_rate_control->pps_frame_time; 3478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S refptr1[2] = &ps_rate_control->pps_time_stamp; 3488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S refptr1[3] = &ps_rate_control->pps_pd_frm_rate; 3498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S refptr1[0] = &ps_rate_control->pps_rate_control_api; 3508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 3518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 3528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Get the total number of memtabs used by Rate Controller */ 3538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i4_num_memtab = irc_rate_control_num_fill_use_free_memtab((rate_control_api_t **)refptr1[0], NULL, GET_NUM_MEMTAB); 3548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Few extra steps during init */ 3558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ih264e_map_itt_mem_rec_to_rc_mem_rec((&ps_mem[j]), as_itt_memtab+j, i4_num_memtab); 3568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Fill the memtabs used by Rate Controller */ 3578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i4_num_memtab = irc_rate_control_num_fill_use_free_memtab((rate_control_api_t **)refptr1[0],as_itt_memtab+j,e_func_type); 3588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Mapping ittiam memtabs to App. memtabs */ 3598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ih264e_map_rc_mem_recs_to_itt_api((&ps_mem[j]), as_itt_memtab+j, i4_num_memtab); 3608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S j += i4_num_memtab; 3618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 3628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Get the total number of memtabs used by Frame time Module */ 3638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i4_num_memtab = ih264e_frame_time_get_init_free_memtab((frame_time_t **)refptr1[1], NULL, GET_NUM_MEMTAB); 3648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Few extra steps during init */ 3658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ih264e_map_itt_mem_rec_to_rc_mem_rec((&ps_mem[j]), as_itt_memtab+j, i4_num_memtab); 3668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Fill the memtabs used by Frame time Module */ 3678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i4_num_memtab = ih264e_frame_time_get_init_free_memtab((frame_time_t **)refptr1[1], as_itt_memtab+j, e_func_type); 3688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Mapping ittiam memtabs to App. memtabs */ 3698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ih264e_map_rc_mem_recs_to_itt_api((&ps_mem[j]), as_itt_memtab+j, i4_num_memtab); 3708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S j += i4_num_memtab; 3718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 3728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Get the total number of memtabs used by Time stamp Module */ 3738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i4_num_memtab = ih264e_time_stamp_get_init_free_memtab((time_stamp_t **)refptr1[2], NULL, GET_NUM_MEMTAB); 3748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Few extra steps during init */ 3758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ih264e_map_itt_mem_rec_to_rc_mem_rec((&ps_mem[j]), as_itt_memtab+j, i4_num_memtab); 3768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Fill the memtabs used by Time Stamp Module */ 3778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i4_num_memtab = ih264e_time_stamp_get_init_free_memtab((time_stamp_t **)refptr1[2], as_itt_memtab+j, e_func_type); 3788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Mapping ittiam memtabs to App. memtabs */ 3798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ih264e_map_rc_mem_recs_to_itt_api((&ps_mem[j]), as_itt_memtab+j, i4_num_memtab); 3808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S j += i4_num_memtab; 3818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 3828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Get the total number of memtabs used by Frame rate Module */ 3838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i4_num_memtab = ih264e_pd_frm_rate_get_init_free_memtab((pd_frm_rate_t **)refptr1[3], NULL, GET_NUM_MEMTAB); 3848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Few extra steps during init */ 3858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ih264e_map_itt_mem_rec_to_rc_mem_rec((&ps_mem[j]), as_itt_memtab+j, i4_num_memtab); 3868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Fill the memtabs used by Frame Rate Module */ 3878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i4_num_memtab = ih264e_pd_frm_rate_get_init_free_memtab((pd_frm_rate_t **)refptr1[3], as_itt_memtab+j, e_func_type); 3888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Mapping ittiam memtabs to App. memtabs */ 3898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ih264e_map_rc_mem_recs_to_itt_api((&ps_mem[j]), as_itt_memtab+j, i4_num_memtab); 3908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S j += i4_num_memtab; 3918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 3928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return j; /* Total MemTabs Needed by Rate Control Module */ 3938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 394