st/va: add huffman table handling for MJPEG
authorLeo Liu <leo.liu@amd.com>
Tue, 15 Aug 2017 15:52:26 +0000 (11:52 -0400)
committerLeo Liu <leo.liu@amd.com>
Mon, 21 Aug 2017 14:09:09 +0000 (10:09 -0400)
Signed-off-by: Leo Liu <leo.liu@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
src/gallium/state_trackers/va/picture_mjpeg.c

index 09b2efc21b407e9822e0b3a8df762fd66396fb84..17f077962e6357d76c9b9682f3667213ff5e8dc1 100644 (file)
@@ -63,7 +63,24 @@ void vlVaHandleIQMatrixBufferMJPEG(vlVaContext *context, vlVaBuffer *buf)
 
 void vlVaHandleHuffmanTableBufferType(vlVaContext *context, vlVaBuffer *buf)
 {
-   /* TODO */
+   VAHuffmanTableBufferJPEGBaseline *mjpeg = buf->data;
+   int i;
+
+   assert(buf->size >= sizeof(VASliceParameterBufferJPEGBaseline) && buf->num_elements == 1);
+
+   for (i = 0; i < 2; ++i) {
+      context->desc.mjpeg.huffman_table.load_huffman_table[i] = mjpeg->load_huffman_table[i];
+
+      memcpy(&context->desc.mjpeg.huffman_table.table[i].num_dc_codes,
+         mjpeg->huffman_table[i].num_dc_codes, 16);
+      memcpy(&context->desc.mjpeg.huffman_table.table[i].dc_values,
+         mjpeg->huffman_table[i].dc_values, 12);
+      memcpy(&context->desc.mjpeg.huffman_table.table[i].num_ac_codes,
+         mjpeg->huffman_table[i].num_ac_codes, 16);
+      memcpy(&context->desc.mjpeg.huffman_table.table[i].ac_values,
+         mjpeg->huffman_table[i].ac_values, 162);
+      memcpy(&context->desc.mjpeg.huffman_table.table[i].pad, mjpeg->huffman_table[i].pad, 2);
+   }
 }
 
 void vlVaHandleSliceParameterBufferMJPEG(vlVaContext *context, vlVaBuffer *buf)