// SPDX-License-Identifier: MIT
/*
* Copyright © 2021 Intel Corporation
*/
#include <drm/display/drm_dsc.h>
#include "i915_utils.h"
#include "intel_qp_tables.h"
/* from BPP 6 to 24 in steps of 0.5 */
#define RC_RANGE_QP444_8BPC_MAX_NUM_BPP 37
/* from BPP 6 to 30 in steps of 0.5 */
#define RC_RANGE_QP444_10BPC_MAX_NUM_BPP 49
/* from BPP 6 to 36 in steps of 0.5 */
#define RC_RANGE_QP444_12BPC_MAX_NUM_BPP 61
/* For YCbCr420 the bits_per_pixel sent in PPS params
* is double the target bpp. The below values represent
* the target bpp.
*/
/* from BPP 4 to 12 in steps of 0.5 */
#define RC_RANGE_QP420_8BPC_MAX_NUM_BPP 17
/* from BPP 4 to 15 in steps of 0.5 */
#define RC_RANGE_QP420_10BPC_MAX_NUM_BPP 23
/* from BPP 4 to 18 in steps of 0.5 */
#define RC_RANGE_QP420_12BPC_MAX_NUM_BPP 29
/*
* These qp tables are as per the C model
* and it has the rows pointing to bpps which increment
* in steps of 0.5
*/
static const u8 rc_range_minqp444_8bpc[DSC_NUM_BUF_RANGES][RC_RANGE_QP444_8BPC_MAX_NUM_BPP] = {
{ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
{ 1 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
{ 3 , 2 , 2 , 2 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
{ 3 , 3 , 2 , 2 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
{ 5 , 4 , 4 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 2 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
{ 5 , 4 , 4 , 4 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 2 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
{ 5 , 5 , 4 , 4 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 2 , 2 , 2 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
{ 5 , 5 , 4 , 4 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 1 , 1 , 1 , 1 , 1 , 1 , 0 , 0 , 0 , 0 , 0 },
{ 5 , 5 , 4 , 4 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 1 , 1 , 1 , 1 , 1 , 1 , 0 , 0 , 0 },
{ 6 , 5 , 5 , 4 , 4 , 4 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 2 , 2 , 1 , 1 , 1 , 1 , 1 , 1 , 0 , 0 , 0 },
{ 6 , 6 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 3 ,
3 , 3 , 3 , 2 , 2 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 0 },
{ 6 , 6 , 6 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 4 , 4 , 4 , 4 , 4 , 4 ,
4 , 4 , 4 , 3 , 3 , 2 , 2 , 2 , 2 , 1 , 1 , 1 , 1 , 0 },
{ 6 , 6 , 6 , 6 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 4 ,
4 , 4 , 4 , 3 , 3 , 2 , 2 , 2 , 2 , 1 , 1 , 1 , 1 , 0 },
{ 9 , 9 , 9 , 9 , 8 , 8 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 6 , 6 , 5 ,
5 , 5 , 5 , 4 , 4 , 3 , 3 , 3 , 3 , 2 , 2 , 1 , 1 , 1 },
{ 14 , 14 , 13 , 13 , 12 , 12 , 12 , 12 , 11 , 11 , 10 , 10 , 10 , 10 , 9 , 9 , 9 , 8 , 8 ,
8 , 7 , 7 , 7 , 7 , 6 , 6 , 5 , 5 , 5 , 5 , 4 , 4 , 4 , 3 , 3 , 3 , 3 }
};
static const u8 rc_range_maxqp444_8bpc[DSC_NUM_BUF_RANGES][RC_RANGE_QP444_8BPC_MAX_NUM_BPP] = {
{ 4 , 4 , 4 , 4 , 4 , 4 , 3 , 3 , 3 , 3 , 2 , 2 , 2 , 2 , 1 , 1 , 1 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
{ 6 , 6 , 5 , 5 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 3 , 3 , 3 , 2 , 2 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 0 , 0 , 0 , 0 , 0 },
{ 8 , 7 , 7 , 6 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 4 , 4 , 4 , 3 , 2 , 2 , 1 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 0 , 0 , 0 , 0 , 0 },
{ 8 , 8 , 7 , 7 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 5 , 5 , 5 , 4 , 3 , 3 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 0 },
{ 9 , 8 , 8 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 6 , 6 , 5 , 4 , 4 , 3 , 2 , 2 , 2 , 2 , 2 ,
2 , 2 , 2 , 2 , 2 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 0 },
{ 9 , 8 , 8 , 8 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 6 , 6 , 6 , 5 , 4 , 4 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 2 , 2 , 2 , 2 , 1 , 1 , 1 , 1 , 1 , 1 , 1 },
{ 9 , 9 , 8 , 8 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 6 , 6 , 5 , 4 , 4 , 3 , 3 , 3 , 3 , 3 ,
3 , 3 , 3 , 2 , 2 , 2 , 2 , 1 , 1 , 1 , 1 , 1 , 1 , 1 },
{ 10 , 10 , 9 , 9 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 7 , 7 , 6 , 5 , 5 , 4 , 4 , 4 , 4 , 3 ,
3 , 3 , 3 , 2 , 2 , 2 , 2 , 2 , 2 , 1 , 1 , 1 , 1 , 1 },
{ 11 , 11 , 10 , 10 , 9 , 9 , 9 , 9 , 9 , 9 , 8 , 8 , 8 , 7 , 7 , 6 , 6 , 5 , 5 , 5 , 5 , 5 ,
4 , 4 , 4 , 4 , 3 , 3 , 2 , 2 , 2 , 2 , 2 , 2 , 1 , 1 , 1 },
{ 12 , 11 , 11 , 10 , 10 , 10 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 8 , 8 , 7 , 6 , 6 , 5 , 5 , 5 ,
5 , 4 , 4 , 4 , 4 , 3 , 3 , 2 , 2 , 2 , 2 , 2 , 2 , 1 , 1 , 1 },
{ 12 , 12 , 11 , 11 , 10 , 10 , 10 , 10 , 10 , 10 , 9 , 9 , 9 , 8 , 8 , 7 , 7 , 6 , 6 , 6 ,
5 , 5 , 4 , 4 , 4 , 4 , 3 , 3 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 1 },
{ 12 , 12 , 12 , 11 , 11 , 11 , 10 , 10 , 10 , 10 , 9 , 9 , 9 , 9 , 8 , 8 , 8 , 7 , 7 , 7 ,
6 , 6 , 5 , 5 , 5 , 5 , 4 , 4 , 3 , 3 , 3 , 3 , 2 , 2 , 2 , 2 , 1 },
{ 12 , 12 , 12 , 12 , 11 , 11 , 11 , 11 , 11 , 10 , 10 , 9 , 9 , 9 , 8 , 8 , 8 , 7 , 7 , 7 ,
6 , 6 , 5 , 5 , 5 , 5 , 4 , 4 , 3 , 3 , 3 , 3 , 2 , 2 , 2 , 2 , 1 },
{ 13 , 13 , 13 , 13 , 12 , 12 , 11 , 11 , 11 , 11 , 10 , 10 , 10 , 10 , 9 , 9 , 8 , 8 , 8 ,
8 , 7 , 7 , 6 , 6 , 6 , 6 , 5 , 5 , 4 , 4 , 4 , 4 , 3 , 3 , 2 , 2 , 2 },
{ 15 , 15 , 14 , 14 , 13 , 13 , 13 , 13 , 12 , 12 , 11 , 11 , 11 , 11 , 10 , 10 , 10 , 9 ,
9 , 9 , 8 , 8 , 8 , 8 , 7 , 7 , 6 , 6 , 6 , 6 , 5 , 5 , 5 , 4 , 4 , 4 , 4 }
};
static const u8 rc_range_minqp444_10bpc[DSC_NUM_BUF_RANGES][RC_RANGE_QP444_10BPC_MAX_NUM_BPP] = {
{ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 },
{ 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 3 , 3 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 },
{ 7 , 6 , 6 , 6 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 4 , 4 , 4 , 3 , 3 , 3 , 3 , 3 , 3 , 2 , 2 ,
2 , 2 , 2 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 },
{ 7 , 7 , 6 , 6 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 3 , 3 ,
3 , 3 , 3 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 1 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 },
{ 9 , 8 , 8 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 6 , 6 , 5 , 5 , 5 , 5 , 4 , 4 , 4 , 4 , 3 ,
3 , 3 , 3 , 3 , 3 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 1 , 1 , 1 , 1 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 },
{ 9 , 8 , 8 , 8 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 6 , 6 , 6 , 6 , 5 , 5 , 5 , 5 , 5 , 5 , 4 ,
4 , 4 , 4 , 3 , 3 , 3 , 3 , 3 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 1 , 1 , 1 , 0 , 0 , 0 ,
0 , 0 , 0 },
{ 9 , 9 , 8 , 8 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 6 , 6 , 6 , 5 , 5 , 5 , 5 , 5 ,
4 , 4 , 4 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 2 , 2 , 2 , 1 , 1 , 1 , 1 , 0 , 0 ,
0 , 0 , 0 },
{ 9 , 9 , 8 , 8 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 6 , 6 , 6 , 6 , 6 , 6 , 5 ,
5 , 5 , 5 , 4 , 4 , 4 , 4 , 4 , 4 , 3 , 3 , 3 , 3 , 3 , 3 , 2 , 2 , 2 , 2 , 1 , 1 , 1 , 0 ,
0 , 0 , 0 },
{ 9 , 9 , 8 , 8 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 6 , 6 , 6 , 6 , 6 , 5 ,
5 , 5 , 5 , 5 , 5 , 5 , 4 , 4 , 4 , 4 , 4 , 3 , 3 , 3 , 3 , 3 , 3 , 2 , 2 , 2 , 1 , 1 , 1 ,
1 , 0 , 0 },
{ 10 , 9 , 9 , 8 , 8 , 8 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 6 , 6 , 6 , 6 , 6 ,
6 , 6 , 6 , 6 , 6 , 5 , 5 , 4 , 4 , 4 , 4 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 2 , 2 , 2 , 1 , 1 ,
1 , 1 , 0 },
{ 10 , 10 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 8 , 8 , 8 , 8 , 7 , 7 , 7 , 7 , 7 , 6 ,
6 , 6 , 6 , 6 , 6 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 4 , 4 , 4 , 3 , 3 , 3 , 2 , 2 , 2 , 1 ,
1 , 1 , 1 },
{ 10 , 10 , 10 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 8 , 8 , 8 , 8 , 8 ,
7 , 7 , 7 , 7 , 7 , 7 , 6 , 6 , 6 , 6 , 5 , 5 , 5 , 5 , 4 , 4 , 4 , 4 , 3 , 3 , 3 , 3 , 2 ,
2 , 1 , 1 , 1 },
{ 10 , 10 , 10 , 10 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 8 , 8 ,
8 , 8 , 8 , 8 , 7 , 7 , 6 , 6 , 6 , 6 , 5 , 5 , 5 , 5 , 4 , 4 , 4 , 4 , 3 , 3 , 3 , 3 , 2 ,
2 , 2 , 2 , 1 },
{ 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 11 , 11 , 11 , 11 , 11 , 11 , 11 ,
11 , 11 , 11 , 10 , 10 , 9 , 9 , 9 , 9 , 8 , 8 , 7 , 7 , 7 , 7 , 6 , 6 , 5 , 5 , 5 , 5 , 4 ,
4 , 3 , 3 , 3 , 3 , 2 , 2 , 2 , 2 , 1 },
{ 18 , 18 , 17 , 17 , 16 , 16 , 16 , 16 , 15 , 15 , 14 , 14 , 14 , 14 , 13 , 13 , 13 ,
12 , 12 , 12 , 11 , 11 , 11 , 11 , 10 , 10 , 9 , 9 , 9 , 9 , 9 , 8 , 8 , 7 , 7 , 7 , 7 ,
7 , 6 , 6 , 5 , 5 , 5 , 5 , 4 , 4 , 3 , 3 , 3 }
};
static const u8 rc_range_maxqp444_10bpc[DSC_NUM_BUF_RANGES][RC_RANGE_QP444_10BPC_MAX_NUM_BPP] = {
{ 8 , 8 , 8 , 8 , 8 , 8 , 7 , 7 , 7 , 6 , 5 , 5 , 4 , 4 , 3 , 3 , 3 , 2 , 2 , 2 , 2 , 2 , 2 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 },
{ 10 , 10 , 9 , 9 , 8 , 8 , 8 , 8 , 8 , 8 , 7 , 7 , 6 , 6 , 6 , 5 , 5 , 4 , 4 , 4 , 4 , 3 , 3 ,
3 , 3 , 3 , 2 , 2 , 2 , 2 , 2 , 2 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 },
{ 12 , 11 , 11 , 10 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 8 , 8 , 8 , 7 , 6 , 6 , 5 , 5 , 5 , 4 ,
4 , 4 , 4 , 4 , 3 , 3 , 3 , 3 , 3 , 3 , 2 , 2 , 2 , 1 , 1 , 1 , 1 , 1 , 1 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 },
{ 12 , 12 , 11 , 11 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 9 , 9 , 9 , 8 , 7 , 7 , 6 ,
6 , 6 , 5 , 5 , 5 , 5 , 5 , 4 , 4 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 2 , 2 , 1 , 1 , 1 , 1 ,
1 , 0 , 0 , 0 , 0 , 0 , 0 },
{ 13 , 12 , 12 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 10 , 10 , 9 , 8 , 8 , 7 ,
6 , 6 , 6 , 6 , 5 , 5 , 5 , 5 , 5 , 5 , 4 , 4 , 4 , 3 , 3 , 3 , 3 , 3 , 2 , 2 , 2 , 2 , 1 ,
1 , 1 , 1 , 0 , 0 , 0 , 0 , 0 },
{ 13 , 12 , 12 , 12 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 10 , 10 , 10 , 9 , 8 , 8 ,
7 , 7 , 7 , 7 , 6 , 6 , 6 , 6 , 5 , 5 , 5 , 5 , 4 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 2 ,
2 , 2 , 1 , 1 , 1 , 1 , 0 , 0 },
{ 13 , 13 , 12 , 12 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 10 , 10 , 9 , 8 , 8 ,
7 , 7 , 7 , 7 , 7 , 6 , 6 , 6 , 5 , 5 , 5 , 5 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 3 , 3 , 3 , 2 ,
2 , 2 , 2 , 1 , 1 , 1 , 1 , 1 },
{ 14 , 14 , 13 , 13 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 12 , 11 , 11 , 10 , 9 , 9 ,
8 , 8 , 8 , 8 , 7 , 7 , 7 , 7 , 6 , 6 , 6 , 5 , 5 , 5 , 4 , 4 , 4 , 4 , 4 , 4 , 3 , 3 , 3 ,
3 , 2 , 2 , 2 , 1 , 1 , 1 , 1 },
{ 15 , 15 , 14 , 14 , 13 , 13 , 13 , 13 , 13 , 13 , 12 , 12 , 12 , 11 , 11 , 10 , 10 , 9 ,
9 , 9 , 9 , 9 , 8 , 8 , 8 , 8 , 7 , 7 , 6 , 5 , 5 , 5 , 5 , 5 , 4 , 4 , 4 , 4 , 4 , 4 , 3 ,
3 , 3 , 2 , 2 , 2 , 2 , 1 , 1 },
{ 16 , 15 , 15 , 14 , 14 , 14 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 12 , 12 , 11 , 10 ,
10 , 9 , 9 , 9 , 9 , 8 , 8 , 8 , 8 , 7 , 7 , 6 , 6 , 5 , 5 , 5 , 5 , 4 , 4 , 4 , 4 , 4 , 4 ,
4 , 3 , 3 , 3 , 2 , 2 , 2 , 2 , 1 },
{ 16 , 16 , 15 , 15 , 14 , 14 , 14 , 14 , 14 , 14 , 13 , 13 , 13 , 12 , 12 , 11 , 11 ,
10 , 10 , 10 , 9 , 9 , 8 , 8 , 8 , 8 , 7 , 7 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 5 , 5 , 5 ,
4 , 4 , 4 , 3 , 3 , 3 , 2 , 2 , 2 , 2 },
{ 16 , 16 , 16 , 15 , 15 , 15 , 14 , 14 , 14 , 14 , 13 , 13 , 13 , 13 , 12 , 12 , 12 ,
11 , 11 , 11 , 10 , 10 , 9 , 9 , 9 , 9 , 8 , 8 , 7 , 7 , 7 , 7 , 6 , 6 , 6 , 6 , 5 , 5 , 5 ,
5 , 4 , 4 , 4 , 4 , 3 , 3 , 2 , 2 , 2 },
{ 16 , 16 , 16 , 16 , 15 , 15 , 15 , 15 , 15 , 14 , 14 , 13 , 13 , 13 , 12 , 12 , 12 ,
11 , 11 , 11 , 10 , 10 , 9 , 9 , 9 , 9 , 8 , 8 , 7 , 7 , 7 , 7 , 6 , 6 , 6 , 6 , 5 , 5 , 5 ,
5 , 4 , 4 , 4 , 4 , 3 , 3 , 3 , 3 , 2 },
{ 17 , 17 , 17 , 17 , 16 , 16 , 15 , 15 , 15 , 15 , 14 , 14 , 14 , 14 , 13 , 13 , 12 ,
12 , 12 , 12 , 11 , 11 , 10 , 10 , 10 , 10 , 9 , 9 , 8 , 8 , 8 , 8 , 7 , 7 , 6 , 6 , 6 ,
6 , 5 , 5 , 4 , 4 , 4 , 4 , 3 , 3 , 3 , 3 , 2 },
{ 19 , 19 , 18 , 18 , 17 , 17 , 17 , 17 , 16 , 16 , 15 , 15 , 15 , 15 , 14 , 14 , 14 ,
13 , 13 , 13 , 12 , 12 , 12 , 12 , 11 , 11 , 10 , 10 , 10 , 10 , 10 , 9 , 9 , 8 , 8 , 8 ,
8 , 8 , 7 , 7 , 6 , 6 , 6 , 6 , 5 , 5 , 4 , 4 , 4 }
};
static const u8 rc_range_minqp444_12bpc[DSC_NUM_BUF_RANGES][RC_RANGE_QP444_12BPC_MAX_NUM_BPP] = {
{ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
{ 5 , 5 , 5 , 5 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 3 , 3 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
1 , 1 , 1 , 1 , 1 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
{ 11 , 10 , 10 , 9 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 7 , 7 , 7 , 6 , 5 , 5 , 4 , 4 , 4 , 3 , 3 , 3 , 3 ,
3 , 2 , 2 , 2 , 2 , 2 , 2 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
{ 11 , 11 , 10 , 10 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 8 , 8 , 8 , 7 , 6 , 6 , 6 , 6 , 6 , 5 , 5 , 5 ,
5 , 5 , 4 , 4 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 1 , 1 , 1 , 1 , 1 , 1 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
{ 13 , 12 , 12 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 10 , 10 , 9 , 9 , 9 , 8 , 7 , 7 , 7 ,
7 , 5 , 5 , 5 , 5 , 5 , 5 , 4 , 4 , 4 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 2 , 2 , 2 , 2 , 1 , 1 ,
1 , 1 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
{ 13 , 12 , 12 , 12 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 10 , 9 , 9 , 8 , 8 ,
8 , 8 , 6 , 6 , 6 , 6 , 5 , 5 , 5 , 5 , 5 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 3 , 3 , 3 , 2 , 2 , 2 ,
2 , 1 , 1 , 1 , 1 , 1 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
{ 13 , 13 , 12 , 12 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 10 , 9 , 9 , 9 , 9 ,
9 , 9 , 9 , 8 , 8 , 8 , 7 , 7 , 7 , 6 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 3 , 3 ,
3 , 2 , 2 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 0 , 0 , 0 , 0 , 0 },
{ 13 , 13 , 12 , 12 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 10 , 10 , 10 ,
10 , 10 , 10 , 9 , 9 , 9 , 9 , 8 , 8 , 8 , 7 , 7 , 7 , 6 , 6 , 6 , 6 , 6 , 6 , 5 , 5 , 5 , 5 , 4 , 4 ,
4 , 3 , 3 , 2 , 2 , 2 , 2 , 2 , 2 , 1 , 1 , 1 , 1 , 0 , 0 , 0 , 0 },
{ 13 , 13 , 12 , 12 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 ,
11 , 11 , 11 , 10 , 10 , 10 , 10 , 9 , 9 , 8 , 7 , 7 , 7 , 7 , 7 , 6 , 6 , 6 , 6 , 6 , 6 , 5 , 5 ,
5 , 4 , 4 , 4 , 4 , 3 , 3 , 2 , 2 , 2 , 2 , 1 , 1 , 1 , 1 , 1 , 1 , 0 , 0 },
{ 14 , 13 , 13 , 12 , 12 , 12 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 ,
11 , 11 , 11 , 10 , 10 , 10 , 10 , 9 , 9 , 8 , 8 , 8 , 8 , 8 , 8 , 7 , 7 , 7 , 7 , 7 , 6 , 6 , 5 ,
5 , 5 , 4 , 4 , 4 , 4 , 3 , 3 , 3 , 3 , 3 , 2 , 2 , 2 , 2 , 2 , 1 , 1 , 0 },
{ 14 , 14 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 12 , 12 , 12 , 12 ,
12 , 11 , 11 , 11 , 11 , 11 , 11 , 10 , 10 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 8 , 8 , 8 , 7 , 7 , 7 ,
6 , 6 , 6 , 5 , 5 , 5 , 5 , 4 , 4 , 3 , 3 , 3 , 2 , 2 , 2 , 2 , 1 , 1 , 1 },
{ 14 , 14 , 14 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 ,
13 , 12 , 12 , 11 , 11 , 11 , 11 , 11 , 11 , 10 , 10 , 10 , 10 , 9 , 9 , 9 , 9 , 8 , 8 , 8 , 8 ,
7 , 7 , 7 , 7 , 6 , 6 , 5 , 5 , 5 , 4 , 4 , 4 , 3 , 3 , 3 , 3 , 2 , 2 , 1 , 1 , 1 },
{ 14 , 14 , 14 , 14 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 ,
13 , 12 , 12 , 12 , 12 , 12 , 12 , 11 , 11 , 10 , 10 , 10 , 10 , 9 , 9 , 9 , 9 , 8 , 8 , 8 , 8 ,
7 , 7 , 7 , 7 , 6 , 6 , 6 , 6 , 5 , 4 , 4 , 4 , 3 , 3 , 3 , 3 , 2 , 2 , 1 , 1 , 1 },
{ 17 , 17 , 17 , 17 , 16 , 16 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 ,
15 , 14 , 14 , 13 , 13 , 13 , 13 , 12 , 12 , 11 , 11 , 11 , 11 , 10 , 10 , 9 , 9 , 9 , 9 , 8 , 8 ,
7 , 7 , 7 , 7 , 7 , 6 , 6 , 6 , 5 , 5 , 5 , 5 , 4 , 4 , 3 , 3 , 3 , 3 , 2 , 2 , 1 },
{ 22 , 22 , 21 , 21 , 20 , 20 , 20 , 20 , 19 , 19 , 18 , 18 , 18 , 18 , 17 , 17 , 17 , 16 , 16 ,
16 , 15 , 15 , 15 , 15 , 14 , 14 , 13 , 13 , 13 , 13 , 13 , 12 , 12 , 11 , 11 , 11 , 11 , 11 ,
10 , 10 , 9 , 9 , 9 , 9 , 9 , 8 , 8 , 7 , 7 , 7 , 7 , 7 , 6 , 6 , 5 , 5 , 5 , 5 , 4 , 4 , 3 }
};
static const u8 rc_range_maxqp444_12bpc[DSC_NUM_BUF_RANGES][RC_RANGE_QP444_12BPC_MAX_NUM_BPP] = {
{ 12 , 12 , 12 , 12 , 12 , 12 , 11 , 11 , 11 , 10 , 9 , 9 , 6 , 6 , 5 , 5 , 5 , 4 , 4 , 4 , 4 , 4 ,
4 , 3 , 3 , 3 , 3 , 3 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
{ 14 , 14 , 13 , 13 , 12 , 12 , 12 , 12 , 12 , 12 , 11 , 11 , 9 , 9 , 9 , 8 , 8 , 7 , 7 , 7 , 7 , 5 ,
5 , 5 , 5 , 5 , 4 , 4 , 4 , 3 , 3 , 3 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
{ 16 , 15 , 15 , 14 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 12 , 12 , 12 , 11 , 10 , 10 , 9 , 9 ,
9 , 7 , 7 , 7 , 7 , 7 , 6 , 6 , 5 , 5 , 5 , 5 , 4 , 4 , 4 , 3 , 3 , 3 , 3 , 3 , 3 , 2 , 2 , 2 , 1 , 1 ,
1 , 1 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
{ 16 , 16 , 15 , 15 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 14 , 13 , 13 , 13 , 12 , 11 , 11 , 10 ,
10 , 10 , 8 , 8 , 8 , 8 , 8 , 7 , 7 , 6 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 4 , 4 , 3 , 3 , 3 , 3 , 3 , 2 ,
2 , 2 , 2 , 2 , 2 , 1 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
{ 17 , 16 , 16 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 14 , 14 , 13 , 12 , 12 , 11 , 10 ,
10 , 10 , 10 , 8 , 8 , 8 , 8 , 8 , 8 , 7 , 7 , 7 , 6 , 6 , 5 , 5 , 5 , 4 , 4 , 4 , 4 , 3 , 3 , 3 , 3 ,
2 , 2 , 2 , 2 , 2 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 0 , 0 },
{ 17 , 16 , 16 , 16 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 14 , 14 , 14 , 13 , 12 , 12 , 11 ,
11 , 11 , 11 , 9 , 9 , 9 , 9 , 8 , 8 , 8 , 8 , 7 , 6 , 6 , 6 , 6 , 6 , 5 , 5 , 5 , 5 , 4 , 4 , 4 , 3 ,
3 , 3 , 3 , 2 , 2 , 2 , 2 , 2 , 2 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 0 },
{ 17 , 17 , 16 , 16 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 14 , 14 , 13 , 12 , 12 , 11 ,
11 , 11 , 11 , 11 , 10 , 10 , 10 , 9 , 9 , 9 , 8 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 6 , 6 , 6 , 5 , 5 ,
5 , 5 , 4 , 4 , 4 , 3 , 3 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 1 , 1 , 1 , 1 , 0 },
{ 18 , 18 , 17 , 17 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 15 , 15 , 14 , 13 , 13 , 12 ,
12 , 12 , 12 , 11 , 11 , 11 , 11 , 10 , 10 , 10 , 8 , 8 , 8 , 7 , 7 , 7 , 7 , 7 , 7 , 6 , 6 , 6 ,
6 , 5 , 5 , 5 , 4 , 4 , 3 , 3 , 3 , 3 , 3 , 3 , 2 , 2 , 2 , 2 , 1 , 1 , 1 , 1 },
{ 19 , 19 , 18 , 18 , 17 , 17 , 17 , 17 , 17 , 17 , 16 , 16 , 16 , 15 , 15 , 14 , 14 , 13 , 13 ,
13 , 13 , 13 , 12 , 12 , 12 , 12 , 11 , 11 , 10 , 9 , 8 , 8 , 8 , 8 , 7 , 7 , 7 , 7 , 7 , 7 , 6 ,
6 , 6 , 5 , 5 , 5 , 5 , 4 , 4 , 3 , 3 , 3 , 3 , 2 , 2 , 2 , 2 , 2 , 2 , 1 , 1 },
{ 20 , 19 , 19 , 18 , 18 , 18 , 17 , 17 , 17 , 17 , 17 , 17 , 17 , 16 , 16 , 15 , 14 , 14 , 13 ,
13 , 13 , 13 , 12 , 12 , 12 , 12 , 11 , 11 , 10 , 10 , 9 , 9 , 9 , 9 , 8 , 8 , 8 , 8 , 8 , 7 , 7 ,
6 , 6 , 6 , 5 , 5 , 5 , 5 , 4 , 4 , 4 , 4 , 4 , 3 , 3 , 3 , 3 , 3 , 2 , 2 , 1 },
{ 20 , 20 , 19 , 19 , 18 , 18 , 18 , 18 , 18 , 18 , 17 , 17 , 17 , 16 , 16 , 15 , 15 , 14 , 14 ,
14 , 13 , 13 , 12 , 12 , 12 , 12 , 11 , 11 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 10 , 9 , 9 , 9 ,
8 , 8 , 8 , 7 , 7 , 7 , 6 , 6 , 6 , 6 , 5 , 5 , 4 , 4 , 4 , 3 , 3 , 3 , 3 , 2 , 2 , 2 },
{ 20 , 20 , 20 , 19 , 19 , 19 , 18 , 18 , 18 , 18 , 17 , 17 , 17 , 17 , 16 , 16 , 16 , 15 , 15 ,
15 , 14 , 14 , 13 , 13 , 13 , 13 , 12 , 12 , 11 , 11 , 11 , 11 , 10 , 10 , 10 , 10 , 9 , 9 , 9 ,
9 , 8 , 8 , 8 , 8 , 7 , 7 , 6 , 6 , 6 , 5 , 5 , 5 , 4 , 4 , 4 , 4 , 3 , 3 , 2 , 2 , 2 },
{ 20 , 20 , 20 , 20 , 19 , 19 , 19 , 19 , 19 , 18 , 18 , 17 , 17 , 17 , 16 , 16 , 16 , 15 , 15 ,
15 , 14 , 14 , 13 , 13 , 13 , 13 , 12 , 12 , 11 , 11 , 11 , 11 , 10 , 10 , 10 , 10 , 9 , 9 , 9 ,
9 , 8 , 8 , 8 , 8 , 7 , 7 , 7 , 7 , 6 , 5 , 5 , 5 , 4 , 4 , 4 , 4 , 3 , 3 , 2 , 2 , 2 },
{ 21 , 21 , 21 , 21 , 20 , 20 , 19 , 19 , 19 , 19 , 18 , 18 , 18 , 18 , 17 , 17 , 16 , 16 , 16 ,
16 , 15 , 15 , 14 , 14 , 14 , 14 , 13 , 13 , 12 , 12 , 12 , 12 , 11 , 11 , 10 , 10 , 10 , 10 ,
9 , 9 , 8 , 8 , 8 , 8 , 8 , 7 , 7 , 7 , 6 , 6 , 6 , 6 , 5 , 5 , 4 , 4 , 4 , 4 , 3 , 3 , 2 },
{ 23 , 23 , 22 , 22 , 21 , 21 , 21 , 21 , 20 , 20 , 19 , 19 , 19 , 19 , 18 , 18 , 18 , 17 , 17 ,
17 , 16 , 16 , 16 , 16 , 15 , 15 , 14 , 14 , 14 , 14 , 14 , 13 , 13 , 12 , 12 , 12 , 12 , 12 ,
11 , 11 , 10 , 10 , 10 , 10 , 10 , 9 , 9 , 8 , 8 , 8 , 8 , 8 , 7 , 7 , 6 , 6 , 6 , 6 , 5 , 5 , 4 }
};
static const u8 rc_range_minqp420_8bpc[DSC_NUM_BUF_RANGES][RC_RANGE_QP420_8BPC_MAX_NUM_BPP] = {
{ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
{ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
{ 1 , 1 , 1 , 1 , 1 , 1 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
{ 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
{ 3 , 3 , 3 , 3 , 3 , 2 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 0 , 0 , 0 , 0 },
{ 3 , 3 , 3 , 3 , 3 , 2 , 2 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 0 , 0 , 0 },
{ 3 , 3 , 3 , 3 , 3 , 3 , 2 , 2 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 0 , 0 },
{ 3 , 3 , 3 , 3 , 3 , 3 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 1 , 1 , 1 , 0 },
{ 3 , 3 , 3 , 3 , 3 , 3 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 1 , 1 , 0 },
{ 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 2 , 2 , 1 , 1 },
{ 5 , 5 , 5 , 5 , 5 , 4 , 4 , 4 , 4 , 4 , 3 , 3 , 3 , 3 , 2 , 1 , 1 },
{ 5 , 5 , 5 , 5 , 5 , 5 , 5 , 4 , 4 , 4 , 4 , 4 , 4 , 3 , 2 , 2 , 1 },
{ 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 4 , 4 , 3 , 3 , 2 , 1 },
{ 9 , 8 , 8 , 7 , 7 , 7 , 7 , 7 , 7 , 6 , 5 , 5 , 4 , 3 , 3 , 3 , 2 },
{ 13 , 12 , 12 , 11 , 10 , 10 , 9 , 8 , 8 , 7 , 6 , 6 , 5 , 5 , 4 , 4 , 3 }
};
static const u8 rc_range_maxqp420_8bpc[DSC_NUM_BUF_RANGES][RC_RANGE_QP420_8BPC_MAX_NUM_BPP] = {
{ 4 , 4 , 3 , 3 , 2 , 2 , 1 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
{ 4 , 4 , 4 , 4 , 4 , 3 , 2 , 2 , 1 , 1 , 1 , 1 , 0 , 0 , 0 , 0 , 0 },
{ 5 , 5 , 5 , 5 , 5 , 4 , 3 , 2 , 1 , 1 , 1 , 1 , 1 , 1 , 0 , 0 , 0 },
{ 6 , 6 , 6 , 6 , 6 , 5 , 4 , 3 , 2 , 2 , 2 , 1 , 1 , 1 , 1 , 0 , 0 },
{ 7 , 7 , 7 , 7 , 7 , 5 , 4 , 3 , 2 , 2 , 2 , 2 , 2 , 1 , 1 , 1 , 0 },
{ 7 , 7 , 7 , 7 , 7 , 6 , 5 , 4 , 3 , 3 , 3 , 2 , 2 , 2 , 1 , 1 , 0 },
{ 7 , 7 , 7 , 7 , 7 , 6 , 5 , 4 , 3 , 3 , 3 , 3 , 2 , 2 , 2 , 1 , 1 },
{ 8 , 8 , 8 , 8 , 8 , 7 , 6 , 5 , 4 , 4 , 4 , 3 , 3 , 2 , 2 , 2 , 1 },
{ 9 , 9 , 9 , 8 , 8 , 7 , 6 , 6 , 5 , 5 , 4 , 4 , 3 , 3 , 2 , 2 , 1 },
{ 10 , 10 , 9 , 9 , 9 , 8 , 7 , 6 , 5 , 5 , 5 , 4 , 4 , 3 , 3 , 2 , 2 },
{ 10 , 10 , 10 , 9 , 9 , 8 , 8 , 7 , 6 , 6 , 5 , 5 , 4 , 4 , 3 , 2 , 2 },
{ 11 , 11 , 10 , 10 , 9 , 9 , 8 , 7 , 7 , 6 , 6 , 5 , 5 , 4 , 3 , 3 , 2 },
{ 11 , 11 , 11 , 10 , 9 , 9 , 9 , 8 , 7 , 7 , 6 , 5 , 5 , 4 , 4 , 3 , 2 },
{ 13 , 12 , 12 , 11 , 10 , 10 , 9 , 8 , 8 , 7 , 6 , 6 , 5 , 4 , 4 , 4 , 3 },
{ 14 , 13 , 13 , 12 , 11 , 11 , 10 , 9 , 9 , 8 , 7 , 7 , 6 , 6 , 5 , 5 , 4 }
};
static const u8 rc_range_minqp420_10bpc[DSC_NUM_BUF_RANGES][RC_RANGE_QP420_10BPC_MAX_NUM_BPP] = {
{ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
{ 4 , 4 , 4 , 3 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
{ 4 , 4 , 4 , 3 , 3 , 3 , 3 , 3 , 3 , 2 , 2 , 2 , 2 , 2 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
{ 5 , 5 , 5 , 4 , 4 , 4 , 4 , 4 , 4 , 3 , 3 , 2 , 2 , 2 , 2 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
{ 7 , 7 , 7 , 6 , 6 , 5 , 5 , 4 , 4 , 3 , 3 , 3 , 3 , 2 , 2 , 2 , 1 , 1 , 1 , 0 , 0 , 0 , 0 },
{ 7 , 7 , 7 , 7 , 7 , 6 , 5 , 5 , 5 , 5 , 5 , 4 , 3 , 3 , 2 , 2 , 1 , 1 , 1 , 1 , 1 , 0 , 0 },
{ 7 , 7 , 7 , 7 , 7 , 6 , 6 , 5 , 5 , 5 , 5 , 4 , 4 , 4 , 3 , 2 , 2 , 2 , 2 , 1 , 1 , 1 , 0 },
{ 7 , 7 , 7 , 7 , 7 , 7 , 6 , 6 , 6 , 6 , 6 , 5 , 4 , 4 , 4 , 3 , 2 , 2 , 2 , 1 , 1 , 1 , 0 },
{ 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 6 , 6 , 6 , 6 , 5 , 5 , 4 , 4 , 3 , 3 , 2 , 2 , 2 , 1 , 1 },
{ 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 6 , 6 , 5 , 5 , 4 , 4 , 3 , 3 , 2 , 2 , 1 , 1 },
{ 9 , 9 , 9 , 9 , 9 , 8 , 8 , 8 , 8 , 8 , 7 , 7 , 6 , 6 , 5 , 5 , 4 , 4 , 3 , 3 , 2 , 2 , 1 },
{ 9 , 9 , 9 , 9 , 9 , 9 , 8 , 8 , 8 , 8 , 8 , 8 , 8 , 7 , 6 , 6 , 5 , 4 , 4 , 3 , 3 , 2 , 1 },
{ 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 9 , 8 , 8 , 7 , 7 , 6 , 5 , 4 , 4 , 3 , 3 , 2 , 1 },
{ 13 , 12 , 12 , 11 , 11 , 11 , 11 , 11 , 11 , 10 , 9 , 9 , 8 , 7 , 7 , 6 , 5 , 5 , 4 , 3 , 3 ,
2 , 2 },
{ 17 , 16 , 16 , 15 , 14 , 14 , 13 , 12 , 12 , 11 , 10 , 10 , 10 , 9 , 8 , 8 , 7 , 6 , 6 , 5 ,
5 , 4 , 4 }
};
static const u8 rc_range_maxqp420_10bpc[DSC_NUM_BUF_RANGES][RC_RANGE_QP420_10BPC_MAX_NUM_BPP] = {
{ 8 , 8 , 7 , 6 , 4 , 4 , 3 , 3 , 2 , 1 , 1 , 1 , 1 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
{ 8 , 8 , 8 , 7 , 6 , 5 , 4 , 4 , 3 , 3 , 3 , 3 , 2 , 1 , 1 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
{ 9 , 9 , 9 , 8 , 8 , 7 , 6 , 5 , 4 , 3 , 3 , 3 , 3 , 3 , 2 , 1 , 1 , 1 , 0 , 0 , 0 , 0 , 0 },
{ 10 , 10 , 10 , 9 , 9 , 8 , 7 , 6 , 5 , 4 , 4 , 3 , 3 , 3 , 3 , 2 , 1 , 1 , 1 , 1 , 1 , 0 ,
0 },
{ 11 , 11 , 11 , 10 , 10 , 8 , 7 , 6 , 5 , 4 , 4 , 4 , 4 , 3 , 3 , 3 , 2 , 2 , 2 , 1 , 1 , 1 ,
0 },
{ 11 , 11 , 11 , 10 , 10 , 9 , 8 , 7 , 6 , 6 , 6 , 5 , 4 , 4 , 3 , 3 , 2 , 2 , 2 , 2 , 2 , 1 ,
1 },
{ 11 , 11 , 11 , 11 , 11 , 10 , 9 , 8 , 7 , 7 , 7 , 6 , 5 , 5 , 4 , 3 , 3 , 3 , 3 , 2 , 2 , 2 ,
1 },
{ 12 , 12 , 12 , 12 , 12 , 11 , 10 , 9 , 8 , 8 , 8 , 7 , 6 , 5 , 5 , 4 , 3 , 3 , 3 , 2 , 2 ,
2 , 1 },
{ 13 , 13 , 13 , 12 , 12 , 11 , 10 , 10 , 9 , 9 , 8 , 8 , 7 , 7 , 6 , 5 , 4 , 4 , 3 , 3 , 3 ,
2 , 2 },
{ 14 , 14 , 13 , 13 , 13 , 12 , 11 , 10 , 9 , 9 , 9 , 8 , 8 , 7 , 7 , 6 , 5 , 4 , 4 , 3 , 3 ,
2 , 2 },
{ 14 , 14 , 14 , 13 , 13 , 12 , 12 , 11 , 10 , 10 , 9 , 9 , 8 , 8 , 7 , 6 , 5 , 5 , 4 , 4 ,
3 , 3 , 2 },
{ 15 , 15 , 14 , 14 , 13 , 13 , 12 , 11 , 11 , 10 , 10 , 9 , 9 , 8 , 7 , 7 , 6 , 5 , 5 , 4 ,
4 , 3 , 2 },
{ 15 , 15 , 15 , 14 , 13 , 13 , 13 , 12 , 11 , 11 , 10 , 9 , 9 , 8 , 8 , 7 , 6 , 5 , 5 , 4 ,
4 , 3 , 2 },
{ 17 , 16 , 16 , 15 , 14 , 14 , 13 , 12 , 12 , 11 , 10 , 10 , 9 , 8 , 8 , 7 , 6 , 6 , 5 , 4 ,
4 , 3 , 3 },
{ 18 , 17 , 17 , 16 , 15 , 15 , 14 , 13 , 13 , 12 , 11 , 11 , 11 , 10 , 9 , 9 , 8 , 7 , 7 ,
6 , 6 , 5 , 5 }
};
static const u8 rc_range_minqp420_12bpc[DSC_NUM_BUF_RANGES][RC_RANGE_QP420_12BPC_MAX_NUM_BPP] = {
{ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 },
{ 4 , 4 , 4 , 4 , 4 , 4 , 3 , 3 , 2 , 2 , 2 , 2 , 2 , 2 , 2 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 },
{ 9 , 8 , 8 , 7 , 7 , 6 , 5 , 5 , 4 , 4 , 4 , 4 , 3 , 3 , 3 , 2 , 2 , 1 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 },
{ 10 , 9 , 9 , 8 , 8 , 8 , 7 , 7 , 6 , 6 , 6 , 5 , 5 , 4 , 4 , 3 , 2 , 2 , 1 , 1 , 1 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 },
{ 11 , 10 , 10 , 10 , 10 , 9 , 9 , 8 , 7 , 6 , 6 , 6 , 6 , 5 , 5 , 4 , 3 , 3 , 3 , 2 , 2 , 1 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 },
{ 11 , 11 , 11 , 11 , 11 , 10 , 10 , 9 , 9 , 9 , 9 , 8 , 7 , 6 , 5 , 5 , 4 , 4 , 3 , 3 , 3 , 2 ,
1 , 1 , 0 , 0 , 0 , 0 , 0 },
{ 11 , 11 , 11 , 11 , 11 , 11 , 10 , 10 , 9 , 9 , 9 , 8 , 8 , 7 , 6 , 5 , 5 , 5 , 5 , 4 , 3 , 3 ,
2 , 1 , 1 , 1 , 1 , 1 , 0 },
{ 11 , 11 , 11 , 11 , 11 , 11 , 11 , 10 , 10 , 10 , 10 , 9 , 8 , 8 , 8 , 7 , 6 , 6 , 5 , 4 , 4 ,
3 , 2 , 2 , 1 , 1 , 1 , 1 , 1 },
{ 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 10 , 10 , 9 , 9 , 8 , 8 , 7 , 7 , 6 , 5 ,
5 , 4 , 4 , 2 , 2 , 1 , 1 , 1 , 1 },
{ 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 11 , 10 , 10 , 9 , 9 , 8 , 8 , 7 , 7 , 6 ,
5 , 4 , 4 , 3 , 2 , 2 , 1 , 1 , 1 },
{ 13 , 13 , 13 , 13 , 13 , 13 , 13 , 12 , 12 , 12 , 11 , 11 , 10 , 10 , 9 , 9 , 8 , 8 , 7 , 7 ,
6 , 5 , 4 , 3 , 3 , 2 , 2 , 1 , 1 },
{ 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 12 , 12 , 12 , 12 , 11 , 10 , 10 , 9 , 8 , 8 ,
7 , 7 , 6 , 5 , 4 , 3 , 3 , 2 , 2 , 1 },
{ 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 13 , 12 , 12 , 11 , 11 , 10 , 9 , 8 , 8 ,
7 , 7 , 6 , 5 , 4 , 4 , 3 , 2 , 2 , 1 },
{ 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 15 , 14 , 13 , 13 , 12 , 11 , 11 , 10 , 9 , 9 , 8 ,
8 , 7 , 6 , 6 , 5 , 4 , 4 , 3 , 3 , 2 },
{ 21 , 20 , 20 , 19 , 18 , 18 , 17 , 16 , 16 , 15 , 14 , 14 , 14 , 13 , 12 , 12 , 11 , 10 ,
10 , 10 , 9 , 8 , 8 , 7 , 6 , 6 , 5 , 5 , 4 }
};
static const u8 rc_range_maxqp420_12bpc[DSC_NUM_BUF_RANGES][RC_RANGE_QP420_12BPC_MAX_NUM_BPP] = {
{ 11 , 10 , 9 , 8 , 6 , 6 , 5 , 5 , 4 , 3 , 3 , 2 , 2 , 2 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 },
{ 12 , 11 , 11 , 10 , 9 , 8 , 7 , 7 , 6 , 6 , 5 , 5 , 4 , 3 , 3 , 2 , 1 , 1 , 1 , 1 , 1 , 1 ,
1 , 0 , 0 , 0 , 0 , 0 , 0 },
{ 13 , 12 , 12 , 11 , 11 , 10 , 9 , 8 , 7 , 6 , 6 , 6 , 5 , 5 , 4 , 3 , 3 , 2 , 1 , 1 , 1 , 1 ,
1 , 0 , 0 , 0 , 0 , 0 , 0 },
{ 14 , 13 , 13 , 12 , 12 , 11 , 10 , 9 , 8 , 7 , 7 , 6 , 6 , 5 , 5 , 4 , 3 , 3 , 2 , 2 , 2 , 1 ,
1 , 1 , 0 , 0 , 0 , 0 , 0 },
{ 15 , 14 , 14 , 13 , 13 , 11 , 10 , 9 , 8 , 7 , 7 , 7 , 7 , 6 , 6 , 5 , 4 , 4 , 4 , 3 , 3 , 2 ,
1 , 1 , 1 , 0 , 0 , 0 , 0 },
{ 15 , 15 , 15 , 14 , 14 , 13 , 12 , 11 , 10 , 10 , 10 , 9 , 8 , 7 , 6 , 6 , 5 , 5 , 4 , 4 ,
4 , 3 , 2 , 2 , 1 , 1 , 0 , 0 , 0 },
{ 15 , 15 , 15 , 15 , 15 , 14 , 13 , 12 , 11 , 11 , 11 , 10 , 9 , 8 , 7 , 6 , 6 , 6 , 6 , 5 ,
4 , 4 , 3 , 2 , 2 , 2 , 1 , 1 , 0 },
{ 16 , 16 , 16 , 16 , 16 , 15 , 14 , 13 , 12 , 12 , 12 , 11 , 10 , 9 , 9 , 8 , 7 , 7 , 6 , 5 ,
5 , 4 , 3 , 3 , 2 , 2 , 2 , 1 , 1 },
{ 17 , 17 , 17 , 16 , 16 , 15 , 14 , 14 , 13 , 13 , 12 , 12 , 11 , 11 , 10 , 9 , 8 , 8 , 7 ,
6 , 6 , 5 , 5 , 3 , 3 , 2 , 2 , 1 , 1 },
{ 18 , 18 , 17 , 17 , 17 , 16 , 15 , 14 , 13 , 13 , 13 , 12 , 12 , 11 , 11 , 10 , 9 , 8 , 8 ,
7 , 6 , 5 , 5 , 4 , 3 , 3 , 2 , 2 , 1 },
{ 18 , 18 , 18 , 17 , 17 , 16 , 16 , 15 , 14 , 14 , 13 , 13 , 12 , 12 , 11 , 10 , 9 , 9 , 8 ,
8 , 7 , 6 , 5 , 4 , 4 , 3 , 3 , 2 , 2 },
{ 19 , 19 , 18 , 18 , 17 , 17 , 16 , 15 , 15 , 14 , 14 , 13 , 13 , 12 , 11 , 11 , 10 , 9 ,
9 , 8 , 8 , 7 , 6 , 5 , 4 , 4 , 3 , 3 , 2 },
{ 19 , 19 , 19 , 18 , 17 , 17 , 17 , 16 , 15 , 15 , 14 , 13 , 13 , 12 , 12 , 11 , 10 , 9 ,
9 , 8 , 8 , 7 , 6 , 5 , 5 , 4 , 3 , 3 , 2 },
{ 21 , 20 , 20 , 19 , 18 , 18 , 17 , 16 , 16 , 15 , 14 , 14 , 13 , 12 , 12 , 11 , 10 , 10 ,
9 , 9 , 8 , 7 , 7 , 6 , 5 , 5 , 4 , 4 , 3 },
{ 22 , 21 , 21 , 20 , 19 , 19 , 18 , 17 , 17 , 16 , 15 , 15 , 15 , 14 , 13 , 13 , 12 , 11 ,
11 , 11 , 10 , 9 , 9 , 8 , 7 , 7 , 6 , 6 , 5 }
};
#define PARAM_TABLE(_minmax, _bpc, _row, _col, _is_420) do { \
if (bpc == (_bpc)) { \
if (_is_420) \
return rc_range_## _minmax## qp420_## _bpc## bpc[_row][_col]; \
else \
return rc_range_## _minmax## qp444_## _bpc## bpc[_row][_col]; \
} \
} while (0 )
u8 intel_lookup_range_min_qp(int bpc, int buf_i, int bpp_i, bool is_420)
{
PARAM_TABLE(min, 8 , buf_i, bpp_i, is_420);
PARAM_TABLE(min, 10 , buf_i, bpp_i, is_420);
PARAM_TABLE(min, 12 , buf_i, bpp_i, is_420);
MISSING_CASE(bpc);
return 0 ;
}
u8 intel_lookup_range_max_qp(int bpc, int buf_i, int bpp_i, bool is_420)
{
PARAM_TABLE(max, 8 , buf_i, bpp_i, is_420);
PARAM_TABLE(max, 10 , buf_i, bpp_i, is_420);
PARAM_TABLE(max, 12 , buf_i, bpp_i, is_420);
MISSING_CASE(bpc);
return 0 ;
}
Messung V0.5 in Prozent C=97 H=93 G=94