[MJPEGE] Codec Update 01.00.17.01
[ivimm/ipumm.git] / extrel / ti / ivahd_codecs / packages / ti / sdo / codecs / jpegvenc / ijpegenc.h
1 /*
2 ********************************************************************************
3 * HDVICP2.0 Based JPEG Encoder
4 *
5 * "HDVICP2.0 Based JPEG Encoder" is software module developed for
6 * TI's HDVICP2 based SoCs. This module is capable of encoding a raw image
7 * by compressing it into a JPEG bitstream compliant with ISO/IEC IS 10918-1.
8 * Copyright (C) 2009 Texas Instruments Incorporated - http://www.ti.com/
9 * ALL RIGHTS RESERVED
10 ********************************************************************************
11 */
12 /**
13 ********************************************************************************
14 * @file      ijpegenc.h
15 *
16 * @brief     JPEG specific interface details
17 *
18 * @author    Pavan Kumar
19 *
20 * @version 0.0 (Dec 2009) : Created the initial version.
21 *
22 * @version 0.1 (Jan 2010):Modified for Functionality requirements[Pavan,Vasudev]
23 *
24 * @version 0.2 (Feb 2010) : Review & Cleanup [Vasudev]
25 *
26 * @version 0.3 (Aug 2010):Debug Trace & error Robustness support added[Vasudev]
27 *
28 * @version 0.4 (Dec 2010) : Added support for error recovery and error 
29 *                           robustness in case of data sync errors[Pavan]
30 *
31 * @version 0.5 (Nov 2011) : Added support for Minimum Quality factor 1 and  
32 *                           Maximum Quality factor 100        [Naidu]
33 *
34 * @version 0.6 (Nov 2011) : Create and Dynamic Default structure are exposed to 
35 *                           Application                       [Naidu]
36 *
37 * @version 0.7 (July 2012) : Added support to change marker position JPEG header
38 *                            [Naidu]
39 *
40 * @version 0.8 (Sep 2012) : Added support for Rate Control and Privacy Masking
41 *                           [Mahantesh]
42 *
43 * @version 2.2 (Dec 2012) : Added another value to IJPEGVENC_RateControlAlgo 
44 *                           enum to support run-time disabling of rate control
45 *                           [Mahantesh]
46 * @version 2.3 (May 2013) : Added error check for \93non-multiple of 16\94 
47 *                           inputBufDesc->imagePitch [Naidu]
48 *
49 * @version 2.4 (Feb 2017) : Jpegencoder symbol conflicts 
50 *                           with Jpegdecoder [Prashanth Kumar]
51 *                          
52 ********************************************************************************
53 */
55 /* -------------------- compilation control switches -------------------------*/
56 #ifndef JPEGENC_TI_IJPEGVENC_H
57 #define JPEGENC_TI_IJPEGVENC_H
59 /**
60 * Macro for Minimum,maximum & Default Quality Factor
61 **/
62 #define IJPEGVENC_MIN_QUALITY_FACTOR      (1)
63 #define IJPEGVENC_MAX_QUALITY_FACTOR      (100)
64 #define IJPEGVENC_DEFAULT_QUALITY_FACTOR  (50)
66 /** 
67   Maximum number of PMs supported inside the frame.
68 */
69 #define IJPEGVENC_MAX_PM 36
70 /*******************************************************************************
71 *                             INCLUDE FILES
72 *******************************************************************************/
73 /* -------------------- system and platform files ----------------------------*/
74 #include <ti/xdais/ialg.h>
75 #include <ti/xdais/dm/ividenc2.h>
76 #include <ti/xdais/xdas.h>
77 /*--------------------- program files ----------------------------------------*/
79 /*******************************************************************************
80 *  PUBLIC DECLARATIONS Defined here, used elsewhere
81 *******************************************************************************/
82 /*---------------------- data declarations -----------------------------------*/
83 /**
84 ********************************************************************************
85 *  @struct IJPEGVENC_PrivacyMaskingInput  
86 *
87 *  @brief  This structure defines the PM input parameters required by Encoder.
88 *
89 *  @param  listPM : List of regions to be privacy masked with their x and y 
90 *                   co-ordinates
91 *                    
92 *  @param  noOfPrivacyMaskRegions: Number of PMs passed to codec
93 *
94 *  @param  lumaValueForPM : Y pixel value for privacy mask region
95 *
96 *  @param  cbValueForPM   : Cb pixel value for privacy mask region
97 *
98 *  @param  crValueForPM   : Cr pixel value for privacy mask region
99 ********************************************************************************
100 */
101 typedef struct IJPEGVENC_PrivacyMaskingInput{
102   XDM_Rect    listPM[IJPEGVENC_MAX_PM];   
103   XDAS_Int32  noOfPrivacyMaskRegions;
104   XDAS_UInt8  lumaValueForPM;
105   XDAS_UInt8  cbValueForPM;
106   XDAS_UInt8  crValueForPM;
107   XDAS_UInt8  dummy;         
108 }IJPEGVENC_PrivacyMaskingInput;
109 /**
110 ********************************************************************************
111 *  @struct     IJPEGVENC_Obj
113 *  @brief       This structure must be the first field of all JPEGVENC
114 *               instance objects
116 *  @param  fxns : Pointer to Functions which performs all the operations on
117 *                 IJPEGVENC objects.
118 ********************************************************************************
119 */
120 typedef struct IJPEGVENC_Obj {
121   struct IJPEGVENC_Fxns *fxns;
122 } IJPEGVENC_Obj;
123 /**
124 ******************************************************************************** 
125 *  @struct IJPEGVENC_RateControlParams
126 *  @brief  This structure contains all the parameters which controls Rate 
127           Control behavior
129 *  @param  rateControlParamsPreset : 
130           regarded @ IJPEGENC_DynamicParams::rateControlParams
131           This Preset controls the USER_DEFINED vs DEFAULT mode. if User is 
132           not aware about following fields, it should be set as 
133           IJPEGVENC_RATECONTROLPARAMS_DEFAULT
134 *  @param  scalingMatrixPreset  : 
135           ignored @ IJPEGENC_DynamicParams::rateControlParams
136           This Preset controls the USER_DEFINED vs DEFAULT mode. if User is 
137           not aware about following fields, it should be set as 
138           IJPEG_SCALINGMATRIX_DEFAULT
139           
140 *  @param  rcAlgo  : ignored @ IJPEGENC_DynamicParams::rateControlParams
141           This defines the rate control algorithm to be used. Only useful 
142           if IVIDENC2::rateControlPreset is set as IVIDEO_USER_DEFINED
144 *  @param  qpI  : regarded @ IJPEGENC_DynamicParams::rateControlParams
145           Initial Quantization Parameter for I/IDR frames. 
146           Valid Range is [-1, 51]
147           -1 : Auto Initialization else other wise Initial QP.
148           when rateControlPreset = IVIDEO_NONE, this quantization parameter is 
149           used by the whole video frame/field 
151 *  @param  qpMaxI  : regarded @ IJPEGENC_DynamicParams::rateControlParams
152           Maximum Quantization Parameter for I/IDR frame(s). Range [0 , 51]. 
153           Useful to control a minimum quality level
155 *  @param  qpMinI  : regarded @ IJPEGENC_DynamicParams::rateControlParams
156           Minimum Quantization Parameter for I/IDR frame(s). Range [0 , 51]. 
157           Useful to control a maximum bit-rate level
159 *  @param  qpP  : regarded @ IJPEGENC_DynamicParams::rateControlParams
160           Initial Quantization Parameter for P frames. Valid Range is [-1, 51]
161           -1 : Auto Initialization else other wise Initial QP.
162           when rateControlPreset = IVIDEO_NONE, this quantization parameter is 
163           used by the whole video frame/field 
165 *  @param  qpMaxP  : regarded @ IJPEGENC_DynamicParams::rateControlParams
166           Maximum Quantization Parameter for inter frame(s). Range [0 , 51]. 
167           Useful to control a minimum quality level
169 *  @param  qpMinP  : regarded @ IJPEGENC_DynamicParams::rateControlParams
170           Minimum Quantization Parameter for inter frame(s). Range [0 , 51]. 
171           Useful to control a maximum bit-rate level
173 *  @param  qpOffsetB  : regarded @ IJPEGENC_DynamicParams::rateControlParams
174           Offset of B frames Quantization Parameter from P frames. 
175           Valid Range is [-1, 51]
176           -1 : Auto Initialization else other wise user provided offset
177       if after adding the qpOffsetB into qp of P frame it exceeds 51 then
178       it is clipped to 51
179           when rateControlPreset = IVIDEO_NONE, this offset parameter is 
180           used by the whole video frame/field 
182 *  @param  qpMaxB  : regarded @ IJPEGENC_DynamicParams::rateControlParams
183           Maximum Quantization Parameter for B frame(s). Range [0 , 51]. 
184           Useful to control a minimum quality level
186 *  @param  qpMinB  : regarded @ IJPEGENC_DynamicParams::rateControlParams
187           Minimum Quantization Parameter for B frame(s). Range [0 , 51]. 
188           Useful to control a maximum bit-rate level
190 *  @param  allowFrameSkip: regarded @ IJPEGENC_DynamicParams::rateControlParams
191           Controls Frame Skip. 
192           non-zero means frames can be skipped to  achieve target bit-rate 
193           zero means frame can never be skipped
195 *  @param  removeExpensiveCoeff : 
196           regarded @ IJPEGENC_DynamicParams::rateControlParams
197           Flag to Remove high frequency expensive coeffecients 
199 *  @param  chromaQPIndexOffset  : 
200           ignored @ IJPEGENC_DynamicParams::rateControlParams
201           Specifies offset to be added to luma QP for addressing QPC values 
202           table for chroma components. 
203           Valid value is between -12 and 12, (inclusive)
205 *  @param  IPQualityFactor: ignored @ IJPEGENC_DynamicParams::rateControlParams
206           This provides configurality to control I frame Quality wrt to P frame. 
207           Higher Quality factor means I frame quality is given higher 
208           improtance compared to P frame. 
209           Refer IJPEGENC_FrameQualityFactor for possible values
211 *  @param  initialBufferLevel  : 
212           ignored @ IJPEGENC_DynamicParams::rateControlParams
213           Initial Buffer level for HRD compliance. It informs that Hypothtical 
214           decoder can start after how much time. The value taken is the 
215           obsolute value of the HRD buffer size  For example if user want 
216           Hypothtical decoder to start taking out data from HRD buffer after 
217           half second then it should set initialBufferLevel = half of the 
218           HRD buffer size that is programmed. 
219           
220 *  @param  HRDBufferSize : regarded @ IJPEGENC_DynamicParams::rateControlParams
221           Hypothetical Reference Decoder Buffer Size. This size controls the 
222           frame skip  logic of the encoder. for low delay applications this 
223           size should be small. Unit of this variable is bits
225 *  @param  minPicSizeRatio:regarded @ IJPEGENC_DynamicParams::rateControlParams
226                             This ratio is used to compute minimum picture size 
227                             in the following manner, 
228                             minPicSize = averagePicSize >> minPicSizeRatio
229                             allowed values 1 to 4, Setting this to 0 will enable 
230                             encoder chosen ratio.  
231                             Note that this is guided value to rate control to 
232                             determine min picture size and encoder may not 
233                             strictly follow this
234 *  @param  maxPicSizeRatio:regarded @ IJPEGENC_DynamicParams::rateControlParams
235                             To determines ratio for max picture size
236                             This ratio is used to compute maximum picture size 
237                             in the following manner, 
238                             maxPicSize = averagePicSize * maxPicSizeRatio
239                             allowed values 2 to 30.Setting this to 0 and 1 
240                             will enable encoder chosen ratio.  
241                             Note that this is guided value to rate control 
242                             to determine max picture size and encoder may not 
243                             strictly follow this.
245 *  @param  enablePRC     : regarded @ IJPEGENC_DynamicParams::rateControlParams
246                             This flag is used to control allowing PRC in the 
247                             frame
249 *  @param  enablePartialFrameSkip : regarded @ IJPEGENC_DynamicParams::
250                                  rateControlParams
251                             This flag is used to control allowing partial frame  
252                             skip in the frame
253 *  @param  reserved : 16 bit word, kept to not change the foot print
254 *  @param  VBRDuration : During over which statistics during interval are  
255                         collected to switch bit-rate states.Increasing this  
256                         value will make VBR wait for longer time before 
257                         switching bit-rate state
258 *  @param  VBRsensitivity : Specifies the target bitrate used by rate control in 
259                            high complexity state. 
260 *  @param  skipDistributionWindowLength : Number of frames over which the skip  
261                                          frames can be distributed  
262 *  @param  numSkipInDistributionWindow : Number of skips allowed within the 
263                                          distribution window 
264 *  @param  reservedRC
265           Some part is kept reserved to add parameters later without 
266           changing the foot print of  interface memory
268 *  @todo  More parameters to be added : delay (VBV), PRC related etc..
269 ********************************************************************************  
270 */
272 typedef struct IJPEGVENC_RateControlParams {
273   XDAS_Int8  rateControlParamsPreset ;
274   XDAS_Int8  scalingMatrixPreset     ;
275   XDAS_Int8  rcAlgo                  ;
276   XDAS_Int8  qpI                     ;
277   XDAS_Int8  qpMaxI                  ;
278   XDAS_Int8  qpMinI                  ;
279   XDAS_Int8  qpP                     ;
280   XDAS_Int8  qpMaxP                  ;
281   XDAS_Int8  qpMinP                  ;
282   XDAS_Int8  qpOffsetB               ;
283   XDAS_Int8  qpMaxB                  ;
284   XDAS_Int8  qpMinB                  ;
285   XDAS_Int8  allowFrameSkip          ;
286   XDAS_Int8  removeExpensiveCoeff    ;
287   XDAS_Int8  chromaQPIndexOffset     ;
288   XDAS_Int8  IPQualityFactor         ;
289   XDAS_Int32 initialBufferLevel      ;
290   XDAS_Int32 HRDBufferSize           ;
291   XDAS_Int16 minPicSizeRatioI        ; 
292   XDAS_Int16 maxPicSizeRatioI        ; 
293   XDAS_Int16 minPicSizeRatioP        ; 
294   XDAS_Int16 maxPicSizeRatioP        ; 
295   XDAS_Int16 minPicSizeRatioB        ; 
296   XDAS_Int16 maxPicSizeRatioB        ; 
297   XDAS_Int8  enablePRC               ;
298   XDAS_Int8  enablePartialFrameSkip  ;
299   XDAS_Int8  discardSavedBits        ;
300   XDAS_Int8  reserved                ;
301   XDAS_Int32 VBRDuration            ;
302   XDAS_Int8  VBRsensitivity          ;
303   XDAS_Int16 skipDistributionWindowLength;
304   XDAS_Int16 numSkipInDistributionWindow;
305   XDAS_Int8  enableHRDComplianceMode ;
306   XDAS_Int32 frameSkipThMulQ5        ;
307   XDAS_Int32 vbvUseLevelThQ5         ;
308   XDAS_Int32 reservedRC[3]           ; 
310 } IJPEGVENC_RateControlParams ;
312 /**
313 ********************************************************************************
314 *  @struct     IJPEGVENC_Status
316 *  @brief       Status structure defines the parameters that can be changed or
317 *               read during real-time operation of the alogrithm.
319 *  @param videnc2Status : This structure holds all the status parameters for
320 *                         IVIDENC2 Objects
321 ********************************************************************************
322 */
323 typedef struct IJPEGVENC_Status {
324   /*--------------------------------------------------------------------------*/
325   /* Base Class                                                               */
326   /*--------------------------------------------------------------------------*/
327   IVIDENC2_Status videnc2Status;
329   /*--------------------------------------------------------------------------*/
330   /*Debug trace Level : Possible values are 0,1,2,3,4                         */
331   /*--------------------------------------------------------------------------*/
332   XDAS_UInt32 debugTraceLevel;
334   /*--------------------------------------------------------------------------*/
335   /* Number of last frames to log the debug info                              */
336   /*--------------------------------------------------------------------------*/
337   XDAS_UInt32 lastNFramesToLog;
339   /*--------------------------------------------------------------------------*/
340   /* base address of the trace buffer in external memory                      */
341   /*--------------------------------------------------------------------------*/  
342   XDAS_UInt32 * extMemoryDebugTraceAddr;
343   
344   /*--------------------------------------------------------------------------*/
345   /* Size of the trace buffer                                                 */
346   /*--------------------------------------------------------------------------*/    
347   XDAS_UInt32 extMemoryDebugTraceSize;
349   /*--------------------------------------------------------------------------*/
350   /* Extended Error Code0 returned by encoder                                 */
351   /*--------------------------------------------------------------------------*/
352   XDAS_UInt32 extendedErrorCode0;
353   
354   /*--------------------------------------------------------------------------*/
355   /* Extended Error Code1 returned by encoder                                 */
356   /*--------------------------------------------------------------------------*/
357   XDAS_UInt32 extendedErrorCode1;
358   
359   /*--------------------------------------------------------------------------*/
360   /* Extended Error Code2 returned by encoder                                 */
361   /*--------------------------------------------------------------------------*/
362   XDAS_UInt32 extendedErrorCode2;
363   
364   /*--------------------------------------------------------------------------*/
365   /* Extended Error Code3 returned by encoder                                 */
366   /*--------------------------------------------------------------------------*/
367   XDAS_UInt32 extendedErrorCode3;  
368   /*--------------------------------------------------------------------------*/
369   /* Rate control param structure                                             */
370   /*--------------------------------------------------------------------------*/
371   IJPEGVENC_RateControlParams rateControlParams;
372   /*--------------------------------------------------------------------------*/
373   /* Flag to enable Privacy Masking                                           */
374   /*--------------------------------------------------------------------------*/  
375   XDAS_Int32  enablePrivacyMasking;
377 } IJPEGVENC_Status;
379 /**
380 ********************************************************************************
381 *  @struct     IJPEGVENC_Params
383 *  @brief       This structure defines the creation parameters for
384 *               all JPEGVENC objects
386 *  @param  videnc2Params :Create time Parameter structure
388 *  @param  maxThumbnailHSizeApp0:Max Horizontal resolution for APP0
389 *                                   thumbnail
390 *  @param  maxThumbnailVSizeApp0 :Max Vertical resolution for APP0
391 *                                    thumbnail
392 *  @param  maxThumbnailHSizeApp1:Max Horizontal resolution for APP1
393 *                                   thumbnail
394 *  @param  maxThumbnailVSizeApp1 :Max Vertical resolution for APP1
395 *                                    thumbnail
396 *  @param  chm_dc_vlc[12] :Chroma AC codes
397 ********************************************************************************
398 */
399 typedef struct IJPEGVENC_Params {
400   /*--------------------------------------------------------------------------*/
401   /* Base Class                                                               */
402   /*--------------------------------------------------------------------------*/
403   IVIDENC2_Params videnc2Params;
404   
405   /*--------------------------------------------------------------------------*/
406   /* Max Horizontal resolution for APP0 thumbnail                             */
407   /*--------------------------------------------------------------------------*/
408   XDAS_UInt16     maxThumbnailHSizeApp0;
410   /*--------------------------------------------------------------------------*/
411   /* Max Vertical resolution for APP0 thumbnail                               */
412   /*--------------------------------------------------------------------------*/
413   XDAS_UInt16     maxThumbnailVSizeApp0;
414   
415   /*--------------------------------------------------------------------------*/
416   /* Max Horizontal resolution for APP1 thumbnail                             */
417   /*--------------------------------------------------------------------------*/
418   XDAS_UInt16     maxThumbnailHSizeApp1;
420   /*--------------------------------------------------------------------------*/
421   /* Max Vertical resolution for APP0 thumbnail                               */
422   /*--------------------------------------------------------------------------*/
423   XDAS_UInt16     maxThumbnailVSizeApp1;
425   /*--------------------------------------------------------------------------*/
426   /*Debug trace Level                                                         */
427   /*--------------------------------------------------------------------------*/
428   XDAS_UInt32   debugTraceLevel;
430   /*--------------------------------------------------------------------------*/
431   /*History of last N frames                                                  */
432   /*--------------------------------------------------------------------------*/
433   XDAS_UInt32   lastNFramesToLog;  
434   /*--------------------------------------------------------------------------*/
435   /*Marker positions modification                                             */
436   /*--------------------------------------------------------------------------*/
437   XDAS_UInt32   Markerposition;
438   /*--------------------------------------------------------------------------*/
439   /* Rate control param structure                                             */
440   /*--------------------------------------------------------------------------*/
441   IJPEGVENC_RateControlParams rateControlParams;
442   
443 } IJPEGVENC_Params;
445 typedef IVIDENC2_Cmd IJPEGVENC_Cmd;
447 /**
448 ********************************************************************************
449 *  @struct     IJPEGVENC_CustomQuantTables
451 *  @brief      JPEG Encoder Custom Quantization Tables - This structure defines
452 *              the custom quantization tables for both Luma & Chroma that need
453 *              to be passed to the JPEG Encoder. This will be used in the
454 *              Quantization Module.The format is as specified in RFC 2035
455 *              (RTP Payload Format for JPEG-compressed Video) and also in
456 *              Table K.1 & K.2 of JPEG Spec.
458 *              NOTE: The "IJPEGVENC_DynamicParams" structure defined below
459 *              contains a pointer to this structure of type
460 *              "IJPEGVENC_CustomQuantTables" -
461 *              "IJPEGVENC_CustomQuantTables *quantTable".
462 *              This field is used to pass custom Quantization tables to the
463 *              JPEG Encoder.The application just needs to initialize this field
464 *              appropriately.However, if the application wishes to use the
465 *              Standard Quantization Tables,then there are 2 ways of informing
466 *              this to the JPEG Encoder -
467 *             (a) by using the base class only "IJPEGVENC_DynamicParams" and not
468 *                 the extended class "IJPEGVENC_DynamicParams", in which case
469 *                 the size field in the DynamicParams structure should be set to
470 *                 the size of "IJPEGVENC_DynamicParams".
471 *             (b) by using the extended class "IJPEGVENC_DynamicParams", but by
472 *                 setting the field "IJPEGVENC_CustomQuantTables *quantTable" to
473 *                 NULL.
475 *  @param  lumQuantTab :This defines the quantization table for the luma
476 *                       component.
477 *  @param  chmQuantTab :This defines the quantization table for the chroma
478 *                       component.
479 ********************************************************************************
480 */
481 typedef struct IJPEGVENC_CustomQuantTables
483   /*--------------------------------------------------------------------------*/
484   /* The array "lumQuantTab" defines the quantization table for the luma      */
485   /*  component.                                                              */
486   /*--------------------------------------------------------------------------*/
487   XDAS_UInt16 lumQuantTab[64];
489   /*--------------------------------------------------------------------------*/
490   /* The array "chmQuantTab" defines the quantization table for the chroma    */
491   /* component.                                                               */
492   /*--------------------------------------------------------------------------*/
493   XDAS_UInt16 chmQuantTab[64];
495 } IJPEGVENC_CustomQuantTables;
497 /**
498 ********************************************************************************
499 *  @struct     IJPEGVENC_DynamicParams
501 *  @brief       This structure defines the dynamic parameters for
502 *               all JPEGVENC objects
504 *  @param videnc2DynamicParams: IVIDENC2_Dynamic Params
505 *  @param restartInterval     : Restart Interval
506 *  @param qualityFactor       : Quality factor
507 *  @param quantTable          : User Defined Quant Table
508 *  @param rateControlParams   : Rate Control Params
509 *  @param enablePrivacyMasking: Flag to enable Privacy Masking
510 ********************************************************************************
511 */
512 typedef struct IJPEGVENC_DynamicParams {
513   /*--------------------------------------------------------------------------*/
514   /* Base Class                                                               */
515   /*--------------------------------------------------------------------------*/
516   IVIDENC2_DynamicParams videnc2DynamicParams;
517   
518   /*--------------------------------------------------------------------------*/
519   /* restartInterval : Specifies the number of MCUs between RST markers       */
520   /*--------------------------------------------------------------------------*/
521   XDAS_Int32             restartInterval;
523   /*--------------------------------------------------------------------------*/
524   /* qualityFactor : Specifies the quality setting to use for encoding        */
525   /*                 Supported values are from 0 (lowest quality)             */
526   /*                 to 97 (highest quality)                                  */
527   /*--------------------------------------------------------------------------*/
528   XDAS_Int32             qualityFactor;
530   /*--------------------------------------------------------------------------*/
531   /* quantTable : Application should populate the custom quant table in a     */
532   /*              structure of type IJPEGVENC_CustomQuantTables and pass the  */
533   /*              pointer to it here. Set it to NULL if custom quant tables   */
534   /*              are not to be used.                                         */
535   /*--------------------------------------------------------------------------*/
536   IJPEGVENC_CustomQuantTables *quantTable;
537   /*--------------------------------------------------------------------------*/
538   /* Rate control param structure                                             */
539   /*--------------------------------------------------------------------------*/
540   IJPEGVENC_RateControlParams rateControlParams;
541   /*--------------------------------------------------------------------------*/
542   /* Flag to enable Privacy Masking                                           */
543   /*--------------------------------------------------------------------------*/
544   XDAS_UInt32             enablePrivacyMasking;
545   
546 } IJPEGVENC_DynamicParams;
548 /**
549 ********************************************************************************
550 *  @struct     IJPEGVENC_InArgs
552 *  @brief       This structure defines the runtime input arguments
553 *               for IJPEGVENC::process
555 *  @param videnc2InArgs            : IVIDENC2_InArgs
556 *  @param APPN0                    : APP0 thumbnail Buffer
557 *  @param thumbnailIndexApp0       : JFIF Thumbnail Enable
558 *  @param APPN1                    : APP1 thumbnail Buffer
559 *  @param thumbnailIndexApp1       : EXIF Thumbnail Enable
560 *  @param Comment                  : Comment Data
561 *  @param pmInputParams            : Privacy Masking Params
562 ********************************************************************************
563 */
565 typedef struct IJPEGVENC_InArgs {
566   /*--------------------------------------------------------------------------*/
567   /* Base Class                                                               */
568   /*--------------------------------------------------------------------------*/
569   IVIDENC2_InArgs videnc2InArgs;
570   
571   /*--------------------------------------------------------------------------*/
572   /* APPN0 : buffer holding the data for APP-0 Marker                         */
573   /*--------------------------------------------------------------------------*/
574   XDM2_SingleBufDesc  APPN0;
576   /*--------------------------------------------------------------------------*/
577   /* thumbnailIndexApp0 :                                                     */
578   /*--------------------------------------------------------------------------*/
579   XDAS_UInt16    thumbnailIndexApp0;
581   /*--------------------------------------------------------------------------*/
582   /* APPN1 : buffer holding the data for APP-1 Marker                         */
583   /*--------------------------------------------------------------------------*/
584   XDM2_SingleBufDesc  APPN1;
586   /*--------------------------------------------------------------------------*/
587   /* Thumbnail_Index_App0 :                                                   */
588   /*--------------------------------------------------------------------------*/
589   XDAS_UInt16    thumbnailIndexApp1;
591   /*--------------------------------------------------------------------------*/
592   /* Comment : buffer holding the data for comment Marker                     */
593   /*--------------------------------------------------------------------------*/
594   XDM2_SingleBufDesc  Comment;
595   
596   /*--------------------------------------------------------------------------*/
597   /* Privacy Masking Params                                                   */
598   /*--------------------------------------------------------------------------*/
599   IJPEGVENC_PrivacyMaskingInput pmInputParams;
601 } IJPEGVENC_InArgs;
603 /**
604 ********************************************************************************
605 *  @struct     IJPEGVENC_OutArgs
607 *  @brief  This structure defines the runtime output arguments
608 *          for IJPEGVENC::process
610 *  @param  videnc2OutArgs : This structure contains run time output arguments 
611 *                           for all IVIDENC2 instance objects
612 *  @param  vbvBufferLevel : This varible tells the buffer level at the end
613 *                           of every picture from decoder perspective.
614 ********************************************************************************
615 */
617 typedef struct IJPEGVENC_OutArgs {
618   IVIDENC2_OutArgs videnc2OutArgs;
619   XDAS_Int32 vbvBufferLevel;
620 } IJPEGVENC_OutArgs;
622 /**
623 ********************************************************************************
624 *  @struct     IJPEGVENC_Fxns
626 *  @brief       This structure defines all of the operations on
627 *               JPEGVENC objects.
628 *  @param ividenc : Pointer to Functions which performs all the operations on
629 *                   IVIDENC2 objects.
630 ********************************************************************************
631 */
632 typedef struct IJPEGVENC_Fxns {
633   IVIDENC2_Fxns ividenc;
634 } IJPEGVENC_Fxns;
636 /**
637  * The error codes correspond to the 32-bit extended error parameter passed 
638  * through outargs and get sttus. The error have been categorised to the below 
639  * 32 groups and the respective bit is set on error occurrence.
640  */
641 typedef enum
643   IJPEGVENC_ERR_UNSUPPORTED_VIDENC2PARAMS = 0,
644   IJPEGVENC_ERR_UNSUPPORTED_VIDENC2DYNAMICPARAMS,            
645   IJPEGVENC_ERR_UNSUPPORTED_JPEGENCDYNAMICPARAMS,              
646   IJPEGVENC_ERR_IMPROPER_DATASYNC_SETTING,      
647   IJPEGVENC_ERR_NOSLICE,     
648   IJPEGVENC_ERR_SLICEHDR,            
649   IJPEGVENC_ERR_MBDATA,            
650   IJPEGVENC_ERR_UNSUPPFEATURE,     
651   IJPEGVENC_ERR_STREAM_END = 16,            
652   IJPEGVENC_ERR_INVALID_MBOX_MESSAGE,    
653   IJPEGVENC_ERR_HDVICP_RESET,
654   IJPEGVENC_ERR_HDVICP_WAIT_NOT_CLEAN_EXIT,
655   IJPEGVENC_ERR_IRES_RESHANDLE,
656   IJPEGVENC_ERR_STANDBY,
658   /* Error Codes for Data Sync */
659   IJPEGVENC_ERR_INPUT_DATASYNC,
660   IJPEGVENC_ERR_OUTPUT_DATASYNC,
661   
662   IJPEG_ERR_PRIVACY_MASKING_PARAMS,
663   IJPEG_ERR_RATECONTROLPARAMS
664 }IJPEGVENC_ExtendedErrorCodes;
666 /**
667  * The enum corresponds to the 4 32-bit words used to pass the error codes to 
668  * the application in the extended parameters of status stucture through the 
669  * getstatus command. Each bit is set for an error which falls under one of 
670  * the groups in the outargs 32 bvits.
671  */
672 typedef enum
674   IJPEGVENC_DYNAMIC_PARAMS_HANDLE_ERROR = 0,
675   IJPEGVENC_STATUS_HANDLE_ERROR,
676   IJPEGVENC_DYNAMIC_PARAMS_SIZE_ERROR,
677   IJPEGVENC_ENCODE_HEADER_ERROR,
678   IJPEGVENC_UNSUPPORTED_RESOLUTION,
679   IJPEGVENC_CAPTURE_WIDTH_ERROR,
680   IJPEGVENC_GET_DATA_FXN_NULL_POINTER,
681   IJPEGVENC_GET_BUFFER_FXN_NULL_POINTER,
682   IJPEGVENC_INVALID_RESTART_INTERVAL_ERROR,
683   IJPEGVENC_INVALID_QUALITY_FACTOR_ERROR,
684   IJPEGVENC_INVALID_INPUT_CHROMA_FORMAT_ERROR,
685   IJPEGVENC_NULL_QUANT_TABLE_POINTER_ERROR,
686   IJPEGVENC_NULL_INARGS_POINTER_ERROR,
687   IJPEGVENC_NULL_INARGS_APP_POINTER_ERROR,
688   IJPEGVENC_INARGS_SIZE_ERROR,
689   IJPEGVENC_INVALID_INPUT_BYTES_ERROR,
690   IJPEGVENC_INVALID_INPUT_ID_ERROR,
691   IJPEGVENC_NULL_INPUT_BUF_DESC_ERROR,
692   IJPEGVENC_NULL_INPUT_BUFFER_POINTER_ERROR,
693   IJPEGVENC_INVALID_INPUT_BUFFER_SIZE_ERROR,
694   IJPEGVENC_INVALID_NUM_OF_INPUT_BUFFERS_ERROR,
695   IJPEGVENC_INVALID_INPUT_BUFFER_MEMTYPE_ERROR,
696   IJPEGVENC_INVALID_OUTPUT_BUFFER_MEMTYPE_ERROR,
697   IJPEGVENC_NULL_OUTARGS_POINTER_ERROR,
698   IJPEGVENC_INVALID_OUTARGS_SIZE,
699   IJPEGVENC_NULL_OUTPUT_BUF_DESC_ERROR,
700   IJPEGVENC_NULL_OUTPUT_BUFFER_POINTER_ERROR,
701   IJPEGVENC_INVALID_OUTPUT_BUFFER_SIZE_ERROR,
702   IJPEGVENC_INVALID_NUM_OF_OUTPUT_BUFFERS_ERROR,
703   IJPEGVENC_INSUFFICIENT_OUTPUT_BUFFER_SIZE_ERROR,
704   IJPEGVENC_INVALID_JFIF_THUMBNAIL_ENABLE_ERROR,
705   IJPEGVENC_INVALID_EXIF_THUMBNAIL_ENABLE_ERROR,
706   IJPEGVENC_INPUT_BUFFER_POINTER_ALIGN_ERROR,
707   
708   /* Extended Error Codes related to Data Sync */
709   IJPEGVENC_DATASYNC_GET_ROW_DATA_ERROR, /* from 33rd bit*/
710   
711   IJPEGVENC_DATASYNC_INVALID_RESTART_INTERVAL_ERROR,
712   
713   IJPEGVENC_DATASYNC_BLOCK_POINTER_ERROR,
714   IJPEGVENC_DATASYNC_BLOCK_SIZE_ERROR,
715   IJPEGVENC_DATASYNC_INVALID_BLOCKS_ERROR,
716   IJPEGVENC_DATASYNC_NOT_VALID_COMBINATION_ERROR,
717   IJPEGVENC_INVALID_IMAGEPITCH
718 }IjpegVENC_ErrorStatus;
720 /**
721   @enum   IJPEGVENC_RateControlParamsPreset
722   @brief  These enumerations control the RateControl Params  
723 */
725 typedef enum
727   IJPEGVENC_RATECONTROLPARAMS_DEFAULT     = 0 , 
728       /**< Default Rate Control params */
729   IJPEGVENC_RATECONTROLPARAMS_USERDEFINED = 1 , 
730       /**< User defined Rate Control params */
731   IJPEGVENC_RATECONTROLPARAMS_EXISTING    = 2 , 
732       /**< Keep the Rate Control params as existing. This is 
733       * useful because during control call if user don't want 
734       * to change the Rate Control Params
735       */
736   IJPEGVENC_RATECONTROLPARAMS_MAX
738 } IJPEGVENC_RateControlParamsPreset;
740 /**
741   @enum   IJPEGVENC_PrivacyMaskingInputParams
742   @brief  These enumerations control the Privacy Masking Params  
743 */
744 typedef enum
746   IJPEGVENC_PRIVACYMASKING_DISABLE = 0,
747   /**< Disable Privacy Masking */
748   IJPEGVENC_PRIVACYMASKING_ENABLE
749   /**< Enable Privacy Masking  */
750 }IJPEGVENC_PrivacyMaskingInputParams;
752 /**
753   
754   @enum   IJPEGVENC_RateControlAlgo
755   @brief  These enumerations control the type of rateControl algo to be picked
756           up by encoder. Only useful if IVIDENC2::rateControlPreset is set as 
757           IVIDEO_USER_DEFINED
758   
759 */
760 typedef enum
762   IJPEGVENC_RATECONTROL_VBR_STORAGE       = 0 ,        
763   /** VBR - Storage Rate Control   */
764   IJPEGVENC_RATECONTROL_CBR_LOW_DELAY     = 1 ,        
765   /** CBR - Low Delay Rate Control */
766   IJPEGVENC_RATECONTROL_DISABLE           = 2
767   /** Disable Rate Control */  
768 } IJPEGVENC_RateControlAlgo;
769 /**
770 ******************************************************************************
771  *  ======== IJPEGVENC_DynamicParams ========
772  *  Default Create parameter values for JPEGVENC instance objects
773 ********************************************************************************
774 */
775 extern const IJPEGVENC_DynamicParams JPEGVENC_TI_DYNAMICPARAMS;
776 /**
777 ******************************************************************************
778  *  ======== IJPEGVENC_Params ========
779  *  Default DynamicParams values for JPEGVENC instance objects
780 ********************************************************************************
781 */
782 extern const IJPEGVENC_Params JPEGVENC_TI_PARAMS;
784 /*******************************************************************************
785 *  PRIVATE DECLARATIONS Defined here, used only here
786 *******************************************************************************/
787 /*---------------------- data declarations -----------------------------------*/
789 /*---------------------- function prototypes ---------------------------------*/
791 #endif /*#ifndef JPEGENC_TI_IJPEGVENC_H*/