• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #ifndef VIDDEC_MP4_PARSE_H
2 #define VIDDEC_MP4_PARSE_H
3 
4 #include "viddec_fw_debug.h"
5 #include "viddec_fw_mp4.h"
6 
7 /* Macros for MP4 start code detection */
8 #define FIRST_STARTCODE_BYTE        0x00
9 #define SECOND_STARTCODE_BYTE       0x00
10 #define THIRD_STARTCODE_BYTE        0x01
11 #define SHORT_THIRD_STARTCODE_BYTE  0x80
12 #define SC_BYTE_MASK0               0x00ff0000
13 #define SC_BYTE_MASK1               0x000000ff
14 
15 /* status codes */
16 typedef enum
17 {
18     MP4_STATUS_OK               =  0,   /* Success */
19     MP4_STATUS_PARSE_ERROR      = (1 << 0),   /* Invalid syntax */
20     MP4_STATUS_NOTSUPPORT       = (1 << 1),   /* unsupported feature */
21     MP4_STATUS_REQD_DATA_ERROR  = (1 << 2),   /* supported data either invalid or missing */
22 } mp4_Status_t;
23 
24 /* feature codes */
25 typedef enum
26 {
27     MP4_VOP_FEATURE_DEFAULT =  0,   // Default VOP features, no code image update needed
28     MP4_VOP_FEATURE_SVH     =  1,   // VOP has Short Video Header
29     MP4_VOP_FEATURE_DP      =  2    // VOP is Data Partitioned
30 } mp4_Vop_feature;
31 
32 /* MPEG-4 start code values: Table 6-3 */
33 typedef enum
34 {
35     MP4_SC_VIDEO_OBJECT_MIN          = 0x00,
36     MP4_SC_VIDEO_OBJECT_MAX          = 0x1F,
37     MP4_SC_VIDEO_OBJECT_LAYER_MIN    = 0x20,
38     MP4_SC_VIDEO_OBJECT_LAYER_MAX    = 0x2F,
39     MP4_SC_FGS_BP_MIN                = 0x40, /* Unsupported */
40     MP4_SC_FGS_BP_MAX                = 0x5F, /* Unsupported */
41     MP4_SC_VISUAL_OBJECT_SEQUENCE    = 0xB0,
42     MP4_SC_VISUAL_OBJECT_SEQUENCE_EC = 0xB1,
43     MP4_SC_USER_DATA                 = 0xB2,
44     MP4_SC_GROUP_OF_VOP              = 0xB3,
45     MP4_SC_VIDEO_SESSION_ERROR       = 0xB4,
46     MP4_SC_VISUAL_OBJECT             = 0xB5,
47     MP4_SC_VIDEO_OBJECT_PLANE        = 0xB6,
48     MP4_SC_SLICE                     = 0xB7, /* Unsupported */
49     MP4_SC_EXTENSION                 = 0xB8, /* Unsupported */
50     MP4_SC_FGS_VOP                   = 0xB9, /* Unsupported */
51     MP4_SC_FBA_OBJECT                = 0xBA, /* Unsupported */
52     MP4_SC_FBA_OBJECT_PLANE          = 0xBB, /* Unsupported */
53     MP4_SC_MESH_OBJECT               = 0xBC, /* Unsupported */
54     MP4_SC_MESH_OBJECT_PLANE         = 0xBD, /* Unsupported */
55     MP4_SC_STILL_TEXTURE_OBJECT      = 0xBE, /* Unsupported */
56     MP4_SC_TEXTURE_SPATIAL_LAYER     = 0xBF, /* Unsupported */
57     MP4_SC_TEXTURE_SNR_LAYER         = 0xC0, /* Unsupported */
58     MP4_SC_TEXTURE_TILE              = 0xC1, /* Unsupported */
59     MP4_SC_TEXTURE_SHAPE_LAYER       = 0xC2, /* Unsupported */
60     MP4_SC_STUFFING                  = 0xC3,
61     MP4_SC_SYTEM_MIN                 = 0xC6, /* Unsupported */
62     MP4_SC_SYTEM_MAX                 = 0xFF, /* Unsupported */
63     MP4_SC_INVALID                   = 0x100, /* Invalid */
64 }mp4_start_code_values_t;
65 
66 /* MPEG-4 code values
67    ISO/IEC 14496-2:2004 table 6-6 */
68 enum
69 {
70     MP4_VISUAL_OBJECT_TYPE_VIDEO     = 1,
71     MP4_VISUAL_OBJECT_TYPE_TEXTURE   = 2,
72     MP4_VISUAL_OBJECT_TYPE_MESH      = 3,
73     MP4_VISUAL_OBJECT_TYPE_FBA       = 4,
74     MP4_VISUAL_OBJECT_TYPE_3DMESH    = 5
75 };
76 
77 /* ISO/IEC 14496-2:2004 table 6-7 */
78 enum
79 {
80     MP4_VIDEO_FORMAT_COMPONENT      = 0,
81     MP4_VIDEO_FORMAT_PAL            = 1,
82     MP4_VIDEO_FORMAT_NTSC           = 2,
83     MP4_VIDEO_FORMAT_SECAM          = 3,
84     MP4_VIDEO_FORMAT_MAC            = 4,
85     MP4_VIDEO_FORMAT_UNSPECIFIED    = 5
86 };
87 
88 /* ISO/IEC 14496-2:2004 table 6-8..10 */
89 enum
90 {
91     MP4_VIDEO_COLORS_FORBIDDEN         = 0,
92     MP4_VIDEO_COLORS_ITU_R_BT_709      = 1,
93     MP4_VIDEO_COLORS_UNSPECIFIED       = 2,
94     MP4_VIDEO_COLORS_RESERVED          = 3,
95     MP4_VIDEO_COLORS_ITU_R_BT_470_2_M  = 4,
96     MP4_VIDEO_COLORS_ITU_R_BT_470_2_BG = 5,
97     MP4_VIDEO_COLORS_SMPTE_170M        = 6,
98     MP4_VIDEO_COLORS_SMPTE_240M        = 7,
99     MP4_VIDEO_COLORS_GENERIC_FILM      = 8
100 };
101 
102 /* ISO/IEC 14496-2:2004 table 6-11 */
103 enum
104 {
105     MP4_VIDEO_OBJECT_TYPE_SIMPLE                     = 1,
106     MP4_VIDEO_OBJECT_TYPE_SIMPLE_SCALABLE            = 2,
107     MP4_VIDEO_OBJECT_TYPE_CORE                       = 3,
108     MP4_VIDEO_OBJECT_TYPE_MAIN                       = 4,
109     MP4_VIDEO_OBJECT_TYPE_NBIT                       = 5,
110     MP4_VIDEO_OBJECT_TYPE_2DTEXTURE                  = 6,
111     MP4_VIDEO_OBJECT_TYPE_2DMESH                     = 7,
112     MP4_VIDEO_OBJECT_TYPE_SIMPLE_FACE                = 8,
113     MP4_VIDEO_OBJECT_TYPE_STILL_SCALABLE_TEXTURE     = 9,
114     MP4_VIDEO_OBJECT_TYPE_ADVANCED_REAL_TIME_SIMPLE  = 10,
115     MP4_VIDEO_OBJECT_TYPE_CORE_SCALABLE              = 11,
116     MP4_VIDEO_OBJECT_TYPE_ADVANCED_CODING_EFFICIENCY = 12,
117     MP4_VIDEO_OBJECT_TYPE_ADVANCED_SCALABLE_TEXTURE  = 13,
118     MP4_VIDEO_OBJECT_TYPE_SIMPLE_FBA                 = 14,
119     MP4_VIDEO_OBJECT_TYPE_SIMPLE_STUDIO              = 15,
120     MP4_VIDEO_OBJECT_TYPE_CORE_STUDIO                = 16,
121     MP4_VIDEO_OBJECT_TYPE_ADVANCED_SIMPLE            = 17,
122     MP4_VIDEO_OBJECT_TYPE_FINE_GRANULARITY_SCALABLE  = 18
123 };
124 
125 /*  ISO/IEC 14496-2:2004 table 6.17 (maximum defined video_object_layer_shape_extension) */
126 #define MP4_SHAPE_EXT_NUM 13
127 
128 /* ISO/IEC 14496-2:2004 table 6-14 */
129 enum
130 {
131     MP4_ASPECT_RATIO_FORBIDDEN  = 0,
132     MP4_ASPECT_RATIO_1_1        = 1,
133     MP4_ASPECT_RATIO_12_11      = 2,
134     MP4_ASPECT_RATIO_10_11      = 3,
135     MP4_ASPECT_RATIO_16_11      = 4,
136     MP4_ASPECT_RATIO_40_33      = 5,
137     MP4_ASPECT_RATIO_EXTPAR     = 15
138 };
139 
140 /* ISO/IEC 14496-2:2004 table 6-15 */
141 #define MP4_CHROMA_FORMAT_420    1
142 
143 /* ISO/IEC 14496-2:2004 table 6-16 */
144 enum
145 {
146     MP4_SHAPE_TYPE_RECTANGULAR  = 0,
147     MP4_SHAPE_TYPE_BINARY       = 1,
148     MP4_SHAPE_TYPE_BINARYONLY   = 2,
149     MP4_SHAPE_TYPE_GRAYSCALE    = 3
150 };
151 
152 /* ISO/IEC 14496-2:2004 table 6-19 */
153 #define MP4_SPRITE_STATIC   1
154 #define MP4_SPRITE_GMC      2
155 
156 /* ISO/IEC 14496-2:2004 table 6-24 */
157 enum
158 {
159     MP4_VOP_TYPE_I  = 0,
160     MP4_VOP_TYPE_P  = 1,
161     MP4_VOP_TYPE_B  = 2,
162     MP4_VOP_TYPE_S  = 3,
163 };
164 
165 /* ISO/IEC 14496-2:2004 table 6-26 */
166 enum
167 {
168     MP4_SPRITE_TRANSMIT_MODE_STOP   = 0,
169     MP4_SPRITE_TRANSMIT_MODE_PIECE  = 1,
170     MP4_SPRITE_TRANSMIT_MODE_UPDATE = 2,
171     MP4_SPRITE_TRANSMIT_MODE_PAUSE  = 3
172 };
173 
174 /* ISO/IEC 14496-2:2004 table 7-3 */
175 enum
176 {
177     MP4_BAB_TYPE_MVDSZ_NOUPDATE  = 0,
178     MP4_BAB_TYPE_MVDSNZ_NOUPDATE = 1,
179     MP4_BAB_TYPE_TRANSPARENT     = 2,
180     MP4_BAB_TYPE_OPAQUE          = 3,
181     MP4_BAB_TYPE_INTRACAE        = 4,
182     MP4_BAB_TYPE_MVDSZ_INTERCAE  = 5,
183     MP4_BAB_TYPE_MVDSNZ_INTERCAE = 6
184 };
185 
186 #define MP4_DC_MARKER  0x6B001 // 110 1011 0000 0000 0001
187 #define MP4_MV_MARKER  0x1F001 //   1 1111 0000 0000 0001
188 
189 
190 /* ISO/IEC 14496-2:2004 table G.1 */
191 enum
192 {
193     MP4_SIMPLE_PROFILE_LEVEL_1                     = 0x01,
194     MP4_SIMPLE_PROFILE_LEVEL_2                     = 0x02,
195     MP4_SIMPLE_PROFILE_LEVEL_3                     = 0x03,
196     MP4_SIMPLE_PROFILE_LEVEL_4a                    = 0x04,
197     MP4_SIMPLE_PROFILE_LEVEL_5                     = 0x05,
198     MP4_SIMPLE_PROFILE_LEVEL_6                     = 0x06,
199     MP4_SIMPLE_PROFILE_LEVEL_0                     = 0x08,
200     MP4_CORE_PROFILE_LEVEL_1                       = 0x21,
201     MP4_CORE_PROFILE_LEVEL_2                       = 0x22,
202     MP4_MAIN_PROFILE_LEVEL_2                       = 0x32,
203     MP4_MAIN_PROFILE_LEVEL_3                       = 0x33,
204     MP4_MAIN_PROFILE_LEVEL_4                       = 0x34,
205     MP4_ADVANCED_REAL_TIME_SIMPLE_PROFILE_LEVEL_1  = 0x91,
206     MP4_ADVANCED_REAL_TIME_SIMPLE_PROFILE_LEVEL_2  = 0x92,
207     MP4_ADVANCED_REAL_TIME_SIMPLE_PROFILE_LEVEL_3  = 0x93,
208     MP4_ADVANCED_REAL_TIME_SIMPLE_PROFILE_LEVEL_4  = 0x94,
209     MP4_ADVANCED_CODING_EFFICIENCY_PROFILE_LEVEL_1 = 0xB1,
210     MP4_ADVANCED_CODING_EFFICIENCY_PROFILE_LEVEL_2 = 0xB2,
211     MP4_ADVANCED_CODING_EFFICIENCY_PROFILE_LEVEL_3 = 0xB3,
212     MP4_ADVANCED_CODING_EFFICIENCY_PROFILE_LEVEL_4 = 0xB4,
213     MP4_ADVANCED_CORE_PROFILE_LEVEL_1              = 0xC1,
214     MP4_ADVANCED_CORE_PROFILE_LEVEL_2              = 0xC2,
215     MP4_ADVANCED_SIMPLE_PROFILE_LEVEL_0            = 0xF0,
216     MP4_ADVANCED_SIMPLE_PROFILE_LEVEL_1            = 0xF1,
217     MP4_ADVANCED_SIMPLE_PROFILE_LEVEL_2            = 0xF2,
218     MP4_ADVANCED_SIMPLE_PROFILE_LEVEL_3            = 0xF3,
219     MP4_ADVANCED_SIMPLE_PROFILE_LEVEL_4            = 0xF4,
220     MP4_ADVANCED_SIMPLE_PROFILE_LEVEL_5            = 0xF5,
221     MP4_ADVANCED_SIMPLE_PROFILE_LEVEL_3B           = 0xF7
222 };
223 
224 /* Group Of Video Object Plane Info */
225 typedef struct
226 {
227     uint8_t closed_gov;
228     uint8_t broken_link;
229     uint8_t time_code_hours;
230     uint8_t time_code_minutes;
231     uint8_t time_code_seconds;
232     uint8_t dummy1;
233     uint16_t dummy2;
234     uint32_t time_base;
235 } mp4_GroupOfVideoObjectPlane_t;
236 
237 
238 /* Video Object Plane Info */
239 typedef struct
240 {
241     uint8_t     vop_coding_type;
242     uint32_t    modulo_time_base;
243     uint16_t    vop_time_increment;
244     uint8_t     vop_coded;
245 
246     uint16_t    vop_id;
247     uint16_t    vop_id_for_prediction;
248     uint8_t     is_vop_id_for_prediction_indication;
249     uint8_t     vop_rounding_type;
250     uint8_t     vop_reduced_resolution;
251     uint8_t     align_dummy;
252 
253     uint16_t    vop_width;
254     uint16_t    vop_height;
255     uint16_t    vop_horizontal_mc_spatial_ref;
256     uint16_t    vop_vertical_mc_spatial_ref;
257 
258     uint8_t     background_composition;
259     uint8_t     change_conv_ratio_disable;
260     uint8_t     is_vop_constant_alpha;
261     uint8_t     vop_constant_alpha_value;
262     uint8_t     intra_dc_vlc_thr;
263     uint8_t     top_field_first;
264     uint8_t     alternate_vertical_scan_flag;
265     uint8_t     sprite_transmit_mode;
266 
267     int32_t     brightness_change_factor;
268     uint16_t    vop_quant;
269     uint8_t     vop_fcode_forward;
270     uint8_t     vop_fcode_backward;
271 
272     uint16_t    warping_mv_code_du[4];
273     uint16_t    warping_mv_code_dv[4];
274 
275 } mp4_VideoObjectPlane_t;
276 
277 /* VOLControlParameters Info */
278 typedef struct
279 {
280     uint8_t     chroma_format;
281     uint8_t     low_delay;
282     uint8_t     vbv_parameters;
283     uint8_t     align_dummy1;
284     uint32_t    bit_rate;
285     uint32_t    vbv_buffer_size;
286     uint32_t    vbv_occupancy;
287 } mp4_VOLControlParameters_t;
288 
289 /* Video Object Plane with short header Info */
290 typedef struct _mp4_VideoObjectPlaneH263
291 {
292     uint8_t         temporal_reference;
293     uint8_t         split_screen_indicator;
294     uint8_t         document_camera_indicator;
295     uint8_t         full_picture_freeze_release;
296     uint8_t         source_format;
297     uint8_t         picture_coding_type;
298     uint8_t         vop_quant;
299     uint16_t        num_gobs_in_vop;
300     uint16_t        num_macroblocks_in_gob;
301     uint8_t         num_rows_in_gob;
302 
303 #if 0
304     uint8_t         gob_number;
305     int         gob_header_empty;
306     int         gob_frame_id;
307     int         quant_scale;
308 #endif
309 } mp4_VideoObjectPlaneH263;
310 
311 typedef struct
312 {
313     uint16_t                  sprite_width;
314     uint16_t                  sprite_height;
315     uint16_t                  sprite_left_coordinate;
316     uint16_t                  sprite_top_coordinate;
317     uint16_t                  no_of_sprite_warping_points;
318     uint16_t                  sprite_warping_accuracy;
319     uint16_t                  sprite_brightness_change;
320     uint16_t                  low_latency_sprite_enable;
321 }mp4_VOLSpriteInfo_t;
322 
323 typedef struct
324 {
325     uint8_t                  load_intra_quant_mat;
326     uint8_t                  load_nonintra_quant_mat;
327     uint16_t                 align_dummy1;
328     uint8_t                  intra_quant_mat[64];
329     uint8_t                  nonintra_quant_mat[64];
330 }mp4_VOLQuant_mat_t;
331 
332 /* Video Object Layer Info */
333 typedef struct
334 {
335     uint8_t                     video_object_layer_id; /* Last 4 bits of start code. */
336     uint8_t                     short_video_header;
337     uint8_t                     random_accessible_vol;
338     uint8_t                     video_object_type_indication;
339 
340     uint8_t                     is_object_layer_identifier;
341     uint8_t                     video_object_layer_verid;
342     uint8_t                     video_object_layer_priority;
343     uint8_t                     aspect_ratio_info;
344 
345     uint8_t                     aspect_ratio_info_par_width;
346     uint8_t                     aspect_ratio_info_par_height;
347     uint8_t                     align_dummy1;
348     uint8_t                     is_vol_control_parameters;
349 
350     mp4_VOLControlParameters_t  VOLControlParameters;
351 
352     uint8_t                     video_object_layer_shape;
353     uint16_t                    vop_time_increment_resolution;
354     uint8_t                     vop_time_increment_resolution_bits;
355 
356     uint8_t                     fixed_vop_rate;
357     uint16_t                    fixed_vop_time_increment;
358     uint16_t                    video_object_layer_width;
359     uint16_t                    video_object_layer_height;
360     uint8_t                     interlaced;
361 
362     uint8_t                     obmc_disable;
363     uint8_t                     sprite_enable;
364     mp4_VOLSpriteInfo_t         sprite_info;
365     uint8_t                     not_8_bit;
366     uint8_t                     quant_precision;
367 
368     uint8_t                     bits_per_pixel;
369     uint8_t                     quant_type;
370     mp4_VOLQuant_mat_t          quant_mat_info;
371     uint8_t                     quarter_sample;
372     uint8_t                     complexity_estimation_disable;
373 
374     uint8_t                     resync_marker_disable;
375     uint8_t                     data_partitioned;
376     uint8_t                     reversible_vlc;
377     uint8_t                     newpred_enable;
378 
379     uint8_t                     reduced_resolution_vop_enable;  // verid != 1
380     uint8_t                     scalability;
381     uint8_t                     low_latency_sprite_enable;
382 
383     mp4_GroupOfVideoObjectPlane_t  GroupOfVideoObjectPlane;
384     mp4_VideoObjectPlane_t      VideoObjectPlane;
385     mp4_VideoObjectPlaneH263    VideoObjectPlaneH263;
386 
387     // for interlaced B-VOP direct mode
388     uint32_t                         Tframe;
389     // for B-VOP direct mode
390     uint32_t                         TRB, TRD;
391     // time increment of past and future VOP for B-VOP
392     uint32_t                      pastFrameTime, futureFrameTime;
393     // VOP global time
394     uint32_t                      vop_sync_time, vop_sync_time_b;
395 
396 } mp4_VideoObjectLayer_t;
397 
398 /* video_signal_type Info */
399 typedef struct
400 {
401     uint8_t is_video_signal_type;
402     uint8_t video_format;
403     uint8_t video_range;
404     uint8_t is_colour_description;
405     uint8_t colour_primaries;
406     uint8_t transfer_characteristics;
407     uint8_t matrix_coefficients;
408 } mp4_VideoSignalType_t;
409 
410 typedef struct _mp4_Frame {
411     long long int    time;
412 } mp4_Frame;
413 
414 /* Visual Object Info */
415 typedef struct
416 {
417     uint8_t                 is_visual_object_identifier;
418     uint8_t                 visual_object_verid;
419     uint8_t                 visual_object_priority;
420     uint8_t                 visual_object_type;
421     mp4_VideoSignalType_t   VideoSignalType;
422     mp4_VideoObjectLayer_t  VideoObject;
423 
424     mp4_Frame               currentFrame;      // current
425     mp4_Frame               pastFrame;      // reference in past
426     mp4_Frame               futureFrame;      // reference in future
427 } mp4_VisualObject_t;
428 
429 /* Full Info */
430 typedef struct
431 {
432     mp4_VisualObject_t    VisualObject;
433     uint8_t               profile_and_level_indication;
434 } mp4_Info_t;
435 
436 enum
437 {
438     MP4_SC_SEEN_INVALID = 0x0,
439     MP4_SC_SEEN_VOL = 0x1,
440     MP4_SC_SEEN_VOP = 0x2,
441     MP4_SC_SEEN_SVH = 0x4,
442 };
443 
444 enum
445 {
446     MP4_BS_ERROR_NONE =          (0 << 0),
447     MP4_BS_ERROR_HDR_PARSE =     (1 << 0),
448     MP4_BS_ERROR_HDR_NONDEC =    (1 << 1),
449     MP4_BS_ERROR_HDR_UNSUP =     (1 << 2),
450     MP4_BS_ERROR_FRM_PARSE =     (1 << 3),
451     MP4_BS_ERROR_FRM_NONDEC =    (1 << 4),
452     MP4_BS_ERROR_FRM_UNSUP =     (1 << 5),
453 };
454 
455 #define MP4_HDR_ERROR_MASK (MP4_BS_ERROR_HDR_PARSE | MP4_BS_ERROR_HDR_NONDEC | MP4_BS_ERROR_HDR_UNSUP)
456 
457 typedef enum
458 {
459    VIDDEC_MP4_INDX_0 = 0,
460    VIDDEC_MP4_INDX_1 = 1,
461    VIDDEC_MP4_INDX_2 = 2,
462    VIDDEC_MP4_INDX_MAX = 3,
463 } viddec_fw_mp4_ref_index_t;
464 
465 typedef struct
466 {
467    uint8_t is_field;
468 } viddec_mp4_ref_info_t;
469 
470 typedef struct
471 {
472     // The relevant bitstream data for current stream
473     mp4_Info_t info;
474 
475     // The previous start code (without the prefix)
476     uint32_t   prev_sc;
477 
478     // The current start code (without the prefix)
479     // TODO: Revisit for SVH
480     uint32_t   current_sc;
481 
482     // Indicates if we look for both short and long video header or just the long video header
483     // If false, sc detection looks for both short and long video headers.
484     // If true, long video header has been seen and sc detection does not look for short video header any more.
485     uint8_t    ignore_scs;
486 
487     // Indicates if the current start code prefix is long (if true).
488     uint8_t    cur_sc_prefix;
489 
490     // Indicates if the next start code prefix is long (if true).
491     uint8_t    next_sc_prefix;
492 
493     // Indicates start of a frame
494     uint8_t    is_frame_start;
495 
496     // Indicates which start codes were seen for this workload
497     uint8_t    sc_seen;
498 
499     // Indicates bitstream errors if any
500     uint16_t    bitstream_error;
501 
502    // Reference frame information
503    viddec_mp4_ref_info_t ref_frame[VIDDEC_MP4_INDX_MAX];
504 
505 }viddec_mp4_parser_t;
506 
507 #define BREAK_GETBITS_FAIL(x, ret) {            \
508         if(x == -1){                            \
509             FWTRACE;                            \
510             ret = MP4_STATUS_PARSE_ERROR;       \
511             break;}                             \
512     }
513 
514 #define BREAK_GETBITS_REQD_MISSING(x, ret) {            \
515         if(x == -1){                            \
516             FWTRACE;                            \
517             ret = MP4_STATUS_REQD_DATA_ERROR;       \
518             break;}                             \
519     }
520 
521 extern void *memset(void *s, int32_t c, uint32_t n);
522 
523 uint32_t viddec_fw_mp4_emit_workload(void *parent, void *ctxt);
524 
525 void mp4_set_hdr_bitstream_error(viddec_mp4_parser_t *parser, uint8_t hdr_flag, mp4_Status_t parse_status);
526 
527 #endif
528