• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /******************************************************************************
2 *
3 * Copyright (C) 2012 Ittiam Systems Pvt Ltd, Bangalore
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 
19 /**
20  *******************************************************************************
21  * @file
22  *  ihevc_structs.h
23  *
24  * @brief
25  *  Structure definitions used in the code
26  *
27  * @author
28  *  Ittiam
29  *
30  * @par List of Functions:
31  *
32  * @remarks
33  *  None
34  *
35  *******************************************************************************
36  */
37 
38 #ifndef _IHEVC_STRUCTS_H_
39 #define _IHEVC_STRUCTS_H_
40 
41 
42 /**
43  * Buffering Period SEI parameters Info
44  */
45 typedef struct
46 {
47     /**
48      * specifies SPS Id active for the coded picture assosiated
49      * with the bp message.
50      */
51     UWORD8  u1_bp_seq_parameter_set_id;
52 
53     /**
54      * Derived from Hrd parameters
55      */
56     UWORD8  u1_sub_pic_cpb_params_present_flag;
57 
58     /**
59      * specifies the presence of the initial_alt_cpb_removal_delay[ i ]
60      * and initial_alt_cpb_removal_offset[ i ] syntax elements
61      */
62     UWORD8  u1_rap_cpb_params_present_flag;
63 
64     /**
65      * cbp removal delay used in buffering period SEI
66      */
67     UWORD32 u4_cpb_delay_offset;
68 
69     /**
70      * dbp removal delay used in buffering period SEI
71      */
72     UWORD32 u4_dpb_delay_offset;
73 
74     /**
75      * concatanation flag
76      */
77     UWORD8 u1_concatenation_flag;
78 
79     /**
80      * delata cbp removal delay
81      */
82     UWORD32 u4_au_cpb_removal_delay_delta_minus1;
83 
84     /**
85      * specify the default initial CPB removal delays, respectively,
86      * for the CPB when the NAL HRD parameters are in use
87      */
88     UWORD32 au4_nal_initial_cpb_removal_delay[MAX_CPB_CNT];
89 
90     /**
91      * specify the alternate initial CPB removal delays, respectively,
92      * for the CPB when the NAL HRD parameters are in use
93      */
94     UWORD32 au4_nal_initial_alt_cpb_removal_delay[MAX_CPB_CNT];
95 
96     /**
97      * specify the initial CPB removal delay offset, respectively,
98      * for the CPB when the NAL HRD parameters are in use
99      */
100     UWORD32 au4_nal_initial_cpb_removal_delay_offset[MAX_CPB_CNT];
101 
102     /**
103      * specify the alternate initial CPB removal delays offsets, respectively,
104      * for the CPB when the NAL HRD parameters are in use
105      */
106     UWORD32 au4_nal_initial_alt_cpb_removal_delay_offset[MAX_CPB_CNT];
107 
108     /**
109      * specify the default initial CPB removal delays, respectively,
110      * for the CPB when the VCL HRD parameters are in use
111      */
112     UWORD32 au4_vcl_initial_cpb_removal_delay[MAX_CPB_CNT];
113 
114     /**
115      * specify the initial alt CPB removal delays , respectively,
116      * for the CPB when the VCL HRD parameters are in use
117      */
118     UWORD32 au4_vcl_initial_alt_cpb_removal_delay[MAX_CPB_CNT];
119 
120     /**
121      * specify the initial CPB removal delay offset, respectively,
122      * for the CPB when the VCL HRD parameters are in use
123      */
124     UWORD32 au4_vcl_initial_cpb_removal_delay_offset[MAX_CPB_CNT];
125 
126     /**
127      * specify the alternate initial CPB removal delays offsets, respectively,
128      * for the CPB when the VCL HRD parameters are in use
129      */
130     UWORD32 au4_vcl_initial_alt_cpb_removal_delay_offset[MAX_CPB_CNT];
131 
132     /**
133      * Inital CPB removal delay
134      */
135     UWORD32 u4_initial_cpb_removal_delay_length;
136 
137     /**
138      * CPB cnt for corr. sublayer
139      */
140     UWORD32 u4_cpb_cnt;
141 
142 
143     /**
144      * VBV buffer size used in buffering period SEI
145      */
146     UWORD32 u4_buffer_size_sei;
147 
148     /**
149      * Encoder buffer fullness  used in buffering period SEI
150      */
151     UWORD32 u4_dbf_sei;
152 
153     /**
154      * target bitrate used in buffering period SEI
155      */
156     UWORD32 u4_target_bit_rate_sei;
157 
158 }buf_period_sei_params_t;
159 
160 
161 /**
162  * Picture Timing SEI parameters Info
163  */
164 typedef struct
165 {
166     /**
167      * derived from vui parameters
168      */
169     UWORD8 u1_frame_field_info_present_flag;
170 
171     /**
172      * indicates whether a picture should be displayed as a
173      * frame or as one or more fields
174      */
175     UWORD32 u4_pic_struct;
176 
177     UWORD32 u4_source_scan_type;
178 
179     /**
180      * if 1, indicates if the current pic is a duplicte pic in output order
181      */
182     UWORD8 u1_duplicate_flag;
183 
184     /**
185      * specifies the number clock ticks between the nominal CPB removal time
186      * au associated with the pt SEI message and
187      * the preceding au in decoding order that contained a bp SEI message
188      */
189     UWORD32 u4_au_cpb_removal_delay_minus1;
190 
191     /**
192      * compute the DPB output time of the picture
193      */
194     UWORD32 u4_pic_dpb_output_delay;
195 
196     UWORD32 u4_pic_dpb_output_du_delay;
197 
198     /**
199      * specifies the number of decoding units in the access unit
200      * the picture timing SEI message is associated with
201      */
202     UWORD32 u4_num_decoding_units_minus1;
203 
204     /**
205      * if 1 specifies that the du_common_cpb_removal_delay_increment_minus1 is present
206      */
207     UWORD8 u1_du_common_cpb_removal_delay_flag;
208 
209     /**
210      * specifies the duration, in units of clock sub-ticks,
211      * between the nominal CPB removal times of any two consecutive decoding units
212      * in decoding order in the access unit associated with the pt_SEI message
213      */
214     UWORD32 u4_du_common_cpb_removal_delay_increment_minus1; //same as u4_du_cpb_removal_delay_increment_minus1
215 
216     /**
217      * specifies the number of NAL units in the decoding unit of the access unit
218      * the picture timing SEI message is associated with.
219      * range from 0 to (pic size in ctby - 1)
220      */
221     UWORD32 au4_num_nalus_in_du_minus1[4320 / MIN_CTB_SIZE];
222 
223     /**
224      * specifies the duration, in units of clock sub-ticks,
225      * between the nominal CPB removal times of the ( i + 1 )-th decoding unit and the i-th decoding unit,
226      * in decoding order, in the access unit associated with the pt_SEI message
227      */
228     UWORD32 au4_du_cpb_removal_delay_increment_minus1[4320 / MIN_CTB_SIZE];
229 
230 }pic_timing_sei_params_t;
231 
232 /**
233  * Structure to hold Recovery point SEI parameters Info
234  */
235 typedef struct
236 {
237     /**
238      * specifies the recovery point of output pictures in output order
239      */
240     WORD32 i4_recovery_poc_cnt;
241 
242     UWORD8 u1_exact_match_flag;
243 
244     /**
245      * indicates the presence or absence of a broken link in the NAL unit
246      * stream at the location of the recovery point SEI message
247      */
248 
249     UWORD8 u1_broken_link_flag;
250 
251 }recovery_point_sei_params_t;
252 
253 /**
254  * Structure to hold Mastering Display Colour Volume SEI
255  */
256 typedef struct
257 {
258     /**
259      * Array to store the display_primaries_x values
260      */
261     UWORD16 au2_display_primaries_x[3];
262 
263     /**
264      * Array to store the display_primaries_y values
265      */
266     UWORD16 au2_display_primaries_y[3];
267 
268     /**
269      * Variable to store the white point x value
270      */
271     UWORD16 u2_white_point_x;
272 
273     /**
274      * Variable to store the white point y value
275      */
276     UWORD16 u2_white_point_y;
277 
278     /**
279      * Variable to store the max display mastering luminance value
280      */
281     UWORD32 u4_max_display_mastering_luminance;
282 
283     /**
284      * Variable to store the min display mastering luminance value
285      */
286     UWORD32 u4_min_display_mastering_luminance;
287 
288 }mastering_dis_col_vol_sei_params_t;
289 
290 /**
291  * Structure to hold active parameter parameter set SEI parameters Info
292  */
293 typedef struct
294 {
295     /*
296     * active vps id
297     */
298 
299     UWORD8 u1_active_video_parameter_set_id;
300 
301     /*
302      * default set to zero.
303      */
304     UWORD8 u1_self_contained_cvs_flag;
305 
306     UWORD8 u1_no_parameter_set_update_flag;
307 
308     UWORD8 u1_num_sps_ids_minus1;
309 
310     /*
311      * active sps id
312      */
313     UWORD8 au1_active_seq_parameter_set_id[15];
314 
315     UWORD32 au4_layer_sps_idx[64];
316 
317 }active_parameter_set_sei_param_t;
318 
319 /**
320  * Structure to hold SEI Hash values
321  */
322 typedef struct
323 {
324     /*
325      * SEI Hash values for each color component
326      */
327     UWORD8 au1_sei_hash[3][16];
328 
329 }hash_sei_param_t;
330 
331 /**
332  * Structure to hold user data registered SEI param Info
333  */
334 typedef struct
335 {
336     /**
337      * Contains country code by Annex A of Recommendation ITU-T T.35
338      */
339     UWORD8 u1_itu_t_t35_country_code;
340 
341     /**
342      * Contains country code by Annex B of Recommendation ITU-T T.35
343      */
344     UWORD8 u1_itu_t_t35_country_code_extension_byte;
345 
346     /**
347      * Contains data registered as specified in Recommendation ITU-T T.35
348      */
349     UWORD8 u1_itu_t_t35_payload_byte[MAX_USERDATA_PAYLOAD];
350 
351     /**
352      * Valid payload size present in this buffer
353      */
354     WORD32 i4_valid_payload_size;
355 
356     /**
357      * Total payload size incase payloadSize > IHEVCD_MAX_USERDATA_PAYLOAD
358      */
359     WORD32 i4_payload_size;
360 }user_data_registered_itu_t_t35_t;
361 
362 /**
363  * Structure to hold time code SEI param info
364  */
365 typedef struct
366 {
367     /**
368      * Number of sets of clock timestamp syntax elements present for the current picture
369      */
370     UWORD8 u1_num_clock_ts;
371 
372     /**
373      * Indicates presenc of associated set of clock timestamps
374      */
375     UWORD8 au1_clock_timestamp_flag[MAX_NUM_CLOCK_TS];
376 
377     /**
378      * Used in calculating clockTimestamp[i]
379      */
380     UWORD8 au1_units_field_based_flag[MAX_NUM_CLOCK_TS];
381 
382     /**
383      * Specifies the method of dropping values of the n_frames[i] syntax element
384      */
385     UWORD8 au1_counting_type[MAX_NUM_CLOCK_TS];
386 
387     /**
388      * Specifies that the n_frames[i] syntax element is followed by seconds_value[i],
389      * minutes_value[i] and hours_value[i]
390      */
391     UWORD8 au1_full_timestamp_flag[MAX_NUM_CLOCK_TS];
392 
393     /**
394      * Indicates the discontinuity in clockTimestamp
395      */
396     UWORD8 au1_discontinuity_flag[MAX_NUM_CLOCK_TS];
397 
398     /**
399      * Specifies the skipping of one or more values of n_frames[i]
400      */
401     UWORD8 au1_cnt_dropped_flag[MAX_NUM_CLOCK_TS];
402 
403     /**
404      * Specifies the value of nFrames used to compute clockTimestamp[i]
405      */
406     UWORD16 au2_n_frames[MAX_NUM_CLOCK_TS];
407 
408     /**
409      * Specifies the presence of seconds_value[i] and minutes_flag[i]
410      */
411     UWORD8 au1_seconds_flag[MAX_NUM_CLOCK_TS];
412 
413     /**
414      * Specifies the presence of minutes_value[i] and hours_flag[i]
415      */
416     UWORD8 au1_minutes_flag[MAX_NUM_CLOCK_TS];
417 
418     /**
419      * Specifies the presence of hours_value[i]
420      */
421     UWORD8 au1_hours_flag[MAX_NUM_CLOCK_TS];
422 
423     /**
424      * Specifies the value of sS used to compute clockTimestamp[i]
425      */
426     UWORD8 au1_seconds_value[MAX_NUM_CLOCK_TS];
427 
428     /**
429      * Specifies the value of mM used to compute clockTimestamp[i]
430      */
431     UWORD8 au1_minutes_value[MAX_NUM_CLOCK_TS];
432 
433     /**
434      * Specifies the value of hH used to compute clockTimestamp[i]
435      */
436     UWORD8 au1_hours_value[MAX_NUM_CLOCK_TS];
437 
438     /**
439      * Specifies the length in bits of the time_offset_value[i]
440      */
441     UWORD8 au1_time_offset_length[MAX_NUM_CLOCK_TS];
442 
443     /**
444      * pecifies the value of tOffset used to compute clockTimestamp[i]
445      */
446     UWORD8 au1_time_offset_value[MAX_NUM_CLOCK_TS];
447 
448 }time_code_t;
449 
450 /**
451  *  @brief    Structure for Content Light Level Info
452  *
453  */
454 typedef struct
455 {
456     /**
457      * 16bit unsigned number which indicates the maximum pixel intensity of all samples in bit-stream in units of 1 candela per square metre
458      */
459     UWORD16 u2_sei_max_cll;
460 
461     /**
462      * 16bit unsigned number which indicates the average pixel intensity of all samples in bit-stream in units of 1 candela per square metre
463      */
464     UWORD16 u2_sei_avg_cll;
465 
466 }content_light_level_info_sei_params_t;
467 
468 
469 /**
470  * Structure to hold SEI parameters Info
471  */
472 typedef struct
473 {
474 
475     WORD8 i1_sei_parameters_present_flag;
476 
477     WORD8 i1_aud_present_flag;
478 
479     WORD8 i1_buf_period_params_present_flag;
480 
481     WORD8 i1_pic_timing_params_present_flag;
482 
483     WORD8 i1_recovery_point_params_present_flag;
484 
485     WORD8 i1_active_parameter_set;
486 
487     WORD8 i4_sei_mastering_disp_colour_vol_params_present_flags;
488 
489     WORD8 i1_sei_cll_enable;
490 
491     /* Enable/Disable SEI Hash on the Decoded picture & Hash type */
492     /* < 3 : Checksum, 2 : CRC, 1 : MD5, 0 : disable >            */
493     /* Other values are not supported                             */
494     WORD8 i1_decoded_pic_hash_sei_flag;
495 
496     /* number of user data e.g. CC data, BAR data, AFD data etc */
497     WORD32 i4_sei_user_data_cnt;
498 
499     WORD8 i1_user_data_registered_present_flag;
500 
501     WORD8 i1_time_code_present_flag;
502 
503     buf_period_sei_params_t  s_buf_period_sei_params;
504 
505     pic_timing_sei_params_t  s_pic_timing_sei_params;
506 
507     recovery_point_sei_params_t s_recovery_point_params;
508 
509     active_parameter_set_sei_param_t s_active_parameter_set_sei_params;
510 
511     hash_sei_param_t    s_hash_sei_params;
512 
513     content_light_level_info_sei_params_t s_cll_info_sei_params;
514 
515     mastering_dis_col_vol_sei_params_t s_mastering_dis_col_vol_sei_params;
516 
517     user_data_registered_itu_t_t35_t as_user_data_registered_itu_t_t35[USER_DATA_MAX];
518 
519     time_code_t s_time_code;
520 } sei_params_t;
521 
522 
523 /**
524  * Sub-layer HRD parameters Info
525  */
526 typedef struct
527 {
528     /**
529      * (together with bit_rate_scale) specifies the
530      * maximum input bit rate for the i-th CPB
531      */
532     UWORD32 au4_bit_rate_value_minus1[MAX_CPB_CNT];
533     /**
534      * together with cpb_size_scale to specify the
535      * CPB size when the CPB operates at the access unit level.
536      */
537     UWORD32 au4_cpb_size_value_minus1[MAX_CPB_CNT];
538 
539     /**
540      * together with cpb_size_du_scale to specify the CPB size
541      * when the CPB operates at sub-picture level
542      */
543     UWORD32 au4_cpb_size_du_value_minus1[MAX_CPB_CNT];
544 
545     /**
546      * specifies the maximum input bit rate for the i-th CPB when the CPB
547      * operates at the sub-picture level. bit_rate_du_value_minus1[ i ]
548      * shall be in the range of 0 to 2^32 - 2
549      */
550     UWORD32 au4_bit_rate_du_value_minus1[MAX_CPB_CNT];
551 
552     /**
553      * if 1, specifies that the HSS operates in a constant bit rate (CBR) mode
554      * if 0, specifies that the HSS operates in a intermittent bit rate (CBR) mode
555      */
556     UWORD8  au1_cbr_flag[32];
557 
558 }sub_lyr_hrd_params_t;
559 
560 /**
561  * HRD parameters Info
562  */
563 typedef struct
564 {
565     /**
566      * Indicates the presence of the
567      * num_units_in_ticks, time_scale flag
568      */
569     UWORD8 u1_timing_info_present_flag;
570 
571     /**
572      * Number of units that
573      * correspond to one increment of the
574      * clock. Indicates the  resolution
575      */
576     UWORD32 u4_num_units_in_tick;
577 
578     /**
579      * The number of time units that pass in one second
580      */
581     UWORD32 u4_time_scale;
582 
583     /**
584      * Nal- hrd parameters flag
585      */
586     UWORD8 u1_nal_hrd_parameters_present_flag;
587 
588     /**
589      * VCL- hrd parameters flag
590      */
591     UWORD8 u1_vcl_hrd_parameters_present_flag;
592 
593     /**
594      * Indicates the presence of NAL-HRD params or VCL_HRD params
595      * in the bitstream
596      */
597     UWORD8 u1_cpbdpb_delays_present_flag;
598 
599     /**
600      * specifies that sub-picture level CPB removal delay parameters are
601      * present in picture timing SEI messages
602      */
603     UWORD8 u1_sub_pic_cpb_params_present_flag;
604 
605     /**
606      * specify the clock sub-tick
607      * (the minimum interval of time that can be represented in the coded data when sub_pic_cpb_params_present_flag is equal to 1)
608      */
609     UWORD8 u1_tick_divisor_minus2;
610 
611     /**
612      * specifies the length, in bits for the du cpb delay syntax in pt_sei
613      */
614     UWORD8 u1_du_cpb_removal_delay_increment_length_minus1;
615 
616     /**
617      * Indicates presence of sub_pic_cpb_params in pic timing sei
618      */
619     UWORD8 u1_sub_pic_cpb_params_in_pic_timing_sei_flag;
620 
621     /**
622      * specifies the length, in bits, of the pic_dpb_output_du_delay syntax
623      * element in the picture timing SEI message and the
624      * pic_spt_dpb_output_du_delay syntax element in the decoding unit
625      * information SEI message
626      */
627     UWORD8 u1_dpb_output_delay_du_length_minus1;
628 
629     /**
630      * (together with bit_rate_value_minus1) specifies the
631      * maximum input bit rate of the i-th CPB
632      */
633     UWORD32 u4_bit_rate_scale;
634 
635     /**
636      * (together with cpb_size_du_value_minus1) specfies
637      * CPB size of the i-th CPB when the CPB operates
638      * at the access unit level
639      */
640     UWORD32 u4_cpb_size_scale;
641 
642     /**
643      * (together with cpb_size_du_value_minus1) specfies
644      * CPB size of the i-th CPB when the CPB operates
645      * at the sub-picture level
646      */
647     UWORD32 u4_cpb_size_du_scale;
648 
649 
650     /**
651      * specifies the length, in bits for initial cpb delay (nal/vcl)sysntax in bp sei
652      */
653     UWORD8  u1_initial_cpb_removal_delay_length_minus1;
654 
655     /**
656      * specifies the length, in bits for the au cpb delay syntax in pt_sei
657      */
658     UWORD8  u1_au_cpb_removal_delay_length_minus1;
659 
660     /**
661      * specifies the length, in bits, of the pic_dpb_output_delay syntax element in the pt SEI message
662      */
663     UWORD8  u1_dpb_output_delay_length_minus1;
664 
665     /**
666      * if 1, , for the highest temporal sub-layers, the temporal distance between the HRD output times
667      * of consecutive pictures in output order is constrained refer to Table E-6
668      */
669     UWORD8 au1_fixed_pic_rate_general_flag[VPS_MAX_SUB_LAYERS];
670 
671     UWORD8 au1_fixed_pic_rate_within_cvs_flag[VPS_MAX_SUB_LAYERS];
672 
673     /**
674      * if 1, , for the highest temporal sub-layers, the temporal distance (in clock ticks) between the
675      * element units that specify HRD output times of consecutive pictures in output order is constrained
676      * refer to Table E-6
677      */
678     UWORD16 au2_elemental_duration_in_tc_minus1[VPS_MAX_SUB_LAYERS];
679 
680     /**
681      * specifies the HRD operational mode
682      */
683     UWORD8 au1_low_delay_hrd_flag[VPS_MAX_SUB_LAYERS];
684 
685     /**
686      * 1 specifies the number of alternative CPB specifications in the
687      * bitstream of the cvs when HighestTid is equal to i
688      */
689     UWORD8 au1_cpb_cnt_minus1[VPS_MAX_SUB_LAYERS];
690 
691 
692     /**
693      * VUI level Sub-layer HRD parameters
694      */
695     sub_lyr_hrd_params_t as_sub_layer_hrd_params[VPS_MAX_SUB_LAYERS];
696 
697 }hrd_params_t;
698 
699 /**
700  * Structure to hold VUI parameters Info
701  */
702 typedef struct
703 {
704     /**
705      * indicates the presence of aspect_ratio
706      */
707     UWORD8 u1_aspect_ratio_info_present_flag;
708 
709     /**
710      * specifies the aspect ratio of the luma samples
711      */
712     UWORD8 u1_aspect_ratio_idc;
713 
714     /**
715      *  width of the luma samples. user dependent
716      */
717     UWORD16 u2_sar_width;
718 
719     /**
720      *  hieght of the luma samples. user dependent
721      */
722     UWORD16 u2_sar_height;
723 
724     /**
725      * if 1, specifies that the overscan_appropriate_flag is present
726      * if 0, the preferred display method for the video signal is unspecified
727      */
728     UWORD8 u1_overscan_info_present_flag;
729 
730     /**
731      * if 1,indicates that the cropped decoded pictures output
732      * are suitable for display using overscan
733      */
734     UWORD8 u1_overscan_appropriate_flag;
735 
736     /**
737      * if 1 specifies that video_format, video_full_range_flag and
738      * colour_description_present_flag are present
739      */
740     UWORD8 u1_video_signal_type_present_flag;
741 
742     /**
743      *
744      */
745     UWORD8 u1_video_format;
746 
747     /**
748      * indicates the black level and range of the luma and chroma signals
749      */
750     UWORD8 u1_video_full_range_flag;
751 
752     /**
753      * if 1,to 1 specifies that colour_primaries, transfer_characteristics
754      * and matrix_coefficients are present
755      */
756     UWORD8 u1_colour_description_present_flag;
757 
758     /**
759      * indicates the chromaticity coordinates of the source primaries
760      */
761     UWORD8 u1_colour_primaries;
762 
763     /**
764      * indicates the opto-electronic transfer characteristic of the source picture
765      */
766     UWORD8 u1_transfer_characteristics;
767 
768     /**
769      * the matrix coefficients used in deriving luma and chroma signals
770      * from the green, blue, and red primaries
771      */
772     UWORD8 u1_matrix_coefficients;
773 
774     /**
775      * if 1, specifies that chroma_sample_loc_type_top_field and
776      * chroma_sample_loc_type_bottom_field are present
777      */
778     UWORD8 u1_chroma_loc_info_present_flag;
779 
780     /**
781      * location of chroma samples
782      */
783     UWORD8 u1_chroma_sample_loc_type_top_field;
784 
785     UWORD8 u1_chroma_sample_loc_type_bottom_field;
786 
787     /**
788      * if 1, indicates that the value of all decoded chroma samples is
789      * equal to 1 << ( BitDepthC - 1 )
790      */
791     UWORD8 u1_neutral_chroma_indication_flag;
792 
793     /**
794      * 1 indicates that the coded video sequence conveys pictures that represent fields
795      * 0 indicates the pictures that represents field
796      */
797     UWORD8 u1_field_seq_flag;
798 
799     /**
800      * specifies that picture timing SEI messages are present for every picture
801      */
802     UWORD8 u1_frame_field_info_present_flag;
803 
804     /**
805      * 1 indicates that the default display window parameters follow next in the VUI
806      */
807     UWORD8 u1_default_display_window_flag;
808 
809     /**
810      * specify the samples of the pictures in the coded video sequence
811      * that are within the default display window,
812      * in terms of a rectangular region specified in picture coordinates for display
813      */
814     UWORD32 u4_def_disp_win_left_offset;
815 
816     UWORD32 u4_def_disp_win_right_offset;
817 
818     UWORD32 u4_def_disp_win_top_offset;
819 
820     UWORD32 u4_def_disp_win_bottom_offset;
821 
822     /**
823      * to 1 specifies that the syntax structure hrd_parameters is present in the vui_parameters syntax structue
824      */
825     UWORD8 u1_vui_hrd_parameters_present_flag;
826 
827     /**
828      * VUI level HRD parameters
829      */
830     hrd_params_t s_vui_hrd_parameters;
831 
832     /**
833      * Indicates the presence of the
834      * num_units_in_ticks, time_scale flag
835      */
836     UWORD8 u1_vui_timing_info_present_flag;
837 
838     /**
839      * Number of units that
840      * correspond to one increment of the
841      * clock. Indicates the  resolution
842      */
843     UWORD32 u4_vui_num_units_in_tick;
844 
845     /**
846      * The number of time units that pass in one second
847      */
848     UWORD32 u4_vui_time_scale;
849     /**
850      * if 1, indicates that the POC for each picture in the coded video sequence (cvs) (not the first picture), in decoding order,
851      * is proportional to the output time of the picture relative to that of the first picture in the cvs
852      */
853     UWORD8 u1_poc_proportional_to_timing_flag;
854 
855     /**
856      * num_ticks_poc_diff_one_minus1 plus 1 specifies the number of clock ticks
857      * corresponding to a difference of poc values equal to 1
858      */
859     UWORD32 u4_num_ticks_poc_diff_one_minus1;
860 
861     /**
862      * 1, specifies that the following cvs bitstream restriction parameters are present
863      */
864     UWORD8 u1_bitstream_restriction_flag;
865 
866     /**
867      *  if 1, indicates that each pps that is active in the cvs has
868      *  the same value of the tile syntax elements
869      */
870     UWORD8 u1_tiles_fixed_structure_flag;
871 
872     /**
873      * if 0, indicates that no pel outside the pic boundaries and
874      * no sub-pels derived using pels outside the pic boundaries is used for inter prediction
875      */
876     UWORD8 u1_motion_vectors_over_pic_boundaries_flag;
877 
878     /**
879      * if 1, indicates
880      * all P/B slices belonging to the same pic have an identical refpic list0,
881      * all B slices that belong to the same picture have an identical refpic list1.
882      */
883     UWORD8 u1_restricted_ref_pic_lists_flag;
884 
885     /**
886      * min_spatial_segmentation_idc, when not equal to 0, establishes a bound on the maximum possible size of distinct
887      * coded spatial segmentation regions in the pictures of the CVS. When min_spatial_segmentation_idc is not present, it is
888      * inferred to be equal to 0. The value of min_spatial_segmentation_idc shall be in the range of 0 to 4095, inclusive.
889      *
890      * can be used by a decoder to calculate the maximum number of luma samples to be processed by one processing thread
891      *
892      * If tiles=0 and entropy_sync=0 then
893      *     no slice shall exceed ( 4 * PicSizeInSamplesY ) / minSpatialSegmentationTimes4 luma samples
894      *
895      * If tiles=1 and entropy_sync=0 then
896      *     no tile shall exceed ( 4 * PicSizeInSamplesY ) / minSpatialSegmentationTimes4 luma samples
897      *
898      * If tiles=0 and entropy_sync=1 then
899      *     ( 2 * pic_height_in_luma_samples + pic_width_in_luma_samples ) * CtbSizeY
900      *             <= ( 4 * PicSizeInSamplesY ) / minSpatialSegmentationTimes4
901      */
902     UWORD32 u4_min_spatial_segmentation_idc;
903     /**
904      * Indicates a number of bytes not exceeded by the sum of the sizes of the VCL NAL units
905      * associated with any coded picture
906      */
907     UWORD8 u1_max_bytes_per_pic_denom;
908 
909     /**
910      * Indicates an upper bound for the number of bits of coding_unit() data
911      */
912     UWORD8 u1_max_bits_per_mincu_denom;
913 
914     /**
915      * Indicate the maximum absolute value of a decoded horizontal MV component
916      * in quarter-pel luma units
917      */
918     UWORD8 u1_log2_max_mv_length_horizontal;
919 
920     /**
921      * Indicate the maximum absolute value of a decoded vertical MV component
922      * in quarter-pel luma units
923      */
924     UWORD8 u1_log2_max_mv_length_vertical;
925 }vui_t;
926 
927 /**
928  * Picture buffer
929  */
930 typedef struct
931 {
932     UWORD8 *pu1_luma;
933     UWORD8 *pu1_chroma;
934 
935     WORD32 i4_abs_poc;
936     WORD32 i4_poc_lsb;
937     /** Used to store display Timestamp for current buffer */
938     WORD32 u4_ts;
939     UWORD8 u1_used_as_ref;
940 
941     /** Used to idicate if this buffer needed for output */
942     UWORD8 u1_pic_output_flag;
943 
944     UWORD8 u1_free_delay_cnt;
945 
946     /**
947      * buffer ID from buffer manager
948      */
949     UWORD8 u1_buf_id;
950 
951 
952     // See IV_FLD_TYPE_T for all field types
953     UWORD32 e4_fld_type;
954 
955     sei_params_t s_sei_params;
956 
957     WORD32 i4_vui_present;
958 
959     vui_t s_vui;
960 
961 }pic_buf_t;
962 
963 
964 /**
965  * Reference List
966  */
967 typedef struct
968 {
969     void *pv_pic_buf;
970 
971     void *pv_mv_buf;
972 
973     UWORD8 u1_used_as_ref;
974 
975 }ref_list_t;
976 
977 
978 /**
979  * SAO
980  */
981 typedef struct
982 {
983     /**
984      * sao_type_idx_luma
985      */
986     UWORD32      b3_y_type_idx   : 3;
987 
988     /**
989      * luma SaoOffsetVal[1]
990      */
991     WORD32      b4_y_offset_1   : 4;
992 
993     /**
994      * luma SaoOffsetVal[2]
995      */
996     WORD32      b4_y_offset_2   : 4;
997 
998     /**
999      * luma SaoOffsetVal[3]
1000      */
1001     WORD32      b4_y_offset_3   : 4;
1002 
1003     /**
1004      * luma SaoOffsetVal[4]
1005      */
1006     WORD32      b4_y_offset_4   : 4;
1007 
1008     /**
1009      * luma sao_band_position
1010      */
1011     UWORD32      b5_y_band_pos   : 5;
1012 
1013     WORD32                      : 0;
1014 
1015     /**
1016      * sao_type_idx_chroma
1017      */
1018     UWORD32      b3_cb_type_idx  : 3;
1019 
1020     /**
1021      * chroma SaoOffsetVal[1]
1022      */
1023     WORD32      b4_cb_offset_1  : 4;
1024 
1025     /**
1026      * chroma SaoOffsetVal[2]
1027      */
1028     WORD32      b4_cb_offset_2  : 4;
1029 
1030     /**
1031      * chroma SaoOffsetVal[3]
1032      */
1033     WORD32      b4_cb_offset_3  : 4;
1034 
1035     /**
1036      * chroma SaoOffsetVal[4]
1037      */
1038     WORD32      b4_cb_offset_4  : 4;
1039 
1040     /**
1041      * cb sao_band_position
1042      */
1043     UWORD32      b5_cb_band_pos  : 5;
1044 
1045     WORD32                      : 0;
1046 
1047     /**
1048      * sao_type_idx_chroma
1049      */
1050     UWORD32      b3_cr_type_idx  : 3;
1051 
1052     /**
1053      * chroma SaoOffsetVal[1]
1054      */
1055     WORD32      b4_cr_offset_1  : 4;
1056 
1057     /**
1058      * chroma SaoOffsetVal[2]
1059      */
1060     WORD32      b4_cr_offset_2  : 4;
1061 
1062     /**
1063      * chroma SaoOffsetVal[3]
1064      */
1065     WORD32      b4_cr_offset_3  : 4;
1066 
1067     /**
1068      * chroma SaoOffsetVal[4]
1069      */
1070     WORD32      b4_cr_offset_4  : 4;
1071 
1072     /**
1073      * cr sao_band_position
1074      */
1075     UWORD32      b5_cr_band_pos  : 5;
1076 
1077     WORD32                      : 0;
1078 
1079 }sao_t;
1080 
1081 /**
1082  * SAO
1083  */
1084 typedef struct
1085 {
1086     /**
1087      * sao_type_idx_luma
1088      */
1089     UWORD32      b3_y_type_idx   : 3;
1090 
1091     /**
1092      * luma SaoOffsetVal[1]
1093      */
1094     WORD32      b8_y_offset_1   : 8;
1095 
1096     /**
1097      * luma SaoOffsetVal[2]
1098      */
1099     WORD32      b8_y_offset_2   : 8;
1100 
1101     /**
1102      * luma SaoOffsetVal[3]
1103      */
1104     WORD32      b8_y_offset_3   : 8;
1105 
1106     /**
1107      * luma SaoOffsetVal[4]
1108      */
1109     WORD32      b8_y_offset_4   : 8;
1110 
1111     /**
1112      * luma sao_band_position
1113      */
1114     UWORD32      b5_y_band_pos   : 5;
1115 
1116     WORD32                      : 0;
1117 
1118     /**
1119      * sao_type_idx_chroma
1120      */
1121     UWORD32      b3_cb_type_idx  : 3;
1122 
1123     /**
1124      * chroma SaoOffsetVal[1]
1125      */
1126     WORD32      b8_cb_offset_1  : 8;
1127 
1128     /**
1129      * chroma SaoOffsetVal[2]
1130      */
1131     WORD32      b8_cb_offset_2  : 8;
1132 
1133     /**
1134      * chroma SaoOffsetVal[3]
1135      */
1136     WORD32      b8_cb_offset_3  : 8;
1137 
1138     /**
1139      * chroma SaoOffsetVal[4]
1140      */
1141     WORD32      b8_cb_offset_4  : 8;
1142 
1143     /**
1144      * cb sao_band_position
1145      */
1146     UWORD32      b5_cb_band_pos  : 5;
1147 
1148     WORD32                      : 0;
1149 
1150     /**
1151      * sao_type_idx_chroma
1152      */
1153     UWORD32      b3_cr_type_idx  : 3;
1154 
1155     /**
1156      * chroma SaoOffsetVal[1]
1157      */
1158     WORD32      b8_cr_offset_1  : 8;
1159 
1160     /**
1161      * chroma SaoOffsetVal[2]
1162      */
1163     WORD32      b8_cr_offset_2  : 8;
1164 
1165     /**
1166      * chroma SaoOffsetVal[3]
1167      */
1168     WORD32      b8_cr_offset_3  : 8;
1169 
1170     /**
1171      * chroma SaoOffsetVal[4]
1172      */
1173     WORD32      b8_cr_offset_4  : 8;
1174 
1175     /**
1176      * cr sao_band_position
1177      */
1178     UWORD32      b5_cr_band_pos  : 5;
1179 
1180     WORD32                      : 0;
1181 
1182 }sao_10bd_t;
1183 
1184 /**
1185  * Motion vector
1186  */
1187 typedef struct
1188 {
1189     /**
1190      * Horizontal Motion Vector
1191      */
1192     WORD16 i2_mvx;
1193 
1194     /**
1195      * Vertical Motion Vector
1196      */
1197     WORD16 i2_mvy;
1198 }mv_t;
1199 
1200 /*****************************************************************************/
1201 /* Following results in packed 48 bit structure. If mv_t included            */
1202 /*  ref_pic_buf_id, then 8 bits will be wasted for each mv for aligning.     */
1203 /*  Also using mv_t as elements directly instead of a pointer to l0 and l1   */
1204 /*  mvs. Since pointer takes 4 bytes and MV itself is 4 bytes. It does not   */
1205 /*  really help using pointers.                                              */
1206 /*****************************************************************************/
1207 
1208 /**
1209  * PU Motion Vector info
1210  */
1211 typedef struct
1212 {
1213     /**
1214      *  L0 Motion Vector
1215      */
1216     mv_t s_l0_mv;
1217 
1218     /**
1219      *  L1 Motion Vector
1220      */
1221     mv_t s_l1_mv;
1222 
1223     /**
1224      *  L0 Ref index
1225      */
1226     WORD8   i1_l0_ref_idx;
1227 
1228     /**
1229      *  L1 Ref index
1230      */
1231     WORD8   i1_l1_ref_idx;
1232 
1233     /**
1234      *  L0 Ref Pic Buf ID
1235      */
1236     WORD8 i1_l0_ref_pic_buf_id;
1237 
1238     /**
1239      *  L1 Ref Pic Buf ID
1240      */
1241     WORD8 i1_l1_ref_pic_buf_id;
1242 
1243 }pu_mv_t;
1244 
1245 /**
1246  * PU information
1247  */
1248 typedef struct
1249 {
1250 
1251     /**
1252      *  PU motion vectors
1253      */
1254     pu_mv_t     mv;
1255 
1256     /**
1257      *  PU X position in terms of min PU (4x4) units
1258      */
1259     UWORD32     b4_pos_x        : 4;
1260 
1261     /**
1262      *  PU Y position in terms of min PU (4x4) units
1263      */
1264     UWORD32     b4_pos_y        : 4;
1265 
1266     /**
1267      *  PU width in pixels = (b4_wd + 1) << 2
1268      */
1269     UWORD32     b4_wd           : 4;
1270 
1271     /**
1272      *  PU height in pixels = (b4_ht + 1) << 2
1273      */
1274     UWORD32     b4_ht           : 4;
1275 
1276     /**
1277      *  Intra or Inter flag for each partition - 0 or 1
1278      */
1279     UWORD32     b1_intra_flag   : 1;
1280 
1281 
1282     /**
1283      *  PRED_L0, PRED_L1, PRED_BI - Initialized in parsing only for MVP case
1284      */
1285     UWORD32     b2_pred_mode    : 2;
1286 
1287 
1288     /**
1289      *  Merge flag for each partition - 0 or 1
1290      */
1291     UWORD32     b1_merge_flag   : 1;
1292 
1293     /**
1294      *  Merge index for each partition - 0 to 4
1295      */
1296     UWORD32     b3_merge_idx    : 3;
1297 
1298     /*************************************************************************/
1299     /* Following two flags can be overloaded with b3_merge_idx if there      */
1300     /* is need for additional bits                                           */
1301     /*************************************************************************/
1302 
1303     /**
1304      *  If merge is zero, following gives presence of mvd for L0 MV
1305      */
1306     UWORD32     b1_l0_mvp_idx   : 1;
1307 
1308     /**
1309      *  If merge is zero, following gives presence of mvd for L1 MV
1310      */
1311     UWORD32     b1_l1_mvp_idx   : 1;
1312 
1313     /**
1314      * Partition mode - Needed during MV merge stage
1315      * Note: Part mode can be derived using pu_wd, pu_ht and minCB size
1316      * If there is a need for bits, the following can be removed at the cost
1317      * of more control code in MV Merge
1318      */
1319     UWORD32      b3_part_mode    : 3;
1320 
1321     /**
1322      * Partition index - Needed during MV merge stage
1323      */
1324     UWORD32      b2_part_idx     : 2;
1325 
1326 }pu_t;
1327 
1328 /**
1329  * TU information
1330  */
1331 typedef struct
1332 {
1333     /**
1334      *  TU X position in terms of min TU (4x4) units
1335      */
1336     UWORD32      b4_pos_x            : 4;
1337 
1338     /**
1339      *  TU Y position in terms of min TU (4x4) units
1340      */
1341     UWORD32     b4_pos_y            : 4;
1342 
1343     /*************************************************************************/
1344     /* Luma TU size (width or height) = 1 << (b3_size + 2)                   */
1345     /*   i.e. 0 : 4, 1 : 8, 2: 16, 3: 32, 4: 64                              */
1346     /* Note: Though 64 x 64 TU is not possible, this size is supported to    */
1347     /* signal SKIP CUs or PCM CUs etc where transform is not called          */
1348     /* Chroma width will be half of luma except for 4x4 luma                 */
1349     /*************************************************************************/
1350     /**
1351      * Luma TU size (width or height)
1352      */
1353     UWORD32     b3_size             : 3; //To be changed.
1354 
1355     /*************************************************************************/
1356     /* Chroma present : For 4x4 Luma TUs only the fourth one contains Cb     */
1357     /* Cr info. For the first three TUs in 8x8 (for 4x4 luma) this will      */
1358     /* be zero. For all the other cases this will be 1                       */
1359     /*************************************************************************/
1360     /**
1361      * 4x4 Luma TUs only the fourth one contains cb,cr
1362      * TODO: Check if this is really needed, cb_cbf and cr_cbf should be enough
1363      */
1364 
1365     /**
1366      *  Y CBF
1367      */
1368     UWORD32      b1_y_cbf            : 1;
1369 
1370     /**
1371      *  Cb CBF
1372      */
1373     UWORD32      b1_cb_cbf           : 1;
1374 
1375 #ifdef ENABLE_MAIN_REXT_PROFILE
1376     UWORD32      b1_cb_cbf_subtu1          : 1;
1377 #endif
1378 
1379     /**
1380      *  Cr CBF
1381      */
1382     UWORD32     b1_cr_cbf           : 1;
1383 
1384 #ifdef ENABLE_MAIN_REXT_PROFILE
1385     UWORD32     b1_cr_cbf_subtu1          : 1;
1386 #endif
1387 
1388     /**
1389      *  Flag to indicate if it is the first TU in a CU
1390      */
1391     UWORD32     b1_first_tu_in_cu       : 1;
1392 
1393     /**
1394      *  Transform quant bypass flag
1395      */
1396     UWORD32     b1_transquant_bypass  : 1;
1397 
1398     /**
1399      *  Y Qp
1400      */
1401     //UWORD32     b6_qp               : 6; // BUG_FIX related to nighbour QP's in case of negative QP for HBD.
1402     WORD32     b7_qp               : 7;
1403 
1404 
1405     /**
1406      *  Luma Intra Mode 0 - 34
1407      */
1408     UWORD32    b6_luma_intra_mode      : 6;
1409 
1410     /*************************************************************************/
1411     /* Chroma Intra Mode Index 0 - 4: Actual mode (0, 1, 10, 26, 34, X) to be*/
1412     /* derived using luma_intra_mode and the following                       */
1413     /*************************************************************************/
1414     /**
1415      * Chroma Intra Mode Index 0 - 4
1416      */
1417     UWORD32    b3_chroma_intra_mode_idx    : 3;
1418 
1419 }tu_t;
1420 
1421 /**
1422  * CU information
1423  */
1424 typedef struct
1425 {
1426 
1427     /**
1428      *  CU X position in terms of min CU (8x8) units
1429      */
1430     UWORD32 b3_cu_pos_x :3;
1431 
1432     /**
1433      *  CU Y position in terms of min CU (8x8) units
1434      */
1435     UWORD32 b3_cu_pos_y :3;
1436 
1437     /**
1438      *  CU size in terms of min CU (8x8) units
1439      */
1440     UWORD32 b4_cu_size :4;
1441 
1442     /**
1443      *  transquant bypass flag ; 0 for this encoder
1444      */
1445     UWORD32 b1_tq_bypass_flag :1;
1446 
1447     /**
1448      *  CU skip flag
1449      */
1450     UWORD32 b1_skip_flag :1;
1451 
1452     /**
1453      *  intra / inter CU flag
1454      */
1455     UWORD32 b1_pred_mode_flag :1;
1456 
1457     /**
1458      *  indicates partition information for CU
1459      *  For intra 0 : for 2Nx2N / 1 for NxN iff CU=minCBsize
1460      *  For inter 0 : @sa PART_SIZE_E
1461      */
1462     UWORD32 b3_part_mode :3;
1463 
1464     /**
1465      *  0 for this encoder
1466      */
1467     UWORD32 b1_pcm_flag :1;
1468 
1469     /**
1470      *  only applicable for intra cu
1471      */
1472     UWORD32 b3_chroma_intra_pred_mode :3;
1473 
1474     /**
1475      * only applicable for intra cu
1476      */
1477     UWORD32 b1_prev_intra_luma_pred_flag0 :1;
1478 
1479     /**
1480      * only applicable for intra cu and pred_mode=NxN
1481      */
1482     UWORD32 b1_prev_intra_luma_pred_flag1 :1;
1483 
1484     /**
1485      * only applicable for intra cu and pred_mode=NxN
1486      */
1487     UWORD32 b1_prev_intra_luma_pred_flag2 :1;
1488 
1489     /**
1490      * only applicable for intra cu and pred_mode=NxN
1491      */
1492     UWORD32 b1_prev_intra_luma_pred_flag3 :1;
1493 
1494     /**
1495      *  only applicable for luma intra cu
1496      */
1497     UWORD32 b2_mpm_idx0 :2;
1498 
1499     /**
1500      *  only applicable for intra cu and pred_mode=NxN
1501      */
1502     UWORD32 b2_mpm_idx1 :2;
1503 
1504     /**
1505      *  only applicable for intra cu and pred_mode=NxN
1506      */
1507     UWORD32 b2_mpm_idx2 :2;
1508 
1509     /**
1510      *  only applicable for intra cu and pred_mode=NxN
1511      */
1512     UWORD32 b2_mpm_idx3 :2;
1513 
1514     /**
1515      *  only applicable for intra cu
1516      */
1517     UWORD32 b5_rem_intra_pred_mode0 :5;
1518 
1519     /**
1520      *  only applicable for intra cu and pred_mode=NxN
1521      */
1522     UWORD32 b5_rem_intra_pred_mode1 :5;
1523 
1524     /**
1525      *  only applicable for intra cu and pred_mode=NxN
1526      */
1527     UWORD32 b5_rem_intra_pred_mode2 :5;
1528 
1529     /**
1530      *  only applicable for intra cu and pred_mode=NxN
1531      */
1532     UWORD32 b5_rem_intra_pred_mode3 :5;
1533 
1534     /**
1535      *  no residue flag for cu
1536      */
1537     UWORD32 b1_no_residual_syntax_flag :1;
1538 
1539 }cu_t;
1540 
1541 /*****************************************************************************/
1542 /* Since the following data will be accessed linearly (no random access      */
1543 /*  is needed for this) there is no need to store a frame level offset for   */
1544 /*  each CTB's TU data. Only a pointer to this is stored in CTB's structure  */
1545 /*****************************************************************************/
1546 
1547 typedef struct
1548 {
1549     /*************************************************************************/
1550     /* Number of TUs filled in as_tu                                         */
1551     /* Having the first entry as 32 bit data, helps in keeping each of       */
1552     /* the structures aligned to 32 bits at CTB level                        */
1553     /*************************************************************************/
1554     /**
1555      * Number of TUs filled in as_tu
1556      */
1557     WORD32 i4_tu_cnt;
1558 
1559     /**
1560      *  Array to map each min TU unit to a corresponding entry in as_tu
1561      */
1562     UWORD8 au1_tu_map[MAX_TU_IN_CTB];
1563 
1564     /*************************************************************************/
1565     /* TU level information                                                  */
1566     /* Though the allocation for as_pu as done to handle worst case data,    */
1567     /* only valid number of TUs will be filled in the following array.       */
1568     /* Next CTB starts after the valid as_tu entries                         */
1569     /*************************************************************************/
1570     /**
1571      *  TU level information
1572      */
1573     tu_t as_tu[MAX_TU_IN_CTB];
1574 
1575 }ctb_tu_list_t;
1576 
1577 /*****************************************************************************/
1578 /* Info from last TU row of CTB is stored in a row level neighbour buffer    */
1579 /* , which will be used for Boundary Strength computation                    */
1580 /*****************************************************************************/
1581 /**
1582  *  CTB neighbor info
1583  */
1584 typedef struct
1585 {
1586     /**
1587      *  Slice index of the ctb
1588      */
1589     UWORD16 u2_slice_idx;
1590 
1591     /*************************************************************************/
1592     /* CBF of bottom TU row (replicated in 4 pixel boundary)                 */
1593     /* MSB contains CBF of first TU in the last row and LSB contains CBF     */
1594     /* of last TU in the last row                                            */
1595     /*************************************************************************/
1596     /**
1597      * CBF of bottom TU row
1598      */
1599     UWORD16 u2_packed_cbf;
1600 
1601     /*************************************************************************/
1602     /* QP of bottom TU row (replicated at 8 pixel boundary (Since QP can     */
1603     /* not change at less than min CU granularity)                           */
1604     /*************************************************************************/
1605     /**
1606      * QP of bottom TU row
1607      */
1608     UWORD8 au1_qp[MAX_CU_IN_CTB_ROW];
1609 
1610 }ctb_top_ny_info_t;
1611 
1612 /**
1613  *  CTB level info
1614  */
1615 typedef struct _ctb_t
1616 {
1617     /*************************************************************************/
1618     /* Tile boundary can be detected by looking at tile start x and tile     */
1619     /* start y.  And based on the tile, slice and frame boundary the         */
1620     /* following will be initialized.                                        */
1621     /*************************************************************************/
1622     /**
1623      *  Pointer to left CTB
1624      */
1625     /*  If not available, this will be set to NULL   */
1626     struct _ctb_t *ps_ctb_left;
1627 
1628     /**
1629      *  Pointer to top-left CTB
1630      */
1631     /* If not available, this will be set to NULL   */
1632     ctb_top_ny_info_t *ps_ctb_ny_topleft;
1633 
1634     /**
1635      *  Pointer to top CTB
1636      */
1637     /* If not available, this will be set to NULL  */
1638     ctb_top_ny_info_t *ps_ctb_ny_top;
1639 
1640     /**
1641      *  Pointer to top-right CTB
1642      */
1643     /* If not available, this will be set to NULL */
1644     ctb_top_ny_info_t *ps_ctb_ny_topright;
1645 
1646     /*************************************************************************/
1647     /* Pointer to PU data.                                                   */
1648     /* This points to a MV Bank stored at frame level. Though this           */
1649     /* pointer can be derived by reading offset at frame level, it is        */
1650     /* stored here for faster access. Can be removed if storage of CTB       */
1651     /* structure is critical                                                 */
1652     /*************************************************************************/
1653     /**
1654      * Pointer to PU data
1655      */
1656     pu_t *ps_pu;
1657 
1658     /*************************************************************************/
1659     /* Pointer to a PU map stored at frame level,                            */
1660     /* Though this pointer can be derived by multiplying CTB adress with     */
1661     /* number of minTUs in a CTB, it is stored here for faster access.       */
1662     /* Can be removed if storage of CTB structure is critical                */
1663     /*************************************************************************/
1664     /**
1665      * Pointer to a PU map stored at frame level
1666      */
1667     UWORD8 *pu1_pu_map;
1668 
1669     /**
1670      *  Number of TUs filled in as_tu
1671      */
1672     /*************************************************************************/
1673     /* Having the first entry as 32 bit data, helps in keeping each of       */
1674     /* the structures aligned to 32 bits at CTB level                        */
1675     /*************************************************************************/
1676     WORD32 i4_tu_cnt;
1677 
1678     /**
1679      *  Array to map each min TU unit to a corresponding entry in as_tu
1680      */
1681     UWORD8 *pu1_tu_map;
1682 
1683     /**
1684      *  TU level information
1685      */
1686     /*************************************************************************/
1687     /* Though the allocation for as_pu as done to handle worst case data,    */
1688     /* only valid number of TUs will be filled in the following array.       */
1689     /* Next CTB starts after the valid as_tu entries                         */
1690     /*************************************************************************/
1691     tu_t *ps_tu;
1692 
1693     /**
1694      *  Pointer to transform coeff data
1695      */
1696     /*************************************************************************/
1697     /* Following format is repeated for every coded TU                       */
1698     /* Luma Block                                                            */
1699     /* num_coeffs      : 16 bits                                             */
1700     /* zero_cols       : 8 bits ( 1 bit per 4 columns)                       */
1701     /* sig_coeff_map   : ((TU Size * TU Size) + 31) >> 5 number of WORD32s   */
1702     /* coeff_data      : Non zero coefficients                               */
1703     /* Cb Block (only for last TU in 4x4 case else for every luma TU)        */
1704     /* num_coeffs      : 16 bits                                             */
1705     /* zero_cols       : 8 bits ( 1 bit per 4 columns)                       */
1706     /* sig_coeff_map   : ((TU Size * TU Size) + 31) >> 5 number of WORD32s   */
1707     /* coeff_data      : Non zero coefficients                               */
1708     /* Cr Block (only for last TU in 4x4 case else for every luma TU)        */
1709     /* num_coeffs      : 16 bits                                             */
1710     /* zero_cols       : 8 bits ( 1 bit per 4 columns)                       */
1711     /* sig_coeff_map   : ((TU Size * TU Size) + 31) >> 5 number of WORD32s   */
1712     /* coeff_data      : Non zero coefficients                               */
1713     /*************************************************************************/
1714     void            *pv_coeff_data;
1715 
1716     /**
1717      *  Slice to which the CTB belongs to
1718      */
1719     WORD32 i4_slice_idx;
1720 
1721     /**
1722      *  CTB column position
1723      */
1724     WORD32 i4_pos_x;
1725 
1726     /**
1727      *  CTB row position
1728      */
1729     WORD32 i4_pos_y;
1730 
1731     /**
1732      *  Number of PUs filled in ps_pu
1733      */
1734     WORD32 i4_pu_cnt;
1735 
1736     /**
1737      *  Index of current PU being processed in ps_pu
1738      */
1739     /*  Scratch variable set to 0 at the start of any PU processing function */
1740     WORD32 i4_pu_idx;
1741 
1742     /**
1743      * Vertical Boundary strength
1744      */
1745     /* Two bits per edge.
1746     Stored in format. BS[15] | BS[14] | .. |BS[0]*/
1747     UWORD32 *pu4_vert_bs;
1748 
1749     /**
1750      * Horizontal Boundary strength
1751      */
1752 
1753     /* Two bits per edge.
1754     Stored in format. BS[15] | BS[14] | .. |BS[0]*/
1755     UWORD32 *pu4_horz_bs;
1756 
1757     /**
1758      *  Qp array stored for each 8x8 pixels
1759      */
1760     UWORD8 *pu1_qp;
1761 
1762     /**
1763      *  Pointer to current frame's pu_t array
1764      */
1765     pu_t *ps_frm_pu;
1766 
1767     /**
1768      * Pointer to current frame's pu_t index array, which stores starting index
1769      * of pu_t for every CTB
1770      */
1771     UWORD32 *pu4_frm_pu_idx;
1772 
1773     /**
1774      *  Pointer to current frame's pu map array
1775      */
1776     UWORD8 *pu1_frm_pu_map;
1777 
1778     /*************************************************************************/
1779     /* Need to add encoder specific elements for identifying the order of    */
1780     /* coding for CU, TU and PU if any                                       */
1781     /*************************************************************************/
1782 }ctb_t;
1783 
1784 /*****************************************************************************/
1785 /* The following can be used to typecast coefficient data that is stored     */
1786 /*  per subblock. Note that though i2_level is shown as an array that        */
1787 /*  holds 16 coefficients, only the first few entries will be valid. Next    */
1788 /*  subblocks data starts after the valid number of coefficients. Number     */
1789 /*  of non-zero coefficients will be derived using number of non-zero bits   */
1790 /*  in sig coeff map                                                         */
1791 /*****************************************************************************/
1792 /**
1793  * Structure to hold coefficient info for a 4x4 subblock
1794  */
1795 typedef struct
1796 {
1797     /**
1798      * sub block position
1799      */
1800     UWORD16 u2_subblk_pos;
1801 
1802     /**
1803      * significant coefficient map
1804      */
1805     UWORD16 u2_sig_coeff_map;
1806 
1807     /**
1808      * holds 16 coefficients
1809      */
1810     WORD16  ai2_level[SUBBLK_COEFF_CNT];
1811 }tu_sblk_coeff_data_t;
1812 
1813 
1814 /*************************************************************************/
1815 /* The following describes how each of the CU cases are handled          */
1816 /*************************************************************************/
1817 
1818 /*************************************************************************/
1819 /* For SKIP CU                                                           */
1820 /* One Inter PU with appropriate MV                                      */
1821 /* One TU which says Y, Cb and Cr CBF is zero with size equal to CB size */
1822 /*************************************************************************/
1823 
1824 /*************************************************************************/
1825 /* For Inter CU                                                          */
1826 /* M Inter PU with appropriate MVs (M between 1 to 4)                    */
1827 /* N TU (N is number of TU in CU)                                        */
1828 /*************************************************************************/
1829 
1830 /*************************************************************************/
1831 /* For Intra CU                                                          */
1832 /* N TU (N is number of TU in CU)                                        */
1833 /* N Intra PU with appropriate pred modes for luma and chroma            */
1834 /*************************************************************************/
1835 
1836 /*************************************************************************/
1837 /* For Intra PCM CU                                                      */
1838 /* One TU which says transquant bypass is 1  with size equal to CB size  */
1839 /* 1 Intra PU with pcm flag set to 1(which ensures no intra pred is done)*/
1840 /*************************************************************************/
1841 
1842 /*************************************************************************/
1843 /* For a CU where cu_transquant_bypass_flag is 1                         */
1844 /* One TU which says transquant bypass is 1  with size equal to CB size  */
1845 /* N Intra/Inter PUs                                                     */
1846 /*************************************************************************/
1847 
1848 /*************************************************************************/
1849 /* For a CU where no_residual_syntax_flag is 1                           */
1850 /* One TU which says Y, Cb, Cr CBF is 0  with size equal to CB size      */
1851 /* N Inter PUs                                                           */
1852 /*************************************************************************/
1853 
1854 
1855 /**
1856  * Structure giving information about the tile
1857  */
1858 typedef struct
1859 {
1860     /* X position of the tile in the current frame in CTB units */
1861     UWORD8 u1_pos_x;
1862 
1863     /* Y position of the tile in the current frame in CTB units */
1864     UWORD8 u1_pos_y;
1865 
1866     /* Tile width in CTB units */
1867     UWORD16 u2_wd;
1868 
1869     /* Tile height in CTB units */
1870     UWORD16 u2_ht;
1871 
1872 }tile_t;
1873 
1874 /**
1875  * Structure to hold Profile tier level info for a given layer
1876  */
1877 
1878 typedef struct
1879 {
1880     /**
1881      *  NAL unit type
1882      */
1883     WORD8 i1_nal_unit_type;
1884 
1885     /**
1886      *  NAL temporal id
1887      */
1888     WORD8 i1_nuh_temporal_id;
1889 }nal_header_t;
1890 
1891 /**
1892  * Structure to hold Profile tier level info for a given layer
1893  */
1894 
1895 typedef struct
1896 {
1897     /**
1898      *  profile_space
1899      */
1900     WORD8 i1_profile_space;
1901 
1902     /**
1903      *  tier_flag
1904      */
1905     WORD8 i1_tier_flag;
1906 
1907     /**
1908      *  profile_idc
1909      */
1910     WORD8 i1_profile_idc;
1911 
1912     /**
1913      *  profile_compatibility_flag[]
1914      */
1915     WORD8 ai1_profile_compatibility_flag[MAX_PROFILE_COMPATBLTY];
1916 
1917     /**
1918      * progressive_source_flag
1919      */
1920     WORD8 i1_general_progressive_source_flag;
1921 
1922     /**
1923      * interlaced_source_flag
1924      */
1925     WORD8 i1_general_interlaced_source_flag;
1926 
1927     /**
1928      * non_packed_constraint_flag
1929      */
1930     WORD8 i1_general_non_packed_constraint_flag;
1931 
1932     /**
1933      * frame_only_constraint_flag
1934      */
1935     WORD8 i1_frame_only_constraint_flag;
1936 
1937     /**
1938      * general_max_12bit_constraint_flag
1939      */
1940     WORD8 i1_general_max_12bit_constraint_flag;
1941 
1942     /**
1943      * general_max_10bit_constraint_flag
1944      */
1945     WORD8 i1_general_max_10bit_constraint_flag;
1946 
1947     /**
1948      * general_max_8bit_constraint_flag
1949      */
1950     WORD8 i1_general_max_8bit_constraint_flag;
1951 
1952     /**
1953      * general_max_422chroma_constraint_flag
1954      */
1955     WORD8 i1_general_max_422chroma_constraint_flag;
1956 
1957     /**
1958      * general_max_420chroma_constraint_flag
1959      */
1960     WORD8 i1_general_max_420chroma_constraint_flag;
1961 
1962     /**
1963      * general_max_monochrome_constraint_flag
1964      */
1965     WORD8 i1_general_max_monochrome_constraint_flag;
1966 
1967     /**
1968      * general_intra_constraint_flag
1969      */
1970     WORD8 i1_general_intra_constraint_flag;
1971 
1972     /**
1973      * general_one_picture_only_constraint_flag
1974      */
1975     WORD8 i1_general_one_picture_only_constraint_flag;
1976 
1977     /**
1978      * general_lower_bit_rate_constraint_flag
1979      */
1980     WORD8 i1_general_lower_bit_rate_constraint_flag;
1981 
1982     /**
1983      *  level_idc
1984      */
1985     UWORD8 u1_level_idc;
1986 }profile_tier_lvl_t;
1987 
1988 /**
1989  * Structure to hold Profile tier level info for all layers
1990  */
1991 typedef struct
1992 {
1993     /**
1994      *  Profile and tier information for general
1995      */
1996     profile_tier_lvl_t s_ptl_gen;
1997 
1998     /**
1999      *  sub_layer_profile_present_flag[]
2000      */
2001     WORD8 ai1_sub_layer_profile_present_flag[VPS_MAX_SUB_LAYERS - 1];
2002 
2003     /**
2004      *  sub_layer_level_present_flag[]
2005      */
2006     WORD8 ai1_sub_layer_level_present_flag[VPS_MAX_SUB_LAYERS - 1];
2007 
2008     /**
2009      *  Profile and tier information for sub layers
2010      */
2011     profile_tier_lvl_t as_ptl_sub[VPS_MAX_SUB_LAYERS - 1];
2012 
2013 }profile_tier_lvl_info_t;
2014 
2015 /**
2016  * Structure to hold short term reference picture set info
2017  */
2018 typedef struct
2019 {
2020     /**
2021      *  delta_poc_s0_minus1[ i ] and delta_poc_s1_minus1[ i ]
2022      */
2023     WORD16 ai2_delta_poc[MAX_DPB_SIZE];
2024 
2025     /**
2026      *  inter_ref_pic_set_prediction_flag
2027      */
2028     WORD8 i1_inter_ref_pic_set_prediction_flag;
2029 
2030     /**
2031      *  num_negative_pics
2032      */
2033     WORD8 i1_num_neg_pics;
2034 
2035     /**
2036      *  num_positive_pics
2037      */
2038     WORD8 i1_num_pos_pics;
2039 
2040     /**
2041      *  used_by_curr_pic_s0_flag[ i ] and used_by_curr_pic_s1_flag[i]
2042      */
2043     WORD8 ai1_used[MAX_DPB_SIZE];
2044 
2045     /**
2046      *  Ref Idc
2047      */
2048     WORD8 ai1_ref_idc[MAX_DPB_SIZE];
2049 
2050     /**
2051      *  Sum of positive and negative pics for each refence
2052      */
2053     WORD8 i1_num_delta_pocs;
2054 
2055     /**
2056      *  Number of ref_idc
2057      */
2058     WORD8 i1_num_ref_idc;
2059 }stref_picset_t;
2060 
2061 /**
2062  * Structure to hold weighted prediction info such as weights and offsets
2063  */
2064 typedef struct
2065 {
2066     /** luma_log2_weight_denom */
2067     WORD8 i1_luma_log2_weight_denom;
2068 
2069     /** delta_chroma_log2_weight_denom */
2070     WORD8 i1_chroma_log2_weight_denom;
2071 
2072 #ifdef ENABLE_MAIN_REXT_PROFILE
2073     /** WpOffsetBdShiftY */
2074     WORD8 i1_wp_ofst_bd_shift_luma;
2075 
2076     /** WpOffsetBdShiftC */
2077     WORD8 i1_wp_ofst_bd_shift_chroma;
2078 
2079     /** WpOffsetHalfRangeY */
2080     WORD32 i4_wp_ofst_half_rng_luma;
2081 
2082     /** WpOffsetHalfRangeC */
2083     WORD32 i4_wp_ofst_half_rng_chroma;
2084 #endif
2085 
2086     /** luma_weight_l0_flag[ i ] */
2087     WORD8 i1_luma_weight_l0_flag[MAX_DPB_SIZE];
2088 
2089     /** chroma_weight_l0_flag[ i ] */
2090     WORD8 i1_chroma_weight_l0_flag[MAX_DPB_SIZE];
2091 
2092     /** delta_luma_weight_l0[ i ] */
2093     WORD16 i2_luma_weight_l0[MAX_DPB_SIZE];
2094 
2095     /** luma_offset_l0[ i ] */
2096     WORD16 i2_luma_offset_l0[MAX_DPB_SIZE];
2097 
2098     /** delta_chroma_weight_l0[ i ][ j ] */
2099     WORD16 i2_chroma_weight_l0_cb[MAX_DPB_SIZE];
2100 
2101     /** delta_chroma_offset_l0[ i ][ j ] */
2102     WORD16 i2_chroma_offset_l0_cb[MAX_DPB_SIZE];
2103 
2104     /** delta_chroma_weight_l0[ i ][ j ] */
2105     WORD16 i2_chroma_weight_l0_cr[MAX_DPB_SIZE];
2106 
2107     /** delta_chroma_offset_l0[ i ][ j ] */
2108     WORD16 i2_chroma_offset_l0_cr[MAX_DPB_SIZE];
2109 
2110     /** luma_weight_l1_flag[ i ] */
2111     WORD8 i1_luma_weight_l1_flag[MAX_DPB_SIZE];
2112 
2113     /** chroma_weight_l1_flag[ i ] */
2114     WORD8 i1_chroma_weight_l1_flag[MAX_DPB_SIZE];
2115 
2116     /** delta_luma_weight_l1[ i ] */
2117     WORD16 i2_luma_weight_l1[MAX_DPB_SIZE];
2118 
2119     /** luma_offset_l1[ i ] */
2120     WORD16 i2_luma_offset_l1[MAX_DPB_SIZE];
2121 
2122     /** delta_chroma_weight_l1[ i ][ j ] */
2123     WORD16 i2_chroma_weight_l1_cb[MAX_DPB_SIZE];
2124 
2125     /** delta_chroma_offset_l1[ i ][ j ] */
2126     WORD16 i2_chroma_offset_l1_cb[MAX_DPB_SIZE];
2127 
2128     /** delta_chroma_weight_l1[ i ][ j ] */
2129     WORD16 i2_chroma_weight_l1_cr[MAX_DPB_SIZE];
2130 
2131     /** delta_chroma_offset_l1[ i ][ j ] */
2132     WORD16 i2_chroma_offset_l1_cr[MAX_DPB_SIZE];
2133 
2134 }pred_wt_ofst_t;
2135 
2136 
2137 /**
2138  * Structure to hold Reference picture list modification info
2139  */
2140 typedef struct
2141 {
2142     /* ref_pic_list_modification_flag_l0 */
2143     WORD8 i1_ref_pic_list_modification_flag_l0;
2144 
2145     /* list_entry_l0[ i ] */
2146     WORD8 i1_list_entry_l0[16];
2147 
2148     /* ref_pic_list_modification_flag_l1 */
2149     WORD8 i1_ref_pic_list_modification_flag_l1;
2150 
2151     /* list_entry_l1[ i ] */
2152     WORD8 i1_list_entry_l1[16];
2153 
2154     /* Reference POC values for L0,L1 */
2155     WORD32 i4_ref_poc_l0[16];
2156     WORD32 i4_ref_poc_l1[16];
2157 }rplm_t;
2158 
2159 
2160 /**
2161  * Structure to hold VPS info
2162  */
2163 typedef struct
2164 {
2165     /**
2166      *  video_parameter_set_id
2167      */
2168     WORD8 i1_vps_id;
2169 
2170     /**
2171      *  vps_temporal_id_nesting_flag
2172      */
2173     WORD8 i1_vps_temporal_id_nesting_flag;
2174     /**
2175      * sub_layer_ordering_info_present_flag
2176      */
2177     WORD8 i1_sub_layer_ordering_info_present_flag;
2178     /**
2179      *  vps_max_sub_layers_minus1
2180      */
2181     WORD8 i1_vps_max_sub_layers;
2182 
2183     /**
2184      *  vps_max_dec_pic_buffering
2185      */
2186     WORD8 ai1_vps_max_dec_pic_buffering[VPS_MAX_SUB_LAYERS];
2187 
2188     /**
2189      *  vps_max_num_reorder_pics
2190      */
2191     WORD8 ai1_vps_max_num_reorder_pics[VPS_MAX_SUB_LAYERS];
2192 
2193     /**
2194      *  vps_max_latency_increase
2195      */
2196     WORD8 ai1_vps_max_latency_increase[VPS_MAX_SUB_LAYERS];
2197 
2198     /**
2199      *  vps_num_hrd_parameters
2200      */
2201     WORD8 i1_vps_num_hrd_parameters;
2202 
2203     /**
2204      * vps_max_nuh_reserved_zero_layer_id
2205      */
2206     WORD8 i1_vps_max_nuh_reserved_zero_layer_id;
2207 
2208     /**
2209      * vps_num_op_sets
2210      */
2211     WORD8 i1_vps_num_op_sets;
2212 
2213     /**
2214      * layer_id_included_flag
2215      */
2216     //WORD8 ai1_layer_id_included_flag[2][MAX_NUH_LAYERS];
2217     /**
2218      *  Profile, Tier and Level info
2219      */
2220     profile_tier_lvl_info_t s_ptl;
2221 
2222     /**
2223      * bit_rate_info_present_flag[i]
2224      */
2225     WORD8 ai1_bit_rate_info_present_flag[VPS_MAX_SUB_LAYERS];
2226 
2227     /**
2228      * pic_rate_info_present_flag[i]
2229      */
2230     WORD8 ai1_pic_rate_info_present_flag[VPS_MAX_SUB_LAYERS];
2231 
2232     /**
2233      * avg_bit_rate[i]
2234      */
2235     UWORD16 au2_avg_bit_rate[VPS_MAX_SUB_LAYERS];
2236 
2237     /**
2238      * max_bit_rate[i]
2239      */
2240     UWORD16 au2_max_bit_rate[VPS_MAX_SUB_LAYERS];
2241 
2242     /**
2243      * constant_pic_rate_idc[i]
2244      */
2245     WORD8 ai1_constant_pic_rate_idc[VPS_MAX_SUB_LAYERS];
2246 
2247     /**
2248      * avg_pic_rate[i]
2249      */
2250     UWORD16 au2_avg_pic_rate[VPS_MAX_SUB_LAYERS];
2251 }vps_t;
2252 
2253 
2254 /**
2255  * Structure to hold SPS info
2256  */
2257 typedef struct
2258 {
2259     /**
2260      * pic_width_in_luma_samples
2261      */
2262     WORD16 i2_pic_width_in_luma_samples;
2263 
2264     /**
2265      *  pic_height_in_luma_samples
2266      */
2267     WORD16 i2_pic_height_in_luma_samples;
2268 
2269     /**
2270      *  pic_crop_left_offset
2271      */
2272     WORD16 i2_pic_crop_left_offset;
2273 
2274     /**
2275      *  pic_crop_right_offset
2276      */
2277     WORD16 i2_pic_crop_right_offset;
2278 
2279     /**
2280      *  pic_crop_top_offset
2281      */
2282     WORD16 i2_pic_crop_top_offset;
2283 
2284     /**
2285      *  pic_crop_bottom_offset
2286      */
2287     WORD16 i2_pic_crop_bottom_offset;
2288 
2289     /**
2290      *  seq_parameter_set_id
2291      */
2292     WORD8 i1_sps_id;
2293 
2294     /**
2295      *  video_parameter_set_id
2296      */
2297     WORD8 i1_vps_id;
2298 
2299     /**
2300      *  sps_max_sub_layers_minus1
2301      */
2302     WORD8 i1_sps_max_sub_layers;
2303 
2304     /**
2305      *  chroma_format_idc
2306      */
2307     WORD8 i1_chroma_format_idc;
2308 
2309     /**
2310      * Bit depth of luma samples
2311      */
2312     WORD8 i1_bit_depth_luma_minus8;
2313 
2314     /**
2315      * Bit depth of chrma samples
2316      */
2317     WORD8 i1_bit_depth_chroma_minus8;
2318 
2319     /* separate_colour_plane_flag */
2320     WORD8 i1_separate_colour_plane_flag;
2321 
2322     /**
2323      *  pic_cropping_flag
2324      */
2325     WORD8 i1_pic_cropping_flag;
2326 
2327     /**
2328      *  pcm_enabled_flag
2329      */
2330     WORD8 i1_pcm_enabled_flag;
2331 
2332     /**
2333      *  pcm_sample_bit_depth_luma
2334      */
2335     WORD8 i1_pcm_sample_bit_depth_luma;
2336 
2337     /**
2338      *  pcm_sample_bit_depth_chroma
2339      */
2340     WORD8 i1_pcm_sample_bit_depth_chroma;
2341 
2342     /**
2343      *  log2_max_pic_order_cnt_lsb_minus4
2344      */
2345     WORD8 i1_log2_max_pic_order_cnt_lsb;
2346     /**
2347      * sps_sub_layer_ordering_info_present_flag
2348      */
2349     WORD8 i1_sps_sub_layer_ordering_info_present_flag;
2350     /**
2351      *  sps_max_dec_pic_buffering
2352      */
2353     WORD8 ai1_sps_max_dec_pic_buffering[SPS_MAX_SUB_LAYERS];
2354 
2355     /**
2356      *  sps_max_num_reorder_pics
2357      */
2358     WORD8 ai1_sps_max_num_reorder_pics[SPS_MAX_SUB_LAYERS];
2359 
2360     /**
2361      *  sps_max_latency_increase
2362      */
2363     WORD8 ai1_sps_max_latency_increase[SPS_MAX_SUB_LAYERS];
2364 
2365     /**
2366      *  log2_min_coding_block_size_minus3
2367      */
2368     WORD8 i1_log2_min_coding_block_size;
2369 
2370     /**
2371      *  log2_diff_max_min_coding_block_size
2372      */
2373     WORD8 i1_log2_diff_max_min_coding_block_size;
2374 
2375     /**
2376      *  log2_min_transform_block_size_minus2
2377      */
2378     WORD8 i1_log2_min_transform_block_size;
2379 
2380     /**
2381      *  log2_diff_max_min_transform_block_size
2382      */
2383     WORD8 i1_log2_diff_max_min_transform_block_size;
2384 
2385     /**
2386      *  log2_min_pcm_coding_block_size_minus3
2387      */
2388     WORD8 i1_log2_min_pcm_coding_block_size;
2389 
2390     /**
2391      *  log2_diff_max_min_pcm_coding_block_size
2392      */
2393     WORD8 i1_log2_diff_max_min_pcm_coding_block_size;
2394 
2395     /**
2396      *  max_transform_hierarchy_depth_inter
2397      */
2398     WORD8 i1_max_transform_hierarchy_depth_inter;
2399 
2400     /**
2401      *  max_transform_hierarchy_depth_intra
2402      */
2403     WORD8 i1_max_transform_hierarchy_depth_intra;
2404 
2405     /**
2406      *  scaling_list_enable_flag
2407      */
2408     WORD8 i1_scaling_list_enable_flag;
2409 
2410     /**
2411      *  sps_scaling_list_data_present_flag
2412      */
2413     WORD8 i1_sps_scaling_list_data_present_flag;
2414 
2415     /**
2416      *  amp_enabled_flag
2417      */
2418     WORD8 i1_amp_enabled_flag;
2419 
2420     /**
2421      *  sample_adaptive_offset_enabled_flag
2422      */
2423     WORD8 i1_sample_adaptive_offset_enabled_flag;
2424 
2425     /**
2426      *  pcm_loop_filter_disable_flag
2427      */
2428     WORD8 i1_pcm_loop_filter_disable_flag;
2429 
2430     /**
2431      *  sps_temporal_id_nesting_flag
2432      */
2433     WORD8 i1_sps_temporal_id_nesting_flag;
2434 
2435     /**
2436      *  num_short_term_ref_pic_sets
2437      */
2438     WORD8 i1_num_short_term_ref_pic_sets;
2439 
2440     /**
2441      *  long_term_ref_pics_present_flag
2442      */
2443     WORD8 i1_long_term_ref_pics_present_flag;
2444 
2445     /**
2446      *  num_long_term_ref_pics_sps
2447      */
2448     WORD8 i1_num_long_term_ref_pics_sps;
2449 
2450     /**
2451      *  lt_ref_pic_poc_lsb_sps[]
2452      */
2453     UWORD16 au2_lt_ref_pic_poc_lsb_sps[MAX_LTREF_PICS_SPS];
2454 
2455     /**
2456      *  used_by_curr_pic_lt_sps_flag[]
2457      */
2458     WORD8 ai1_used_by_curr_pic_lt_sps_flag[MAX_LTREF_PICS_SPS];
2459 
2460     /**
2461      *  sps_temporal_mvp_enable_flag
2462      */
2463     WORD8 i1_sps_temporal_mvp_enable_flag;
2464 
2465     /**
2466      * strong_intra_smoothing_enable_flag
2467      */
2468     WORD8 i1_strong_intra_smoothing_enable_flag;
2469 
2470     /**
2471      *  vui_parameters_present_flag
2472      */
2473     WORD8 i1_vui_parameters_present_flag;
2474 
2475     /**
2476      * vui parameters Structure info
2477      */
2478     vui_t s_vui_parameters;
2479 
2480     /**
2481      *  Log2(CTB Size) in luma units
2482      */
2483 
2484     WORD8 i1_log2_ctb_size;
2485 
2486     /**
2487      * Maximum transform block size
2488      */
2489     WORD8 i1_log2_max_transform_block_size;
2490 
2491     /**
2492      *  Picture width in CTB units
2493      */
2494 
2495     WORD16 i2_pic_wd_in_ctb;
2496 
2497     /**
2498      *  Picture height in CTB units
2499      */
2500 
2501     WORD16 i2_pic_ht_in_ctb;
2502 
2503     /**
2504      * Picture width in min CB units
2505      */
2506 
2507     WORD16 i2_pic_wd_in_min_cb;
2508 
2509     /**
2510      *  Picture height in min CB units
2511      */
2512 
2513     WORD16 i2_pic_ht_in_min_cb;
2514 
2515     /**
2516      *  Picture size in CTB units
2517      */
2518     WORD32 i4_pic_size_in_ctb;
2519 
2520     /**
2521      *  Profile, Tier and Level info
2522      */
2523 
2524     profile_tier_lvl_info_t s_ptl;
2525 
2526     /**
2527      *  Short term reference pic set
2528      */
2529     stref_picset_t as_stref_picset[MAX_STREF_PICS_SPS];
2530 
2531     /**
2532      *  Pointer to scaling matrix
2533      */
2534     /*************************************************************************/
2535     /* Contanis the matrice in the following order in a 1D buffer            */
2536     /* Intra 4 x 4 Y, 4 x 4 U, 4 x 4 V                                       */
2537     /* Inter 4 x 4 Y, 4 x 4 U, 4 x 4 V                                       */
2538     /* Intra 8 x 8 Y, 8 x 8 U, 8 x 8 V                                       */
2539     /* Inter 8 x 8 Y, 8 x 8 U, 8 x 8 V                                       */
2540     /* Intra 16x16 Y, 16x16 U, 16x16 V                                       */
2541     /* Inter 16x16 Y, 16x16 U, 16x16 V                                       */
2542     /* Intra 32x32 Y                                                         */
2543     /* Inter 32x32 Y                                                         */
2544     /*************************************************************************/
2545     WORD16 *pi2_scaling_mat;
2546 
2547 #ifdef ENABLE_MAIN_REXT_PROFILE
2548 
2549     /**
2550      * transform_skip_rotation_enabled_flag
2551      */
2552     WORD8 i1_transform_skip_rotation_enabled_flag;
2553 
2554     /**
2555      * transform_skip_context_enabled_flag
2556      */
2557     WORD8 i1_transform_skip_context_enabled_flag;
2558 
2559     /**
2560      * implicit_rdpcm_enabled_flag
2561      */
2562     WORD8 i1_implicit_rdpcm_enabled_flag;
2563 
2564     /**
2565      * explicit_rdpcm_enabled_flag
2566      */
2567     WORD8 i1_explicit_rdpcm_enabled_flag;
2568 
2569     /**
2570      * extended_precision_processing_flag
2571      */
2572     WORD8 i1_extended_precision_processing_flag;
2573 
2574     /**
2575      * intra_smoothing_disabled_flag
2576      */
2577     WORD8   i1_intra_smoothing_disabled_flag;
2578 
2579     /**
2580      * high_precision_offsets_enabled_flag
2581      */
2582     WORD8   i1_use_high_precision_pred_wt;
2583 
2584     /**
2585      * fast_rice_adaptation_enabled_flag
2586      */
2587     WORD8   i1_fast_rice_adaptation_enabled_flag;
2588 
2589     /**
2590      * cabac_bypass_alignment_enabled_flag
2591      */
2592     WORD8   i1_align_cabac_before_bypass;
2593 #endif
2594 
2595     /*
2596      * Flag indicating if the SPS is parsed
2597      */
2598     WORD8 i1_sps_valid;
2599 
2600 }sps_t;
2601 
2602 /**
2603  * Structure to hold PPS info
2604  */
2605 typedef struct
2606 {
2607     /**
2608      *  Pointer to scaling matrix
2609      */
2610     /*************************************************************************/
2611     /* Contanis the matrice in the following order in a 1D buffer            */
2612     /* Intra 4 x 4 Y, 4 x 4 U, 4 x 4 V                                       */
2613     /* Inter 4 x 4 Y, 4 x 4 U, 4 x 4 V                                       */
2614     /* Intra 8 x 8 Y, 8 x 8 U, 8 x 8 V                                       */
2615     /* Inter 8 x 8 Y, 8 x 8 U, 8 x 8 V                                       */
2616     /* Intra 16x16 Y, 16x16 U, 16x16 V                                       */
2617     /* Inter 16x16 Y, 16x16 U, 16x16 V                                       */
2618     /* Intra 32x32 Y                                                         */
2619     /* Inter 32x32 Y                                                         */
2620     /*************************************************************************/
2621     WORD16 *pi2_scaling_mat;
2622 
2623     /**
2624      *  Pointer to an array containing tile info such as position, width, height
2625      *  of each tile
2626      */
2627 
2628     /* column_width_minus1[ i ] and row_height_minus1[ i ] */
2629     tile_t *ps_tile;
2630 
2631     /**
2632      *  pic_parameter_set_id
2633      */
2634     WORD8 i1_pps_id;
2635 
2636     /**
2637      *  seq_parameter_set_id
2638      */
2639     WORD8 i1_sps_id;
2640 
2641     /**
2642      *  sign_data_hiding_flag
2643      */
2644     WORD8 i1_sign_data_hiding_flag;
2645 
2646     /**
2647      *  cabac_init_present_flag
2648      */
2649     WORD8 i1_cabac_init_present_flag;
2650 
2651     /**
2652      *  num_ref_idx_l0_default_active_minus1
2653      */
2654     WORD8 i1_num_ref_idx_l0_default_active;
2655 
2656     /**
2657      * num_ref_idx_l1_default_active_minus1
2658      */
2659     WORD8 i1_num_ref_idx_l1_default_active;
2660 
2661     /**
2662      *  pic_init_qp_minus26
2663      */
2664     WORD8 i1_pic_init_qp;
2665 
2666     /**
2667      *  constrained_intra_pred_flag
2668      */
2669     WORD8 i1_constrained_intra_pred_flag;
2670 
2671     /**
2672      *  transform_skip_enabled_flag
2673      */
2674     WORD8 i1_transform_skip_enabled_flag;
2675 
2676     /**
2677      *  cu_qp_delta_enabled_flag
2678      */
2679     WORD8 i1_cu_qp_delta_enabled_flag;
2680 
2681     /**
2682      * diff_cu_qp_delta_depth
2683      */
2684     WORD8 i1_diff_cu_qp_delta_depth;
2685 
2686     /**
2687      *  pic_cb_qp_offset
2688      */
2689     WORD8 i1_pic_cb_qp_offset;
2690 
2691     /**
2692      *  pic_cr_qp_offset
2693      */
2694     WORD8 i1_pic_cr_qp_offset;
2695 
2696     /**
2697      *  pic_slice_level_chroma_qp_offsets_present_flag
2698      */
2699     WORD8 i1_pic_slice_level_chroma_qp_offsets_present_flag;
2700 
2701     /**
2702      *  weighted_pred_flag
2703      */
2704     WORD8 i1_weighted_pred_flag;
2705 
2706     /**
2707      *  weighted_bipred_flag
2708      */
2709     WORD8 i1_weighted_bipred_flag;
2710 
2711     /**
2712      *  output_flag_present_flag
2713      */
2714     WORD8 i1_output_flag_present_flag;
2715 
2716     /**
2717      *  transquant_bypass_enable_flag
2718      */
2719     WORD8 i1_transquant_bypass_enable_flag;
2720 
2721     /**
2722      *  dependent_slice_enabled_flag
2723      */
2724     WORD8 i1_dependent_slice_enabled_flag;
2725 
2726     /**
2727      *  tiles_enabled_flag
2728      */
2729     WORD8 i1_tiles_enabled_flag;
2730 
2731     /**
2732      *  entropy_coding_sync_enabled_flag
2733      */
2734     WORD8 i1_entropy_coding_sync_enabled_flag;
2735 
2736     /**
2737      * entropy_slice_enabled_flag
2738      */
2739     WORD8 i1_entropy_slice_enabled_flag;
2740 
2741     /**
2742      *  num_tile_columns_minus1
2743      */
2744     WORD8 i1_num_tile_columns;
2745 
2746     /**
2747      *  num_tile_rows_minus1
2748      */
2749     WORD8 i1_num_tile_rows;
2750 
2751     /**
2752      *  uniform_spacing_flag
2753      */
2754     WORD8 i1_uniform_spacing_flag;
2755 
2756     /**
2757      *  loop_filter_across_tiles_enabled_flag
2758      */
2759     WORD8 i1_loop_filter_across_tiles_enabled_flag;
2760 
2761     /**
2762      *  loop_filter_across_slices_enabled_flag
2763      */
2764     WORD8 i1_loop_filter_across_slices_enabled_flag;
2765 
2766     /**
2767      *  deblocking_filter_control_present_flag
2768      */
2769     WORD8 i1_deblocking_filter_control_present_flag;
2770 
2771     /**
2772      *  deblocking_filter_override_enabled_flag
2773      */
2774     WORD8 i1_deblocking_filter_override_enabled_flag;
2775 
2776     /**
2777      *  pic_disable_deblocking_filter_flag
2778      */
2779     WORD8 i1_pic_disable_deblocking_filter_flag;
2780 
2781     /**
2782      *  beta_offset_div2
2783      */
2784     WORD8 i1_beta_offset_div2;
2785 
2786     /**
2787      *  tc_offset_div2
2788      */
2789     WORD8 i1_tc_offset_div2;
2790 
2791     /**
2792      *  pps_scaling_list_data_present_flag
2793      */
2794     WORD8 i1_pps_scaling_list_data_present_flag;
2795 
2796     /**
2797      * lists_modification_present_flag
2798      */
2799     WORD8 i1_lists_modification_present_flag;
2800 
2801     /**
2802      * num_extra_slice_header_bits
2803      */
2804     WORD8 i1_num_extra_slice_header_bits;
2805 
2806     /**
2807      *  log2_parallel_merge_level_minus2
2808      */
2809     WORD8 i1_log2_parallel_merge_level;
2810 
2811     /**
2812      *  slice_header_extension_present_flag
2813      */
2814     WORD8 i1_slice_header_extension_present_flag;
2815 
2816     /**
2817      *  slice_extension_present_flag
2818      */
2819     WORD8 i1_slice_extension_present_flag;
2820 
2821     /**
2822      *  scaling_list_dc_coef_minus8
2823      */
2824     /*************************************************************************/
2825     /* DC value of the scaling list                                          */
2826     /* Only 16 x 16 and 32 x 32 scaling lists have valid entries.            */
2827     /* Entries stored for all sizes for uniformity.                          */
2828     /* Remaining will be initialized to default values if used               */
2829     /*************************************************************************/
2830     UWORD8 au1_scaling_list_dc_coef[TOTAL_SCALE_MAT_COUNT];
2831 
2832     /**
2833      * Log2MinCuQpDeltaSize
2834      */
2835     WORD8 i1_log2_min_cu_qp_delta_size;
2836 
2837 #ifdef ENABLE_MAIN_REXT_PROFILE
2838     /**
2839      * log2_max_transform_skip_block_size_minus2
2840      */
2841     WORD32 i4_log2_max_transform_skip_block_size_minus2;
2842 
2843     /**
2844      * cross_component_prediction_enabled_flag
2845      */
2846     WORD8 i1_cross_component_prediction_enabled_flag;
2847 
2848     /**
2849      * chroma_qp_offset_list_enabled_flag
2850      */
2851     WORD8 i1_chroma_qp_offset_list_enabled_flag;
2852 
2853     /**
2854      * diff_cu_chroma_qp_offset_depth
2855      */
2856     WORD32 i4_diff_cu_chroma_qp_offset_depth;
2857 
2858     /**
2859      * chroma_qp_offset_list_len_minus1
2860      */
2861     WORD32 i4_chroma_qp_offset_list_len_minus1;
2862 
2863     /**
2864      * cb_qp_offset_list[]
2865      */
2866     WORD32 i4_cb_qp_offset_list[6];
2867 
2868     /**
2869      * cr_qp_offset_list[]
2870      */
2871     WORD32 i4_cr_qp_offset_list[6];
2872 
2873     /**
2874      * log2_sao_offset_scale_luma
2875      */
2876     WORD8 i1_log2_sao_ofst_scale_luma;
2877 
2878     /**
2879      * log2_sao_offset_scale_chroma
2880      */
2881     WORD8 i1_log2_sao_ofst_scale_chroma;
2882 
2883 #endif
2884 
2885     /*
2886      * Flag indicating if the PPS is parsed
2887      */
2888     WORD8 i1_pps_valid;
2889 
2890 }pps_t;
2891 
2892 
2893 /**
2894  * Structure to hold slice header info
2895  */
2896 typedef struct
2897 {
2898     /**
2899      *  entry_point_offset[ i ]
2900      */
2901     WORD32 *pi4_entry_point_offset;
2902 
2903     /**
2904      *  poc_lsb_lt[ i ]
2905      */
2906     WORD32 ai4_poc_lsb_lt[MAX_DPB_SIZE];
2907 
2908     /**
2909      *  slice_header_extension_length
2910      */
2911     WORD16 i2_slice_header_extension_length;
2912 
2913     /**
2914      *  slice_address
2915      */
2916     WORD16 i2_slice_address;
2917 
2918     /**
2919      *  first_slice_in_pic_flag
2920      */
2921     WORD8 i1_first_slice_in_pic_flag;
2922 
2923     /* PPS id */
2924     WORD8 i1_pps_id;
2925     /**
2926      *  no_output_of_prior_pics_flag
2927      */
2928     WORD8 i1_no_output_of_prior_pics_flag;
2929 
2930     /**
2931      *  dependent_slice_flag
2932      */
2933     WORD8 i1_dependent_slice_flag;
2934 
2935     /**
2936      *  slice_type
2937      */
2938     WORD8 i1_slice_type;
2939 
2940     /**
2941      *  pic_output_flag
2942      */
2943     WORD8 i1_pic_output_flag;
2944 
2945     /**
2946      *  colour_plane_id
2947      */
2948     WORD8 i1_colour_plane_id;
2949 
2950     /**
2951      *  pic_order_cnt_lsb
2952      */
2953     WORD32 i4_pic_order_cnt_lsb;
2954 
2955     /**
2956      *  absolute pic_order_cnt
2957      */
2958     WORD32 i4_abs_pic_order_cnt;
2959 
2960     /**
2961      *  short_term_ref_pic_set_sps_flag
2962      */
2963     WORD8 i1_short_term_ref_pic_set_sps_flag;
2964 
2965     /**
2966      *  short_term_ref_pic_set_idx
2967      */
2968     WORD8 i1_short_term_ref_pic_set_idx;
2969 
2970     /**
2971      *  num_long_term_sps
2972      */
2973     WORD8 i1_num_long_term_sps;
2974 
2975     /**
2976      *  num_long_term_pics
2977      */
2978     WORD8 i1_num_long_term_pics;
2979 
2980     /**
2981      *  lt_idx_sps[ i ]
2982      */
2983     WORD8 ai1_lt_idx_sps[MAX_DPB_SIZE];
2984 
2985     /**
2986      *  used_by_curr_pic_lt_flag[ i ]
2987      */
2988     WORD8 ai1_used_by_curr_pic_lt_flag[MAX_DPB_SIZE];
2989 
2990     /**
2991      *  delta_poc_msb_present_flag[ i ]
2992      */
2993     WORD8 ai1_delta_poc_msb_present_flag[MAX_DPB_SIZE];
2994 
2995     /**
2996      *  delta_poc_msb_cycle_lt[ i ]
2997      */
2998     WORD8 ai1_delta_poc_msb_cycle_lt[MAX_DPB_SIZE];
2999 
3000     /**
3001      *  slice_sao_luma_flag
3002      */
3003     WORD8 i1_slice_sao_luma_flag;
3004 
3005     /**
3006      *  slice_sao_chroma_flag
3007      */
3008     WORD8 i1_slice_sao_chroma_flag;
3009 
3010     /**
3011      *  slice_temporal_mvp_enable_flag
3012      */
3013     WORD8 i1_slice_temporal_mvp_enable_flag;
3014 
3015     /**
3016      *  num_ref_idx_active_override_flag
3017      */
3018     WORD8 i1_num_ref_idx_active_override_flag;
3019 
3020     /**
3021      *  num_ref_idx_l0_active_minus1
3022      */
3023     WORD8 i1_num_ref_idx_l0_active;
3024 
3025     /**
3026      *  num_ref_idx_l1_active_minus1
3027      */
3028     WORD8 i1_num_ref_idx_l1_active;
3029 
3030     /**
3031      *  mvd_l1_zero_flag
3032      */
3033     WORD8 i1_mvd_l1_zero_flag;
3034 
3035     /**
3036      *  cabac_init_flag
3037      */
3038     WORD8 i1_cabac_init_flag;
3039 
3040     /**
3041      *  collocated_from_l0_flag
3042      */
3043     WORD8 i1_collocated_from_l0_flag;
3044 
3045     /**
3046      *  collocated_ref_idx
3047      */
3048     WORD8 i1_collocated_ref_idx;
3049 
3050     /**
3051      * five_minus_max_num_merge_cand
3052      */
3053     WORD8 i1_max_num_merge_cand;
3054 
3055     /**
3056      *  slice_qp_delta
3057      */
3058     WORD8 i1_slice_qp_delta;
3059 
3060     /**
3061      *  slice_cb_qp_offset
3062      */
3063     WORD8 i1_slice_cb_qp_offset;
3064 
3065     /**
3066      *  slice_cr_qp_offset
3067      */
3068     WORD8 i1_slice_cr_qp_offset;
3069 
3070     /**
3071      *  deblocking_filter_override_flag
3072      */
3073     WORD8 i1_deblocking_filter_override_flag;
3074 
3075     /**
3076      *  slice_disable_deblocking_filter_flag
3077      */
3078     WORD8 i1_slice_disable_deblocking_filter_flag;
3079 
3080     /**
3081      *  beta_offset_div2
3082      */
3083     WORD8 i1_beta_offset_div2;
3084 
3085     /**
3086      *  tc_offset_div2
3087      */
3088     WORD8 i1_tc_offset_div2;
3089 
3090     /**
3091      *  slice_loop_filter_across_slices_enabled_flag
3092      */
3093     WORD8 i1_slice_loop_filter_across_slices_enabled_flag;
3094 
3095     /**
3096      *  NUmber of entry point offsets
3097      */
3098     WORD32 i4_num_entry_point_offsets;
3099 
3100     /**
3101      *  offset_len_minus1
3102      */
3103     WORD8 i1_offset_len;
3104 
3105     /**
3106      *  Entry point offsets
3107      */
3108     WORD32 *pu4_entry_point_offset;
3109 
3110     /**
3111      * Short term reference picture set
3112      */
3113     stref_picset_t s_stref_picset;
3114 
3115     /**
3116      *  Weight and offset info for Weighted prediction
3117      */
3118     pred_wt_ofst_t s_wt_ofst;
3119 
3120     /**
3121      *  Reference prediction list modification
3122      */
3123     rplm_t s_rplm;
3124 
3125     /**
3126      *  First CTB' X pos : slice_address % i2_pic_wd_in_ctb
3127      */
3128     WORD16 i2_ctb_x;
3129 
3130     /**
3131      *  First CTB' Y pos : slice_address / i2_pic_wd_in_ctb
3132      */
3133     WORD16 i2_ctb_y;
3134 
3135     /**
3136      * L0 Reference pic lists
3137      */
3138     ref_list_t as_ref_pic_list0[MAX_DPB_SIZE];
3139 
3140     /**
3141      * L1 Reference pic lists
3142      */
3143     ref_list_t as_ref_pic_list1[MAX_DPB_SIZE];
3144 
3145     /**
3146      * NAL unit type of the slice
3147      */
3148     WORD8 i1_nal_unit_type;
3149 
3150     /**
3151      * Low delay check flag
3152      */
3153     WORD8 i1_low_delay_flag;
3154 
3155     /**
3156      * The last independent slice's start ctb_x
3157      * If the current slice is independent, it is the same as the current CTBs ctb_x
3158      */
3159     WORD16 i2_independent_ctb_x;
3160 
3161     /**
3162      * The last independent slice's start ctb_y
3163      * If the current slice is independent, it is the same as the current CTBs ctb_y
3164      */
3165     WORD16 i2_independent_ctb_y;
3166 
3167 #ifdef ENABLE_MAIN_REXT_PROFILE
3168     /**
3169      * cu_chroma_qp_offset_enabled_flag
3170      */
3171     WORD8 i1_cu_chroma_qp_offset_enabled_flag;
3172 #endif
3173 
3174     UWORD8 u1_parse_data_init_done;
3175 
3176     /**
3177      * Temporal ID in NAL header
3178      */
3179     WORD32 u4_nuh_temporal_id;
3180 }slice_header_t;
3181 
3182 
3183 
3184 
3185 
3186 
3187 
3188 
3189 #endif /* _IHEVC_STRUCTS_H_ */
3190