+/* This is a work-around: Normalize the quality factor and scale QM
+ * values similar to what VA-Intel driver is doing. Otherwise the
+ * generated packed headers will be wrong, since the driver itself
+ * is scaling the QM values using the normalized quality factor */
+static void
+generate_scaled_qm (GstJpegQuantTables * quant_tables,
+ GstJpegQuantTables * scaled_quant_tables, guint quality)
+{
+ guint qt_val, nm_quality, i;
+ nm_quality = quality == 0 ? 1 : quality;
+ nm_quality =
+ (nm_quality < 50) ? (5000 / nm_quality) : (200 - (nm_quality * 2));
+
+ g_assert (quant_tables != NULL);
+ g_assert (scaled_quant_tables != NULL);
+
+ for (i = 0; i < GST_JPEG_MAX_QUANT_ELEMENTS; i++) {
+ /* Luma QM */
+ qt_val = (quant_tables->quant_tables[0].quant_table[i] * nm_quality) / 100;
+ scaled_quant_tables->quant_tables[0].quant_table[i] =
+ CLAMP (qt_val, 1, 255);
+ /* Chroma QM */
+ qt_val = (quant_tables->quant_tables[1].quant_table[i] * nm_quality) / 100;
+ scaled_quant_tables->quant_tables[1].quant_table[i] =
+ CLAMP (qt_val, 1, 255);
+ }
+}
+