/******************************************************************************
*
* Copyright (C) 2018 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 rc_look_ahead_params.h
*
* \brief
* TODO:
*
* \date
*
* \author
* ittiam
*
******************************************************************************
*/
#ifndef _RC_LOOK_AHEAD_PARAMS_H_
#define _RC_LOOK_AHEAD_PARAMS_H_
/*****************************************************************************/
/* Structure */
/*****************************************************************************/
/*
* Frame metrics
*/
typedef struct
{
/* Frame variance. Spatial property */
LWORD64 i8_8x8_var_lum;
/* frame and histogram similarity */
WORD32 ai4_hsim[3];
WORD32 i4_fsim;
} rc_picture_metrics_t;
typedef struct
{
/* common params for both lap_out and rc_lap_out */
WORD32 i4_rc_pic_type;
WORD32 i4_rc_poc;
WORD32 i4_rc_temporal_lyr_id;
WORD32 i4_rc_is_ref_pic;
WORD32 i4_rc_scene_type;
UWORD32 u4_rc_scene_num;
WORD32 i4_rc_display_num;
WORD32 i4_rc_quality_preset;
WORD32 i4_rc_first_field;
/* rc_lap_out specific params */
/**
* array of rc_lap_out_params_t pointer to access
* the picture metrics of future pictures in capture order till
* the look ahead frames
*/
void *ps_rc_lap_out_next_encode;
WORD32 i4_next_pic_type;
WORD32 i4_is_I_only_scd;
WORD32 i4_is_non_I_scd;
LWORD64 i8_frame_satd_act_accum;
LWORD64 i8_est_I_pic_header_bits;
/* Num pels in frame considered while accumulating the above satd metric */
WORD32 i4_num_pels_in_frame_considered;
/* Field type i.e either bottom or top is convyed */
WORD32 i4_is_bottom_field;
/* Coarse ME accumulated cost for entire frame */
LWORD64 i8_frame_acc_coarse_me_cost;
/* Coarse ME accumulated sad for entire frame */
LWORD64 ai8_frame_acc_coarse_me_sad[52];
/* L1 intra SATD */
LWORD64 i8_pre_intra_satd;
/* L1 intra SATD */
LWORD64 ai8_pre_intra_sad[52];
/* L1 IPE sad */
LWORD64 i8_raw_pre_intra_sad;
/* Frame - level L1 ME sad */
LWORD64 i8_raw_l1_coarse_me_sad;
/** Frame - level L1 satd/act accum*/
LWORD64 i8_frame_satd_by_act_L1_accum;
/** Frame - level L1 satd/act accum*/
LWORD64 i8_satd_by_act_L1_accum_evaluated;
/* Frame satd/act accumulated for L0 predicted based on L1 satd and qp used for L0 processing */
LWORD64 i8_frm_satd_act_accum_L0_frm_L1;
/* Frames for which online/offline model is not valid */
WORD32 i4_is_model_valid;
/* Steady State Frame */
WORD32 i4_is_steady_state;
LWORD64 i8_est_text_bits;
LWORD64 i8_frame_num;
frame_info_t *ps_frame_info;
/* complexity metrics from LAP */
rc_picture_metrics_t s_pic_metrics;
WORD32 i4_is_cmplx_change_reset_model;
WORD32 i4_is_cmplx_change_reset_bits;
WORD32 i4_is_rc_model_needs_to_be_updated;
WORD32 i4_next_sc_i_in_rc_look_ahead;
WORD32 ai4_num_pic_type[MAX_PIC_TYPE];
WORD32 ai4_offsets[5];
WORD32 i4_offsets_set_flag;
WORD32 i4_complexity_bin;
WORD32 i4_ignore_for_rc_update;
WORD32 i4_L1_qp;
WORD32 i4_L0_qp;
WORD32 i4_enable_lookahead;
WORD32 i4_orig_rc_qp;
WORD32 i4_use_offline_model_2pass;
WORD32 i4_next_scene_type;
WORD32 i4_perc_dc_blks;
/* Used only in ix,vx versions */
LWORD64 i8_frame_acc_satd_cost;
WORD32 i4_l1_update_done;
WORD32 i4_rc_i_pic_lamda_offset;
float f_rc_pred_factor;
} rc_lap_out_params_t;
#endif