Skip to content
Snippets Groups Projects
Commit 032abe35 authored by Kipp Cannon's avatar Kipp Cannon
Browse files

framecpp_igwdparse: update for new table 6

- the 2 byte class number has been split into a 1 byte checksum type and a 1 byte class number
parent 61737a6b
No related branches found
No related tags found
No related merge requests found
......@@ -182,7 +182,7 @@ static const gchar *fr_get_string(GstFrameCPPIGWDParse *element, GstByteReader *
}
static void parse_table_6(GstFrameCPPIGWDParse *element, const guint8 *data, guint64 *length, guint16 *klass)
static void parse_table_6_v6(GstFrameCPPIGWDParse *element, const guint8 *data, guint64 *length, guint16 *klass)
{
GstByteReader reader = GST_BYTE_READER_INIT(data, element->sizeof_table_6);
*length = fr_get_int_8u(element, &reader);
......@@ -190,6 +190,15 @@ static void parse_table_6(GstFrameCPPIGWDParse *element, const guint8 *data, gui
}
static void parse_table_6_v8(GstFrameCPPIGWDParse *element, const guint8 *data, guint64 *length, guint16 *klass)
{
GstByteReader reader = GST_BYTE_READER_INIT(data, element->sizeof_table_6);
*length = fr_get_int_8u(element, &reader);
gst_byte_reader_skip_unchecked(&reader, 1); /* chkType */
*klass = gst_byte_reader_get_uint8_unchecked(&reader);
}
static void parse_table_7(GstFrameCPPIGWDParse *element, const guint8 *data, guint structure_length, guint16 *eof_klass, guint16 *frameh_klass)
{
GstByteReader reader = GST_BYTE_READER_INIT(data + element->sizeof_table_6, structure_length - element->sizeof_table_6);
......@@ -338,6 +347,7 @@ static GstFlowReturn handle_frame(GstBaseParse *parse, GstBaseParseFrame *frame,
* word sizes and endianness
*/
element->version = *(mapinfo.data + 5);
element->sizeof_int_2 = *(mapinfo.data + 7);
element->sizeof_int_4 = *(mapinfo.data + 8);
element->sizeof_int_8 = *(mapinfo.data + 9);
......@@ -355,7 +365,7 @@ static GstFlowReturn handle_frame(GstBaseParse *parse, GstBaseParseFrame *frame,
* believe we have found the start of a frame file
*/
GST_DEBUG_OBJECT(element, "parsed header: endianness = %d, size of INT_2 = %d, size of INT_4 = %d, size of INT_8 = %d", element->endianness, element->sizeof_int_2, element->sizeof_int_4, element->sizeof_int_8);
GST_DEBUG_OBJECT(element, "parsed header: version=%d, endianness=%d, size of INT_2=%d, size of INT_4=%d, size of INT_8=%d", element->version, element->endianness, element->sizeof_int_2, element->sizeof_int_4, element->sizeof_int_8);
/*
* validate remainder of header
......@@ -430,7 +440,10 @@ static GstFlowReturn handle_frame(GstBaseParse *parse, GstBaseParseFrame *frame,
*/
g_assert_cmpuint(mapinfo.size, >=, element->offset + element->sizeof_table_6);
parse_table_6(element, mapinfo.data + element->offset, &structure_length, &klass);
if(element->version >= 8)
parse_table_6_v8(element, mapinfo.data + element->offset, &structure_length, &klass);
else
parse_table_6_v6(element, mapinfo.data + element->offset, &structure_length, &klass);
element->filesize = element->offset + structure_length;
if(element->filesize > mapinfo.size) {
......
......@@ -55,6 +55,7 @@ typedef struct {
typedef struct {
GstBaseParse element;
gint version;
gint endianness;
guint sizeof_int_2;
guint sizeof_int_4;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment