ih264e_rc_mem_interface.c revision 8d3d303c7942ced6a987a52db8977d768dc3605f
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" 658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ime_structs.h" 668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264e.h" 678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ithread.h" 688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264e.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" 838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264e_error.h" 848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264e_defs.h" 858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264e_bitstream.h" 868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "irc_cntrl_param.h" 878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "irc_frame_info_collector.h" 888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264e_rate_control.h" 898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264e_structs.h" 908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264e_master.h" 918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264_buf_mgr.h" 928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264_dpb_mgr.h" 938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264e_utils.h" 948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264e_platform_macros.h" 958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264_cavlc_tables.h" 968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264e_config.h" 978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264e_statistics.h" 988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264e_trace.h" 998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264e_statistics.h" 1008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264e_error.h" 1018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264e_utils.h" 1028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264e_fmt_conv.h" 1038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264e_cavlc.h" 1048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264e_rc_mem_interface.h" 1058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264e_time_stamp.h" 1068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "irc_common.h" 1078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "irc_rd_model.h" 1088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "irc_est_sad.h" 1098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "irc_fixed_point_error_bits.h" 1108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "irc_vbr_storage_vbv.h" 1118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "irc_picture_type.h" 1128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "irc_bit_allocation.h" 1138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "irc_mb_model_based.h" 1148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "irc_cbr_buffer_control.h" 1158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "irc_vbr_str_prms.h" 1168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "irc_rate_control_api.h" 1178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "irc_rate_control_api_structs.h" 1188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#include "ih264e_modify_frm_rate.h" 1198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 1208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 1218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 1228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/* Function Definitions */ 1238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/*****************************************************************************/ 1248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 1258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/** 1268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S****************************************************************************** 1278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 1288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @brief This function fills memory record attributes 1298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 1308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @par Description 1318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* This function fills memory record attributes 1328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 1338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] ps_mem_tab 1348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* pointer to mem records 1358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 1368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] u4_size 1378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* size of the record 1388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 1398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] i4_alignment 1408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* memory alignment size 1418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 1428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] e_usage 1438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* usage 1448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 1458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] e_mem_region 1468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* mem region 1478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 1488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @return void 1498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 1508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S****************************************************************************** 1518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*/ 1528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid fill_memtab(itt_memtab_t *ps_mem_tab, 1538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 u4_size, 1548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 i4_alignment, 1558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ITT_MEM_USAGE_TYPE_E e_usage, 1568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ITT_MEM_REGION_E e_mem_region) 1578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 1588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Make the size next multiple of alignment */ 1598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 i4_aligned_size = (((u4_size) + (i4_alignment-1)) & (~(i4_alignment-1))); 1608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 1618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Fill the memtab */ 1628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_mem_tab->u4_size = i4_aligned_size; 1638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_mem_tab->i4_alignment = i4_alignment; 1648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_mem_tab->e_usage = e_usage; 1658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_mem_tab->e_mem_region = e_mem_region; 1668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 1678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 1688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/** 1698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S****************************************************************************** 1708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 1718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @brief This function fills memory record attributes 1728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 1738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @par Description 1748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* This function fills memory record attributes 1758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 1768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] ps_mem_tab 1778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* pointer to mem records 1788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 1798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] ptr_to_be_filled 1808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* handle to the memory record storage space 1818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 1828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] e_func_type 1838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* enum that dictates fill memory records or use memory records 1848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 1858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @return void 1868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 1878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S****************************************************************************** 1888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*/ 1898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha SWORD32 use_or_fill_base(itt_memtab_t *ps_mem_tab, 1908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S void **ptr_to_be_filled, 1918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ITT_FUNC_TYPE_E e_func_type) 1928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 1938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Fill base for freeing the allocated memory */ 1948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if (e_func_type == FILL_BASE) 1958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 1968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if (ptr_to_be_filled[0] != 0) 1978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 1988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_mem_tab->pv_base = ptr_to_be_filled[0]; 1998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return (0); 2008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 2018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 2028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 2038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return (-1); 2048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 2058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 2068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* obtain the allocated memory from base pointer */ 2078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if (e_func_type == USE_BASE) 2088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 2098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if (ps_mem_tab->pv_base != 0) 2108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 2118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ptr_to_be_filled[0] = ps_mem_tab->pv_base; 2128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return (0); 2138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 2148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S else 2158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 2168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return (-1); 2178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 2188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 2198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return (0); 2208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 2218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 2228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/** 2238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S****************************************************************************** 2248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 2258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @brief This function maps rc mem records structure to encoder lib mem records 2268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* structure 2278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 2288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @par Description 2298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* This function maps rc mem records structure to encoder lib mem records 2308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* structure 2318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 2328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] ps_mem 2338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* pointer to encoder lib mem records 2348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 2358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] rc_memtab 2368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* pointer to rc mem records 2378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 2388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] num_mem_recs 2398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* number of memory records 2408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 2418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @return void 2428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 2438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S****************************************************************************** 2448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*/ 2458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264e_map_rc_mem_recs_to_itt_api(iv_mem_rec_t *ps_mem, 2468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S itt_memtab_t *rc_memtab, 2478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 num_mem_recs) 2488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 2498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 j; 2508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 Size, align; 2518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 2528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for (j = 0; j < num_mem_recs; j++) 2538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 2548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S Size = rc_memtab->u4_size; 2558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S align = rc_memtab->i4_alignment; 2568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 2578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* we always ask for external persistent cacheable memory */ 2588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S FILL_MEMTAB(ps_mem, j, Size, align, IV_EXTERNAL_CACHEABLE_PERSISTENT_MEM); 2598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 2608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S rc_memtab++; 2618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 2628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 2638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 2648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/** 2658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S******************************************************************************* 2668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 2678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @brief This function maps encoder lib mem records structure to RC memory 2688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* records structure 2698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 2708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @par Description 2718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* This function maps encoder lib mem records structure to RC memory 2728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* records structure 2738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 2748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] ps_mem 2758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* pointer to encoder lib mem records 2768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 2778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] rc_memtab 2788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* pointer to rc mem records 2798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 2808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] num_mem_recs 2818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* Number of memory records 2828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 2838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @returns none 2848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 2858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @remarks 2868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 2878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S******************************************************************************* 2888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*/ 2898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid ih264e_map_itt_mem_rec_to_rc_mem_rec(iv_mem_rec_t *ps_mem, 2908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S itt_memtab_t *rc_memtab, 2918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 num_mem_recs) 2928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 2938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S UWORD32 i; 2948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 2958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for (i = 0; i < num_mem_recs; i++) 2968d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 2978d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S rc_memtab->i4_alignment = ps_mem->u4_mem_alignment; 2988d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S rc_memtab->u4_size = ps_mem->u4_mem_size; 2998d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S rc_memtab->pv_base = ps_mem->pv_base; 3008d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 3018d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* only DDR memory is available */ 3028d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S rc_memtab->e_mem_region = DDR; 3038d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S rc_memtab->e_usage = PERSISTENT; 3048d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 3058d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S rc_memtab++; 3068d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ps_mem++; 3078d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 3088d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 3098d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 3108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/** 3118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S****************************************************************************** 3128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 3138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @brief Get memtabs for rate control 3148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 3158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @par Description 3168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* This routine is used to Get/init memtabs for rate control 3178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 3188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] pv_rate_control 3198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* pointer to rate control context (handle) 3208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 3218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] ps_mem 3228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* pointer to encoder lib mem records 3238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 3248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @param[in] e_func_type 3258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* enum that dictates fill memory records or Init memory records 3268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 3278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @return total number of mem records 3288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* 3298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S****************************************************************************** 3308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*/ 3318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha SWORD32 ih264e_get_rate_control_mem_tab(void *pv_rate_control, 3328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S iv_mem_rec_t *ps_mem, 3338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ITT_FUNC_TYPE_E e_func_type) 3348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{ 3358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S static itt_memtab_t as_itt_memtab[NUM_RC_MEMTABS]; 3368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S WORD32 i4_num_memtab = 0, j = 0; 3378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S void *refptr2[4]; 3388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S void **refptr1[4]; 3398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S rate_control_ctxt_t *ps_rate_control = pv_rate_control; 3408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 3418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S for (j = 0; j < 4; j++) 3428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S refptr1[j] = &(refptr2[j]); 3438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 3448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S j = 0; 3458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 3468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S if (e_func_type == USE_BASE || e_func_type == FILL_BASE) 3478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S { 3488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S refptr1[1] = &ps_rate_control->pps_frame_time; 3498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S refptr1[2] = &ps_rate_control->pps_time_stamp; 3508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S refptr1[3] = &ps_rate_control->pps_pd_frm_rate; 3518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S refptr1[0] = &ps_rate_control->pps_rate_control_api; 3528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S } 3538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 3548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Get the total number of memtabs used by Rate Controller */ 3558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i4_num_memtab = irc_rate_control_num_fill_use_free_memtab((rate_control_api_t **)refptr1[0], NULL, GET_NUM_MEMTAB); 3568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Few extra steps during init */ 3578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ih264e_map_itt_mem_rec_to_rc_mem_rec((&ps_mem[j]), as_itt_memtab+j, i4_num_memtab); 3588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Fill the memtabs used by Rate Controller */ 3598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha 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); 3608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Mapping ittiam memtabs to App. memtabs */ 3618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ih264e_map_rc_mem_recs_to_itt_api((&ps_mem[j]), as_itt_memtab+j, i4_num_memtab); 3628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S j += i4_num_memtab; 3638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 3648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Get the total number of memtabs used by Frame time Module */ 3658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i4_num_memtab = ih264e_frame_time_get_init_free_memtab((frame_time_t **)refptr1[1], NULL, GET_NUM_MEMTAB); 3668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Few extra steps during init */ 3678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ih264e_map_itt_mem_rec_to_rc_mem_rec((&ps_mem[j]), as_itt_memtab+j, i4_num_memtab); 3688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Fill the memtabs used by Frame time Module */ 3698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i4_num_memtab = ih264e_frame_time_get_init_free_memtab((frame_time_t **)refptr1[1], as_itt_memtab+j, e_func_type); 3708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Mapping ittiam memtabs to App. memtabs */ 3718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ih264e_map_rc_mem_recs_to_itt_api((&ps_mem[j]), as_itt_memtab+j, i4_num_memtab); 3728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S j += i4_num_memtab; 3738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 3748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Get the total number of memtabs used by Time stamp Module */ 3758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i4_num_memtab = ih264e_time_stamp_get_init_free_memtab((time_stamp_t **)refptr1[2], NULL, GET_NUM_MEMTAB); 3768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Few extra steps during init */ 3778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ih264e_map_itt_mem_rec_to_rc_mem_rec((&ps_mem[j]), as_itt_memtab+j, i4_num_memtab); 3788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Fill the memtabs used by Time Stamp Module */ 3798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i4_num_memtab = ih264e_time_stamp_get_init_free_memtab((time_stamp_t **)refptr1[2], as_itt_memtab+j, e_func_type); 3808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Mapping ittiam memtabs to App. memtabs */ 3818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ih264e_map_rc_mem_recs_to_itt_api((&ps_mem[j]), as_itt_memtab+j, i4_num_memtab); 3828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S j += i4_num_memtab; 3838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 3848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Get the total number of memtabs used by Frame rate Module */ 3858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S i4_num_memtab = ih264e_pd_frm_rate_get_init_free_memtab((pd_frm_rate_t **)refptr1[3], NULL, GET_NUM_MEMTAB); 3868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Few extra steps during init */ 3878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ih264e_map_itt_mem_rec_to_rc_mem_rec((&ps_mem[j]), as_itt_memtab+j, i4_num_memtab); 3888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Fill the memtabs used by Frame Rate Module */ 3898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha 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); 3908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S /* Mapping ittiam memtabs to App. memtabs */ 3918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S ih264e_map_rc_mem_recs_to_itt_api((&ps_mem[j]), as_itt_memtab+j, i4_num_memtab); 3928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S j += i4_num_memtab; 3938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S 3948d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S return j; /* Total MemTabs Needed by Rate Control Module */ 3958d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S} 396