commit - 867feca8227fc51e897039267b0188160b733e02
commit + d1b596e5014a1ae0e44bc04cf4baf5f84f69835a
blob - c0fd252e51df618c2c1812d4efbeef50918c5d57
blob + 0cd209a838eff40e6c46ca4012ed4351a738fb87
--- pdf.c
+++ pdf.c
H_RULE(app0_rgb, h_repeat_n(h_uint8(), 3));
H_RULE(app0_rgb_n, h_many(app0_rgb));
- H_RULE(app0, SEQ(app0_marker, app0_length, app0_magic, app0_vmajor, app0_vminor, app0_densityunits,
+ H_RULE(app0, SEQ(jpgmagic, app0_marker, app0_length, app0_magic, app0_vmajor, app0_vminor, app0_densityunits,
app0_densityx, app0_densityy, app0_thumbnailx, app0_thumbnaily, app0_rgb_n));
H_RULE(app1_marker, h_ch('\xE1'));
H_RULE(app1_zero, h_ch('\0'));
H_RULE(app1_exifdata, h_many(h_uint8()));
- H_RULE(app1, SEQ(app1_marker, app1_zero, app1_exifdata));
+ H_RULE(app1, SEQ(jpgmagic, app1_marker, app1_zero, app1_exifdata));
H_RULE(sof0_marker, h_ch('\xC0'));
/* Bits per sample */
H_RULE(sof0_samplingfactors, h_uint8());
/* Quantization table ID */
H_RULE(sof0_qtableid, h_uint8());
- H_RULE(sof0_component, SEQ(sof0_componentid, sof0_samplingfactors, sof0_qtableid));
+ H_RULE(sof0_component, SEQ(jpgmagic, sof0_componentid, sof0_samplingfactors, sof0_qtableid));
/* Rule for the component itself */
H_RULE(sof0_component_lv, h_length_value(sof0_numcomponents, sof0_component));
- H_RULE(sof0, SEQ(sof0_marker, sof0_bps, sof0_imgheight, sof0_imgwidth, sof0_component_lv));
+ H_RULE(sof0, SEQ(jpgmagic, sof0_marker, sof0_bps, sof0_imgheight, sof0_imgwidth, sof0_component_lv));
-
H_RULE(soi_marker, h_ch('\xD8'));
- H_RULE(soi, SEQ(soi_marker));
+ H_RULE(soi, SEQ(jpgmagic, soi_marker));
/* start of scan marker segment */
H_RULE(sos_marker, h_ch('\xDA'));
H_RULE(sos_approxbitpos, h_uint8());
/* Final SOS segment parser */
- H_RULE(sos, SEQ(sos_marker, sos_component_lv, sos_startspectral, sos_endspectral, sos_approxbitpos));
+ H_RULE(sos, SEQ(jpgmagic, sos_marker, sos_component_lv, sos_startspectral, sos_endspectral, sos_approxbitpos));
// XXX rest of the markers
H_RULE(eoi_marker, h_ch('\xD9'));
- H_RULE(eoi, SEQ(eoi_marker));
+ H_RULE(eoi, SEQ(jpgmagic, eoi_marker));
+
+ H_RULE(dnl_marker, h_ch('\xDC'));
+ H_RULE(dnl_length, h_uint16());
+ H_RULE(dnl_numoflines, h_uint16());
+ H_RULE(dnl, SEQ(jpgmagic, dnl_marker, dnl_length, dnl_numoflines));
+
+ H_RULE(rst0_marker, h_ch('\xD0'));
+ H_RULE(rst0, SEQ(jpgmagic, rst0_marker));
+ H_RULE(rst1_marker, h_ch('\xD1'));
+ H_RULE(rst1, SEQ(jpgmagic, rst1_marker));
+ H_RULE(rst2_marker, h_ch('\xD2'));
+ H_RULE(rst2, SEQ(jpgmagic, rst2_marker));
+ H_RULE(rst3_marker, h_ch('\xD3'));
+ H_RULE(rst3, SEQ(jpgmagic, rst3_marker));
+ H_RULE(rst4_marker, h_ch('\xD4'));
+ H_RULE(rst4, SEQ(jpgmagic, rst4_marker));
+ H_RULE(rst5_marker, h_ch('\xD5'));
+ H_RULE(rst5, SEQ(jpgmagic, rst5_marker));
+ H_RULE(rst6_marker, h_ch('\xD6'));
+ H_RULE(rst6, SEQ(jpgmagic, rst6_marker));
+ H_RULE(rst7_marker, h_ch('\xD7'));
+ H_RULE(rst7, SEQ(jpgmagic, rst7_marker));
+ H_RULE(rst, CHX(rst0, rst1, rst2, rst3, rst4, rst5, rst6, rst7, rst8));
+
// XXX for now this is to prevent unused variable errors when compiling
//H_ARULE(dct, SEQ(jpgmagic, app0, sos));
- //H_RULE(jpg_frame);
- //H_RULE(jpg_scan);
- H_RULE(dct, SEQ(soi, eoi);
+ //H_RULE(jpg_tables_misc, h_many(CHX(app0, )
+ H_RULE(jpg_tables_misc, h_many(app0)); // XXX other APP segments and table definition segments, ITU T.81 B.2.4
+
+ H_RULE(ecs, h_many(h_uint8());
+
+ H_RULE(jpg_scan_header, sos);
+ H_RULE(jpg_scan, SEQ(OPT(jpg_tables_misc), jpg_scan_header, OPT(h_many(SEQ(ecs, rst)), ecs)));
+ //H_RULE(jpg_frame_header, CHX(sof0, sof1,...));
+ H_RULE(jpg_frame_header, sof0); // XXX other frame types
+ H_RULE(jpg_frame, SEQ(OPT(jpg_tables_misc), jpg_frame_header, jpg_scan, OPT(dnl), OPT(h_many(jpg_scan))));
+ H_RULE(dct, SEQ(soi, jpg_frame, eoi));
+
p_dct = dct;
}