mirror of https://gitee.com/openkylin/linux.git
[media] s5p-jpeg: Reorder quantization tables
Reorder quantization tables so that their elements are arranged in the manner reflecting compression quality level that is in accordance with V4L2 documentation, i.e. the larger value of the V4L2_CID_JPEG_COMPRESSION_QUALITY control the better image quality, and thus lower compression quality. The modification allows also to get rid of reverse logic in the s_ctrl callback while assigning user space value to the ctx->compr_quality variable. Signed-off-by: Jacek Anaszewski <j.anaszewski@samsung.com> Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com> Acked-by: Hans Verkuil <hans.verkuil@cisco.com> Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com> Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
This commit is contained in:
parent
f7074ab348
commit
78e5a3ce9c
|
@ -84,15 +84,25 @@ static struct s5p_jpeg_fmt formats_dec[] = {
|
|||
#define NUM_FORMATS_DEC ARRAY_SIZE(formats_dec)
|
||||
|
||||
static const unsigned char qtbl_luminance[4][64] = {
|
||||
{/* level 1 - high quality */
|
||||
8, 6, 6, 8, 12, 14, 16, 17,
|
||||
6, 6, 6, 8, 10, 13, 12, 15,
|
||||
6, 6, 7, 8, 13, 14, 18, 24,
|
||||
8, 8, 8, 14, 13, 19, 24, 35,
|
||||
12, 10, 13, 13, 20, 26, 34, 39,
|
||||
14, 13, 14, 19, 26, 34, 39, 39,
|
||||
16, 12, 18, 24, 34, 39, 39, 39,
|
||||
17, 15, 24, 35, 39, 39, 39, 39
|
||||
{/*level 0 - high compression quality */
|
||||
20, 16, 25, 39, 50, 46, 62, 68,
|
||||
16, 18, 23, 38, 38, 53, 65, 68,
|
||||
25, 23, 31, 38, 53, 65, 68, 68,
|
||||
39, 38, 38, 53, 65, 68, 68, 68,
|
||||
50, 38, 53, 65, 68, 68, 68, 68,
|
||||
46, 53, 65, 68, 68, 68, 68, 68,
|
||||
62, 65, 68, 68, 68, 68, 68, 68,
|
||||
68, 68, 68, 68, 68, 68, 68, 68
|
||||
},
|
||||
{/* level 1 */
|
||||
16, 11, 11, 16, 23, 27, 31, 30,
|
||||
11, 12, 12, 15, 20, 23, 23, 30,
|
||||
11, 12, 13, 16, 23, 26, 35, 47,
|
||||
16, 15, 16, 23, 26, 37, 47, 64,
|
||||
23, 20, 23, 26, 39, 51, 64, 64,
|
||||
27, 23, 26, 37, 51, 64, 64, 64,
|
||||
31, 23, 35, 47, 64, 64, 64, 64,
|
||||
30, 30, 47, 64, 64, 64, 64, 64
|
||||
},
|
||||
{/* level 2 */
|
||||
12, 8, 8, 12, 17, 21, 24, 23,
|
||||
|
@ -104,38 +114,38 @@ static const unsigned char qtbl_luminance[4][64] = {
|
|||
24, 18, 27, 36, 51, 59, 59, 59,
|
||||
23, 23, 36, 53, 59, 59, 59, 59
|
||||
},
|
||||
{/* level 3 */
|
||||
16, 11, 11, 16, 23, 27, 31, 30,
|
||||
11, 12, 12, 15, 20, 23, 23, 30,
|
||||
11, 12, 13, 16, 23, 26, 35, 47,
|
||||
16, 15, 16, 23, 26, 37, 47, 64,
|
||||
23, 20, 23, 26, 39, 51, 64, 64,
|
||||
27, 23, 26, 37, 51, 64, 64, 64,
|
||||
31, 23, 35, 47, 64, 64, 64, 64,
|
||||
30, 30, 47, 64, 64, 64, 64, 64
|
||||
},
|
||||
{/*level 4 - low quality */
|
||||
20, 16, 25, 39, 50, 46, 62, 68,
|
||||
16, 18, 23, 38, 38, 53, 65, 68,
|
||||
25, 23, 31, 38, 53, 65, 68, 68,
|
||||
39, 38, 38, 53, 65, 68, 68, 68,
|
||||
50, 38, 53, 65, 68, 68, 68, 68,
|
||||
46, 53, 65, 68, 68, 68, 68, 68,
|
||||
62, 65, 68, 68, 68, 68, 68, 68,
|
||||
68, 68, 68, 68, 68, 68, 68, 68
|
||||
{/* level 3 - low compression quality */
|
||||
8, 6, 6, 8, 12, 14, 16, 17,
|
||||
6, 6, 6, 8, 10, 13, 12, 15,
|
||||
6, 6, 7, 8, 13, 14, 18, 24,
|
||||
8, 8, 8, 14, 13, 19, 24, 35,
|
||||
12, 10, 13, 13, 20, 26, 34, 39,
|
||||
14, 13, 14, 19, 26, 34, 39, 39,
|
||||
16, 12, 18, 24, 34, 39, 39, 39,
|
||||
17, 15, 24, 35, 39, 39, 39, 39
|
||||
}
|
||||
};
|
||||
|
||||
static const unsigned char qtbl_chrominance[4][64] = {
|
||||
{/* level 1 - high quality */
|
||||
9, 8, 9, 11, 14, 17, 19, 24,
|
||||
8, 10, 9, 11, 14, 13, 17, 22,
|
||||
9, 9, 13, 14, 13, 15, 23, 26,
|
||||
11, 11, 14, 14, 15, 20, 26, 33,
|
||||
14, 14, 13, 15, 20, 24, 33, 39,
|
||||
17, 13, 15, 20, 24, 32, 39, 39,
|
||||
19, 17, 23, 26, 33, 39, 39, 39,
|
||||
24, 22, 26, 33, 39, 39, 39, 39
|
||||
{/*level 0 - high compression quality */
|
||||
21, 25, 32, 38, 54, 68, 68, 68,
|
||||
25, 28, 24, 38, 54, 68, 68, 68,
|
||||
32, 24, 32, 43, 66, 68, 68, 68,
|
||||
38, 38, 43, 53, 68, 68, 68, 68,
|
||||
54, 54, 66, 68, 68, 68, 68, 68,
|
||||
68, 68, 68, 68, 68, 68, 68, 68,
|
||||
68, 68, 68, 68, 68, 68, 68, 68,
|
||||
68, 68, 68, 68, 68, 68, 68, 68
|
||||
},
|
||||
{/* level 1 */
|
||||
17, 15, 17, 21, 20, 26, 38, 48,
|
||||
15, 19, 18, 17, 20, 26, 35, 43,
|
||||
17, 18, 20, 22, 26, 30, 46, 53,
|
||||
21, 17, 22, 28, 30, 39, 53, 64,
|
||||
20, 20, 26, 30, 39, 48, 64, 64,
|
||||
26, 26, 30, 39, 48, 63, 64, 64,
|
||||
38, 35, 46, 53, 64, 64, 64, 64,
|
||||
48, 43, 53, 64, 64, 64, 64, 64
|
||||
},
|
||||
{/* level 2 */
|
||||
13, 11, 13, 16, 20, 20, 29, 37,
|
||||
|
@ -147,25 +157,15 @@ static const unsigned char qtbl_chrominance[4][64] = {
|
|||
29, 26, 35, 40, 50, 59, 59, 59,
|
||||
37, 32, 40, 50, 59, 59, 59, 59
|
||||
},
|
||||
{/* level 3 */
|
||||
17, 15, 17, 21, 20, 26, 38, 48,
|
||||
15, 19, 18, 17, 20, 26, 35, 43,
|
||||
17, 18, 20, 22, 26, 30, 46, 53,
|
||||
21, 17, 22, 28, 30, 39, 53, 64,
|
||||
20, 20, 26, 30, 39, 48, 64, 64,
|
||||
26, 26, 30, 39, 48, 63, 64, 64,
|
||||
38, 35, 46, 53, 64, 64, 64, 64,
|
||||
48, 43, 53, 64, 64, 64, 64, 64
|
||||
},
|
||||
{/*level 4 - low quality */
|
||||
21, 25, 32, 38, 54, 68, 68, 68,
|
||||
25, 28, 24, 38, 54, 68, 68, 68,
|
||||
32, 24, 32, 43, 66, 68, 68, 68,
|
||||
38, 38, 43, 53, 68, 68, 68, 68,
|
||||
54, 54, 66, 68, 68, 68, 68, 68,
|
||||
68, 68, 68, 68, 68, 68, 68, 68,
|
||||
68, 68, 68, 68, 68, 68, 68, 68,
|
||||
68, 68, 68, 68, 68, 68, 68, 68
|
||||
{/* level 3 - low compression quality */
|
||||
9, 8, 9, 11, 14, 17, 19, 24,
|
||||
8, 10, 9, 11, 14, 13, 17, 22,
|
||||
9, 9, 13, 14, 13, 15, 23, 26,
|
||||
11, 11, 14, 14, 15, 20, 26, 33,
|
||||
14, 14, 13, 15, 20, 24, 33, 39,
|
||||
17, 13, 15, 20, 24, 32, 39, 39,
|
||||
19, 17, 23, 26, 33, 39, 39, 39,
|
||||
24, 22, 26, 33, 39, 39, 39, 39
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -834,7 +834,7 @@ static int s5p_jpeg_s_ctrl(struct v4l2_ctrl *ctrl)
|
|||
|
||||
switch (ctrl->id) {
|
||||
case V4L2_CID_JPEG_COMPRESSION_QUALITY:
|
||||
ctx->compr_quality = S5P_JPEG_COMPR_QUAL_WORST - ctrl->val;
|
||||
ctx->compr_quality = ctrl->val;
|
||||
break;
|
||||
case V4L2_CID_JPEG_RESTART_INTERVAL:
|
||||
ctx->restart_interval = ctrl->val;
|
||||
|
@ -863,7 +863,7 @@ static int s5p_jpeg_controls_create(struct s5p_jpeg_ctx *ctx)
|
|||
if (ctx->mode == S5P_JPEG_ENCODE) {
|
||||
v4l2_ctrl_new_std(&ctx->ctrl_handler, &s5p_jpeg_ctrl_ops,
|
||||
V4L2_CID_JPEG_COMPRESSION_QUALITY,
|
||||
0, 3, 1, 3);
|
||||
0, 3, 1, S5P_JPEG_COMPR_QUAL_WORST);
|
||||
|
||||
v4l2_ctrl_new_std(&ctx->ctrl_handler, &s5p_jpeg_ctrl_ops,
|
||||
V4L2_CID_JPEG_RESTART_INTERVAL,
|
||||
|
|
Loading…
Reference in New Issue