1 | // SPDX-License-Identifier: GPL-2.0-only |
2 | /* |
3 | * Copyright (c) 2023, Collabora |
4 | * |
5 | * Author: Benjamin Gaignard <benjamin.gaignard@collabora.com> |
6 | */ |
7 | |
8 | #include <media/v4l2-mem2mem.h> |
9 | #include "hantro.h" |
10 | #include "hantro_v4l2.h" |
11 | #include "rockchip_vpu981_regs.h" |
12 | |
13 | #define AV1_DEC_MODE 17 |
14 | #define GM_GLOBAL_MODELS_PER_FRAME 7 |
15 | #define GLOBAL_MODEL_TOTAL_SIZE (6 * 4 + 4 * 2) |
16 | #define GLOBAL_MODEL_SIZE ALIGN(GM_GLOBAL_MODELS_PER_FRAME * GLOBAL_MODEL_TOTAL_SIZE, 2048) |
17 | #define AV1_MAX_TILES 128 |
18 | #define AV1_TILE_INFO_SIZE (AV1_MAX_TILES * 16) |
19 | #define AV1DEC_MAX_PIC_BUFFERS 24 |
20 | #define AV1_REF_SCALE_SHIFT 14 |
21 | #define AV1_INVALID_IDX -1 |
22 | #define MAX_FRAME_DISTANCE 31 |
23 | #define AV1_PRIMARY_REF_NONE 7 |
24 | #define AV1_TILE_SIZE ALIGN(32 * 128, 4096) |
25 | /* |
26 | * These 3 values aren't defined enum v4l2_av1_segment_feature because |
27 | * they are not part of the specification |
28 | */ |
29 | #define V4L2_AV1_SEG_LVL_ALT_LF_Y_H 2 |
30 | #define V4L2_AV1_SEG_LVL_ALT_LF_U 3 |
31 | #define V4L2_AV1_SEG_LVL_ALT_LF_V 4 |
32 | |
33 | #define SUPERRES_SCALE_BITS 3 |
34 | #define SCALE_NUMERATOR 8 |
35 | #define SUPERRES_SCALE_DENOMINATOR_MIN (SCALE_NUMERATOR + 1) |
36 | |
37 | #define RS_SUBPEL_BITS 6 |
38 | #define RS_SUBPEL_MASK ((1 << RS_SUBPEL_BITS) - 1) |
39 | #define RS_SCALE_SUBPEL_BITS 14 |
40 | #define RS_SCALE_SUBPEL_MASK ((1 << RS_SCALE_SUBPEL_BITS) - 1) |
41 | #define (RS_SCALE_SUBPEL_BITS - RS_SUBPEL_BITS) |
42 | #define (1 << (RS_SCALE_EXTRA_BITS - 1)) |
43 | |
44 | #define IS_INTRA(type) ((type == V4L2_AV1_KEY_FRAME) || (type == V4L2_AV1_INTRA_ONLY_FRAME)) |
45 | |
46 | #define LST_BUF_IDX (V4L2_AV1_REF_LAST_FRAME - V4L2_AV1_REF_LAST_FRAME) |
47 | #define LST2_BUF_IDX (V4L2_AV1_REF_LAST2_FRAME - V4L2_AV1_REF_LAST_FRAME) |
48 | #define LST3_BUF_IDX (V4L2_AV1_REF_LAST3_FRAME - V4L2_AV1_REF_LAST_FRAME) |
49 | #define GLD_BUF_IDX (V4L2_AV1_REF_GOLDEN_FRAME - V4L2_AV1_REF_LAST_FRAME) |
50 | #define BWD_BUF_IDX (V4L2_AV1_REF_BWDREF_FRAME - V4L2_AV1_REF_LAST_FRAME) |
51 | #define ALT2_BUF_IDX (V4L2_AV1_REF_ALTREF2_FRAME - V4L2_AV1_REF_LAST_FRAME) |
52 | #define ALT_BUF_IDX (V4L2_AV1_REF_ALTREF_FRAME - V4L2_AV1_REF_LAST_FRAME) |
53 | |
54 | #define DIV_LUT_PREC_BITS 14 |
55 | #define DIV_LUT_BITS 8 |
56 | #define DIV_LUT_NUM BIT(DIV_LUT_BITS) |
57 | #define WARP_PARAM_REDUCE_BITS 6 |
58 | #define WARPEDMODEL_PREC_BITS 16 |
59 | |
60 | #define AV1_DIV_ROUND_UP_POW2(value, n) \ |
61 | ({ \ |
62 | typeof(n) |
---|