xref: /aosp_15_r20/external/dynamic_depth/includes/xmpmeta/jpeg_io.h (revision a62be0856e8e1158f43b03e41bbad10f4d005fde)
1*a62be085SSadaf Ebrahimi #ifndef DYNAMIC_DEPTH_INCLUDES_XMPMETA_JPEG_IO_H_  // NOLINT
2*a62be085SSadaf Ebrahimi #define DYNAMIC_DEPTH_INCLUDES_XMPMETA_JPEG_IO_H_  // NOLINT
3*a62be085SSadaf Ebrahimi 
4*a62be085SSadaf Ebrahimi #include <string>
5*a62be085SSadaf Ebrahimi #include <vector>
6*a62be085SSadaf Ebrahimi 
7*a62be085SSadaf Ebrahimi #include "base/port.h"
8*a62be085SSadaf Ebrahimi 
9*a62be085SSadaf Ebrahimi namespace dynamic_depth {
10*a62be085SSadaf Ebrahimi namespace xmpmeta {
11*a62be085SSadaf Ebrahimi 
12*a62be085SSadaf Ebrahimi // Contains the data for a section in a JPEG file.
13*a62be085SSadaf Ebrahimi // A JPEG file contains many sections in addition to image data.
14*a62be085SSadaf Ebrahimi struct Section {
15*a62be085SSadaf Ebrahimi   // Constructors.
16*a62be085SSadaf Ebrahimi   Section() = default;
17*a62be085SSadaf Ebrahimi   explicit Section(const string& buffer);
18*a62be085SSadaf Ebrahimi 
19*a62be085SSadaf Ebrahimi   // Returns true if the section's marker matches an APP1 marker.
20*a62be085SSadaf Ebrahimi   bool IsMarkerApp1();
21*a62be085SSadaf Ebrahimi 
22*a62be085SSadaf Ebrahimi   int marker;
23*a62be085SSadaf Ebrahimi   bool is_image_section;
24*a62be085SSadaf Ebrahimi   string data;
25*a62be085SSadaf Ebrahimi };
26*a62be085SSadaf Ebrahimi 
27*a62be085SSadaf Ebrahimi struct ParseOptions {
28*a62be085SSadaf Ebrahimi   // If set to true, keeps only the EXIF and XMP sections (with
29*a62be085SSadaf Ebrahimi   // marker kApp1) and ignores others. Otherwise, keeps everything including
30*a62be085SSadaf Ebrahimi   // image data.
31*a62be085SSadaf Ebrahimi   bool read_meta_only = false;
32*a62be085SSadaf Ebrahimi 
33*a62be085SSadaf Ebrahimi   // If section_header is set, this boolean controls whether only the 1st
34*a62be085SSadaf Ebrahimi   // section matching the section_header will be returned. If not set
35*a62be085SSadaf Ebrahimi   // (the default), all the sections that math the section header will be
36*a62be085SSadaf Ebrahimi   // returned.
37*a62be085SSadaf Ebrahimi   bool section_header_return_first = false;
38*a62be085SSadaf Ebrahimi 
39*a62be085SSadaf Ebrahimi   // A filter that keeps all the sections whose data starts with the
40*a62be085SSadaf Ebrahimi   // given string. Ignored if empty.
41*a62be085SSadaf Ebrahimi   string section_header;
42*a62be085SSadaf Ebrahimi };
43*a62be085SSadaf Ebrahimi 
44*a62be085SSadaf Ebrahimi // Parses the JPEG image file.
45*a62be085SSadaf Ebrahimi std::vector<Section> Parse(const ParseOptions& options,
46*a62be085SSadaf Ebrahimi                            std::istream* input_stream);
47*a62be085SSadaf Ebrahimi 
48*a62be085SSadaf Ebrahimi // Writes JPEG data sections to a file.
49*a62be085SSadaf Ebrahimi void WriteSections(const std::vector<Section>& sections,
50*a62be085SSadaf Ebrahimi                    std::ostream* output_stream);
51*a62be085SSadaf Ebrahimi 
52*a62be085SSadaf Ebrahimi }  // namespace xmpmeta
53*a62be085SSadaf Ebrahimi }  // namespace dynamic_depth
54*a62be085SSadaf Ebrahimi 
55*a62be085SSadaf Ebrahimi #endif // DYNAMIC_DEPTH_INCLUDES_XMPMETA_JPEG_IO_H_  // NOLINT
56