1*d968e50bSDetlev Casanova // SPDX-License-Identifier: GPL-2.0 2*d968e50bSDetlev Casanova /* 3*d968e50bSDetlev Casanova * Rockchip Video Decoder H264 backend 4*d968e50bSDetlev Casanova * 5*d968e50bSDetlev Casanova * Copyright (C) 2019 Collabora, Ltd. 6*d968e50bSDetlev Casanova * Boris Brezillon <boris.brezillon@collabora.com> 7*d968e50bSDetlev Casanova * 8*d968e50bSDetlev Casanova * Copyright (C) 2016 Rockchip Electronics Co., Ltd. 9*d968e50bSDetlev Casanova * Jeffy Chen <jeffy.chen@rock-chips.com> 10*d968e50bSDetlev Casanova */ 11*d968e50bSDetlev Casanova 12*d968e50bSDetlev Casanova #include <media/v4l2-h264.h> 13*d968e50bSDetlev Casanova #include <media/v4l2-mem2mem.h> 14*d968e50bSDetlev Casanova 15*d968e50bSDetlev Casanova #include "rkvdec.h" 16*d968e50bSDetlev Casanova #include "rkvdec-regs.h" 17*d968e50bSDetlev Casanova 18*d968e50bSDetlev Casanova /* Size with u32 units. */ 19*d968e50bSDetlev Casanova #define RKV_CABAC_INIT_BUFFER_SIZE (3680 + 128) 20*d968e50bSDetlev Casanova #define RKV_RPS_SIZE ((128 + 128) / 4) 21*d968e50bSDetlev Casanova #define RKV_ERROR_INFO_SIZE (256 * 144 * 4) 22*d968e50bSDetlev Casanova 23*d968e50bSDetlev Casanova #define RKVDEC_NUM_REFLIST 3 24*d968e50bSDetlev Casanova 25*d968e50bSDetlev Casanova struct rkvdec_h264_scaling_list { 26*d968e50bSDetlev Casanova u8 scaling_list_4x4[6][16]; 27*d968e50bSDetlev Casanova u8 scaling_list_8x8[6][64]; 28*d968e50bSDetlev Casanova u8 padding[128]; 29*d968e50bSDetlev Casanova }; 30*d968e50bSDetlev Casanova 31*d968e50bSDetlev Casanova struct rkvdec_sps_pps_packet { 32*d968e50bSDetlev Casanova u32 info[8]; 33*d968e50bSDetlev Casanova }; 34*d968e50bSDetlev Casanova 35*d968e50bSDetlev Casanova struct rkvdec_ps_field { 36*d968e50bSDetlev Casanova u16 offset; 37*d968e50bSDetlev Casanova u8 len; 38*d968e50bSDetlev Casanova }; 39*d968e50bSDetlev Casanova 40*d968e50bSDetlev Casanova #define PS_FIELD(_offset, _len) \ 41*d968e50bSDetlev Casanova ((struct rkvdec_ps_field){ _offset, _len }) 42*d968e50bSDetlev Casanova 43*d968e50bSDetlev Casanova #define SEQ_PARAMETER_SET_ID PS_FIELD(0, 4) 44*d968e50bSDetlev Casanova #define PROFILE_IDC PS_FIELD(4, 8) 45*d968e50bSDetlev Casanova #define CONSTRAINT_SET3_FLAG PS_FIELD(12, 1) 46*d968e50bSDetlev Casanova #define CHROMA_FORMAT_IDC PS_FIELD(13, 2) 47*d968e50bSDetlev Casanova #define BIT_DEPTH_LUMA PS_FIELD(15, 3) 48*d968e50bSDetlev Casanova #define BIT_DEPTH_CHROMA PS_FIELD(18, 3) 49*d968e50bSDetlev Casanova #define QPPRIME_Y_ZERO_TRANSFORM_BYPASS_FLAG PS_FIELD(21, 1) 50*d968e50bSDetlev Casanova #define LOG2_MAX_FRAME_NUM_MINUS4 PS_FIELD(22, 4) 51*d968e50bSDetlev Casanova #define MAX_NUM_REF_FRAMES PS_FIELD(26, 5) 52*d968e50bSDetlev Casanova #define PIC_ORDER_CNT_TYPE PS_FIELD(31, 2) 53*d968e50bSDetlev Casanova #define LOG2_MAX_PIC_ORDER_CNT_LSB_MINUS4 PS_FIELD(33, 4) 54*d968e50bSDetlev Casanova #define DELTA_PIC_ORDER_ALWAYS_ZERO_FLAG PS_FIELD(37, 1) 55*d968e50bSDetlev Casanova #define PIC_WIDTH_IN_MBS PS_FIELD(38, 9) 56*d968e50bSDetlev Casanova #define PIC_HEIGHT_IN_MBS PS_FIELD(47, 9) 57*d968e50bSDetlev Casanova #define FRAME_MBS_ONLY_FLAG PS_FIELD(56, 1) 58*d968e50bSDetlev Casanova #define MB_ADAPTIVE_FRAME_FIELD_FLAG PS_FIELD(57, 1) 59*d968e50bSDetlev Casanova #define DIRECT_8X8_INFERENCE_FLAG PS_FIELD(58, 1) 60*d968e50bSDetlev Casanova #define MVC_EXTENSION_ENABLE PS_FIELD(59, 1) 61*d968e50bSDetlev Casanova #define NUM_VIEWS PS_FIELD(60, 2) 62*d968e50bSDetlev Casanova #define VIEW_ID(i) PS_FIELD(62 + ((i) * 10), 10) 63*d968e50bSDetlev Casanova #define NUM_ANCHOR_REFS_L(i) PS_FIELD(82 + ((i) * 11), 1) 64*d968e50bSDetlev Casanova #define ANCHOR_REF_L(i) PS_FIELD(83 + ((i) * 11), 10) 65*d968e50bSDetlev Casanova #define NUM_NON_ANCHOR_REFS_L(i) PS_FIELD(104 + ((i) * 11), 1) 66*d968e50bSDetlev Casanova #define NON_ANCHOR_REFS_L(i) PS_FIELD(105 + ((i) * 11), 10) 67*d968e50bSDetlev Casanova #define PIC_PARAMETER_SET_ID PS_FIELD(128, 8) 68*d968e50bSDetlev Casanova #define PPS_SEQ_PARAMETER_SET_ID PS_FIELD(136, 5) 69*d968e50bSDetlev Casanova #define ENTROPY_CODING_MODE_FLAG PS_FIELD(141, 1) 70*d968e50bSDetlev Casanova #define BOTTOM_FIELD_PIC_ORDER_IN_FRAME_PRESENT_FLAG PS_FIELD(142, 1) 71*d968e50bSDetlev Casanova #define NUM_REF_IDX_L_DEFAULT_ACTIVE_MINUS1(i) PS_FIELD(143 + ((i) * 5), 5) 72*d968e50bSDetlev Casanova #define WEIGHTED_PRED_FLAG PS_FIELD(153, 1) 73*d968e50bSDetlev Casanova #define WEIGHTED_BIPRED_IDC PS_FIELD(154, 2) 74*d968e50bSDetlev Casanova #define PIC_INIT_QP_MINUS26 PS_FIELD(156, 7) 75*d968e50bSDetlev Casanova #define PIC_INIT_QS_MINUS26 PS_FIELD(163, 6) 76*d968e50bSDetlev Casanova #define CHROMA_QP_INDEX_OFFSET PS_FIELD(169, 5) 77*d968e50bSDetlev Casanova #define DEBLOCKING_FILTER_CONTROL_PRESENT_FLAG PS_FIELD(174, 1) 78*d968e50bSDetlev Casanova #define CONSTRAINED_INTRA_PRED_FLAG PS_FIELD(175, 1) 79*d968e50bSDetlev Casanova #define REDUNDANT_PIC_CNT_PRESENT PS_FIELD(176, 1) 80*d968e50bSDetlev Casanova #define TRANSFORM_8X8_MODE_FLAG PS_FIELD(177, 1) 81*d968e50bSDetlev Casanova #define SECOND_CHROMA_QP_INDEX_OFFSET PS_FIELD(178, 5) 82*d968e50bSDetlev Casanova #define SCALING_LIST_ENABLE_FLAG PS_FIELD(183, 1) 83*d968e50bSDetlev Casanova #define SCALING_LIST_ADDRESS PS_FIELD(184, 32) 84*d968e50bSDetlev Casanova #define IS_LONG_TERM(i) PS_FIELD(216 + (i), 1) 85*d968e50bSDetlev Casanova 86*d968e50bSDetlev Casanova #define DPB_OFFS(i, j) (288 + ((j) * 32 * 7) + ((i) * 7)) 87*d968e50bSDetlev Casanova #define DPB_INFO(i, j) PS_FIELD(DPB_OFFS(i, j), 5) 88*d968e50bSDetlev Casanova #define BOTTOM_FLAG(i, j) PS_FIELD(DPB_OFFS(i, j) + 5, 1) 89*d968e50bSDetlev Casanova #define VIEW_INDEX_OFF(i, j) PS_FIELD(DPB_OFFS(i, j) + 6, 1) 90*d968e50bSDetlev Casanova 91*d968e50bSDetlev Casanova /* Data structure describing auxiliary buffer format. */ 92*d968e50bSDetlev Casanova struct rkvdec_h264_priv_tbl { 93*d968e50bSDetlev Casanova s8 cabac_table[4][464][2]; 94*d968e50bSDetlev Casanova struct rkvdec_h264_scaling_list scaling_list; 95*d968e50bSDetlev Casanova u32 rps[RKV_RPS_SIZE]; 96*d968e50bSDetlev Casanova struct rkvdec_sps_pps_packet param_set[256]; 97*d968e50bSDetlev Casanova u8 err_info[RKV_ERROR_INFO_SIZE]; 98*d968e50bSDetlev Casanova }; 99*d968e50bSDetlev Casanova 100*d968e50bSDetlev Casanova struct rkvdec_h264_reflists { 101*d968e50bSDetlev Casanova struct v4l2_h264_reference p[V4L2_H264_REF_LIST_LEN]; 102*d968e50bSDetlev Casanova struct v4l2_h264_reference b0[V4L2_H264_REF_LIST_LEN]; 103*d968e50bSDetlev Casanova struct v4l2_h264_reference b1[V4L2_H264_REF_LIST_LEN]; 104*d968e50bSDetlev Casanova }; 105*d968e50bSDetlev Casanova 106*d968e50bSDetlev Casanova struct rkvdec_h264_run { 107*d968e50bSDetlev Casanova struct rkvdec_run base; 108*d968e50bSDetlev Casanova const struct v4l2_ctrl_h264_decode_params *decode_params; 109*d968e50bSDetlev Casanova const struct v4l2_ctrl_h264_sps *sps; 110*d968e50bSDetlev Casanova const struct v4l2_ctrl_h264_pps *pps; 111*d968e50bSDetlev Casanova const struct v4l2_ctrl_h264_scaling_matrix *scaling_matrix; 112*d968e50bSDetlev Casanova struct vb2_buffer *ref_buf[V4L2_H264_NUM_DPB_ENTRIES]; 113*d968e50bSDetlev Casanova }; 114*d968e50bSDetlev Casanova 115*d968e50bSDetlev Casanova struct rkvdec_h264_ctx { 116*d968e50bSDetlev Casanova struct rkvdec_aux_buf priv_tbl; 117*d968e50bSDetlev Casanova struct rkvdec_h264_reflists reflists; 118*d968e50bSDetlev Casanova }; 119*d968e50bSDetlev Casanova 120*d968e50bSDetlev Casanova #define CABAC_ENTRY(ctxidx, idc0_m, idc0_n, idc1_m, idc1_n, \ 121*d968e50bSDetlev Casanova idc2_m, idc2_n, intra_m, intra_n) \ 122*d968e50bSDetlev Casanova [0][(ctxidx)] = {idc0_m, idc0_n}, \ 123*d968e50bSDetlev Casanova [1][(ctxidx)] = {idc1_m, idc1_n}, \ 124*d968e50bSDetlev Casanova [2][(ctxidx)] = {idc2_m, idc2_n}, \ 125*d968e50bSDetlev Casanova [3][(ctxidx)] = {intra_m, intra_n} 126*d968e50bSDetlev Casanova 127*d968e50bSDetlev Casanova /* 128*d968e50bSDetlev Casanova * Constant CABAC table. 129*d968e50bSDetlev Casanova * Built from the tables described in section '9.3.1.1 Initialisation process 130*d968e50bSDetlev Casanova * for context variables' of the H264 spec. 131*d968e50bSDetlev Casanova */ 132*d968e50bSDetlev Casanova static const s8 rkvdec_h264_cabac_table[4][464][2] = { 133*d968e50bSDetlev Casanova /* Table 9-12 – Values of variables m and n for ctxIdx from 0 to 10 */ 134*d968e50bSDetlev Casanova CABAC_ENTRY(0, 20, -15, 20, -15, 20, -15, 20, -15), 135*d968e50bSDetlev Casanova CABAC_ENTRY(1, 2, 54, 2, 54, 2, 54, 2, 54), 136*d968e50bSDetlev Casanova CABAC_ENTRY(2, 3, 74, 3, 74, 3, 74, 3, 74), 137*d968e50bSDetlev Casanova CABAC_ENTRY(3, 20, -15, 20, -15, 20, -15, 20, -15), 138*d968e50bSDetlev Casanova CABAC_ENTRY(4, 2, 54, 2, 54, 2, 54, 2, 54), 139*d968e50bSDetlev Casanova CABAC_ENTRY(5, 3, 74, 3, 74, 3, 74, 3, 74), 140*d968e50bSDetlev Casanova CABAC_ENTRY(6, -28, 127, -28, 127, -28, 127, -28, 127), 141*d968e50bSDetlev Casanova CABAC_ENTRY(7, -23, 104, -23, 104, -23, 104, -23, 104), 142*d968e50bSDetlev Casanova CABAC_ENTRY(8, -6, 53, -6, 53, -6, 53, -6, 53), 143*d968e50bSDetlev Casanova CABAC_ENTRY(9, -1, 54, -1, 54, -1, 54, -1, 54), 144*d968e50bSDetlev Casanova CABAC_ENTRY(10, 7, 51, 7, 51, 7, 51, 7, 51), 145*d968e50bSDetlev Casanova 146*d968e50bSDetlev Casanova /* Table 9-13 – Values of variables m and n for ctxIdx from 11 to 23 */ 147*d968e50bSDetlev Casanova CABAC_ENTRY(11, 23, 33, 22, 25, 29, 16, 0, 0), 148*d968e50bSDetlev Casanova CABAC_ENTRY(12, 23, 2, 34, 0, 25, 0, 0, 0), 149*d968e50bSDetlev Casanova CABAC_ENTRY(13, 21, 0, 16, 0, 14, 0, 0, 0), 150*d968e50bSDetlev Casanova CABAC_ENTRY(14, 1, 9, -2, 9, -10, 51, 0, 0), 151*d968e50bSDetlev Casanova CABAC_ENTRY(15, 0, 49, 4, 41, -3, 62, 0, 0), 152*d968e50bSDetlev Casanova CABAC_ENTRY(16, -37, 118, -29, 118, -27, 99, 0, 0), 153*d968e50bSDetlev Casanova CABAC_ENTRY(17, 5, 57, 2, 65, 26, 16, 0, 0), 154*d968e50bSDetlev Casanova CABAC_ENTRY(18, -13, 78, -6, 71, -4, 85, 0, 0), 155*d968e50bSDetlev Casanova CABAC_ENTRY(19, -11, 65, -13, 79, -24, 102, 0, 0), 156*d968e50bSDetlev Casanova CABAC_ENTRY(20, 1, 62, 5, 52, 5, 57, 0, 0), 157*d968e50bSDetlev Casanova CABAC_ENTRY(21, 12, 49, 9, 50, 6, 57, 0, 0), 158*d968e50bSDetlev Casanova CABAC_ENTRY(22, -4, 73, -3, 70, -17, 73, 0, 0), 159*d968e50bSDetlev Casanova CABAC_ENTRY(23, 17, 50, 10, 54, 14, 57, 0, 0), 160*d968e50bSDetlev Casanova 161*d968e50bSDetlev Casanova /* Table 9-14 – Values of variables m and n for ctxIdx from 24 to 39 */ 162*d968e50bSDetlev Casanova CABAC_ENTRY(24, 18, 64, 26, 34, 20, 40, 0, 0), 163*d968e50bSDetlev Casanova CABAC_ENTRY(25, 9, 43, 19, 22, 20, 10, 0, 0), 164*d968e50bSDetlev Casanova CABAC_ENTRY(26, 29, 0, 40, 0, 29, 0, 0, 0), 165*d968e50bSDetlev Casanova CABAC_ENTRY(27, 26, 67, 57, 2, 54, 0, 0, 0), 166*d968e50bSDetlev Casanova CABAC_ENTRY(28, 16, 90, 41, 36, 37, 42, 0, 0), 167*d968e50bSDetlev Casanova CABAC_ENTRY(29, 9, 104, 26, 69, 12, 97, 0, 0), 168*d968e50bSDetlev Casanova CABAC_ENTRY(30, -46, 127, -45, 127, -32, 127, 0, 0), 169*d968e50bSDetlev Casanova CABAC_ENTRY(31, -20, 104, -15, 101, -22, 117, 0, 0), 170*d968e50bSDetlev Casanova CABAC_ENTRY(32, 1, 67, -4, 76, -2, 74, 0, 0), 171*d968e50bSDetlev Casanova CABAC_ENTRY(33, -13, 78, -6, 71, -4, 85, 0, 0), 172*d968e50bSDetlev Casanova CABAC_ENTRY(34, -11, 65, -13, 79, -24, 102, 0, 0), 173*d968e50bSDetlev Casanova CABAC_ENTRY(35, 1, 62, 5, 52, 5, 57, 0, 0), 174*d968e50bSDetlev Casanova CABAC_ENTRY(36, -6, 86, 6, 69, -6, 93, 0, 0), 175*d968e50bSDetlev Casanova CABAC_ENTRY(37, -17, 95, -13, 90, -14, 88, 0, 0), 176*d968e50bSDetlev Casanova CABAC_ENTRY(38, -6, 61, 0, 52, -6, 44, 0, 0), 177*d968e50bSDetlev Casanova CABAC_ENTRY(39, 9, 45, 8, 43, 4, 55, 0, 0), 178*d968e50bSDetlev Casanova 179*d968e50bSDetlev Casanova /* Table 9-15 – Values of variables m and n for ctxIdx from 40 to 53 */ 180*d968e50bSDetlev Casanova CABAC_ENTRY(40, -3, 69, -2, 69, -11, 89, 0, 0), 181*d968e50bSDetlev Casanova CABAC_ENTRY(41, -6, 81, -5, 82, -15, 103, 0, 0), 182*d968e50bSDetlev Casanova CABAC_ENTRY(42, -11, 96, -10, 96, -21, 116, 0, 0), 183*d968e50bSDetlev Casanova CABAC_ENTRY(43, 6, 55, 2, 59, 19, 57, 0, 0), 184*d968e50bSDetlev Casanova CABAC_ENTRY(44, 7, 67, 2, 75, 20, 58, 0, 0), 185*d968e50bSDetlev Casanova CABAC_ENTRY(45, -5, 86, -3, 87, 4, 84, 0, 0), 186*d968e50bSDetlev Casanova CABAC_ENTRY(46, 2, 88, -3, 100, 6, 96, 0, 0), 187*d968e50bSDetlev Casanova CABAC_ENTRY(47, 0, 58, 1, 56, 1, 63, 0, 0), 188*d968e50bSDetlev Casanova CABAC_ENTRY(48, -3, 76, -3, 74, -5, 85, 0, 0), 189*d968e50bSDetlev Casanova CABAC_ENTRY(49, -10, 94, -6, 85, -13, 106, 0, 0), 190*d968e50bSDetlev Casanova CABAC_ENTRY(50, 5, 54, 0, 59, 5, 63, 0, 0), 191*d968e50bSDetlev Casanova CABAC_ENTRY(51, 4, 69, -3, 81, 6, 75, 0, 0), 192*d968e50bSDetlev Casanova CABAC_ENTRY(52, -3, 81, -7, 86, -3, 90, 0, 0), 193*d968e50bSDetlev Casanova CABAC_ENTRY(53, 0, 88, -5, 95, -1, 101, 0, 0), 194*d968e50bSDetlev Casanova 195*d968e50bSDetlev Casanova /* Table 9-16 – Values of variables m and n for ctxIdx from 54 to 59 */ 196*d968e50bSDetlev Casanova CABAC_ENTRY(54, -7, 67, -1, 66, 3, 55, 0, 0), 197*d968e50bSDetlev Casanova CABAC_ENTRY(55, -5, 74, -1, 77, -4, 79, 0, 0), 198*d968e50bSDetlev Casanova CABAC_ENTRY(56, -4, 74, 1, 70, -2, 75, 0, 0), 199*d968e50bSDetlev Casanova CABAC_ENTRY(57, -5, 80, -2, 86, -12, 97, 0, 0), 200*d968e50bSDetlev Casanova CABAC_ENTRY(58, -7, 72, -5, 72, -7, 50, 0, 0), 201*d968e50bSDetlev Casanova CABAC_ENTRY(59, 1, 58, 0, 61, 1, 60, 0, 0), 202*d968e50bSDetlev Casanova 203*d968e50bSDetlev Casanova /* Table 9-17 – Values of variables m and n for ctxIdx from 60 to 69 */ 204*d968e50bSDetlev Casanova CABAC_ENTRY(60, 0, 41, 0, 41, 0, 41, 0, 41), 205*d968e50bSDetlev Casanova CABAC_ENTRY(61, 0, 63, 0, 63, 0, 63, 0, 63), 206*d968e50bSDetlev Casanova CABAC_ENTRY(62, 0, 63, 0, 63, 0, 63, 0, 63), 207*d968e50bSDetlev Casanova CABAC_ENTRY(63, 0, 63, 0, 63, 0, 63, 0, 63), 208*d968e50bSDetlev Casanova CABAC_ENTRY(64, -9, 83, -9, 83, -9, 83, -9, 83), 209*d968e50bSDetlev Casanova CABAC_ENTRY(65, 4, 86, 4, 86, 4, 86, 4, 86), 210*d968e50bSDetlev Casanova CABAC_ENTRY(66, 0, 97, 0, 97, 0, 97, 0, 97), 211*d968e50bSDetlev Casanova CABAC_ENTRY(67, -7, 72, -7, 72, -7, 72, -7, 72), 212*d968e50bSDetlev Casanova CABAC_ENTRY(68, 13, 41, 13, 41, 13, 41, 13, 41), 213*d968e50bSDetlev Casanova CABAC_ENTRY(69, 3, 62, 3, 62, 3, 62, 3, 62), 214*d968e50bSDetlev Casanova 215*d968e50bSDetlev Casanova /* Table 9-18 – Values of variables m and n for ctxIdx from 70 to 104 */ 216*d968e50bSDetlev Casanova CABAC_ENTRY(70, 0, 45, 13, 15, 7, 34, 0, 11), 217*d968e50bSDetlev Casanova CABAC_ENTRY(71, -4, 78, 7, 51, -9, 88, 1, 55), 218*d968e50bSDetlev Casanova CABAC_ENTRY(72, -3, 96, 2, 80, -20, 127, 0, 69), 219*d968e50bSDetlev Casanova CABAC_ENTRY(73, -27, 126, -39, 127, -36, 127, -17, 127), 220*d968e50bSDetlev Casanova CABAC_ENTRY(74, -28, 98, -18, 91, -17, 91, -13, 102), 221*d968e50bSDetlev Casanova CABAC_ENTRY(75, -25, 101, -17, 96, -14, 95, 0, 82), 222*d968e50bSDetlev Casanova CABAC_ENTRY(76, -23, 67, -26, 81, -25, 84, -7, 74), 223*d968e50bSDetlev Casanova CABAC_ENTRY(77, -28, 82, -35, 98, -25, 86, -21, 107), 224*d968e50bSDetlev Casanova CABAC_ENTRY(78, -20, 94, -24, 102, -12, 89, -27, 127), 225*d968e50bSDetlev Casanova CABAC_ENTRY(79, -16, 83, -23, 97, -17, 91, -31, 127), 226*d968e50bSDetlev Casanova CABAC_ENTRY(80, -22, 110, -27, 119, -31, 127, -24, 127), 227*d968e50bSDetlev Casanova CABAC_ENTRY(81, -21, 91, -24, 99, -14, 76, -18, 95), 228*d968e50bSDetlev Casanova CABAC_ENTRY(82, -18, 102, -21, 110, -18, 103, -27, 127), 229*d968e50bSDetlev Casanova CABAC_ENTRY(83, -13, 93, -18, 102, -13, 90, -21, 114), 230*d968e50bSDetlev Casanova CABAC_ENTRY(84, -29, 127, -36, 127, -37, 127, -30, 127), 231*d968e50bSDetlev Casanova CABAC_ENTRY(85, -7, 92, 0, 80, 11, 80, -17, 123), 232*d968e50bSDetlev Casanova CABAC_ENTRY(86, -5, 89, -5, 89, 5, 76, -12, 115), 233*d968e50bSDetlev Casanova CABAC_ENTRY(87, -7, 96, -7, 94, 2, 84, -16, 122), 234*d968e50bSDetlev Casanova CABAC_ENTRY(88, -13, 108, -4, 92, 5, 78, -11, 115), 235*d968e50bSDetlev Casanova CABAC_ENTRY(89, -3, 46, 0, 39, -6, 55, -12, 63), 236*d968e50bSDetlev Casanova CABAC_ENTRY(90, -1, 65, 0, 65, 4, 61, -2, 68), 237*d968e50bSDetlev Casanova CABAC_ENTRY(91, -1, 57, -15, 84, -14, 83, -15, 84), 238*d968e50bSDetlev Casanova CABAC_ENTRY(92, -9, 93, -35, 127, -37, 127, -13, 104), 239*d968e50bSDetlev Casanova CABAC_ENTRY(93, -3, 74, -2, 73, -5, 79, -3, 70), 240*d968e50bSDetlev Casanova CABAC_ENTRY(94, -9, 92, -12, 104, -11, 104, -8, 93), 241*d968e50bSDetlev Casanova CABAC_ENTRY(95, -8, 87, -9, 91, -11, 91, -10, 90), 242*d968e50bSDetlev Casanova CABAC_ENTRY(96, -23, 126, -31, 127, -30, 127, -30, 127), 243*d968e50bSDetlev Casanova CABAC_ENTRY(97, 5, 54, 3, 55, 0, 65, -1, 74), 244*d968e50bSDetlev Casanova CABAC_ENTRY(98, 6, 60, 7, 56, -2, 79, -6, 97), 245*d968e50bSDetlev Casanova CABAC_ENTRY(99, 6, 59, 7, 55, 0, 72, -7, 91), 246*d968e50bSDetlev Casanova CABAC_ENTRY(100, 6, 69, 8, 61, -4, 92, -20, 127), 247*d968e50bSDetlev Casanova CABAC_ENTRY(101, -1, 48, -3, 53, -6, 56, -4, 56), 248*d968e50bSDetlev Casanova CABAC_ENTRY(102, 0, 68, 0, 68, 3, 68, -5, 82), 249*d968e50bSDetlev Casanova CABAC_ENTRY(103, -4, 69, -7, 74, -8, 71, -7, 76), 250*d968e50bSDetlev Casanova CABAC_ENTRY(104, -8, 88, -9, 88, -13, 98, -22, 125), 251*d968e50bSDetlev Casanova 252*d968e50bSDetlev Casanova /* Table 9-19 – Values of variables m and n for ctxIdx from 105 to 165 */ 253*d968e50bSDetlev Casanova CABAC_ENTRY(105, -2, 85, -13, 103, -4, 86, -7, 93), 254*d968e50bSDetlev Casanova CABAC_ENTRY(106, -6, 78, -13, 91, -12, 88, -11, 87), 255*d968e50bSDetlev Casanova CABAC_ENTRY(107, -1, 75, -9, 89, -5, 82, -3, 77), 256*d968e50bSDetlev Casanova CABAC_ENTRY(108, -7, 77, -14, 92, -3, 72, -5, 71), 257*d968e50bSDetlev Casanova CABAC_ENTRY(109, 2, 54, -8, 76, -4, 67, -4, 63), 258*d968e50bSDetlev Casanova CABAC_ENTRY(110, 5, 50, -12, 87, -8, 72, -4, 68), 259*d968e50bSDetlev Casanova CABAC_ENTRY(111, -3, 68, -23, 110, -16, 89, -12, 84), 260*d968e50bSDetlev Casanova CABAC_ENTRY(112, 1, 50, -24, 105, -9, 69, -7, 62), 261*d968e50bSDetlev Casanova CABAC_ENTRY(113, 6, 42, -10, 78, -1, 59, -7, 65), 262*d968e50bSDetlev Casanova CABAC_ENTRY(114, -4, 81, -20, 112, 5, 66, 8, 61), 263*d968e50bSDetlev Casanova CABAC_ENTRY(115, 1, 63, -17, 99, 4, 57, 5, 56), 264*d968e50bSDetlev Casanova CABAC_ENTRY(116, -4, 70, -78, 127, -4, 71, -2, 66), 265*d968e50bSDetlev Casanova CABAC_ENTRY(117, 0, 67, -70, 127, -2, 71, 1, 64), 266*d968e50bSDetlev Casanova CABAC_ENTRY(118, 2, 57, -50, 127, 2, 58, 0, 61), 267*d968e50bSDetlev Casanova CABAC_ENTRY(119, -2, 76, -46, 127, -1, 74, -2, 78), 268*d968e50bSDetlev Casanova CABAC_ENTRY(120, 11, 35, -4, 66, -4, 44, 1, 50), 269*d968e50bSDetlev Casanova CABAC_ENTRY(121, 4, 64, -5, 78, -1, 69, 7, 52), 270*d968e50bSDetlev Casanova CABAC_ENTRY(122, 1, 61, -4, 71, 0, 62, 10, 35), 271*d968e50bSDetlev Casanova CABAC_ENTRY(123, 11, 35, -8, 72, -7, 51, 0, 44), 272*d968e50bSDetlev Casanova CABAC_ENTRY(124, 18, 25, 2, 59, -4, 47, 11, 38), 273*d968e50bSDetlev Casanova CABAC_ENTRY(125, 12, 24, -1, 55, -6, 42, 1, 45), 274*d968e50bSDetlev Casanova CABAC_ENTRY(126, 13, 29, -7, 70, -3, 41, 0, 46), 275*d968e50bSDetlev Casanova CABAC_ENTRY(127, 13, 36, -6, 75, -6, 53, 5, 44), 276*d968e50bSDetlev Casanova CABAC_ENTRY(128, -10, 93, -8, 89, 8, 76, 31, 17), 277*d968e50bSDetlev Casanova CABAC_ENTRY(129, -7, 73, -34, 119, -9, 78, 1, 51), 278*d968e50bSDetlev Casanova CABAC_ENTRY(130, -2, 73, -3, 75, -11, 83, 7, 50), 279*d968e50bSDetlev Casanova CABAC_ENTRY(131, 13, 46, 32, 20, 9, 52, 28, 19), 280*d968e50bSDetlev Casanova CABAC_ENTRY(132, 9, 49, 30, 22, 0, 67, 16, 33), 281*d968e50bSDetlev Casanova CABAC_ENTRY(133, -7, 100, -44, 127, -5, 90, 14, 62), 282*d968e50bSDetlev Casanova CABAC_ENTRY(134, 9, 53, 0, 54, 1, 67, -13, 108), 283*d968e50bSDetlev Casanova CABAC_ENTRY(135, 2, 53, -5, 61, -15, 72, -15, 100), 284*d968e50bSDetlev Casanova CABAC_ENTRY(136, 5, 53, 0, 58, -5, 75, -13, 101), 285*d968e50bSDetlev Casanova CABAC_ENTRY(137, -2, 61, -1, 60, -8, 80, -13, 91), 286*d968e50bSDetlev Casanova CABAC_ENTRY(138, 0, 56, -3, 61, -21, 83, -12, 94), 287*d968e50bSDetlev Casanova CABAC_ENTRY(139, 0, 56, -8, 67, -21, 64, -10, 88), 288*d968e50bSDetlev Casanova CABAC_ENTRY(140, -13, 63, -25, 84, -13, 31, -16, 84), 289*d968e50bSDetlev Casanova CABAC_ENTRY(141, -5, 60, -14, 74, -25, 64, -10, 86), 290*d968e50bSDetlev Casanova CABAC_ENTRY(142, -1, 62, -5, 65, -29, 94, -7, 83), 291*d968e50bSDetlev Casanova CABAC_ENTRY(143, 4, 57, 5, 52, 9, 75, -13, 87), 292*d968e50bSDetlev Casanova CABAC_ENTRY(144, -6, 69, 2, 57, 17, 63, -19, 94), 293*d968e50bSDetlev Casanova CABAC_ENTRY(145, 4, 57, 0, 61, -8, 74, 1, 70), 294*d968e50bSDetlev Casanova CABAC_ENTRY(146, 14, 39, -9, 69, -5, 35, 0, 72), 295*d968e50bSDetlev Casanova CABAC_ENTRY(147, 4, 51, -11, 70, -2, 27, -5, 74), 296*d968e50bSDetlev Casanova CABAC_ENTRY(148, 13, 68, 18, 55, 13, 91, 18, 59), 297*d968e50bSDetlev Casanova CABAC_ENTRY(149, 3, 64, -4, 71, 3, 65, -8, 102), 298*d968e50bSDetlev Casanova CABAC_ENTRY(150, 1, 61, 0, 58, -7, 69, -15, 100), 299*d968e50bSDetlev Casanova CABAC_ENTRY(151, 9, 63, 7, 61, 8, 77, 0, 95), 300*d968e50bSDetlev Casanova CABAC_ENTRY(152, 7, 50, 9, 41, -10, 66, -4, 75), 301*d968e50bSDetlev Casanova CABAC_ENTRY(153, 16, 39, 18, 25, 3, 62, 2, 72), 302*d968e50bSDetlev Casanova CABAC_ENTRY(154, 5, 44, 9, 32, -3, 68, -11, 75), 303*d968e50bSDetlev Casanova CABAC_ENTRY(155, 4, 52, 5, 43, -20, 81, -3, 71), 304*d968e50bSDetlev Casanova CABAC_ENTRY(156, 11, 48, 9, 47, 0, 30, 15, 46), 305*d968e50bSDetlev Casanova CABAC_ENTRY(157, -5, 60, 0, 44, 1, 7, -13, 69), 306*d968e50bSDetlev Casanova CABAC_ENTRY(158, -1, 59, 0, 51, -3, 23, 0, 62), 307*d968e50bSDetlev Casanova CABAC_ENTRY(159, 0, 59, 2, 46, -21, 74, 0, 65), 308*d968e50bSDetlev Casanova CABAC_ENTRY(160, 22, 33, 19, 38, 16, 66, 21, 37), 309*d968e50bSDetlev Casanova CABAC_ENTRY(161, 5, 44, -4, 66, -23, 124, -15, 72), 310*d968e50bSDetlev Casanova CABAC_ENTRY(162, 14, 43, 15, 38, 17, 37, 9, 57), 311*d968e50bSDetlev Casanova CABAC_ENTRY(163, -1, 78, 12, 42, 44, -18, 16, 54), 312*d968e50bSDetlev Casanova CABAC_ENTRY(164, 0, 60, 9, 34, 50, -34, 0, 62), 313*d968e50bSDetlev Casanova CABAC_ENTRY(165, 9, 69, 0, 89, -22, 127, 12, 72), 314*d968e50bSDetlev Casanova 315*d968e50bSDetlev Casanova /* Table 9-20 – Values of variables m and n for ctxIdx from 166 to 226 */ 316*d968e50bSDetlev Casanova CABAC_ENTRY(166, 11, 28, 4, 45, 4, 39, 24, 0), 317*d968e50bSDetlev Casanova CABAC_ENTRY(167, 2, 40, 10, 28, 0, 42, 15, 9), 318*d968e50bSDetlev Casanova CABAC_ENTRY(168, 3, 44, 10, 31, 7, 34, 8, 25), 319*d968e50bSDetlev Casanova CABAC_ENTRY(169, 0, 49, 33, -11, 11, 29, 13, 18), 320*d968e50bSDetlev Casanova CABAC_ENTRY(170, 0, 46, 52, -43, 8, 31, 15, 9), 321*d968e50bSDetlev Casanova CABAC_ENTRY(171, 2, 44, 18, 15, 6, 37, 13, 19), 322*d968e50bSDetlev Casanova CABAC_ENTRY(172, 2, 51, 28, 0, 7, 42, 10, 37), 323*d968e50bSDetlev Casanova CABAC_ENTRY(173, 0, 47, 35, -22, 3, 40, 12, 18), 324*d968e50bSDetlev Casanova CABAC_ENTRY(174, 4, 39, 38, -25, 8, 33, 6, 29), 325*d968e50bSDetlev Casanova CABAC_ENTRY(175, 2, 62, 34, 0, 13, 43, 20, 33), 326*d968e50bSDetlev Casanova CABAC_ENTRY(176, 6, 46, 39, -18, 13, 36, 15, 30), 327*d968e50bSDetlev Casanova CABAC_ENTRY(177, 0, 54, 32, -12, 4, 47, 4, 45), 328*d968e50bSDetlev Casanova CABAC_ENTRY(178, 3, 54, 102, -94, 3, 55, 1, 58), 329*d968e50bSDetlev Casanova CABAC_ENTRY(179, 2, 58, 0, 0, 2, 58, 0, 62), 330*d968e50bSDetlev Casanova CABAC_ENTRY(180, 4, 63, 56, -15, 6, 60, 7, 61), 331*d968e50bSDetlev Casanova CABAC_ENTRY(181, 6, 51, 33, -4, 8, 44, 12, 38), 332*d968e50bSDetlev Casanova CABAC_ENTRY(182, 6, 57, 29, 10, 11, 44, 11, 45), 333*d968e50bSDetlev Casanova CABAC_ENTRY(183, 7, 53, 37, -5, 14, 42, 15, 39), 334*d968e50bSDetlev Casanova CABAC_ENTRY(184, 6, 52, 51, -29, 7, 48, 11, 42), 335*d968e50bSDetlev Casanova CABAC_ENTRY(185, 6, 55, 39, -9, 4, 56, 13, 44), 336*d968e50bSDetlev Casanova CABAC_ENTRY(186, 11, 45, 52, -34, 4, 52, 16, 45), 337*d968e50bSDetlev Casanova CABAC_ENTRY(187, 14, 36, 69, -58, 13, 37, 12, 41), 338*d968e50bSDetlev Casanova CABAC_ENTRY(188, 8, 53, 67, -63, 9, 49, 10, 49), 339*d968e50bSDetlev Casanova CABAC_ENTRY(189, -1, 82, 44, -5, 19, 58, 30, 34), 340*d968e50bSDetlev Casanova CABAC_ENTRY(190, 7, 55, 32, 7, 10, 48, 18, 42), 341*d968e50bSDetlev Casanova CABAC_ENTRY(191, -3, 78, 55, -29, 12, 45, 10, 55), 342*d968e50bSDetlev Casanova CABAC_ENTRY(192, 15, 46, 32, 1, 0, 69, 17, 51), 343*d968e50bSDetlev Casanova CABAC_ENTRY(193, 22, 31, 0, 0, 20, 33, 17, 46), 344*d968e50bSDetlev Casanova CABAC_ENTRY(194, -1, 84, 27, 36, 8, 63, 0, 89), 345*d968e50bSDetlev Casanova CABAC_ENTRY(195, 25, 7, 33, -25, 35, -18, 26, -19), 346*d968e50bSDetlev Casanova CABAC_ENTRY(196, 30, -7, 34, -30, 33, -25, 22, -17), 347*d968e50bSDetlev Casanova CABAC_ENTRY(197, 28, 3, 36, -28, 28, -3, 26, -17), 348*d968e50bSDetlev Casanova CABAC_ENTRY(198, 28, 4, 38, -28, 24, 10, 30, -25), 349*d968e50bSDetlev Casanova CABAC_ENTRY(199, 32, 0, 38, -27, 27, 0, 28, -20), 350*d968e50bSDetlev Casanova CABAC_ENTRY(200, 34, -1, 34, -18, 34, -14, 33, -23), 351*d968e50bSDetlev Casanova CABAC_ENTRY(201, 30, 6, 35, -16, 52, -44, 37, -27), 352*d968e50bSDetlev Casanova CABAC_ENTRY(202, 30, 6, 34, -14, 39, -24, 33, -23), 353*d968e50bSDetlev Casanova CABAC_ENTRY(203, 32, 9, 32, -8, 19, 17, 40, -28), 354*d968e50bSDetlev Casanova CABAC_ENTRY(204, 31, 19, 37, -6, 31, 25, 38, -17), 355*d968e50bSDetlev Casanova CABAC_ENTRY(205, 26, 27, 35, 0, 36, 29, 33, -11), 356*d968e50bSDetlev Casanova CABAC_ENTRY(206, 26, 30, 30, 10, 24, 33, 40, -15), 357*d968e50bSDetlev Casanova CABAC_ENTRY(207, 37, 20, 28, 18, 34, 15, 41, -6), 358*d968e50bSDetlev Casanova CABAC_ENTRY(208, 28, 34, 26, 25, 30, 20, 38, 1), 359*d968e50bSDetlev Casanova CABAC_ENTRY(209, 17, 70, 29, 41, 22, 73, 41, 17), 360*d968e50bSDetlev Casanova CABAC_ENTRY(210, 1, 67, 0, 75, 20, 34, 30, -6), 361*d968e50bSDetlev Casanova CABAC_ENTRY(211, 5, 59, 2, 72, 19, 31, 27, 3), 362*d968e50bSDetlev Casanova CABAC_ENTRY(212, 9, 67, 8, 77, 27, 44, 26, 22), 363*d968e50bSDetlev Casanova CABAC_ENTRY(213, 16, 30, 14, 35, 19, 16, 37, -16), 364*d968e50bSDetlev Casanova CABAC_ENTRY(214, 18, 32, 18, 31, 15, 36, 35, -4), 365*d968e50bSDetlev Casanova CABAC_ENTRY(215, 18, 35, 17, 35, 15, 36, 38, -8), 366*d968e50bSDetlev Casanova CABAC_ENTRY(216, 22, 29, 21, 30, 21, 28, 38, -3), 367*d968e50bSDetlev Casanova CABAC_ENTRY(217, 24, 31, 17, 45, 25, 21, 37, 3), 368*d968e50bSDetlev Casanova CABAC_ENTRY(218, 23, 38, 20, 42, 30, 20, 38, 5), 369*d968e50bSDetlev Casanova CABAC_ENTRY(219, 18, 43, 18, 45, 31, 12, 42, 0), 370*d968e50bSDetlev Casanova CABAC_ENTRY(220, 20, 41, 27, 26, 27, 16, 35, 16), 371*d968e50bSDetlev Casanova CABAC_ENTRY(221, 11, 63, 16, 54, 24, 42, 39, 22), 372*d968e50bSDetlev Casanova CABAC_ENTRY(222, 9, 59, 7, 66, 0, 93, 14, 48), 373*d968e50bSDetlev Casanova CABAC_ENTRY(223, 9, 64, 16, 56, 14, 56, 27, 37), 374*d968e50bSDetlev Casanova CABAC_ENTRY(224, -1, 94, 11, 73, 15, 57, 21, 60), 375*d968e50bSDetlev Casanova CABAC_ENTRY(225, -2, 89, 10, 67, 26, 38, 12, 68), 376*d968e50bSDetlev Casanova CABAC_ENTRY(226, -9, 108, -10, 116, -24, 127, 2, 97), 377*d968e50bSDetlev Casanova 378*d968e50bSDetlev Casanova /* Table 9-21 – Values of variables m and n for ctxIdx from 227 to 275 */ 379*d968e50bSDetlev Casanova CABAC_ENTRY(227, -6, 76, -23, 112, -24, 115, -3, 71), 380*d968e50bSDetlev Casanova CABAC_ENTRY(228, -2, 44, -15, 71, -22, 82, -6, 42), 381*d968e50bSDetlev Casanova CABAC_ENTRY(229, 0, 45, -7, 61, -9, 62, -5, 50), 382*d968e50bSDetlev Casanova CABAC_ENTRY(230, 0, 52, 0, 53, 0, 53, -3, 54), 383*d968e50bSDetlev Casanova CABAC_ENTRY(231, -3, 64, -5, 66, 0, 59, -2, 62), 384*d968e50bSDetlev Casanova CABAC_ENTRY(232, -2, 59, -11, 77, -14, 85, 0, 58), 385*d968e50bSDetlev Casanova CABAC_ENTRY(233, -4, 70, -9, 80, -13, 89, 1, 63), 386*d968e50bSDetlev Casanova CABAC_ENTRY(234, -4, 75, -9, 84, -13, 94, -2, 72), 387*d968e50bSDetlev Casanova CABAC_ENTRY(235, -8, 82, -10, 87, -11, 92, -1, 74), 388*d968e50bSDetlev Casanova CABAC_ENTRY(236, -17, 102, -34, 127, -29, 127, -9, 91), 389*d968e50bSDetlev Casanova CABAC_ENTRY(237, -9, 77, -21, 101, -21, 100, -5, 67), 390*d968e50bSDetlev Casanova CABAC_ENTRY(238, 3, 24, -3, 39, -14, 57, -5, 27), 391*d968e50bSDetlev Casanova CABAC_ENTRY(239, 0, 42, -5, 53, -12, 67, -3, 39), 392*d968e50bSDetlev Casanova CABAC_ENTRY(240, 0, 48, -7, 61, -11, 71, -2, 44), 393*d968e50bSDetlev Casanova CABAC_ENTRY(241, 0, 55, -11, 75, -10, 77, 0, 46), 394*d968e50bSDetlev Casanova CABAC_ENTRY(242, -6, 59, -15, 77, -21, 85, -16, 64), 395*d968e50bSDetlev Casanova CABAC_ENTRY(243, -7, 71, -17, 91, -16, 88, -8, 68), 396*d968e50bSDetlev Casanova CABAC_ENTRY(244, -12, 83, -25, 107, -23, 104, -10, 78), 397*d968e50bSDetlev Casanova CABAC_ENTRY(245, -11, 87, -25, 111, -15, 98, -6, 77), 398*d968e50bSDetlev Casanova CABAC_ENTRY(246, -30, 119, -28, 122, -37, 127, -10, 86), 399*d968e50bSDetlev Casanova CABAC_ENTRY(247, 1, 58, -11, 76, -10, 82, -12, 92), 400*d968e50bSDetlev Casanova CABAC_ENTRY(248, -3, 29, -10, 44, -8, 48, -15, 55), 401*d968e50bSDetlev Casanova CABAC_ENTRY(249, -1, 36, -10, 52, -8, 61, -10, 60), 402*d968e50bSDetlev Casanova CABAC_ENTRY(250, 1, 38, -10, 57, -8, 66, -6, 62), 403*d968e50bSDetlev Casanova CABAC_ENTRY(251, 2, 43, -9, 58, -7, 70, -4, 65), 404*d968e50bSDetlev Casanova CABAC_ENTRY(252, -6, 55, -16, 72, -14, 75, -12, 73), 405*d968e50bSDetlev Casanova CABAC_ENTRY(253, 0, 58, -7, 69, -10, 79, -8, 76), 406*d968e50bSDetlev Casanova CABAC_ENTRY(254, 0, 64, -4, 69, -9, 83, -7, 80), 407*d968e50bSDetlev Casanova CABAC_ENTRY(255, -3, 74, -5, 74, -12, 92, -9, 88), 408*d968e50bSDetlev Casanova CABAC_ENTRY(256, -10, 90, -9, 86, -18, 108, -17, 110), 409*d968e50bSDetlev Casanova CABAC_ENTRY(257, 0, 70, 2, 66, -4, 79, -11, 97), 410*d968e50bSDetlev Casanova CABAC_ENTRY(258, -4, 29, -9, 34, -22, 69, -20, 84), 411*d968e50bSDetlev Casanova CABAC_ENTRY(259, 5, 31, 1, 32, -16, 75, -11, 79), 412*d968e50bSDetlev Casanova CABAC_ENTRY(260, 7, 42, 11, 31, -2, 58, -6, 73), 413*d968e50bSDetlev Casanova CABAC_ENTRY(261, 1, 59, 5, 52, 1, 58, -4, 74), 414*d968e50bSDetlev Casanova CABAC_ENTRY(262, -2, 58, -2, 55, -13, 78, -13, 86), 415*d968e50bSDetlev Casanova CABAC_ENTRY(263, -3, 72, -2, 67, -9, 83, -13, 96), 416*d968e50bSDetlev Casanova CABAC_ENTRY(264, -3, 81, 0, 73, -4, 81, -11, 97), 417*d968e50bSDetlev Casanova CABAC_ENTRY(265, -11, 97, -8, 89, -13, 99, -19, 117), 418*d968e50bSDetlev Casanova CABAC_ENTRY(266, 0, 58, 3, 52, -13, 81, -8, 78), 419*d968e50bSDetlev Casanova CABAC_ENTRY(267, 8, 5, 7, 4, -6, 38, -5, 33), 420*d968e50bSDetlev Casanova CABAC_ENTRY(268, 10, 14, 10, 8, -13, 62, -4, 48), 421*d968e50bSDetlev Casanova CABAC_ENTRY(269, 14, 18, 17, 8, -6, 58, -2, 53), 422*d968e50bSDetlev Casanova CABAC_ENTRY(270, 13, 27, 16, 19, -2, 59, -3, 62), 423*d968e50bSDetlev Casanova CABAC_ENTRY(271, 2, 40, 3, 37, -16, 73, -13, 71), 424*d968e50bSDetlev Casanova CABAC_ENTRY(272, 0, 58, -1, 61, -10, 76, -10, 79), 425*d968e50bSDetlev Casanova CABAC_ENTRY(273, -3, 70, -5, 73, -13, 86, -12, 86), 426*d968e50bSDetlev Casanova CABAC_ENTRY(274, -6, 79, -1, 70, -9, 83, -13, 90), 427*d968e50bSDetlev Casanova CABAC_ENTRY(275, -8, 85, -4, 78, -10, 87, -14, 97), 428*d968e50bSDetlev Casanova 429*d968e50bSDetlev Casanova /* Table 9-22 – Values of variables m and n for ctxIdx from 277 to 337 */ 430*d968e50bSDetlev Casanova CABAC_ENTRY(277, -13, 106, -21, 126, -22, 127, -6, 93), 431*d968e50bSDetlev Casanova CABAC_ENTRY(278, -16, 106, -23, 124, -25, 127, -6, 84), 432*d968e50bSDetlev Casanova CABAC_ENTRY(279, -10, 87, -20, 110, -25, 120, -8, 79), 433*d968e50bSDetlev Casanova CABAC_ENTRY(280, -21, 114, -26, 126, -27, 127, 0, 66), 434*d968e50bSDetlev Casanova CABAC_ENTRY(281, -18, 110, -25, 124, -19, 114, -1, 71), 435*d968e50bSDetlev Casanova CABAC_ENTRY(282, -14, 98, -17, 105, -23, 117, 0, 62), 436*d968e50bSDetlev Casanova CABAC_ENTRY(283, -22, 110, -27, 121, -25, 118, -2, 60), 437*d968e50bSDetlev Casanova CABAC_ENTRY(284, -21, 106, -27, 117, -26, 117, -2, 59), 438*d968e50bSDetlev Casanova CABAC_ENTRY(285, -18, 103, -17, 102, -24, 113, -5, 75), 439*d968e50bSDetlev Casanova CABAC_ENTRY(286, -21, 107, -26, 117, -28, 118, -3, 62), 440*d968e50bSDetlev Casanova CABAC_ENTRY(287, -23, 108, -27, 116, -31, 120, -4, 58), 441*d968e50bSDetlev Casanova CABAC_ENTRY(288, -26, 112, -33, 122, -37, 124, -9, 66), 442*d968e50bSDetlev Casanova CABAC_ENTRY(289, -10, 96, -10, 95, -10, 94, -1, 79), 443*d968e50bSDetlev Casanova CABAC_ENTRY(290, -12, 95, -14, 100, -15, 102, 0, 71), 444*d968e50bSDetlev Casanova CABAC_ENTRY(291, -5, 91, -8, 95, -10, 99, 3, 68), 445*d968e50bSDetlev Casanova CABAC_ENTRY(292, -9, 93, -17, 111, -13, 106, 10, 44), 446*d968e50bSDetlev Casanova CABAC_ENTRY(293, -22, 94, -28, 114, -50, 127, -7, 62), 447*d968e50bSDetlev Casanova CABAC_ENTRY(294, -5, 86, -6, 89, -5, 92, 15, 36), 448*d968e50bSDetlev Casanova CABAC_ENTRY(295, 9, 67, -2, 80, 17, 57, 14, 40), 449*d968e50bSDetlev Casanova CABAC_ENTRY(296, -4, 80, -4, 82, -5, 86, 16, 27), 450*d968e50bSDetlev Casanova CABAC_ENTRY(297, -10, 85, -9, 85, -13, 94, 12, 29), 451*d968e50bSDetlev Casanova CABAC_ENTRY(298, -1, 70, -8, 81, -12, 91, 1, 44), 452*d968e50bSDetlev Casanova CABAC_ENTRY(299, 7, 60, -1, 72, -2, 77, 20, 36), 453*d968e50bSDetlev Casanova CABAC_ENTRY(300, 9, 58, 5, 64, 0, 71, 18, 32), 454*d968e50bSDetlev Casanova CABAC_ENTRY(301, 5, 61, 1, 67, -1, 73, 5, 42), 455*d968e50bSDetlev Casanova CABAC_ENTRY(302, 12, 50, 9, 56, 4, 64, 1, 48), 456*d968e50bSDetlev Casanova CABAC_ENTRY(303, 15, 50, 0, 69, -7, 81, 10, 62), 457*d968e50bSDetlev Casanova CABAC_ENTRY(304, 18, 49, 1, 69, 5, 64, 17, 46), 458*d968e50bSDetlev Casanova CABAC_ENTRY(305, 17, 54, 7, 69, 15, 57, 9, 64), 459*d968e50bSDetlev Casanova CABAC_ENTRY(306, 10, 41, -7, 69, 1, 67, -12, 104), 460*d968e50bSDetlev Casanova CABAC_ENTRY(307, 7, 46, -6, 67, 0, 68, -11, 97), 461*d968e50bSDetlev Casanova CABAC_ENTRY(308, -1, 51, -16, 77, -10, 67, -16, 96), 462*d968e50bSDetlev Casanova CABAC_ENTRY(309, 7, 49, -2, 64, 1, 68, -7, 88), 463*d968e50bSDetlev Casanova CABAC_ENTRY(310, 8, 52, 2, 61, 0, 77, -8, 85), 464*d968e50bSDetlev Casanova CABAC_ENTRY(311, 9, 41, -6, 67, 2, 64, -7, 85), 465*d968e50bSDetlev Casanova CABAC_ENTRY(312, 6, 47, -3, 64, 0, 68, -9, 85), 466*d968e50bSDetlev Casanova CABAC_ENTRY(313, 2, 55, 2, 57, -5, 78, -13, 88), 467*d968e50bSDetlev Casanova CABAC_ENTRY(314, 13, 41, -3, 65, 7, 55, 4, 66), 468*d968e50bSDetlev Casanova CABAC_ENTRY(315, 10, 44, -3, 66, 5, 59, -3, 77), 469*d968e50bSDetlev Casanova CABAC_ENTRY(316, 6, 50, 0, 62, 2, 65, -3, 76), 470*d968e50bSDetlev Casanova CABAC_ENTRY(317, 5, 53, 9, 51, 14, 54, -6, 76), 471*d968e50bSDetlev Casanova CABAC_ENTRY(318, 13, 49, -1, 66, 15, 44, 10, 58), 472*d968e50bSDetlev Casanova CABAC_ENTRY(319, 4, 63, -2, 71, 5, 60, -1, 76), 473*d968e50bSDetlev Casanova CABAC_ENTRY(320, 6, 64, -2, 75, 2, 70, -1, 83), 474*d968e50bSDetlev Casanova CABAC_ENTRY(321, -2, 69, -1, 70, -2, 76, -7, 99), 475*d968e50bSDetlev Casanova CABAC_ENTRY(322, -2, 59, -9, 72, -18, 86, -14, 95), 476*d968e50bSDetlev Casanova CABAC_ENTRY(323, 6, 70, 14, 60, 12, 70, 2, 95), 477*d968e50bSDetlev Casanova CABAC_ENTRY(324, 10, 44, 16, 37, 5, 64, 0, 76), 478*d968e50bSDetlev Casanova CABAC_ENTRY(325, 9, 31, 0, 47, -12, 70, -5, 74), 479*d968e50bSDetlev Casanova CABAC_ENTRY(326, 12, 43, 18, 35, 11, 55, 0, 70), 480*d968e50bSDetlev Casanova CABAC_ENTRY(327, 3, 53, 11, 37, 5, 56, -11, 75), 481*d968e50bSDetlev Casanova CABAC_ENTRY(328, 14, 34, 12, 41, 0, 69, 1, 68), 482*d968e50bSDetlev Casanova CABAC_ENTRY(329, 10, 38, 10, 41, 2, 65, 0, 65), 483*d968e50bSDetlev Casanova CABAC_ENTRY(330, -3, 52, 2, 48, -6, 74, -14, 73), 484*d968e50bSDetlev Casanova CABAC_ENTRY(331, 13, 40, 12, 41, 5, 54, 3, 62), 485*d968e50bSDetlev Casanova CABAC_ENTRY(332, 17, 32, 13, 41, 7, 54, 4, 62), 486*d968e50bSDetlev Casanova CABAC_ENTRY(333, 7, 44, 0, 59, -6, 76, -1, 68), 487*d968e50bSDetlev Casanova CABAC_ENTRY(334, 7, 38, 3, 50, -11, 82, -13, 75), 488*d968e50bSDetlev Casanova CABAC_ENTRY(335, 13, 50, 19, 40, -2, 77, 11, 55), 489*d968e50bSDetlev Casanova CABAC_ENTRY(336, 10, 57, 3, 66, -2, 77, 5, 64), 490*d968e50bSDetlev Casanova CABAC_ENTRY(337, 26, 43, 18, 50, 25, 42, 12, 70), 491*d968e50bSDetlev Casanova 492*d968e50bSDetlev Casanova /* Table 9-23 – Values of variables m and n for ctxIdx from 338 to 398 */ 493*d968e50bSDetlev Casanova CABAC_ENTRY(338, 14, 11, 19, -6, 17, -13, 15, 6), 494*d968e50bSDetlev Casanova CABAC_ENTRY(339, 11, 14, 18, -6, 16, -9, 6, 19), 495*d968e50bSDetlev Casanova CABAC_ENTRY(340, 9, 11, 14, 0, 17, -12, 7, 16), 496*d968e50bSDetlev Casanova CABAC_ENTRY(341, 18, 11, 26, -12, 27, -21, 12, 14), 497*d968e50bSDetlev Casanova CABAC_ENTRY(342, 21, 9, 31, -16, 37, -30, 18, 13), 498*d968e50bSDetlev Casanova CABAC_ENTRY(343, 23, -2, 33, -25, 41, -40, 13, 11), 499*d968e50bSDetlev Casanova CABAC_ENTRY(344, 32, -15, 33, -22, 42, -41, 13, 15), 500*d968e50bSDetlev Casanova CABAC_ENTRY(345, 32, -15, 37, -28, 48, -47, 15, 16), 501*d968e50bSDetlev Casanova CABAC_ENTRY(346, 34, -21, 39, -30, 39, -32, 12, 23), 502*d968e50bSDetlev Casanova CABAC_ENTRY(347, 39, -23, 42, -30, 46, -40, 13, 23), 503*d968e50bSDetlev Casanova CABAC_ENTRY(348, 42, -33, 47, -42, 52, -51, 15, 20), 504*d968e50bSDetlev Casanova CABAC_ENTRY(349, 41, -31, 45, -36, 46, -41, 14, 26), 505*d968e50bSDetlev Casanova CABAC_ENTRY(350, 46, -28, 49, -34, 52, -39, 14, 44), 506*d968e50bSDetlev Casanova CABAC_ENTRY(351, 38, -12, 41, -17, 43, -19, 17, 40), 507*d968e50bSDetlev Casanova CABAC_ENTRY(352, 21, 29, 32, 9, 32, 11, 17, 47), 508*d968e50bSDetlev Casanova CABAC_ENTRY(353, 45, -24, 69, -71, 61, -55, 24, 17), 509*d968e50bSDetlev Casanova CABAC_ENTRY(354, 53, -45, 63, -63, 56, -46, 21, 21), 510*d968e50bSDetlev Casanova CABAC_ENTRY(355, 48, -26, 66, -64, 62, -50, 25, 22), 511*d968e50bSDetlev Casanova CABAC_ENTRY(356, 65, -43, 77, -74, 81, -67, 31, 27), 512*d968e50bSDetlev Casanova CABAC_ENTRY(357, 43, -19, 54, -39, 45, -20, 22, 29), 513*d968e50bSDetlev Casanova CABAC_ENTRY(358, 39, -10, 52, -35, 35, -2, 19, 35), 514*d968e50bSDetlev Casanova CABAC_ENTRY(359, 30, 9, 41, -10, 28, 15, 14, 50), 515*d968e50bSDetlev Casanova CABAC_ENTRY(360, 18, 26, 36, 0, 34, 1, 10, 57), 516*d968e50bSDetlev Casanova CABAC_ENTRY(361, 20, 27, 40, -1, 39, 1, 7, 63), 517*d968e50bSDetlev Casanova CABAC_ENTRY(362, 0, 57, 30, 14, 30, 17, -2, 77), 518*d968e50bSDetlev Casanova CABAC_ENTRY(363, -14, 82, 28, 26, 20, 38, -4, 82), 519*d968e50bSDetlev Casanova CABAC_ENTRY(364, -5, 75, 23, 37, 18, 45, -3, 94), 520*d968e50bSDetlev Casanova CABAC_ENTRY(365, -19, 97, 12, 55, 15, 54, 9, 69), 521*d968e50bSDetlev Casanova CABAC_ENTRY(366, -35, 125, 11, 65, 0, 79, -12, 109), 522*d968e50bSDetlev Casanova CABAC_ENTRY(367, 27, 0, 37, -33, 36, -16, 36, -35), 523*d968e50bSDetlev Casanova CABAC_ENTRY(368, 28, 0, 39, -36, 37, -14, 36, -34), 524*d968e50bSDetlev Casanova CABAC_ENTRY(369, 31, -4, 40, -37, 37, -17, 32, -26), 525*d968e50bSDetlev Casanova CABAC_ENTRY(370, 27, 6, 38, -30, 32, 1, 37, -30), 526*d968e50bSDetlev Casanova CABAC_ENTRY(371, 34, 8, 46, -33, 34, 15, 44, -32), 527*d968e50bSDetlev Casanova CABAC_ENTRY(372, 30, 10, 42, -30, 29, 15, 34, -18), 528*d968e50bSDetlev Casanova CABAC_ENTRY(373, 24, 22, 40, -24, 24, 25, 34, -15), 529*d968e50bSDetlev Casanova CABAC_ENTRY(374, 33, 19, 49, -29, 34, 22, 40, -15), 530*d968e50bSDetlev Casanova CABAC_ENTRY(375, 22, 32, 38, -12, 31, 16, 33, -7), 531*d968e50bSDetlev Casanova CABAC_ENTRY(376, 26, 31, 40, -10, 35, 18, 35, -5), 532*d968e50bSDetlev Casanova CABAC_ENTRY(377, 21, 41, 38, -3, 31, 28, 33, 0), 533*d968e50bSDetlev Casanova CABAC_ENTRY(378, 26, 44, 46, -5, 33, 41, 38, 2), 534*d968e50bSDetlev Casanova CABAC_ENTRY(379, 23, 47, 31, 20, 36, 28, 33, 13), 535*d968e50bSDetlev Casanova CABAC_ENTRY(380, 16, 65, 29, 30, 27, 47, 23, 35), 536*d968e50bSDetlev Casanova CABAC_ENTRY(381, 14, 71, 25, 44, 21, 62, 13, 58), 537*d968e50bSDetlev Casanova CABAC_ENTRY(382, 8, 60, 12, 48, 18, 31, 29, -3), 538*d968e50bSDetlev Casanova CABAC_ENTRY(383, 6, 63, 11, 49, 19, 26, 26, 0), 539*d968e50bSDetlev Casanova CABAC_ENTRY(384, 17, 65, 26, 45, 36, 24, 22, 30), 540*d968e50bSDetlev Casanova CABAC_ENTRY(385, 21, 24, 22, 22, 24, 23, 31, -7), 541*d968e50bSDetlev Casanova CABAC_ENTRY(386, 23, 20, 23, 22, 27, 16, 35, -15), 542*d968e50bSDetlev Casanova CABAC_ENTRY(387, 26, 23, 27, 21, 24, 30, 34, -3), 543*d968e50bSDetlev Casanova CABAC_ENTRY(388, 27, 32, 33, 20, 31, 29, 34, 3), 544*d968e50bSDetlev Casanova CABAC_ENTRY(389, 28, 23, 26, 28, 22, 41, 36, -1), 545*d968e50bSDetlev Casanova CABAC_ENTRY(390, 28, 24, 30, 24, 22, 42, 34, 5), 546*d968e50bSDetlev Casanova CABAC_ENTRY(391, 23, 40, 27, 34, 16, 60, 32, 11), 547*d968e50bSDetlev Casanova CABAC_ENTRY(392, 24, 32, 18, 42, 15, 52, 35, 5), 548*d968e50bSDetlev Casanova CABAC_ENTRY(393, 28, 29, 25, 39, 14, 60, 34, 12), 549*d968e50bSDetlev Casanova CABAC_ENTRY(394, 23, 42, 18, 50, 3, 78, 39, 11), 550*d968e50bSDetlev Casanova CABAC_ENTRY(395, 19, 57, 12, 70, -16, 123, 30, 29), 551*d968e50bSDetlev Casanova CABAC_ENTRY(396, 22, 53, 21, 54, 21, 53, 34, 26), 552*d968e50bSDetlev Casanova CABAC_ENTRY(397, 22, 61, 14, 71, 22, 56, 29, 39), 553*d968e50bSDetlev Casanova CABAC_ENTRY(398, 11, 86, 11, 83, 25, 61, 19, 66), 554*d968e50bSDetlev Casanova 555*d968e50bSDetlev Casanova /* Values of variables m and n for ctxIdx from 399 to 463 (not documented) */ 556*d968e50bSDetlev Casanova CABAC_ENTRY(399, 12, 40, 25, 32, 21, 33, 31, 21), 557*d968e50bSDetlev Casanova CABAC_ENTRY(400, 11, 51, 21, 49, 19, 50, 31, 31), 558*d968e50bSDetlev Casanova CABAC_ENTRY(401, 14, 59, 21, 54, 17, 61, 25, 50), 559*d968e50bSDetlev Casanova CABAC_ENTRY(402, -4, 79, -5, 85, -3, 78, -17, 120), 560*d968e50bSDetlev Casanova CABAC_ENTRY(403, -7, 71, -6, 81, -8, 74, -20, 112), 561*d968e50bSDetlev Casanova CABAC_ENTRY(404, -5, 69, -10, 77, -9, 72, -18, 114), 562*d968e50bSDetlev Casanova CABAC_ENTRY(405, -9, 70, -7, 81, -10, 72, -11, 85), 563*d968e50bSDetlev Casanova CABAC_ENTRY(406, -8, 66, -17, 80, -18, 75, -15, 92), 564*d968e50bSDetlev Casanova CABAC_ENTRY(407, -10, 68, -18, 73, -12, 71, -14, 89), 565*d968e50bSDetlev Casanova CABAC_ENTRY(408, -19, 73, -4, 74, -11, 63, -26, 71), 566*d968e50bSDetlev Casanova CABAC_ENTRY(409, -12, 69, -10, 83, -5, 70, -15, 81), 567*d968e50bSDetlev Casanova CABAC_ENTRY(410, -16, 70, -9, 71, -17, 75, -14, 80), 568*d968e50bSDetlev Casanova CABAC_ENTRY(411, -15, 67, -9, 67, -14, 72, 0, 68), 569*d968e50bSDetlev Casanova CABAC_ENTRY(412, -20, 62, -1, 61, -16, 67, -14, 70), 570*d968e50bSDetlev Casanova CABAC_ENTRY(413, -19, 70, -8, 66, -8, 53, -24, 56), 571*d968e50bSDetlev Casanova CABAC_ENTRY(414, -16, 66, -14, 66, -14, 59, -23, 68), 572*d968e50bSDetlev Casanova CABAC_ENTRY(415, -22, 65, 0, 59, -9, 52, -24, 50), 573*d968e50bSDetlev Casanova CABAC_ENTRY(416, -20, 63, 2, 59, -11, 68, -11, 74), 574*d968e50bSDetlev Casanova CABAC_ENTRY(417, 9, -2, 17, -10, 9, -2, 23, -13), 575*d968e50bSDetlev Casanova CABAC_ENTRY(418, 26, -9, 32, -13, 30, -10, 26, -13), 576*d968e50bSDetlev Casanova CABAC_ENTRY(419, 33, -9, 42, -9, 31, -4, 40, -15), 577*d968e50bSDetlev Casanova CABAC_ENTRY(420, 39, -7, 49, -5, 33, -1, 49, -14), 578*d968e50bSDetlev Casanova CABAC_ENTRY(421, 41, -2, 53, 0, 33, 7, 44, 3), 579*d968e50bSDetlev Casanova CABAC_ENTRY(422, 45, 3, 64, 3, 31, 12, 45, 6), 580*d968e50bSDetlev Casanova CABAC_ENTRY(423, 49, 9, 68, 10, 37, 23, 44, 34), 581*d968e50bSDetlev Casanova CABAC_ENTRY(424, 45, 27, 66, 27, 31, 38, 33, 54), 582*d968e50bSDetlev Casanova CABAC_ENTRY(425, 36, 59, 47, 57, 20, 64, 19, 82), 583*d968e50bSDetlev Casanova CABAC_ENTRY(426, -6, 66, -5, 71, -9, 71, -3, 75), 584*d968e50bSDetlev Casanova CABAC_ENTRY(427, -7, 35, 0, 24, -7, 37, -1, 23), 585*d968e50bSDetlev Casanova CABAC_ENTRY(428, -7, 42, -1, 36, -8, 44, 1, 34), 586*d968e50bSDetlev Casanova CABAC_ENTRY(429, -8, 45, -2, 42, -11, 49, 1, 43), 587*d968e50bSDetlev Casanova CABAC_ENTRY(430, -5, 48, -2, 52, -10, 56, 0, 54), 588*d968e50bSDetlev Casanova CABAC_ENTRY(431, -12, 56, -9, 57, -12, 59, -2, 55), 589*d968e50bSDetlev Casanova CABAC_ENTRY(432, -6, 60, -6, 63, -8, 63, 0, 61), 590*d968e50bSDetlev Casanova CABAC_ENTRY(433, -5, 62, -4, 65, -9, 67, 1, 64), 591*d968e50bSDetlev Casanova CABAC_ENTRY(434, -8, 66, -4, 67, -6, 68, 0, 68), 592*d968e50bSDetlev Casanova CABAC_ENTRY(435, -8, 76, -7, 82, -10, 79, -9, 92), 593*d968e50bSDetlev Casanova CABAC_ENTRY(436, -5, 85, -3, 81, -3, 78, -14, 106), 594*d968e50bSDetlev Casanova CABAC_ENTRY(437, -6, 81, -3, 76, -8, 74, -13, 97), 595*d968e50bSDetlev Casanova CABAC_ENTRY(438, -10, 77, -7, 72, -9, 72, -15, 90), 596*d968e50bSDetlev Casanova CABAC_ENTRY(439, -7, 81, -6, 78, -10, 72, -12, 90), 597*d968e50bSDetlev Casanova CABAC_ENTRY(440, -17, 80, -12, 72, -18, 75, -18, 88), 598*d968e50bSDetlev Casanova CABAC_ENTRY(441, -18, 73, -14, 68, -12, 71, -10, 73), 599*d968e50bSDetlev Casanova CABAC_ENTRY(442, -4, 74, -3, 70, -11, 63, -9, 79), 600*d968e50bSDetlev Casanova CABAC_ENTRY(443, -10, 83, -6, 76, -5, 70, -14, 86), 601*d968e50bSDetlev Casanova CABAC_ENTRY(444, -9, 71, -5, 66, -17, 75, -10, 73), 602*d968e50bSDetlev Casanova CABAC_ENTRY(445, -9, 67, -5, 62, -14, 72, -10, 70), 603*d968e50bSDetlev Casanova CABAC_ENTRY(446, -1, 61, 0, 57, -16, 67, -10, 69), 604*d968e50bSDetlev Casanova CABAC_ENTRY(447, -8, 66, -4, 61, -8, 53, -5, 66), 605*d968e50bSDetlev Casanova CABAC_ENTRY(448, -14, 66, -9, 60, -14, 59, -9, 64), 606*d968e50bSDetlev Casanova CABAC_ENTRY(449, 0, 59, 1, 54, -9, 52, -5, 58), 607*d968e50bSDetlev Casanova CABAC_ENTRY(450, 2, 59, 2, 58, -11, 68, 2, 59), 608*d968e50bSDetlev Casanova CABAC_ENTRY(451, 21, -13, 17, -10, 9, -2, 21, -10), 609*d968e50bSDetlev Casanova CABAC_ENTRY(452, 33, -14, 32, -13, 30, -10, 24, -11), 610*d968e50bSDetlev Casanova CABAC_ENTRY(453, 39, -7, 42, -9, 31, -4, 28, -8), 611*d968e50bSDetlev Casanova CABAC_ENTRY(454, 46, -2, 49, -5, 33, -1, 28, -1), 612*d968e50bSDetlev Casanova CABAC_ENTRY(455, 51, 2, 53, 0, 33, 7, 29, 3), 613*d968e50bSDetlev Casanova CABAC_ENTRY(456, 60, 6, 64, 3, 31, 12, 29, 9), 614*d968e50bSDetlev Casanova CABAC_ENTRY(457, 61, 17, 68, 10, 37, 23, 35, 20), 615*d968e50bSDetlev Casanova CABAC_ENTRY(458, 55, 34, 66, 27, 31, 38, 29, 36), 616*d968e50bSDetlev Casanova CABAC_ENTRY(459, 42, 62, 47, 57, 20, 64, 14, 67), 617*d968e50bSDetlev Casanova }; 618*d968e50bSDetlev Casanova 619*d968e50bSDetlev Casanova static void set_ps_field(u32 *buf, struct rkvdec_ps_field field, u32 value) 620*d968e50bSDetlev Casanova { 621*d968e50bSDetlev Casanova u8 bit = field.offset % 32, word = field.offset / 32; 622*d968e50bSDetlev Casanova u64 mask = GENMASK_ULL(bit + field.len - 1, bit); 623*d968e50bSDetlev Casanova u64 val = ((u64)value << bit) & mask; 624*d968e50bSDetlev Casanova 625*d968e50bSDetlev Casanova buf[word] &= ~mask; 626*d968e50bSDetlev Casanova buf[word] |= val; 627*d968e50bSDetlev Casanova if (bit + field.len > 32) { 628*d968e50bSDetlev Casanova buf[word + 1] &= ~(mask >> 32); 629*d968e50bSDetlev Casanova buf[word + 1] |= val >> 32; 630*d968e50bSDetlev Casanova } 631*d968e50bSDetlev Casanova } 632*d968e50bSDetlev Casanova 633*d968e50bSDetlev Casanova static void assemble_hw_pps(struct rkvdec_ctx *ctx, 634*d968e50bSDetlev Casanova struct rkvdec_h264_run *run) 635*d968e50bSDetlev Casanova { 636*d968e50bSDetlev Casanova struct rkvdec_h264_ctx *h264_ctx = ctx->priv; 637*d968e50bSDetlev Casanova const struct v4l2_ctrl_h264_sps *sps = run->sps; 638*d968e50bSDetlev Casanova const struct v4l2_ctrl_h264_pps *pps = run->pps; 639*d968e50bSDetlev Casanova const struct v4l2_ctrl_h264_decode_params *dec_params = run->decode_params; 640*d968e50bSDetlev Casanova const struct v4l2_h264_dpb_entry *dpb = dec_params->dpb; 641*d968e50bSDetlev Casanova struct rkvdec_h264_priv_tbl *priv_tbl = h264_ctx->priv_tbl.cpu; 642*d968e50bSDetlev Casanova struct rkvdec_sps_pps_packet *hw_ps; 643*d968e50bSDetlev Casanova dma_addr_t scaling_list_address; 644*d968e50bSDetlev Casanova u32 scaling_distance; 645*d968e50bSDetlev Casanova u32 i; 646*d968e50bSDetlev Casanova 647*d968e50bSDetlev Casanova /* 648*d968e50bSDetlev Casanova * HW read the SPS/PPS information from PPS packet index by PPS id. 649*d968e50bSDetlev Casanova * offset from the base can be calculated by PPS_id * 32 (size per PPS 650*d968e50bSDetlev Casanova * packet unit). so the driver copy SPS/PPS information to the exact PPS 651*d968e50bSDetlev Casanova * packet unit for HW accessing. 652*d968e50bSDetlev Casanova */ 653*d968e50bSDetlev Casanova hw_ps = &priv_tbl->param_set[pps->pic_parameter_set_id]; 654*d968e50bSDetlev Casanova memset(hw_ps, 0, sizeof(*hw_ps)); 655*d968e50bSDetlev Casanova 656*d968e50bSDetlev Casanova #define WRITE_PPS(value, field) set_ps_field(hw_ps->info, field, value) 657*d968e50bSDetlev Casanova /* write sps */ 658*d968e50bSDetlev Casanova WRITE_PPS(sps->seq_parameter_set_id, SEQ_PARAMETER_SET_ID); 659*d968e50bSDetlev Casanova WRITE_PPS(sps->profile_idc, PROFILE_IDC); 660*d968e50bSDetlev Casanova WRITE_PPS(!!(sps->constraint_set_flags & (1 << 3)), CONSTRAINT_SET3_FLAG); 661*d968e50bSDetlev Casanova WRITE_PPS(sps->chroma_format_idc, CHROMA_FORMAT_IDC); 662*d968e50bSDetlev Casanova WRITE_PPS(sps->bit_depth_luma_minus8, BIT_DEPTH_LUMA); 663*d968e50bSDetlev Casanova WRITE_PPS(sps->bit_depth_chroma_minus8, BIT_DEPTH_CHROMA); 664*d968e50bSDetlev Casanova WRITE_PPS(!!(sps->flags & V4L2_H264_SPS_FLAG_QPPRIME_Y_ZERO_TRANSFORM_BYPASS), 665*d968e50bSDetlev Casanova QPPRIME_Y_ZERO_TRANSFORM_BYPASS_FLAG); 666*d968e50bSDetlev Casanova WRITE_PPS(sps->log2_max_frame_num_minus4, LOG2_MAX_FRAME_NUM_MINUS4); 667*d968e50bSDetlev Casanova WRITE_PPS(sps->max_num_ref_frames, MAX_NUM_REF_FRAMES); 668*d968e50bSDetlev Casanova WRITE_PPS(sps->pic_order_cnt_type, PIC_ORDER_CNT_TYPE); 669*d968e50bSDetlev Casanova WRITE_PPS(sps->log2_max_pic_order_cnt_lsb_minus4, 670*d968e50bSDetlev Casanova LOG2_MAX_PIC_ORDER_CNT_LSB_MINUS4); 671*d968e50bSDetlev Casanova WRITE_PPS(!!(sps->flags & V4L2_H264_SPS_FLAG_DELTA_PIC_ORDER_ALWAYS_ZERO), 672*d968e50bSDetlev Casanova DELTA_PIC_ORDER_ALWAYS_ZERO_FLAG); 673*d968e50bSDetlev Casanova 674*d968e50bSDetlev Casanova /* 675*d968e50bSDetlev Casanova * Use the SPS values since they are already in macroblocks 676*d968e50bSDetlev Casanova * dimensions, height can be field height (halved) if 677*d968e50bSDetlev Casanova * V4L2_H264_SPS_FLAG_FRAME_MBS_ONLY is not set and also it allows 678*d968e50bSDetlev Casanova * decoding smaller images into larger allocation which can be used 679*d968e50bSDetlev Casanova * to implementing SVC spatial layer support. 680*d968e50bSDetlev Casanova */ 681*d968e50bSDetlev Casanova WRITE_PPS(sps->pic_width_in_mbs_minus1 + 1, PIC_WIDTH_IN_MBS); 682*d968e50bSDetlev Casanova WRITE_PPS(sps->pic_height_in_map_units_minus1 + 1, PIC_HEIGHT_IN_MBS); 683*d968e50bSDetlev Casanova 684*d968e50bSDetlev Casanova WRITE_PPS(!!(sps->flags & V4L2_H264_SPS_FLAG_FRAME_MBS_ONLY), 685*d968e50bSDetlev Casanova FRAME_MBS_ONLY_FLAG); 686*d968e50bSDetlev Casanova WRITE_PPS(!!(sps->flags & V4L2_H264_SPS_FLAG_MB_ADAPTIVE_FRAME_FIELD), 687*d968e50bSDetlev Casanova MB_ADAPTIVE_FRAME_FIELD_FLAG); 688*d968e50bSDetlev Casanova WRITE_PPS(!!(sps->flags & V4L2_H264_SPS_FLAG_DIRECT_8X8_INFERENCE), 689*d968e50bSDetlev Casanova DIRECT_8X8_INFERENCE_FLAG); 690*d968e50bSDetlev Casanova 691*d968e50bSDetlev Casanova /* write pps */ 692*d968e50bSDetlev Casanova WRITE_PPS(pps->pic_parameter_set_id, PIC_PARAMETER_SET_ID); 693*d968e50bSDetlev Casanova WRITE_PPS(pps->seq_parameter_set_id, PPS_SEQ_PARAMETER_SET_ID); 694*d968e50bSDetlev Casanova WRITE_PPS(!!(pps->flags & V4L2_H264_PPS_FLAG_ENTROPY_CODING_MODE), 695*d968e50bSDetlev Casanova ENTROPY_CODING_MODE_FLAG); 696*d968e50bSDetlev Casanova WRITE_PPS(!!(pps->flags & V4L2_H264_PPS_FLAG_BOTTOM_FIELD_PIC_ORDER_IN_FRAME_PRESENT), 697*d968e50bSDetlev Casanova BOTTOM_FIELD_PIC_ORDER_IN_FRAME_PRESENT_FLAG); 698*d968e50bSDetlev Casanova WRITE_PPS(pps->num_ref_idx_l0_default_active_minus1, 699*d968e50bSDetlev Casanova NUM_REF_IDX_L_DEFAULT_ACTIVE_MINUS1(0)); 700*d968e50bSDetlev Casanova WRITE_PPS(pps->num_ref_idx_l1_default_active_minus1, 701*d968e50bSDetlev Casanova NUM_REF_IDX_L_DEFAULT_ACTIVE_MINUS1(1)); 702*d968e50bSDetlev Casanova WRITE_PPS(!!(pps->flags & V4L2_H264_PPS_FLAG_WEIGHTED_PRED), 703*d968e50bSDetlev Casanova WEIGHTED_PRED_FLAG); 704*d968e50bSDetlev Casanova WRITE_PPS(pps->weighted_bipred_idc, WEIGHTED_BIPRED_IDC); 705*d968e50bSDetlev Casanova WRITE_PPS(pps->pic_init_qp_minus26, PIC_INIT_QP_MINUS26); 706*d968e50bSDetlev Casanova WRITE_PPS(pps->pic_init_qs_minus26, PIC_INIT_QS_MINUS26); 707*d968e50bSDetlev Casanova WRITE_PPS(pps->chroma_qp_index_offset, CHROMA_QP_INDEX_OFFSET); 708*d968e50bSDetlev Casanova WRITE_PPS(!!(pps->flags & V4L2_H264_PPS_FLAG_DEBLOCKING_FILTER_CONTROL_PRESENT), 709*d968e50bSDetlev Casanova DEBLOCKING_FILTER_CONTROL_PRESENT_FLAG); 710*d968e50bSDetlev Casanova WRITE_PPS(!!(pps->flags & V4L2_H264_PPS_FLAG_CONSTRAINED_INTRA_PRED), 711*d968e50bSDetlev Casanova CONSTRAINED_INTRA_PRED_FLAG); 712*d968e50bSDetlev Casanova WRITE_PPS(!!(pps->flags & V4L2_H264_PPS_FLAG_REDUNDANT_PIC_CNT_PRESENT), 713*d968e50bSDetlev Casanova REDUNDANT_PIC_CNT_PRESENT); 714*d968e50bSDetlev Casanova WRITE_PPS(!!(pps->flags & V4L2_H264_PPS_FLAG_TRANSFORM_8X8_MODE), 715*d968e50bSDetlev Casanova TRANSFORM_8X8_MODE_FLAG); 716*d968e50bSDetlev Casanova WRITE_PPS(pps->second_chroma_qp_index_offset, 717*d968e50bSDetlev Casanova SECOND_CHROMA_QP_INDEX_OFFSET); 718*d968e50bSDetlev Casanova 719*d968e50bSDetlev Casanova WRITE_PPS(!!(pps->flags & V4L2_H264_PPS_FLAG_SCALING_MATRIX_PRESENT), 720*d968e50bSDetlev Casanova SCALING_LIST_ENABLE_FLAG); 721*d968e50bSDetlev Casanova /* To be on the safe side, program the scaling matrix address */ 722*d968e50bSDetlev Casanova scaling_distance = offsetof(struct rkvdec_h264_priv_tbl, scaling_list); 723*d968e50bSDetlev Casanova scaling_list_address = h264_ctx->priv_tbl.dma + scaling_distance; 724*d968e50bSDetlev Casanova WRITE_PPS(scaling_list_address, SCALING_LIST_ADDRESS); 725*d968e50bSDetlev Casanova 726*d968e50bSDetlev Casanova for (i = 0; i < ARRAY_SIZE(dec_params->dpb); i++) { 727*d968e50bSDetlev Casanova u32 is_longterm = 0; 728*d968e50bSDetlev Casanova 729*d968e50bSDetlev Casanova if (dpb[i].flags & V4L2_H264_DPB_ENTRY_FLAG_LONG_TERM) 730*d968e50bSDetlev Casanova is_longterm = 1; 731*d968e50bSDetlev Casanova 732*d968e50bSDetlev Casanova WRITE_PPS(is_longterm, IS_LONG_TERM(i)); 733*d968e50bSDetlev Casanova } 734*d968e50bSDetlev Casanova } 735*d968e50bSDetlev Casanova 736*d968e50bSDetlev Casanova static void lookup_ref_buf_idx(struct rkvdec_ctx *ctx, 737*d968e50bSDetlev Casanova struct rkvdec_h264_run *run) 738*d968e50bSDetlev Casanova { 739*d968e50bSDetlev Casanova const struct v4l2_ctrl_h264_decode_params *dec_params = run->decode_params; 740*d968e50bSDetlev Casanova u32 i; 741*d968e50bSDetlev Casanova 742*d968e50bSDetlev Casanova for (i = 0; i < ARRAY_SIZE(dec_params->dpb); i++) { 743*d968e50bSDetlev Casanova struct v4l2_m2m_ctx *m2m_ctx = ctx->fh.m2m_ctx; 744*d968e50bSDetlev Casanova const struct v4l2_h264_dpb_entry *dpb = run->decode_params->dpb; 745*d968e50bSDetlev Casanova struct vb2_queue *cap_q = &m2m_ctx->cap_q_ctx.q; 746*d968e50bSDetlev Casanova struct vb2_buffer *buf = NULL; 747*d968e50bSDetlev Casanova 748*d968e50bSDetlev Casanova if (dpb[i].flags & V4L2_H264_DPB_ENTRY_FLAG_ACTIVE) { 749*d968e50bSDetlev Casanova buf = vb2_find_buffer(cap_q, dpb[i].reference_ts); 750*d968e50bSDetlev Casanova if (!buf) 751*d968e50bSDetlev Casanova pr_debug("No buffer for reference_ts %llu", 752*d968e50bSDetlev Casanova dpb[i].reference_ts); 753*d968e50bSDetlev Casanova } 754*d968e50bSDetlev Casanova 755*d968e50bSDetlev Casanova run->ref_buf[i] = buf; 756*d968e50bSDetlev Casanova } 757*d968e50bSDetlev Casanova } 758*d968e50bSDetlev Casanova 759*d968e50bSDetlev Casanova static void assemble_hw_rps(struct rkvdec_ctx *ctx, 760*d968e50bSDetlev Casanova struct v4l2_h264_reflist_builder *builder, 761*d968e50bSDetlev Casanova struct rkvdec_h264_run *run) 762*d968e50bSDetlev Casanova { 763*d968e50bSDetlev Casanova const struct v4l2_ctrl_h264_decode_params *dec_params = run->decode_params; 764*d968e50bSDetlev Casanova const struct v4l2_h264_dpb_entry *dpb = dec_params->dpb; 765*d968e50bSDetlev Casanova struct rkvdec_h264_ctx *h264_ctx = ctx->priv; 766*d968e50bSDetlev Casanova struct rkvdec_h264_priv_tbl *priv_tbl = h264_ctx->priv_tbl.cpu; 767*d968e50bSDetlev Casanova 768*d968e50bSDetlev Casanova u32 *hw_rps = priv_tbl->rps; 769*d968e50bSDetlev Casanova u32 i, j; 770*d968e50bSDetlev Casanova u16 *p = (u16 *)hw_rps; 771*d968e50bSDetlev Casanova 772*d968e50bSDetlev Casanova memset(hw_rps, 0, sizeof(priv_tbl->rps)); 773*d968e50bSDetlev Casanova 774*d968e50bSDetlev Casanova /* 775*d968e50bSDetlev Casanova * Assign an invalid pic_num if DPB entry at that position is inactive. 776*d968e50bSDetlev Casanova * If we assign 0 in that position hardware will treat that as a real 777*d968e50bSDetlev Casanova * reference picture with pic_num 0, triggering output picture 778*d968e50bSDetlev Casanova * corruption. 779*d968e50bSDetlev Casanova */ 780*d968e50bSDetlev Casanova for (i = 0; i < ARRAY_SIZE(dec_params->dpb); i++) { 781*d968e50bSDetlev Casanova if (!(dpb[i].flags & V4L2_H264_DPB_ENTRY_FLAG_ACTIVE)) 782*d968e50bSDetlev Casanova continue; 783*d968e50bSDetlev Casanova 784*d968e50bSDetlev Casanova p[i] = builder->refs[i].frame_num; 785*d968e50bSDetlev Casanova } 786*d968e50bSDetlev Casanova 787*d968e50bSDetlev Casanova for (j = 0; j < RKVDEC_NUM_REFLIST; j++) { 788*d968e50bSDetlev Casanova for (i = 0; i < builder->num_valid; i++) { 789*d968e50bSDetlev Casanova struct v4l2_h264_reference *ref; 790*d968e50bSDetlev Casanova bool dpb_valid; 791*d968e50bSDetlev Casanova bool bottom; 792*d968e50bSDetlev Casanova 793*d968e50bSDetlev Casanova switch (j) { 794*d968e50bSDetlev Casanova case 0: 795*d968e50bSDetlev Casanova ref = &h264_ctx->reflists.p[i]; 796*d968e50bSDetlev Casanova break; 797*d968e50bSDetlev Casanova case 1: 798*d968e50bSDetlev Casanova ref = &h264_ctx->reflists.b0[i]; 799*d968e50bSDetlev Casanova break; 800*d968e50bSDetlev Casanova case 2: 801*d968e50bSDetlev Casanova ref = &h264_ctx->reflists.b1[i]; 802*d968e50bSDetlev Casanova break; 803*d968e50bSDetlev Casanova } 804*d968e50bSDetlev Casanova 805*d968e50bSDetlev Casanova if (WARN_ON(ref->index >= ARRAY_SIZE(dec_params->dpb))) 806*d968e50bSDetlev Casanova continue; 807*d968e50bSDetlev Casanova 808*d968e50bSDetlev Casanova dpb_valid = run->ref_buf[ref->index] != NULL; 809*d968e50bSDetlev Casanova bottom = ref->fields == V4L2_H264_BOTTOM_FIELD_REF; 810*d968e50bSDetlev Casanova 811*d968e50bSDetlev Casanova set_ps_field(hw_rps, DPB_INFO(i, j), 812*d968e50bSDetlev Casanova ref->index | dpb_valid << 4); 813*d968e50bSDetlev Casanova set_ps_field(hw_rps, BOTTOM_FLAG(i, j), bottom); 814*d968e50bSDetlev Casanova } 815*d968e50bSDetlev Casanova } 816*d968e50bSDetlev Casanova } 817*d968e50bSDetlev Casanova 818*d968e50bSDetlev Casanova static void assemble_hw_scaling_list(struct rkvdec_ctx *ctx, 819*d968e50bSDetlev Casanova struct rkvdec_h264_run *run) 820*d968e50bSDetlev Casanova { 821*d968e50bSDetlev Casanova const struct v4l2_ctrl_h264_scaling_matrix *scaling = run->scaling_matrix; 822*d968e50bSDetlev Casanova const struct v4l2_ctrl_h264_pps *pps = run->pps; 823*d968e50bSDetlev Casanova struct rkvdec_h264_ctx *h264_ctx = ctx->priv; 824*d968e50bSDetlev Casanova struct rkvdec_h264_priv_tbl *tbl = h264_ctx->priv_tbl.cpu; 825*d968e50bSDetlev Casanova 826*d968e50bSDetlev Casanova if (!(pps->flags & V4L2_H264_PPS_FLAG_SCALING_MATRIX_PRESENT)) 827*d968e50bSDetlev Casanova return; 828*d968e50bSDetlev Casanova 829*d968e50bSDetlev Casanova BUILD_BUG_ON(sizeof(tbl->scaling_list.scaling_list_4x4) != 830*d968e50bSDetlev Casanova sizeof(scaling->scaling_list_4x4)); 831*d968e50bSDetlev Casanova BUILD_BUG_ON(sizeof(tbl->scaling_list.scaling_list_8x8) != 832*d968e50bSDetlev Casanova sizeof(scaling->scaling_list_8x8)); 833*d968e50bSDetlev Casanova 834*d968e50bSDetlev Casanova memcpy(tbl->scaling_list.scaling_list_4x4, 835*d968e50bSDetlev Casanova scaling->scaling_list_4x4, 836*d968e50bSDetlev Casanova sizeof(scaling->scaling_list_4x4)); 837*d968e50bSDetlev Casanova 838*d968e50bSDetlev Casanova memcpy(tbl->scaling_list.scaling_list_8x8, 839*d968e50bSDetlev Casanova scaling->scaling_list_8x8, 840*d968e50bSDetlev Casanova sizeof(scaling->scaling_list_8x8)); 841*d968e50bSDetlev Casanova } 842*d968e50bSDetlev Casanova 843*d968e50bSDetlev Casanova /* 844*d968e50bSDetlev Casanova * dpb poc related registers table 845*d968e50bSDetlev Casanova */ 846*d968e50bSDetlev Casanova static const u32 poc_reg_tbl_top_field[16] = { 847*d968e50bSDetlev Casanova RKVDEC_REG_H264_POC_REFER0(0), 848*d968e50bSDetlev Casanova RKVDEC_REG_H264_POC_REFER0(2), 849*d968e50bSDetlev Casanova RKVDEC_REG_H264_POC_REFER0(4), 850*d968e50bSDetlev Casanova RKVDEC_REG_H264_POC_REFER0(6), 851*d968e50bSDetlev Casanova RKVDEC_REG_H264_POC_REFER0(8), 852*d968e50bSDetlev Casanova RKVDEC_REG_H264_POC_REFER0(10), 853*d968e50bSDetlev Casanova RKVDEC_REG_H264_POC_REFER0(12), 854*d968e50bSDetlev Casanova RKVDEC_REG_H264_POC_REFER0(14), 855*d968e50bSDetlev Casanova RKVDEC_REG_H264_POC_REFER1(1), 856*d968e50bSDetlev Casanova RKVDEC_REG_H264_POC_REFER1(3), 857*d968e50bSDetlev Casanova RKVDEC_REG_H264_POC_REFER1(5), 858*d968e50bSDetlev Casanova RKVDEC_REG_H264_POC_REFER1(7), 859*d968e50bSDetlev Casanova RKVDEC_REG_H264_POC_REFER1(9), 860*d968e50bSDetlev Casanova RKVDEC_REG_H264_POC_REFER1(11), 861*d968e50bSDetlev Casanova RKVDEC_REG_H264_POC_REFER1(13), 862*d968e50bSDetlev Casanova RKVDEC_REG_H264_POC_REFER2(0) 863*d968e50bSDetlev Casanova }; 864*d968e50bSDetlev Casanova 865*d968e50bSDetlev Casanova static const u32 poc_reg_tbl_bottom_field[16] = { 866*d968e50bSDetlev Casanova RKVDEC_REG_H264_POC_REFER0(1), 867*d968e50bSDetlev Casanova RKVDEC_REG_H264_POC_REFER0(3), 868*d968e50bSDetlev Casanova RKVDEC_REG_H264_POC_REFER0(5), 869*d968e50bSDetlev Casanova RKVDEC_REG_H264_POC_REFER0(7), 870*d968e50bSDetlev Casanova RKVDEC_REG_H264_POC_REFER0(9), 871*d968e50bSDetlev Casanova RKVDEC_REG_H264_POC_REFER0(11), 872*d968e50bSDetlev Casanova RKVDEC_REG_H264_POC_REFER0(13), 873*d968e50bSDetlev Casanova RKVDEC_REG_H264_POC_REFER1(0), 874*d968e50bSDetlev Casanova RKVDEC_REG_H264_POC_REFER1(2), 875*d968e50bSDetlev Casanova RKVDEC_REG_H264_POC_REFER1(4), 876*d968e50bSDetlev Casanova RKVDEC_REG_H264_POC_REFER1(6), 877*d968e50bSDetlev Casanova RKVDEC_REG_H264_POC_REFER1(8), 878*d968e50bSDetlev Casanova RKVDEC_REG_H264_POC_REFER1(10), 879*d968e50bSDetlev Casanova RKVDEC_REG_H264_POC_REFER1(12), 880*d968e50bSDetlev Casanova RKVDEC_REG_H264_POC_REFER1(14), 881*d968e50bSDetlev Casanova RKVDEC_REG_H264_POC_REFER2(1) 882*d968e50bSDetlev Casanova }; 883*d968e50bSDetlev Casanova 884*d968e50bSDetlev Casanova static void config_registers(struct rkvdec_ctx *ctx, 885*d968e50bSDetlev Casanova struct rkvdec_h264_run *run) 886*d968e50bSDetlev Casanova { 887*d968e50bSDetlev Casanova struct rkvdec_dev *rkvdec = ctx->dev; 888*d968e50bSDetlev Casanova const struct v4l2_ctrl_h264_decode_params *dec_params = run->decode_params; 889*d968e50bSDetlev Casanova const struct v4l2_ctrl_h264_sps *sps = run->sps; 890*d968e50bSDetlev Casanova const struct v4l2_h264_dpb_entry *dpb = dec_params->dpb; 891*d968e50bSDetlev Casanova struct rkvdec_h264_ctx *h264_ctx = ctx->priv; 892*d968e50bSDetlev Casanova dma_addr_t priv_start_addr = h264_ctx->priv_tbl.dma; 893*d968e50bSDetlev Casanova const struct v4l2_pix_format_mplane *dst_fmt; 894*d968e50bSDetlev Casanova struct vb2_v4l2_buffer *src_buf = run->base.bufs.src; 895*d968e50bSDetlev Casanova struct vb2_v4l2_buffer *dst_buf = run->base.bufs.dst; 896*d968e50bSDetlev Casanova const struct v4l2_format *f; 897*d968e50bSDetlev Casanova dma_addr_t rlc_addr; 898*d968e50bSDetlev Casanova dma_addr_t refer_addr; 899*d968e50bSDetlev Casanova u32 rlc_len; 900*d968e50bSDetlev Casanova u32 hor_virstride; 901*d968e50bSDetlev Casanova u32 ver_virstride; 902*d968e50bSDetlev Casanova u32 y_virstride; 903*d968e50bSDetlev Casanova u32 yuv_virstride = 0; 904*d968e50bSDetlev Casanova u32 offset; 905*d968e50bSDetlev Casanova dma_addr_t dst_addr; 906*d968e50bSDetlev Casanova u32 reg, i; 907*d968e50bSDetlev Casanova 908*d968e50bSDetlev Casanova reg = RKVDEC_MODE(RKVDEC_MODE_H264); 909*d968e50bSDetlev Casanova writel_relaxed(reg, rkvdec->regs + RKVDEC_REG_SYSCTRL); 910*d968e50bSDetlev Casanova 911*d968e50bSDetlev Casanova f = &ctx->decoded_fmt; 912*d968e50bSDetlev Casanova dst_fmt = &f->fmt.pix_mp; 913*d968e50bSDetlev Casanova hor_virstride = dst_fmt->plane_fmt[0].bytesperline; 914*d968e50bSDetlev Casanova ver_virstride = dst_fmt->height; 915*d968e50bSDetlev Casanova y_virstride = hor_virstride * ver_virstride; 916*d968e50bSDetlev Casanova 917*d968e50bSDetlev Casanova if (sps->chroma_format_idc == 0) 918*d968e50bSDetlev Casanova yuv_virstride = y_virstride; 919*d968e50bSDetlev Casanova else if (sps->chroma_format_idc == 1) 920*d968e50bSDetlev Casanova yuv_virstride = y_virstride + y_virstride / 2; 921*d968e50bSDetlev Casanova else if (sps->chroma_format_idc == 2) 922*d968e50bSDetlev Casanova yuv_virstride = 2 * y_virstride; 923*d968e50bSDetlev Casanova 924*d968e50bSDetlev Casanova reg = RKVDEC_Y_HOR_VIRSTRIDE(hor_virstride / 16) | 925*d968e50bSDetlev Casanova RKVDEC_UV_HOR_VIRSTRIDE(hor_virstride / 16) | 926*d968e50bSDetlev Casanova RKVDEC_SLICE_NUM_HIGHBIT | 927*d968e50bSDetlev Casanova RKVDEC_SLICE_NUM_LOWBITS(0x7ff); 928*d968e50bSDetlev Casanova writel_relaxed(reg, rkvdec->regs + RKVDEC_REG_PICPAR); 929*d968e50bSDetlev Casanova 930*d968e50bSDetlev Casanova /* config rlc base address */ 931*d968e50bSDetlev Casanova rlc_addr = vb2_dma_contig_plane_dma_addr(&src_buf->vb2_buf, 0); 932*d968e50bSDetlev Casanova writel_relaxed(rlc_addr, rkvdec->regs + RKVDEC_REG_STRM_RLC_BASE); 933*d968e50bSDetlev Casanova writel_relaxed(rlc_addr, rkvdec->regs + RKVDEC_REG_RLCWRITE_BASE); 934*d968e50bSDetlev Casanova 935*d968e50bSDetlev Casanova rlc_len = vb2_get_plane_payload(&src_buf->vb2_buf, 0); 936*d968e50bSDetlev Casanova reg = RKVDEC_STRM_LEN(rlc_len); 937*d968e50bSDetlev Casanova writel_relaxed(reg, rkvdec->regs + RKVDEC_REG_STRM_LEN); 938*d968e50bSDetlev Casanova 939*d968e50bSDetlev Casanova /* config cabac table */ 940*d968e50bSDetlev Casanova offset = offsetof(struct rkvdec_h264_priv_tbl, cabac_table); 941*d968e50bSDetlev Casanova writel_relaxed(priv_start_addr + offset, 942*d968e50bSDetlev Casanova rkvdec->regs + RKVDEC_REG_CABACTBL_PROB_BASE); 943*d968e50bSDetlev Casanova 944*d968e50bSDetlev Casanova /* config output base address */ 945*d968e50bSDetlev Casanova dst_addr = vb2_dma_contig_plane_dma_addr(&dst_buf->vb2_buf, 0); 946*d968e50bSDetlev Casanova writel_relaxed(dst_addr, rkvdec->regs + RKVDEC_REG_DECOUT_BASE); 947*d968e50bSDetlev Casanova 948*d968e50bSDetlev Casanova reg = RKVDEC_Y_VIRSTRIDE(y_virstride / 16); 949*d968e50bSDetlev Casanova writel_relaxed(reg, rkvdec->regs + RKVDEC_REG_Y_VIRSTRIDE); 950*d968e50bSDetlev Casanova 951*d968e50bSDetlev Casanova reg = RKVDEC_YUV_VIRSTRIDE(yuv_virstride / 16); 952*d968e50bSDetlev Casanova writel_relaxed(reg, rkvdec->regs + RKVDEC_REG_YUV_VIRSTRIDE); 953*d968e50bSDetlev Casanova 954*d968e50bSDetlev Casanova /* config ref pic address & poc */ 955*d968e50bSDetlev Casanova for (i = 0; i < ARRAY_SIZE(dec_params->dpb); i++) { 956*d968e50bSDetlev Casanova struct vb2_buffer *vb_buf = run->ref_buf[i]; 957*d968e50bSDetlev Casanova 958*d968e50bSDetlev Casanova /* 959*d968e50bSDetlev Casanova * If a DPB entry is unused or invalid, address of current destination 960*d968e50bSDetlev Casanova * buffer is returned. 961*d968e50bSDetlev Casanova */ 962*d968e50bSDetlev Casanova if (!vb_buf) 963*d968e50bSDetlev Casanova vb_buf = &dst_buf->vb2_buf; 964*d968e50bSDetlev Casanova refer_addr = vb2_dma_contig_plane_dma_addr(vb_buf, 0); 965*d968e50bSDetlev Casanova 966*d968e50bSDetlev Casanova if (dpb[i].flags & V4L2_H264_DPB_ENTRY_FLAG_ACTIVE) 967*d968e50bSDetlev Casanova refer_addr |= RKVDEC_COLMV_USED_FLAG_REF; 968*d968e50bSDetlev Casanova if (dpb[i].flags & V4L2_H264_DPB_ENTRY_FLAG_FIELD) 969*d968e50bSDetlev Casanova refer_addr |= RKVDEC_FIELD_REF; 970*d968e50bSDetlev Casanova 971*d968e50bSDetlev Casanova if (dpb[i].fields & V4L2_H264_TOP_FIELD_REF) 972*d968e50bSDetlev Casanova refer_addr |= RKVDEC_TOPFIELD_USED_REF; 973*d968e50bSDetlev Casanova if (dpb[i].fields & V4L2_H264_BOTTOM_FIELD_REF) 974*d968e50bSDetlev Casanova refer_addr |= RKVDEC_BOTFIELD_USED_REF; 975*d968e50bSDetlev Casanova 976*d968e50bSDetlev Casanova writel_relaxed(dpb[i].top_field_order_cnt, 977*d968e50bSDetlev Casanova rkvdec->regs + poc_reg_tbl_top_field[i]); 978*d968e50bSDetlev Casanova writel_relaxed(dpb[i].bottom_field_order_cnt, 979*d968e50bSDetlev Casanova rkvdec->regs + poc_reg_tbl_bottom_field[i]); 980*d968e50bSDetlev Casanova 981*d968e50bSDetlev Casanova if (i < V4L2_H264_NUM_DPB_ENTRIES - 1) 982*d968e50bSDetlev Casanova writel_relaxed(refer_addr, 983*d968e50bSDetlev Casanova rkvdec->regs + RKVDEC_REG_H264_BASE_REFER(i)); 984*d968e50bSDetlev Casanova else 985*d968e50bSDetlev Casanova writel_relaxed(refer_addr, 986*d968e50bSDetlev Casanova rkvdec->regs + RKVDEC_REG_H264_BASE_REFER15); 987*d968e50bSDetlev Casanova } 988*d968e50bSDetlev Casanova 989*d968e50bSDetlev Casanova reg = RKVDEC_CUR_POC(dec_params->top_field_order_cnt); 990*d968e50bSDetlev Casanova writel_relaxed(reg, rkvdec->regs + RKVDEC_REG_CUR_POC0); 991*d968e50bSDetlev Casanova 992*d968e50bSDetlev Casanova reg = RKVDEC_CUR_POC(dec_params->bottom_field_order_cnt); 993*d968e50bSDetlev Casanova writel_relaxed(reg, rkvdec->regs + RKVDEC_REG_CUR_POC1); 994*d968e50bSDetlev Casanova 995*d968e50bSDetlev Casanova /* config hw pps address */ 996*d968e50bSDetlev Casanova offset = offsetof(struct rkvdec_h264_priv_tbl, param_set); 997*d968e50bSDetlev Casanova writel_relaxed(priv_start_addr + offset, 998*d968e50bSDetlev Casanova rkvdec->regs + RKVDEC_REG_PPS_BASE); 999*d968e50bSDetlev Casanova 1000*d968e50bSDetlev Casanova /* config hw rps address */ 1001*d968e50bSDetlev Casanova offset = offsetof(struct rkvdec_h264_priv_tbl, rps); 1002*d968e50bSDetlev Casanova writel_relaxed(priv_start_addr + offset, 1003*d968e50bSDetlev Casanova rkvdec->regs + RKVDEC_REG_RPS_BASE); 1004*d968e50bSDetlev Casanova 1005*d968e50bSDetlev Casanova reg = RKVDEC_AXI_DDR_RDATA(0); 1006*d968e50bSDetlev Casanova writel_relaxed(reg, rkvdec->regs + RKVDEC_REG_AXI_DDR_RDATA); 1007*d968e50bSDetlev Casanova 1008*d968e50bSDetlev Casanova reg = RKVDEC_AXI_DDR_WDATA(0); 1009*d968e50bSDetlev Casanova writel_relaxed(reg, rkvdec->regs + RKVDEC_REG_AXI_DDR_WDATA); 1010*d968e50bSDetlev Casanova 1011*d968e50bSDetlev Casanova offset = offsetof(struct rkvdec_h264_priv_tbl, err_info); 1012*d968e50bSDetlev Casanova writel_relaxed(priv_start_addr + offset, 1013*d968e50bSDetlev Casanova rkvdec->regs + RKVDEC_REG_H264_ERRINFO_BASE); 1014*d968e50bSDetlev Casanova } 1015*d968e50bSDetlev Casanova 1016*d968e50bSDetlev Casanova #define RKVDEC_H264_MAX_DEPTH_IN_BYTES 2 1017*d968e50bSDetlev Casanova 1018*d968e50bSDetlev Casanova static int rkvdec_h264_adjust_fmt(struct rkvdec_ctx *ctx, 1019*d968e50bSDetlev Casanova struct v4l2_format *f) 1020*d968e50bSDetlev Casanova { 1021*d968e50bSDetlev Casanova struct v4l2_pix_format_mplane *fmt = &f->fmt.pix_mp; 1022*d968e50bSDetlev Casanova 1023*d968e50bSDetlev Casanova fmt->num_planes = 1; 1024*d968e50bSDetlev Casanova if (!fmt->plane_fmt[0].sizeimage) 1025*d968e50bSDetlev Casanova fmt->plane_fmt[0].sizeimage = fmt->width * fmt->height * 1026*d968e50bSDetlev Casanova RKVDEC_H264_MAX_DEPTH_IN_BYTES; 1027*d968e50bSDetlev Casanova return 0; 1028*d968e50bSDetlev Casanova } 1029*d968e50bSDetlev Casanova 1030*d968e50bSDetlev Casanova static enum rkvdec_image_fmt rkvdec_h264_get_image_fmt(struct rkvdec_ctx *ctx, 1031*d968e50bSDetlev Casanova struct v4l2_ctrl *ctrl) 1032*d968e50bSDetlev Casanova { 1033*d968e50bSDetlev Casanova const struct v4l2_ctrl_h264_sps *sps = ctrl->p_new.p_h264_sps; 1034*d968e50bSDetlev Casanova 1035*d968e50bSDetlev Casanova if (ctrl->id != V4L2_CID_STATELESS_H264_SPS) 1036*d968e50bSDetlev Casanova return RKVDEC_IMG_FMT_ANY; 1037*d968e50bSDetlev Casanova 1038*d968e50bSDetlev Casanova if (sps->bit_depth_luma_minus8 == 0) { 1039*d968e50bSDetlev Casanova if (sps->chroma_format_idc == 2) 1040*d968e50bSDetlev Casanova return RKVDEC_IMG_FMT_422_8BIT; 1041*d968e50bSDetlev Casanova else 1042*d968e50bSDetlev Casanova return RKVDEC_IMG_FMT_420_8BIT; 1043*d968e50bSDetlev Casanova } else if (sps->bit_depth_luma_minus8 == 2) { 1044*d968e50bSDetlev Casanova if (sps->chroma_format_idc == 2) 1045*d968e50bSDetlev Casanova return RKVDEC_IMG_FMT_422_10BIT; 1046*d968e50bSDetlev Casanova else 1047*d968e50bSDetlev Casanova return RKVDEC_IMG_FMT_420_10BIT; 1048*d968e50bSDetlev Casanova } 1049*d968e50bSDetlev Casanova 1050*d968e50bSDetlev Casanova return RKVDEC_IMG_FMT_ANY; 1051*d968e50bSDetlev Casanova } 1052*d968e50bSDetlev Casanova 1053*d968e50bSDetlev Casanova static int rkvdec_h264_validate_sps(struct rkvdec_ctx *ctx, 1054*d968e50bSDetlev Casanova const struct v4l2_ctrl_h264_sps *sps) 1055*d968e50bSDetlev Casanova { 1056*d968e50bSDetlev Casanova unsigned int width, height; 1057*d968e50bSDetlev Casanova 1058*d968e50bSDetlev Casanova if (sps->chroma_format_idc > 2) 1059*d968e50bSDetlev Casanova /* Only 4:0:0, 4:2:0 and 4:2:2 are supported */ 1060*d968e50bSDetlev Casanova return -EINVAL; 1061*d968e50bSDetlev Casanova if (sps->bit_depth_luma_minus8 != sps->bit_depth_chroma_minus8) 1062*d968e50bSDetlev Casanova /* Luma and chroma bit depth mismatch */ 1063*d968e50bSDetlev Casanova return -EINVAL; 1064*d968e50bSDetlev Casanova if (sps->bit_depth_luma_minus8 != 0 && sps->bit_depth_luma_minus8 != 2) 1065*d968e50bSDetlev Casanova /* Only 8-bit and 10-bit is supported */ 1066*d968e50bSDetlev Casanova return -EINVAL; 1067*d968e50bSDetlev Casanova 1068*d968e50bSDetlev Casanova width = (sps->pic_width_in_mbs_minus1 + 1) * 16; 1069*d968e50bSDetlev Casanova height = (sps->pic_height_in_map_units_minus1 + 1) * 16; 1070*d968e50bSDetlev Casanova 1071*d968e50bSDetlev Casanova /* 1072*d968e50bSDetlev Casanova * When frame_mbs_only_flag is not set, this is field height, 1073*d968e50bSDetlev Casanova * which is half the final height (see (7-18) in the 1074*d968e50bSDetlev Casanova * specification) 1075*d968e50bSDetlev Casanova */ 1076*d968e50bSDetlev Casanova if (!(sps->flags & V4L2_H264_SPS_FLAG_FRAME_MBS_ONLY)) 1077*d968e50bSDetlev Casanova height *= 2; 1078*d968e50bSDetlev Casanova 1079*d968e50bSDetlev Casanova if (width > ctx->coded_fmt.fmt.pix_mp.width || 1080*d968e50bSDetlev Casanova height > ctx->coded_fmt.fmt.pix_mp.height) 1081*d968e50bSDetlev Casanova return -EINVAL; 1082*d968e50bSDetlev Casanova 1083*d968e50bSDetlev Casanova return 0; 1084*d968e50bSDetlev Casanova } 1085*d968e50bSDetlev Casanova 1086*d968e50bSDetlev Casanova static int rkvdec_h264_start(struct rkvdec_ctx *ctx) 1087*d968e50bSDetlev Casanova { 1088*d968e50bSDetlev Casanova struct rkvdec_dev *rkvdec = ctx->dev; 1089*d968e50bSDetlev Casanova struct rkvdec_h264_priv_tbl *priv_tbl; 1090*d968e50bSDetlev Casanova struct rkvdec_h264_ctx *h264_ctx; 1091*d968e50bSDetlev Casanova struct v4l2_ctrl *ctrl; 1092*d968e50bSDetlev Casanova int ret; 1093*d968e50bSDetlev Casanova 1094*d968e50bSDetlev Casanova ctrl = v4l2_ctrl_find(&ctx->ctrl_hdl, 1095*d968e50bSDetlev Casanova V4L2_CID_STATELESS_H264_SPS); 1096*d968e50bSDetlev Casanova if (!ctrl) 1097*d968e50bSDetlev Casanova return -EINVAL; 1098*d968e50bSDetlev Casanova 1099*d968e50bSDetlev Casanova ret = rkvdec_h264_validate_sps(ctx, ctrl->p_new.p_h264_sps); 1100*d968e50bSDetlev Casanova if (ret) 1101*d968e50bSDetlev Casanova return ret; 1102*d968e50bSDetlev Casanova 1103*d968e50bSDetlev Casanova h264_ctx = kzalloc(sizeof(*h264_ctx), GFP_KERNEL); 1104*d968e50bSDetlev Casanova if (!h264_ctx) 1105*d968e50bSDetlev Casanova return -ENOMEM; 1106*d968e50bSDetlev Casanova 1107*d968e50bSDetlev Casanova priv_tbl = dma_alloc_coherent(rkvdec->dev, sizeof(*priv_tbl), 1108*d968e50bSDetlev Casanova &h264_ctx->priv_tbl.dma, GFP_KERNEL); 1109*d968e50bSDetlev Casanova if (!priv_tbl) { 1110*d968e50bSDetlev Casanova ret = -ENOMEM; 1111*d968e50bSDetlev Casanova goto err_free_ctx; 1112*d968e50bSDetlev Casanova } 1113*d968e50bSDetlev Casanova 1114*d968e50bSDetlev Casanova h264_ctx->priv_tbl.size = sizeof(*priv_tbl); 1115*d968e50bSDetlev Casanova h264_ctx->priv_tbl.cpu = priv_tbl; 1116*d968e50bSDetlev Casanova memcpy(priv_tbl->cabac_table, rkvdec_h264_cabac_table, 1117*d968e50bSDetlev Casanova sizeof(rkvdec_h264_cabac_table)); 1118*d968e50bSDetlev Casanova 1119*d968e50bSDetlev Casanova ctx->priv = h264_ctx; 1120*d968e50bSDetlev Casanova return 0; 1121*d968e50bSDetlev Casanova 1122*d968e50bSDetlev Casanova err_free_ctx: 1123*d968e50bSDetlev Casanova kfree(h264_ctx); 1124*d968e50bSDetlev Casanova return ret; 1125*d968e50bSDetlev Casanova } 1126*d968e50bSDetlev Casanova 1127*d968e50bSDetlev Casanova static void rkvdec_h264_stop(struct rkvdec_ctx *ctx) 1128*d968e50bSDetlev Casanova { 1129*d968e50bSDetlev Casanova struct rkvdec_h264_ctx *h264_ctx = ctx->priv; 1130*d968e50bSDetlev Casanova struct rkvdec_dev *rkvdec = ctx->dev; 1131*d968e50bSDetlev Casanova 1132*d968e50bSDetlev Casanova dma_free_coherent(rkvdec->dev, h264_ctx->priv_tbl.size, 1133*d968e50bSDetlev Casanova h264_ctx->priv_tbl.cpu, h264_ctx->priv_tbl.dma); 1134*d968e50bSDetlev Casanova kfree(h264_ctx); 1135*d968e50bSDetlev Casanova } 1136*d968e50bSDetlev Casanova 1137*d968e50bSDetlev Casanova static void rkvdec_h264_run_preamble(struct rkvdec_ctx *ctx, 1138*d968e50bSDetlev Casanova struct rkvdec_h264_run *run) 1139*d968e50bSDetlev Casanova { 1140*d968e50bSDetlev Casanova struct v4l2_ctrl *ctrl; 1141*d968e50bSDetlev Casanova 1142*d968e50bSDetlev Casanova ctrl = v4l2_ctrl_find(&ctx->ctrl_hdl, 1143*d968e50bSDetlev Casanova V4L2_CID_STATELESS_H264_DECODE_PARAMS); 1144*d968e50bSDetlev Casanova run->decode_params = ctrl ? ctrl->p_cur.p : NULL; 1145*d968e50bSDetlev Casanova ctrl = v4l2_ctrl_find(&ctx->ctrl_hdl, 1146*d968e50bSDetlev Casanova V4L2_CID_STATELESS_H264_SPS); 1147*d968e50bSDetlev Casanova run->sps = ctrl ? ctrl->p_cur.p : NULL; 1148*d968e50bSDetlev Casanova ctrl = v4l2_ctrl_find(&ctx->ctrl_hdl, 1149*d968e50bSDetlev Casanova V4L2_CID_STATELESS_H264_PPS); 1150*d968e50bSDetlev Casanova run->pps = ctrl ? ctrl->p_cur.p : NULL; 1151*d968e50bSDetlev Casanova ctrl = v4l2_ctrl_find(&ctx->ctrl_hdl, 1152*d968e50bSDetlev Casanova V4L2_CID_STATELESS_H264_SCALING_MATRIX); 1153*d968e50bSDetlev Casanova run->scaling_matrix = ctrl ? ctrl->p_cur.p : NULL; 1154*d968e50bSDetlev Casanova 1155*d968e50bSDetlev Casanova rkvdec_run_preamble(ctx, &run->base); 1156*d968e50bSDetlev Casanova } 1157*d968e50bSDetlev Casanova 1158*d968e50bSDetlev Casanova static int rkvdec_h264_run(struct rkvdec_ctx *ctx) 1159*d968e50bSDetlev Casanova { 1160*d968e50bSDetlev Casanova struct v4l2_h264_reflist_builder reflist_builder; 1161*d968e50bSDetlev Casanova struct rkvdec_dev *rkvdec = ctx->dev; 1162*d968e50bSDetlev Casanova struct rkvdec_h264_ctx *h264_ctx = ctx->priv; 1163*d968e50bSDetlev Casanova struct rkvdec_h264_run run; 1164*d968e50bSDetlev Casanova 1165*d968e50bSDetlev Casanova rkvdec_h264_run_preamble(ctx, &run); 1166*d968e50bSDetlev Casanova 1167*d968e50bSDetlev Casanova /* Build the P/B{0,1} ref lists. */ 1168*d968e50bSDetlev Casanova v4l2_h264_init_reflist_builder(&reflist_builder, run.decode_params, 1169*d968e50bSDetlev Casanova run.sps, run.decode_params->dpb); 1170*d968e50bSDetlev Casanova v4l2_h264_build_p_ref_list(&reflist_builder, h264_ctx->reflists.p); 1171*d968e50bSDetlev Casanova v4l2_h264_build_b_ref_lists(&reflist_builder, h264_ctx->reflists.b0, 1172*d968e50bSDetlev Casanova h264_ctx->reflists.b1); 1173*d968e50bSDetlev Casanova 1174*d968e50bSDetlev Casanova assemble_hw_scaling_list(ctx, &run); 1175*d968e50bSDetlev Casanova assemble_hw_pps(ctx, &run); 1176*d968e50bSDetlev Casanova lookup_ref_buf_idx(ctx, &run); 1177*d968e50bSDetlev Casanova assemble_hw_rps(ctx, &reflist_builder, &run); 1178*d968e50bSDetlev Casanova config_registers(ctx, &run); 1179*d968e50bSDetlev Casanova 1180*d968e50bSDetlev Casanova rkvdec_run_postamble(ctx, &run.base); 1181*d968e50bSDetlev Casanova 1182*d968e50bSDetlev Casanova schedule_delayed_work(&rkvdec->watchdog_work, msecs_to_jiffies(2000)); 1183*d968e50bSDetlev Casanova 1184*d968e50bSDetlev Casanova writel(0, rkvdec->regs + RKVDEC_REG_STRMD_ERR_EN); 1185*d968e50bSDetlev Casanova writel(0, rkvdec->regs + RKVDEC_REG_H264_ERR_E); 1186*d968e50bSDetlev Casanova writel(1, rkvdec->regs + RKVDEC_REG_PREF_LUMA_CACHE_COMMAND); 1187*d968e50bSDetlev Casanova writel(1, rkvdec->regs + RKVDEC_REG_PREF_CHR_CACHE_COMMAND); 1188*d968e50bSDetlev Casanova 1189*d968e50bSDetlev Casanova /* Start decoding! */ 1190*d968e50bSDetlev Casanova writel(RKVDEC_INTERRUPT_DEC_E | RKVDEC_CONFIG_DEC_CLK_GATE_E | 1191*d968e50bSDetlev Casanova RKVDEC_TIMEOUT_E | RKVDEC_BUF_EMPTY_E, 1192*d968e50bSDetlev Casanova rkvdec->regs + RKVDEC_REG_INTERRUPT); 1193*d968e50bSDetlev Casanova 1194*d968e50bSDetlev Casanova return 0; 1195*d968e50bSDetlev Casanova } 1196*d968e50bSDetlev Casanova 1197*d968e50bSDetlev Casanova static int rkvdec_h264_try_ctrl(struct rkvdec_ctx *ctx, struct v4l2_ctrl *ctrl) 1198*d968e50bSDetlev Casanova { 1199*d968e50bSDetlev Casanova if (ctrl->id == V4L2_CID_STATELESS_H264_SPS) 1200*d968e50bSDetlev Casanova return rkvdec_h264_validate_sps(ctx, ctrl->p_new.p_h264_sps); 1201*d968e50bSDetlev Casanova 1202*d968e50bSDetlev Casanova return 0; 1203*d968e50bSDetlev Casanova } 1204*d968e50bSDetlev Casanova 1205*d968e50bSDetlev Casanova const struct rkvdec_coded_fmt_ops rkvdec_h264_fmt_ops = { 1206*d968e50bSDetlev Casanova .adjust_fmt = rkvdec_h264_adjust_fmt, 1207*d968e50bSDetlev Casanova .start = rkvdec_h264_start, 1208*d968e50bSDetlev Casanova .stop = rkvdec_h264_stop, 1209*d968e50bSDetlev Casanova .run = rkvdec_h264_run, 1210*d968e50bSDetlev Casanova .try_ctrl = rkvdec_h264_try_ctrl, 1211*d968e50bSDetlev Casanova .get_image_fmt = rkvdec_h264_get_image_fmt, 1212*d968e50bSDetlev Casanova }; 1213