1 
2 /*!
3  ***************************************************************************
4  * \file
5  *    rc_quadratic.h
6  *
7  * \author
8  *    Zhengguo LI
9  *    Athanasios Leontaris
10  *
11  * \date
12  *    14 Jan 2003
13  *
14  * \brief
15  *    Headerfile for rate control
16  **************************************************************************
17  */
18 
19 #ifndef _RC_QUADRATIC_H_
20 #define _RC_QUADRATIC_H_
21 
22 #include "rc_types.h"
23 
24 // rate control functions
25 // init/copy
26 extern void rc_alloc_quadratic( VideoParameters *p_Vid, InputParameters *p_Inp, RCQuadratic **p_quad );
27 extern void rc_free_quadratic ( RCQuadratic **p_quad );
28 extern void rc_copy_quadratic ( VideoParameters *p_Vid, InputParameters *p_Inp, RCQuadratic *dst, RCQuadratic *src );
29 
30 // rate control (externally visible)
31 extern void rc_init_seq          (VideoParameters *p_Vid, InputParameters *p_Inp, RCQuadratic *p_quad, RCGeneric *p_gen);
32 extern void rc_init_GOP          (VideoParameters *p_Vid, InputParameters *p_Inp, RCQuadratic *p_quad, RCGeneric *p_gen, int np, int nb);
33 extern void rc_update_pict_frame (VideoParameters *p_Vid, InputParameters *p_Inp, RCQuadratic *p_quad, RCGeneric *p_gen, int nbits);
34 extern void rc_init_pict         (VideoParameters *p_Vid, InputParameters *p_Inp,
35                            RCQuadratic *p_quad, RCGeneric *p_gen, int fieldpic, int topfield, int targetcomputation, float mult);
36 extern void rc_update_pict       (VideoParameters *p_Vid, InputParameters *p_Inp, RCQuadratic *p_quad, RCGeneric *p_gen, int nbits);
37 extern void rc_update_picture    (VideoParameters *p_Vid, InputParameters *p_Inp, int bits);
38 
39 extern int  updateQPRC0(VideoParameters *p_Vid, InputParameters *p_Inp, RCQuadratic *p_quad, RCGeneric *p_gen, int topfield);
40 extern int  updateQPRC1(VideoParameters *p_Vid, InputParameters *p_Inp, RCQuadratic *p_quad, RCGeneric *p_gen, int topfield);
41 extern int  updateQPRC2(VideoParameters *p_Vid, InputParameters *p_Inp, RCQuadratic *p_quad, RCGeneric *p_gen, int topfield);
42 extern int  updateQPRC3(VideoParameters *p_Vid, InputParameters *p_Inp, RCQuadratic *p_quad, RCGeneric *p_gen, int topfield);
43 
44 // internal functions
45 extern void updateQPInterlace   ( RCQuadratic *p_quad, RCGeneric *p_gen );
46 extern void updateQPNonPicAFF   ( seq_parameter_set_rbsp_t *active_sps, RCQuadratic *p_quad );
47 extern void updateBottomField   ( InputParameters *p_Inp, RCQuadratic *p_quad );
48 extern int  updateFirstP        ( VideoParameters *p_Vid, InputParameters *p_Inp, RCQuadratic *p_quad, RCGeneric *p_gen, int topfield );
49 extern int  updateNegativeTarget( VideoParameters *p_Vid, InputParameters *p_Inp, RCQuadratic *p_quad, RCGeneric *p_gen, int topfield, int m_Qp );
50 extern int  updateFirstBU       ( VideoParameters *p_Vid, InputParameters *p_Inp, RCQuadratic *p_quad, RCGeneric *p_gen, int topfield );
51 extern void updateLastBU        ( VideoParameters *p_Vid, InputParameters *p_Inp, RCQuadratic *p_quad, RCGeneric *p_gen, int topfield );
52 extern void predictCurrPicMAD   ( InputParameters *p_Inp, RCQuadratic *p_quad, RCGeneric *p_gen );
53 extern void updateModelQPBU     ( VideoParameters *p_Vid, InputParameters *p_Inp, RCQuadratic *p_quad, int m_Qp );
54 extern void updateQPInterlaceBU ( RCQuadratic *p_quad, RCGeneric *p_gen );
55 extern void updateModelQPFrame  ( RCQuadratic *p_quad, int m_Bits );
56 
57 extern void updateRCModel    (VideoParameters *p_Vid, InputParameters *p_Inp, RCQuadratic *p_quad, RCGeneric *p_gen);
58 extern void updateMADModel   (VideoParameters *p_Vid, InputParameters *p_Inp, RCQuadratic *p_quad, RCGeneric *p_gen);
59 extern void RCModelEstimator (VideoParameters *p_Vid, InputParameters *p_Inp, RCQuadratic *p_quad, int n_windowSize, Boolean *m_rgRejected);
60 extern void MADModelEstimator(VideoParameters *p_Vid, InputParameters *p_Inp, RCQuadratic *p_quad, int n_windowSize, Boolean *PictureRejected);
61 extern int  updateComplexity (VideoParameters *p_Vid, RCQuadratic *p_quad, RCGeneric *p_gen, Boolean is_updated, int nbits );
62 extern void updatePparams    (RCQuadratic *p_quad, RCGeneric *p_gen, int complexity );
63 extern void updateBparams    (RCQuadratic *p_quad, RCGeneric *p_gen, int complexity );
64 
65 // external generic functions
66 extern int  rc_handle_mb         ( Macroblock *currMB, int prev_mb);
67 extern void rc_init_top_field    ( VideoParameters *p_Vid, InputParameters *p_Inp );
68 extern void rc_init_bottom_field ( VideoParameters *p_Vid, InputParameters *p_Inp, int TopFieldBits );
69 extern void rc_init_frame_rdpic  ( VideoParameters *p_Vid, InputParameters *p_Inp, float rateRatio );
70 extern void rc_allocate_memory   ( VideoParameters *p_Vid, InputParameters *p_Inp );
71 extern void rc_free_memory       ( VideoParameters *p_Vid, InputParameters *p_Inp );
72 extern void rc_update_mb_stats   ( Macroblock *currMB);
73 extern void rc_save_state        ( VideoParameters *p_Vid, InputParameters *p_Inp );
74 extern void rc_restore_state     ( VideoParameters *p_Vid, InputParameters *p_Inp );
75 
76 #endif
77