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,
                const 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 (const 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 (const 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 (const 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 (const 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 (const 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)


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


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


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


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


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


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)


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


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 (const 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.


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


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


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)


The results of the search are