+ } else if (index == 1) {
+ // Write huffman tables.
+ JPEGRawScanHeader *sh = &priv->scan.header;
+ JPEGRawHuffmanTableSpecification *dht = &priv->huffman_tables;
+ VAHuffmanTableBufferJPEGBaseline *huff;
+
+ if (*data_len < sizeof(*huff))
+ return AVERROR(ENOSPC);
+ *type = VAHuffmanTableBufferType;
+ *data_len = sizeof(*huff);
+
+ huff = (VAHuffmanTableBufferJPEGBaseline*)data;
+ memset(huff, 0, sizeof(*huff));
+
+ for (t = 0; t < 1 + (sh->Ns > 1); t++) {
+ const JPEGRawHuffmanTable *ht;
+
+ huff->load_huffman_table[t] = 1;
+
+ ht = &dht->table[2 * t];
+ for (i = k = 0; i < 16; i++)
+ k += (huff->huffman_table[t].num_dc_codes[i] = ht->L[i]);
+ av_assert0(k <= sizeof(huff->huffman_table[t].dc_values));
+ for (i = 0; i < k; i++)
+ huff->huffman_table[t].dc_values[i] = ht->V[i];
+
+ ht = &dht->table[2 * t + 1];
+ for (i = k = 0; i < 16; i++)
+ k += (huff->huffman_table[t].num_ac_codes[i] = ht->L[i]);
+ av_assert0(k <= sizeof(huff->huffman_table[t].ac_values));
+ for (i = 0; i < k; i++)
+ huff->huffman_table[t].ac_values[i] = ht->V[i];
+ }