[Libva] [PATCH] Fix the quality factor.
Sirisha Muppavarapu
sirisha.muppavarapu at intel.com
Mon Mar 23 14:16:02 PDT 2015
The following are added in this commit:
1) Added lower bound to the quality factor.
2) Added extensive comments on scaling and normalization of the quality factor.
---
src/gen8_mfc.c | 16 +++++++++++++---
1 file changed, 13 insertions(+), 3 deletions(-)
diff --git a/src/gen8_mfc.c b/src/gen8_mfc.c
index a329288..9304b97 100644
--- a/src/gen8_mfc.c
+++ b/src/gen8_mfc.c
@@ -2720,10 +2720,20 @@ gen8_mfc_jpeg_fqm_state(VADriverContextP ctx,
qmatrix->load_chroma_quantiser_matrix = (pic_param->num_components > 1) ? 1 : 0;
}
- if (quality > 100)
- quality = 100;
+
+ //As per the design, normalization of the quality factor and scaling of the Quantization tables
+ //based on the quality factor needs to be done in the driver before sending the values to the HW.
+ //But note, the driver expects the scaled quantization tables (as per below logic) to be sent as
+ //packed header information. The packed header is written as the header of the jpeg file. This
+ //header information is used to decode the jpeg file. So, it is the app's responsibility to send
+ //the correct header information (See build_packed_jpeg_header_buffer() in jpegenc.c in LibVa on
+ //how to do this). QTables can be different for different applications. If no tables are provided,
+ //the default tables in the driver are used.
+
+ //Normalization of the quality factor
+ if (quality > 100) quality=100;
+ if (quality == 0) quality=1;
quality = (quality < 50) ? (5000/quality) : (200 - (quality*2));
- quality = (quality == 0) ? 1 : quality;
//Step 1. Apply Quality factor and clip to range [1, 255] for luma and chroma Quantization matrices
//Step 2. HW expects the 1/Q[i] values in the qm sent, so get reciprocals
--
1.9.1
More information about the Libva
mailing list