1 /******************************************************************************
2  *
3  * Copyright (C) 2015 The Android Open Source Project
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at:
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  *****************************************************************************
18  * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
19 */
20 
21 /**
22  *******************************************************************************
23  * @file
24  *  ih264_structs.h
25  *
26  * @brief
27  *  Structure definitions used in the code
28  *
29  * @author
30  *  Ittiam
31  *
32  * @par List of Functions:
33  *
34  * @remarks
35  *  None
36  *
37  *******************************************************************************
38  */
39 
40 #ifndef _IH264_STRUCTS_H_
41 #define _IH264_STRUCTS_H_
42 
43 /** MB Type info for Intra MBs */
44 typedef struct
45 {
46     UWORD32             u4_num_mbpart;
47     MBPART_PREDMODE_T   e_mbpart_predmode;
48     MBMODES_I16x16      e_intra_predmode;
49     UWORD32             u4_cpb_chroma;
50     UWORD32             u4_cpb_luma;
51 }intra_mbtype_info_t;
52 
53 /** MB Type info for Inter MBs */
54 typedef struct
55 {
56     UWORD32                 u4_num_mbpart;
57     MBPART_PREDMODE_T       e_mbpart_predmode_0;
58     MBPART_PREDMODE_T       e_mbpart_predmode_1;
59     UWORD32                 u4_mbpart_wd;
60     UWORD32                 u4_mbpart_ht;
61 }inter_mbtype_info_t;
62 
63 
64 /** Sub MB Type info for Inter MBs */
65 typedef struct
66 {
67     UWORD32                 u4_num_mbpart;
68     MBPART_PREDMODE_T       e_mbpart_predmode;
69     UWORD32                 u4_mbpart_wd;
70     UWORD32                 u4_mbpart_ht;
71 }submbtype_info_t;
72 
73 /**
74  * Picture buffer
75  */
76 typedef struct
77 {
78     UWORD8* pu1_luma;
79     UWORD8* pu1_chroma;
80 
81     WORD32 i4_abs_poc;
82     WORD32 i4_poc_lsb;
83 
84 
85     /** Lower 32 bit of time stamp */
86     UWORD32 u4_timestamp_low;
87 
88     /** Upper 32 bit of time stamp */
89     UWORD32 u4_timestamp_high;
90 
91     WORD32 i4_used_as_ref;
92 
93     /**
94      * frame_num in the slice header
95      */
96     WORD32 i4_frame_num;
97 
98     /**
99      * Long-term frame idx
100      * TODO: store in frame_num
101      */
102     WORD32 i4_long_term_frame_idx;
103 
104     /*
105      *  0: Top Field
106      *  1: Bottom Field
107      */
108     WORD8   i1_field_type;
109 
110     /**
111      * buffer ID from frame buffer manager
112      */
113     WORD32 i4_buf_id;
114 
115 } pic_buf_t;
116 
117 
118 /**
119  * Reference List
120  */
121 typedef struct
122 {
123     void *pv_pic_buf;
124 
125     void *pv_mv_buf;
126 
127 } ref_list_t;
128 
129 
130 /**
131  * Motion vector
132  */
133 typedef struct
134 {
135     /**
136      * Horizontal Motion Vector
137      */
138     WORD16 i2_mvx;
139 
140     /**
141      * Vertical Motion Vector
142      */
143     WORD16 i2_mvy;
144 } mv_t;
145 
146 /*****************************************************************************/
147 /* Following results in packed 48 bit structure. If mv_t included            */
148 /*  ref_pic_buf_id, then 8 bits will be wasted for each mv for aligning.     */
149 /*  Also using mv_t as elements directly instead of a pointer to l0 and l1   */
150 /*  mvs. Since pointer takes 4 bytes and MV itself is 4 bytes. It does not   */
151 /*  really help using pointers.                                              */
152 /*****************************************************************************/
153 
154 /**
155  * PU Motion Vector info
156  */
157 typedef struct
158 {
159     /**
160      *  L0 Motion Vector
161      */
162     mv_t s_l0_mv;
163 
164     /**
165      *  L1 Motion Vector
166      */
167     mv_t s_l1_mv;
168 
169     /**
170      *  L0 Ref index
171      */
172     WORD8   i1_l0_ref_idx;
173 
174     /**
175      *  L1 Ref index
176      */
177     WORD8   i1_l1_ref_idx;
178 
179     /**
180      *  L0 Ref Pic Buf ID
181      */
182     WORD8 i1_l0_ref_pic_buf_id;
183 
184     /**
185      *  L1 Ref Pic Buf ID
186      */
187     WORD8 i1_l1_ref_pic_buf_id;
188 
189 } pu_mv_t;
190 
191 /**
192  * PU information
193  */
194 typedef struct
195 {
196 
197     /**
198      *  Motion Vectors
199      */
200     pu_mv_t     s_mv;
201 
202     /**
203      *  PU X position in terms of min PU (4x4) units
204      */
205     UWORD32     b2_pos_x        : 2;
206 
207     /**
208      *  PU Y position in terms of min PU (4x4) units
209      */
210     UWORD32     b2_pos_y        : 2;
211 
212     /**
213      *  PU width in pixels = (b2_wd + 1) << 2
214      */
215     UWORD32     b2_wd           : 2;
216 
217     /**
218      *  PU height in pixels = (b2_ht + 1) << 2
219      */
220     UWORD32     b2_ht           : 2;
221 
222     /**
223      *  Intra or Inter flag for each partition - 0 or 1
224      */
225     UWORD32     b1_intra_flag   : 1;
226 
227     /**
228      *  PRED_L0, PRED_L1, PRED_BI
229      */
230     UWORD32     b2_pred_mode    : 2;
231 
232 } pu_t;
233 
234 
235 /**
236  * MB information to be stored for entire frame
237  */
238 typedef struct
239 {
240     /**
241      * Transform sizes 0: 4x4, 1: 8x8,
242      */
243     UWORD32     b1_trans_size : 1;
244 
245     /**
246      * CBP - 4 bits for Y, 1 for U and 1 for V
247      */
248     UWORD32     b6_cbp: 6;
249 
250     /**
251      * Intra pred sizes  0: 4x4, 1: 8x8, 2: 16x16
252      */
253     UWORD32     b2_intra_pred_size : 2;
254 
255     /**
256      * Flag to signal if the current MB is IPCM
257      */
258     UWORD32     b1_ipcm : 1;
259 
260 }mb_t;
261 
262 /*****************************************************************************/
263 /* Info from last TU row of MB is stored in a row level neighbour buffer    */
264 /* , which will be used for Boundary Strength computation                    */
265 /*****************************************************************************/
266 /**
267  *  MB neighbor info
268  */
269 typedef struct
270 {
271     /**
272      *  Slice index of the mb
273      */
274     UWORD16 u2_slice_idx;
275 
276     /*************************************************************************/
277     /* CBF of bottom TU row (replicated in 4 pixel boundary)                 */
278     /* MSB contains CBF of first TU in the last row and LSB contains CBF     */
279     /* of last TU in the last row                                            */
280     /*************************************************************************/
281     /**
282      * CBF of bottom TU row
283      */
284     UWORD16 u2_packed_cbf;
285 
286     /*************************************************************************/
287     /* QP of bottom TU row (replicated at 8 pixel boundary (Since QP can     */
288     /* not change at less than min CU granularity)                           */
289     /*************************************************************************/
290     /**
291      * QP of bottom TU row
292      */
293     UWORD8 u1_qp;
294 
295 } mb_top_ny_info_t;
296 
297 /**
298  *  MB level context
299  */
300 typedef struct _mb_ctxt_t
301 {
302     /*************************************************************************/
303     /* Tile boundary can be detected by looking at tile start x and tile     */
304     /* start y.  And based on the tile, slice and frame boundary the         */
305     /* following will be initialized.                                        */
306     /*************************************************************************/
307     /**
308      *  Pointer to left MB
309      */
310     /*  If not available, this will be set to NULL   */
311     struct _mb_ctxt_t *ps_mb_left;
312 
313     /**
314      *  Pointer to top-left MB
315      */
316     /* If not available, this will be set to NULL   */
317     mb_top_ny_info_t *ps_mb_ny_topleft;
318 
319     /**
320      *  Pointer to top MB
321      */
322     /* If not available, this will be set to NULL  */
323     mb_top_ny_info_t *ps_mb_ny_top;
324 
325     /**
326      *  Pointer to top-right MB
327      */
328     /* If not available, this will be set to NULL */
329     mb_top_ny_info_t *ps_mb_ny_topright;
330 
331     /*************************************************************************/
332     /* Pointer to PU data.                                                   */
333     /* This points to a MV Bank stored at frame level. Though this           */
334     /* pointer can be derived by reading offset at frame level, it is        */
335     /* stored here for faster access. Can be removed if storage of MB       */
336     /* structure is critical                                                 */
337     /*************************************************************************/
338     /**
339      * Pointer to PU data
340      */
341     pu_t *ps_pu;
342 
343     /*************************************************************************/
344     /* Pointer to a PU map stored at frame level,                            */
345     /* Though this pointer can be derived by multiplying MB address with    */
346     /* number of minTUs in a MB, it is stored here for faster access.       */
347     /* Can be removed if storage of MB structure is critical                */
348     /*************************************************************************/
349     /**
350      * Pointer to a PU map stored at frame level
351      */
352     UWORD8 *pu1_pu_map;
353 
354     /**
355      *  Number of TUs filled in as_tu
356      */
357     /*************************************************************************/
358     /* Having the first entry as 32 bit data, helps in keeping each of       */
359     /* the structures aligned to 32 bits at MB level                        */
360     /*************************************************************************/
361     WORD32 i4_tu_cnt;
362 
363     /**
364      *  Pointer to transform coeff data
365      */
366     /*************************************************************************/
367     /* Following format is repeated for every coded TU                       */
368     /* Luma Block                                                            */
369     /* num_coeffs      : 16 bits                                             */
370     /* zero_cols       : 8 bits ( 1 bit per 4 columns)                       */
371     /* sig_coeff_map   : ((TU Size * TU Size) + 31) >> 5 number of WORD32s   */
372     /* coeff_data      : Non zero coefficients                               */
373     /* Cb Block (only for last TU in 4x4 case else for every luma TU)        */
374     /* num_coeffs      : 16 bits                                             */
375     /* zero_cols       : 8 bits ( 1 bit per 4 columns)                       */
376     /* sig_coeff_map   : ((TU Size * TU Size) + 31) >> 5 number of WORD32s   */
377     /* coeff_data      : Non zero coefficients                               */
378     /* Cr Block (only for last TU in 4x4 case else for every luma TU)        */
379     /* num_coeffs      : 16 bits                                             */
380     /* zero_cols       : 8 bits ( 1 bit per 4 columns)                       */
381     /* sig_coeff_map   : ((TU Size * TU Size) + 31) >> 5 number of WORD32s   */
382     /* coeff_data      : Non zero coefficients                               */
383     /*************************************************************************/
384     void            *pv_coeff_data;
385 
386     /**
387      *  Slice to which the MB belongs to
388      */
389     WORD32 i4_slice_idx;
390 
391     /**
392      *  MB column position
393      */
394     WORD32 i4_pos_x;
395 
396     /**
397      *  MB row position
398      */
399     WORD32 i4_pos_y;
400 
401     /**
402      *  Number of PUs filled in ps_pu
403      */
404     WORD32 i4_pu_cnt;
405 
406     /**
407      *  Index of current PU being processed in ps_pu
408      */
409     /*  Scratch variable set to 0 at the start of any PU processing function */
410     WORD32 i4_pu_idx;
411 
412     /**
413      * Vertical Boundary strength
414      */
415     /* Two bits per edge.
416     Stored in format. BS[15] | BS[14] | .. |BS[0]*/
417     UWORD32 *pu4_vert_bs;
418 
419     /**
420      * Horizontal Boundary strength
421      */
422 
423     /* Two bits per edge.
424     Stored in format. BS[15] | BS[14] | .. |BS[0]*/
425     UWORD32 *pu4_horz_bs;
426 
427     /**
428      *  Qp array stored for each 8x8 pixels
429      */
430     UWORD8 *pu1_qp;
431 
432     /**
433      *  Pointer to current frame's pu_t array
434      */
435     pu_t *ps_frm_pu;
436 
437     /**
438      * Pointer to current frame's pu_t index array, which stores starting index
439      * of pu_t for every MB
440      */
441     UWORD32 *pu4_frm_pu_idx;
442 
443     /**
444      *  Pointer to current frame's pu map array
445      */
446     UWORD8 *pu1_frm_pu_map;
447 
448     /*************************************************************************/
449     /* Need to add encoder specific elements for identifying the order of    */
450     /* coding for CU, TU and PU if any                                       */
451     /*************************************************************************/
452 } mb_ctxt_t;
453 
454 /*************************************************************************/
455 /* The following describes how each of the CU cases are handled          */
456 /*************************************************************************/
457 
458 /*************************************************************************/
459 /* For SKIP MB                                                           */
460 /* One Inter PU with appropriate MV                                      */
461 /* One TU which says CBP is zero and size is 16x16                       */
462 /*************************************************************************/
463 
464 /*************************************************************************/
465 /* For Inter MB                                                          */
466 /* M Inter PU with appropriate MVs (M between 1 to 4)                    */
467 /* Number of TUs derived based on transform size                         */
468 /*************************************************************************/
469 
470 /*************************************************************************/
471 /* For Intra MB                                                          */
472 /* Number of TUs derived based on transform size                         */
473 /* N Intra Modes are signaled along with coeff data at the start        */
474 /*************************************************************************/
475 
476 /*************************************************************************/
477 /* For Intra PCM MB                                                      */
478 /* One TU which says ipcm is 1                                           */
479 /*************************************************************************/
480 
481 
482 
483 /**
484  * Structure to hold quantization parameters of an mb
485  */
486 typedef struct
487 {
488 
489     /*
490      * mb qp
491      */
492     UWORD8 u1_mb_qp;
493 
494     /*
495      * mb qp / 6
496      */
497     UWORD8 u1_qp_div;
498 
499     /*
500      * mb qp mod 6
501      */
502     UWORD8 u1_qp_rem;
503 
504     /*
505      * QP bits
506      */
507     UWORD8  u1_qbits;
508 
509     /*
510      * forward scale matrix
511      */
512     const UWORD16 *pu2_scale_mat;
513 
514     /*
515      * threshold matrix for quantization
516      */
517     UWORD16 *pu2_thres_mat;
518 
519     /*
520      * Threshold to compare the sad with
521      */
522     UWORD16 *pu2_sad_thrsh;
523 
524     /*
525      * qp dependent rounding constant
526      */
527     UWORD32 u4_dead_zone;
528 
529     /*
530      *  inverse scale matrix
531      */
532     const UWORD16 *pu2_iscale_mat;
533 
534     /*
535      * Weight matrix in iquant
536      */
537     UWORD16 *pu2_weigh_mat;
538 
539 }quant_params_t;
540 
541 /**
542  * Structure to hold Profile tier level info for a given layer
543  */
544 
545 typedef struct
546 {
547     /**
548      *  NAL unit type
549      */
550     WORD8 i1_nal_unit_type;
551 
552     /**
553      * NAL ref idc
554      */
555     WORD8 i1_nal_ref_idc;
556 
557 
558 } nal_header_t;
559 
560 /**
561  * HRD parameters Info
562  */
563 typedef struct
564 {
565     /**
566      * Specifies the number of alternative CPB specifications in the
567      * bitstream
568      */
569     UWORD8 u1_cpb_cnt_minus1;
570 
571     /**
572     * (together with bit_rate_value_minus1) specifies the
573     * maximum input bit rate of the i-th CPB
574     */
575     UWORD32 u4_bit_rate_scale;
576 
577     /**
578     * (together with cpb_size_du_value_minus1) specifies
579     * CPB size of the i-th CPB when the CPB operates
580     * at the access unit level
581     */
582     UWORD32 u4_cpb_size_scale;
583 
584     /**
585      *  (together with bit_rate_scale) specifies the
586      *  maximum input bit rate for the i-th CPB
587      */
588     UWORD32 au4_bit_rate_value_minus1[32];
589     /**
590      *  together with cpb_size_scale to specify the
591      *  CPB size when the CPB operates at the access unit level.
592      */
593     UWORD32 au4_cpb_size_value_minus1[32];
594 
595     /**
596      * if 1, specifies that the HSS operates in a constant bit rate (CBR) mode
597      * if 0, specifies that the HSS operates in a intermittent bit rate (CBR) mode
598      */
599     UWORD8  au1_cbr_flag[32];
600 
601 
602     /**
603     * specifies the length, in bits for initial cpb delay (nal/vcl)syntax in bp sei
604     */
605     UWORD8  u1_initial_cpb_removal_delay_length_minus1;
606 
607     /**
608     * specifies the length, in bits for the cpb delay syntax in pt_sei
609     */
610     UWORD8  u1_cpb_removal_delay_length_minus1;
611 
612     /**
613     * specifies the length, in bits, of the pic_dpb_output_delay syntax element in the pt SEI message
614     */
615     UWORD8  u1_dpb_output_delay_length_minus1;
616 
617     /**
618      * Specifies length of the time offset parameter
619      */
620     UWORD8  u1_time_offset_length;
621 
622 }hrd_params_t;
623 
624 
625 /**
626  * Structure to hold VUI parameters Info
627  */
628 typedef struct
629 {
630     /**
631     *  indicates the presence of aspect_ratio
632     */
633     UWORD8 u1_aspect_ratio_info_present_flag;
634 
635     /**
636     *  specifies the aspect ratio of the luma samples
637     */
638     UWORD8 u1_aspect_ratio_idc;
639 
640     /**
641     *  width of the luma samples. user dependent
642     */
643     UWORD16 u2_sar_width;
644 
645     /**
646     *  Height of the luma samples. user dependent
647     */
648     UWORD16 u2_sar_height;
649 
650     /**
651     * if 1, specifies that the overscan_appropriate_flag is present
652     * if 0, the preferred display method for the video signal is unspecified
653     */
654     UWORD8 u1_overscan_info_present_flag;
655 
656     /**
657     * if 1,indicates that the cropped decoded pictures output
658     * are suitable for display using overscan
659     */
660     UWORD8 u1_overscan_appropriate_flag;
661 
662     /**
663     * if 1 specifies that video_format, video_full_range_flag and
664     * colour_description_present_flag are present
665     */
666     UWORD8 u1_video_signal_type_present_flag;
667 
668     /**
669     * pal, secam, ntsc, ...
670     */
671     UWORD8 u1_video_format;
672 
673     /**
674     * indicates the black level and range of the luma and chroma signals
675     */
676     UWORD8 u1_video_full_range_flag;
677 
678     /**
679     * if 1,to 1 specifies that colour_primaries, transfer_characteristics
680     * and matrix_coefficients are present
681     */
682     UWORD8 u1_colour_description_present_flag;
683 
684     /**
685     * indicates the chromaticity coordinates of the source primaries
686     */
687     UWORD8 u1_colour_primaries;
688 
689     /**
690     * indicates the opto-electronic transfer characteristic of the source picture
691     */
692     UWORD8 u1_transfer_characteristics;
693 
694     /**
695     * the matrix coefficients used in deriving luma and chroma signals
696     * from the green, blue, and red primaries
697     */
698     UWORD8 u1_matrix_coefficients;
699 
700     /**
701     * if 1, specifies that chroma_sample_loc_type_top_field and
702     * chroma_sample_loc_type_bottom_field are present
703     */
704     UWORD8 u1_chroma_loc_info_present_flag;
705 
706     /**
707     * location of chroma samples
708     */
709     UWORD8 u1_chroma_sample_loc_type_top_field;
710 
711     UWORD8 u1_chroma_sample_loc_type_bottom_field;
712 
713     /**
714     *   Indicates the presence of the
715     *   num_units_in_ticks, time_scale flag
716     */
717     UWORD8 u1_vui_timing_info_present_flag;
718 
719     /**
720     *   Number of units that
721     *   correspond to one increment of the
722     *   clock. Indicates the  resolution
723     */
724     UWORD32 u4_vui_num_units_in_tick;
725 
726     /**
727     *   The number of time units that pass in one second
728     */
729     UWORD32 u4_vui_time_scale;
730 
731     /**
732      *   Flag indicating that time difference between two frames is a constant
733      */
734     UWORD8 u1_fixed_frame_rate_flag;
735 
736     /**
737      *   Indicates the presence of NAL HRD parameters
738      */
739     UWORD8 u1_nal_hrd_parameters_present_flag;
740 
741     /**
742      *   NAL level HRD parameters
743      */
744     hrd_params_t s_nal_hrd_parameters;
745 
746     /**
747      *   Indicates the presence of VCL HRD parameters
748      */
749     UWORD8 u1_vcl_hrd_parameters_present_flag;
750 
751     /**
752      *   VCL level HRD parameters
753      */
754     hrd_params_t s_vcl_hrd_parameters;
755 
756     /**
757      *  Specifies the HRD operational mode
758      */
759     UWORD8 u1_low_delay_hrd_flag;
760 
761     /**
762      * Indicates presence of SEI messages which include pic_struct syntax element
763      */
764     UWORD8 u1_pic_struct_present_flag;
765 
766     /**
767     * 1, specifies that the following cvs bitstream restriction parameters are present
768     */
769     UWORD8 u1_bitstream_restriction_flag;
770 
771     /**
772     * if 0, indicates that no pel outside the pic boundaries and
773     * no sub-pels derived using pels outside the pic boundaries is used for inter prediction
774     */
775     UWORD8 u1_motion_vectors_over_pic_boundaries_flag;
776 
777     /**
778     * Indicates a number of bytes not exceeded by the sum of the sizes of the VCL NAL units
779     * associated with any coded picture
780     */
781     UWORD8 u1_max_bytes_per_pic_denom;
782 
783     /**
784     *  Indicates an upper bound for the number of bits of coding_unit() data
785     */
786     UWORD8 u1_max_bits_per_mb_denom;
787 
788     /**
789     * Indicate the maximum absolute value of a decoded horizontal MV component
790     * in quarter-pel luma units
791     */
792     UWORD8 u1_log2_max_mv_length_horizontal;
793 
794     /**
795     * Indicate the maximum absolute value of a decoded vertical MV component
796     * in quarter-pel luma units
797     */
798     UWORD8 u1_log2_max_mv_length_vertical;
799 
800     /**
801      *  Max number of frames that are not synchronized in display and decode order
802      */
803     UWORD8 u1_num_reorder_frames;
804 
805     /**
806      * specifies required size of the HRD DPB in units of frame buffers.
807      */
808      UWORD8 u1_max_dec_frame_buffering;
809 
810 } vui_t;
811 
812 
813 /**
814  * Structure to hold SPS info
815  */
816 typedef struct
817 {
818     /**
819      *  profile_idc
820      */
821     UWORD8 u1_profile_idc;
822 
823     /** constraint_set0_flag */
824     UWORD8 u1_constraint_set0_flag;
825 
826     /** constraint_set1_flag */
827     UWORD8 u1_constraint_set1_flag;
828 
829     /** constraint_set2_flag */
830     UWORD8 u1_constraint_set2_flag;
831 
832     /** constraint_set3_flag */
833     UWORD8 u1_constraint_set3_flag;
834 
835     /**
836      *  level_idc
837      */
838     UWORD8 u1_level_idc;
839 
840     /**
841      *  seq_parameter_set_id
842      */
843     UWORD8 u1_sps_id;
844 
845 
846     /**
847      *  chroma_format_idc
848      */
849     UWORD8 u1_chroma_format_idc;
850 
851     /**
852      *  residual_colour_transform_flag
853      */
854     WORD8 i1_residual_colour_transform_flag;
855 
856     /**
857      *  bit_depth_luma_minus8
858      */
859     WORD8 i1_bit_depth_luma;
860 
861     /**
862      *  bit_depth_chroma_minus8
863      */
864     WORD8 i1_bit_depth_chroma;
865 
866     /**
867      *  qpprime_y_zero_transform_bypass_flag
868      */
869     WORD8 i1_qpprime_y_zero_transform_bypass_flag;
870 
871     /**
872      *  seq_scaling_matrix_present_flag
873      */
874     WORD8 i1_seq_scaling_matrix_present_flag;
875 
876     /**
877      *  seq_scaling_list_present_flag
878      */
879     WORD8 ai1_seq_scaling_list_present_flag[8];
880 
881     /**
882      *  log2_max_frame_num_minus4
883      */
884     WORD8 i1_log2_max_frame_num;
885 
886     /**
887      *  MaxFrameNum in the standard
888      *  1 << i1_log2_max_frame_num
889      */
890     WORD32 i4_max_frame_num;
891 
892     /**
893      *  pic_order_cnt_type
894      */
895     WORD8 i1_pic_order_cnt_type;
896 
897     /**
898      *  log2_max_pic_order_cnt_lsb_minus4
899      */
900     WORD8 i1_log2_max_pic_order_cnt_lsb;
901 
902     /**
903      * MaxPicOrderCntLsb in the standard.
904      * 1 << log2_max_pic_order_cnt_lsb_minus4
905      */
906     WORD32 i4_max_pic_order_cnt_lsb;
907 
908     /**
909      *  delta_pic_order_always_zero_flag
910      */
911     WORD8 i1_delta_pic_order_always_zero_flag;
912 
913     /**
914      *  offset_for_non_ref_pic
915      */
916     WORD32 i4_offset_for_non_ref_pic;
917 
918     /**
919      *  offset_for_top_to_bottom_field
920      */
921     WORD32 i4_offset_for_top_to_bottom_field;
922 
923     /**
924      *  num_ref_frames_in_pic_order_cnt_cycle
925      */
926     UWORD8 u1_num_ref_frames_in_pic_order_cnt_cycle;
927 
928     /**
929      * Offset_for_ref_frame
930      */
931     WORD32 ai4_offset_for_ref_frame[256];
932 
933     /**
934      *  max_num_ref_frames
935      */
936     UWORD8 u1_max_num_ref_frames;
937 
938     /**
939      *  gaps_in_frame_num_value_allowed_flag
940      */
941     WORD8 i1_gaps_in_frame_num_value_allowed_flag;
942 
943     /**
944      *  pic_width_in_mbs_minus1
945      */
946     WORD16 i2_pic_width_in_mbs_minus1;
947 
948     /**
949      *  pic_height_in_map_units_minus1
950      */
951     WORD16 i2_pic_height_in_map_units_minus1;
952 
953     /**
954      *  frame_mbs_only_flag
955      */
956     WORD8 i1_frame_mbs_only_flag;
957 
958     /**
959      *  mb_adaptive_frame_field_flag
960      */
961     WORD8 i1_mb_adaptive_frame_field_flag;
962 
963     /**
964      *  direct_8x8_inference_flag
965      */
966     WORD8 i1_direct_8x8_inference_flag;
967 
968     /**
969      *  frame_cropping_flag
970      */
971     WORD8 i1_frame_cropping_flag;
972 
973     /**
974      *  frame_crop_left_offset
975      */
976     WORD16 i2_frame_crop_left_offset;
977 
978     /**
979      *  frame_crop_right_offset
980      */
981     WORD16 i2_frame_crop_right_offset;
982 
983     /**
984      *  frame_crop_top_offset
985      */
986     WORD16 i2_frame_crop_top_offset;
987 
988     /**
989      *  frame_crop_bottom_offset
990      */
991     WORD16 i2_frame_crop_bottom_offset;
992 
993     /**
994      *  vui_parameters_present_flag
995      */
996     WORD8 i1_vui_parameters_present_flag;
997 
998     /**
999      * vui_parameters_Structure_info
1000      */
1001     vui_t s_vui_parameters;
1002 
1003     /**
1004      * Flag to give status of SPS structure
1005      */
1006     WORD8 i1_sps_valid;
1007 
1008     /**
1009      * Coded Picture width
1010      */
1011     WORD32 i2_pic_wd;
1012 
1013     /**
1014      * Coded Picture height
1015      */
1016     WORD32 i2_pic_ht;
1017 
1018     /**
1019      *  Picture width in MB units
1020      */
1021 
1022     WORD16 i2_pic_wd_in_mb;
1023 
1024     /**
1025      *  Picture height in MB units
1026      */
1027 
1028     WORD16 i2_pic_ht_in_mb;
1029 
1030     /**
1031      * useDefaultScalingMatrixFlag
1032      */
1033     WORD8 ai1_use_default_scaling_matrix_flag[8];
1034 
1035     /**
1036      * 4x4 Scaling lists after inverse zig zag scan
1037      */
1038     UWORD16 au2_4x4_weight_scale[6][16];
1039 
1040     /**
1041      * 4x4 Scaling lists after inverse zig zag scan
1042      */
1043     UWORD16 au2_8x8_weight_scale[2][64];
1044 
1045 } sps_t;
1046 
1047 
1048 /**
1049  * Structure to hold PPS info
1050  */
1051 typedef struct
1052 {
1053     /**
1054      *  pic_parameter_set_id
1055      */
1056     UWORD8 u1_pps_id;
1057 
1058     /**
1059      *  seq_parameter_set_id
1060      */
1061     UWORD8 u1_sps_id;
1062 
1063     /**
1064      *   Entropy coding : 0-VLC; 1 - CABAC
1065      */
1066     UWORD8 u1_entropy_coding_mode_flag;
1067 
1068     /*
1069      * Pic order present flag
1070      */
1071     UWORD8 u1_pic_order_present_flag;
1072 
1073     /*
1074      * Number of slice groups
1075      */
1076     UWORD8 u1_num_slice_groups;
1077 
1078     /*
1079      * Slice group map type
1080      */
1081     UWORD8 u1_slice_group_map_type;
1082 
1083     /*
1084      * Maximum reference picture index in the reference list 0 : range [0 - 31]
1085      */
1086     WORD8 i1_num_ref_idx_l0_default_active;
1087 
1088     /*
1089      * Maximum reference picture index in the reference list 1 : range [0 - 31]
1090      */
1091     WORD8 i1_num_ref_idx_l1_default_active;
1092 
1093     /**
1094      *  weighted_pred_flag
1095      */
1096     WORD8 i1_weighted_pred_flag;
1097 
1098     /**
1099      *  weighted_bipred_flag
1100      */
1101     WORD8 i1_weighted_bipred_idc;
1102 
1103     /**
1104      *  pic_init_qp_minus26
1105      */
1106     WORD8 i1_pic_init_qp;
1107 
1108     /**
1109      *  pic_init_qs_minus26
1110      */
1111     WORD8 i1_pic_init_qs;
1112 
1113     /*
1114      * Chroma QP offset w.r.t QPY {-12,12}
1115      */
1116     WORD8  i1_chroma_qp_index_offset;
1117 
1118     /**
1119      *  deblocking_filter_control_present_flag
1120      */
1121     WORD8 i1_deblocking_filter_control_present_flag;
1122 
1123     /**
1124      *  constrained_intra_pred_flag
1125      */
1126     WORD8 i1_constrained_intra_pred_flag;
1127 
1128     /**
1129      *  redundant_pic_cnt_present_flag
1130      */
1131     WORD8 i1_redundant_pic_cnt_present_flag;
1132 
1133     /**
1134      *  transform_8x8_mode_flag
1135      */
1136     WORD8 i1_transform_8x8_mode_flag;
1137 
1138     /**
1139      *  pic_scaling_matrix_present_flag
1140      */
1141     WORD8 i1_pic_scaling_matrix_present_flag;
1142 
1143     /*
1144      *  Second chroma QP offset
1145      */
1146     WORD8  i1_second_chroma_qp_index_offset;
1147 
1148 
1149     /**
1150      * useDefaultScalingMatrixFlag
1151      */
1152     WORD8 ai1_use_default_scaling_matrix_flag[8];
1153 
1154     /**
1155      * 4x4 Scaling lists after inverse zig zag scan
1156      */
1157     UWORD16 au2_4x4_weight_scale[6][16];
1158 
1159     /**
1160      * 4x4 Scaling lists after inverse zig zag scan
1161      */
1162     UWORD16 au2_8x8_weight_scale[2][64];
1163 
1164 
1165     /**
1166      *  pic_scaling_list_present_flag
1167      */
1168     WORD8 ai1_pic_scaling_list_present_flag[8];
1169 
1170     /**
1171      * Flag to give status of PPS structure
1172      */
1173     WORD8   i1_pps_valid;
1174 
1175 
1176 } pps_t;
1177 
1178 /**
1179  * MMCO commands and params.
1180  */
1181 typedef struct
1182 {
1183     /* memory management control operation command */
1184     UWORD8 u1_memory_management_control_operation;
1185 
1186     /*
1187      * Contains difference of pic nums of short-term pic/frame
1188      * 1. To signal it as "unused for reference" if mmco = 1
1189      * 2. To signal it as "used for long-term reference" if mmco = 3
1190      */
1191     UWORD32 u4_difference_of_pic_nums_minus1;
1192 
1193     /* Long-term pic num to be set as "unused for reference" */
1194     UWORD8 u1_long_term_pic_num;
1195 
1196     /*
1197      * Assign a long-term idx to a picture as follows
1198      * 1. Assign to a short-term pic if mmco = 3
1199      * 2. Assign to the current pic if mmco = 6
1200      */
1201     UWORD8 u1_long_term_frame_idx;
1202 
1203     /*
1204      * The max long-term idx. The long-term pics having idx above
1205      * are set as "unused for reference
1206      */
1207     UWORD8 u1_max_long_term_frame_idx_plus1;
1208 
1209 }mmco_prms_t;
1210 
1211 /**
1212  * Structure to hold Reference picture list modification info
1213  */
1214 typedef struct
1215 {
1216     /* ref_pic_list_modification_flag_l0 */
1217     WORD8 i1_ref_pic_list_modification_flag_l0;
1218 
1219     /* Modification required in list0 */
1220     WORD8 i1_modification_of_pic_nums_idc_l0[MAX_MODICATION_IDC];
1221 
1222     /*
1223      * The absolute difference between the picture number of
1224      * the picture being moved to the current index in
1225      * list0 and the picture number prediction value
1226      */
1227     UWORD32 u4_abs_diff_pic_num_minus1_l0[MAX_MODICATION_IDC];
1228 
1229     /*
1230      * The long-term picture number of the picture being moved
1231      * to the current index in list0
1232      */
1233     UWORD8 u1_long_term_pic_num_l0[MAX_MODICATION_IDC];
1234 
1235     /* ref_pic_list_modification_flag_l1 */
1236     WORD8 i1_ref_pic_list_modification_flag_l1;
1237 
1238     /* Modification required in list1 */
1239     WORD8 i1_modification_of_pic_nums_idc_l1[MAX_MODICATION_IDC];
1240 
1241     /*
1242      * The absolute difference between the picture number of
1243      * the picture being moved to the current index in
1244      * list1 and the picture number prediction value
1245      */
1246     UWORD32 u4_abs_diff_pic_num_minus1_l1[MAX_MODICATION_IDC];
1247 
1248     /*
1249      * The long-term picture number of the picture being moved
1250      * to the current index in list1
1251      */
1252    UWORD8 u1_long_term_pic_num_l1[MAX_MODICATION_IDC];
1253 }rplm_t;
1254 
1255 /**
1256  * Structure to hold Slice Header info
1257  */
1258 typedef struct
1259 {
1260 
1261     /*
1262      *  nal_unit_type
1263      */
1264     WORD8  i1_nal_unit_type;
1265 
1266     /*
1267      *  nal_unit_idc
1268      */
1269     WORD8  i1_nal_unit_idc;
1270 
1271     /*
1272      *  first_mb_in_slice
1273      */
1274     UWORD16   u2_first_mb_in_slice;
1275 
1276     /*
1277      *  slice_type
1278      */
1279     UWORD8   u1_slice_type;
1280 
1281     /*
1282      *  pic_parameter_set_id
1283      */
1284     UWORD8   u1_pps_id;
1285 
1286     /*
1287      *  frame_num
1288      */
1289     WORD32 i4_frame_num;
1290 
1291     /*
1292      *  field_pic_flag
1293      */
1294     WORD8   i1_field_pic_flag;
1295 
1296     /*
1297      *  bottom_field_flag
1298      */
1299     WORD8   i1_bottom_field_flag;
1300 
1301     /*
1302      *  second_field
1303      */
1304     WORD8   i1_second_field_flag;
1305 
1306     /*
1307      *  idr_pic_id
1308      */
1309     UWORD16 u2_idr_pic_id ;
1310 
1311     /*
1312      *  pic_order_cnt_lsb
1313      */
1314     UWORD16 i4_pic_order_cnt_lsb;
1315 
1316     /*
1317      *  delta_pic_order_cnt_bottom
1318      */
1319     WORD32  i4_delta_pic_order_cnt_bottom;
1320 
1321     /*
1322      *  delta_pic_order_cnt
1323      */
1324     WORD32   ai4_delta_pic_order_cnt[2];
1325 
1326     /*
1327      *  redundant_pic_cnt
1328      */
1329     UWORD8   u1_redundant_pic_cnt;
1330 
1331     /*
1332      *  direct_spatial_mv_pred_flag
1333      */
1334     UWORD8   u1_direct_spatial_mv_pred_flag;
1335 
1336     /*
1337      *  num_ref_idx_active_override_flag
1338      */
1339     UWORD8   u1_num_ref_idx_active_override_flag;
1340 
1341     /*
1342      *  num_ref_idx_l0_active
1343      */
1344     WORD8   i1_num_ref_idx_l0_active;
1345 
1346     /*
1347      *  num_ref_idx_l1_active_minus1
1348      */
1349     WORD8   i1_num_ref_idx_l1_active;
1350 
1351     /*
1352      * ref_pic_list_reordering_flag_l0
1353      */
1354     UWORD8  u1_ref_idx_reordering_flag_l0;
1355 
1356     /*
1357      * ref_pic_list_reordering_flag_l1
1358      */
1359     UWORD8  u1_ref_idx_reordering_flag_l1;
1360 
1361     /**
1362      *  Reference prediction list modification
1363      */
1364     rplm_t s_rplm;
1365 
1366     /**
1367      * L0 Reference pic lists
1368      */
1369     ref_list_t as_ref_pic_list0[MAX_DPB_SIZE];
1370 
1371     /**
1372      * L1 Reference pic lists
1373      */
1374     ref_list_t as_ref_pic_list1[MAX_DPB_SIZE];
1375 
1376     /*
1377      * no_output_of_prior_pics_flag
1378      */
1379     UWORD8   u1_no_output_of_prior_pics_flag;
1380 
1381     /*
1382      * long_term_reference_flag
1383      */
1384     UWORD8   u1_long_term_reference_flag;
1385 
1386     /*
1387      * adaptive_ref_pic_marking_mode_flag
1388      */
1389     UWORD8   u1_adaptive_ref_pic_marking_mode_flag;
1390 
1391     /*
1392      * Array to structures to store mmco commands
1393      * and parameters.
1394      */
1395     mmco_prms_t as_mmco_prms[MAX_MMCO_COMMANDS];
1396 
1397     /*
1398      *  entropy_coding_mode_flag
1399      */
1400     WORD8   u1_entropy_coding_mode_flag;
1401 
1402     /*
1403      *  cabac_init_idc
1404      */
1405     WORD8   i1_cabac_init_idc;
1406 
1407     /*
1408      *  i1_slice_qp
1409      */
1410     WORD8   i1_slice_qp;
1411 
1412     /*
1413      *  sp_for_switch_flag
1414      */
1415     UWORD8   u1_sp_for_switch_flag;
1416 
1417     /*
1418      *  slice_qs_delta
1419      */
1420     UWORD8   u1_slice_qs;
1421 
1422     /*
1423      *  disable_deblocking_filter_idc
1424      */
1425     WORD8   u1_disable_deblocking_filter_idc;
1426 
1427     /*
1428      *  slice_alpha_c0_offset_div2
1429      */
1430     WORD8   i1_slice_alpha_c0_offset_div2;
1431 
1432     /*
1433      *  slice_beta_offset_div2
1434      */
1435     WORD8   i1_slice_beta_offset_div2;
1436 
1437     /*
1438      *  num_slice_groups_minus1
1439      */
1440     WORD8   u1_num_slice_groups_minus1;
1441 
1442     /*
1443      *  slice_group_change_cycle
1444      */
1445     WORD8   u1_slice_group_change_cycle;
1446 
1447     /**
1448      * Start MB X
1449      */
1450     UWORD16 i2_mb_x;
1451 
1452     /**
1453      * Start MB Y
1454      */
1455     UWORD16 i2_mb_y;
1456 
1457     /**
1458      * Absolute POC. Contains minimum of top and bottom POC.
1459      */
1460     WORD32 i4_abs_pic_order_cnt;
1461 
1462     /**
1463      *  Absolute top POC. Contains top poc for frame or top
1464      *  field. Invalid for bottom field.
1465      */
1466     WORD32 i4_abs_top_pic_order_cnt;
1467 
1468     /**
1469      *  Absolute top POC. Contains bottom poc for frame or bottom
1470      *  field. Invalid for top field.
1471      */
1472     WORD32 i4_abs_bottom_pic_order_cnt;
1473 
1474     /** Flag signaling if the current slice is ref slice */
1475     UWORD8 i1_nal_ref_idc;
1476 
1477     /** Flag to indicate if the current slice is MBAFF Frame */
1478     UWORD8 u1_mbaff_frame_flag;
1479 
1480     /** luma_log2_weight_denom */
1481     UWORD8 u1_luma_log2_weight_denom;
1482 
1483     /** chroma_log2_weight_denom */
1484     UWORD8 u1_chroma_log2_weight_denom;
1485 
1486     /** luma_weight_l0_flag */
1487     UWORD8 au1_luma_weight_l0_flag[MAX_DPB_SIZE];
1488 
1489     /** luma_weight_l0 : (-128, 127 )is the range of weights
1490      * when weighted pred is enabled, 128 is default value */
1491     WORD16 ai2_luma_weight_l0[MAX_DPB_SIZE];
1492 
1493     /** luma_offset_l0 : (-128, 127 )is the range of offset
1494      * when weighted pred is enabled, 0 is default value */
1495     WORD8 ai1_luma_offset_l0[MAX_DPB_SIZE];
1496 
1497     /** chroma_weight_l0_flag */
1498     UWORD8 au1_chroma_weight_l0_flag[MAX_DPB_SIZE];
1499 
1500     /** chroma_weight_l0 : (-128, 127 )is the range of weights
1501      * when weighted pred is enabled, 128 is default value*/
1502     WORD16 ai2_chroma_weight_l0[MAX_DPB_SIZE][2];
1503 
1504     /** chroma_offset_l0 : (-128, 127 )is the range of offset
1505      * when weighted pred is enabled, 0 is default value*/
1506     WORD8 ai1_chroma_offset_l0[MAX_DPB_SIZE][2];
1507 
1508     /** luma_weight_l0_flag */
1509     UWORD8 au1_luma_weight_l1_flag[MAX_DPB_SIZE];
1510 
1511     /** luma_weight_l1 : (-128, 127 )is the range of weights
1512      * when weighted pred is enabled, 128 is default value */
1513     WORD16 ai2_luma_weight_l1[MAX_DPB_SIZE];
1514 
1515     /** luma_offset_l1 : (-128, 127 )is the range of offset
1516      * when weighted pred is enabled, 0 is default value */
1517     WORD8 ai1_luma_offset_l1[MAX_DPB_SIZE];
1518 
1519     /** chroma_weight_l1_flag */
1520     UWORD8 au1_chroma_weight_l1_flag[MAX_DPB_SIZE];
1521 
1522     /** chroma_weight_l1 : (-128, 127 )is the range of weights
1523      * when weighted pred is enabled, 128 is default value */
1524     WORD16 ai2_chroma_weight_l1[MAX_DPB_SIZE][2];
1525 
1526     /** chroma_offset_l1 :(-128, 127 )is the range of offset
1527      * when weighted pred is enabled, 0 is default value */
1528     WORD8 ai1_chroma_offset_l1[MAX_DPB_SIZE][2];
1529 }slice_header_t;
1530 
1531 
1532 /*****************************************************************************/
1533 /* The following can be used to type cast coefficient data that is stored    */
1534 /*  per subblock. Note that though i2_level is shown as an array that        */
1535 /*  holds 16 coefficients, only the first few entries will be valid. Next    */
1536 /*  subblocks data starts after the valid number of coefficients. Number     */
1537 /*  of non-zero coefficients will be derived using number of non-zero bits   */
1538 /*  in sig coeff map                                                         */
1539 /*****************************************************************************/
1540 
1541 /**
1542  * Structure to hold coefficient info for a 2x2 chroma DC transform
1543  */
1544 typedef struct
1545 {
1546     /**
1547      * significant coefficient map
1548      */
1549     UWORD8 u1_sig_coeff_map;
1550 
1551     /**
1552      * sub block position
1553      */
1554     UWORD8 u1_subblk_pos;
1555 
1556     /**
1557      * holds coefficients
1558      */
1559     WORD16  ai2_level[2 * 2];
1560 }tu_sblk2x2_coeff_data_t;
1561 
1562 /**
1563  * Structure to hold coefficient info for a 4x4 transform
1564  */
1565 typedef struct
1566 {
1567     /**
1568      * significant coefficient map
1569      */
1570     UWORD16 u2_sig_coeff_map;
1571 
1572     /**
1573      * sub block position
1574      */
1575     UWORD16 u2_subblk_pos;
1576 
1577     /**
1578      * holds coefficients
1579      */
1580     WORD16  ai2_level[SUBBLK_COEFF_CNT];
1581 }tu_sblk4x4_coeff_data_t;
1582 
1583 /**
1584  * Structure to hold coefficient info for a 8x8 transform
1585  */
1586 typedef struct
1587 {
1588 
1589     /**
1590      * significant coefficient map
1591      */
1592     UWORD32 au4_sig_coeff_map[2];
1593 
1594     /**
1595      * sub block position
1596      */
1597     UWORD16 u2_subblk_pos;
1598 
1599     /**
1600      * holds coefficients
1601      */
1602     WORD16  ai2_level[TRANS_SIZE_8 * TRANS_SIZE_8];
1603 }tu_blk8x8_coeff_data_t;
1604 
1605 
1606 /**
1607  * Structure to hold coefficient info for a 16x16 IPCM MB
1608  */
1609 typedef struct
1610 {
1611     /**
1612      * holds coefficients
1613      */
1614     UWORD8  au1_level[MB_SIZE * MB_SIZE * 3 / 2];
1615 }tu_ipcm_coeff_data_t;
1616 
1617 
1618 typedef struct
1619 {
1620     /**
1621      * Transform sizes 0: 4x4, 1: 8x8,
1622      */
1623     UWORD32     b1_trans_size : 1;
1624 
1625     /**
1626      * Flag to signal if the current MB is IPCM
1627      */
1628     UWORD32     b1_ipcm : 1;
1629 
1630     /**
1631      * Intra pred sizes  0: 4x4, 1: 8x8, 2: 16x16
1632      */
1633     UWORD32     b2_intra_pred_size : 2;
1634 
1635     /**
1636      * Chroma intra mode
1637      */
1638     UWORD32     b2_intra_chroma_pred_mode: 2;
1639 
1640     /**
1641      * Number of coded subblocks in the current MB, for which
1642      * tu data is sent. Maximum of 27 subblocks in the following
1643      * order.
1644      * 1 4x4 luma DC(for intra16x16),
1645      * 16 4x4 luma,
1646      * 2 2x2 chroma DC,
1647      * 8 4x4 chroma,
1648      */
1649     WORD32      b5_num_coded_sblks: 5;
1650 
1651     /**
1652      * Flag to signal if 4x4 subblock for DC values (in INTRA 16x16 MB)
1653      * is coded
1654      */
1655     UWORD32     b1_luma_dc_coded: 1;
1656 
1657     /**
1658      * Flag to signal if 4x4 subblock for DC values (in INTRA 16x16 MB)
1659      * is coded
1660      */
1661     UWORD32     b1_chroma_dc_coded: 1;
1662 
1663     /**
1664      * CSBP - 16 bits, 1 bit for each 4x4
1665      * for intra16x16 mb_type only ac coefficients are
1666      */
1667     UWORD32     b16_luma_csbp: 16;
1668 
1669     /**
1670      * CSBP - 16 bits, 1 bit for each 4x4
1671      * for intra16x16 mb_type only ac coefficients are
1672      */
1673     UWORD32     b8_chroma_csbp: 8;
1674 
1675     /**
1676      * Luma Intra pred modes,
1677      * Based on intra pred size either 16, 4 or 1 entry will be
1678      * populated below.
1679      */
1680     UWORD8     au1_luma_intra_modes[16];
1681 
1682 }intra_mb_t;
1683 
1684 
1685 typedef struct
1686 {
1687     /**
1688      * Transform sizes 0: 4x4, 1: 8x8,
1689      */
1690     UWORD8     b1_trans_size : 1;
1691 
1692 
1693     /**
1694      * Skip flag
1695      */
1696     UWORD8     b1_skip : 1;
1697 
1698 
1699     /**
1700      * Number of coded subblocks in the current MB, for which
1701      * tu data is sent. Maximum of 26 subblocks in the following
1702      * order.
1703      * 16 4x4 luma,
1704      * 2 2x2 chroma DC,
1705      * 8 4x4 chroma,
1706      */
1707     WORD32      b5_num_coded_sblks: 5;
1708 
1709     /**
1710      * CSBP - 16 bits, 1 bit for each 4x4
1711      * for intra16x16 mb_type only ac coefficients are
1712      */
1713     UWORD32     b16_luma_csbp: 16;
1714 
1715     /**
1716      * CSBP - 16 bits, 1 bit for each 4x4
1717      * for intra16x16 mb_type only ac coefficients are
1718      */
1719     UWORD32     b16_chroma_csbp: 8;
1720 }inter_mb_t;
1721 
1722 /**
1723  * Structure to hold Mastering Display Color Volume SEI
1724  */
1725 typedef struct
1726 {
1727     /**
1728      * Array to store the display_primaries_x values
1729      */
1730     UWORD16 au2_display_primaries_x[NUM_SEI_MDCV_PRIMARIES];
1731 
1732     /**
1733      * Array to store the display_primaries_y values
1734      */
1735     UWORD16 au2_display_primaries_y[NUM_SEI_MDCV_PRIMARIES];
1736 
1737     /**
1738      * Variable to store the white point x value
1739      */
1740     UWORD16 u2_white_point_x;
1741 
1742     /**
1743      * Variable to store the white point y value
1744      */
1745     UWORD16 u2_white_point_y;
1746 
1747     /**
1748      * Variable to store the max display mastering luminance value
1749      */
1750     UWORD32 u4_max_display_mastering_luminance;
1751 
1752     /**
1753      * Variable to store the min display mastering luminance value
1754      */
1755     UWORD32 u4_min_display_mastering_luminance;
1756 }sei_mdcv_params_t;
1757 
1758 
1759 /**
1760  *  Structure for Content Light Level Info
1761  *
1762  */
1763 typedef struct
1764 {
1765     /**
1766      * The maximum pixel intensity of all samples
1767      */
1768     UWORD16 u2_max_content_light_level;
1769 
1770     /**
1771      * The average pixel intensity of all samples
1772      */
1773     UWORD16 u2_max_pic_average_light_level;
1774 }sei_cll_params_t;
1775 
1776 
1777 /**
1778  * Structure to hold Ambient viewing environment SEI
1779  */
1780 typedef struct
1781 {
1782     /**
1783      * specifies the environmental illluminance of the ambient viewing environment
1784      */
1785     UWORD32 u4_ambient_illuminance;
1786 
1787     /*
1788      * specify the normalized x chromaticity coordinates of the
1789      * environmental ambient light in the nominal viewing environment
1790      */
1791     UWORD16 u2_ambient_light_x;
1792 
1793     /*
1794     * specify the normalized y chromaticity coordinates of the
1795     * environmental ambient light in the nominal viewing environment
1796     */
1797     UWORD16 u2_ambient_light_y;
1798 }sei_ave_params_t;
1799 
1800 
1801 /**
1802  * Structure to hold Content color volume SEI
1803  */
1804 typedef struct
1805 {
1806     /*
1807      * Flag used to control persistence of CCV SEI messages
1808      */
1809     UWORD8 u1_ccv_cancel_flag;
1810 
1811     /*
1812      * specifies the persistence of the CCV SEI message for the current layer
1813      */
1814     UWORD8 u1_ccv_persistence_flag;
1815 
1816     /*
1817      * specifies the presence of syntax elements ccv_primaries_x and ccv_primaries_y
1818      */
1819     UWORD8 u1_ccv_primaries_present_flag;
1820 
1821     /*
1822      * specifies that the syntax element ccv_min_luminance_value is present
1823      */
1824     UWORD8 u1_ccv_min_luminance_value_present_flag;
1825 
1826     /*
1827      * specifies that the syntax element ccv_max_luminance_value is present
1828      */
1829     UWORD8 u1_ccv_max_luminance_value_present_flag;
1830 
1831     /*
1832      * specifies that the syntax element ccv_avg_luminance_value is present
1833      */
1834     UWORD8 u1_ccv_avg_luminance_value_present_flag;
1835 
1836     /*
1837      * shall be equal to 0 in bitstreams conforming to this version. Other values
1838      * for reserved_zero_2bits are reserved for future use
1839      */
1840     UWORD8 u1_ccv_reserved_zero_2bits;
1841 
1842     /*
1843      * specify the normalized x chromaticity coordinates of the colour
1844      * primary component c of the nominal content colour volume
1845      */
1846     WORD32 ai4_ccv_primaries_x[NUM_SEI_CCV_PRIMARIES];
1847 
1848     /*
1849      * specify the normalized y chromaticity coordinates of the colour
1850      * primary component c of the nominal content colour volume
1851      */
1852     WORD32 ai4_ccv_primaries_y[NUM_SEI_CCV_PRIMARIES];
1853 
1854     /*
1855      * specifies the normalized minimum luminance value
1856      */
1857     UWORD32 u4_ccv_min_luminance_value;
1858 
1859     /*
1860      * specifies the normalized maximum luminance value
1861      */
1862     UWORD32 u4_ccv_max_luminance_value;
1863 
1864     /*
1865      * specifies the normalized average luminance value
1866      */
1867     UWORD32 u4_ccv_avg_luminance_value;
1868 }sei_ccv_params_t;
1869 
1870 
1871 /**
1872  * Structure to hold SEI parameters Info
1873  */
1874 typedef struct
1875 {
1876     /**
1877      *  mastering display color volume info present flag
1878      */
1879     UWORD8 u1_sei_mdcv_params_present_flag;
1880 
1881     /*
1882      * MDCV parameters
1883      */
1884     sei_mdcv_params_t s_sei_mdcv_params;
1885 
1886     /**
1887      * content light level info present flag
1888      */
1889     UWORD8 u1_sei_cll_params_present_flag;
1890 
1891     /*
1892      * CLL parameters
1893      */
1894     sei_cll_params_t s_sei_cll_params;
1895 
1896     /**
1897      * ambient viewing environment info present flag
1898      */
1899     UWORD8 u1_sei_ave_params_present_flag;
1900 
1901     /*
1902      * AVE parameters
1903      */
1904     sei_ave_params_t s_sei_ave_params;
1905 
1906     /**
1907      * content color volume info present flag
1908      */
1909     UWORD8 u1_sei_ccv_params_present_flag;
1910 
1911     /*
1912      * CCV parameters
1913      */
1914     sei_ccv_params_t s_sei_ccv_params;
1915 } sei_params_t;
1916 
1917 
1918 #endif /* _IH264_STRUCTS_H_ */
1919