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 #ifndef _EST_SAD_H_ 22*495ae853SAndroid Build Coastguard Worker #define _EST_SAD_H_ 23*495ae853SAndroid Build Coastguard Worker 24*495ae853SAndroid Build Coastguard Worker /* 25*495ae853SAndroid Build Coastguard Worker * "est_sad_t->i4_use_est_intra_sad" Flag to control how the I frame SAD is estimated. 26*495ae853SAndroid Build Coastguard Worker * If set to zero 27*495ae853SAndroid Build Coastguard Worker * - it uses the Intra sad calculated by the previous P frame as 28*495ae853SAndroid Build Coastguard Worker * the estimated sad for the current I frame 29*495ae853SAndroid Build Coastguard Worker * else 30*495ae853SAndroid Build Coastguard Worker * - it uses the ratio of P frame sads of the previous two GOPS and 31*495ae853SAndroid Build Coastguard Worker * scales the I Frame sad with this ratio to estimate the current 32*495ae853SAndroid Build Coastguard Worker * I frame SAD 33*495ae853SAndroid Build Coastguard Worker */ 34*495ae853SAndroid Build Coastguard Worker 35*495ae853SAndroid Build Coastguard Worker /* Estimating the Average SAD for the current picture type is done by: 36*495ae853SAndroid Build Coastguard Worker * 1) if picture_type is I 37*495ae853SAndroid Build Coastguard Worker * - Estimated SAD = (n-1)th intra frame interval(ifi) P frame Avg SAD * 38*495ae853SAndroid Build Coastguard Worker * ( prev I frame SAD / (n-2)nd intra frame interval(ifi) P frame Avg SAD) 39*495ae853SAndroid Build Coastguard Worker * - if only one IFI is encoded use the previous I frame SAD 40*495ae853SAndroid Build Coastguard Worker * 2) if picture type is P 41*495ae853SAndroid Build Coastguard Worker * - Estimate SAD is previous P frame SAD 42*495ae853SAndroid Build Coastguard Worker * 3) The first P frame in a IFI could use a little better logic to decide the 43*495ae853SAndroid Build Coastguard Worker * estimated SAD but currently we assume the last coded P frames SAD 44*495ae853SAndroid Build Coastguard Worker a*/ 45*495ae853SAndroid Build Coastguard Worker 46*495ae853SAndroid Build Coastguard Worker typedef struct est_sad_t *est_sad_handle; 47*495ae853SAndroid Build Coastguard Worker 48*495ae853SAndroid Build Coastguard Worker WORD32 irc_est_sad_num_fill_use_free_memtab(est_sad_handle *est_sad, 49*495ae853SAndroid Build Coastguard Worker itt_memtab_t *ps_memtab, 50*495ae853SAndroid Build Coastguard Worker ITT_FUNC_TYPE_E e_func_type); 51*495ae853SAndroid Build Coastguard Worker 52*495ae853SAndroid Build Coastguard Worker void irc_init_est_sad(est_sad_handle est_sad, WORD32 i4_use_est_frame_sad); 53*495ae853SAndroid Build Coastguard Worker 54*495ae853SAndroid Build Coastguard Worker UWORD32 irc_get_est_sad(est_sad_handle est_sad, picture_type_e e_pic_type); 55*495ae853SAndroid Build Coastguard Worker 56*495ae853SAndroid Build Coastguard Worker void irc_update_actual_sad(est_sad_handle est_sad, 57*495ae853SAndroid Build Coastguard Worker UWORD32 u4_actual_sad, 58*495ae853SAndroid Build Coastguard Worker picture_type_e e_pic_type); 59*495ae853SAndroid Build Coastguard Worker 60*495ae853SAndroid Build Coastguard Worker void irc_update_actual_sad_for_intra(est_sad_handle est_sad, 61*495ae853SAndroid Build Coastguard Worker WORD32 i4_intra_frm_cost); 62*495ae853SAndroid Build Coastguard Worker 63*495ae853SAndroid Build Coastguard Worker void irc_reset_est_sad(est_sad_handle ps_est_sad); 64*495ae853SAndroid Build Coastguard Worker #endif 65