free mpo data
[geeqie.git] / src / jpeg_parser.h
1 #ifndef JPEG_PARSER_H
2 #define JPEG_PARSER_H
3
4 #define JPEG_MARKER             0xFF
5 #define JPEG_MARKER_SOI         0xD8
6 #define JPEG_MARKER_EOI         0xD9
7 #define JPEG_MARKER_APP1        0xE1
8 #define JPEG_MARKER_APP2        0xE2
9
10 /* jpeg container format:
11      all data markers start with 0XFF
12      2 byte long file start and end markers: 0xFFD8(SOI) and 0XFFD9(EOI)
13      4 byte long data segment markers in format: 0xFFTTSSSSNNN...
14        FF:   1 byte standard marker identifier
15        TT:   1 byte data type
16        SSSS: 2 bytes in Motorola byte alignment for length of the data.
17              This value includes these 2 bytes in the count, making actual
18              length of NN... == SSSS - 2.
19        NNN.: the data in this segment
20  */
21
22 gboolean jpeg_segment_find(guchar *data, guint size,
23                             guchar app_marker, const gchar *magic, guint magic_len,
24                             guint *seg_offset, guint *seg_length);
25
26
27 typedef struct _MPOData MPOData;
28 typedef struct _MPOEntry MPOEntry;
29
30 struct _MPOEntry {
31         guint type_code;
32         gboolean representative;
33         gboolean dependent_child;
34         gboolean dependent_parent;
35         guint offset;
36         guint length;
37         guint dep1;
38         guint dep2;
39 };
40
41
42 struct _MPOData {
43         guint mpo_offset;
44
45         guint version;
46         guint num_images;
47         MPOEntry *images;
48 };
49
50 MPOData* jpeg_get_mpo_data(guchar *data, guint size);
51 void jpeg_mpo_data_free(MPOData *mpo);
52
53 #endif