[Libva] [PATCH] Fix the quality factor.
Xiang, Haihao
haihao.xiang at intel.com
Wed Mar 25 19:30:10 PDT 2015
Applied, thanks for the patch.
Haihao
> 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
More information about the Libva
mailing list