# GstJpegParser

Provides useful functions for parsing JPEG images

## Functions

### gst_jpeg_get_default_huffman_tables

    void
    gst_jpeg_get_default_huffman_tables (GstJpegHuffmanTables * huff_tables)

Fills in huf_tables with the default AC/DC Huffman tables, as specified by the JPEG standard.

Parameters:

`huff_tables` –
No description available
Returns (void ) –
No description available

Since : 1.6

### gst_jpeg_get_default_quantization_tables

    void
    gst_jpeg_get_default_quantization_tables (GstJpegQuantTables * quant_tables)

Parameters:

`quant_tables` –
No description available
Returns (void ) –
No description available

### gst_jpeg_parse

    gboolean
    gst_jpeg_parse (GstJpegSegment * seg,
                    guint8 * data,
                    gsize size,
                    guint offset)

Parses the JPEG bitstream contained in data, and returns the detected segment as a GstJpegSegment.

Note that a valid segment may be returned with a length that exceeds the available data. It is up to the caller to make sure there's enough data available when parsing the segment.

Parameters:

`seg` –
No description available
`data` –

The data to parse

`size` –

The size of data

`offset` –

The offset from which to start parsing

Returns (gboolean) –

TRUE if a packet start code was found.

Since : 1.6

### gst_jpeg_segment_parse_frame_header

    gboolean
    gst_jpeg_segment_parse_frame_header (GstJpegSegment * segment,
                                         GstJpegFrameHdr * frame_hdr)

Parses the frame_hdr JPEG frame header structure members from segment.

The caller must make sure there is enough data for the whole segment available.

Parameters:

`segment` –

the JPEG segment

`frame_hdr` –

The GstJpegFrameHdr structure to fill in

Returns (gboolean) –

TRUE if the frame header was correctly parsed.

Since : 1.6

### gst_jpeg_segment_parse_huffman_table

    gboolean
    gst_jpeg_segment_parse_huffman_table (GstJpegSegment * segment,
                                          GstJpegHuffmanTables * huff_tables)

Parses the JPEG Huffman table structure members from segment.

The caller must make sure there is enough data for the whole segment available.

Note: huf_tables represents the complete set of possible Huffman tables. However, the parser will only write to the Huffman table specified by the table destination identifier (Th). While doing so, the valid flag of the specified Huffman table will also be set to TRUE;

Parameters:

`segment` –

the JPEG segment

`huff_tables` –

The GstJpegHuffmanTables structure to fill in

Returns (gboolean) –

TRUE if the Huffman table was correctly parsed.

Since : 1.6

### gst_jpeg_segment_parse_quantization_table

    gboolean
    gst_jpeg_segment_parse_quantization_table (GstJpegSegment * segment,
                                               GstJpegQuantTables * quant_tables)

Parses the JPEG quantization table structure members from segment.

The caller must make sure there is enough data for the whole segment available.

Note: quant_tables represents the complete set of possible quantization tables. However, the parser will only write to the quantization table specified by the table destination identifier (Tq). While doing so, the valid flag of the specified quantization table will also be set to TRUE.

Parameters:

`segment` –

the JPEG segment

`quant_tables` –

The GstJpegQuantTables structure to fill in

Returns (gboolean) –

TRUE if the quantization table was correctly parsed.

Since : 1.6

### gst_jpeg_segment_parse_restart_interval

    gboolean
    gst_jpeg_segment_parse_restart_interval (GstJpegSegment * segment,
                                             guint * interval)

The caller must make sure there is enough data for the whole segment available.

Parameters:

`segment` –

the JPEG segment

`interval` –

The parsed restart interval value

Returns (gboolean) –

TRUE if the restart interval value was correctly parsed.

Since : 1.6

### gst_jpeg_segment_parse_scan_header

    gboolean
    gst_jpeg_segment_parse_scan_header (GstJpegSegment * segment,
                                        GstJpegScanHdr * scan_hdr)

Parses the scan_hdr JPEG scan header structure members from segment.

The caller must make sure there is enough data for the whole segment available.

Parameters:

`segment` –

the JPEG segment

`scan_hdr` –

The GstJpegScanHdr structure to fill in

Returns (gboolean) –

TRUE if the scan header was correctly parsed

Since : 1.6

## Structures

### GstJpegFrameComponent

    struct _GstJpegFrameComponent
    {
      guint8 identifier;                    /* 0 .. 255     */
      guint8 horizontal_factor;             /* 1 .. 4       */
      guint8 vertical_factor;               /* 1 .. 4       */
      guint8 quant_table_selector;          /* 0 .. 3       */
    };

Component-specification parameters.

#### Fields

`identifier` (guint8) –

Component identifier (Ci)

`horizontal_factor` (guint8) –

Horizontal sampling factor (Hi)

`vertical_factor` (guint8) –

Vertical sampling factor (Vi)

`quant_table_selector` (guint8) –

Quantization table destination selector (Tqi)

Since : 1.6

### GstJpegFrameHdr

    struct _GstJpegFrameHdr
    {
      guint8 sample_precision;              /* 2 .. 16      */
      guint16 width;                        /* 1 .. 65535   */
      guint16 height;                       /* 0 .. 65535   */
      guint8 num_components;                /* 1 .. 255     */
      GstJpegFrameComponent components[GST_JPEG_MAX_FRAME_COMPONENTS];
    };

Frame header.

#### Fields

`sample_precision` (guint8) –

Sample precision (P)

`width` (guint16) –

Number of samples per line (X)

`height` (guint16) –

Number of lines (Y)

`num_components` (guint8) –

Number of image components in frame (Nf)

`components` (GstJpegFrameComponent[256] ) –

Image components

Since : 1.6

### GstJpegHuffmanTable

    struct _GstJpegHuffmanTable
    {
      guint8 huf_bits[16];
      guint8 huf_values[256];
      gboolean valid;
    };

Huffman table.

#### Fields

`huf_bits` (guint8[16] ) –

Number of Huffman codes of length i + 1 (Li)

`huf_values` (guint8[256] ) –
No description available
`valid` (gboolean) –

If the Huffman table is valid, which means it has already been parsed

Since : 1.6

### GstJpegHuffmanTables

    struct _GstJpegHuffmanTables
    {
      GstJpegHuffmanTable dc_tables[GST_JPEG_MAX_SCAN_COMPONENTS];
      GstJpegHuffmanTable ac_tables[GST_JPEG_MAX_SCAN_COMPONENTS];
    };

Helper data structure that holds all AC/DC Huffman tables used to decode an image.

#### Fields

`dc_tables` (GstJpegHuffmanTable[4] ) –

DC Huffman tables

`ac_tables` (GstJpegHuffmanTable[4] ) –

AC Huffman tables

Since : 1.6

### GstJpegQuantTable

    struct _GstJpegQuantTable
    {
      guint8 quant_precision;
      guint16 quant_table[GST_JPEG_MAX_QUANT_ELEMENTS];
      gboolean valid;
    };

Quantization table.

#### Fields

`quant_precision` (guint8) –

Quantization table element precision (Pq)

`quant_table` (guint16[64] ) –

Quantization table elements (Qk)

`valid` (gboolean) –

If the quantization table is valid, which means it has already been parsed

Since : 1.6

### GstJpegQuantTables

    struct _GstJpegQuantTables
    {
      GstJpegQuantTable quant_tables[GST_JPEG_MAX_SCAN_COMPONENTS];
    };

Helper data structure that holds all quantization tables used to decode an image.

#### Fields

`quant_tables` (GstJpegQuantTable[4] ) –

All quantization tables

Since : 1.6

### GstJpegScanComponent

    struct _GstJpegScanComponent
    {
        guint8 component_selector;          /* 0 .. 255     */
        guint8 dc_selector;                 /* 0 .. 3       */
        guint8 ac_selector;                 /* 0 .. 3       */
    };

Component-specification parameters.

#### Fields

`component_selector` (guint8) –

Scan component selector (Csj)

`dc_selector` (guint8) –

DC entropy coding table destination selector (Tdj)

`ac_selector` (guint8) –

AC entropy coding table destination selector (Taj)

Since : 1.6

### GstJpegScanHdr

    struct _GstJpegScanHdr
    {
      guint8 num_components;                /* 1 .. 4       */
      GstJpegScanComponent components[GST_JPEG_MAX_SCAN_COMPONENTS];

    };

Scan header.

#### Fields

`num_components` (guint8) –

Number of image components in scan (Ns)

`components` (GstJpegScanComponent[4] ) –

Image components

Since : 1.6

### GstJpegSegment

    struct _GstJpegSegment
    {
      GstJpegMarker marker;
      const guint8 *data;
      guint offset;
      gssize size;
    };

A structure that contains the type of a segment, its offset and its size.

#### Fields

`marker` (GstJpegMarker) –

The type of the segment that starts at offset

`data` (guint8 *) –

the data containing the jpeg segment starting at offset

`offset` (guint) –

The offset to the segment start in bytes. This is the exact start of the segment, no marker code included

`size` (gssize) –

The size of the segment in bytes, or -1 if the end was not found. It is the exact size of the segment, without the sync byte and marker code but including any length bytes.

Since : 1.6

## Enumerations

### GstJpegEntropyCodingMode

    typedef enum {
      GST_JPEG_ENTROPY_CODING_HUFFMAN       = 0x00,
      GST_JPEG_ENTROPY_CODING_ARITHMETIC    = 0x08
    } GstJpegEntropyCodingMode;

JPEG entropy coding mode.

#### Members

`GST_JPEG_ENTROPY_CODING_HUFFMAN` (0) –

Huffman coding

`GST_JPEG_ENTROPY_CODING_ARITHMETIC` (8) –

arithmetic coding

Since : 1.6

### GstJpegMarker

    typedef enum {
      GST_JPEG_MARKER_SOF0          = 0xC0,
      GST_JPEG_MARKER_SOF1          = 0xC1,
      GST_JPEG_MARKER_SOF2          = 0xC2,
      GST_JPEG_MARKER_SOF3          = 0xC3,
      /* 0xC4 = DHT see below */
      GST_JPEG_MARKER_SOF5          = 0xC5,
      GST_JPEG_MARKER_SOF6          = 0xC6,
      GST_JPEG_MARKER_SOF7          = 0xC7,
      /* 0xC8 = reserved */
      GST_JPEG_MARKER_SOF9          = 0xC9,
      GST_JPEG_MARKER_SOF10         = 0xCA,
      GST_JPEG_MARKER_SOF11         = 0xCB,
      /* 0xCC = DAC see below */
      GST_JPEG_MARKER_SOF13         = 0xCD,
      GST_JPEG_MARKER_SOF14         = 0xCE,
      GST_JPEG_MARKER_SOF15         = 0xCF,
      GST_JPEG_MARKER_DHT           = 0xC4,
      GST_JPEG_MARKER_DAC           = 0xCC,
      GST_JPEG_MARKER_RST0          = 0xD0,
      GST_JPEG_MARKER_RST1          = 0xD1,
      GST_JPEG_MARKER_RST2          = 0xD2,
      GST_JPEG_MARKER_RST3          = 0xD3,
      GST_JPEG_MARKER_RST4          = 0xD4,
      GST_JPEG_MARKER_RST5          = 0xD5,
      GST_JPEG_MARKER_RST6          = 0xD6,
      GST_JPEG_MARKER_RST7          = 0xD7,
      GST_JPEG_MARKER_SOI           = 0xD8,
      GST_JPEG_MARKER_EOI           = 0xD9,
      GST_JPEG_MARKER_SOS           = 0xDA,
      GST_JPEG_MARKER_DQT           = 0xDB,
      GST_JPEG_MARKER_DNL           = 0xDC,
      GST_JPEG_MARKER_DRI           = 0xDD,
      GST_JPEG_MARKER_APP0          = 0xE0,
      GST_JPEG_MARKER_APP1          = 0xE1,
      GST_JPEG_MARKER_APP2          = 0xE2,
      GST_JPEG_MARKER_APP3          = 0xE3,
      GST_JPEG_MARKER_APP4          = 0xE4,
      GST_JPEG_MARKER_APP5          = 0xE5,
      GST_JPEG_MARKER_APP6          = 0xE6,
      GST_JPEG_MARKER_APP7          = 0xE7,
      GST_JPEG_MARKER_APP8          = 0xE8,
      GST_JPEG_MARKER_APP9          = 0xE9,
      GST_JPEG_MARKER_APP10         = 0xEA,
      GST_JPEG_MARKER_APP11         = 0xEB,
      GST_JPEG_MARKER_APP12         = 0xEC,
      GST_JPEG_MARKER_APP13         = 0xED,
      GST_JPEG_MARKER_APP14         = 0xEE,
      GST_JPEG_MARKER_APP15         = 0xEF,
      GST_JPEG_MARKER_COM           = 0xFE,
    } GstJpegMarker;

Indicates the type of JPEG segment.

#### Members

`GST_JPEG_MARKER_SOF0` (192) –

Start of frame marker code (Baseline)

`GST_JPEG_MARKER_SOF1` (193) –

Start of frame marker code (Extended Sequential, Huffman)

`GST_JPEG_MARKER_SOF2` (194) –

Start of frame marker code (Progressive, Huffman)

`GST_JPEG_MARKER_SOF3` (195) –

Start of frame marker code (Lossless, Huffman)

`GST_JPEG_MARKER_SOF5` (197) –

Start of frame marker code (Differential Sequential, Huffman)

`GST_JPEG_MARKER_SOF6` (198) –

Start of frame marker code (Differential Progressive, Huffman)

`GST_JPEG_MARKER_SOF7` (199) –

Start of frame marker code (Differential Lossless, Huffman)

`GST_JPEG_MARKER_SOF9` (201) –

Start of frame marker code (Extended Sequential, Arithmetic)

`GST_JPEG_MARKER_SOF10` (202) –

Start of frame marker code (Progressive, Arithmetic)

`GST_JPEG_MARKER_SOF11` (203) –

Start of frame marker code (Lossless, Arithmetic)

`GST_JPEG_MARKER_SOF13` (205) –

Start of frame marker code (Differential Sequential, Arithmetic)

`GST_JPEG_MARKER_SOF14` (206) –

Start of frame marker code (Differential Progressive, Arithmetic)

`GST_JPEG_MARKER_SOF15` (207) –

Start of frame marker code (Differential Lossless, Arithmetic)

`GST_JPEG_MARKER_DHT` (196) –

Huffman table marker code

`GST_JPEG_MARKER_DAC` (204) –

Arithmetic coding marker code

`GST_JPEG_MARKER_RST0` (208) –
No description available
`GST_JPEG_MARKER_RST1` (209) –
No description available
`GST_JPEG_MARKER_RST2` (210) –
No description available
`GST_JPEG_MARKER_RST3` (211) –
No description available
`GST_JPEG_MARKER_RST4` (212) –
No description available
`GST_JPEG_MARKER_RST5` (213) –
No description available
`GST_JPEG_MARKER_RST6` (214) –
No description available
`GST_JPEG_MARKER_RST7` (215) –
No description available
`GST_JPEG_MARKER_SOI` (216) –

Start of image marker code

`GST_JPEG_MARKER_EOI` (217) –

End of image marker code

`GST_JPEG_MARKER_SOS` (218) –

Start of scan marker code

`GST_JPEG_MARKER_DQT` (219) –

Define quantization table marker code

`GST_JPEG_MARKER_DNL` (220) –

Define number of lines marker code

`GST_JPEG_MARKER_DRI` (221) –

Define restart interval marker code

`GST_JPEG_MARKER_APP0` (224) –

Application segment 0 marker code

`GST_JPEG_MARKER_APP1` (225) –

Application segment 1 marker code

`GST_JPEG_MARKER_APP2` (226) –

Application segment 2 marker code

`GST_JPEG_MARKER_APP3` (227) –

Application segment 3 marker code

`GST_JPEG_MARKER_APP4` (228) –

Application segment 4 marker code

`GST_JPEG_MARKER_APP5` (229) –

Application segment 5 marker code

`GST_JPEG_MARKER_APP6` (230) –

Application segment 6 marker code

`GST_JPEG_MARKER_APP7` (231) –

Application segment 7 marker code

`GST_JPEG_MARKER_APP8` (232) –

Application segment 8 marker code

`GST_JPEG_MARKER_APP9` (233) –

Application segment 9 marker code

`GST_JPEG_MARKER_APP10` (234) –

Application segment 10 marker code

`GST_JPEG_MARKER_APP11` (235) –

Application segment 11 marker code

`GST_JPEG_MARKER_APP12` (236) –

Application segment 12 marker code

`GST_JPEG_MARKER_APP13` (237) –

Application segment 13 marker code

`GST_JPEG_MARKER_APP14` (238) –

Application segment 14 marker code

`GST_JPEG_MARKER_APP15` (239) –

Application segment 15 marker code

`GST_JPEG_MARKER_COM` (254) –

Comment marker code

Since : 1.6

### GstJpegProfile

    typedef enum {
      GST_JPEG_PROFILE_BASELINE     = 0x00,
      GST_JPEG_PROFILE_EXTENDED     = 0x01,
      GST_JPEG_PROFILE_PROGRESSIVE  = 0x02,
      GST_JPEG_PROFILE_LOSSLESS     = 0x03,
    } GstJpegProfile;

JPEG encoding processes.

#### Members

`GST_JPEG_PROFILE_BASELINE` (0) –

Baseline DCT

`GST_JPEG_PROFILE_EXTENDED` (1) –

Extended sequential DCT

`GST_JPEG_PROFILE_PROGRESSIVE` (2) –

Progressive DCT

`GST_JPEG_PROFILE_LOSSLESS` (3) –

Lossless (sequential)

Since : 1.6

The results of the search are