1 /* /////////////////////////////////////////////////////////////////////// 2 // 3 // INTEL CORPORATION PROPRIETARY INFORMATION 4 // This software is supplied under the terms of a license agreement or 5 // nondisclosure agreement with Intel Corporation and may not be copied 6 // or disclosed except in accordance with the terms of that agreement. 7 // Copyright (c) 2001-2006 Intel Corporation. All Rights Reserved. 8 // 9 // Description: MPEG-4 header. 10 // 11 */ 12 13 14 #ifndef _H264_SEI_H_ 15 #define _H264_SEI_H_ 16 17 #include "h264.h" 18 19 20 //defines for SEI 21 #define MAX_CPB_CNT 32 22 #define MAX_NUM_CLOCK_TS 3 23 #define MAX_PAN_SCAN_CNT 3 24 #define MAX_NUM_SPARE_PICS 16 25 #define MAX_SUB_SEQ_LAYERS 256 26 #define MAX_SLICE_GRPS 1 // for high profile 27 #define NUM_SPS 32 28 #define MAX_NUM_REF_SUBSEQS 256 29 30 31 #define SEI_SCAN_FORMAT_INTERLACED 0x1 32 #define SEI_SCAN_FORMAT_PROGRESSIVE 0x3 33 #define SEI_SCAN_FORMAT_VALID(r) (r&0x1) 34 #define SEI_SCAN_FORMAT(r) ((r&0x2)>>1) 35 36 typedef enum 37 { 38 SEI_BUF_PERIOD = 0, 39 SEI_PIC_TIMING, 40 SEI_PAN_SCAN, 41 SEI_FILLER_PAYLOAD, 42 SEI_REG_USERDATA, 43 SEI_UNREG_USERDATA, 44 SEI_RECOVERY_POINT, 45 SEI_DEC_REF_PIC_MARKING_REP, 46 SEI_SPARE_PIC, 47 SEI_SCENE_INFO, 48 SEI_SUB_SEQ_INFO, 49 SEI_SUB_SEQ_LAYER, 50 SEI_SUB_SEQ, 51 SEI_FULL_FRAME_FREEZE, 52 SEI_FULL_FRAME_FREEZE_RELEASE, 53 SEI_FULL_FRAME_SNAPSHOT, 54 SEI_PROGRESSIVE_SEGMENT_START, 55 SEI_PROGRESSIVE_SEGMENT_END, 56 SEI_MOTION_CONSTRAINED_SLICE_GRP_SET, 57 SEI_FILM_GRAIN_CHARACTERISTICS, 58 SEI_DEBLK_FILTER_DISPLAY_PREFERENCE, 59 SEI_STEREO_VIDEO_INFO, 60 SEI_RESERVED, 61 }h264_sei_payloadtype; 62 63 64 65 typedef struct _h264_SEI_buffering_period 66 { 67 int32_t seq_param_set_id; 68 int32_t initial_cpb_removal_delay_nal; 69 int32_t initial_cpb_removal_delay_offset_nal; 70 int32_t initial_cpb_removal_delay_vcl; 71 int32_t initial_cpb_removal_delay_offset_vcl; 72 73 }h264_SEI_buffering_period_t; 74 75 typedef struct _h264_SEI_pic_timing 76 { 77 int32_t cpb_removal_delay; 78 int32_t dpb_output_delay; 79 int32_t pic_struct; 80 }h264_SEI_pic_timing_t; 81 82 #if 0 83 int32_t clock_timestamp_flag[MAX_NUM_CLOCK_TS]; 84 int32_t ct_type[MAX_NUM_CLOCK_TS]; 85 int32_t nuit_field_based_flag[MAX_NUM_CLOCK_TS]; 86 int32_t counting_type[MAX_NUM_CLOCK_TS]; 87 int32_t full_timestamp_flag[MAX_NUM_CLOCK_TS]; 88 int32_t discontinuity_flag[MAX_NUM_CLOCK_TS]; 89 int32_t cnt_dropped_flag[MAX_NUM_CLOCK_TS]; 90 int32_t n_frames[MAX_NUM_CLOCK_TS]; 91 int32_t seconds_value[MAX_NUM_CLOCK_TS]; 92 int32_t minutes_value[MAX_NUM_CLOCK_TS]; 93 int32_t hours_value[MAX_NUM_CLOCK_TS]; 94 int32_t seconds_flag[MAX_NUM_CLOCK_TS]; 95 int32_t minutes_flag[MAX_NUM_CLOCK_TS]; 96 int32_t hours_flag[MAX_NUM_CLOCK_TS]; 97 int32_t time_offset[MAX_NUM_CLOCK_TS]; 98 99 #endif 100 101 typedef struct _h264_SEI_pan_scan_rectangle 102 { 103 int32_t pan_scan_rect_id; 104 int32_t pan_scan_rect_cancel_flag; 105 int32_t pan_scan_cnt_minus1; 106 int32_t pan_scan_rect_left_offset[MAX_PAN_SCAN_CNT]; 107 int32_t pan_scan_rect_right_offset[MAX_PAN_SCAN_CNT]; 108 int32_t pan_scan_rect_top_offset[MAX_PAN_SCAN_CNT]; 109 int32_t pan_scan_rect_bottom_offset[MAX_PAN_SCAN_CNT]; 110 int32_t pan_scan_rect_repetition_period; 111 }h264_SEI_pan_scan_rectangle_t; 112 113 typedef struct _h264_SEI_filler_payload 114 { 115 int32_t ff_byte; 116 }h264_SEI_filler_payload_t; 117 118 typedef struct _h264_SEI_userdata_registered 119 { 120 int32_t itu_t_t35_country_code; 121 int32_t itu_t_t35_country_code_extension_byte; 122 int32_t itu_t_t35_payload_byte; 123 }h264_SEI_userdata_registered_t; 124 125 typedef struct _h264_SEI_userdata_unregistered 126 { 127 int32_t uuid_iso_iec_11578[4]; 128 int32_t user_data_payload_byte; 129 }h264_SEI_userdata_unregistered_t; 130 131 typedef struct _h264_SEI_recovery_point 132 { 133 int32_t recovery_frame_cnt; 134 int32_t exact_match_flag; 135 int32_t broken_link_flag; 136 int32_t changing_slice_group_idc; 137 }h264_SEI_recovery_point_t; 138 139 typedef struct _h264_SEI_decoded_ref_pic_marking_repetition 140 { 141 int32_t original_idr_flag; 142 int32_t original_frame_num; 143 int32_t orignal_field_pic_flag; 144 int32_t original_bottom_field_pic_flag; 145 int32_t no_output_of_prior_pics_flag; 146 int32_t long_term_reference_flag; 147 int32_t adaptive_ref_pic_marking_mode_flag; 148 int32_t memory_management_control_operation; //UE 149 int32_t difference_of_pics_num_minus1; //UE 150 int32_t long_term_pic_num; //UE 151 int32_t long_term_frame_idx; //UE 152 int32_t max_long_term_frame_idx_plus1; //UE 153 }h264_SEI_decoded_ref_pic_marking_repetition_t; 154 155 typedef struct _h264_SEI_spare_picture 156 { 157 int32_t target_frame_num; 158 int32_t spare_field_flag; 159 int32_t target_bottom_field_flag; 160 int32_t num_spare_pics_minus1; 161 int32_t delta_spare_frame_num[MAX_NUM_SPARE_PICS]; 162 int32_t spare_bottom_field_flag[MAX_NUM_SPARE_PICS]; 163 int32_t spare_area_idc[MAX_NUM_SPARE_PICS]; // not complete 164 }h264_SEI_spare_picture_t; 165 166 typedef struct _h264_SEI_scene_info 167 { 168 int32_t scene_info_present_flag; 169 int32_t scene_id; 170 int32_t scene_transitioning_type; 171 int32_t second_scene_id; 172 }h264_SEI_scene_info_t; 173 174 typedef struct _h264_SEI_sub_sequence_info 175 { 176 int32_t sub_seq_layer_num; 177 int32_t sub_seq_id; 178 int32_t first_ref_pic_flag; 179 int32_t leading_non_ref_pic_flag; 180 int32_t last_pic_flag; 181 int32_t sub_seq_frame_num_flag; 182 int32_t sub_seq_frame_num; 183 }h264_SEI_sub_sequence_info_t; 184 185 typedef struct _h264_SEI_sub_sequence_layer 186 { 187 int32_t num_sub_seq_layers_minus1; 188 int32_t accurate_statistics_flag[MAX_SUB_SEQ_LAYERS]; 189 int32_t average_bit_rate[MAX_SUB_SEQ_LAYERS]; 190 int32_t average_frame_rate[MAX_SUB_SEQ_LAYERS]; 191 }h264_SEI_sub_sequence_layer_t; 192 193 typedef struct _h264_SEI_sub_sequence 194 { 195 int32_t sub_seq_layer_num; 196 int32_t sub_seq_id; 197 int32_t duration_flag; 198 int32_t sub_seq_duration; 199 int32_t average_rate_flag; 200 int32_t average_statistics_flag; 201 int32_t average_bit_rate; 202 int32_t average_frame_rate; 203 int32_t num_referenced_subseqs; 204 int32_t ref_sub_seq_layer_num; 205 int32_t ref_sub_seq_id; 206 int32_t ref_sub_seq_direction; 207 }h264_SEI_sub_sequence_t; 208 209 typedef struct _h264_SEI_full_frame_freeze 210 { 211 int32_t full_frame_freeze_repetition_period; 212 }h264_SEI_full_frame_freeze_t; 213 214 typedef struct _h264_SEI_full_frame_snapshot 215 { 216 int32_t snapshot_id; 217 }h264_SEI_full_frame_snapshot_t; 218 219 typedef struct _h264_SEI_progressive_segment_start 220 { 221 int32_t progressive_refinement_id; 222 int32_t num_refinement_steps_minus1; 223 }h264_SEI_progressive_segment_start_t; 224 225 typedef struct _h264_SEI_progressive_segment_end 226 { 227 int32_t progressive_refinement_id; 228 }h264_SEI_progressive_segment_end_t; 229 230 typedef struct _h264_SEI_motion_constrained_slice_group 231 { 232 int32_t num_slice_groups_in_set_minus1; 233 int32_t slice_group_id[MAX_SLICE_GRPS]; 234 int32_t exact_sample_value_match_flag; 235 int32_t pan_scan_rect_flag; 236 int32_t pan_scan_rect_id; 237 }h264_SEI_motion_constrained_slice_group_t; 238 239 typedef struct _h264_SEI_deblocking_filter_display_pref 240 { 241 int32_t devlocking_display_preference_cancel_flag; 242 int32_t display_prior_to_deblocking_preferred_flag; 243 int32_t dec_frame_buffering_constraint_flag; 244 int32_t deblocking_display_preference_repetition_period; 245 }h264_SEI_deblocking_filter_display_pref_t; 246 247 typedef struct _h264_SEI_stereo_video_info 248 { 249 int32_t field_views_flag; 250 int32_t top_field_is_left_view_flag; 251 int32_t curent_frame_is_left_view_flag; 252 int32_t next_frame_is_second_view_flag; 253 int32_t left_view_self_contained_flag; 254 int32_t right_view_self_contained_flag; 255 }h264_SEI_stereo_video_info_t; 256 257 typedef struct _h264_SEI_reserved 258 { 259 int32_t reserved_sei_message_payload_byte; 260 }h264_SEI_reserved_t; 261 262 263 //////////////////////////// 264 // SEI Info 265 ///////////////////////////// 266 267 typedef struct sei_info 268 { 269 int32_t recovery_point; 270 int32_t recovery_frame_num; 271 272 int32_t capture_POC; 273 int32_t freeze_POC; 274 int32_t release_POC; // The POC which when reached will allow display update to re-commence 275 int32_t disp_frozen; // Indicates display is currently frozen 276 int32_t freeze_rep_period; 277 int32_t recovery_frame_cnt; 278 int32_t capture_fn; 279 int32_t recovery_fn; 280 int32_t broken_link; 281 int32_t scan_format; 282 int32_t broken_link_pic; 283 }sei_info, *sei_info_ptr; 284 285 /*typedef struct _h264_SEI 286 { 287 h264_SEI_buffering_period_t buf_period; 288 h264_SEI_pic_timing_t pic_timing; 289 h264_SEI_pan_scan_rectangle_t pan_scan_timing; 290 h264_SEI_filler_payload_t filler_payload; 291 h264_SEI_userdata_registered_t userdata_reg; 292 h264_SEI_userdata_unregistered_t userdata_unreg; 293 h264_SEI_recovery_point_t recovery_point; 294 h264_SEI_decoded_ref_pic_marking_repetition_t dec_ref_pic_marking_rep; 295 h264_SEI_spare_picture_t spare_pic; 296 h264_SEI_scene_info_t scene_info; 297 h264_SEI_sub_sequence_info_t sub_sequence_info; 298 h264_SEI_sub_sequence_layer_t sub_sequence_layer; 299 h264_SEI_sub_sequence_t sub_sequence; 300 h264_SEI_full_frame_snapshot_t full_frame_snapshot; 301 h264_SEI_full_frame_t full_frame; 302 h264_SEI_progressive_segment_start_t progressive_segment_start; 303 h264_SEI_progressive_segment_end_t progressive_segment_end; 304 h264_SEI_motion_constrained_slice_group_t motion_constrained_slice_grp; 305 h264_SEI_deblocking_filter_display_pref_t deblk_filter_display_pref; 306 h264_SEI_stereo_video_info_t stereo_video_info; 307 h264_SEI_reserved_t reserved; 308 }h264_SEI_t; 309 */ 310 311 312 #endif //_H264_SEI_H_ 313 314 315