• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1  /*
2   * Copyright (c) 2011 Intel Corporation. All Rights Reserved.
3   * Copyright (c) Imagination Technologies Limited, UK
4   *
5   * Permission is hereby granted, free of charge, to any person obtaining a
6   * copy of this software and associated documentation files (the
7   * "Software"), to deal in the Software without restriction, including
8   * without limitation the rights to use, copy, modify, merge, publish,
9   * distribute, sub license, and/or sell copies of the Software, and to
10   * permit persons to whom the Software is furnished to do so, subject to
11   * the following conditions:
12   *
13   * The above copyright notice and this permission notice (including the
14   * next paragraph) shall be included in all copies or substantial portions
15   * of the Software.
16   *
17   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
18   * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19   * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
20   * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
21   * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
22   * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
23   * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24   */
25  
26  #ifndef _COREFLAGS_H_
27  #define _COREFLAGS_H_
28  
29  
30  #ifdef __cplusplus
31  extern "C" {
32  #endif
33  
34  
35  #define SERIALIZED_PIPES 1
36  
37  
38  #if defined(ENCFMT_H264MVC) || !defined(TOPAZ_MTX_HW)
39  #	define ENCFMT_H264
40  #	define _ENABLE_MVC_        /* Defined for enabling MVC specific code */
41  #	define _MVC_RC_  1         /* Defined for enabling MVC rate control code, later on it will be replaced by _ENABLE_MVC_ */
42  #endif
43  
44  #if defined(RCMODE_ALL) && !defined(ENCFMT_H264)
45  	#		error "H264 is not defined when RCMODE is ALL."
46  #endif
47  
48  #if defined(RCMODE_ALL) && (defined(ENCFMT_JPEG) || defined(ENCFMT_JPEG) || defined(ENCFMT_JPEG) || defined(ENCFMT_MPG4) || defined(ENCFMT_MPG2) || defined(ENCFMT_H263) || defined(ENCFMT_H264MVC))
49  	#		error "RCMODE_ALL is only allowed for H264."
50  #endif
51  
52  #if defined(RCMODE_ALL) || !defined(TOPAZ_MTX_HW)
53  #	define RCMODE_CBR
54  #	define RCMODE_VBR
55  #	define RCMODE_VCM
56  #	define __COREFLAGS_RC_ALLOWED__ 1
57  #endif
58  
59  #define TOPAZHP_MAX_NUM_STREAMS 2
60  
61  /*
62  	Hierarhical B picture support is disabled:
63  		* for H264 VCM mode, as VCM mode is not expected to use B pictures at all
64  */
65  #if  !defined(TOPAZ_MTX_HW) || \
66  		(defined(ENCFMT_H264) && !(defined(RCMODE_VCM))) \
67  		|| defined(RCMODE_ALL)
68  #	define INCLUDE_HIER_SUPPORT	1
69  #else
70  #	define INCLUDE_HIER_SUPPORT	0
71  #endif
72  
73  // Add this back in for SEI inclusion
74  #if !defined(RCMODE_NONE)
75  #	if  (!defined(TOPAZ_MTX_HW) || ((defined(RCMODE_VBR) || defined(RCMODE_CBR) || defined(RCMODE_VCM) || defined(RCMODE_LLRC)) && defined(ENCFMT_H264)))
76  #		define SEI_INSERTION 1
77  #	endif
78  #endif
79  
80  #if	(!defined(TOPAZ_MTX_HW) || defined(ENCFMT_H264))
81  #	define WEIGHTED_PREDICTION 1
82  #	define MULTI_REF_P
83  #	define LONG_TERM_REFS
84  #	define CUSTOM_QUANTIZATION
85  #endif
86  
87  // Firmware bias table control is not compatible with parallel encoding
88  //#define FIRMWARE_BIAS
89  
90  /* This define controls whether the hard VCM bitrate limit is applied to I frames */
91  //#define TOPAZHP_IMPOSE_VCM_BITRATE_LIMIT_ON_INTRA
92  
93  #if INCLUDE_HIER_SUPPORT
94  #if ( !defined(TOPAZ_MTX_HW) || !defined(ENCFMT_H264MVC) )
95  #	define MAX_REF_B_LEVELS_FW	(MAX_REF_B_LEVELS)
96  #else
97  #	define MAX_REF_B_LEVELS_FW	2
98  #endif
99  #else
100  #	define MAX_REF_B_LEVELS_FW	0
101  #endif
102  
103  #ifdef MULTI_REF_P
104  #	define MAX_REF_I_OR_P_LEVELS_FW	(MAX_REF_I_OR_P_LEVELS)
105  #else
106  #	define MAX_REF_I_OR_P_LEVELS_FW	2
107  #endif
108  
109  #define MAX_REF_LEVELS_FW	(MAX_REF_B_LEVELS_FW + MAX_REF_I_OR_P_LEVELS_FW)
110  #define MAX_PIC_NODES_FW	(MAX_REF_LEVELS_FW + 1)
111  
112  
113  #if defined(TOPAZ_MTX_HW)
114  #	if defined(ENABLE_FORCED_INLINE)
115  /*
116  	__attribute__((always_inline)) should be only used when all C code is compiled by
117  	GCC to a blob object with `-combine` swithch.
118  */
119  #		define MTX_INLINE  inline __attribute__((always_inline))
120  #else
121  #		define MTX_INLINE  inline
122  #endif
123  #else
124  #	define MTX_INLINE
125  #endif
126  
127  /*
128  	Check that only one `RCMODE_` symbol is defined.
129  
130  	If `RCMODE_NONE` is set, block any possebility for RC sources to be included.
131  */
132  
133  
134  #if defined(RCMODE_NONE)
135  #	define __COREFLAGS_RC_ALLOWED__	0
136  #else
137  #	define __COREFLAGS_RC_ALLOWED__ 1
138  #endif
139  
140  /*
141  	Determine possible rate control modes.
142  */
143  #if !defined(TOPAZ_MTX_HW)
144  #	define	CBR_RC_MODE_POSSIBLE	__COREFLAGS_RC_ALLOWED__
145  #	define  VCM_RC_MODE_POSSIBLE	__COREFLAGS_RC_ALLOWED__
146  #	define  VBR_RC_MODE_POSSIBLE	__COREFLAGS_RC_ALLOWED__
147  #	define  ERC_RC_MODE_POSSIBLE	__COREFLAGS_RC_ALLOWED__
148  #else
149  #	if defined(RCMODE_CBR)
150  #		define	CBR_RC_MODE_POSSIBLE	__COREFLAGS_RC_ALLOWED__
151  #	else
152  #		define	CBR_RC_MODE_POSSIBLE	FALSE
153  #	endif
154  #	if defined(ENCFMT_H264) && (defined(RCMODE_VCM) || defined(RCMODE_LLRC))
155  		/* VCM is possible only for H264 */
156  #		define  VCM_RC_MODE_POSSIBLE	__COREFLAGS_RC_ALLOWED__
157  #	else
158  #		define	VCM_RC_MODE_POSSIBLE	FALSE
159  #	endif
160  #	if defined(RCMODE_VBR)
161  #		define  VBR_RC_MODE_POSSIBLE	__COREFLAGS_RC_ALLOWED__
162  #	else
163  #		define	VBR_RC_MODE_POSSIBLE	FALSE
164  #	endif
165  #	if defined(RCMODE_ERC)
166  #		define  ERC_RC_MODE_POSSIBLE	__COREFLAGS_RC_ALLOWED__
167  #	else
168  #		define	ERC_RC_MODE_POSSIBLE	FALSE
169  #	endif
170  #endif
171  
172  
173  #define RATE_CONTROL_AVAILABLE (\
174  		CBR_RC_MODE_POSSIBLE || VCM_RC_MODE_POSSIBLE || \
175  		VBR_RC_MODE_POSSIBLE || ERC_RC_MODE_POSSIBLE\
176  	)
177  #define RC_MODE_POSSIBLE(MODE) (MODE ## _RC_MODE_POSSIBLE)
178  
179  #define RC_MODES_POSSIBLE2(M1, M2) \
180  	(RC_MODE_POSSIBLE(M1) || RC_MODE_POSSIBLE(M2))
181  
182  #define RC_MODES_POSSIBLE3(M1, M2, M3) \
183  	(RC_MODES_POSSIBLE2(M1, M2) || RC_MODE_POSSIBLE(M3))
184  
185  /*
186  	Declare `CUR_ENCODE_RC_MODE` as proper function only in FAKE_MTX.
187  	Alternatively, declare it as constant.
188  */
189  #if defined(FAKE_MTX) || defined(RCMODE_ALL)
190  #	define	CUR_ENCODE_RC_MODE (GLOBALS(g_sEncContext).eRCMode)
191  #elif defined(RCMODE_NONE)
192  #	define CUR_ENCODE_RC_MODE (IMG_RCMODE_NONE)
193  #elif defined(RCMODE_CBR)
194  #	define CUR_ENCODE_RC_MODE (IMG_RCMODE_CBR)
195  #elif defined(RCMODE_VBR)
196  #	define CUR_ENCODE_RC_MODE (IMG_RCMODE_VBR)
197  #elif defined(RCMODE_ERC)
198  #	define CUR_ENCODE_RC_MODE (IMG_RCMODE_ERC)
199  #elif defined(RCMODE_LLRC)
200  #	define CUR_ENCODE_RC_MODE (IMG_RCMODE_LLRC)
201  #elif defined(RCMODE_VCM)
202  #	define CUR_ENCODE_RC_MODE (IMG_RCMODE_VCM)
203  #endif
204  
205  
206  #define USE_VCM_HW_SUPPORT 1
207  
208  #define INPUT_SCALER_SUPPORTED 0	/* controls the firmwares ability to support the optional hardware input scaler */
209  
210  #define SECURE_MODE_POSSIBLE 1		/* controls the firmwares ability to support secure mode firmware upload */
211  
212  #endif  // #ifndef _COREFLAGS_H_
213