6 #include "dirac_parse.h"
12 int parse_packet (FILE *file
, unsigned char **p_data
, int *p_size
);
15 main (int argc
, char *argv
[])
19 DiracSequenceHeader header
= {0};
21 unsigned char *packet
;
24 fprintf(stderr
, "parse_header infile.drc\n");
28 file
= fopen (argv
[1], "r");
30 printf("cannot open %s for reading: %s\n", argv
[1], strerror(errno
));
35 ret
= parse_packet (file
, &packet
, &size
);
37 printf("parse error\n");
40 if (packet
== NULL
) break;
42 if (SCHRO_PARSE_CODE_IS_SEQ_HEADER(packet
[4])) {
43 ret
= dirac_sequence_header_parse (&header
, packet
+ 13, size
- 13);
46 printf("bad header\n");
50 #define PRINT(ack) printf( #ack ": %d\n", header. ack );
60 PRINT(top_field_first
);
61 PRINT(frame_rate_numerator
);
62 PRINT(frame_rate_denominator
);
63 PRINT(aspect_ratio_numerator
);
64 PRINT(aspect_ratio_denominator
);
70 PRINT(luma_excursion
);
72 PRINT(chroma_excursion
);
73 PRINT(colour_primaries
);
75 PRINT(transfer_function
);
76 PRINT(interlaced_coding
);
88 parse_packet (FILE *file
, unsigned char **p_data
, int *p_size
)
90 unsigned char *packet
;
91 unsigned char header
[13];
95 n
= fread (header
, 1, 13, file
);
102 printf("truncated header\n");
106 if (header
[0] != 'B' || header
[1] != 'B' || header
[2] != 'C' ||
111 size
= (header
[5]<<24) | (header
[6]<<16) | (header
[7]<<8) | (header
[8]);
118 if (size
> 16*1024*1024) {
119 printf("packet too large? (%d > 16777216)\n", size
);
123 packet
= malloc (size
);
124 memcpy (packet
, header
, 13);
125 n
= fread (packet
+ 13, 1, size
- 13, file
);