aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'extrel/ti/ivahd_codecs/packages/ti/sdo/codecs/h264enc/ih264enc.h')
-rw-r--r--extrel/ti/ivahd_codecs/packages/ti/sdo/codecs/h264enc/ih264enc.h3549
1 files changed, 3549 insertions, 0 deletions
diff --git a/extrel/ti/ivahd_codecs/packages/ti/sdo/codecs/h264enc/ih264enc.h b/extrel/ti/ivahd_codecs/packages/ti/sdo/codecs/h264enc/ih264enc.h
new file mode 100644
index 0000000..5c808bc
--- /dev/null
+++ b/extrel/ti/ivahd_codecs/packages/ti/sdo/codecs/h264enc/ih264enc.h
@@ -0,0 +1,3549 @@
1/*
2 *******************************************************************************
3 *
4 * HDVICP2.0 Based H.264 HP Encoder
5 *
6 * "HDVICP2.0 Based H.264 HP Encoder" is software module developed on TI's
7 * HDVICP2 based SOCs. This module is capable of compressing a 4:2:0 Raw
8 * video into a high/main/baseline profile bit-stream. Based on ISO/IEC
9 * 14496-10."
10 * Copyright (C) 2009 Texas Instruments Incorporated - http://www.ti.com/
11 * ALL RIGHTS RESERVED
12 *******************************************************************************
13*/
14
15/**
16 ******************************************************************************
17 * @file ih264enc.h
18 *
19 * @brief IH264ENC Interface Header
20 *
21 * @author Pramod Kumar Swami (pramods@ti.com)
22 *
23 * @version 0.1 - Nov 30,2008 : Initial Version [Pramod]
24 *
25 * @version 0.2 - March 16,2009 [Pramod]
26 * A. Name change of interface file ih264venc.h to ih264enc.h
27 * B.Change the name of macros/enums
28 * MAXNUMSLCGPS --> IH264ENC_MAXNUMSLCGPS
29 * MAX_NUM_SLICE_START_OFFSET --> IH264ENC_MAX_NUM_SLICE_START_OFFSET
30 * IH264ENC_GOPSTRUCTURE_OPEN --> IH264ENC_GOPSTRUCTURE_NONUNIFORM
31 * IH264ENC_GOPSTRUCTURE_CLOSE --> IH264ENC_GOPSTRUCTURE_UNIFORM
32 * C. Definition of IH264ENC_BufferLevel changed from buffer to time
33 * D. mbMetaDataEnable is defined
34 * E. Following information (fields/definition) is newly added
35 * IH264ENC_VERSION_LENGTH : For getting the encoder version via Control
36 * method
37 * meta data support (IH264ENC_MAX_SEI_METADTA_BUFSIZE)
38 * Support and definition of Error Codes
39 * Enum for level 3.0 and 3.1 was missing added
40 * Poc type 1 enum added
41 * Support for NALU masks: no change in definition
42 * Few more enumeration added for IH264ENC_VUICodingPreset,
43 * IH264ENC_VideoFormat and IH264ENC_AspectRatioIdc
44 * IH264ENC_VUICodingParams structure parameter added to creation
45 * time parameters
46 * New enumeration added to IH264ENC_InterlaceCodingType: MRF, SPF
47 *
48 * @version 0.3 - November 2009 [Pramod]
49 * A. Added interface for force SKIP, it is temporarily here and will be
50 * used from base class of IVIDENC later
51 * B. Added user defined scaling matrix bit in input meta data
52 * @version 0.4 - Feb 2010 [Deepak]
53 * Addition of error bit(IH264ENC_ErrorBit : bit 7) for max bit rate
54 * voilation scenario in tighter RC scenario
55 * @version 0.5 - Mar 2010 [Kumar] : Added more enumerations to have all
56 * levels supported by H264 standard to make it future proof.
57 * @version 0.6 - Apr 2010 [Kumar] : Added error bit for checking
58 * hdvicp state IH264ENC_IMPROPER_HDVICP2_STATE
59 * @version 0.7 - Jun 2010 : [Nirmal, Pramod] Changed default value of
60 * BufferLevel since its is not good for
61 * low delay applications (IR: SDOCM00071692)
62 * @version 0.8 - Apr 2010 [Uday] : Modified the definition of initial
63 * buffer level from taking in descrete values to continuas values
64 * @version 0.9 - May 2010 [Uday] : converted the reserve parameter for
65 * enabling GMV in SEI to dedicated parameter
66 *
67 * @version 0.10 - May 2010 [Uday] : Extended the outArgs to return the
68 * initial buffer level
69 * @version 0.11 -Jun 2010 [Uday] : Added interface constraint set flags
70 * @version 0.12 - Aug 2010 [Nirmal] : Added data elements for static MB
71 * count support
72 * @version 0.13 -Aug 2010 [Girish Murthy] : Added interface for
73 * RCDO profile support
74 * @ version 0.14 -Sep 2010 [Kumar] : Defined a bit for
75 * IH264ENC_MAX_BYTES_VOILATION_IN_SLICEMODE_BYTES
76 * @ version 0.15 -Sep 2010 [Kumar] : Added a new extenetd parameter for
77 * algorithm creation enableLongTermRefFrame
78 * @version 0.16- Sept 2010[Girish]: Support for PRC and partial frame
79 * skip control
80 * @version 0.17 Sep 2010 : Added flag to control the insertion of
81 * HRD parameters in VUI part of bit-stream[Nirmal]
82 * @version 0.18 Sep2010 : Added error bit IH264ENC_DATASYNCH_RUN_TIME_ERROR
83 * multiplexed with IH264ENC_UNSUPPORTED_FMOCODINGPARAMS
84 * @version 0.19 Sep2010 : Added IH264ENC_FramePackingParams structure
85 * required for encoding the frame packing SEI
86 * @version 0.20 Sep 2010 : [Gajanan] Added IH264ENC_StereoInfoParams
87 * Structure for Steroe Video Coding
88 * parameters and StereoInfoPreset enums.
89 * @version 0.21 Apr 2011 : [Kumar] Added support for new long-
90 * trem frame referencing scheme
91 * IH264ENC_LTRP_REFERTOP_PROACTIVE
92 * @version 0.22 June 2011: Inroduction of new preset
93 * IH264_INTERCODING_MED_SPEED_HIGH_QUALITY for
94 * inter coding preset.
95 * @version 0.23 July 2011: Added discardSavedBits in RateControl structure
96 * SDOCM00082533
97 * @version 0.24 July 2011: Added structures and enum for ROI support.[Gajanan]
98 * @version 1.0 Dec 2011: Added parameter for HRD compliance control[Girish]
99 * @version 1.1 Dec 2011: Added frameSkipThMulQ5 & vbvUseLevelThQ5 in
100 * RateControl structure for CBR quality improvement
101 * [Karthick]
102 * @version 1.2 Jan 2012: Renamed MAX_ROI macro as IH264ENC_MAX_ROI
103 * [Harris]
104 * @version 1.3 Mar 2012: Added a parameter enableErrorCheck in
105 * IH264ENC_ProcessParamsList.[Santoshkumar S K]
106 * @version 1.4 May 2012: Changed parameter name. Replaced
107 * inArgs->lateAcquireArg by inArgs->processId.
108 * [Santoshkumar S K]
109 * @version 1.5 May 2012: SDOCM00091641 : Added temporalId parameter to
110 * IH264ENC_OutArgs.This holds the Temporal
111 * layer Id of current frame in H-P encoding.
112 * (for base layer value is 0)[Santoshkumar S K]
113 * @version 1.6 Aug 2012: Redundant exposure of GDR configuration
114 * parameters as a part of Extended Dynamic structure
115 * are removed(SDOCM00095027)[Santoshkumar S K]
116 * @version 1.7 Sep 2012: Default value of scalingmatrixPreset is changed
117 * from NONE(0) to NORMAL(1)[Santoshkumar S K]
118 * @version 1.8 Feb 2013: Fix for OMAPS00288660: Ducati returns an error
119 * when setting a slice size larger than 32768.
120 * Fix : sliceUnitSize parameter's data type is changed
121 * from XDAS_Int16 to XDAS_Int32 [Santoshkumar S K]
122 * @version 1.9 Mar 2013: a. Added IH264ENC_ExtErrBits enum structure to fix
123 * SDOCM00099577(Encoder does not give refined error
124 * codes in case of creation fail or run time parameter
125 * set fail)
126 * b. Parameter extErrorCode[] is added in
127 * IH264ENC_Status and IH264ENC_OutArgs structure
128 * [Santoshkumar S K]
129 *****************************************************************************
130*/
131
132/**
133 * @defgroup HDVICP2H264 IH264ENC_TI (V7M)
134 * @ingroup m3
135 *
136 * The IH264ENC_TI interface enables encoding in H264 format
137 *
138 */
139
140#ifndef _IH264ENC_H_ /* --{ */
141
142#define _IH264ENC_H_
143
144#include <ti/xdais/ialg.h>
145#include <ti/xdais/dm/ividenc2.h>
146
147/** @ingroup HDVICP2H264 */
148/*@{*/
149
150
151#ifdef __cplusplus
152extern "C" {
153#endif
154
155
156/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
157/* Definition of all the macros define by this interafce */
158/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
159
160/**
161 Maximum number of slice groups supported by H.264 Encoder
162*/
163#define IH264ENC_MAXNUMSLCGPS (2)
164
165/**
166 Maximum Number of slice start points
167*/
168#define IH264ENC_MAX_NUM_SLICE_START_OFFSET (3)
169
170/** maximum size for SEI_USER_DATA_UNREGISTERED SEI message */
171#define IH264ENC_MAX_SEI_METADTA_BUFSIZE (0x3FF)
172
173/**
174 Length of the version string. The memory to get version
175 number is owned by application
176*/
177#define IH264ENC_VERSION_LENGTH (64)
178
179/**
180 control method commands
181*/
182#define IH264ENC_GETSTATUS XDM_GETSTATUS
183#define IH264ENC_SETPARAMS XDM_SETPARAMS
184#define IH264ENC_RESET XDM_RESET
185#define IH264ENC_FLUSH XDM_FLUSH
186#define IH264ENC_SETDEFAULT XDM_SETDEFAULT
187#define IH264ENC_GETBUFINFO XDM_GETBUFINFO
188
189/**
190 Maximum number of ROIs supported inside the frame.
191*/
192#define IH264ENC_MAX_ROI 36
193
194typedef IVIDENC2_Cmd IH264ENC_Cmd;
195
196/**
197 Macro to set particular NAL bit in the nal unit mask
198*/
199#define IH264ENC_SET_NALU(naluPresentMask, NALU) \
200{ \
201 naluPresentMask = ((naluPresentMask) | (1 << IH264_NALU_TYPE_##NALU)) ;\
202}
203
204/**
205 Macro to clear particular NAL bit in the nal unit mask
206*/
207#define IH264ENC_CLEAR_NALU(naluPresentMask, NALU) \
208{ \
209 naluPresentMask = ((naluPresentMask) & (~(1 << IH264_NALU_TYPE_##NALU))) ;\
210}
211
212/**
213 Macro to get particular NAL bit in the nal unit mask
214*/
215#define IH264ENC_GET_NALU(naluPresentMask, NALU)\
216 ((naluPresentMask) & (1 << IH264_NALU_TYPE_##NALU))
217
218
219
220/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
221/* Definition of all the Enumeration define by this interafce */
222/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
223
224/**
225 * @enum IH264ENC_ErrorBit
226 * @brief error informations of IVAHD H264 encoder implementation by TI.
227 *
228 * @remarks When an internal error occurs, the algorithm will return
229 * an error return value (e.g. EFAIL, EUNSUPPORTED)
230 *
231 * @remarks The value of each enum is the bit which is set.
232 *
233 * @remarks Bits 8-15 are defined by XDM and hence not used by codec
234 * implementation.
235 * rest all bits are used. XDM defined error bits are also active.
236 *
237 * @remarks The algorithm can set multiple bits to 1 based on conditions.
238 * e.g. it will set bits #XDM_FATALERROR (fatal) and
239 * #XDM_UNSUPPORTEDPARAM (unsupported params) in case
240 * of unsupported run time parameters.
241 *
242 */
243
244typedef enum {
245 IH264ENC_LEVEL_INCOMPLAINT_PARAMETER = 0,
246 /**< Bit 0 - level incomplaint parameters.
247 * @remarks This error is applicable when some parameters are set
248 * which are not meeting the limit defined by H.264 standard
249 * Table A-1 – Level limits. It can be categorized under
250 * following category :
251 * IH264ENC_LEVEL_INCOMPLAINT_RESOLUTION : Invalid width/height
252 * IH264ENC_LEVEL_INCOMPLAINT_HRDBUFSZIE : Invalid HrdBufferSize
253 * IH264ENC_LEVEL_INCOMPLAINT_BITRATE : Invalid Bit Rate
254 * IH264ENC_LEVEL_INCOMPLAINT_MBSPERSECOND : Invalid FrameRate/
255 * resolution
256 * IH264ENC_LEVEL_INCOMPLAINT_DPBSIZE : Invalid DPB size
257 * For above 5 situations, only a signle bit (bit-0) is set as true
258 */
259
260 IH264ENC_PROFILE_INCOMPLAINT_CONTENTTYPE = 1,
261 /**< Bit 1 - Profile incomplaint content type.
262 * @remarks This error is applicable when
263 * IVIDENC2_Params::inputContentType is not set as
264 * IVIDEO_PROGRESSIVE but IVIDENC2_Params::profile is set
265 * as IH264_BASELINE_PROFILE
266 */
267
268 IH264ENC_PROFILE_INCOMPLAINT_FMO_SETTING = 2,
269 /**< Bit 2 - Profile incomplaint FMO setting.
270 * @remarks This error is applicable when FMO is enabled but
271 * IVIDENC2_Params::profile is not set as IH264_BASELINE_PROFILE
272 */
273
274 IH264ENC_PROFILE_INCOMPLAINT_TRANSFORMBLOCKSIZE = 3 ,
275 /**< Bit 3 - Profile incomplaint transform block size.
276 * @remarks This error is set when
277 * IH264ENC_Params::transformBlockSize != IH264_TRANSFORM_4x4 &&
278 * IVIDENC2_Params::profile != IH264_HIGH_PROFILE
279 */
280
281 IH264ENC_PROFILE_INCOMPLAINT_INTERFRAMEINTERVAL = 4 ,
282 /**< Bit 4 - Profile incomplaint interframeInterval.
283 * @remarks This error is set when B frames are used with
284 * IH264_BASELINE_PROFILE
285 */
286
287 IH264ENC_PROFILE_INCOMPLAINT_SCALINGMATRIXPRESET = 5,
288 /**< Bit 5 - Profile incomplaint scaling matrix setting.
289 * @remarks This error is set when scaling matrix is used
290 * without IH264_HIGH_PROFILE
291 */
292
293 IH264ENC_PROFILE_INCOMPLAINT_ENTROPYCODINGMODE = 6,
294 /**< Bit 6 - Profile incomplaint entropy coding mode setting.
295 * @remarks This error is set when cabac is used
296 * without IH264_HIGH_PROFILE/MAIN profile
297 */
298
299 IH264ENC_MAX_BYTES_VOILATION_IN_SLICEMODE_BYTES = 6,
300 /**< Bit 6 - If number of bytes encoded in any of the
301 * slice in the currently encoded picture is crossing
302 * maximum unbit size then this bit will be set
303 * @remarks This error bit is shared between the
304 * create time parameter entropy coding mode
305 *
306 */
307
308 IH264ENC_MAX_BIT_RATE_VOILATION = 7,
309 /**< Bit 7 - Max bits for one Unit Voilation
310 * @remarks When max bit rate is enabled by user,
311 * than it is possible that codec might not be able
312 * honor max bit rate. This bit is set when bits consumed
313 * in one unit ( 1 sec) is more than the allocated as per the
314 * given max bit rate. If the frame rate is N , and if the
315 * max bit rate is voilated in M th frame than this bit will
316 * get set for frame M to N.
317 */
318 IH264ENC_IMPROPER_HDVICP2_STATE = 16,
319 /**< Bit 16 - Device is not proper state to use.
320 */
321
322 IH264ENC_IMPROPER_STREAMFORMAT = 17,
323 /**< Bit 17 - stream format is not proper
324 * @remarks This error is set when streamFormat is set as
325 * IH264_NALU_STREAM but data synch is not enabled for putdata
326 */
327
328 IH264ENC_IMPROPER_POCTYPE = 18,
329 /**< Bit 18 - poc type is not proper
330 * @remarks This error is set when poc type 2 is used in
331 * presense of non reference frames
332 */
333
334 IH264ENC_IMPROPER_DATASYNC_SETTING = 19,
335 /**< Bit 19 - data synch settings are not proper
336 * @remarks This error is set when encoder is asked to operate
337 * at sub frame level but the call back function pointer is NULL
338 */
339
340 IH264ENC_UNSUPPORTED_VIDENC2PARAMS = 20,
341 /**< Bit 20 - Invalid videnc2 parameters
342 * @remarks This error is set when any parameter of struct
343 * IVIDENC2_Params is not in allowed range
344 */
345
346 IH264ENC_UNSUPPORTED_RATECONTROLPARAMS = 21,
347 /**< Bit 21 - Invalid rate control parameters
348 * @remarks This error is set when any parameter of struct
349 * IH264ENC_RateControlParams is not in allowed range
350 */
351
352 IH264ENC_UNSUPPORTED_INTERCODINGPARAMS = 22,
353 /**< Bit 22 - Invalid inter coding parameters
354 * @remarks This error is set when any parameter of struct
355 * IH264ENC_InterCodingParams is not in allowed range
356 */
357
358 IH264ENC_UNSUPPORTED_INTRACODINGPARAMS = 23,
359 /**< Bit 23 - Invalid Intra coding parameters
360 * @remarks This error is set when any parameter of struct
361 * IH264ENC_IntraCodingParams is not in allowed range
362 */
363
364 IH264ENC_UNSUPPORTED_NALUNITCONTROLPARAMS = 24,
365 /**< Bit 24 - Invalid nal unit coding parameters
366 * @remarks This error is set when any parameter of struct
367 * IH264ENC_NALUControlParams is not in allowed range
368 */
369
370 IH264ENC_UNSUPPORTED_SLICECODINGPARAMS = 25,
371 /**< Bit 25 - Invalid slice coding parameters
372 * @remarks This error is set when any parameter of struct
373 * IH264ENC_SliceCodingParams is not in allowed range
374 */
375
376 IH264ENC_UNSUPPORTED_LOOPFILTERPARAMS = 26,
377 /**< Bit 26 - Invalid loop filter related parameters
378 * @remarks This error is set when any parameter of struct
379 * IH264ENC_LoopFilterParams is not in allowed range
380 */
381 IH264ENC_DATASYNCH_RUN_TIME_ERROR = 27,
382 /**< Bit 27 is muxed with incorrect FMO paramters setting.
383 * This will be set when codec inside IVAHD encounters
384 * erroneous situation, like
385 * a) when number of NALs in 1Kb of data is more than 8
386 * b) when the blocks provided through getBuf call is not
387 * sufficient for all the NALs in one oage of SL2 stream.
388 */
389 IH264ENC_UNSUPPORTED_N_FRAME_PROCESSCALL_PARAMS = 27,
390 /**< Bit 27 is also muxed with incorrect paramters setting in
391 * N frame process call scenario
392 */
393 IH264ENC_UNSUPPORTED_FMOCODINGPARAMS = 27,
394 /**< Bit 27 - Invalid fmo parameters
395 * @remarks This error is set when any parameter of struct
396 * IH264ENC_FMOCodingParams is not in allowed range
397 */
398
399 IH264ENC_UNSUPPORTED_VUICODINGPARAMS = 28,
400 /**< Bit 28 - Invalid vui coding parameters
401 * @remarks This error is set when any parameter of struct
402 * IH264ENC_VUICodingParams is not in allowed range
403 */
404
405 IH264ENC_UNSUPPORTED_H264ENCPARAMS = 29,
406 /**< Bit 29 - Invalid Create time extended parameters
407 * @remarks This error is set when any parameter of struct
408 * IH264ENC_Params is not in allowed range
409 */
410
411 IH264ENC_UNSUPPORTED_VIDENC2DYNAMICPARAMS = 30,
412 /**< Bit 30 - Invalid base class dyanmic paaremeters during control
413 * @remarks This error is set when any parameter of struct
414 * IVIDENC2_DynamicParams is not in allowed range
415 */
416
417 IH264ENC_UNSUPPORTED_H264ENCDYNAMICPARAMS = 31
418 /**< Bit 31 - Invalid exteded class dyanmic paaremeters during control
419 * @remarks This error is set when any parameter of struct
420 * IH264ENC_DynamicParams (excluding embedded structures) is not in
421 * allowed range
422 */
423
424} IH264ENC_ErrorBit ;
425
426/**
427 * @enum IH264ENC_ExtErrBits
428 * @brief Sub extended error informations of IVAHD H264 encoder
429 * implementation by TI.
430 *
431 * @remarks When an internal error occurs, the algorithm will return
432 * an error return value (e.g. EFAIL, EUNSUPPORTED). Apart from
433 * this information, encoder returns extended error codes which
434 * helps to get refined error. For eg Error
435 * IH264ENC_UNSUPPORTED_VIDENC2DYNAMICPARAMS can be returned by
436 * many sub conditions which is not enough for the user
437 * to trace his parameter settings. But the sub extended error
438 * codecs as mentioned in the below enum gives finer and refined
439 * error information.These error bits are unique for each fail in
440 * param settings. The algorithm can set multiple bits based on
441 * conditions.e.g. it will set bits #
442 * IH264ENC_EXTERROR_CREATE_INTERLACE_TYPE (for wrong interlace
443 * coding type) and #IH264ENC_EXTERROR_CREATE_LTRP (for wrong
444 * LTRP settings) & etc.
445 * These bits are set in structure IH264ENC_Status::extErrorCode[]
446 * and/or structure IH264ENC_OutArgs::extErrorCode[]
447 */
448typedef enum {
449 IH264ENC_EXTERROR_ACTIVEREGION = 0 ,
450 /** Bit 0 – Active frame region dimensions are not matching with the
451 * encoding frame dimensions
452 */
453 IH264ENC_EXTERROR_ANALYTICINFO_BUFFERSIZE = 1 ,
454 /** Bit 1 – Analytic Info buffer size provided is less than that of
455 * requested
456 */
457 IH264ENC_EXTERROR_BITRATE = 2 ,
458 /* Bit 2 – target bit rate set is more than max bit rate */
459 IH264ENC_EXTERROR_BITSTREAM_BUFFERSIZE = 3 ,
460 /** Bit 3 – Output bitstream buffer size provided is less than that of
461 * requested. And this validation is done only if
462 * IVIDENC2_DynamicParams::ignoreOutbufSizeFlag is 0. Application has a
463 * flexibility of the not honoring this size by setting ignoreOutbufSizeFlag
464 * to 1
465 */
466 IH264ENC_EXTERROR_CAPTUREWIDTH_FORCEFRAME_LTRP_QPEL = 4 ,
467 /** Bit 4 – This bit is set if any of the below conditions is set
468 * a. The size of dynamic params structure set is not of base class and
469 * nor even extended class
470 * b. Encoding dimensions are out of range
471 * c. Target bit rate less than minimum bt rate or frame rate is less than 0
472 * d. Generate header mode other than XDM_ENCODE_AU and XDM_GENERATE_HEADER
473 * e. User forced frame other than IDR/NA frame
474 * f. Wrong settings in interframe or intraFrame intervals
475 * g. Incorrect settings in motion vector accuracy settings
476 * If this bit is set, correspondingly IH264ENC_EXTERROR_RESOLUTION_BITRATE_
477 * FRMINTERVAL_GENHEADER is also set
478 */
479 IH264ENC_EXTERROR_CONTROLCALL_CMD = 5 ,
480 /** Bit 5 – Encoder control call is made with an incorrect command option
481 */
482 IH264ENC_EXTERROR_CREATE_ENTROPY_PROFILE = 6 ,
483 /** Bit 6 – Entropy coding mode set is CABAC for Base line profile which is
484 * not supported
485 */
486 IH264ENC_EXTERROR_CREATE_GOPSTRUCT_LOG2MAX_INTRAINTERVAL = 7 ,
487 /** Bit 7 – This bit is set when
488 * a. Parameters transformBlockSize, entropyCodingMode, log2MaxFNumMinus4,
489 * maxIntraFrameInterval, IDRFrameInterval, gopStructure are out of range.
490 * b. LTRP is enabled for interlaced coding type
491 * If this bit is set, correspondingly IH264ENC_EXTERROR_CREATE_TXBLKSIZE_
492 * ENTROPY_POC_LTRP is also set
493 */
494 IH264ENC_EXTERROR_CREATE_HPLAYERS = 8 ,
495 /** Bit 8 – Hierarchal layers set is out of range i.e., numTemporalLayer
496 * set is less tha 0 or more than 4
497 */
498 IH264ENC_EXTERROR_CREATE_HPLAYERS_BFRAME = 9 ,
499 /** Bit 9 – Hierarchal coding is enabled for 'B’ Frames which is not supported
500 */
501 IH264ENC_EXTERROR_CREATE_HPLAYERS_POC = 10 ,
502 /** Bit 10 – Picture Order Count(POC) type 1 is enabled for Hierarchal layer
503 * coding which is not supported
504 */
505 IH264ENC_EXTERROR_CREATE_HPLAYERS_REFPICMRKING = 11 ,
506 /** Bit 11 - Longterm Referencing (MMCO commands) is not enabled for
507 * Hierarchal layer coding i.e., referencePicMarking is other than
508 * IH264_LONG_TERM_PICTURE for Hierarchal layer coding which is
509 * not supported
510 */
511 IH264ENC_EXTERROR_CREATE_INTERLACE_TYPE = 12 ,
512 /** Bit 12 – In interlaced encoding, interlace coding type set is out
513 * of supported values
514 */
515 IH264ENC_EXTERROR_CREATE_LTRP = 13 ,
516 /** Bit 13 – LTRP option (enableLongTermRefFrame) set is out of allowed ranges
517 */
518 IH264ENC_EXTERROR_CREATE_LTRP_HP = 14 ,
519 /** Bit 14 – LTRP option IH264ENC_LTRP_REFERTOP_PROACTIVE is enabled for
520 * Hierarchal layer coding which is not supported
521 */
522 IH264ENC_EXTERROR_CREATE_LTRP_PERIOD = 15 ,
523 /** Bit 15 - When LTRP is enabled for Hierarchal layer coding (H-P) then
524 * LTRPPeriod set should be multiple of subGop length
525 */
526 IH264ENC_EXTERROR_CREATE_LVL_DPBSIZE = 16 ,
527 /** Bit 16 – Current DPB size set is more than the max DPB size allowed
528 * in this level. Current DPB size is calculated using formaula
529 * (maxWidth * maxHeight * 1.5 * max_num_ref_frames)
530 */
531 IH264ENC_EXTERROR_CREATE_POC_BFRAME = 17 ,
532 /** Bit 17 – Picture Order Count(POC) type 2 is set for ‘B’ frames which
533 * is not supported
534 */
535 IH264ENC_EXTERROR_CREATE_RCDO_PROFILE = 18 ,
536 /** Bit 18 – RCDO is allowed only for Baseline profile.
537 */
538 IH264ENC_EXTERROR_CREATE_TXBLKSIZE_ENTROPY_POC_LTRP = 19 ,
539 /** Bit 19 – This bit is set when
540 * a. Parameters transformBlockSize, entropyCodingMode, log2MaxFNumMinus4,
541 * maxIntraFrameInterval, IDRFrameInterval, gopStructure are out of range.
542 * b. LTRP is enabled for interlaced coding type
543 * If this bit is set, correspondingly IH264ENC_EXTERROR_CREATE_GOPSTRUCT
544 * _LOG2MAX_INTRAINTERVAL is also set
545 */
546 IH264ENC_EXTERROR_CREATE_TXBLKSIZE_PROFILE = 20 ,
547 /** Bit 20 – Transform Block size IH264_TRANSFORM_8x8 is allowed only in
548 * High profile.
549 */
550 IH264ENC_EXTERROR_DATASYNC_GETFN_PTRNULL = 21 ,
551 /** Bit 21 – getBufferFxn is a function pointer used to get buffer. This
552 * function gets called in Data synch flow. This error bit is set if
553 * this function pointer is NULL
554 */
555 IH264ENC_EXTERROR_DATASYNC_MBUNIT_SLICESIZE = 22 ,
556 /** Bit 22 – This bit is set if
557 * a. User has enabled call back notification at slice level and
558 * b. Encoder slice mode selected is IH264_SLICEMODE_MBUNIT and
559 * c. Slice Unit size(number of MBs per slice) set is less than
560 * minimum MBs per slices. Minimum MBs per slice is (TotalMbsInPic/63)
561 */
562 IH264ENC_EXTERROR_DATASYNC_MODE_BFRAME = 23 ,
563 /** Bit 23 – Data sync, inputDataMode is not set to IVIDEO_ENTIREFRAME in
564 * presence of ‘B’ frames. In ‘B’ cases we allow processing entire frames
565 * and not any mode
566 */
567 IH264ENC_EXTERROR_DATASYNC_MODE_FNPTRNULL = 24 ,
568 /** Bit 24 – This bit is set if
569 * a. Data sync, outputDataMode is IVIDEO_FIXEDLENGTH or IVIDEO_SLICEMODE
570 * and putDataFxn is NULL
571 * OR
572 * b. Data sync, inputDataMode is IVIDEO_NUMROWS and getDataFxn is NULL
573 */
574 IH264ENC_EXTERROR_DATASYNC_MODE_H241_FNPTRNULL = 25 ,
575 /** Bit 25 – In H241 flow, if user is interested in call back notification
576 * at slice level then he has to provide function address in getBufferFxn
577 * function pointer else this bit is set
578 */
579 IH264ENC_EXTERROR_DATASYNC_MODE_MINBITRATE = 26 ,
580 /** Bit 26 – minBitRate should be 0 if data sync, outputDataMode is
581 * VIDEO_FIXEDLENGTH or IVIDEO_SLICEMODE
582 */
583 IH264ENC_EXTERROR_DATASYNC_OUTPUTDATAEXCEED = 27 ,
584 /** Bit 27 – Encoded output data size has exceeded the available buffer
585 * size
586 */
587 IH264ENC_EXTERROR_DATASYNC_UNITS = 28 ,
588 /** Bit 28 – Data sync, numOutputDataUnits are out of allowed ranges in
589 * case of outputDataMode not equal to IVIDEO_ENTIREFRAME
590 */
591 IH264ENC_EXTERROR_DYNAMIC_SRCHCENTRE = 29 ,
592 /** Bit 29 – GMV, search centre x/y are out of allowed range
593 */
594 IH264ENC_EXTERROR_DYNAMICPARAMS_PTRNULL = 30 ,
595 /** Bit 30 – In encoder control call with command option XDM_SETPARAMS,
596 * IVIDENC2_DynamicParams structure pointer is NULL
597 */
598 IH264ENC_EXTERROR_EARLYEXIT = 31 ,
599 /** Bit 31 – Early exit called because Frame processing is not completed
600 * at IVAHD side
601 */
602 IH264ENC_EXTERROR_FIFO_EMPTY_NOPROCESS = 32 ,
603 /** Bit 32 – In Flush process calls, no more buffers are locked and
604 * hence process call cannot be made further this point
605 */
606 IH264ENC_EXTERROR_FILLERBYTES_NEGATIVE = 33 ,
607 /** Bit 33 – This bit set indicates that the filler bytes size to be put
608 * in bitstream to meet bit stream constraint is negative. Filler data
609 * negative indiactes that bits consumed in current unit till now has
610 * crossed the maximum limit.So inform to the user by seeting appropirate bit
611 */
612 IH264ENC_EXTERROR_FMO_PRESET = 34 ,
613 /** Bit 34 – FMO coding preset is other than default.
614 * FMO is not supported in this release
615 */
616 IH264ENC_EXTERROR_FRMPACKING_PRESET = 35 ,
617 /** Bit 35 – Frame packing preset is not in allowed range
618 */
619 IH264ENC_EXTERROR_FRMPACKING_TYPE_INPCONTENT = 36 ,
620 /** Bit 36 – This bit is set if
621 * a.Frame packing is enabled for interlaced cases
622 * b.Frame packing preset is user defined and frame packing type is more
623 * than 4 (IH264_FRAMEPACK_TOP_BOTTOM)
624 */
625 IH264ENC_EXTERROR_FRMRATE_NUMUNITSINTICKS = 37 ,
626 /** Bit 37 – Level incompliant MBs per second
627 */
628 IH264ENC_EXTERROR_GENHEADER_BITSTREAM_BUFFERSIZE = 38 ,
629 /** Bit 38 – In process call with XDM_GENERATE_HEADER mode, output
630 * buffer size provided should be minimum of 0x100 bytes
631 * (to hold SPS and PPS)
632 */
633 IH264ENC_EXTERROR_HANDLE_BUFDESCRIPTORS_PTRNULL = 39 ,
634 /** Bit 39 – Pointer of handle or inBufs or outBufs structure may be NULL
635 */
636 IH264ENC_EXTERROR_HIGHSPEED_BFARME = 40 ,
637 /** Bit 40 – High speed encoding feature is not supported for ‘B’ frames.
638 */
639 IH264ENC_EXTERROR_HIGHSPEED_MEALGO_TXBLKSIZE_PROFILE = 41 ,
640 /** Bit 41 – This bit is set if, in High speed encoding mode
641 * a. Transform block size is 4x4 for High profile case
642 * OR
643 * b. Transform block size is 8x8 and non High profile cases
644 */
645 IH264ENC_EXTERROR_HIGHSPEED_PARTIALSKIP_INTRAREFRESHMETHOD= 42 ,
646 /** Bit 42 – This bit is set if, in High speed encoding mode
647 * a. Transform block size is 4x4 for High profile case
648 * OR
649 * b. Transform block size is 8x8 and non High profile cases
650 * OR
651 * c. Partial Frame skip is enabled
652 * OR
653 * d. Intra refresh method is other than default
654 * If this bit is set, correspondingly IH264ENC_EXTERROR_HIGHSPEED_
655 * TXBLKSIZE_PROFILE is also set
656 */
657 IH264ENC_EXTERROR_HIGHSPEED_TXBLKSIZE_PROFILE = 43 ,
658 /** Bit 43 – This bit is set if, in High speed encoding mode
659 * a. Transform block size is 4x4 for High profile case
660 * OR
661 * b. Transform block size is 8x8 and non High profile cases
662 * OR
663 * c. Partial Frame skip is enabled
664 * OR
665 * d. Intra refresh method is other than default
666 * If this bit is set, correspondingly IH264ENC_EXTERROR_HIGHSPEED_
667 * PARTIALSKIP_INTRAREFRESHMETHOD is also set
668 */
669 IH264ENC_EXTERROR_INARGS_BASECLASS_WATERMARKENABLE = 44 ,
670 /** Bit 44 – Water Marking feature of the encoder is enabled and inArgs
671 * structure is base class. If inArgs structure is base class we cannot
672 * access the input key that has to used in water marking algo.
673 * So please use extended class of inArgs and pass the input key
674 */
675 IH264ENC_EXTERROR_INARGS_CONTROL = 45 ,
676 /** Bit 45 – The control parameter passed as part of inArgs structure is
677 * out of allowed range
678 */
679 IH264ENC_EXTERROR_INARGS_OUTARGS_SIZE = 46 ,
680 /** Bit 46 – The size parameter as part of inArgs or outArgs structure does
681 * not match base class not even extended class
682 */
683 IH264ENC_EXTERROR_INARGS_PTRNULL = 47 ,
684 /** Bit 47 – inArgs structure pointer passed in the process call is NULL
685 */
686 IH264ENC_EXTERROR_INPCONTENT_TYPE = 48 ,
687 /** Bit 48 – Input data content type value is wrong or input data chroma
688 * format is not YUV420
689 */
690 IH264ENC_EXTERROR_INPUT_BUFFERID = 49 ,
691 /** Bit 49 – inputId as part of inArgs structure is 0
692 */
693 IH264ENC_EXTERROR_INPUTBUF_MEMTYPE = 50 ,
694 /** Bit 50 – memType value set in the plane descriptors of inBufs structure
695 * is falling out of allowed values
696 */
697 IH264ENC_EXTERROR_INPUTBUF_PTR_SIZE_NULL = 51 ,
698 /** Bit 51 - buf value(buffer pointer) or bufSize.bytes set in the plane
699 * descriptors of inBufs structure is NULL
700 */
701 IH264ENC_EXTERROR_INTER_HIGHSPEED_MVPERMB = 52 ,
702 /** Bit 52 – This bit is set if, in High speed encoding mode
703 * a. ‘B’ frames are enabled
704 * OR
705 * b. Motion vector accuracy is not a Quarter pel (mvAccuracy !=
706 * IVIDENC2_MOTIONVECTOR_QUARTERPEL)
707 * OR
708 * c. Motion vectors per macroblock is not 1
709 * (minBlockSizeP != IH264_BLOCKSIZE_16x16)
710 * If this bit is set, correspondingly IH264ENC_EXTERROR_INTER_HIGHSPEED
711 * _QPEL_FRAMEINTERVAL is also set
712 */
713 IH264ENC_EXTERROR_INTER_HIGHSPEED_QPEL_FRAMEINTERVAL = 53 ,
714 /** Bit 53 – This bit is set if, in High speed encoding mode
715 * a. ‘B’ frames are enabled
716 * OR
717 * b. Motion vector accuracy is not a Quarter pel (mvAccuracy !=
718 * IVIDENC2_MOTIONVECTOR_QUARTERPEL)
719 * OR
720 * c. Motion vectors per macroblock is not 1
721 * (minBlockSizeP != IH264_BLOCKSIZE_16x16)
722 * If this bit is set, correspondingly IH264ENC_EXTERROR_INTER_HIGHSPEED
723 * _MVPERMB is also set
724 */
725 IH264ENC_EXTERROR_INTER_MVPERMB = 54 ,
726 /** Bit 54 – Motion vectors per MB set is not in allowed range.
727 * minBlockSizeP/B is not equal to IH264_BLOCKSIZE_16x16 and not even
728 * IH264_BLOCKSIZE_8x8
729 */
730 IH264ENC_EXTERROR_INTER_PRESET = 55 ,
731 /** Bit 55 – interCoding preset value is out of allowed range
732 */
733 IH264ENC_EXTERROR_INTER_SRCHRGN_SKIPMVBIAS = 56 ,
734 /** Bit 56 – searchRangeHorP/B or searchRangeVerP/B or skipMVCodingBias
735 * values are out of allowed range
736 */
737 IH264ENC_EXTERROR_INTERLACE_DATALAYOUT = 57 ,
738 /** Bit 57 – In interlaced encoding cases, dataLayout value set as part
739 * of inBufs structure is not IVIDEO_FIELD_INTERLEAVED and not even
740 * IVIDEO_FIELD_SEPARATED
741 */
742 IH264ENC_EXTERROR_INTRA_CBCR8X8 = 58 ,
743 /** Bit 58 – This bit is set if,
744 * a. intraCodingPreset is not a default
745 * AND
746 * b. chromaIntra8x8Enable is enabled
747 * AND
748 * c. chromaComponentEnable value is falling out of allowed range
749 * Please refer IH264ENC_ChormaComponent for more details
750 */
751 IH264ENC_EXTERROR_INTRA_GDR_BFRAME_INPCONTENT_RATE = 59 ,
752 /** Bit 59 – This bit is set if, in GDR enabled cases
753 * a. Interlaced encoding is enabled
754 * b. ‘B’ frames are enabled
755 * c. GDR overlap rows is less than 0 or more than intraRefresh rate
756 */
757 IH264ENC_EXTERROR_INTRA_GDR_REFRESHRATE = 60 ,
758 /** Bit 60 – gdrOverlapRowsBtwFrames is more than intraRefreshRate
759 */
760 IH264ENC_EXTERROR_INTRA_INTER_FRMINTERVAL = 61 ,
761 /** Bit 61 – intraFrame interval is not a multiple of interFrame interval
762 */
763 IH264ENC_EXTERROR_INTRA_LEVEL_MODE = 62 ,
764 /** Bit 62 - lumaIntra8x8Enable is enabled for profile other than
765 * IH264_HIGH_PROFILE
766 */
767 IH264ENC_EXTERROR_INTRA_PRESET = 63 ,
768 /** Bit 63 – intraCoding preset is out of allowed range
769 */
770 IH264ENC_EXTERROR_INTRA_REFRESHMETHOD = 64 ,
771 /** Bit 64 – intraRefreshMethod value is out of allowed range
772 */
773 IH264ENC_EXTERROR_INTRA_REFRESHMETHOD_RATE = 65 ,
774 /** Bit 65 – intraRefreshRate is less than or equal to 0 for
775 * intraRefreshMethod value other than default
776 */
777 IH264ENC_EXTERROR_INTRA_REFRESHRATE = 66 ,
778 /** Bit 66 - intraRefreshRate is less than 0 for GDR enabled cases
779 */
780 IH264ENC_EXTERROR_IVAHD_BADRESET = 67 ,
781 /** Bit 67 – HDVICP reset is not proper
782 */
783 IH264ENC_EXTERROR_IVAHD_BADSTATE = 68 ,
784 /** Bit 68 – HDVICP is not in standby state
785 */
786 IH264ENC_EXTERROR_IVAHD_RELEASE = 69 ,
787 /** Bit 69 – HDVICP release fail. This occurs if HDVICP is not in
788 * standby state during release time
789 */
790 IH264ENC_EXTERROR_LEVEL_INPCONTENT = 70 ,
791 /** Bit 70 – level less than or equal to IH264_LEVEL_20 for interlaced
792 * encoding
793 */
794 IH264ENC_EXTERROR_LEVELLIMIT_RESOLUTION = 71 ,
795 /** Bit 71 – encoding resolutions/frame_dimensions are more than that
796 * of level allowed range
797 */
798 IH264ENC_EXTERROR_LOOPFILTER_OFFST_LFIDC = 72 ,
799 /** Bit 72 – loop filter preset is not a default and loopfilterDisableIDC,
800 * filterOffsetA/B is/are out of allowed range or filterOffsetA/B is odd
801 * value
802 */
803 IH264ENC_EXTERROR_LOOPFILTER_PRESET = 73 ,
804 /* Bit 73 – loop filter preset is out of allowed range
805 */
806 IH264ENC_EXTERROR_LUMA_INPUTBUF_MEMTYPE = 74 ,
807 /** Bit 74 – memType value set in the plane descriptors of inBufs
808 * structure corresponding to Luma data is XDM_MEMTYPE_TILED32 or
809 * XDM_MEMTYPE_TILED16. Allowed value is only XDM_MEMTYPE_TILED8 for
810 * Luma container
811 */
812 IH264ENC_EXTERROR_METADATA_NUMBUFFERS = 75 ,
813 /** Bit 75 – Number of meta data planes (corresponding to
814 * IH264_USER_DEFINED_SCALINGMATRIX and IH264_SEI_USER_DATA_UNREGISTERED)
815 * provided is not equal to inBufs->numMetaPlanes
816 */
817 IH264ENC_EXTERROR_METADATABUF_MEMTYPE = 76 ,
818 /** Bit 76 - memType value set in the meta data plane descriptors of
819 * inBufs structure is not equal to XDM_MEMTYPE_ROW or XDM_MEMTYPE_TILEDPAGE
820 */
821 IH264ENC_EXTERROR_METADATAPLANE_WGTTABLESIZE = 77 ,
822 /** Bit 77 – In case of user defined scaling matrix, payload_size
823 * (bufSize.bytes) provided as part of meta data plane descriptors of inBufs
824 * structure is less the size of weightTable
825 * (inBufs->metadataPlaneDesc[index].bufSize.bytes) <
826 * (sizeof(sH264WgtTables_t))
827 */
828 IH264ENC_EXTERROR_METADATATYPES = 78 ,
829 /** Bit 78 – metadataType[] are other than the supported values
830 */
831 IH264ENC_EXTERROR_MULITCHNL_BFRAME_NOTSUPPORTED = 79 ,
832 /** Bit 79 – This bit is set if ‘B’ frames are enabled in multi Frame
833 * process call
834 */
835 IH264ENC_EXTERROR_MULITCHNL_CHNLNUMEXCEEDED = 80 ,
836 /** Bit 80 – This bit is set if number of channels to be processed are
837 * more that of maximum supported in multi Frame process call
838 */
839 IH264ENC_EXTERROR_MULITCHNL_DATASYNC = 81 ,
840 /** Bit 81 – This bit is set if data sync is enabled in multi Frame process
841 * call
842 */
843 IH264ENC_EXTERROR_MULITCHNL_FRMPCK_STEREOIINFO = 82 ,
844 /** Bit 82 - This bit is set if framePackingPreset or stereoInfoPreset is
845 * enabled in multi Frame process call
846 */
847 IH264ENC_EXTERROR_MULITCHNL_GENHEADER_NOTSUPPORTED = 83 ,
848 /** Bit 83 - This bit is set if frame process mode is XDM_GENERATE_HEADER
849 * in multi Frame process call
850 */
851 IH264ENC_EXTERROR_MULITCHNL_MINBITRATE_NOTSUPPORTED = 84 ,
852 /** Bit 84 - This bit is set if minBitRate value is more than 0 in multi
853 * Frame process call
854 */
855 IH264ENC_EXTERROR_MULITCHNL_MVPERMB = 85 ,
856 /** Bit 85 – This bit is set if motion vectors per MB (minBlockSizeP)
857 * is not same for all the channels submitted in multi Frame process call
858 */
859 IH264ENC_EXTERROR_NALU_GOLDENSPS = 86 ,
860 /** Bit 86 – In all NALU preset masks, SPS_WITH_VUI bit is to be set or
861 * has to be reset. Setting of this bit in few masks and resetting in others
862 * is not allowed
863 */
864 IH264ENC_EXTERROR_NALU_PRESET = 87 ,
865 /** Bit 87 – NALU control preset is out of allowed range
866 */
867 IH264ENC_EXTERROR_NALU_SPS_VUI = 88 ,
868 /** Bit 88 – SEI NALU bit is set in a mask and SPS_WITH_VUI is not
869 * set in that particular mask
870 */
871 IH264ENC_EXTERROR_NOCLEANEXIT = 89 ,
872 /** Bit 89 – Early return because M3 has done early abort
873 */
874 IH264ENC_EXTERROR_NUM_INPUT_OUTPUT_BUFS = 90 ,
875 /** Bit 90 – There has to atleast 2 input buffers (inBufs->numPlanes :
876 * 1 Luma and 1 CbCr) and 1 output buffer (outBufs->numBufs : bit stream).
877 * This bit is set if this condition is not satisfied
878 */
879 IH264ENC_EXTERROR_OUTPUTBUF_MEMTYPE = 91 ,
880 /** Bit 91 – This bit is set if
881 * a. output bitstream buffer’s memory type is not XDM_MEMTYPE_ROW or
882 * not XDM_MEMTYPE_TILEDPAGE
883 * OR
884 * b. output buffer’s memory type is out of allowed range
885 */
886 IH264ENC_EXTERROR_OUTPUTBUF_PTR_SIZE_NULL = 92 ,
887 /** Bit 92 – This bit is set if output data sync is not enabled and
888 * bitstream buffer pointer is NULL or buffer.bytes is 0
889 */
890 IH264ENC_EXTERROR_OUTPUTDATASIZE_EXCEEDED = 93 ,
891 /** Bit 93 - Encoded output data size has exceeded the available buffer size
892 */
893 IH264ENC_EXTERROR_PRESET_ENC_RATECTRL_LVL = 94 ,
894 /** Bit 94 – This bit is set if
895 * a. encodingPreset is out of allowed range
896 * b. rateControlPreset is out of allowed range
897 * c. profile and level out of allowed range
898 * d. data sync mode out of allowed range
899 * e. inputChromaFormat, inputContentType,operatingMode,
900 * maxInterFrameInterval, maxHeight, maxWidth and dataEndianness are
901 * out of allowed range
902 * If this bit is set, correspondingly IH264ENC_EXTERROR_PROFILE_DATASYNC
903 * _INPCONTENT_RES is also set
904 */
905 IH264ENC_EXTERROR_PROFILE_BFRAME = 95 ,
906 /** Bit 95 – ‘B’ frames are enabled for baseline profile
907 */
908 IH264ENC_EXTERROR_PROFILE_DATASYNC_INPCONTENT_RES = 96 ,
909 /** Bit 96 – This bit is set if
910 * a. encodingPreset is out of allowed range
911 * b. rateControlPreset is out of allowed range
912 * c. profile and level out of allowed range
913 * d. data sync mode out of allowed range
914 * e. inputChromaFormat, inputContentType,operatingMode,
915 * maxInterFrameInterval, maxHeight, maxWidth and dataEndianness are
916 * out of allowed range
917 * If this bit is set, correspondingly IH264ENC_EXTERROR_PRESET_ENC_RATECTRL
918 * _LVL is also set
919 */
920 IH264ENC_EXTERROR_PROFILE_INPCONTENT = 97 ,
921 /** Bit 97 – interlaced encoding is enabled for baseline profile
922 */
923 IH264ENC_EXTERROR_RATECTRL_BFRAMEPICSIZE = 98 ,
924 /** Bit 98 – rate control, minPicSizeRatioB value is out of allowed range
925 */
926 IH264ENC_EXTERROR_RATECTRL_CBCRQPINDEX_INITBUFLVL = 99 ,
927 /** Bit 99 – rate control,chromaQPIndexOffset initialBufferLevel are out
928 * of allowed range
929 */
930 IH264ENC_EXTERROR_RATECTRL_HRDBUFFER_LVLEXCEED = 100 ,
931 /** Bit 100 – rate control, HRDBufferSize is falling out of level decided
932 * minimum and maximum limit
933 */
934 IH264ENC_EXTERROR_RATECTRL_IFRAME_QP = 101 ,
935 /** Bit 101 – rate control, qpI is not falling in the range [qpMinI, qpMaxI]
936 */
937 IH264ENC_EXTERROR_RATECTRL_IFRAMEPICSIZE = 102 ,
938 /** Bit 102 – rate control, minPicSizeRatioI value is out of allowed range
939 */
940 IH264ENC_EXTERROR_RATECTRL_IPBFRAME_QP = 103 ,
941 /** Bit 103 – rate control, Qp values set for ‘I’, ‘P’ and ‘B’ frames are
942 * falling out allowed values
943 */
944 IH264ENC_EXTERROR_SCLMATRIX_METADATA = 104 ,
945 /** Bit 104 – Scaling matrix preset is user defined
946 * (IH264_SCALINGMATRIX_USERDEFINED_SPSLEVEL or IH264_SCALINGMATRIX_
947 * USERDEFINED_PPSLEVEL) and meta data is not enabled for user defined
948 * scaling matrix
949 */
950 IH264ENC_EXTERROR_RATECTRL_PARAMSPRESET = 105 ,
951 /** Bit 105 – rate control, rateControlParamsPreset is out of allowed range
952 */
953 IH264ENC_EXTERROR_RATECTRL_PBFRAME_QP = 106 ,
954 /** Bit 106 – rate control, Qp values for ‘P’ or ‘B’ frames are out of
955 * range[minQp, maxQp]
956 */
957 IH264ENC_EXTERROR_RATECTRL_PFRAMEPICSIZE = 107 ,
958 /** Bit 107 – rate control, minPicSizeRatioP value is out of allowed range
959 */
960 IH264ENC_EXTERROR_RATECTRL_PRESET_BFRAME_INPCONTENT = 108 ,
961 /** Bit 108 - IVIDEO_LOW_DELAY rateControlPreset is not supported for
962 * interlaced encoding and for ‘B’ frame cases
963 */
964 IH264ENC_EXTERROR_RATECTRL_PROFILE_SCALINGMTRX = 109 ,
965 /** Bit 109 – scaling matrix preset is out of range or scaling matrix preset
966 * is other than user defined for profile not equal to IH264_HIGH_PROFILE
967 */
968 IH264ENC_EXTERROR_RATECTRL_RCALGO = 110 ,
969 /** Bit 110 – rate control, rcAlgo is out of allowed range
970 */
971 IH264ENC_EXTERROR_RATECTRL_RCALGO_INTERLACE_OR_BFRAME = 111 ,
972 /** Bit 111 - RATECONTROL_PRC_LOW_DELAY rcAlgo is not supported for
973 * interlaced encoding and for ‘B’ frame cases
974 */
975 IH264ENC_EXTERROR_RATECTRL_SKIPDISTWNDW = 112 ,
976 /** Bit 112 – This bit is set if
977 * a. rcAlgo is RATECONTROL_PRC_LOW_DELAY
978 * AND
979 * b. skip distribution window length (skipDistributionWindowLength) or
980 * number of skip frames in distribution window specified are out of
981 * allowed range
982 */
983 IH264ENC_EXTERROR_RATECTRL_VBR = 113 ,
984 /** Bit 113 – rate control, with CVBR settings, VBR duration (VBRDuration)
985 * or VBR sensitivity (VBRsensitivity) are out of allowed range
986 */
987 IH264ENC_EXTERROR_RESOLUTION_BITRATE_FRMINTERVAL_GENHEADER= 114 ,
988 /** Bit 114 – This bit is set if any of the below conditions is set
989 * a. The size of dynamic params structure set is not of base class and
990 * nor even extended class
991 * b. Encoding dimensions are out of range
992 * c. Target bit rate less than minimum bt rate or frame rate is less than 0
993 * d. Generate header mode other than XDM_ENCODE_AU and XDM_GENERATE_HEADER
994 * e. User forced frame other than IDR/NA frame
995 * f. Wrong settings in interframe or intraFrame intervals
996 * g. Incorrect settings in motion vector accuracy settings
997 * If this bit is set, correspondingly IH264ENC_EXTERROR_CAPTUREWIDTH_
998 * FORCEFRAME_LTRP_QPEL is also set
999 */
1000 IH264ENC_EXTERROR_ROI_COORDINATES = 115 ,
1001 /** Bit 115 – ROI co-ordinates provided are not proper. x/y may be less
1002 * than 0 or more than frame dimensions. Also please see that Top.x
1003 * should be less than Bottom.x and Top.y should be less than bottom.y
1004 * for all co-ordinates
1005 */
1006 IH264ENC_EXTERROR_ROI_NUMBERROIS = 116 ,
1007 /** Bit 116 – Number of ROI regions set are out of allowed range
1008 */
1009 IH264ENC_EXTERROR_ROI_PRIORITY = 117 ,
1010 /** Bit 117 – ROI priority (roiPriority) provided are out of allowed range.
1011 * This check is done with rate control enabled cases
1012 */
1013 IH264ENC_EXTERROR_ROI_QP = 118 ,
1014 /** Bit 118 - ROI priority (roiPriority) provided are out of allowed range.
1015 * This check is done with rate control disabled cases.
1016 * Here roiPriority holds the Qp values of the ROI regions
1017 */
1018 IH264ENC_EXTERROR_ROI_TYPE = 119 ,
1019 /** Bit 119 – ROI types (roiType) provided are out of allowed range
1020 */
1021 IH264ENC_EXTERROR_SLICE_NONE_DATASYNC = 120 ,
1022 /** Bit 120 – data sync call back notification is enabled for every
1023 * slice (outputDataMode == IVIDEO_SLICEMODE)and slice level encoding
1024 * is disabled (sliceMode == IH264_SLICEMODE_NONE)
1025 */
1026 IH264ENC_EXTERROR_SLICE_H241_ENTROPY_INTERFRAME_INTERLACE = 121 ,
1027 /** Bit 121 – This bit is set if H241 is enabled and
1028 * a. Width provided is less than that being supported in H241 cases
1029 * OR
1030 * b. Interlaced encoding is enabled
1031 * OR
1032 * c. Entropy coding mode is CABAC
1033 * OR
1034 * d. ‘B’ frames are enabled
1035 * OR
1036 * e. Slice unit size in bytes (sliceUnitSize) provided is loess that being
1037 * supported
1038 * If this bit is set, correspondingly IH264ENC_EXTERROR_SLICE_H241_
1039 * WIDTH_SLICESIZE is also set
1040 */
1041 IH264ENC_EXTERROR_SLICE_STRMFORMAT_DATASYNC = 122 ,
1042 /** Bit 122 – stream format IH264_NALU_STREAM is supported only with default
1043 * slice mode and datasync option as IVIDEO_SLICEMODE
1044 */
1045 IH264ENC_EXTERROR_SLICE_H241_WIDTH_SLICESIZE = 123 ,
1046 /** Bit 123 – This bit is set if H241 is enabled and
1047 * a. Width provided is less than that being supported in H241 cases
1048 * OR
1049 * b. Interlaced encoding is enabled
1050 * OR
1051 * c. Entropy coding mode is CABAC
1052 * OR
1053 * d. ‘B’ frames are enabled
1054 * OR
1055 * e. Slice unit size in bytes (sliceUnitSize) provided is loess that being
1056 * supported
1057 */
1058 IH264ENC_EXTERROR_SLICE_MODE_SIZE = 124 ,
1059 /** Bit 124 – This bit is set if
1060 * a. Slice mode is SLICEMODE_MBUNIT and slice size provided is more than
1061 * size of the frame or slice size is less than 6
1062 * OR
1063 * b. Slice mode is SLICEMODE_OFFSET and sliceOffset0 is more than
1064 * sliceOffset1 or sliceOffset1 is more than sliceoffset2
1065 */
1066 IH264ENC_EXTERROR_SLICE_PRESET = 125 ,
1067 /** Bit 125 – slice coding preset is out of allowed range
1068 */
1069 IH264ENC_EXTERROR_SLICE_STRMFORMAT = 126 ,
1070 /** Bit 126 – stream format provided is out of allowed range
1071 */
1072 IH264ENC_EXTERROR_STATUS_PTRNULL = 127 ,
1073 /** Bit 127 – status structure pointer passed in the encoder control call is
1074 * NULL
1075 */
1076 IH264ENC_EXTERROR_STATUS_SIZE = 128 ,
1077 /** Bit 128 - The size of status params structure set is not of base class
1078 * and nor even extended class
1079 */
1080 IH264ENC_EXTERROR_STEREO_INPCONTENT = 129 ,
1081 /** Bit 129 – stereo info preset is enabled for progressive encoding which
1082 * is not supported in this version of encoder
1083 */
1084 IH264ENC_EXTERROR_STEREO_PRESET = 130 ,
1085 /** Bit 130 – stereo info preset set is out of allowed range
1086 */
1087 IH264ENC_EXTERROR_VERSION_BUFFER_NULL_OR_SIZE = 131 ,
1088 /** Bit 131 – data buffer pointer as part of status structure is NULL.
1089 * This buffer is used to place the version number of encoder.
1090 * OR
1091 * The data size as part of status structure is less than the size
1092 * required to place an version number
1093 */
1094 IH264ENC_EXTERROR_VUI_NUMUNITSINTICKS = 132 ,
1095 /** Bit 132 – VUI coding preset is user defined and the parameter
1096 * numUnitsInTicks as part of vuiCodingParams is less than 0
1097 */
1098 IH264ENC_EXTERROR_VUI_PRESET = 133 ,
1099 /** Bit 133 – VUI coding preset set is out of allowed range
1100 */
1101 IH264ENC_NUM_OUTPUT_BUFS_ANALYTICINFO = 134 ,
1102 /** Bit 134 – Analytic info is enabled and the buffer to store analytic
1103 * info is not provided i.e., (outBufs->numBufs < 2 AND enableAnalyticinfo)
1104 */
1105 IH264ENC_EXTERROR_NUM_MAXBITS ,
1106 /** Maximum number of sub extended error bits
1107 */
1108 IH264ENC_EXTERROR_NUM_MAXWORDS = ((IH264ENC_EXTERROR_NUM_MAXBITS + 31) / 32)
1109 /** Each word can hold 32 error bits, so max words are calculated as above
1110 */
1111}IH264ENC_ExtErrBits ;
1112
1113/**
1114 * @enum IH264ENC_Level
1115 * @brief Level Identifier for H.264 Encoder
1116*/
1117typedef enum
1118{
1119 IH264_LEVEL_10 = 10, /**< Level 1.0 */
1120 IH264_LEVEL_1b = 9, /**< Level 1.b */
1121 IH264_LEVEL_11 = 11, /**< Level 1.1 */
1122 IH264_LEVEL_12 = 12, /**< Level 1.2 */
1123 IH264_LEVEL_13 = 13, /**< Level 1.3 */
1124 IH264_LEVEL_20 = 20, /**< Level 2.0 */
1125 IH264_LEVEL_21 = 21, /**< Level 2.1 */
1126 IH264_LEVEL_22 = 22, /**< Level 2.2 */
1127 IH264_LEVEL_30 = 30, /**< Level 3.0 */
1128 IH264_LEVEL_31 = 31, /**< Level 3.1 */
1129 IH264_LEVEL_32 = 32, /**< Level 3.2 */
1130 IH264_LEVEL_40 = 40, /**< Level 4.0 */
1131 IH264_LEVEL_41 = 41, /**< Level 4.1 */
1132 IH264_LEVEL_42 = 42, /**< Level 4.2 */
1133 IH264_LEVEL_50 = 50, /**< Level 5.0 */
1134 IH264_LEVEL_51 = 51 /**< Level 5.1 */
1135
1136} IH264ENC_Level ;
1137
1138
1139/**
1140 * @enum IH264ENC_Profile
1141 * @brief Profile Identifier for H.264 Encoder
1142*/
1143typedef enum
1144{
1145 IH264_BASELINE_PROFILE = 66, /**< BaseLine Profile */
1146 IH264_MAIN_PROFILE = 77, /**< Main Profile */
1147 IH264_EXTENDED_PROFILE = 88, /**< Extended Profile */
1148 IH264_HIGH_PROFILE = 100, /**< High Profile */
1149 IH264_DEFAULT_PROFILE = IH264_HIGH_PROFILE, /**< Default Profile */
1150 IH264_HIGH10_PROFILE = 110, /**< High 10 Profile */
1151 IH264_HIGH422_PROFILE = 122, /**< High 4:2:2 Profile */
1152 IH264SVC_BASELINE_PROFILE = 83, /**< SVC Baseline Profile */
1153 IH264SVC_HIGH_PROFILE = 86 /**< SVC High Profile */
1154} IH264ENC_Profile ;
1155
1156/**
1157 * @enum IH264ENC_MetadataType
1158 * @brief Meta Data for H.264 encoder
1159
1160 The way to pass meta data to encode is via inBufs to the encoder during
1161 process call.
1162 The way to get meta data from encode is via outBufs of the encoder during
1163 process call.
1164
1165 When application request the buffer infos via control call with
1166 XDM_GETBUFINFO, encoder should count a buffer to have meta data at
1167 input/output level for this purpose. If for some metadata size is not known
1168 by encoder then it should return size =-1 so that application can
1169 allocate as per its knowledge. Same way for some meta-data application
1170 might not provide the size to codec via XDM2_SingleBufDesc.bufSize.bytes,
1171 in that case application can set it to -1. The meta data which has size
1172 field in its format, uses size of buffer from that field only.
1173 Example: User want to insert SEI_USER_DATA_UNREGISTERED meta data at each
1174 IDR picture, the following steps should be followed
1175
1176 1. Create the encoder object with IVIDENC2_Params::metadataType[0] =
1177 IH264_SEI_USER_DATA_UNREGISTERED and metadataType[1] and metadataType[2]
1178 = IVIDEO_METADATAPLANE_NONE
1179
1180 Also have IH264ENC_SET_NALU(naluPresentMaskIDRPicture, SEI)
1181 2. Call Control function with XDM_GETBUFINFO. Encoder should return one
1182 additional input buffer as required. size of the buffer will be -1 as
1183 encoder doesn't know the size
1184 3. Application should have a memory allocated for this meta data and pass on
1185 to the encoder via IVIDEO2_BufDesc *inBufs->numMetaPlanes = 1
1186 +----------------+
1187 inBufs->metadataPlaneDesc[index].buf = pBuffer ; ---> | size | payLoad |
1188 inBufs->metadataPlaneDesc[index].bufSize.bytes = -1 ; +----------------+
1189 since the meta-data format includes size field, encoder will read size from
1190 there and utilize it.
1191
1192 index of metadataPlaneDesc is the index of metaDataType which is holding
1193 the particular meta data type. In this example metadataType[0] is holding
1194 IH264_SEI_USER_DATA_UNREGISTERED so index = 0 of metadataPlaneDesc points
1195 to IH264_SEI_USER_DATA_UNREGISTERED specific meta data
1196*/
1197
1198typedef enum {
1199 IH264_SEI_USER_DATA_UNREGISTERED = XDM_CUSTOMENUMBASE,
1200 /**< H.264 allows inserting SEI message for any user data. refer section
1201 * D.1.6 of H.264 standard.
1202 * By setting this value to any if IVIDENC2_Params::metadataType[i]
1203 * user can provide its user data SEI to be inserted
1204 * in H.264 bit-stream
1205 * The format of user data is as below
1206 * typedef struct {
1207 * U32 size; only lower 10-bits are considered
1208 * U08 payload[]; number of bytes for payload is indicated by first
1209 * 32 bit field size
1210 * }
1211 * The picture which uses this metadata will be decided by naluPresentMask::SEI
1212 * bit. Example
1213 * if SEI bit of only naluPresentMaskStartOfSequence is set to 1 then this meta
1214 * data will be used only during start of sequence
1215 * Encoder can accept maximum size of this meta data as 1023 bytes < 1K.
1216 * Only lower 10-bits of size field is used by encoder
1217 */
1218
1219 IH264_REGION_OF_INTEREST,
1220 /**< Not defined yet the format but this field is to control the encoder to
1221 * accept ROI data as input
1222 */
1223
1224 IH264_USER_DEFINED_SCALINGMATRIX
1225 /**< H.264 allows inserting user defined scaling matrices.
1226 * By setting this value to any if IVIDENC2_Params::metadataType[i]
1227 * user can provide its user data SEI to be inserted in H.264 bit-stream
1228 * The format of user data is as below
1229 * typedef struct {
1230 * U32 size; only lower 10-bits are considered
1231 * U08 payload[]; number of bytes for payload is indicated by first
1232 * 32 bit field size
1233 * }
1234 * format of payload is for scaling matrix is defined in User GUide
1235 */
1236 } IH264ENC_MetadataType;
1237
1238/**
1239 * @enum IH264ENC_Control
1240 * @brief Diffrent types of controls for encoding frame
1241 * Eg: refere long term reference frame
1242 */
1243
1244typedef enum {
1245 IH264ENC_CTRL_REFER_LONG_TERM_FRAME = XDM_CUSTOMENUMBASE,
1246 /**< Refere long term reference frame (I/IDR frames) when
1247 * IH264ENC_LTRPScheme is IH264ENC_LTRP_REFERTOIDR
1248 */
1249 IH264ENC_CTRL_NOWRITE_NOREFUPDATE,
1250 /**< Current frame is a non-referencing P frame and do
1251 * not update the reference frame for this frame. Applicable
1252 * when IH264ENC_LTRPScheme is IH264ENC_LTRP_REFERTOP_PROACTIVE
1253 */
1254 IH264ENC_CTRL_WRITE_NOREFUPDATE,
1255 /**< Current frame is a referencing P frame and do
1256 * not update the reference frame for this frame. Applicable
1257 * when IH264ENC_LTRPScheme is IH264ENC_LTRP_REFERTOP_PROACTIVE
1258 */
1259 IH264ENC_CTRL_NOWRITE_REFUPDATE,
1260 /**< Current frame is a non-referencing P frame and
1261 * update the reference frame for this frame. Applicable
1262 * when IH264ENC_LTRPScheme is IH264ENC_LTRP_REFERTOP_PROACTIVE
1263 */
1264 IH264ENC_CTRL_WRITE_REFUPDATE,
1265 /**< Current frame is a referencing P frame and
1266 * update the reference frame for this frame. Applicable
1267 * when IH264ENC_LTRPScheme is IH264ENC_LTRP_REFERTOP_PROACTIVE
1268 */
1269 IH264ENC_CTRL_START_GDR
1270 /**< Current frame is a choosen to start the GDR activity. Applicable
1271 * when intraRefreshMethod is IH264_INTRAREFRESH_GDR
1272 */
1273} IH264ENC_Control;
1274
1275/**
1276 * @enum IH264ENC_LTRPScheme
1277 * @brief Diffrent types of long term-frame referencing scheme
1278 * Eg: Mark all the I frames as long term-reference frame
1279 */typedef enum {
1280 IH264ENC_LTRP_NONE = 0,
1281 /**< No longterm refernce frame in the sequnce
1282 */
1283 IH264ENC_LTRP_REFERTO_PERIODICLTRP = 1,
1284 /**< Mark frames as long-term reference frame with the period given
1285 * by LTRPPeriod of IH264ENC_Params and
1286 * based on the frame control IH264ENC_Control, refer to
1287 * the long-term reference frame .
1288 */
1289 IH264ENC_LTRP_REFERTOP_PROACTIVE =2,
1290 /**< Two long term frames are supported in this schme and
1291 * long-term index marking and refernce frame update is done based
1292 * the IH264ENC_Control values
1293 */
1294 IH264ENC_LTRP_REFERTOP_REACTIVE = 3
1295 /**< Mark frames as long-term reference frame with the period given
1296 * by LTRPPeriod of IH264ENC_Params.
1297 * At any point of time there will be 2 long-term frames and
1298 * based on the frame control IH264ENC_Control, refer to
1299 * the last long-term reference frame .
1300 */
1301}IH264ENC_LTRPScheme;
1302
1303/**
1304 * @enum IH264ENC_PicOrderCountType
1305 * @brief Picture Order Count Type Identifier for H.264 Encoder
1306*/
1307typedef enum
1308{
1309 IH264_POC_TYPE_0 = 0, /**< POC type 0 */
1310 IH264_POC_TYPE_DEFAULT = IH264_POC_TYPE_0, /**< Default poc type */
1311 IH264_POC_TYPE_1 = 1, /**< POC type 1 */
1312 IH264_POC_TYPE_2 = 2, /**< POC type 2 */
1313 IH264_POC_TYPE_MAX
1314
1315} IH264ENC_PicOrderCountType ;
1316
1317
1318/**
1319
1320 @enum IH264ENC_ScalingMatPreset
1321 @brief These enumerations control the type of scaling matrix picked up
1322 by encoder
1323
1324*/
1325typedef enum
1326{
1327 IH264_SCALINGMATRIX_NONE = 0 ,
1328 /**< Default Scaling matrix (No scaling) */
1329 IH264_SCALINGMATRIX_NORMAL = 1 ,
1330 /**< Flat Scaling matrix: part of standard (NO Scaling Matrix) */
1331 IH264_SCALINGMATRIX_DEFAULT = IH264_SCALINGMATRIX_NORMAL,
1332 /**< For normal contents */
1333 IH264_SCALINGMATRIX_NOISY = 2 ,
1334 /**< For noisy contents */
1335 IH264_SCALINGMATRIX_STD_DEFAULT = 3 ,
1336 /**< Default Scaling Matrix provided by H.264 standard */
1337 IH264_SCALINGMATRIX_USERDEFINED_SPSLEVEL = 4 ,
1338 /**< User defined SM at SPS level*/
1339 IH264_SCALINGMATRIX_USERDEFINED_PPSLEVEL = 5 ,
1340 /**< User defined SM at PPS level*/
1341 IH264_SCALINGMATRIX_MAX
1342
1343} IH264ENC_ScalingMatPreset;
1344
1345
1346/**
1347
1348 @enum IH264ENC_RateControlAlgo
1349 @brief These enumerations control the type of rateControl algo to be picked
1350 up by encoder. Only useful if IVIDENC2::rateControlPreset is set as
1351 IVIDEO_USER_DEFINED
1352
1353*/
1354typedef enum
1355{
1356 IH264_RATECONTROL_PRC = 0 , /**< Perceptual Rate Control,
1357 * controls the QP @ MB level
1358 */
1359 IH264_RATECONTROL_PRC_LOW_DELAY = 1, /** Low Delay Rate Control */
1360 IH264_RATECONTROL_DEFAULT = IH264_RATECONTROL_PRC/** Default rcAlgo is PRC */
1361
1362} IH264ENC_RateControlAlgo;
1363
1364
1365/**
1366
1367 @enum IH264ENC_FrameQualityFactor
1368 @brief These enumerations control the quality factor b/w two types of frames
1369 For example if user want I frame Quality to be given more importance
1370 than P frame, one can define it to be higher quality factor
1371
1372*/
1373typedef enum
1374{
1375 IH264_QUALITY_FACTOR_1 = 0 , /**< Same Quality factor
1376 * b/w two types of frame
1377 */
1378 IH264_QUALITY_FACTOR_DEFAULT = IH264_QUALITY_FACTOR_1,
1379 /**< Default Quality factor
1380 * to be used by encoder
1381 */
1382 IH264_QUALITY_FACTOR_2 = 1 , /**< High Quality factor to
1383 * one frame type b/w two types
1384 of frame
1385 */
1386 IH264_QUALITY_FACTOR_3 = 2 , /**< Higher Quality factor to
1387 one frame type b/w two types of frame
1388 */
1389 IH264_QUALITY_FACTOR_MAX
1390
1391} IH264ENC_FrameQualityFactor ;
1392
1393
1394
1395/**
1396
1397 @enum IH264ENC_RateControlParamsPreset
1398 @brief These enumerations control the RateControl Params
1399
1400*/
1401
1402typedef enum
1403{
1404 IH264_RATECONTROLPARAMS_DEFAULT = 0 ,
1405 /**< Default Rate Control params */
1406 IH264_RATECONTROLPARAMS_USERDEFINED = 1 ,
1407 /**< User defined Rate Control params */
1408 IH264_RATECONTROLPARAMS_EXISTING = 2 ,
1409 /**< Keep the Rate Control params as existing. This is
1410 * useful because during control call if user don't want
1411 * to chnage the Rate Control Params
1412 */
1413 IH264_RATECONTROLPARAMS_MAX
1414
1415} IH264ENC_RateControlParamsPreset;
1416
1417/**
1418
1419 @enum IH264ENC_InterCodingPreset
1420 @brief These enumerations control the type of inter coding
1421
1422*/
1423
1424typedef enum
1425{
1426 IH264_INTERCODING_DEFAULT = 0 , /**< Default Inter coding params */
1427 IH264_INTERCODING_USERDEFINED = 1 , /**< User defined inter coding params */
1428 IH264_INTERCODING_EXISTING = 2 , /**< Keep the inter coding params as
1429 * existing. This is useful because
1430 * during control call if user don't
1431 * want to chnage the inter coding Params
1432 */
1433 IH264_INTERCODING_MED_SPEED_HIGH_QUALITY = 3 , /**< Med Speed High Quality*/
1434 IH264_INTERCODING_HIGH_SPEED = 4, /**< High Speed Preset*/
1435 IH264_INTERCODING_MAX
1436
1437} IH264ENC_InterCodingPreset;
1438
1439/**
1440
1441 @enum IH264ENC_MeAlgoMode
1442 @brief These enumerations control the mealgo selected
1443
1444*/
1445
1446typedef enum
1447{
1448 IH264ENC_MOTIONESTMODE_NORMAL = 0 , /**< Normal meAlgo */
1449 IH264ENC_MOTIONESTMODE_HIGH_SPEED = 1 , /**< meAlgo for HIGH SPEED */
1450 IH264ENC_MOTIONESTMODE_DEFAULT = IH264ENC_MOTIONESTMODE_NORMAL ,
1451 /**< Default meAlgo */
1452 IH264ENC_MOTIONESTMODE_MAX
1453
1454} IH264ENC_MeAlgoMode;
1455
1456/**
1457
1458 @enum IH264ENC_IntraCodingBias
1459 @brief These enumerations control the number of intra Mbs to be encoded
1460
1461*/
1462
1463typedef enum
1464{
1465 IH264ENC_INTRACODINGBIAS_NORMAL = 0 ,
1466 /**< Normal number of intra Mbs */
1467 IH264ENC_INTRACODINGBIAS_HIGH_SPEED = 12 ,
1468 /**< intra Mbs restricted for HIGH SPEED */
1469 IH264ENC_INTRACODINGBIAS_DEFAULT = IH264ENC_INTRACODINGBIAS_NORMAL ,
1470 /**< Default intra codign bias */
1471 IH264ENC_INTRACODINGBIAS_MAX
1472
1473} IH264ENC_IntraCodingBias;
1474
1475/**
1476
1477 @enum IH264ENC_InterBlockSize
1478 @brief These enumerations are defined for minimum Inter block size
1479
1480*/
1481
1482typedef enum
1483{
1484 IH264_BLOCKSIZE_16x16 = 0 , /**< 16x16 Block size */
1485 IH264_BLOCKSIZE_DEFAULT = IH264_BLOCKSIZE_16x16, /**< Default block size */
1486 IH264_BLOCKSIZE_8x8 = 1 , /**< 8x8 Block size */
1487 IH264_BLOCKSIZE_4x4 = 2 , /**< 4x4 Block size */
1488 IH264_BLOCKSIZE_MAX
1489
1490} IH264ENC_InterBlockSize;
1491
1492/**
1493
1494 @enum IH264ENC_BiasFactor
1495 @brief Encoder uses bias b/w two possible chices for lot of decisions.
1496 It is to control the mild/strong ness of the biasing
1497
1498*/
1499typedef enum
1500{
1501 IH264_BIASFACTOR_LOW = 0 ,
1502 /**< Low biasing */
1503 IH264_BIASFACTOR_MEDIUM = 1 ,
1504 /**< Normal/Med biasing */
1505 IH264_BIASFACTOR_NORMAL = IH264_BIASFACTOR_MEDIUM,
1506 /**< Normal/Med biasing */
1507 IH264_BIASFACTOR_DEFAULT = IH264_BIASFACTOR_MEDIUM,
1508 /**< Default :Normal/Med biasing*/
1509 IH264_BIASFACTOR_HIGH = 2 ,
1510 /**< High biasing */
1511 IH264_BIASFACTOR_MILD = 4 , /**< Mild biasing */
1512 IH264_BIASFACTOR_ADAPTIVE = 5 , /**< Adaptive biasing */
1513 IH264_BIASFACTOR_MAX
1514} IH264ENC_BiasFactor ;
1515
1516
1517/**
1518
1519 @enum IH264ENC_IntraRefreshMethods
1520 @brief Refresh method Type Identifier for H.264 Encoder
1521
1522*/
1523
1524typedef enum
1525{
1526 IH264_INTRAREFRESH_NONE = 0 , /**< Doesn't insert forcefully intra
1527 macro blocks */
1528 IH264_INTRAREFRESH_DEFAULT = IH264_INTRAREFRESH_NONE,
1529 /**< Default intra refresh is OFF */
1530 IH264_INTRAREFRESH_CYCLIC_MBS , /**< Insters intra macro blocks in a
1531 * cyclic fashion cyclic interval is
1532 * equal to intraRefreshRate
1533 */
1534 IH264_INTRAREFRESH_CYCLIC_SLICES , /**< Insters Intra Slices(Row based) in
1535 * a cyclic fashion:
1536 * cyclic interval is equal to
1537 * intraRefreshRate
1538 */
1539 IH264_INTRAREFRESH_RDOPT_MBS , /**< position of intra macro blocks is
1540 * intelligently chosen by encoder,
1541 * but the number of forcely coded
1542 * intra macro blocks in a frame is
1543 * gaurnteed to be equal to
1544 * totalMbsInFrame/intraRefreshRate
1545 */
1546 IH264_INTRAREFRESH_GDR , /**< Instead of a sudden Intra Refresh
1547 * of entire frame, the frame is refreshed
1548 * Gradualy over a duration (which is con-
1549 * figerable) of frames with refresh
1550 * happening by Intra coded rows scanning
1551 *from top to bottom of the scene/picture.
1552 */
1553 IH264_INTRAREFRESH_MAX
1554
1555} IH264ENC_IntraRefreshMethods ;
1556
1557/**
1558
1559 @enum IH264ENC_ChormaComponent
1560 @brief These enumerations control the selction of chroma component to perfom
1561 chroma intra estimation
1562
1563*/
1564typedef enum
1565{
1566 IH264_CHROMA_COMPONENT_CB_CR_BOTH = 0 , /**< BOth Cb and Cr component */
1567 IH264_CHROMA_COMPONENT_CR_ONLY = 1 , /**< Only Cr Component */
1568 IH264_CHROMA_COMPONENT_DEFAULT = IH264_CHROMA_COMPONENT_CR_ONLY,
1569 /**< Default is Only Cr Component */
1570 IH264_CHROMA_COMPONENT_MAX
1571
1572} IH264ENC_ChormaComponent;
1573
1574
1575/**
1576
1577 @enum IH264ENC_IntraCodingPreset
1578 @brief These enumerations control the type of intra coding
1579
1580*/
1581
1582typedef enum
1583{
1584 IH264_INTRACODING_DEFAULT = 0 , /**< Default intra coding params */
1585 IH264_INTRACODING_USERDEFINED = 1 , /**< User defined intra coding params */
1586 IH264_INTRACODING_EXISTING = 2 ,
1587 IH264_INTRACODING_HIGH_SPEED = 3 , /**< High Speed intra Coding Preset */
1588 IH264_INTRACODING_MAX
1589
1590} IH264ENC_IntraCodingPreset;
1591
1592/**
1593
1594 @enum IH264ENC_NALUnitType
1595 @brief These enumerations define the NALU type supported by H.264
1596
1597*/
1598typedef enum
1599{
1600 IH264_NALU_TYPE_UNSPECIFIED = 0 ,
1601 /**< Unspecified Slice Type */
1602 IH264_NALU_TYPE_SLICE = 1 ,
1603 /**< slice of a non-IDR picture */
1604 IH264_NALU_TYPE_SLICE_DP_A = 2 ,
1605 /**< Coded slice data partition A */
1606 IH264_NALU_TYPE_SLICE_DP_B = 3 ,
1607 /**< Coded slice data partition B */
1608 IH264_NALU_TYPE_SLICE_DP_C = 4 ,
1609 /**< Coded slice data partition C */
1610 IH264_NALU_TYPE_IDR_SLICE = 5 ,
1611 /**< slice of an IDR picture */
1612 IH264_NALU_TYPE_SEI = 6 ,
1613 /**< Supplemental enhancement information */
1614 IH264_NALU_TYPE_SPS = 7 ,
1615 /**< Sequence parameter set */
1616 IH264_NALU_TYPE_PPS = 8 ,
1617 /**< Picture parameter set */
1618 IH264_NALU_TYPE_AUD = 9 ,
1619 /**< Access unit delimiter */
1620 IH264_NALU_TYPE_EOSEQ = 10 ,
1621 /**< End of sequence */
1622 IH264_NALU_TYPE_EOSTREAM = 11 ,
1623 /**< End of stream */
1624 IH264_NALU_TYPE_FILLER = 12 ,
1625 /**< Filler data */
1626 IH264_NALU_TYPE_SPS_WITH_VUI = 13,
1627 /**< Sequence parameter set with VUI */
1628 IH264_NALU_TYPE_USER_DATA_UNREGD_SEI = 14,
1629 /**< User Data unregsitered SEI */
1630 IH264_NALU_TYPE_SSPS = 15,
1631 /**< Sub-Sequence Parameter Set for SVC */
1632 IH264_NALU_TYPE_CODED_SLICE_IN_SCALABLE_EXTN = 20
1633 /**< Coded Slice in Scalable Extn for SVC */
1634
1635} IH264ENC_NALUnitType;
1636
1637
1638/**
1639
1640 @enum IH264ENC_NALUControlPreset
1641 @brief These enumerations define the control mechanism for insertion of
1642 different NALU types at different point in video sequence
1643
1644*/
1645
1646typedef enum
1647{
1648 IH264_NALU_CONTROL_DEFAULT = 0 , /**< Default NALU insertion */
1649 IH264_NALU_CONTROL_USERDEFINED = 1 , /**< User defined NALU insertion */
1650 IH264_NALU_CONTROL_MAX
1651
1652} IH264ENC_NALUControlPreset;
1653
1654/**
1655
1656 @enum IH264ENC_SliceCodingPreset
1657 @brief These enumerations control the type of slice coding
1658
1659*/
1660
1661typedef enum
1662{
1663 IH264_SLICECODING_DEFAULT = 0 ,
1664 /**< Default slice coding params */
1665 IH264_SLICECODING_USERDEFINED = 1 ,
1666 /**< User defined slicecoding params */
1667 IH264_SLICECODING_EXISTING = 2 ,
1668 /**< Keep the slice coding params as existing */
1669 /**< This is useful because during control call */
1670 /**< if user don't want to chnage the sliceCodingParams */
1671 IH264_SLICECODING_MAX
1672
1673} IH264ENC_SliceCodingPreset;
1674
1675/**
1676
1677 @enum IH264ENC_SliceMode
1678 @brief These enumerations control the type of slice coding
1679
1680*/
1681
1682typedef enum
1683{
1684 IH264_SLICEMODE_NONE = 0 ,
1685 IH264_SLICEMODE_DEFAULT = IH264_SLICEMODE_NONE ,
1686 /**< Default slice coding mode is MB based */
1687 IH264_SLICEMODE_MBUNIT = 1 ,
1688 /**< Slices are controlled based upon number of Macroblocks */
1689 IH264_SLICEMODE_BYTES = 2 ,
1690 /**< Slices are controlled based upon number of bytes */
1691 IH264_SLICEMODE_OFFSET = 3 ,
1692 /**< Slices are controlled based upon user defined offset in
1693 * unit of Rows
1694 */
1695 IH264_SLICEMODE_MAX
1696
1697} IH264ENC_SliceMode;
1698
1699/**
1700
1701 @enum IH264ENC_StreamFormat
1702 @brief These enumerations control the type stream format
1703
1704*/
1705typedef enum
1706{
1707 IH264_BYTE_STREAM = 0,
1708 /**< bit-stream contains the start code identifier*/
1709 IH264_STREAM_FORMAT_DEFAULT = IH264_BYTE_STREAM ,
1710 /**< Default slice coding mode is byte-stream */
1711 IH264_NALU_STREAM = 1,
1712 /**< bit-stream doesn't contain the start code identifier */
1713 IH264_STREAM_FORMAT_MAX
1714}IH264ENC_StreamFormat;
1715
1716
1717/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
1718/**
1719 * @enum IH264ENC_LoopFilterPreset
1720 * @brief These enumerations control the type of slice coding
1721*/
1722
1723typedef enum
1724{
1725 IH264_LOOPFILTER_DEFAULT = 0 , /**< Default loop-filtering params */
1726 IH264_LOOPFILTER_USERDEFINED = 1 , /**< User defined loop-filtering params */
1727 IH264_LOOPFILTER_MAX
1728} IH264ENC_LoopFilterPreset;
1729
1730/**
1731
1732 @enum IH264ENC_LoopFilterDisableIDC
1733 @brief Control Parameter to disable loop filter at different places
1734
1735*/
1736typedef enum
1737{
1738 IH264_DISABLE_FILTER_NONE = 0,
1739 /**< Enable filtering of all the edges */
1740 IH264_DISABLE_FILTER_DEFAULT = IH264_DISABLE_FILTER_NONE,
1741 /**< Default is Loop filter enabled */
1742 IH264_DISABLE_FILTER_ALL_EDGES,
1743 /**< Disable filtering of all the edge */
1744 IH264_DISABLE_FILTER_SLICE_EDGES,
1745 /**< Disable filtering of slice edges */
1746 IH264_DISABLE_FILTER_MAX
1747} IH264ENC_LoopFilterDisableIDC ;
1748
1749/**
1750
1751 @enum IH264ENC_SliceGroupMapType
1752 @brief Slice group map type defined by H.264 standard
1753
1754*/
1755
1756typedef enum
1757{
1758 IH264_INTERLEAVED_SLICE_GRP = 0 ,
1759 /**< 0 : Interleaved Slice Group */
1760 IH264_DISPERSED_SLICE_GRP = 1 ,
1761 /**< 1 : Dispersed Slice Group */
1762 IH264_FOREGRND_WITH_LEFTOVER_SLICE_GRP = 2 ,
1763 /**< 2 : ForeGround with Left Over */
1764 IH264_BOX_OUT_SLICE_GRP = 3 ,
1765 /**< 3 : Box Out */
1766 IH264_RASTER_SCAN_SLICE_GRP = 4 ,
1767 /**< 4 : Raster Scan */
1768 IH264_SLICE_GRP_MAP_DEFAULT = IH264_RASTER_SCAN_SLICE_GRP,
1769 /**< Default*/
1770 IH264_WIPE_SLICE_GRP = 5 ,
1771 /**< 5 : Wipe slice group */
1772 IH264_EXPLICIT_SLICE_GRP = 6
1773 /**< 6 : Explicit Slice gropup map */
1774} IH264ENC_SliceGroupMapType ;
1775
1776/**
1777
1778 @enum IH264ENC_SliceGroupChangeDirection
1779 @brief Different Scan /rotation oreder
1780
1781*/
1782
1783typedef enum
1784{
1785 IH264_RASTER_SCAN = 0 ,
1786 /**< 0 : Raster scan order */
1787 IH264_CLOCKWISE = 0 ,
1788 /**< 0 : Clockwise (used for BOX OUT FMO Params)*/
1789 IH264_RIGHT = 0 ,
1790 /**< 0 : RIGHT (Used for Wipe FMO type) */
1791 IH264ENC_SLICEGROUP_CHANGE_DIRECTION_DEFAULT = IH264_RASTER_SCAN,
1792 /**< Default */
1793 IH264_REVERSE_RASTER_SCAN = 1 ,
1794 /**< 1 : Reverse Raster Scan Order */
1795 IH264_COUNTER_CLOCKWISE = 1 ,
1796 /**< 1 : Counter Clockwise (used for BOX OUT
1797 * FMO Params)
1798 */
1799 IH264_LEFT = 1
1800 /**< 1 : LEFT (Used for Wipe FMO type) */
1801} IH264ENC_SliceGroupChangeDirection ;
1802
1803/**
1804
1805 @enum IH264ENC_FMOCodingPreset
1806 @brief Preset to define FMO coding type
1807
1808*/
1809
1810typedef enum
1811{
1812 IH264_FMOCODING_NONE = 0 , /**< 0 : NO FMO */
1813 IH264_FMOCODING_DEFAULT = IH264_FMOCODING_NONE, /**< 0 : NO FMO */
1814 IH264_FMOCODING_USERDEFINED = 1 /**< 1 : User defined FMO parameters */
1815
1816} IH264ENC_FMOCodingPreset ;
1817
1818
1819/**
1820
1821 @enum IH264ENC_VUICodingPreset
1822 @brief Defines the Preset for VUI coding
1823
1824*/
1825
1826typedef enum
1827{
1828 IH264_VUICODING_DEFAULT = 0, /**< Default VUI Parameters. Note that
1829 * Enable/Disable of VUI is via
1830 * nalUnitControlParams
1831 */
1832 IH264_VUICODING_USERDEFINED = 1, /**< 1 : User defined VUI parameters*/
1833 IH264_VUICODING_MAX /**< Max VUI Coding enum */
1834
1835} IH264ENC_VUICodingPreset ;
1836
1837
1838/**
1839
1840 @enum IH264ENC_VideoFormat
1841 @brief Defines different video formats
1842
1843*/
1844typedef enum
1845{
1846 IH264ENC_VIDEOFORMAT_COMPONENT, /**< component video format */
1847 IH264ENC_VIDEOFORMAT_PAL, /**< PAL video format */
1848 IH264ENC_VIDEOFORMAT_NTSC, /**< NTSC video format */
1849 IH264ENC_VIDEOFORMAT_SECAM, /**< SECAM video format */
1850 IH264ENC_VIDEOFORMAT_MAC, /**< MAC video format */
1851 IH264ENC_VIDEOFORMAT_UNSPECIFIED /**< Unspecified video format*/
1852} IH264ENC_VideoFormat ;
1853
1854/**
1855
1856 @enum IH264ENC_StereoInfoPreset
1857 @brief Defines the Preset for Stereo Video Info coding*/
1858
1859typedef enum
1860{
1861 IH264_STEREOINFO_DISABLE = 0, /* StereoVideoCoding is disable */
1862 IH264_STEREOINFO_ENABLE_DEFAULT = 1, /* Default Stereo Video Info
1863 Parameters enabled. */
1864 IH264_STEREOINFO_ENABLE_USERDEFINED = 2, /* User defined Stereo Video Info
1865 parameters enabled */
1866 IH264_STEREOINFO_MAX /* Max Stereo Video Info enum */
1867
1868} IH264ENC_StereoInfoPreset ;
1869
1870/**
1871
1872 @enum IH264ENC_FramePackingPreset
1873 @brief Defines the Preset for Frame packing SEI coding*/
1874
1875typedef enum
1876{
1877 IH264_FRAMEPACK_SEI_DISABLE = 0, /* Frame packing SEI is disable */
1878 IH264_FRAMEPACK_SEI_ENABLE_DEFAULT = 1, /* Default Frame packing SEI
1879 Parameters enabled. */
1880 IH264_FRAMEPACK_SEI_USERDEFINED = 2, /* User defined SFrame packing
1881 SEIparameters enabled */
1882 IH264_FRAMEPACK_SEI_MAX /* Max Stereo Video Info enum */
1883
1884} IH264ENC_FramePackingPreset ;
1885
1886/**
1887
1888 @enum IH264ENC_FramePackingType
1889 @brief Defines the type of packing arrangement for
1890 Frame packing SEI coding
1891*/
1892
1893typedef enum
1894{
1895 IH264_FRAMEPACK_CHECKERBOARD = 0,
1896 IH264_FRAMEPACK_COLUMN_INTERLEAVING = 1,
1897 IH264_FRAMEPACK_ROW_INTERLEAVING = 2,
1898 IH264_FRAMEPACK_SIDE_BY_SIDE = 3,
1899 IH264_FRAMEPACK_TOP_BOTTOM = 4,
1900 IH264_FRAMEPACK_TYPE_DEFAULT = IH264_FRAMEPACK_SIDE_BY_SIDE,
1901 IH264_FRAMEPACK_TYPE_MAX
1902
1903} IH264ENC_FramePackingType ;
1904
1905/**
1906
1907 @enum IH264ENC_AspectRatioIdc
1908 @brief Defines aspect ratio IDs
1909
1910*/
1911typedef enum
1912{
1913 IH264ENC_ASPECTRATIO_UNSPECIFIED, /**< Unspecified aspect ratio */
1914 IH264ENC_ASPECTRATIO_SQUARE , /**< 1:1 (square) aspect ratio */
1915 IH264ENC_ASPECTRATIO_12_11 , /**< 12:11 aspect ratio */
1916 IH264ENC_ASPECTRATIO_10_11 , /**< 10:11 aspect ratio */
1917 IH264ENC_ASPECTRATIO_16_11 , /**< 16:11 aspect ratio */
1918 IH264ENC_ASPECTRATIO_40_33 , /**< 40:33 aspect ratio */
1919 IH264ENC_ASPECTRATIO_24_11 , /**< 24:11 aspect ratio */
1920 IH264ENC_ASPECTRATIO_20_11 , /**< 20:11 aspect ratio */
1921 IH264ENC_ASPECTRATIO_32_11 , /**< 32:11 aspect ratio */
1922 IH264ENC_ASPECTRATIO_80_33 , /**< 80:33 aspect ratio */
1923 IH264ENC_ASPECTRATIO_18_11 , /**< 18:11 aspect ratio */
1924 IH264ENC_ASPECTRATIO_15_15 , /**< 15:15 aspect ratio */
1925 IH264ENC_ASPECTRATIO_64_33 , /**< 64:33 aspect ratio */
1926 IH264ENC_ASPECTRATIO_160_99 , /**< 160:99 aspect ratio */
1927 IH264ENC_ASPECTRATIO_4_3 , /**< 4:3 aspect ratio */
1928 IH264ENC_ASPECTRATIO_3_2 , /**< 3:2 aspect ratio */
1929 IH264ENC_ASPECTRATIO_2_1 , /**< 2:1 aspect ratio */
1930 IH264ENC_ASPECTRATIO_EXTENDED = 255 /**< Extended aspect ratio */
1931
1932} IH264ENC_AspectRatioIdc ;
1933
1934/**
1935
1936 @enum IH264ENC_EntropyCodingMode
1937 @brief Defines the different entropy code mode
1938
1939*/
1940typedef enum
1941{
1942 IH264_ENTROPYCODING_CAVLC = 0 , /**< CAVLC coding
1943 type
1944 */
1945 IH264_ENTROPYCODING_DEFAULT = IH264_ENTROPYCODING_CAVLC , /**< Default is
1946 CAVLC coding type
1947 */
1948 IH264_ENTROPYCODING_CABAC = 1 , /**< CABAC coding
1949 type
1950 */
1951 IH264_ENTROPYCODING_MAX
1952} IH264ENC_EntropyCodingMode ;
1953
1954/**
1955
1956 @enum IH264ENC_TransformBlockSize
1957 In H264 Intra macro block's transform size depends upon the Intra mode,
1958 so this applies to inter macroblocks only
1959
1960*/
1961typedef enum
1962{
1963 IH264_TRANSFORM_4x4 = 0 , /**< Transform blocks
1964 size is 4x4 */
1965 IH264_TRANSFORM_8x8 = 1 , /**< Transform blocks
1966 * size is 8x8 :
1967 * Valid for only
1968 * High Profile
1969 */
1970 IH264_TRANSFORM_ADAPTIVE = 2 , /**< Adaptive transform
1971 * block size :
1972 * encoder decides
1973 * as per content
1974 */
1975 IH264_TRANSFORM_DEFAULT = IH264_TRANSFORM_ADAPTIVE ,/**< Default is adaptive
1976 * based upon content
1977 */
1978 IH264_TRANSFORM_MAX
1979
1980} IH264ENC_TransformBlockSize ;
1981
1982
1983
1984/**
1985
1986 @enum IH264ENC_GOPStructure
1987 @brief
1988 When B frames are used (InterFrameInterval > 1) then the arrangement of
1989 frames can be different
1990
1991 GOP structure in display order as indicated below
1992 If contentType = Frame
1993 IH264ENC_GOPSTRUCTURE_NONUNIFORM : IBBPBBP. .
1994 IH264ENC_GOPSTRUCTURE_UNIFORM : BBIBBPBB. .
1995 If contentType = Field
1996 IH264ENC_GOPSTRUCTURE_NONUNIFORM : IPBBBBPBBBB
1997 IH264ENC_GOPSTRUCTURE_UNIFORM : BBBBIPBBBBPPBBBB
1998
1999*/
2000
2001typedef enum
2002{
2003 IH264ENC_GOPSTRUCTURE_NONUNIFORM = 0 ,
2004 /**< Open Gop structure : IBBPBBP */
2005 IH264ENC_GOPSTRUCTURE_DEFAULT = IH264ENC_GOPSTRUCTURE_NONUNIFORM ,
2006 /**< Default is open gop structure */
2007 IH264ENC_GOPSTRUCTURE_UNIFORM = 1 ,
2008 /**< Close Gop structure : BBIBBPBB*/
2009 IH264ENC_GOPSTRUCTURE_MAX
2010
2011} IH264ENC_GOPStructure ;
2012
2013
2014/**
2015
2016 @enum IH264ENC_BiasFactor
2017 @brief Encoder uses bias b/w two possible chices for lot of decisions.
2018 It is to control the mild/strong ness of the biasing
2019
2020*/
2021typedef enum
2022{
2023 IH264_INTERLACE_PICAFF = 0 ,
2024 /**< PicAFF type of interlace coding */
2025 IH264_INTERLACE_MBAFF = 1 ,
2026 /**< MBAFF type of interlace coding */
2027 IH264_INTERLACE_FIELDONLY = 2 ,
2028 /**< Field only coding with fixed partiy scheme */
2029 IH264_INTERLACE_FIELDONLY_MRF = IH264_INTERLACE_FIELDONLY ,
2030 /**< Use Most recent field for refernece*/
2031 IH264_INTERLACE_FIELDONLY_ARF = 3 ,
2032 /**< Field only coding where codec decides the partiy of of the field to
2033 * be used based upon content (adaptive) */
2034 IH264_INTERLACE_DEFAULT = IH264_INTERLACE_FIELDONLY_ARF ,
2035 /**< Default : adaptive partiy for reference*/
2036 IH264_INTERLACE_FIELDONLY_SPF = 4,
2037 /**< Use same parity field for refernece */
2038
2039 IH264_INTERLACE_MAX
2040} IH264ENC_InterlaceCodingType ;
2041/**
2042 @enum IH264ENC_NumTemporalLayer
2043 @brief Define different Temporal Layers
2044*/
2045typedef enum
2046{
2047 /* Only Base Layer */
2048 IH264_TEMPORAL_LAYERS_1 = 1 ,
2049
2050 /* Base Layer + Temporal Layer */
2051 IH264_TEMPORAL_LAYERS_2 = 2 ,
2052
2053 /* Base Layer + 2Temporal Layers */
2054 IH264_TEMPORAL_LAYERS_3 = 3 ,
2055
2056 /* Base Layer + 3Temporal Layers */
2057 IH264_TEMPORAL_LAYERS_4 = 4 ,
2058
2059 /* Maximum Temporal Layer Supported*/
2060 IH264_TEMPORAL_LAYERS_MAX = IH264_TEMPORAL_LAYERS_4
2061
2062} IH264ENC_NumTemporalLayer ;
2063
2064/**
2065 @enum IH264ENC_RoiType
2066 @brief Defines the different ROI types
2067*/
2068typedef enum {
2069 IH264_FACE_OBJECT = 0,
2070 /**< Face type of ROI object */
2071 IH264_BACKGROUND_OBJECT = 1,
2072 /**< Background type of ROI object */
2073 IH264_FOREGROUND_OBJECT = 2,
2074 /**< Foreground type of ROI object */
2075 IH264_DEFAULT_OBJECT = 3,
2076 /**< Default type of ROI object */
2077 IH264_PRIVACY_MASK = 4
2078 /**< Privacy mask type of ROI object */
2079} IH264ENC_RoiType;
2080
2081/**
2082 @enum IH264ENC_SvcExtensionFlag
2083 @brief Define SVC Extension Flag
2084*/
2085typedef enum
2086{
2087 /*Svc Extension Flag Disabled*/
2088 IH264_SVC_EXTENSION_FLAG_DISABLE = 0 ,
2089 /*Svc Extension Flag Enabled*/
2090 IH264_SVC_EXTENSION_FLAG_ENABLE = 1 ,
2091 /*Svc Extension Flag Enabled with EC Flexibility*/
2092 IH264_SVC_EXTENSION_FLAG_ENABLE_WITH_EC_FLEXIBILITY = 2
2093
2094} IH264ENC_SvcExtensionFlag ;
2095
2096/**
2097 @enum IH264ENC_ReferencePicMarking
2098 @brief Define Reference Picture Marking
2099*/
2100typedef enum
2101{
2102 /* ReferencePicMarking is Short-term picutre(Sliding Window) */
2103 IH264_SHORT_TERM_PICTURE = 0 ,
2104 /* ReferencePicMarking is Long-term picutre(MMCO Commands) */
2105 IH264_LONG_TERM_PICTURE = 1
2106
2107} IH264ENC_ReferencePicMarking ;
2108/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
2109/* Definition of all the structures define by this interafce */
2110/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
2111
2112/**
2113
2114 @struct IH264ENC_RateControlParams
2115 @brief This structure contains all the parameters which controls Rate
2116 Control behavior
2117
2118 @param rateControlParamsPreset :
2119 regarded @ IH264ENC_DynamicParams::rateControlParams
2120 This Preset controls the USER_DEFINED vs DEFAULT mode. if User is
2121 not aware about following fields, it should be set as
2122 IH264_RATECONTROLPARAMS_DEFAULT
2123 @param scalingMatrixPreset :
2124 ignored @ IH264ENC_DynamicParams::rateControlParams
2125 This Preset controls the USER_DEFINED vs DEFAULT mode. if User is
2126 not aware about following fields, it should be set as
2127 IH264_SCALINGMATRIX_DEFAULT
2128
2129 @param rcAlgo : ignored @ IH264ENC_DynamicParams::rateControlParams
2130 This defines the rate control algorithm to be used. Only useful
2131 if IVIDENC2::rateControlPreset is set as IVIDEO_USER_DEFINED
2132
2133 @param qpI : regarded @ IH264ENC_DynamicParams::rateControlParams
2134 Initial Quantization Parameter for I/IDR frames.
2135 Valid Range is [-1, 51]
2136 -1 : Auto Initialization else other wise Initial QP.
2137 when rateControlPreset = IVIDEO_NONE, this quantization parameter is
2138 used by the whole video frame/field
2139
2140 @param qpMaxI : regarded @ IH264ENC_DynamicParams::rateControlParams
2141 Maximum Quantization Parameter for I/IDR frame(s). Range [0 , 51].
2142 Useful to control a minimum quality level
2143
2144 @param qpMinI : regarded @ IH264ENC_DynamicParams::rateControlParams
2145 Minimum Quantization Parameter for I/IDR frame(s). Range [0 , 51].
2146 Useful to control a maximum bit-rate level
2147
2148 @param qpP : regarded @ IH264ENC_DynamicParams::rateControlParams
2149 Initial Quantization Parameter for P frames. Valid Range is [-1, 51]
2150 -1 : Auto Initialization else other wise Initial QP.
2151 when rateControlPreset = IVIDEO_NONE, this quantization parameter is
2152 used by the whole video frame/field
2153
2154 @param qpMaxP : regarded @ IH264ENC_DynamicParams::rateControlParams
2155 Maximum Quantization Parameter for inter frame(s). Range [0 , 51].
2156 Useful to control a minimum quality level
2157
2158 @param qpMinP : regarded @ IH264ENC_DynamicParams::rateControlParams
2159 Minimum Quantization Parameter for inter frame(s). Range [0 , 51].
2160 Useful to control a maximum bit-rate level
2161
2162 @param qpOffsetB : regarded @ IH264ENC_DynamicParams::rateControlParams
2163 Offset of B frames Quantization Parameter from P frames.
2164 Valid Range is [-1, 51]
2165 -1 : Auto Initialization else other wise user provided offset
2166 if after adding the qpOffsetB into qp of P frame it exceeds 51 then
2167 it is clipped to 51
2168 when rateControlPreset = IVIDEO_NONE, this offset parameter is
2169 used by the whole video frame/field
2170
2171 @param qpMaxB : regarded @ IH264ENC_DynamicParams::rateControlParams
2172 Maximum Quantization Parameter for B frame(s). Range [0 , 51].
2173 Useful to control a minimum quality level
2174
2175 @param qpMinB : regarded @ IH264ENC_DynamicParams::rateControlParams
2176 Minimum Quantization Parameter for B frame(s). Range [0 , 51].
2177 Useful to control a maximum bit-rate level
2178
2179 @param allowFrameSkip : regarded @ IH264ENC_DynamicParams::rateControlParams
2180 Controls Frame Skip.
2181 non-zero means frames can be skipped to achieve target bit-rate
2182 zero means frame can never be skipped
2183
2184 @param removeExpensiveCoeff :
2185 regarded @ IH264ENC_DynamicParams::rateControlParams
2186 Flag to Remove high frequency expensive coeffecients
2187
2188 @param chromaQPIndexOffset :
2189 ignored @ IH264ENC_DynamicParams::rateControlParams
2190 Specifies offset to be added to luma QP for addressing QPC values
2191 table for chroma components.
2192 Valid value is between -12 and 12, (inclusive)
2193
2194 @param IPQualityFactor : ignored @ IH264ENC_DynamicParams::rateControlParams
2195 This provides configurality to control I frame Quality wrt to P frame.
2196 Higher Quality factor means I frame quality is given higher
2197 improtance compared to P frame.
2198 Refer IH264ENC_FrameQualityFactor for possible values
2199
2200 @param initialBufferLevel :
2201 ignored @ IH264ENC_DynamicParams::rateControlParams
2202 Initial Buffer level for HRD compliance. It informs that Hypothtical
2203 decoder can start after how much time. The value taken is the
2204 obsolute value of the HRD buffer size For example if user want
2205 Hypothtical decoder to start taking out data from HRD buffer after
2206 half second then it should set initialBufferLevel = half of the
2207 HRD buffer size that is programmed.
2208
2209 @param HRDBufferSize : regarded @ IH264ENC_DynamicParams::rateControlParams
2210 Hypothetical Reference Decoder Buffer Size. This size controls the
2211 frame skip logic of the encoder. for low delay applications this
2212 size should be small. Unit of this variable is bits
2213
2214 @param minPicSizeRatio : regarded @ IH264ENC_DynamicParams::rateControlParams
2215 This ratio is used to compute minimum picture size
2216 in the following manner,
2217 minPicSize = averagePicSize >> minPicSizeRatio
2218 allowed values 1 to 4, Setting this to 0 will enable
2219 encoder chosen ratio.
2220 Note that this is guided value to rate control to
2221 determine min picture size and encoder may not
2222 strictly follow this
2223 @param maxPicSizeRatio : regarded @ IH264ENC_DynamicParams::rateControlParams
2224 To determines ratio for max picture size
2225 This ratio is used to compute maximum picture size
2226 in the following manner,
2227 maxPicSize = averagePicSize * maxPicSizeRatio
2228 allowed values 2 to 30.Setting this to 0 and 1
2229 will enable encoder chosen ratio.
2230 Note that this is guided value to rate control
2231 to determine max picture size and encoder may not
2232 strictly follow this.
2233
2234 @param enablePRC : regarded @ IH264ENC_DynamicParams::rateControlParams
2235 This flag is used to control allowing PRC in the
2236 frame
2237
2238 @param enablePartialFrameSkip : regarded @ IH264ENC_DynamicParams::
2239 rateControlParams
2240 This flag is used to control allowing partial frame
2241 skip in the frame
2242 @param reserved : 16 bit word, kept to not change the foot print
2243 @param VBRDuration : During over which statistics during interval are
2244 collected to switch bit-rate states.Increasing this
2245 value will make VBR wait for longer time before
2246 switching bit-rate state
2247 @param VBRsensitivity : Specifies the target bitrate used by rate control in
2248 high complexity state.
2249 @param skipDistributionWindowLength : Number of frames over which the skip
2250 frames can be distributed
2251 @param numSkipInDistributionWindow : Number of skips allowed within the
2252 distribution window
2253 @param reservedRC
2254 Some part is kept reserved to add parameters later without
2255 changing the foot print of interface memory
2256
2257 @todo More parameters to be added : delay (VBV), PRC related etc..
2258
2259
2260*/
2261
2262typedef struct IH264ENC_RateControlParams {
2263 XDAS_Int8 rateControlParamsPreset ;
2264 XDAS_Int8 scalingMatrixPreset ;
2265 XDAS_Int8 rcAlgo ;
2266 XDAS_Int8 qpI ;
2267 XDAS_Int8 qpMaxI ;
2268 XDAS_Int8 qpMinI ;
2269 XDAS_Int8 qpP ;
2270 XDAS_Int8 qpMaxP ;
2271 XDAS_Int8 qpMinP ;
2272 XDAS_Int8 qpOffsetB ;
2273 XDAS_Int8 qpMaxB ;
2274 XDAS_Int8 qpMinB ;
2275 XDAS_Int8 allowFrameSkip ;
2276 XDAS_Int8 removeExpensiveCoeff ;
2277 XDAS_Int8 chromaQPIndexOffset ;
2278 XDAS_Int8 IPQualityFactor ;
2279 XDAS_Int32 initialBufferLevel ;
2280 XDAS_Int32 HRDBufferSize ;
2281 XDAS_Int16 minPicSizeRatioI ;
2282 XDAS_Int16 maxPicSizeRatioI ;
2283 XDAS_Int16 minPicSizeRatioP ;
2284 XDAS_Int16 maxPicSizeRatioP ;
2285 XDAS_Int16 minPicSizeRatioB ;
2286 XDAS_Int16 maxPicSizeRatioB ;
2287 XDAS_Int8 enablePRC ;
2288 XDAS_Int8 enablePartialFrameSkip ;
2289 XDAS_Int8 discardSavedBits ;
2290 XDAS_Int8 reserved ;
2291 XDAS_Int32 VBRDuration ;
2292 XDAS_Int8 VBRsensitivity ;
2293 XDAS_Int16 skipDistributionWindowLength;
2294 XDAS_Int16 numSkipInDistributionWindow;
2295 XDAS_Int8 enableHRDComplianceMode ;
2296 XDAS_Int32 frameSkipThMulQ5 ;
2297 XDAS_Int32 vbvUseLevelThQ5 ;
2298 XDAS_Int32 reservedRC[3] ;
2299
2300} IH264ENC_RateControlParams ;
2301
2302/**
2303 @struct ROI_Interface
2304 @brief This structure defines the ROI input parameters required by Encoder.
2305 @param listROI:
2306 List of ROIs with their x and y co-ordinates
2307 @param roiType:
2308 Type of each ROI
2309 @param numOfROI:
2310 Number of ROIs passed to codec
2311 @param roiPriority:
2312 Priority of each ROI
2313*/
2314typedef struct IH264ENC_RoiInput{
2315 XDM_Rect listROI[IH264ENC_MAX_ROI];
2316 XDAS_Int8 roiType[IH264ENC_MAX_ROI];
2317 XDAS_Int8 numOfROI;
2318 XDAS_Int32 roiPriority[IH264ENC_MAX_ROI];
2319}IH264ENC_RoiInput;
2320
2321/**
2322
2323 @struct IH264ENC_InterCodingParams
2324 @brief This structure contains all the parameters which controls Inter MBs
2325 coding behavior
2326 @param interCodingPreset
2327 This Preset controls the USER_DEFINED vs DEFAULT mode. if User is
2328 not aware about following fields, it should be set as
2329 IH264_INTERCODING_DEFAULT
2330 @param searchRangeHorP :regarded @ IH264ENC_DynamicParams::interCodingParams
2331 Horizontal Search Range for P frames
2332 @param searchRangeVerP :regarded @ IH264ENC_DynamicParams::interCodingParams
2333 Vertical Search Range for P frames
2334 @param searchRangeHorB :regarded @ IH264ENC_DynamicParams::interCodingParams
2335 Horizontal Search Range for B frames
2336 @param searchRangeVerB :regarded @ IH264ENC_DynamicParams::interCodingParams
2337 Vertical Search Range for B frames
2338 @param interCodingBias :regarded @ IH264ENC_DynamicParams::interCodingParams
2339 Bias Control for having a macro block coded as inter vs Intra
2340 Refer IH264ENC_BiasFactor for possible values
2341 @param skipMVCodingBias :regarded @ IH264ENC_DynamicParams::interCodingParams
2342 Bias Control for having a macro block use skip MV vs regular MV
2343 refer IH264ENC_BiasFactor for possible values
2344 @param minBlockSizeP : regarded @ IH264ENC_DynamicParams::interCodingParams
2345 minimum block size for P frames. Refer IH264ENC_InterBlockSize
2346 enumeration to see the valid values
2347 @param minBlockSizeB : regarded @ IH264ENC_DynamicParams::interCodingParams
2348 minimum block size for B frames. Refer IH264ENC_InterBlockSize
2349 enumeration to see the valid values
2350
2351*/
2352
2353typedef struct IH264ENC_InterCodingParams {
2354 XDAS_Int8 interCodingPreset ;
2355 XDAS_Int16 searchRangeHorP ;
2356 XDAS_Int16 searchRangeVerP ;
2357 XDAS_Int16 searchRangeHorB ;
2358 XDAS_Int16 searchRangeVerB ;
2359 XDAS_Int8 interCodingBias ;
2360 XDAS_Int8 skipMVCodingBias ;
2361 XDAS_Int8 minBlockSizeP ;
2362 XDAS_Int8 minBlockSizeB ;
2363 XDAS_Int8 meAlgoMode ;
2364
2365} IH264ENC_InterCodingParams ;
2366
2367/**
2368
2369 @struct IH264ENC_IntraCodingParams
2370 @brief This structure contains all the parameters which controls Intra
2371 encoding
2372
2373 @param intraCodingPreset
2374 This Preset controls the USER_DEFINED vs DEFAULT mode. if User is
2375 not aware about following fields, it should be set as
2376 INTRA_CODING_DEFAULT other wise INTRA_CODING_USER_DEFINED
2377 @param lumaIntra4x4Enable
2378 This parameter controls the Luma Intra4x4 encoding in video encoder. A
2379 bit-field is given for each Luma intra4x4 mode as shown below. This
2380 field is H.264 specific HOR_UP|VERT_LEFT|HOR_DOWN|
2381 VERT_RIGHT|DIAG_DOWN_RIGHT|DIAG_DOWN_LEFT|DC|HOR|VER
2382 Set/ reset particular bit to enable/disable that mode
2383 (0=disable, 1=enable). DC (bit-2)is don't care
2384 @param lumaIntra8x8Enable
2385 This parameter controls the Luma Intra8x8 encoding in video encoder. A
2386 bit-field is given for each Luma intra8x8 mode as shown below.
2387 HOR_UP|VERT_LEFT|HOR_DOWN|VERT_RIGHT|DIAG_DOWN_RIGHT|DIAG_DOWN_LEFT|
2388 DC|HOR|VER Set/ reset particular bit to enable/disable that
2389 mode (0=disable, 1=enable) DC (bit-2)is don't care
2390 Example : 139(decimal) ==> 0x8B =>> 010001011 (bits) ==>
2391 HOR, VER, VERT_LEFT
2392 are enabled and DC is always enabled
2393 @param lumaIntra16x16Enable
2394 This parameter controls the Luma Intra16x16 encoding in video encoder.
2395 A bit-field is given for each Luma intra16x16 mode as shown below.
2396 PLANE|DC|HOR|VER
2397 Set/ reset particular bit to enable/disable that
2398 mode (0=disable, 1=enable). DC (bit-2)is don't care
2399 @param chromaIntra8x8Enable
2400 This parameter controls the chroma Intra8x8 encoding in video encoder.
2401 A bit-field is given for each chroma intra8x8 mode as shown below.
2402 PLANE|VER|HOR|DC
2403 Set/ reset particular bit to enable/disable
2404 that mode (0=disable, 1=enable) DC (bit-0)is don't care
2405 @param chromaComponentEnable
2406 This parameter controls the chroma Intra prediction search. User
2407 can choose to perfom chroma intra estimation for both Cb and Cr
2408 samples or only on Cr samples. For more details
2409 refer IH264ENC_ChormaComponent
2410 @param intraRefreshMethod
2411 Mechanism to do intra Refresh, see IH264ENC_IntraRefreshMethods
2412 for valid values
2413 @param intraRefreshRate
2414 Rate at which intra Refresh is done, This rate is specified as
2415 One IntraMB per # MBs. For example if rate is 20 it means that
2416 there has to be one intra MB(s) per 20 Mbs.
2417 When intraRefreshMethod == IH264_INTRAREFRESH_GDR, this parameter
2418 is treated/interpreted number of rows to be intra refreshed per
2419 frame.
2420
2421 @param gdrOverlapRowsBtwFrames
2422 Defines the Overlap of the Intra Refresh Region between successive
2423 frame in case the intraRefreshMethod == IH264_INTRAREFRESH_GDR or
2424 else treated to be don't care.
2425 Again gdrOverlapRowsBtwFrames should be less than intraRefreshRate.
2426
2427 @param constrainedIntraPredEnable
2428 Controls the intra macroblock coding in P slices.
2429 Valid values are [0,non-zero]
2430
2431*/
2432
2433typedef struct IH264ENC_IntraCodingParams {
2434 XDAS_Int8 intraCodingPreset ;
2435 XDAS_Int16 lumaIntra4x4Enable ;
2436 XDAS_Int16 lumaIntra8x8Enable ;
2437 XDAS_Int8 lumaIntra16x16Enable ;
2438 XDAS_Int8 chromaIntra8x8Enable ;
2439 XDAS_Int8 chromaComponentEnable ;
2440 XDAS_Int8 intraRefreshMethod ;
2441 XDAS_Int16 intraRefreshRate ;
2442 XDAS_Int16 gdrOverlapRowsBtwFrames ;
2443 XDAS_Int16 constrainedIntraPredEnable ;
2444 XDAS_Int8 intraCodingBias ;
2445} IH264ENC_IntraCodingParams ;
2446
2447
2448/**
2449
2450 @struct IH264ENC_NALUControlParams
2451 @brief This structure contains all the parameters which define the
2452 control mechanism for insertion of different NALU types at
2453 different point in video sequence
2454
2455 @param naluControlPreset
2456 This Preset controls the USER_DEFINED vs DEFAULT mode. if User is
2457 not aware about following fields, it should be set as
2458 IH264_NALU_CONTROL_DEFAULT other wise IH264_NALU_CONTROL_USERDEFINED
2459 @param naluPresentMaskStartOfSequence
2460 This parameter controls the insertion of different NALU at Start of
2461 Sequence
2462 A bit-field is given for each NALU type as shown below. This field is
2463\n ---------------------------------------------------------------------\n
2464\n 7| 6| 5| 4| 3| 2| 1| 0 \n
2465\n SPS|SEI|IDR_SLICE|SLICE_DP_C|SLICE_DP_B|SLICE_DP_A|SLICE|UNSPECIFIED \n
2466\n ---------------------------------------------------------------------\n
2467\n----------------------------------------------
2468\n 14| 13| 12| 11| 10| 9| 8|
2469\n UD_SEI|SPS_VUI|FILLER|EOSTREAM|EOSEQ|AUD|PPS|
2470\n----------------------------------------------
2471 Set/ reset particular bit to enable/disable that insertion of that
2472 NALU (0=disable, 1=enable)
2473 UNSPECIFIED (bit-0), SLICE_DP_A(bit-2), SLICE_DP_B(bit-3),
2474 SLICE_DP_C(bit-4), IDR_SLICE(bit-5), EOSEQ (bit-10) and
2475 EOSTREAM (bit-11) are don't care and assumed to be <b> zero </b>.
2476 SPS (bit-7), PPS(bit-8) are don't care and assumed to be <b> one </b>.
2477 @param naluPresentMaskIDRPicture
2478 This parameter controls the insertion of different NALU at IDR picture
2479 A bit-field is given for each NALU type as shown below. This field is
2480\n ---------------------------------------------------------------------\n
2481\n 7| 6| 5| 4| 3| 2| 1| 0 \n
2482\n SPS|SEI|IDR_SLICE|SLICE_DP_C|SLICE_DP_B|SLICE_DP_A|SLICE|UNSPECIFIED \n
2483\n ---------------------------------------------------------------------\n
2484\n----------------------------------------------
2485\n 14| 13| 12| 11| 10| 9| 8|
2486\n UD_SEI|SPS_VUI|FILLER|EOSTREAM|EOSEQ|AUD|PPS|
2487\n----------------------------------------------
2488 Set/ reset particular bit to enable/disable that insertion of that
2489 NALU (0=disable, 1=enable)
2490 UNSPECIFIED (bit-0), SLICE_DP_A(bit-2), SLICE_DP_B(bit-3),
2491 SLICE_DP_C(bit-4), IDR_SLICE(bit-5), EOSEQ (bit-10) and
2492 EOSTREAM (bit-11) are don't care and assumed to be <b> zero </b>.
2493 @param naluPresentMaskIntraPicture
2494 This parameter controls the insertion of different NALU at I picture
2495 A bit-field is given for each NALU type as shown below. This field is
2496\n ---------------------------------------------------------------------\n
2497\n 7| 6| 5| 4| 3| 2| 1| 0 \n
2498\n SPS|SEI|IDR_SLICE|SLICE_DP_C|SLICE_DP_B|SLICE_DP_A|SLICE|UNSPECIFIED \n
2499\n ---------------------------------------------------------------------\n
2500\n----------------------------------------------
2501\n 14| 13| 12| 11| 10| 9| 8|
2502\n UD_SEI|SPS_VUI|FILLER|EOSTREAM|EOSEQ|AUD|PPS|
2503\n----------------------------------------------
2504 Set/ reset particular bit to enable/disable that insertion of that
2505 NALU (0=disable, 1=enable)
2506 UNSPECIFIED (bit-0), SLICE_DP_A(bit-2), SLICE_DP_B(bit-3),
2507 SLICE_DP_C(bit-4), IDR_SLICE(bit-5), EOSEQ (bit-10) and
2508 EOSTREAM (bit-11) are don't care and assumed to be <b> zero </b>.
2509 @param naluPresentMaskNonIntraPicture
2510 This parameter controls the insertion of different
2511 NALU at NON intra picture
2512 A bit-field is given for each NALU type as shown below. This field is
2513\n ---------------------------------------------------------------------\n
2514\n 7| 6| 5| 4| 3| 2| 1| 0 \n
2515\n SPS|SEI|IDR_SLICE|SLICE_DP_C|SLICE_DP_B|SLICE_DP_A|SLICE|UNSPECIFIED \n
2516\n ---------------------------------------------------------------------\n
2517\n----------------------------------------------
2518\n 14| 13| 12| 11| 10| 9| 8|
2519\n UD_SEI|SPS_VUI|FILLER|EOSTREAM|EOSEQ|AUD|PPS|
2520\n----------------------------------------------
2521 Set/ reset particular bit to enable/disable that insertion of that
2522 NALU (0=disable, 1=enable)
2523 UNSPECIFIED (bit-0), SLICE_DP_A(bit-2), SLICE_DP_B(bit-3),
2524 SLICE_DP_C(bit-4), IDR_SLICE(bit-5), EOSEQ (bit-10) and
2525 EOSTREAM (bit-11) are don't care and assumed to be <b> zero </b>.
2526 @param naluPresentMaskEndOfSequence
2527 This parameter controls the insertion of different NALU at End of Seq
2528 A bit-field is given for each NALU type as shown below. This field is
2529\n ---------------------------------------------------------------------\n
2530\n 7| 6| 5| 4| 3| 2| 1| 0 \n
2531\n SPS|SEI|IDR_SLICE|SLICE_DP_C|SLICE_DP_B|SLICE_DP_A|SLICE|UNSPECIFIED \n
2532\n ---------------------------------------------------------------------\n
2533\n----------------------------------------------
2534\n 14| 13| 12| 11| 10| 9| 8|
2535\n UD_SEI|SPS_VUI|FILLER|EOSTREAM|EOSEQ|AUD|PPS|
2536\n----------------------------------------------
2537 Set/ reset particular bit to enable/disable that insertion of that
2538 NALU (0=disable, 1=enable)
2539 UNSPECIFIED (bit-0), SLICE_DP_A(bit-2), SLICE_DP_B(bit-3),
2540 SLICE_DP_C(bit-4), SPS_VUI (bit-13), FILLER (bit-12), AUD(bit-9),
2541 PPS(bit-8), SPS(bit-7), SEI(bit-6), IDR_SLICE(bit-5), SLICE (bit-1)
2542 are don't care and assumed to be <b> zero </b>.
2543
2544*/
2545
2546typedef struct IH264ENC_NALUControlParams {
2547 XDAS_Int16 naluControlPreset ;
2548 XDAS_Int16 naluPresentMaskStartOfSequence ;
2549 XDAS_Int16 naluPresentMaskIDRPicture ;
2550 XDAS_Int16 naluPresentMaskIntraPicture ;
2551 XDAS_Int16 naluPresentMaskNonIntraPicture ;
2552 XDAS_Int16 naluPresentMaskEndOfSequence ;
2553
2554} IH264ENC_NALUControlParams ;
2555
2556/**
2557
2558 @struct IH264ENC_SliceCodingParams
2559 @brief This structure contains all the parameters which controls Slice
2560 encoding
2561
2562 @param sliceCodingPreset
2563 This Preset controls the USER_DEFINED vs DEFAULT mode. if User is
2564 not aware about following fields, it should be set as
2565 IH264_SLICECODING_DEFAULT
2566
2567 @param sliceMode : regarded @ IH264ENC_DynamicParams::sliceCodingParams
2568 This defines the control mechanism to split a picture in slices.
2569 It can be either MB based or bytes based
2570
2571 @param sliceUnitSize : regarded @ IH264ENC_DynamicParams::sliceCodingParams
2572 The meaning of this parameter depends upon sliceMode.
2573 sliceMode == IH264_SLICEMODE_MBUNIT then this
2574 parameter informs the number of Macroblocks in one slice
2575 sliceMode == IH264_SLICEMODE_BYTES then this
2576 parameter informs the number of bytes in one slice
2577 sliceMode == IH264_SLICEMODE_OFFSET then this
2578 parameter informs the number of offset information provided by user.
2579 Actual offset are provided with sliceStartOffset
2580
2581 @param sliceStartOffset[IH264ENC_MAX_NUM_SLICE_START_OFFSET] : regarded @
2582 IH264ENC_DynamicParams::sliceCodingParams row numbering is assumed to
2583 start from 0. Enteris in this array must have numbers in ascending
2584 order. first slice of the picture is always starting from 0th row
2585 of the picture so 0th entry is the offset of second slice in picture
2586 Ex 1 : sliceStartRowNum[0] = 25 ,
2587 sliceStartRowNum[1] = 30, sliceStartRowNum[2] = 40
2588 will result into 4 slices starting from row# 0, 25, 30 and 40
2589 Ex 2 : sliceStartRowNum[0] = 25 , sliceStartRowNum[1] = 70,
2590 sliceStartRowNum[2] = 60 is invalid
2591 Ex 3 : sliceStartRowNum[0] = 25 , sliceStartRowNum[1] = 50,
2592 sliceStartRowNum[2] = 100
2593 will result into 3 slices starting from row# 0, 25 and 50
2594 {if number of rows in picture < (100 + 1) }
2595
2596
2597 @param streamFormat : ignored @ IH264ENC_DynamicParams::sliceCodingParams
2598 Controls the type of stream : byte stream format or NALU format
2599 refer IH264ENC_StreamFormat for possible values
2600
2601*/
2602
2603typedef struct IH264ENC_SliceCodingParams {
2604 XDAS_Int8 sliceCodingPreset ;
2605 XDAS_Int16 sliceMode ;
2606 XDAS_Int32 sliceUnitSize ;
2607 XDAS_Int8 sliceStartOffset[IH264ENC_MAX_NUM_SLICE_START_OFFSET] ;
2608 XDAS_Int8 streamFormat ;
2609
2610} IH264ENC_SliceCodingParams ;
2611
2612
2613/**
2614
2615 @struct IH264ENC_LoopFilterParams
2616 @brief This structure contains all the parameters which controls loop
2617 filtering operations
2618
2619 @param loopfilterPreset
2620 This Preset controls the USER_DEFINED vs DEFAULT mode. if User is
2621 not aware about following fields, it should be set as
2622 IH264_SLICECODING_DEFAULT
2623 @param loopfilterDisableIDC
2624 Controls H.264 loop filter disabling options
2625 @param filterOffsetA
2626 alpha offset for loop filter [-12, 12] even number
2627 @param filterOffsetB
2628 beta offset for loop filter [-12, 12] even number
2629
2630
2631*/
2632typedef struct IH264ENC_LoopFilterParams {
2633 XDAS_Int8 loopfilterPreset ;
2634 XDAS_Int8 loopfilterDisableIDC ;
2635 XDAS_Int8 filterOffsetA ;
2636 XDAS_Int8 filterOffsetB ;
2637
2638} IH264ENC_LoopFilterParams ;
2639
2640/**
2641
2642 @struct IH264ENC_FMOCodingParams
2643 @brief This structure contains all the parameters which controls FMO behavior
2644
2645 @param fmoCodingPreset
2646 This Preset controls the USER_DEFINED vs DEFAULT mode. if User is
2647 not aware about following fields, it should be set as
2648 IH264_FMOCODING_DEFAULT
2649 @param numSliceGroups
2650 Total Number of slice groups, valid enteries are [0,8]
2651 @param sliceGroupMapType
2652 For Valid enteries see IH264ENC_SliceGroupMapType
2653 @param sliceGroupChangeDirectionFlag
2654 Only valid when sliceGroupMapType is equal to
2655 IH264_RASTER_SCAN_SLICE_GRP,
2656 IH264_WIPE_SLICE_GRP or IH264_WIPE_SLICE_GRP.
2657 For valid values refer IH264ENC_SliceGroupChangeDirection
2658 @param sliceGroupChangeRate
2659 Only valid when sliceGroupMapType is equal to
2660 IH264_RASTER_SCAN_SLICE_GRP,
2661 IH264_WIPE_SLICE_GRP or IH264_WIPE_SLICE_GRP
2662 valid values are : [0, factor of number of Mbs in a row]
2663 @param sliceGroupChangeCycle
2664 Only valid when sliceGroupMapType is equal to
2665 IH264_RASTER_SCAN_SLICE_GRP,
2666 IH264_WIPE_SLICE_GRP or IH264_WIPE_SLICE_GRP
2667 Valid values can be 0 to numMbsRowsInPicture, also constrained by
2668 sliceGroupChangeRate*sliceGroupChangeCycle < totalMbsInFrameOnly valid
2669 when sliceGroupMapType is equal to IH264_RASTER_SCAN_SLICE_GRP.
2670 valid values are : [0, factor of number of Mbs in a row]
2671 @param sliceGroupParams[IH264ENC_MAXNUMSLCGPS]
2672 This field is useful in case of sliceGroupMapType equal to either
2673 IH264_INTERLEAVED_SLICE_GRP or IH264_FOREGRND_WITH_LEFTOVER_SLICE_GRP
2674 In both cases it has different meaning:
2675 In case of IH264_INTERLEAVED_SLICE_GRP:
2676 The i-th entery in this array is used to specify the number of
2677 consecutive slice group macroblocks to be assigned to the i-th slice
2678 group in raster scan order of slice group macroblock units.
2679 Valid values are 0 to totalMbsInFrame again constrained by sum of
2680 all the elements shouldn't exceed totalMbsInFrame
2681 In case of IH264_FOREGRND_WITH_LEFTOVER_SLICE_GRP:
2682 First entry in the array specify the start position of foreground
2683 region in terms of macroblock number, valid values are
2684 [0, totalMbsInFrame-1]
2685 Second entry in the array specify the end position of foreground
2686 region in terms of macroblock number, valid values are
2687 [0, totalMbsInFrame-1] with following constrains:
2688 endPos > startPos && endPos%mbsInOneRow > startPos%mbsInOneRow
2689
2690 @todo Review this structure and see all the fields are sufficient enough
2691
2692
2693*/
2694
2695typedef struct IH264ENC_FMOCodingParams {
2696 XDAS_Int8 fmoCodingPreset ;
2697 XDAS_Int8 numSliceGroups ;
2698 XDAS_Int8 sliceGroupMapType ;
2699 XDAS_Int8 sliceGroupChangeDirectionFlag ;
2700 XDAS_Int8 sliceGroupChangeRate ;
2701 XDAS_Int16 sliceGroupChangeCycle ;
2702 XDAS_Int16 sliceGroupParams[IH264ENC_MAXNUMSLCGPS] ;
2703} IH264ENC_FMOCodingParams ;
2704
2705
2706/**
2707
2708 @struct IH264ENC_VUICodingParams
2709 @brief This structure contains all the parameters which controls VUI
2710 parameters. Refer Annex E of the H.264 standard for more details
2711 of VUI and parameters
2712 @param vuiCodingPreset
2713 This Preset controls the USER_DEFINED vs DEFAULT mode. if User is
2714 not aware about following fields, it should be set as
2715 IH264_VUICODING_DEFAULT
2716 @param aspectRatioInfoPresentFlag
2717 This controls the insertion of aspect ratio information in VUI part
2718 of bit-stream
2719 zero : No aspect ratio related information is transmitted
2720 non-zero : aspect ratio related information is transmitted
2721 @param aspectRatioIdc
2722 Encoder inserts aspectRatioIdc as it is in the bit-stream. It is
2723 user's responsibility to feed appropriate value of this.
2724 Refer Table E-1 of H264 standard (or enum IH264ENC_AspectRatioIdc)
2725 for valid values of this.
2726 when aspectRatioIdc == IH264ENC_ASPECTRATIO_EXTENDED(255), encoder
2727 will look at IVIDENC2_DynamicParams::sampleAspectRatioHeightand
2728 IVIDENC2_DynamicParams::sampleAspectRatioWidth and use them as
2729 sar_height and sar_width respectively. aspectRatioIdc is left to
2730 user to provide correct value.
2731 <b> if aspectRatioInfoPresentFlag ==0 then encoder ignores
2732 this parameter </b>
2733 @param videoSignalTypePresentFlag
2734 This controls the insertion of video signal type in VUI part of
2735 bit-stream
2736 zero : No video signal related information is transmitted
2737 non-zero : video signal related information is transmitted
2738 @param videoFormat
2739 Encoder inserts videoFormat(lower 3 bits) as it is in the bit-stream.
2740 It is user's responsibility to feed appropriate value of this.
2741 Refer Table E-2 H264 standard (or enum IH264ENC_VideoFormat)
2742 for valid values of this.
2743 @param videoFullRangeFlag
2744 zero: video range is not full{0, 255} ; non-zero: video range is full
2745 @param timingInfoPresentFlag
2746 This controls the insertion of timing info related parameters in
2747 VUI part of bit-stream
2748 @param hrdParamsPresentFlag
2749 This controls the insertion of HRD parameters in
2750 VUI part of bit-stream
2751 @param numUnitsInTicks
2752 This controls the insertion of numUnitsInTicks parameter in
2753 VUI part of bit-stream.
2754 Valid values are [1, targetFrameRate]
2755 If this parameter is set by user then the targetFrameRate
2756 has multiplication factor of numUnitInTicks instead of 1000
2757*/
2758
2759typedef struct IH264ENC_VUICodingParams {
2760 XDAS_Int8 vuiCodingPreset ;
2761 XDAS_UInt8 aspectRatioInfoPresentFlag ;
2762 XDAS_UInt8 aspectRatioIdc ;
2763 XDAS_UInt8 videoSignalTypePresentFlag ;
2764 XDAS_UInt8 videoFormat ;
2765 XDAS_UInt8 videoFullRangeFlag ;
2766 XDAS_UInt8 timingInfoPresentFlag ;
2767 XDAS_UInt8 hrdParamsPresentFlag ;
2768 XDAS_UInt32 numUnitsInTicks ;
2769
2770
2771} IH264ENC_VUICodingParams ;
2772
2773/**
2774
2775 @struct IH264ENC_StereoInfoParams
2776 @brief This structure contains all the parameters which have Stereo
2777 Video info for SEI message.
2778 @param stereoInfoPreset
2779 This Preset controls the Enable/Disable of stereo video coding &
2780 if its enable then controls the USER_DEFINED vs DEFAULT mode.
2781 If User is not aware about following fields, it should be set
2782 as IH264_STEREOINFO_ENABLE_DEFAULT.
2783 0 :Stereo Video Coding is Disabled.
2784 1 :Default stereo video information parameters .
2785 2 :User defined steroe video information pamameters.
2786 @remarks - When stereo video coding is enabled then input content type
2787 (coding type) should be Interlaced coding.
2788 @param topFieldIsLeftViewFlag
2789 This indicates the top & bottom field in video coded sequence
2790 as a left view or right view
2791 non-zero :top fields in the coded video sequence represent a left view & the
2792 bottom fields in the coded video sequence represent a right view.
2793 zero :vice-versa.
2794 @param viewSelfContainedFlag
2795 This controls the Left/Right view should Refer/NotRefer to
2796 Left/Right view.
2797 zero :Leftview can refer to Rightview or Leftview & Rightview can refer to
2798 Leftview or Rightview.
2799 i.e.Possible values for left_view_self_contained_flag = 0 &&
2800 right_view_self_contained_flag = 0 in bit-stream.
2801 non-zero:Leftview cannot refer to Rightview & Rightview cannot refer to
2802 Leftview.
2803 i.e Possible values for left_view_self_contained_flag = 1 &&
2804 right_view_self_contained_flag = 1 in bit-stream.
2805 @remarks - This viewSelfContainedFlag overrides the interlaceCodingType.
2806 viewSelfContainedFlag == 0 forces interlaceCodingType = ARF
2807 viewSelfContainedFlag == 1 forces interlaceCodingType = SPF
2808*/
2809typedef struct IH264ENC_StereoInfoParams {
2810 XDAS_UInt8 stereoInfoPreset;
2811 XDAS_UInt8 topFieldIsLeftViewFlag ;
2812 XDAS_UInt8 viewSelfContainedFlag ;
2813}IH264ENC_StereoInfoParams ;
2814
2815/**
2816
2817 @struct IH264ENC_FramePackingSEIParams
2818 @brief This structure contains all the parameters for Frame packing
2819 SEI message.
2820 @param framePackingPreset
2821 This Preset controls the Enable/Disable of Frame packing
2822 SEI message encoding.If its enable then controls
2823 the USER_DEFINED vs DEFAULT mode.
2824 If User is not aware about following fields, it should be set
2825 as IH264_FRAMEPACK_SEI_ENABLE_DEFAULT.
2826 0 :Frame packing SEI is Disabled.
2827 1 :Default Frame packing SEI parameters .
2828 2 :User defined Frame packing SEI information pamameters.
2829 @remarks - When Frame packing SEI coding is enabled then input content
2830 type (coding type) should be Progressive coding.
2831 @param framePackingType
2832 indicates the type of packing arrangement of the frames as
2833 specified standard. Refer IH264ENC_FramePackingType
2834 @param frame0PositionX
2835 location of the upper left sample of frame 0 (Left view) in
2836 horizontal direction. Allowed values are [0,15]. Only lower
2837 4 bits of this parameter are significant.
2838 @param frame0PositionY
2839 location of the upper left sample of frame 0 (Left view) in
2840 vertical direction. Allowed values are [0,15]. Only lower
2841 4 bits of this parameter are significant.
2842 @param frame1PositionX
2843 location of the upper left sample of frame 1 (Right view) in
2844 horizontal direction. Allowed values are [0,15]. Only lower
2845 4 bits of this parameter are significant.
2846 @param frame1PositionY
2847 location of the upper left sample of frame 1 (Right view) in
2848 vertical direction. Allowed values are [0,15]. Only lower
2849 4 bits of this parameter are significant.
2850 @param reservedByte
2851 reserved byte that needs to be encoded as part of SEI message
2852 "frame_packing_arrangement_reserved_byte"
2853 User should set it to 0 as current standard (March 2010) allows
2854 only 0 of this value. This is kept for future provisions.
2855
2856*/
2857typedef struct IH264ENC_FramePackingSEIParams {
2858 XDAS_UInt8 framePackingPreset;
2859 XDAS_UInt8 framePackingType ;
2860 XDAS_UInt8 frame0PositionX ;
2861 XDAS_UInt8 frame0PositionY ;
2862 XDAS_UInt8 frame1PositionX ;
2863 XDAS_UInt8 frame1PositionY ;
2864 XDAS_UInt8 reservedByte ;
2865}IH264ENC_FramePackingSEIParams ;
2866
2867/**
2868
2869 @struct IH264ENC_SVCCodingParams
2870 @brief This structure contains all the parameters which controls SVC
2871 parameters. Refer Annex G of the H.264 standard for more details
2872 of SVC and parameters
2873
2874 @param svcExtensionFlag
2875 This parameter configures the codec put SVC extensions in the
2876 bit-stream. For normal H.264 operation this Flag needs to be ZERO
2877 (default value). For Encoder instance to encode SSPS, Prefix-NALU,
2878 Coded Slice in the bit-stream, this flag needs to be set.
2879
2880 Allowed Values are [0,1,2]
2881
2882 0 - Disables all SVC features/syntaxes and rest of the structure
2883 is not read/respected.
2884 1 - Encodes the required SVC related syntaxes of the layer for
2885 which H.264 Codec has been instantiated.
2886 2 - Encoder the required SVC related syntaxes of the layer for
2887 which H.264 Codec has been instantiated
2888 Only in this mode, the JSVM error concealment will work on
2889 encoded bitstreams as in this mode even Spatial/CGS is also
2890 coded the MGS way (i.e. by setting
2891 adaptive_xxx_prediction_flag and
2892 default_xxxx_prediction_flag to zero).
2893
2894 @param dependencyID
2895 This parameter tell whether the current instance is for Base layer
2896 or for enhancement layer and also conveys Layer ID Info. This field
2897 is respected only when svcExtensionFlag is set. For configuring the
2898 encoder instance for BL then this parameter should be ZERO. For
2899 configuring the encoder instance for EL, this parameter should hold
2900 the value of the layer ID.
2901
2902 @param qualityID
2903 This parameter tells Quality ID of the layer that the current instance
2904 of encoder is going to encode.
2905 This field is respected only when svcExtensionFlag is set. For
2906 configuring the encoder instance for BL then this parameter should be
2907 ZERO.
2908
2909 @param enhancementProfileID
2910 This parameter conveys the enhancement encoder instance like what
2911 should be the profile ID to be encoded in the Sub-Sequence Parameter
2912 Set (SSPS).This parameter is dont care when, the svcExtensionFlag is
2913 not set.Possible values are IH264SVC_BASELINE_PROFILE (83) or
2914 IH264SVC_HIGH_PROFILE (86)
2915 @param layerIndex
2916 This parameter conveys the enhancement encoder instance like what
2917 should be the pic_parameter_set_id and seq_parameter_set_id to be
2918 encoded in the Picture Parameter Set (PPS) and Sub-Sequence Parameter
2919 Set (SSPS). layerIndex is don’t care or treated to be ZERO when
2920 svcExtensionFlag is not enabled.
2921 @param refLayerDQId
2922 This parameter conveys the the DQ Id of the ReferenceLayer.
2923
2924*/
2925
2926typedef struct IH264ENC_SVCCodingParams {
2927 XDAS_UInt8 svcExtensionFlag;
2928 XDAS_UInt8 dependencyID;
2929 XDAS_UInt8 qualityID;
2930 XDAS_UInt8 enhancementProfileID;
2931 XDAS_UInt8 layerIndex;
2932 XDAS_Int8 refLayerDQId;
2933
2934} IH264ENC_SVCCodingParams ;
2935
2936/**<
2937
2938 @struct IH264ENC_Params
2939 @brief This structure defines the Create time parameters for all
2940 H264ENC objects
2941
2942 @param videnc2Params must be followed for all video encoders.
2943 Base class create params
2944 @param rateControlParams Controls all Rate Control related parameters
2945 @param interCodingParams Controls all Inter coding related parameters
2946 @param intraCodingParams Controls all Intra coding related parameters
2947
2948 @param nalUnitControlParams Controls the insertion of different NALUs at
2949 different access points in video sequence
2950 @param sliceCodingParams Controls all Slice coding related parameters
2951 @param loopFilterParams Controls the in-loop filtering process
2952 @param fmoCodingParams Controls the FMO behavior
2953 @param vuiCodingParams Controls the VUI (Video Usability Information)
2954 parameters. Refer Annex E for more details of
2955 @param stereoInfoParams Controls the Stereo Video Information for SEI
2956 NAL Unit.
2957 @param framePackingSEIParams This structure contains all the parameters
2958 for Frame packing SEI message.
2959 @param svcCodingParams Controls the SVC coding parameters
2960
2961 @param interlaceCodingType Controls the type of interlaced coding, refer
2962 IH264ENC_InterlaceCodingType for more details
2963 @param bottomFieldIntra This field is valid only for interlaced sequences
2964 0 = Bottom field of the first I frame in the GOP encoded as
2965 P field.
2966 non-zero = Bottom field of the first I frame in the GOP encoded as I
2967 field.
2968
2969 @param IDRFrameInterval Interval b/w two IDR frames, unit of this
2970 parameter is intraFrameInterval
2971 Ex: 0 : Only first I frame as IDR
2972 1 : All I frames are IDR.
2973 2 : 1 out of 2 I frames are IDR starting from first I frame
2974 -ve values are not allowed.
2975
2976 @param gopStructure Defines the gop structure type:
2977 uniform/non-uniform. For more information refer
2978 IH264ENC_GOPStructure
2979 @param entropyCodingMode Controls the entropy coding type, see
2980 IH264ENC_EntropyCodingMode for allowed values
2981 @param transformBlockSize Tranform Block size. Refer
2982 IH264ENC_TransformBlockSize
2983
2984 @param log2MaxFNumMinus4 Limits the maximum frame number in the bit-stream
2985 to (1<< (log2MaxFNumMinus4 + 4)) Range[0,12]
2986 @param picOrderCountType Picture Order count type Valid values refer
2987 IH264ENC_PicOrderCountType
2988 @param enableWatermark This Parameter Enables or disables Water Mark
2989 SEI message in the bit stream
2990 0 – Disable, Non-Zero - Enable
2991 @param pConstantMemory
2992 This pointer points to the the memory area where constants are
2993 located. It has to be in DDR addressable space by vDMA. This is
2994 use ful to allow relocatable constants for the applications which
2995 doesn't use M3 as host. Actual memory controller/allocator
2996 is on another master processor. If this is set to NULL then
2997 encoder assumes that all constants are pointed by symbol
2998 H264ENC_TI_ConstData
2999
3000
3001 @param maxIntraFrameInterval
3002 This parameter contains the maximum Intra Frame interval. It is used
3003 to reduce the memory requirement of refernce Buffers. Because for all
3004 I frame/field configuration the reference frame buffers are not
3005 required
3006 @remarks For example, this field will be:
3007 - 0 - Only first frame to be intra
3008 coded. e.g. IPPPPPP...
3009 - 1 - No inter frames (all intra
3010 frames).
3011 - 2 - Consecutive IPIPIP... sequence (if
3012 no B frames).
3013 - 3 - IPPIPP... or IPBIPBI... and so on.
3014
3015 @param debugTraceLevel
3016 This parameter configures the codec to dump a debug trace log
3017
3018 @param lastNFramesToLog
3019 This parameter configures the codec to maintain a history of last
3020 N frames/pictures
3021
3022 @param enableAnalyticinfo
3023 This parameter configures the codec to expose analytic info like
3024 MVs and SAD parameters
3025 @param enableGMVSei
3026 This Parameter Enable or disable the TI specific GMV SEI message
3027 in the bit stream
3028 0 – Disable, Non-Zero - Enable
3029
3030 @param constraintSetFlags
3031 Used to modify the values of constraint set flags that
3032 are coded in te bit stream. The syntax of of this
3033 flag is as follows
3034 RESVD|RESVD|RESVD|PRESET|CST_0|CST_1|CST_2|CST_3
3035 if preset is set to zero then, CST flags are set by the
3036 encoder internally. if preset is 1 then encoder takes the
3037 preset values given by the user and encodes themin the
3038 bit stream. Note that there are no error checks are placed
3039 on the user defined values.
3040 @param enableRCDO
3041 This paramter is used to enable encoding a bit stream compliant to
3042 Reduced Complexity Decoding Operations (RCDO) profile
3043
3044 @param enableLongTermRefFrame
3045 This paramter is used to enable support of long term reference frame.
3046 Enabling this bit will instruct encoder to keep the recently marked
3047 long-term frame in its refernce buffer list. So it increases the DDR
3048 foot print by one or two frame buffers depends on the LTRPScheme used.
3049
3050 @param LTRPPeriod
3051 This parameter is used to specify the long-term reference frame
3052 marking interval. This parameter is in use when
3053 enableLongTermRefFrame = IH264ENC_LTRP_REFERTOP_REACTIVE or
3054 IH264ENC_LTRP_REFERTO_PERIODICLTRP.
3055
3056 @param numTemporalLayer
3057 This parameter controls the temporal Levels in bit-stream.
3058 1 - Only Base Layer available in bit-stream.
3059 2 - Maximum Temporal Level 1 in bit-stream
3060 3 - Maximum Temporal Level 2 in bit-stream
3061 4 - Maximum Temporal Level 3 in bit-stream
3062 @remarks - numTemporalLayer = 0 is not supported & its erroneous case.
3063
3064 @param referencePicMarking
3065 This parameter used to control the Reference Picture Marking
3066 For any non-zero value means Long-term Picture (MMCO Commands)
3067 0 - Short-term Picture (Sliding Window)
3068 1 - Long-term Picture ( MMCO Commands)
3069 @param reservedParams
3070 Some part is kept reserved to add parameters later without
3071 changing the foot print of interface object memory
3072
3073 @todo
3074 More parameters need to be added for Hieririchal frames,
3075 error resilience options, SEI/VUI parameter options, Analytic exposure
3076 from encoder like MVs and SAD parameters
3077
3078
3079*/
3080
3081typedef struct
3082{
3083 IVIDENC2_Params videnc2Params ;
3084 IH264ENC_RateControlParams rateControlParams ;
3085 IH264ENC_InterCodingParams interCodingParams ;
3086 IH264ENC_IntraCodingParams intraCodingParams ;
3087 IH264ENC_NALUControlParams nalUnitControlParams;
3088 IH264ENC_SliceCodingParams sliceCodingParams ;
3089 IH264ENC_LoopFilterParams loopFilterParams ;
3090 IH264ENC_FMOCodingParams fmoCodingParams ;
3091 IH264ENC_VUICodingParams vuiCodingParams ;
3092 IH264ENC_StereoInfoParams stereoInfoParams ;
3093 IH264ENC_FramePackingSEIParams framePackingSEIParams ;
3094 IH264ENC_SVCCodingParams svcCodingParams ;
3095 XDAS_Int8 interlaceCodingType;
3096 XDAS_Int8 bottomFieldIntra ;
3097 XDAS_Int8 gopStructure ;
3098 XDAS_Int8 entropyCodingMode ;
3099 XDAS_Int8 transformBlockSize ;
3100 XDAS_Int8 log2MaxFNumMinus4 ;
3101 XDAS_Int8 picOrderCountType ;
3102/* XDAS_Int8 mbMetaDataEnable ; */
3103 XDAS_Int8 enableWatermark ;
3104 XDAS_Int32 IDRFrameInterval ;
3105 XDAS_Int32 pConstantMemory ;
3106 XDAS_Int32 maxIntraFrameInterval ;
3107 XDAS_UInt32 debugTraceLevel;
3108 XDAS_UInt32 lastNFramesToLog;
3109 XDAS_Int8 enableAnalyticinfo ;
3110 XDAS_Int8 enableGMVSei ;
3111 XDAS_Int8 constraintSetFlags;
3112 XDAS_Int8 enableRCDO;
3113 XDAS_Int32 enableLongTermRefFrame ;
3114 XDAS_Int32 LTRPPeriod;
3115 XDAS_Int8 numTemporalLayer ;
3116 XDAS_Int8 referencePicMarking ;
3117 XDAS_Int32 reservedParams[3] ;
3118} IH264ENC_Params;
3119
3120
3121/**<
3122
3123 @struct IH264ENC_Status
3124 @brief This structure informs back the status of H264 encoder and tells the
3125 value of each control parameter
3126
3127 @param videnc2Status must be followed for all video encoders.
3128 Base class status
3129
3130 @param rateControlParams Controls all Rate Control related parameters
3131 @param interCodingParams Controls all Inter coding related parameters
3132 @param intraCodingParams Controls all Intra coding related parameters
3133
3134 @param nalUnitControlParams Controls the insertion of different NALUs at
3135 different access points in video sequence
3136 @param sliceCodingParams Controls all Slice coding related parameters
3137 @param loopFilterParams Controls the in-loop filtering process
3138 @param fmoCodingParams Controls the FMO behavior
3139 @param vuiCodingParams Controls the VUI (Video Usability Information)
3140 parameters. Refer Annex E for more details
3141 of VUI and parameters
3142 @param stereoInfoParams Controls the Stereo Video Information for SEI
3143 NAL Unit.
3144 @param framePackingSEIParams This structure contains all the parameters
3145 for Frame packing SEI message.
3146 @param svcCodingParams Controls the SVC behavior
3147 @param interlaceCodingType Controls the type of interlaced coding, refer
3148 IH264ENC_InterlaceCodingType for more details
3149 @param bottomFieldIntra This field is valid only for interlaced sequences
3150 0 = Bottom field of the first I frame in the GOP
3151 encoded as P field.
3152 non-zero = Bottom field of the first I frame in
3153 the GOP encoded as I field.
3154 @param gopStructure Defines the gop structure type: Open/Close.
3155 For more information refer IH264ENC_GOPStructure
3156 @param entropyCodingMode Controls the entropy coding type, see
3157 IH264ENC_EntropyCodingMode for allowed values
3158 @param transformBlockSize Tranform Block size. Refer
3159 IH264ENC_TransformBlockSize
3160
3161 @param log2MaxFNumMinus4 Limits the maximum frame number in the bit-stream
3162 to (1<< (log2MaxFNumMinus4 + 4)) Range[0,12]
3163 @param picOrderCountType Picture Order count type Valid values refer
3164 IH264ENC_PicOrderCountType
3165 @param enableWatermark This Parameter Enables or disables Water Mark
3166 SEI message in the bit stream
3167 0 – Disable, Non-Zero - Enable
3168 @param IDRFrameInterval Interval b/w two IDR frames, it should be and
3169 integer multiple of intraFrameInterval
3170
3171 @param maxIntraFrameInterval
3172 This parameter contains the maximum Intra Frame interval. It is used
3173 to reduce the memory requirement of refernce Buffers. Because for all
3174 I frame/field configuration the reference frame buffers are not
3175 required
3176 @remarks For example, this field will be:
3177 - 0 - Only first frame to be intra
3178 coded. e.g. IPPPPPP...
3179 - 1 - No inter frames (all intra
3180 frames).
3181 - 2 - Consecutive IPIPIP... sequence (if
3182 no B frames).
3183 - 3 - IPPIPP... or IPBIPBI... and so on.
3184
3185 @param debugTraceLevel
3186 This parameter configures the codec to dump a debug trace log
3187
3188 @param lastNFramesToLog
3189 This parameter configures the codec to maintain a history of last
3190 N frames/pictures
3191
3192 @param enableAnalyticinfo
3193 This parameter configures the codec to expose analytic info like
3194 MVs and SAD parameters
3195
3196 @param enableGMVSei
3197 This Parameter Enable or disable the TI specific GMV SEI message
3198 in the bit stream
3199 0 – Disable, Non-Zero - Enable
3200
3201 @param constraintSetFlags
3202 Used to modify the values of constraint set flags that
3203 are coded in te bit stream. The syntax of of this
3204 flag is as follows
3205 RESVD|RESVD|RESVD|PRESET|CST_0|CST_1|CST_2|CST_3
3206 if preset is set to zero then, CST flags are set by the
3207 encoder internally. if preset is 1 then encoder takes the
3208 preset values given by the user and encodes themin the
3209 bit stream. Note that there are no error checks are placed
3210 on the user defined values.
3211
3212 @param enableRCDO
3213 This paramter is used to enable encoding a bit stream compliant to
3214 Reduced Complexity Decoding Operations (RCDO) profile
3215
3216 @param enableLongTermRefFrame
3217 This paramter is used to enable support of long term reference frame.
3218 Enabling this bit will instruct encoder to keep the recently marked
3219 long-term frame in its refernce buffer list. So it increases the DDR
3220 foot print by one or two frame buffers depends on the LTRPScheme used.
3221
3222 @param LTRPPeriod
3223 This parameter is used to specify the long-term reference frame
3224 marking interval. This parameter is in use when
3225 enableLongTermRefFrame = IH264ENC_LTRP_REFERTOP_REACTIVE or
3226 IH264ENC_LTRP_REFERTO_PERIODICLTRP.
3227
3228 @param searchCenter seacrh Center for motion estimation
3229 @param enableStaticMBCount Flag to indicate enable/disable Static MB count
3230 support
3231 @param extMemoryDebugTraceAddr This parameter reports the external
3232 memory address (as seen by M3) where debug trace
3233 information is being dumped
3234 @param extMemoryDebugTraceSize This parameter reports the external
3235 memory buffer size (in bytes) where debug trace
3236 information is being dumped
3237 @param numTemporalLayer This parameter controls the temporal Levels in
3238 bit-stream.
3239 @param referencePicMarking This parameter used to control the Reference
3240 Picture Marking.
3241 @param extErrorCode This parameter carries the sub extended error bits
3242 set by encoder. Application/user can look into
3243 these bits to correct his configuration.
3244*/
3245
3246typedef struct
3247{
3248 IVIDENC2_Status videnc2Status ;
3249
3250 IH264ENC_RateControlParams rateControlParams ;
3251 IH264ENC_InterCodingParams interCodingParams ;
3252 IH264ENC_IntraCodingParams intraCodingParams ;
3253 IH264ENC_NALUControlParams nalUnitControlParams ;
3254 IH264ENC_SliceCodingParams sliceCodingParams ;
3255 IH264ENC_LoopFilterParams loopFilterParams ;
3256 IH264ENC_FMOCodingParams fmoCodingParams ;
3257 IH264ENC_VUICodingParams vuiCodingParams ;
3258 IH264ENC_StereoInfoParams stereoInfoParams ;
3259 IH264ENC_FramePackingSEIParams framePackingSEIParams ;
3260 IH264ENC_SVCCodingParams svcCodingParams ;
3261
3262 XDAS_Int8 interlaceCodingType ;
3263 XDAS_Int8 bottomFieldIntra ;
3264 XDAS_Int8 gopStructure ;
3265 XDAS_Int8 entropyCodingMode ;
3266 XDAS_Int8 transformBlockSize ;
3267 XDAS_Int8 log2MaxFNumMinus4 ;
3268 XDAS_Int8 picOrderCountType ;
3269 XDAS_Int8 enableWatermark ;
3270 XDAS_Int32 IDRFrameInterval ;
3271 XDAS_Int32 maxIntraFrameInterval ;
3272 XDAS_UInt32 debugTraceLevel;
3273 XDAS_UInt32 lastNFramesToLog;
3274 XDAS_Int8 enableAnalyticinfo ;
3275 XDAS_Int8 enableGMVSei ;
3276 XDAS_Int8 constraintSetFlags;
3277 XDAS_Int8 enableRCDO;
3278 XDAS_Int32 enableLongTermRefFrame ;
3279 XDAS_Int32 LTRPPeriod ;
3280 XDM_Point searchCenter ;
3281 XDAS_Int8 enableStaticMBCount ;
3282 XDAS_UInt32 * extMemoryDebugTraceAddr;
3283 XDAS_Int8 numTemporalLayer ;
3284 XDAS_Int8 referencePicMarking ;
3285 XDAS_UInt32 extMemoryDebugTraceSize;
3286 XDAS_Int8 enableROI;
3287 XDAS_UInt32 extErrorCode[IH264ENC_EXTERROR_NUM_MAXWORDS];
3288} IH264ENC_Status;
3289
3290/**< This structure must be the first field of all H264ENC instance objects */
3291typedef struct IH264ENC_Obj
3292{
3293 struct IH264ENC_Fxns *fxns;
3294} IH264ENC_Obj;
3295
3296/**< This handle is used to reference all H264ENC instance objects */
3297typedef struct IH264ENC_Obj *IH264ENC_Handle;
3298
3299/**<Default parameter values for H264ENC instance objects */
3300extern const IH264ENC_Params H264ENC_TI_PARAMS;
3301
3302
3303/**<
3304
3305 @struct IH264ENC_DynamicParams
3306 @brief This structure defines the run time parameters for all H264ENC objects
3307
3308 @param videnc2DynamicParams must be followed for all video encoders
3309 @param rateControlParams Controls all Rate Control related parameters.
3310 only few are supported to be changed as
3311 part @ Control call. Refer
3312 IH264ENC_RateControlParams to find out
3313 @param interCodingParams Controls all iner MB coding related parameters.
3314 only few are supported to be changed as
3315 part @ Control call. Refer interCodingParams to
3316 find out
3317 @param sliceCodingParams Controls all Slice coding related parameters.
3318 only few are supported to be changed as
3319 part @ Control call.
3320 Refer sliceCodingParams to find out
3321 @param sliceGroupChangeCycle
3322 Only valid when sliceGroupMapType is equal to
3323 IH264_RASTER_SCAN_SLICE_GRP,
3324 IH264_WIPE_SLICE_GRP or IH264_WIPE_SLICE_GRP
3325 Valid values can be 0 to numMbsRowsInPicture, also constrained by
3326 sliceGroupChangeRate*sliceGroupChangeCycle < totalMbsInFrameOnly valid
3327 when sliceGroupMapType is equal to IH264_RASTER_SCAN_SLICE_GRP.
3328 valid values are : [0, factor of number of Mbs in a row]
3329 @param searchCenter seacrh Center for motion estimation.
3330 XDM_Point.x == 0xFFFF means ignore searchCenter
3331
3332 @param enableStaticMBCount Flag to indicate enable/disable Static MB count
3333 support
3334
3335 @param enableROI
3336 Enable/Disable the ROI algorithm
3337
3338 @param reservedDynParams
3339 Some part is kept reserved to add parameters later without changing
3340 the foot print of interface memory
3341
3342*/
3343
3344typedef struct IH264ENC_DynamicParams {
3345 IVIDENC2_DynamicParams videnc2DynamicParams;
3346 IH264ENC_RateControlParams rateControlParams ;
3347 IH264ENC_InterCodingParams interCodingParams ;
3348 IH264ENC_IntraCodingParams intraCodingParams ;
3349 IH264ENC_SliceCodingParams sliceCodingParams ;
3350 XDAS_Int32 sliceGroupChangeCycle ;
3351 XDM_Point searchCenter ;
3352 XDAS_Int8 enableStaticMBCount ;
3353 XDAS_Int32 enableROI;
3354 XDAS_Int32 reservedDynParams[3];
3355} IH264ENC_DynamicParams;
3356
3357extern const IH264ENC_DynamicParams H264ENC_TI_DYNAMICPARAMS;
3358
3359/**<
3360
3361 @struct IH264ENC_InArgs
3362 @brief This structure defines the input argument being passed to
3363 H.264 encoder
3364
3365 @params videnc2InArgs : It is instance of base class. It cntains all
3366 the necessary info required run time parameters for all H264ENC
3367 objects
3368 @param processId : processId in InArgs was kept to ease the
3369 implementation of acquire time optimization
3370 in application code. In N channel case,
3371 acquire is happening for last channel and
3372 this (processId ) as argument is passed into
3373 acquire call.This will make application to
3374 understand that for which process call, acquire
3375 has been made. With this information application
3376 can optimize the time spent in acquire. Like, it
3377 might have happened that from last call of acquire,
3378 IVAHd became unavailable to any further process
3379 call(s). In this scenario application will get to
3380 know that IVAHD was not given to somebody else from
3381 last process call, and hence it can do some
3382 optimization in acquire routine
3383 @params roiInputParams : Input parameters related to ROI algorithm
3384 @params inputKey : This parameter along with the few important
3385 properties of a frame are used to generate the
3386 Encrypted key. If watermarking is enabled then this
3387 Encrypted key would be inserted in the form of user
3388 data unregistered SEI message in the encoded stream.
3389 */
3390typedef struct IH264ENC_InArgs {
3391
3392 IVIDENC2_InArgs videnc2InArgs ;
3393 XDAS_Int32 processId;
3394 IH264ENC_RoiInput roiInputParams;
3395 XDAS_UInt32 inputKey ;
3396} IH264ENC_InArgs;
3397
3398
3399/**<
3400
3401 @struct IH264ENC_MetaDataFormatUserDefinedSEI
3402 @brief This structure defines the format of meta data used to provide
3403 information about user defined SEI
3404
3405 @param size size of the payload
3406 @param payload buffer
3407
3408*/
3409typedef struct IH264ENC_MetaDataFormatUserDefinedSEI
3410{
3411 XDAS_Int32 size ;
3412 XDAS_Int8 payload[IH264ENC_MAX_SEI_METADTA_BUFSIZE] ;
3413}IH264ENC_MetaDataFormatUserDefinedSEI;
3414
3415/**<
3416
3417 @struct IH264ENC_MetaDataFormatNaluInfo
3418 @brief This structure defines the format of meta data used to provide
3419 information about slice
3420
3421 @param naluSize size of each NAL Unit
3422
3423*/
3424typedef struct IH264ENC_MetaDataFormatNaluInfo
3425{
3426 XDAS_Int32 naluSize ;
3427}IH264ENC_MetaDataFormatNaluInfo;
3428
3429/**<
3430
3431 @struct IH264ENC_OutArgs
3432 @brief This structure defines the output argument being generated from H.264
3433 encoder
3434
3435 @params videnc2OutArgs : It is instance of base class. It cntains all
3436 the necessary info encoder should produce
3437 @params bytesGeneratedBotField: Number of bytes generated for bottom field
3438 during the IVIDENC2_Fxns::process() call. This field is updated only
3439 in case of contentType = Interlaced and both the fields are provided
3440 to codec in single process call
3441 @param vbvBufferLevel: This varible tells the buffer level at the end of
3442 every picture from decoder perspective.the value populated
3443 in this variable is latest for every process call
3444 @param numStaticMBs: Number of static MBs (defined by H241) in the encoded
3445 picture. This field is updated only in case of
3446 dynamicParams.enableStaticMBCount is set.
3447 @param temporalId:Temporal ID for temporal scalability.Temporal layer Id
3448 of current frame in H-P encoding(for base layer value is 0).
3449 @param control: Encoder control operations. Most of the times it is
3450 IVIDENC2_InArgs::control. But there are certain cases when it is
3451 not same as IVIDENC2_InArgs::control, hence it is advisable to look
3452 at this output information
3453 @sa IVIDENC2_Control
3454 @sa IH264ENC_Control
3455 @param extErrorCode : This parameter carries the sub extended error bits
3456 set by encoder. Application/user can look into these
3457 bits to understand encoder's run time failure.
3458*/
3459typedef struct IH264ENC_OutArgs {
3460
3461 IVIDENC2_OutArgs videnc2OutArgs ;
3462 XDAS_Int32 bytesGeneratedBotField ;
3463 XDAS_Int32 vbvBufferLevel ;
3464 XDAS_Int32 numStaticMBs ;
3465 XDAS_Int32 temporalId ;
3466 XDAS_Int32 control ;
3467 XDAS_UInt32 extErrorCode[IH264ENC_EXTERROR_NUM_MAXWORDS];
3468} IH264ENC_OutArgs;
3469
3470#define IH264ENC_MAX_LENGTH_PROCESS_LIST (24)
3471
3472/**<
3473 @struct IH264ENC_ProcessParams
3474 @brief This structure defines the channel specific parameters passed in
3475 a process call
3476 @params handle : Handle to an algorithm instance
3477 @params inBufs : pointer to detailed buffer descriptor for video buffers
3478 @params outBufs : pointer to the Buffer descriptors
3479 @params inArgs : pointer to the input argument being passed to H.264
3480 encoder
3481 @params outArgs : pointer to the output argument being generated from H.264
3482 encoder
3483 */
3484typedef struct
3485{
3486 IVIDENC2_Handle handle;
3487 IVIDEO2_BufDesc *inBufs;
3488 XDM2_BufDesc *outBufs;
3489 IVIDENC2_InArgs *inArgs;
3490 IVIDENC2_OutArgs *outArgs;
3491
3492} IH264ENC_ProcessParams;
3493
3494/**<
3495
3496 @struct IH264ENC_ProcessParamsList
3497 @brief This structure carries the information of all the channels to be
3498 processed .
3499 @params numEntries : Number of channels to be encoded in the process
3500 call.
3501 @params enableErrorCheck : This parameter controls(enable/disable)
3502 the check of the non supported features in N channel scenario.
3503 Note:
3504 1.Effect of flag is as of now only if (processList->numEntries > 1).
3505 2.Suggested value for this flag is 0 to have better performance
3506 @params processParams : An array holding the process parameters viz.,
3507 handle,InArgs,outArgs etc of the channel(s) to be processed.
3508
3509 */
3510
3511typedef struct
3512{
3513 XDAS_Int32 numEntries ;
3514 XDAS_Int32 enableErrorCheck ;
3515 IH264ENC_ProcessParams processParams[IH264ENC_MAX_LENGTH_PROCESS_LIST];
3516} IH264ENC_ProcessParamsList ;
3517
3518/**<
3519
3520 @struct IH264ENC_Fxns
3521 @brief This structure defines of the operations on H264ENC objects
3522
3523 @params IVIDENC2_Fxns : It is instance of base class. It contains all
3524 function table
3525 @params processMulti : pointer to the Function H264ENC_TI_encodemulti
3526
3527*/
3528typedef struct IH264ENC_Fxns
3529{
3530 IVIDENC2_Fxns ividenc;
3531 XDAS_Int32 (*processMulti) (IH264ENC_ProcessParamsList *processList);
3532
3533} IH264ENC_Fxns;
3534
3535#ifdef __cplusplus
3536}
3537#endif
3538
3539/*@}*/ /* ingroup HDVICP2H264 */
3540
3541#endif /* _IH264ENC_H_ --} */
3542
3543/* ========================================================================*/
3544/* End of file : ih264enc.h */
3545/*-------------------------------------------------------------------------*/
3546/* Copyright (c) 2009 Texas Instruments, Incorporated. */
3547/* All Rights Reserved. */
3548/* ========================================================================*/
3549