jpeg: add new GstJpegHuffmanTables structure.
authorWind Yuan <feng.yuan@intel.com>
Mon, 4 Jun 2012 08:20:13 +0000 (16:20 +0800)
committerGwenole Beauchesne <gwenole.beauchesne@intel.com>
Thu, 21 Jun 2012 13:30:54 +0000 (15:30 +0200)
Add new GstJpegHuffmanTables helper structure to hold all possible
AC/DC Huffman tables available to all components.

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
gst-libs/gst/codecparsers/gstjpegparser.c
gst-libs/gst/codecparsers/gstjpegparser.h
gst-libs/gst/vaapi/gstvaapidecoder_jpeg.c

index ff7989c..1febbed 100644 (file)
@@ -131,105 +131,109 @@ default_quant_tables_zigzag[GST_JPEG_MAX_SCAN_COMPONENTS] = {
 GST_JPEG_MAX_SCAN_COMPONENTS...GST_JPEG_MAX_SCAN_COMPONENTS*2-1, AC huffman tables
 */
 static const
-GstJpegHuffmanTable default_huf_tables[GST_JPEG_MAX_SCAN_COMPONENTS*2] = {
-  /* DC luma */
-  { { 0x00, 0x01, 0x05, 0x01, 0x01, 0x01, 0x01, 0x01,
-      0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
-    { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
-      0x08, 0x09, 0x0a, 0x0b }
-  },
-  /* DC chroma */
-  { { 0x00, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-      0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00 },
-    { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
-      0x08, 0x09, 0x0a, 0x0b }
-  },
-  /* DC chroma */
-  { { 0x00, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
-      0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00 },
-    { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
-      0x08, 0x09, 0x0a, 0x0b }
-  },
-  {  { 0 },
-     { 0 }
-  },
-  /* AC luma */
-  { { 0x00, 0x02, 0x01, 0x03, 0x03, 0x02, 0x04, 0x03,
-      0x05, 0x05, 0x04, 0x04, 0x00, 0x00, 0x01, 0x7d },
-    { 0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12,
-      0x21, 0x31, 0x41, 0x06, 0x13, 0x51, 0x61, 0x07,
-      0x22, 0x71, 0x14, 0x32, 0x81, 0x91, 0xa1, 0x08,
-      0x23, 0x42, 0xb1, 0xc1, 0x15, 0x52, 0xd1, 0xf0,
-      0x24, 0x33, 0x62, 0x72, 0x82, 0x09, 0x0a, 0x16,
-      0x17, 0x18, 0x19, 0x1a, 0x25, 0x26, 0x27, 0x28,
-      0x29, 0x2a, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39,
-      0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49,
-      0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59,
-      0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69,
-      0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79,
-      0x7a, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89,
-      0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98,
-      0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
-      0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6,
-      0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5,
-      0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4,
-      0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xe1, 0xe2,
-      0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea,
-      0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8,
-      0xf9, 0xfa}
-  },
-  /* AC chroma */
-  { { 0x00, 0x02, 0x01, 0x02, 0x04, 0x04, 0x03, 0x04,
-      0x07, 0x05, 0x04, 0x04, 0x00, 0x01, 0x02, 0x77 },
-    { 0x00, 0x01, 0x02, 0x03, 0x11, 0x04, 0x05, 0x21,
-      0x31, 0x06, 0x12, 0x41, 0x51, 0x07, 0x61, 0x71,
-      0x13, 0x22, 0x32, 0x81, 0x08, 0x14, 0x42, 0x91,
-      0xa1, 0xb1, 0xc1, 0x09, 0x23, 0x33, 0x52, 0xf0,
-      0x15, 0x62, 0x72, 0xd1, 0x0a, 0x16, 0x24, 0x34,
-      0xe1, 0x25, 0xf1, 0x17, 0x18, 0x19, 0x1a, 0x26,
-      0x27, 0x28, 0x29, 0x2a, 0x35, 0x36, 0x37, 0x38,
-      0x39, 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48,
-      0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58,
-      0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
-      0x69, 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78,
-      0x79, 0x7a, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
-      0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96,
-      0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5,
-      0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4,
-      0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3,
-      0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2,
-      0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda,
-      0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9,
-      0xea, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8,
-      0xf9, 0xfa }
-  },
-  /* AC chroma */
-  { { 0x00, 0x02, 0x01, 0x02, 0x04, 0x04, 0x03, 0x04,
-      0x07, 0x05, 0x04, 0x04, 0x00, 0x01, 0x02, 0x77 },
-    { 0x00, 0x01, 0x02, 0x03, 0x11, 0x04, 0x05, 0x21,
-      0x31, 0x06, 0x12, 0x41, 0x51, 0x07, 0x61, 0x71,
-      0x13, 0x22, 0x32, 0x81, 0x08, 0x14, 0x42, 0x91,
-      0xa1, 0xb1, 0xc1, 0x09, 0x23, 0x33, 0x52, 0xf0,
-      0x15, 0x62, 0x72, 0xd1, 0x0a, 0x16, 0x24, 0x34,
-      0xe1, 0x25, 0xf1, 0x17, 0x18, 0x19, 0x1a, 0x26,
-      0x27, 0x28, 0x29, 0x2a, 0x35, 0x36, 0x37, 0x38,
-      0x39, 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48,
-      0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58,
-      0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
-      0x69, 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78,
-      0x79, 0x7a, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
-      0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96,
-      0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5,
-      0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4,
-      0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3,
-      0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2,
-      0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda,
-      0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9,
-      0xea, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8,
-      0xf9, 0xfa }
+GstJpegHuffmanTables default_huf_tables = {
+  {
+      /* DC luma */
+      { { 0x00, 0x01, 0x05, 0x01, 0x01, 0x01, 0x01, 0x01,
+          0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
+        { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+          0x08, 0x09, 0x0a, 0x0b }
+      },
+      /* DC chroma */
+      { { 0x00, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+          0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00 },
+        { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+          0x08, 0x09, 0x0a, 0x0b }
+      },
+      /* DC chroma */
+      { { 0x00, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+          0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00 },
+        { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+          0x08, 0x09, 0x0a, 0x0b }
+      },
+      {  { 0x0 },
+         { 0x0 }
+      }
   },
-  {  { 0 },
-     { 0 }
+  {
+      /* AC luma */
+      { { 0x00, 0x02, 0x01, 0x03, 0x03, 0x02, 0x04, 0x03,
+          0x05, 0x05, 0x04, 0x04, 0x00, 0x00, 0x01, 0x7d },
+        { 0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12,
+          0x21, 0x31, 0x41, 0x06, 0x13, 0x51, 0x61, 0x07,
+          0x22, 0x71, 0x14, 0x32, 0x81, 0x91, 0xa1, 0x08,
+          0x23, 0x42, 0xb1, 0xc1, 0x15, 0x52, 0xd1, 0xf0,
+          0x24, 0x33, 0x62, 0x72, 0x82, 0x09, 0x0a, 0x16,
+          0x17, 0x18, 0x19, 0x1a, 0x25, 0x26, 0x27, 0x28,
+          0x29, 0x2a, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39,
+          0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49,
+          0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59,
+          0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69,
+          0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79,
+          0x7a, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89,
+          0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98,
+          0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
+          0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6,
+          0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5,
+          0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4,
+          0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xe1, 0xe2,
+          0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea,
+          0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8,
+          0xf9, 0xfa}
+      },
+      /* AC chroma */
+      { { 0x00, 0x02, 0x01, 0x02, 0x04, 0x04, 0x03, 0x04,
+          0x07, 0x05, 0x04, 0x04, 0x00, 0x01, 0x02, 0x77 },
+        { 0x00, 0x01, 0x02, 0x03, 0x11, 0x04, 0x05, 0x21,
+          0x31, 0x06, 0x12, 0x41, 0x51, 0x07, 0x61, 0x71,
+          0x13, 0x22, 0x32, 0x81, 0x08, 0x14, 0x42, 0x91,
+          0xa1, 0xb1, 0xc1, 0x09, 0x23, 0x33, 0x52, 0xf0,
+          0x15, 0x62, 0x72, 0xd1, 0x0a, 0x16, 0x24, 0x34,
+          0xe1, 0x25, 0xf1, 0x17, 0x18, 0x19, 0x1a, 0x26,
+          0x27, 0x28, 0x29, 0x2a, 0x35, 0x36, 0x37, 0x38,
+          0x39, 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48,
+          0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58,
+          0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
+          0x69, 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78,
+          0x79, 0x7a, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+          0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96,
+          0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5,
+          0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4,
+          0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3,
+          0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2,
+          0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda,
+          0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9,
+          0xea, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8,
+          0xf9, 0xfa }
+      },
+      /* AC chroma */
+      { { 0x00, 0x02, 0x01, 0x02, 0x04, 0x04, 0x03, 0x04,
+          0x07, 0x05, 0x04, 0x04, 0x00, 0x01, 0x02, 0x77 },
+        { 0x00, 0x01, 0x02, 0x03, 0x11, 0x04, 0x05, 0x21,
+          0x31, 0x06, 0x12, 0x41, 0x51, 0x07, 0x61, 0x71,
+          0x13, 0x22, 0x32, 0x81, 0x08, 0x14, 0x42, 0x91,
+          0xa1, 0xb1, 0xc1, 0x09, 0x23, 0x33, 0x52, 0xf0,
+          0x15, 0x62, 0x72, 0xd1, 0x0a, 0x16, 0x24, 0x34,
+          0xe1, 0x25, 0xf1, 0x17, 0x18, 0x19, 0x1a, 0x26,
+          0x27, 0x28, 0x29, 0x2a, 0x35, 0x36, 0x37, 0x38,
+          0x39, 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48,
+          0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58,
+          0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
+          0x69, 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78,
+          0x79, 0x7a, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+          0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96,
+          0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5,
+          0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4,
+          0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3,
+          0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2,
+          0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda,
+          0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9,
+          0xea, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8,
+          0xf9, 0xfa }
+      },
+      {  { 0x00 },
+         { 0x00 }
+      }
   }
 };
 
@@ -326,7 +330,7 @@ wrong_state:
 
 GstJpegParserResult
 gst_jpeg_parse_huffman_table (
-    GstJpegHuffmanTable huf_tables[GST_JPEG_MAX_SCAN_COMPONENTS*2],
+    GstJpegHuffmanTables *huf_tables,
     const guint8 * data, gsize size, guint offset)
 {
   GstByteReader bytes_reader = GST_BYTE_READER_INIT (data+offset, size-offset);
@@ -346,9 +350,9 @@ gst_jpeg_parse_huffman_table (
     CHECK_FAILED (table_index < GST_JPEG_MAX_SCAN_COMPONENTS,
         GST_JPEG_PARSER_BROKEN_DATA);
     if (is_dc) {
-      huf_table = &huf_tables[table_index];
+      huf_table = &huf_tables->dc_tables[table_index];
     } else {
-      huf_table = &huf_tables[GST_JPEG_MAX_SCAN_COMPONENTS + table_index];
+      huf_table = &huf_tables->ac_tables[table_index];
     }
     READ_BYTES (&bytes_reader, huf_table->huf_bits, 16);
     value_count = 0;
@@ -420,11 +424,12 @@ failed:
 }
 
 void
-gst_jpeg_get_default_huffman_table (GstJpegHuffmanTable huf_tables[GST_JPEG_MAX_SCAN_COMPONENTS*2])
+gst_jpeg_get_default_huffman_table (GstJpegHuffmanTables *huf_tables)
 {
+  g_assert(huf_tables);
   memcpy(huf_tables,
-         default_huf_tables,
-         sizeof(GstJpegHuffmanTable)*GST_JPEG_MAX_SCAN_COMPONENTS*2);
+         &default_huf_tables,
+         sizeof(GstJpegHuffmanTables));
 }
 
 void
index c18be6c..38523f2 100644 (file)
@@ -54,6 +54,7 @@ G_BEGIN_DECLS
 
 typedef struct _GstJpegQuantTable       GstJpegQuantTable;
 typedef struct _GstJpegHuffmanTable     GstJpegHuffmanTable;
+typedef struct _GstJpegHuffmanTables    GstJpegHuffmanTables;
 typedef struct _GstJpegScanComponent    GstJpegScanComponent;
 typedef struct _GstJpegScanHdr          GstJpegScanHdr;
 typedef struct _GstJpegFrameComponent   GstJpegFrameComponent;
@@ -161,6 +162,20 @@ struct _GstJpegHuffmanTable
 };
 
 /**
+ * GstJpegHuffmanTables:
+ * @dc_tables: DC Huffman tables
+ * @ac_tables: AC Huffman tables
+ *
+ * Helper data structure that holds all AC/DC Huffman tables used to
+ * decode an image.
+ */
+struct _GstJpegHuffmanTables
+{
+  GstJpegHuffmanTable dc_tables[GST_JPEG_MAX_SCAN_COMPONENTS];
+  GstJpegHuffmanTable ac_tables[GST_JPEG_MAX_SCAN_COMPONENTS];
+};
+
+/**
  * GstJpegScanComponent:
  * @component_selector: Scan component selector (Csj)
  * @dc_selector: DC entropy coding table destination selector (Tdj)
@@ -343,17 +358,13 @@ GstJpegParserResult     gst_jpeg_parse_quant_table      (GstJpegQuantTable *quan
  *
  * Parses the JPEG Huffman table structure members from @data.
  *
- * Note: @huf_tables represents the user-allocated Huffman tables
- * based on the number of scan components. That is, the parser writes
- * the output Huffman table at the index specified by the Huffman
- * table destination identifier (Th). The first array of
- * <GST_JPEG_MAX_SCAN_COMPONENTS> Huffman tables are related
- * to dc tables; The second array of <GST_JPEG_MAX_SCAN_COMPONENTS>
- * of Huffman tables are related to ac tables.
+ * 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).
  *
  * Returns: a #GstJpegParserResult
  */
-GstJpegParserResult     gst_jpeg_parse_huffman_table    (GstJpegHuffmanTable huf_tables[GST_JPEG_MAX_SCAN_COMPONENTS*2],
+GstJpegParserResult     gst_jpeg_parse_huffman_table    (GstJpegHuffmanTables *huf_tables,
                                                          const guint8 * data,
                                                          gsize size,
                                                          guint offset);
@@ -376,13 +387,10 @@ GstJpegParserResult     gst_jpeg_parse_restart_interval (guint * interval,
  * gst_jpeg_get_default_huffman_table:
  * @huf_tables: (out): The default dc/ac hufman tables to fill in
  *
- * DC huffman tables fill in the first 4 arrays.
- * AC huffman tables fill in the last 4 arrays.
- *
  * Returns: void
  */
 void                    gst_jpeg_get_default_huffman_table (
-                                                   GstJpegHuffmanTable huf_tables[GST_JPEG_MAX_SCAN_COMPONENTS*2]);
+                                                   GstJpegHuffmanTables *huf_tables);
 
 /**
  * gst_jpeg_get_default_quantization_table:
index c1456ed..fd03748 100644 (file)
@@ -51,7 +51,7 @@ struct _GstVaapiDecoderJpegPrivate {
     guint                       height;
     GstVaapiPicture            *current_picture;
     GstJpegFrameHdr             frame_hdr;
-    GstJpegHuffmanTable         huf_tables[GST_JPEG_MAX_SCAN_COMPONENTS*2];
+    GstJpegHuffmanTables        huf_tables;
     GstJpegQuantTable           quant_tables[GST_JPEG_MAX_SCAN_COMPONENTS];
     gboolean                    has_huf_table;
     gboolean                    has_quant_table;
@@ -257,7 +257,7 @@ fill_huffman_table(
     guint i;
 
     if (!priv->has_huf_table)
-        gst_jpeg_get_default_huffman_table(priv->huf_tables);
+        gst_jpeg_get_default_huffman_table(&priv->huf_tables);
     
     picture->huf_table = GST_VAAPI_HUFFMAN_TABLE_NEW(JPEG, decoder);
     g_assert(picture->huf_table);
@@ -265,16 +265,16 @@ fill_huffman_table(
     memset(huffman_table, 0, sizeof(VAHuffmanTableBufferJPEG));
     for (i = 0; i < GST_JPEG_MAX_SCAN_COMPONENTS; i++) {
         memcpy(huffman_table->huffman_table[i].dc_bits,
-               priv->huf_tables[i].huf_bits,
+               priv->huf_tables.dc_tables[i].huf_bits,
                16);
         memcpy(huffman_table->huffman_table[i].dc_huffval,
-               priv->huf_tables[i].huf_values,
+               priv->huf_tables.dc_tables[i].huf_values,
                16);
         memcpy(huffman_table->huffman_table[i].ac_bits,
-               priv->huf_tables[GST_JPEG_MAX_SCAN_COMPONENTS + i].huf_bits,
+               priv->huf_tables.ac_tables[i].huf_bits,
                16);
         memcpy(huffman_table->huffman_table[i].ac_huffval,
-               priv->huf_tables[GST_JPEG_MAX_SCAN_COMPONENTS + i].huf_values,
+               priv->huf_tables.ac_tables[i].huf_values,
                256);
     }
     return TRUE;
@@ -378,7 +378,7 @@ decode_huffman_table(
     GstJpegParserResult result;
 
     result = gst_jpeg_parse_huffman_table(
-        priv->huf_tables,
+        &priv->huf_tables,
         buf, buf_size, 0
     );
     if (result != GST_JPEG_PARSER_OK) {
@@ -650,7 +650,7 @@ gst_vaapi_decoder_jpeg_init(GstVaapiDecoderJpeg *decoder)
     priv->profile_changed       = TRUE;
     priv->is_constructed        = FALSE;
     memset(&priv->frame_hdr, 0, sizeof(priv->frame_hdr));
-    memset(priv->huf_tables, 0, sizeof(priv->huf_tables));
+    memset(&priv->huf_tables, 0, sizeof(priv->huf_tables));
     memset(priv->quant_tables, 0, sizeof(priv->quant_tables));
 }