Coverage Report

Created: 2026-05-30 06:06

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/work/dav1d/src/env.h
Line
Count
Source
1
/*
2
 * Copyright © 2018, VideoLAN and dav1d authors
3
 * Copyright © 2018, Two Orioles, LLC
4
 * All rights reserved.
5
 *
6
 * Redistribution and use in source and binary forms, with or without
7
 * modification, are permitted provided that the following conditions are met:
8
 *
9
 * 1. Redistributions of source code must retain the above copyright notice, this
10
 *    list of conditions and the following disclaimer.
11
 *
12
 * 2. Redistributions in binary form must reproduce the above copyright notice,
13
 *    this list of conditions and the following disclaimer in the documentation
14
 *    and/or other materials provided with the distribution.
15
 *
16
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
17
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19
 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
20
 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26
 */
27
28
#ifndef DAV1D_SRC_ENV_H
29
#define DAV1D_SRC_ENV_H
30
31
#include <stddef.h>
32
#include <stdint.h>
33
#include <stdlib.h>
34
35
#include "src/levels.h"
36
#include "src/refmvs.h"
37
#include "src/tables.h"
38
39
typedef struct BlockContext {
40
    uint8_t ALIGN(mode[32], 8);
41
    uint8_t ALIGN(lcoef[32], 8);
42
    uint8_t ALIGN(ccoef[2][32], 8);
43
    uint8_t ALIGN(seg_pred[32], 8);
44
    uint8_t ALIGN(skip[32], 8);
45
    uint8_t ALIGN(skip_mode[32], 8);
46
    uint8_t ALIGN(intra[32], 8);
47
    uint8_t ALIGN(comp_type[32], 8);
48
    int8_t ALIGN(ref[2][32], 8); // -1 means intra
49
    uint8_t ALIGN(filter[2][32], 8); // 3 means unset
50
    int8_t ALIGN(tx_intra[32], 8);
51
    int8_t ALIGN(tx[32], 8);
52
    uint8_t ALIGN(tx_lpf_y[32], 8);
53
    uint8_t ALIGN(tx_lpf_uv[32], 8);
54
    uint8_t ALIGN(partition[16], 8);
55
    uint8_t ALIGN(uvmode[32], 8);
56
    uint8_t ALIGN(pal_sz[32], 8);
57
} BlockContext;
58
59
static inline int get_intra_ctx(const BlockContext *const a,
60
                                const BlockContext *const l,
61
                                const int yb4, const int xb4,
62
                                const int have_top, const int have_left)
63
70.9k
{
64
70.9k
    if (have_left) {
65
60.8k
        if (have_top) {
66
46.4k
            const int ctx = l->intra[yb4] + a->intra[xb4];
67
46.4k
            return ctx + (ctx == 2);
68
46.4k
        } else
69
14.3k
            return l->intra[yb4] * 2;
70
60.8k
    } else {
71
10.1k
        return have_top ? a->intra[xb4] * 2 : 0;
72
10.1k
    }
73
70.9k
}
Unexecuted instantiation: lib.c:get_intra_ctx
Unexecuted instantiation: log.c:get_intra_ctx
Unexecuted instantiation: mem.c:get_intra_ctx
Unexecuted instantiation: obu.c:get_intra_ctx
Unexecuted instantiation: picture.c:get_intra_ctx
Unexecuted instantiation: refmvs.c:get_intra_ctx
Unexecuted instantiation: thread_task.c:get_intra_ctx
Unexecuted instantiation: cdf.c:get_intra_ctx
decode.c:get_intra_ctx
Line
Count
Source
63
70.9k
{
64
70.9k
    if (have_left) {
65
60.8k
        if (have_top) {
66
46.4k
            const int ctx = l->intra[yb4] + a->intra[xb4];
67
46.4k
            return ctx + (ctx == 2);
68
46.4k
        } else
69
14.3k
            return l->intra[yb4] * 2;
70
60.8k
    } else {
71
10.1k
        return have_top ? a->intra[xb4] * 2 : 0;
72
10.1k
    }
73
70.9k
}
Unexecuted instantiation: recon_tmpl.c:get_intra_ctx
Unexecuted instantiation: cdef_apply_tmpl.c:get_intra_ctx
Unexecuted instantiation: ipred_prepare_tmpl.c:get_intra_ctx
Unexecuted instantiation: lf_apply_tmpl.c:get_intra_ctx
Unexecuted instantiation: lr_apply_tmpl.c:get_intra_ctx
74
75
static inline int get_tx_ctx(const BlockContext *const a,
76
                             const BlockContext *const l,
77
                             const TxfmInfo *const max_tx,
78
                             const int yb4, const int xb4)
79
124k
{
80
124k
    return (l->tx_intra[yb4] >= max_tx->lh) + (a->tx_intra[xb4] >= max_tx->lw);
81
124k
}
Unexecuted instantiation: lib.c:get_tx_ctx
Unexecuted instantiation: log.c:get_tx_ctx
Unexecuted instantiation: mem.c:get_tx_ctx
Unexecuted instantiation: obu.c:get_tx_ctx
Unexecuted instantiation: picture.c:get_tx_ctx
Unexecuted instantiation: refmvs.c:get_tx_ctx
Unexecuted instantiation: thread_task.c:get_tx_ctx
Unexecuted instantiation: cdf.c:get_tx_ctx
decode.c:get_tx_ctx
Line
Count
Source
79
124k
{
80
124k
    return (l->tx_intra[yb4] >= max_tx->lh) + (a->tx_intra[xb4] >= max_tx->lw);
81
124k
}
Unexecuted instantiation: recon_tmpl.c:get_tx_ctx
Unexecuted instantiation: cdef_apply_tmpl.c:get_tx_ctx
Unexecuted instantiation: ipred_prepare_tmpl.c:get_tx_ctx
Unexecuted instantiation: lf_apply_tmpl.c:get_tx_ctx
Unexecuted instantiation: lr_apply_tmpl.c:get_tx_ctx
82
83
static inline int get_partition_ctx(const BlockContext *const a,
84
                                    const BlockContext *const l,
85
                                    const enum BlockLevel bl,
86
                                    const int yb8, const int xb8)
87
724k
{
88
724k
    return ((a->partition[xb8] >> (4 - bl)) & 1) +
89
724k
          (((l->partition[yb8] >> (4 - bl)) & 1) << 1);
90
724k
}
Unexecuted instantiation: lib.c:get_partition_ctx
Unexecuted instantiation: log.c:get_partition_ctx
Unexecuted instantiation: mem.c:get_partition_ctx
Unexecuted instantiation: obu.c:get_partition_ctx
Unexecuted instantiation: picture.c:get_partition_ctx
Unexecuted instantiation: refmvs.c:get_partition_ctx
Unexecuted instantiation: thread_task.c:get_partition_ctx
Unexecuted instantiation: cdf.c:get_partition_ctx
decode.c:get_partition_ctx
Line
Count
Source
87
724k
{
88
724k
    return ((a->partition[xb8] >> (4 - bl)) & 1) +
89
724k
          (((l->partition[yb8] >> (4 - bl)) & 1) << 1);
90
724k
}
Unexecuted instantiation: recon_tmpl.c:get_partition_ctx
Unexecuted instantiation: cdef_apply_tmpl.c:get_partition_ctx
Unexecuted instantiation: ipred_prepare_tmpl.c:get_partition_ctx
Unexecuted instantiation: lf_apply_tmpl.c:get_partition_ctx
Unexecuted instantiation: lr_apply_tmpl.c:get_partition_ctx
91
92
static inline unsigned gather_left_partition_prob(const uint16_t *const in,
93
                                                  const enum BlockLevel bl)
94
205k
{
95
205k
    unsigned out = in[PARTITION_H - 1] - in[PARTITION_H];
96
    // Exploit the fact that cdfs for PARTITION_SPLIT, PARTITION_T_TOP_SPLIT,
97
    // PARTITION_T_BOTTOM_SPLIT and PARTITION_T_LEFT_SPLIT are neighbors.
98
205k
    out += in[PARTITION_SPLIT - 1] - in[PARTITION_T_LEFT_SPLIT];
99
205k
    if (bl != BL_128X128)
100
176k
        out += in[PARTITION_H4 - 1] - in[PARTITION_H4];
101
205k
    return out;
102
205k
}
Unexecuted instantiation: lib.c:gather_left_partition_prob
Unexecuted instantiation: log.c:gather_left_partition_prob
Unexecuted instantiation: mem.c:gather_left_partition_prob
Unexecuted instantiation: obu.c:gather_left_partition_prob
Unexecuted instantiation: picture.c:gather_left_partition_prob
Unexecuted instantiation: refmvs.c:gather_left_partition_prob
Unexecuted instantiation: thread_task.c:gather_left_partition_prob
Unexecuted instantiation: cdf.c:gather_left_partition_prob
decode.c:gather_left_partition_prob
Line
Count
Source
94
205k
{
95
205k
    unsigned out = in[PARTITION_H - 1] - in[PARTITION_H];
96
    // Exploit the fact that cdfs for PARTITION_SPLIT, PARTITION_T_TOP_SPLIT,
97
    // PARTITION_T_BOTTOM_SPLIT and PARTITION_T_LEFT_SPLIT are neighbors.
98
205k
    out += in[PARTITION_SPLIT - 1] - in[PARTITION_T_LEFT_SPLIT];
99
205k
    if (bl != BL_128X128)
100
176k
        out += in[PARTITION_H4 - 1] - in[PARTITION_H4];
101
205k
    return out;
102
205k
}
Unexecuted instantiation: recon_tmpl.c:gather_left_partition_prob
Unexecuted instantiation: cdef_apply_tmpl.c:gather_left_partition_prob
Unexecuted instantiation: ipred_prepare_tmpl.c:gather_left_partition_prob
Unexecuted instantiation: lf_apply_tmpl.c:gather_left_partition_prob
Unexecuted instantiation: lr_apply_tmpl.c:gather_left_partition_prob
103
104
static inline unsigned gather_top_partition_prob(const uint16_t *const in,
105
                                                 const enum BlockLevel bl)
106
243k
{
107
    // Exploit the fact that cdfs for PARTITION_V, PARTITION_SPLIT and
108
    // PARTITION_T_TOP_SPLIT are neighbors.
109
243k
    unsigned out = in[PARTITION_V - 1] - in[PARTITION_T_TOP_SPLIT];
110
    // Exploit the facts that cdfs for PARTITION_T_LEFT_SPLIT and
111
    // PARTITION_T_RIGHT_SPLIT are neighbors, the probability for
112
    // PARTITION_V4 is always zero, and the probability for
113
    // PARTITION_T_RIGHT_SPLIT is zero in 128x128 blocks.
114
243k
    out += in[PARTITION_T_LEFT_SPLIT - 1];
115
243k
    if (bl != BL_128X128)
116
236k
        out += in[PARTITION_V4 - 1] - in[PARTITION_T_RIGHT_SPLIT];
117
243k
    return out;
118
243k
}
Unexecuted instantiation: lib.c:gather_top_partition_prob
Unexecuted instantiation: log.c:gather_top_partition_prob
Unexecuted instantiation: mem.c:gather_top_partition_prob
Unexecuted instantiation: obu.c:gather_top_partition_prob
Unexecuted instantiation: picture.c:gather_top_partition_prob
Unexecuted instantiation: refmvs.c:gather_top_partition_prob
Unexecuted instantiation: thread_task.c:gather_top_partition_prob
Unexecuted instantiation: cdf.c:gather_top_partition_prob
decode.c:gather_top_partition_prob
Line
Count
Source
106
243k
{
107
    // Exploit the fact that cdfs for PARTITION_V, PARTITION_SPLIT and
108
    // PARTITION_T_TOP_SPLIT are neighbors.
109
243k
    unsigned out = in[PARTITION_V - 1] - in[PARTITION_T_TOP_SPLIT];
110
    // Exploit the facts that cdfs for PARTITION_T_LEFT_SPLIT and
111
    // PARTITION_T_RIGHT_SPLIT are neighbors, the probability for
112
    // PARTITION_V4 is always zero, and the probability for
113
    // PARTITION_T_RIGHT_SPLIT is zero in 128x128 blocks.
114
243k
    out += in[PARTITION_T_LEFT_SPLIT - 1];
115
243k
    if (bl != BL_128X128)
116
236k
        out += in[PARTITION_V4 - 1] - in[PARTITION_T_RIGHT_SPLIT];
117
243k
    return out;
118
243k
}
Unexecuted instantiation: recon_tmpl.c:gather_top_partition_prob
Unexecuted instantiation: cdef_apply_tmpl.c:gather_top_partition_prob
Unexecuted instantiation: ipred_prepare_tmpl.c:gather_top_partition_prob
Unexecuted instantiation: lf_apply_tmpl.c:gather_top_partition_prob
Unexecuted instantiation: lr_apply_tmpl.c:gather_top_partition_prob
119
120
static inline enum TxfmType get_uv_inter_txtp(const TxfmInfo *const uvt_dim,
121
                                              const enum TxfmType ytxtp)
122
22.6k
{
123
22.6k
    if (uvt_dim->max == TX_32X32)
124
4.91k
        return ytxtp == IDTX ? IDTX : DCT_DCT;
125
17.7k
    if (uvt_dim->min == TX_16X16 &&
126
1.12k
        ((1 << ytxtp) & ((1 << H_FLIPADST) | (1 << V_FLIPADST) |
127
1.12k
                         (1 << H_ADST) | (1 << V_ADST))))
128
50
    {
129
50
        return DCT_DCT;
130
50
    }
131
132
17.7k
    return ytxtp;
133
17.7k
}
Unexecuted instantiation: lib.c:get_uv_inter_txtp
Unexecuted instantiation: log.c:get_uv_inter_txtp
Unexecuted instantiation: mem.c:get_uv_inter_txtp
Unexecuted instantiation: obu.c:get_uv_inter_txtp
Unexecuted instantiation: picture.c:get_uv_inter_txtp
Unexecuted instantiation: refmvs.c:get_uv_inter_txtp
Unexecuted instantiation: thread_task.c:get_uv_inter_txtp
Unexecuted instantiation: cdf.c:get_uv_inter_txtp
Unexecuted instantiation: decode.c:get_uv_inter_txtp
recon_tmpl.c:get_uv_inter_txtp
Line
Count
Source
122
22.6k
{
123
22.6k
    if (uvt_dim->max == TX_32X32)
124
4.91k
        return ytxtp == IDTX ? IDTX : DCT_DCT;
125
17.7k
    if (uvt_dim->min == TX_16X16 &&
126
1.12k
        ((1 << ytxtp) & ((1 << H_FLIPADST) | (1 << V_FLIPADST) |
127
1.12k
                         (1 << H_ADST) | (1 << V_ADST))))
128
50
    {
129
50
        return DCT_DCT;
130
50
    }
131
132
17.7k
    return ytxtp;
133
17.7k
}
Unexecuted instantiation: cdef_apply_tmpl.c:get_uv_inter_txtp
Unexecuted instantiation: ipred_prepare_tmpl.c:get_uv_inter_txtp
Unexecuted instantiation: lf_apply_tmpl.c:get_uv_inter_txtp
Unexecuted instantiation: lr_apply_tmpl.c:get_uv_inter_txtp
134
135
static inline int get_filter_ctx(const BlockContext *const a,
136
                                 const BlockContext *const l,
137
                                 const int comp, const int dir, const int ref,
138
                                 const int yb4, const int xb4)
139
40.5k
{
140
40.5k
    const int a_filter = (a->ref[0][xb4] == ref || a->ref[1][xb4] == ref) ?
141
20.9k
                         a->filter[dir][xb4] : DAV1D_N_SWITCHABLE_FILTERS;
142
40.5k
    const int l_filter = (l->ref[0][yb4] == ref || l->ref[1][yb4] == ref) ?
143
28.6k
                         l->filter[dir][yb4] : DAV1D_N_SWITCHABLE_FILTERS;
144
145
40.5k
    if (a_filter == l_filter) {
146
21.8k
        return comp * 4 + a_filter;
147
21.8k
    } else if (a_filter == DAV1D_N_SWITCHABLE_FILTERS) {
148
12.5k
        return comp * 4 + l_filter;
149
12.5k
    } else if (l_filter == DAV1D_N_SWITCHABLE_FILTERS) {
150
4.86k
        return comp * 4 + a_filter;
151
4.86k
    } else {
152
1.26k
        return comp * 4 + DAV1D_N_SWITCHABLE_FILTERS;
153
1.26k
    }
154
40.5k
}
Unexecuted instantiation: lib.c:get_filter_ctx
Unexecuted instantiation: log.c:get_filter_ctx
Unexecuted instantiation: mem.c:get_filter_ctx
Unexecuted instantiation: obu.c:get_filter_ctx
Unexecuted instantiation: picture.c:get_filter_ctx
Unexecuted instantiation: refmvs.c:get_filter_ctx
Unexecuted instantiation: thread_task.c:get_filter_ctx
Unexecuted instantiation: cdf.c:get_filter_ctx
decode.c:get_filter_ctx
Line
Count
Source
139
40.5k
{
140
40.5k
    const int a_filter = (a->ref[0][xb4] == ref || a->ref[1][xb4] == ref) ?
141
20.9k
                         a->filter[dir][xb4] : DAV1D_N_SWITCHABLE_FILTERS;
142
40.5k
    const int l_filter = (l->ref[0][yb4] == ref || l->ref[1][yb4] == ref) ?
143
28.6k
                         l->filter[dir][yb4] : DAV1D_N_SWITCHABLE_FILTERS;
144
145
40.5k
    if (a_filter == l_filter) {
146
21.8k
        return comp * 4 + a_filter;
147
21.8k
    } else if (a_filter == DAV1D_N_SWITCHABLE_FILTERS) {
148
12.5k
        return comp * 4 + l_filter;
149
12.5k
    } else if (l_filter == DAV1D_N_SWITCHABLE_FILTERS) {
150
4.86k
        return comp * 4 + a_filter;
151
4.86k
    } else {
152
1.26k
        return comp * 4 + DAV1D_N_SWITCHABLE_FILTERS;
153
1.26k
    }
154
40.5k
}
Unexecuted instantiation: recon_tmpl.c:get_filter_ctx
Unexecuted instantiation: cdef_apply_tmpl.c:get_filter_ctx
Unexecuted instantiation: ipred_prepare_tmpl.c:get_filter_ctx
Unexecuted instantiation: lf_apply_tmpl.c:get_filter_ctx
Unexecuted instantiation: lr_apply_tmpl.c:get_filter_ctx
155
156
static inline int get_comp_ctx(const BlockContext *const a,
157
                               const BlockContext *const l,
158
                               const int yb4, const int xb4,
159
                               const int have_top, const int have_left)
160
25.2k
{
161
25.2k
    if (have_top) {
162
18.0k
        if (have_left) {
163
14.9k
            if (a->comp_type[xb4]) {
164
7.84k
                if (l->comp_type[yb4]) {
165
5.59k
                    return 4;
166
5.59k
                } else {
167
                    // 4U means intra (-1) or bwd (>= 4)
168
2.25k
                    return 2 + ((unsigned)l->ref[0][yb4] >= 4U);
169
2.25k
                }
170
7.84k
            } else if (l->comp_type[yb4]) {
171
                // 4U means intra (-1) or bwd (>= 4)
172
2.74k
                return 2 + ((unsigned)a->ref[0][xb4] >= 4U);
173
4.35k
            } else {
174
4.35k
                return (l->ref[0][yb4] >= 4) ^ (a->ref[0][xb4] >= 4);
175
4.35k
            }
176
14.9k
        } else {
177
3.08k
            return a->comp_type[xb4] ? 3 : a->ref[0][xb4] >= 4;
178
3.08k
        }
179
18.0k
    } else if (have_left) {
180
5.28k
        return l->comp_type[yb4] ? 3 : l->ref[0][yb4] >= 4;
181
5.28k
    } else {
182
1.94k
        return 1;
183
1.94k
    }
184
25.2k
}
Unexecuted instantiation: lib.c:get_comp_ctx
Unexecuted instantiation: log.c:get_comp_ctx
Unexecuted instantiation: mem.c:get_comp_ctx
Unexecuted instantiation: obu.c:get_comp_ctx
Unexecuted instantiation: picture.c:get_comp_ctx
Unexecuted instantiation: refmvs.c:get_comp_ctx
Unexecuted instantiation: thread_task.c:get_comp_ctx
Unexecuted instantiation: cdf.c:get_comp_ctx
decode.c:get_comp_ctx
Line
Count
Source
160
25.2k
{
161
25.2k
    if (have_top) {
162
18.0k
        if (have_left) {
163
14.9k
            if (a->comp_type[xb4]) {
164
7.84k
                if (l->comp_type[yb4]) {
165
5.59k
                    return 4;
166
5.59k
                } else {
167
                    // 4U means intra (-1) or bwd (>= 4)
168
2.25k
                    return 2 + ((unsigned)l->ref[0][yb4] >= 4U);
169
2.25k
                }
170
7.84k
            } else if (l->comp_type[yb4]) {
171
                // 4U means intra (-1) or bwd (>= 4)
172
2.74k
                return 2 + ((unsigned)a->ref[0][xb4] >= 4U);
173
4.35k
            } else {
174
4.35k
                return (l->ref[0][yb4] >= 4) ^ (a->ref[0][xb4] >= 4);
175
4.35k
            }
176
14.9k
        } else {
177
3.08k
            return a->comp_type[xb4] ? 3 : a->ref[0][xb4] >= 4;
178
3.08k
        }
179
18.0k
    } else if (have_left) {
180
5.28k
        return l->comp_type[yb4] ? 3 : l->ref[0][yb4] >= 4;
181
5.28k
    } else {
182
1.94k
        return 1;
183
1.94k
    }
184
25.2k
}
Unexecuted instantiation: recon_tmpl.c:get_comp_ctx
Unexecuted instantiation: cdef_apply_tmpl.c:get_comp_ctx
Unexecuted instantiation: ipred_prepare_tmpl.c:get_comp_ctx
Unexecuted instantiation: lf_apply_tmpl.c:get_comp_ctx
Unexecuted instantiation: lr_apply_tmpl.c:get_comp_ctx
185
186
static inline int get_comp_dir_ctx(const BlockContext *const a,
187
                                   const BlockContext *const l,
188
                                   const int yb4, const int xb4,
189
                                   const int have_top, const int have_left)
190
15.0k
{
191
15.0k
#define has_uni_comp(edge, off) \
192
16.9k
    ((edge->ref[0][off] < 4) == (edge->ref[1][off] < 4))
193
194
15.0k
    if (have_top && have_left) {
195
9.91k
        const int a_intra = a->intra[xb4], l_intra = l->intra[yb4];
196
197
9.91k
        if (a_intra && l_intra) return 2;
198
9.88k
        if (a_intra || l_intra) {
199
312
            const BlockContext *const edge = a_intra ? l : a;
200
312
            const int off = a_intra ? yb4 : xb4;
201
202
312
            if (edge->comp_type[off] == COMP_INTER_NONE) return 2;
203
217
            return 1 + 2 * has_uni_comp(edge, off);
204
312
        }
205
206
9.57k
        const int a_comp = a->comp_type[xb4] != COMP_INTER_NONE;
207
9.57k
        const int l_comp = l->comp_type[yb4] != COMP_INTER_NONE;
208
9.57k
        const int a_ref0 = a->ref[0][xb4], l_ref0 = l->ref[0][yb4];
209
210
9.57k
        if (!a_comp && !l_comp) {
211
890
            return 1 + 2 * ((a_ref0 >= 4) == (l_ref0 >= 4));
212
8.68k
        } else if (!a_comp || !l_comp) {
213
3.44k
            const BlockContext *const edge = a_comp ? a : l;
214
3.44k
            const int off = a_comp ? xb4 : yb4;
215
216
3.44k
            if (!has_uni_comp(edge, off)) return 1;
217
535
            return 3 + ((a_ref0 >= 4) == (l_ref0 >= 4));
218
5.24k
        } else {
219
5.24k
            const int a_uni = has_uni_comp(a, xb4), l_uni = has_uni_comp(l, yb4);
220
221
5.24k
            if (!a_uni && !l_uni) return 0;
222
1.27k
            if (!a_uni || !l_uni) return 2;
223
431
            return 3 + ((a_ref0 == 4) == (l_ref0 == 4));
224
1.27k
        }
225
9.57k
    } else if (have_top || have_left) {
226
4.12k
        const BlockContext *const edge = have_left ? l : a;
227
4.12k
        const int off = have_left ? yb4 : xb4;
228
229
4.12k
        if (edge->intra[off]) return 2;
230
4.08k
        if (edge->comp_type[off] == COMP_INTER_NONE) return 2;
231
2.84k
        return 4 * has_uni_comp(edge, off);
232
4.08k
    } else {
233
1.00k
        return 2;
234
1.00k
    }
235
15.0k
}
Unexecuted instantiation: lib.c:get_comp_dir_ctx
Unexecuted instantiation: log.c:get_comp_dir_ctx
Unexecuted instantiation: mem.c:get_comp_dir_ctx
Unexecuted instantiation: obu.c:get_comp_dir_ctx
Unexecuted instantiation: picture.c:get_comp_dir_ctx
Unexecuted instantiation: refmvs.c:get_comp_dir_ctx
Unexecuted instantiation: thread_task.c:get_comp_dir_ctx
Unexecuted instantiation: cdf.c:get_comp_dir_ctx
decode.c:get_comp_dir_ctx
Line
Count
Source
190
15.0k
{
191
15.0k
#define has_uni_comp(edge, off) \
192
15.0k
    ((edge->ref[0][off] < 4) == (edge->ref[1][off] < 4))
193
194
15.0k
    if (have_top && have_left) {
195
9.91k
        const int a_intra = a->intra[xb4], l_intra = l->intra[yb4];
196
197
9.91k
        if (a_intra && l_intra) return 2;
198
9.88k
        if (a_intra || l_intra) {
199
312
            const BlockContext *const edge = a_intra ? l : a;
200
312
            const int off = a_intra ? yb4 : xb4;
201
202
312
            if (edge->comp_type[off] == COMP_INTER_NONE) return 2;
203
217
            return 1 + 2 * has_uni_comp(edge, off);
204
312
        }
205
206
9.57k
        const int a_comp = a->comp_type[xb4] != COMP_INTER_NONE;
207
9.57k
        const int l_comp = l->comp_type[yb4] != COMP_INTER_NONE;
208
9.57k
        const int a_ref0 = a->ref[0][xb4], l_ref0 = l->ref[0][yb4];
209
210
9.57k
        if (!a_comp && !l_comp) {
211
890
            return 1 + 2 * ((a_ref0 >= 4) == (l_ref0 >= 4));
212
8.68k
        } else if (!a_comp || !l_comp) {
213
3.44k
            const BlockContext *const edge = a_comp ? a : l;
214
3.44k
            const int off = a_comp ? xb4 : yb4;
215
216
3.44k
            if (!has_uni_comp(edge, off)) return 1;
217
535
            return 3 + ((a_ref0 >= 4) == (l_ref0 >= 4));
218
5.24k
        } else {
219
5.24k
            const int a_uni = has_uni_comp(a, xb4), l_uni = has_uni_comp(l, yb4);
220
221
5.24k
            if (!a_uni && !l_uni) return 0;
222
1.27k
            if (!a_uni || !l_uni) return 2;
223
431
            return 3 + ((a_ref0 == 4) == (l_ref0 == 4));
224
1.27k
        }
225
9.57k
    } else if (have_top || have_left) {
226
4.12k
        const BlockContext *const edge = have_left ? l : a;
227
4.12k
        const int off = have_left ? yb4 : xb4;
228
229
4.12k
        if (edge->intra[off]) return 2;
230
4.08k
        if (edge->comp_type[off] == COMP_INTER_NONE) return 2;
231
2.84k
        return 4 * has_uni_comp(edge, off);
232
4.08k
    } else {
233
1.00k
        return 2;
234
1.00k
    }
235
15.0k
}
Unexecuted instantiation: recon_tmpl.c:get_comp_dir_ctx
Unexecuted instantiation: cdef_apply_tmpl.c:get_comp_dir_ctx
Unexecuted instantiation: ipred_prepare_tmpl.c:get_comp_dir_ctx
Unexecuted instantiation: lf_apply_tmpl.c:get_comp_dir_ctx
Unexecuted instantiation: lr_apply_tmpl.c:get_comp_dir_ctx
236
237
static inline int get_poc_diff(const int order_hint_n_bits,
238
                               const int poc0, const int poc1)
239
234k
{
240
234k
    if (!order_hint_n_bits) return 0;
241
135k
    const int mask = 1 << (order_hint_n_bits - 1);
242
135k
    const int diff = poc0 - poc1;
243
135k
    return (diff & (mask - 1)) - (diff & mask);
244
234k
}
Unexecuted instantiation: lib.c:get_poc_diff
Unexecuted instantiation: log.c:get_poc_diff
Unexecuted instantiation: mem.c:get_poc_diff
obu.c:get_poc_diff
Line
Count
Source
239
30.2k
{
240
30.2k
    if (!order_hint_n_bits) return 0;
241
30.2k
    const int mask = 1 << (order_hint_n_bits - 1);
242
30.2k
    const int diff = poc0 - poc1;
243
30.2k
    return (diff & (mask - 1)) - (diff & mask);
244
30.2k
}
Unexecuted instantiation: picture.c:get_poc_diff
refmvs.c:get_poc_diff
Line
Count
Source
239
96.2k
{
240
96.2k
    if (!order_hint_n_bits) return 0;
241
39.1k
    const int mask = 1 << (order_hint_n_bits - 1);
242
39.1k
    const int diff = poc0 - poc1;
243
39.1k
    return (diff & (mask - 1)) - (diff & mask);
244
96.2k
}
Unexecuted instantiation: thread_task.c:get_poc_diff
Unexecuted instantiation: cdf.c:get_poc_diff
decode.c:get_poc_diff
Line
Count
Source
239
108k
{
240
108k
    if (!order_hint_n_bits) return 0;
241
65.8k
    const int mask = 1 << (order_hint_n_bits - 1);
242
65.8k
    const int diff = poc0 - poc1;
243
65.8k
    return (diff & (mask - 1)) - (diff & mask);
244
108k
}
Unexecuted instantiation: recon_tmpl.c:get_poc_diff
Unexecuted instantiation: cdef_apply_tmpl.c:get_poc_diff
Unexecuted instantiation: ipred_prepare_tmpl.c:get_poc_diff
Unexecuted instantiation: lf_apply_tmpl.c:get_poc_diff
Unexecuted instantiation: lr_apply_tmpl.c:get_poc_diff
245
246
static inline int get_jnt_comp_ctx(const int order_hint_n_bits, const int poc,
247
                                   const int ref0poc, const int ref1poc,
248
                                   const BlockContext *const a,
249
                                   const BlockContext *const l,
250
                                   const int yb4, const int xb4)
251
3.76k
{
252
3.76k
    const int d0 = abs(get_poc_diff(order_hint_n_bits, ref0poc, poc));
253
3.76k
    const int d1 = abs(get_poc_diff(order_hint_n_bits, poc, ref1poc));
254
3.76k
    const int offset = d0 == d1;
255
3.76k
    const int a_ctx = a->comp_type[xb4] >= COMP_INTER_AVG ||
256
2.21k
                      a->ref[0][xb4] == 6;
257
3.76k
    const int l_ctx = l->comp_type[yb4] >= COMP_INTER_AVG ||
258
2.33k
                      l->ref[0][yb4] == 6;
259
260
3.76k
    return 3 * offset + a_ctx + l_ctx;
261
3.76k
}
Unexecuted instantiation: lib.c:get_jnt_comp_ctx
Unexecuted instantiation: log.c:get_jnt_comp_ctx
Unexecuted instantiation: mem.c:get_jnt_comp_ctx
Unexecuted instantiation: obu.c:get_jnt_comp_ctx
Unexecuted instantiation: picture.c:get_jnt_comp_ctx
Unexecuted instantiation: refmvs.c:get_jnt_comp_ctx
Unexecuted instantiation: thread_task.c:get_jnt_comp_ctx
Unexecuted instantiation: cdf.c:get_jnt_comp_ctx
decode.c:get_jnt_comp_ctx
Line
Count
Source
251
3.76k
{
252
3.76k
    const int d0 = abs(get_poc_diff(order_hint_n_bits, ref0poc, poc));
253
3.76k
    const int d1 = abs(get_poc_diff(order_hint_n_bits, poc, ref1poc));
254
3.76k
    const int offset = d0 == d1;
255
3.76k
    const int a_ctx = a->comp_type[xb4] >= COMP_INTER_AVG ||
256
2.21k
                      a->ref[0][xb4] == 6;
257
3.76k
    const int l_ctx = l->comp_type[yb4] >= COMP_INTER_AVG ||
258
2.33k
                      l->ref[0][yb4] == 6;
259
260
3.76k
    return 3 * offset + a_ctx + l_ctx;
261
3.76k
}
Unexecuted instantiation: recon_tmpl.c:get_jnt_comp_ctx
Unexecuted instantiation: cdef_apply_tmpl.c:get_jnt_comp_ctx
Unexecuted instantiation: ipred_prepare_tmpl.c:get_jnt_comp_ctx
Unexecuted instantiation: lf_apply_tmpl.c:get_jnt_comp_ctx
Unexecuted instantiation: lr_apply_tmpl.c:get_jnt_comp_ctx
262
263
static inline int get_mask_comp_ctx(const BlockContext *const a,
264
                                    const BlockContext *const l,
265
                                    const int yb4, const int xb4)
266
11.0k
{
267
11.0k
    const int a_ctx = a->comp_type[xb4] >= COMP_INTER_SEG ? 1 :
268
11.0k
                      a->ref[0][xb4] == 6 ? 3 : 0;
269
11.0k
    const int l_ctx = l->comp_type[yb4] >= COMP_INTER_SEG ? 1 :
270
11.0k
                      l->ref[0][yb4] == 6 ? 3 : 0;
271
272
11.0k
    return imin(a_ctx + l_ctx, 5);
273
11.0k
}
Unexecuted instantiation: lib.c:get_mask_comp_ctx
Unexecuted instantiation: log.c:get_mask_comp_ctx
Unexecuted instantiation: mem.c:get_mask_comp_ctx
Unexecuted instantiation: obu.c:get_mask_comp_ctx
Unexecuted instantiation: picture.c:get_mask_comp_ctx
Unexecuted instantiation: refmvs.c:get_mask_comp_ctx
Unexecuted instantiation: thread_task.c:get_mask_comp_ctx
Unexecuted instantiation: cdf.c:get_mask_comp_ctx
decode.c:get_mask_comp_ctx
Line
Count
Source
266
11.0k
{
267
11.0k
    const int a_ctx = a->comp_type[xb4] >= COMP_INTER_SEG ? 1 :
268
11.0k
                      a->ref[0][xb4] == 6 ? 3 : 0;
269
11.0k
    const int l_ctx = l->comp_type[yb4] >= COMP_INTER_SEG ? 1 :
270
11.0k
                      l->ref[0][yb4] == 6 ? 3 : 0;
271
272
11.0k
    return imin(a_ctx + l_ctx, 5);
273
11.0k
}
Unexecuted instantiation: recon_tmpl.c:get_mask_comp_ctx
Unexecuted instantiation: cdef_apply_tmpl.c:get_mask_comp_ctx
Unexecuted instantiation: ipred_prepare_tmpl.c:get_mask_comp_ctx
Unexecuted instantiation: lf_apply_tmpl.c:get_mask_comp_ctx
Unexecuted instantiation: lr_apply_tmpl.c:get_mask_comp_ctx
274
275
28.6k
#define av1_get_ref_2_ctx av1_get_bwd_ref_ctx
276
21.3k
#define av1_get_ref_3_ctx av1_get_fwd_ref_ctx
277
14.0k
#define av1_get_ref_4_ctx av1_get_fwd_ref_1_ctx
278
7.37k
#define av1_get_ref_5_ctx av1_get_fwd_ref_2_ctx
279
7.34k
#define av1_get_ref_6_ctx av1_get_bwd_ref_1_ctx
280
2.49k
#define av1_get_uni_p_ctx av1_get_ref_ctx
281
1.05k
#define av1_get_uni_p2_ctx av1_get_fwd_ref_2_ctx
282
283
static inline int av1_get_ref_ctx(const BlockContext *const a,
284
                                  const BlockContext *const l,
285
                                  const int yb4, const int xb4,
286
                                  int have_top, int have_left)
287
53.4k
{
288
53.4k
    int cnt[2] = { 0 };
289
290
53.4k
    if (have_top && !a->intra[xb4]) {
291
38.1k
        cnt[a->ref[0][xb4] >= 4]++;
292
38.1k
        if (a->comp_type[xb4]) cnt[a->ref[1][xb4] >= 4]++;
293
38.1k
    }
294
295
53.4k
    if (have_left && !l->intra[yb4]) {
296
44.9k
        cnt[l->ref[0][yb4] >= 4]++;
297
44.9k
        if (l->comp_type[yb4]) cnt[l->ref[1][yb4] >= 4]++;
298
44.9k
    }
299
300
53.4k
    return cnt[0] == cnt[1] ? 1 : cnt[0] < cnt[1] ? 0 : 2;
301
53.4k
}
Unexecuted instantiation: lib.c:av1_get_ref_ctx
Unexecuted instantiation: log.c:av1_get_ref_ctx
Unexecuted instantiation: mem.c:av1_get_ref_ctx
Unexecuted instantiation: obu.c:av1_get_ref_ctx
Unexecuted instantiation: picture.c:av1_get_ref_ctx
Unexecuted instantiation: refmvs.c:av1_get_ref_ctx
Unexecuted instantiation: thread_task.c:av1_get_ref_ctx
Unexecuted instantiation: cdf.c:av1_get_ref_ctx
decode.c:av1_get_ref_ctx
Line
Count
Source
287
53.4k
{
288
53.4k
    int cnt[2] = { 0 };
289
290
53.4k
    if (have_top && !a->intra[xb4]) {
291
38.1k
        cnt[a->ref[0][xb4] >= 4]++;
292
38.1k
        if (a->comp_type[xb4]) cnt[a->ref[1][xb4] >= 4]++;
293
38.1k
    }
294
295
53.4k
    if (have_left && !l->intra[yb4]) {
296
44.9k
        cnt[l->ref[0][yb4] >= 4]++;
297
44.9k
        if (l->comp_type[yb4]) cnt[l->ref[1][yb4] >= 4]++;
298
44.9k
    }
299
300
53.4k
    return cnt[0] == cnt[1] ? 1 : cnt[0] < cnt[1] ? 0 : 2;
301
53.4k
}
Unexecuted instantiation: recon_tmpl.c:av1_get_ref_ctx
Unexecuted instantiation: cdef_apply_tmpl.c:av1_get_ref_ctx
Unexecuted instantiation: ipred_prepare_tmpl.c:av1_get_ref_ctx
Unexecuted instantiation: lf_apply_tmpl.c:av1_get_ref_ctx
Unexecuted instantiation: lr_apply_tmpl.c:av1_get_ref_ctx
302
303
static inline int av1_get_fwd_ref_ctx(const BlockContext *const a,
304
                                      const BlockContext *const l,
305
                                      const int yb4, const int xb4,
306
                                      const int have_top, const int have_left)
307
34.7k
{
308
34.7k
    int cnt[4] = { 0 };
309
310
34.7k
    if (have_top && !a->intra[xb4]) {
311
26.2k
        if (a->ref[0][xb4] < 4) cnt[a->ref[0][xb4]]++;
312
26.2k
        if (a->comp_type[xb4] && a->ref[1][xb4] < 4) cnt[a->ref[1][xb4]]++;
313
26.2k
    }
314
315
34.7k
    if (have_left && !l->intra[yb4]) {
316
28.8k
        if (l->ref[0][yb4] < 4) cnt[l->ref[0][yb4]]++;
317
28.8k
        if (l->comp_type[yb4] && l->ref[1][yb4] < 4) cnt[l->ref[1][yb4]]++;
318
28.8k
    }
319
320
34.7k
    cnt[0] += cnt[1];
321
34.7k
    cnt[2] += cnt[3];
322
323
34.7k
    return cnt[0] == cnt[2] ? 1 : cnt[0] < cnt[2] ? 0 : 2;
324
34.7k
}
Unexecuted instantiation: lib.c:av1_get_fwd_ref_ctx
Unexecuted instantiation: log.c:av1_get_fwd_ref_ctx
Unexecuted instantiation: mem.c:av1_get_fwd_ref_ctx
Unexecuted instantiation: obu.c:av1_get_fwd_ref_ctx
Unexecuted instantiation: picture.c:av1_get_fwd_ref_ctx
Unexecuted instantiation: refmvs.c:av1_get_fwd_ref_ctx
Unexecuted instantiation: thread_task.c:av1_get_fwd_ref_ctx
Unexecuted instantiation: cdf.c:av1_get_fwd_ref_ctx
decode.c:av1_get_fwd_ref_ctx
Line
Count
Source
307
34.7k
{
308
34.7k
    int cnt[4] = { 0 };
309
310
34.7k
    if (have_top && !a->intra[xb4]) {
311
26.2k
        if (a->ref[0][xb4] < 4) cnt[a->ref[0][xb4]]++;
312
26.2k
        if (a->comp_type[xb4] && a->ref[1][xb4] < 4) cnt[a->ref[1][xb4]]++;
313
26.2k
    }
314
315
34.7k
    if (have_left && !l->intra[yb4]) {
316
28.8k
        if (l->ref[0][yb4] < 4) cnt[l->ref[0][yb4]]++;
317
28.8k
        if (l->comp_type[yb4] && l->ref[1][yb4] < 4) cnt[l->ref[1][yb4]]++;
318
28.8k
    }
319
320
34.7k
    cnt[0] += cnt[1];
321
34.7k
    cnt[2] += cnt[3];
322
323
34.7k
    return cnt[0] == cnt[2] ? 1 : cnt[0] < cnt[2] ? 0 : 2;
324
34.7k
}
Unexecuted instantiation: recon_tmpl.c:av1_get_fwd_ref_ctx
Unexecuted instantiation: cdef_apply_tmpl.c:av1_get_fwd_ref_ctx
Unexecuted instantiation: ipred_prepare_tmpl.c:av1_get_fwd_ref_ctx
Unexecuted instantiation: lf_apply_tmpl.c:av1_get_fwd_ref_ctx
Unexecuted instantiation: lr_apply_tmpl.c:av1_get_fwd_ref_ctx
325
326
static inline int av1_get_fwd_ref_1_ctx(const BlockContext *const a,
327
                                        const BlockContext *const l,
328
                                        const int yb4, const int xb4,
329
                                        const int have_top, const int have_left)
330
22.1k
{
331
22.1k
    int cnt[2] = { 0 };
332
333
22.1k
    if (have_top && !a->intra[xb4]) {
334
16.9k
        if (a->ref[0][xb4] < 2) cnt[a->ref[0][xb4]]++;
335
16.9k
        if (a->comp_type[xb4] && a->ref[1][xb4] < 2) cnt[a->ref[1][xb4]]++;
336
16.9k
    }
337
338
22.1k
    if (have_left && !l->intra[yb4]) {
339
18.4k
        if (l->ref[0][yb4] < 2) cnt[l->ref[0][yb4]]++;
340
18.4k
        if (l->comp_type[yb4] && l->ref[1][yb4] < 2) cnt[l->ref[1][yb4]]++;
341
18.4k
    }
342
343
22.1k
    return cnt[0] == cnt[1] ? 1 : cnt[0] < cnt[1] ? 0 : 2;
344
22.1k
}
Unexecuted instantiation: lib.c:av1_get_fwd_ref_1_ctx
Unexecuted instantiation: log.c:av1_get_fwd_ref_1_ctx
Unexecuted instantiation: mem.c:av1_get_fwd_ref_1_ctx
Unexecuted instantiation: obu.c:av1_get_fwd_ref_1_ctx
Unexecuted instantiation: picture.c:av1_get_fwd_ref_1_ctx
Unexecuted instantiation: refmvs.c:av1_get_fwd_ref_1_ctx
Unexecuted instantiation: thread_task.c:av1_get_fwd_ref_1_ctx
Unexecuted instantiation: cdf.c:av1_get_fwd_ref_1_ctx
decode.c:av1_get_fwd_ref_1_ctx
Line
Count
Source
330
22.1k
{
331
22.1k
    int cnt[2] = { 0 };
332
333
22.1k
    if (have_top && !a->intra[xb4]) {
334
16.9k
        if (a->ref[0][xb4] < 2) cnt[a->ref[0][xb4]]++;
335
16.9k
        if (a->comp_type[xb4] && a->ref[1][xb4] < 2) cnt[a->ref[1][xb4]]++;
336
16.9k
    }
337
338
22.1k
    if (have_left && !l->intra[yb4]) {
339
18.4k
        if (l->ref[0][yb4] < 2) cnt[l->ref[0][yb4]]++;
340
18.4k
        if (l->comp_type[yb4] && l->ref[1][yb4] < 2) cnt[l->ref[1][yb4]]++;
341
18.4k
    }
342
343
22.1k
    return cnt[0] == cnt[1] ? 1 : cnt[0] < cnt[1] ? 0 : 2;
344
22.1k
}
Unexecuted instantiation: recon_tmpl.c:av1_get_fwd_ref_1_ctx
Unexecuted instantiation: cdef_apply_tmpl.c:av1_get_fwd_ref_1_ctx
Unexecuted instantiation: ipred_prepare_tmpl.c:av1_get_fwd_ref_1_ctx
Unexecuted instantiation: lf_apply_tmpl.c:av1_get_fwd_ref_1_ctx
Unexecuted instantiation: lr_apply_tmpl.c:av1_get_fwd_ref_1_ctx
345
346
static inline int av1_get_fwd_ref_2_ctx(const BlockContext *const a,
347
                                        const BlockContext *const l,
348
                                        const int yb4, const int xb4,
349
                                        const int have_top, const int have_left)
350
13.7k
{
351
13.7k
    int cnt[2] = { 0 };
352
353
13.7k
    if (have_top && !a->intra[xb4]) {
354
10.0k
        if ((a->ref[0][xb4] ^ 2U) < 2) cnt[a->ref[0][xb4] - 2]++;
355
10.0k
        if (a->comp_type[xb4] && (a->ref[1][xb4] ^ 2U) < 2) cnt[a->ref[1][xb4] - 2]++;
356
10.0k
    }
357
358
13.7k
    if (have_left && !l->intra[yb4]) {
359
11.2k
        if ((l->ref[0][yb4] ^ 2U) < 2) cnt[l->ref[0][yb4] - 2]++;
360
11.2k
        if (l->comp_type[yb4] && (l->ref[1][yb4] ^ 2U) < 2) cnt[l->ref[1][yb4] - 2]++;
361
11.2k
    }
362
363
13.7k
    return cnt[0] == cnt[1] ? 1 : cnt[0] < cnt[1] ? 0 : 2;
364
13.7k
}
Unexecuted instantiation: lib.c:av1_get_fwd_ref_2_ctx
Unexecuted instantiation: log.c:av1_get_fwd_ref_2_ctx
Unexecuted instantiation: mem.c:av1_get_fwd_ref_2_ctx
Unexecuted instantiation: obu.c:av1_get_fwd_ref_2_ctx
Unexecuted instantiation: picture.c:av1_get_fwd_ref_2_ctx
Unexecuted instantiation: refmvs.c:av1_get_fwd_ref_2_ctx
Unexecuted instantiation: thread_task.c:av1_get_fwd_ref_2_ctx
Unexecuted instantiation: cdf.c:av1_get_fwd_ref_2_ctx
decode.c:av1_get_fwd_ref_2_ctx
Line
Count
Source
350
13.7k
{
351
13.7k
    int cnt[2] = { 0 };
352
353
13.7k
    if (have_top && !a->intra[xb4]) {
354
10.0k
        if ((a->ref[0][xb4] ^ 2U) < 2) cnt[a->ref[0][xb4] - 2]++;
355
10.0k
        if (a->comp_type[xb4] && (a->ref[1][xb4] ^ 2U) < 2) cnt[a->ref[1][xb4] - 2]++;
356
10.0k
    }
357
358
13.7k
    if (have_left && !l->intra[yb4]) {
359
11.2k
        if ((l->ref[0][yb4] ^ 2U) < 2) cnt[l->ref[0][yb4] - 2]++;
360
11.2k
        if (l->comp_type[yb4] && (l->ref[1][yb4] ^ 2U) < 2) cnt[l->ref[1][yb4] - 2]++;
361
11.2k
    }
362
363
13.7k
    return cnt[0] == cnt[1] ? 1 : cnt[0] < cnt[1] ? 0 : 2;
364
13.7k
}
Unexecuted instantiation: recon_tmpl.c:av1_get_fwd_ref_2_ctx
Unexecuted instantiation: cdef_apply_tmpl.c:av1_get_fwd_ref_2_ctx
Unexecuted instantiation: ipred_prepare_tmpl.c:av1_get_fwd_ref_2_ctx
Unexecuted instantiation: lf_apply_tmpl.c:av1_get_fwd_ref_2_ctx
Unexecuted instantiation: lr_apply_tmpl.c:av1_get_fwd_ref_2_ctx
365
366
static inline int av1_get_bwd_ref_ctx(const BlockContext *const a,
367
                                      const BlockContext *const l,
368
                                      const int yb4, const int xb4,
369
                                      const int have_top, const int have_left)
370
41.2k
{
371
41.2k
    int cnt[3] = { 0 };
372
373
41.2k
    if (have_top && !a->intra[xb4]) {
374
29.2k
        if (a->ref[0][xb4] >= 4) cnt[a->ref[0][xb4] - 4]++;
375
29.2k
        if (a->comp_type[xb4] && a->ref[1][xb4] >= 4) cnt[a->ref[1][xb4] - 4]++;
376
29.2k
    }
377
378
41.2k
    if (have_left && !l->intra[yb4]) {
379
35.0k
        if (l->ref[0][yb4] >= 4) cnt[l->ref[0][yb4] - 4]++;
380
35.0k
        if (l->comp_type[yb4] && l->ref[1][yb4] >= 4) cnt[l->ref[1][yb4] - 4]++;
381
35.0k
    }
382
383
41.2k
    cnt[1] += cnt[0];
384
385
41.2k
    return cnt[2] == cnt[1] ? 1 : cnt[1] < cnt[2] ? 0 : 2;
386
41.2k
}
Unexecuted instantiation: lib.c:av1_get_bwd_ref_ctx
Unexecuted instantiation: log.c:av1_get_bwd_ref_ctx
Unexecuted instantiation: mem.c:av1_get_bwd_ref_ctx
Unexecuted instantiation: obu.c:av1_get_bwd_ref_ctx
Unexecuted instantiation: picture.c:av1_get_bwd_ref_ctx
Unexecuted instantiation: refmvs.c:av1_get_bwd_ref_ctx
Unexecuted instantiation: thread_task.c:av1_get_bwd_ref_ctx
Unexecuted instantiation: cdf.c:av1_get_bwd_ref_ctx
decode.c:av1_get_bwd_ref_ctx
Line
Count
Source
370
41.2k
{
371
41.2k
    int cnt[3] = { 0 };
372
373
41.2k
    if (have_top && !a->intra[xb4]) {
374
29.2k
        if (a->ref[0][xb4] >= 4) cnt[a->ref[0][xb4] - 4]++;
375
29.2k
        if (a->comp_type[xb4] && a->ref[1][xb4] >= 4) cnt[a->ref[1][xb4] - 4]++;
376
29.2k
    }
377
378
41.2k
    if (have_left && !l->intra[yb4]) {
379
35.0k
        if (l->ref[0][yb4] >= 4) cnt[l->ref[0][yb4] - 4]++;
380
35.0k
        if (l->comp_type[yb4] && l->ref[1][yb4] >= 4) cnt[l->ref[1][yb4] - 4]++;
381
35.0k
    }
382
383
41.2k
    cnt[1] += cnt[0];
384
385
41.2k
    return cnt[2] == cnt[1] ? 1 : cnt[1] < cnt[2] ? 0 : 2;
386
41.2k
}
Unexecuted instantiation: recon_tmpl.c:av1_get_bwd_ref_ctx
Unexecuted instantiation: cdef_apply_tmpl.c:av1_get_bwd_ref_ctx
Unexecuted instantiation: ipred_prepare_tmpl.c:av1_get_bwd_ref_ctx
Unexecuted instantiation: lf_apply_tmpl.c:av1_get_bwd_ref_ctx
Unexecuted instantiation: lr_apply_tmpl.c:av1_get_bwd_ref_ctx
387
388
static inline int av1_get_bwd_ref_1_ctx(const BlockContext *const a,
389
                                        const BlockContext *const l,
390
                                        const int yb4, const int xb4,
391
                                        const int have_top, const int have_left)
392
12.9k
{
393
12.9k
    int cnt[3] = { 0 };
394
395
12.9k
    if (have_top && !a->intra[xb4]) {
396
9.65k
        if (a->ref[0][xb4] >= 4) cnt[a->ref[0][xb4] - 4]++;
397
9.65k
        if (a->comp_type[xb4] && a->ref[1][xb4] >= 4) cnt[a->ref[1][xb4] - 4]++;
398
9.65k
    }
399
400
12.9k
    if (have_left && !l->intra[yb4]) {
401
10.4k
        if (l->ref[0][yb4] >= 4) cnt[l->ref[0][yb4] - 4]++;
402
10.4k
        if (l->comp_type[yb4] && l->ref[1][yb4] >= 4) cnt[l->ref[1][yb4] - 4]++;
403
10.4k
    }
404
405
12.9k
    return cnt[0] == cnt[1] ? 1 : cnt[0] < cnt[1] ? 0 : 2;
406
12.9k
}
Unexecuted instantiation: lib.c:av1_get_bwd_ref_1_ctx
Unexecuted instantiation: log.c:av1_get_bwd_ref_1_ctx
Unexecuted instantiation: mem.c:av1_get_bwd_ref_1_ctx
Unexecuted instantiation: obu.c:av1_get_bwd_ref_1_ctx
Unexecuted instantiation: picture.c:av1_get_bwd_ref_1_ctx
Unexecuted instantiation: refmvs.c:av1_get_bwd_ref_1_ctx
Unexecuted instantiation: thread_task.c:av1_get_bwd_ref_1_ctx
Unexecuted instantiation: cdf.c:av1_get_bwd_ref_1_ctx
decode.c:av1_get_bwd_ref_1_ctx
Line
Count
Source
392
12.9k
{
393
12.9k
    int cnt[3] = { 0 };
394
395
12.9k
    if (have_top && !a->intra[xb4]) {
396
9.65k
        if (a->ref[0][xb4] >= 4) cnt[a->ref[0][xb4] - 4]++;
397
9.65k
        if (a->comp_type[xb4] && a->ref[1][xb4] >= 4) cnt[a->ref[1][xb4] - 4]++;
398
9.65k
    }
399
400
12.9k
    if (have_left && !l->intra[yb4]) {
401
10.4k
        if (l->ref[0][yb4] >= 4) cnt[l->ref[0][yb4] - 4]++;
402
10.4k
        if (l->comp_type[yb4] && l->ref[1][yb4] >= 4) cnt[l->ref[1][yb4] - 4]++;
403
10.4k
    }
404
405
12.9k
    return cnt[0] == cnt[1] ? 1 : cnt[0] < cnt[1] ? 0 : 2;
406
12.9k
}
Unexecuted instantiation: recon_tmpl.c:av1_get_bwd_ref_1_ctx
Unexecuted instantiation: cdef_apply_tmpl.c:av1_get_bwd_ref_1_ctx
Unexecuted instantiation: ipred_prepare_tmpl.c:av1_get_bwd_ref_1_ctx
Unexecuted instantiation: lf_apply_tmpl.c:av1_get_bwd_ref_1_ctx
Unexecuted instantiation: lr_apply_tmpl.c:av1_get_bwd_ref_1_ctx
407
408
static inline int av1_get_uni_p1_ctx(const BlockContext *const a,
409
                                     const BlockContext *const l,
410
                                     const int yb4, const int xb4,
411
                                     const int have_top, const int have_left)
412
1.75k
{
413
1.75k
    int cnt[3] = { 0 };
414
415
1.75k
    if (have_top && !a->intra[xb4]) {
416
1.24k
        if (a->ref[0][xb4] - 1U < 3) cnt[a->ref[0][xb4] - 1]++;
417
1.24k
        if (a->comp_type[xb4] && a->ref[1][xb4] - 1U < 3) cnt[a->ref[1][xb4] - 1]++;
418
1.24k
    }
419
420
1.75k
    if (have_left && !l->intra[yb4]) {
421
1.39k
        if (l->ref[0][yb4] - 1U < 3) cnt[l->ref[0][yb4] - 1]++;
422
1.39k
        if (l->comp_type[yb4] && l->ref[1][yb4] - 1U < 3) cnt[l->ref[1][yb4] - 1]++;
423
1.39k
    }
424
425
1.75k
    cnt[1] += cnt[2];
426
427
1.75k
    return cnt[0] == cnt[1] ? 1 : cnt[0] < cnt[1] ? 0 : 2;
428
1.75k
}
Unexecuted instantiation: lib.c:av1_get_uni_p1_ctx
Unexecuted instantiation: log.c:av1_get_uni_p1_ctx
Unexecuted instantiation: mem.c:av1_get_uni_p1_ctx
Unexecuted instantiation: obu.c:av1_get_uni_p1_ctx
Unexecuted instantiation: picture.c:av1_get_uni_p1_ctx
Unexecuted instantiation: refmvs.c:av1_get_uni_p1_ctx
Unexecuted instantiation: thread_task.c:av1_get_uni_p1_ctx
Unexecuted instantiation: cdf.c:av1_get_uni_p1_ctx
decode.c:av1_get_uni_p1_ctx
Line
Count
Source
412
1.75k
{
413
1.75k
    int cnt[3] = { 0 };
414
415
1.75k
    if (have_top && !a->intra[xb4]) {
416
1.24k
        if (a->ref[0][xb4] - 1U < 3) cnt[a->ref[0][xb4] - 1]++;
417
1.24k
        if (a->comp_type[xb4] && a->ref[1][xb4] - 1U < 3) cnt[a->ref[1][xb4] - 1]++;
418
1.24k
    }
419
420
1.75k
    if (have_left && !l->intra[yb4]) {
421
1.39k
        if (l->ref[0][yb4] - 1U < 3) cnt[l->ref[0][yb4] - 1]++;
422
1.39k
        if (l->comp_type[yb4] && l->ref[1][yb4] - 1U < 3) cnt[l->ref[1][yb4] - 1]++;
423
1.39k
    }
424
425
1.75k
    cnt[1] += cnt[2];
426
427
1.75k
    return cnt[0] == cnt[1] ? 1 : cnt[0] < cnt[1] ? 0 : 2;
428
1.75k
}
Unexecuted instantiation: recon_tmpl.c:av1_get_uni_p1_ctx
Unexecuted instantiation: cdef_apply_tmpl.c:av1_get_uni_p1_ctx
Unexecuted instantiation: ipred_prepare_tmpl.c:av1_get_uni_p1_ctx
Unexecuted instantiation: lf_apply_tmpl.c:av1_get_uni_p1_ctx
Unexecuted instantiation: lr_apply_tmpl.c:av1_get_uni_p1_ctx
429
430
static inline int get_drl_context(const refmvs_candidate *const ref_mv_stack,
431
                                  const int ref_idx)
432
21.9k
{
433
21.9k
    if (ref_mv_stack[ref_idx].weight >= 640)
434
16.9k
        return ref_mv_stack[ref_idx + 1].weight < 640;
435
436
4.95k
    return ref_mv_stack[ref_idx + 1].weight < 640 ? 2 : 0;
437
21.9k
}
Unexecuted instantiation: lib.c:get_drl_context
Unexecuted instantiation: log.c:get_drl_context
Unexecuted instantiation: mem.c:get_drl_context
Unexecuted instantiation: obu.c:get_drl_context
Unexecuted instantiation: picture.c:get_drl_context
Unexecuted instantiation: refmvs.c:get_drl_context
Unexecuted instantiation: thread_task.c:get_drl_context
Unexecuted instantiation: cdf.c:get_drl_context
decode.c:get_drl_context
Line
Count
Source
432
21.9k
{
433
21.9k
    if (ref_mv_stack[ref_idx].weight >= 640)
434
16.9k
        return ref_mv_stack[ref_idx + 1].weight < 640;
435
436
4.95k
    return ref_mv_stack[ref_idx + 1].weight < 640 ? 2 : 0;
437
21.9k
}
Unexecuted instantiation: recon_tmpl.c:get_drl_context
Unexecuted instantiation: cdef_apply_tmpl.c:get_drl_context
Unexecuted instantiation: ipred_prepare_tmpl.c:get_drl_context
Unexecuted instantiation: lf_apply_tmpl.c:get_drl_context
Unexecuted instantiation: lr_apply_tmpl.c:get_drl_context
438
439
static inline unsigned get_cur_frame_segid(const int by, const int bx,
440
                                           const int have_top,
441
                                           const int have_left,
442
                                           int *const seg_ctx,
443
                                           const uint8_t *cur_seg_map,
444
                                           const ptrdiff_t stride)
445
393k
{
446
393k
    cur_seg_map += bx + by * stride;
447
393k
    if (have_left && have_top) {
448
129k
        const int l = cur_seg_map[-1];
449
129k
        const int a = cur_seg_map[-stride];
450
129k
        const int al = cur_seg_map[-(stride + 1)];
451
452
129k
        if (l == a && al == l) *seg_ctx = 2;
453
63.7k
        else if (l == a || al == l || a == al) *seg_ctx = 1;
454
5.52k
        else *seg_ctx = 0;
455
129k
        return a == al ? a : l;
456
264k
    } else {
457
264k
        *seg_ctx = 0;
458
264k
        return have_left ? cur_seg_map[-1] : have_top ? cur_seg_map[-stride] : 0;
459
264k
    }
460
393k
}
Unexecuted instantiation: lib.c:get_cur_frame_segid
Unexecuted instantiation: log.c:get_cur_frame_segid
Unexecuted instantiation: mem.c:get_cur_frame_segid
Unexecuted instantiation: obu.c:get_cur_frame_segid
Unexecuted instantiation: picture.c:get_cur_frame_segid
Unexecuted instantiation: refmvs.c:get_cur_frame_segid
Unexecuted instantiation: thread_task.c:get_cur_frame_segid
Unexecuted instantiation: cdf.c:get_cur_frame_segid
decode.c:get_cur_frame_segid
Line
Count
Source
445
393k
{
446
393k
    cur_seg_map += bx + by * stride;
447
393k
    if (have_left && have_top) {
448
129k
        const int l = cur_seg_map[-1];
449
129k
        const int a = cur_seg_map[-stride];
450
129k
        const int al = cur_seg_map[-(stride + 1)];
451
452
129k
        if (l == a && al == l) *seg_ctx = 2;
453
63.7k
        else if (l == a || al == l || a == al) *seg_ctx = 1;
454
5.52k
        else *seg_ctx = 0;
455
129k
        return a == al ? a : l;
456
264k
    } else {
457
264k
        *seg_ctx = 0;
458
264k
        return have_left ? cur_seg_map[-1] : have_top ? cur_seg_map[-stride] : 0;
459
264k
    }
460
393k
}
Unexecuted instantiation: recon_tmpl.c:get_cur_frame_segid
Unexecuted instantiation: cdef_apply_tmpl.c:get_cur_frame_segid
Unexecuted instantiation: ipred_prepare_tmpl.c:get_cur_frame_segid
Unexecuted instantiation: lf_apply_tmpl.c:get_cur_frame_segid
Unexecuted instantiation: lr_apply_tmpl.c:get_cur_frame_segid
461
462
9.12k
static inline void fix_int_mv_precision(mv *const mv) {
463
9.12k
    mv->x = (mv->x - (mv->x >> 15) + 3) & ~7U;
464
9.12k
    mv->y = (mv->y - (mv->y >> 15) + 3) & ~7U;
465
9.12k
}
Unexecuted instantiation: lib.c:fix_int_mv_precision
Unexecuted instantiation: log.c:fix_int_mv_precision
Unexecuted instantiation: mem.c:fix_int_mv_precision
Unexecuted instantiation: obu.c:fix_int_mv_precision
Unexecuted instantiation: picture.c:fix_int_mv_precision
refmvs.c:fix_int_mv_precision
Line
Count
Source
462
2.86k
static inline void fix_int_mv_precision(mv *const mv) {
463
2.86k
    mv->x = (mv->x - (mv->x >> 15) + 3) & ~7U;
464
2.86k
    mv->y = (mv->y - (mv->y >> 15) + 3) & ~7U;
465
2.86k
}
Unexecuted instantiation: thread_task.c:fix_int_mv_precision
Unexecuted instantiation: cdf.c:fix_int_mv_precision
decode.c:fix_int_mv_precision
Line
Count
Source
462
6.25k
static inline void fix_int_mv_precision(mv *const mv) {
463
6.25k
    mv->x = (mv->x - (mv->x >> 15) + 3) & ~7U;
464
6.25k
    mv->y = (mv->y - (mv->y >> 15) + 3) & ~7U;
465
6.25k
}
Unexecuted instantiation: recon_tmpl.c:fix_int_mv_precision
Unexecuted instantiation: cdef_apply_tmpl.c:fix_int_mv_precision
Unexecuted instantiation: ipred_prepare_tmpl.c:fix_int_mv_precision
Unexecuted instantiation: lf_apply_tmpl.c:fix_int_mv_precision
Unexecuted instantiation: lr_apply_tmpl.c:fix_int_mv_precision
466
467
static inline void fix_mv_precision(const Dav1dFrameHeader *const hdr,
468
                                    mv *const mv)
469
58.9k
{
470
58.9k
    if (hdr->force_integer_mv) {
471
6.56k
        fix_int_mv_precision(mv);
472
52.3k
    } else if (!hdr->hp) {
473
38.0k
        mv->x = (mv->x - (mv->x >> 15)) & ~1U;
474
38.0k
        mv->y = (mv->y - (mv->y >> 15)) & ~1U;
475
38.0k
    }
476
58.9k
}
Unexecuted instantiation: lib.c:fix_mv_precision
Unexecuted instantiation: log.c:fix_mv_precision
Unexecuted instantiation: mem.c:fix_mv_precision
Unexecuted instantiation: obu.c:fix_mv_precision
Unexecuted instantiation: picture.c:fix_mv_precision
refmvs.c:fix_mv_precision
Line
Count
Source
469
4.66k
{
470
4.66k
    if (hdr->force_integer_mv) {
471
617
        fix_int_mv_precision(mv);
472
4.04k
    } else if (!hdr->hp) {
473
1.89k
        mv->x = (mv->x - (mv->x >> 15)) & ~1U;
474
1.89k
        mv->y = (mv->y - (mv->y >> 15)) & ~1U;
475
1.89k
    }
476
4.66k
}
Unexecuted instantiation: thread_task.c:fix_mv_precision
Unexecuted instantiation: cdf.c:fix_mv_precision
decode.c:fix_mv_precision
Line
Count
Source
469
54.2k
{
470
54.2k
    if (hdr->force_integer_mv) {
471
5.94k
        fix_int_mv_precision(mv);
472
48.3k
    } else if (!hdr->hp) {
473
36.1k
        mv->x = (mv->x - (mv->x >> 15)) & ~1U;
474
36.1k
        mv->y = (mv->y - (mv->y >> 15)) & ~1U;
475
36.1k
    }
476
54.2k
}
Unexecuted instantiation: recon_tmpl.c:fix_mv_precision
Unexecuted instantiation: cdef_apply_tmpl.c:fix_mv_precision
Unexecuted instantiation: ipred_prepare_tmpl.c:fix_mv_precision
Unexecuted instantiation: lf_apply_tmpl.c:fix_mv_precision
Unexecuted instantiation: lr_apply_tmpl.c:fix_mv_precision
477
478
static inline mv get_gmv_2d(const Dav1dWarpedMotionParams *const gmv,
479
                            const int bx4, const int by4,
480
                            const int bw4, const int bh4,
481
                            const Dav1dFrameHeader *const hdr)
482
123k
{
483
123k
    switch (gmv->type) {
484
17.1k
    case DAV1D_WM_TYPE_ROT_ZOOM:
485
17.1k
        assert(gmv->matrix[5] ==  gmv->matrix[2]);
486
17.1k
        assert(gmv->matrix[4] == -gmv->matrix[3]);
487
        // fall-through
488
17.1k
    default:
489
19.4k
    case DAV1D_WM_TYPE_AFFINE: {
490
19.4k
        const int x = bx4 * 4 + bw4 * 2 - 1;
491
19.4k
        const int y = by4 * 4 + bh4 * 2 - 1;
492
19.4k
        const int xc = (gmv->matrix[2] - (1 << 16)) * x +
493
19.4k
                       gmv->matrix[3] * y + gmv->matrix[0];
494
19.4k
        const int yc = (gmv->matrix[5] - (1 << 16)) * y +
495
19.4k
                       gmv->matrix[4] * x + gmv->matrix[1];
496
19.4k
        const int shift = 16 - (3 - !hdr->hp);
497
19.4k
        const int round = (1 << shift) >> 1;
498
19.4k
        mv res = (mv) {
499
19.4k
            .y = apply_sign(((abs(yc) + round) >> shift) << !hdr->hp, yc),
500
19.4k
            .x = apply_sign(((abs(xc) + round) >> shift) << !hdr->hp, xc),
501
19.4k
        };
502
19.4k
        if (hdr->force_integer_mv)
503
1.68k
            fix_int_mv_precision(&res);
504
19.4k
        return res;
505
17.1k
    }
506
9.48k
    case DAV1D_WM_TYPE_TRANSLATION: {
507
9.48k
        mv res = (mv) {
508
9.48k
            .y = gmv->matrix[0] >> 13,
509
9.48k
            .x = gmv->matrix[1] >> 13,
510
9.48k
        };
511
9.48k
        if (hdr->force_integer_mv)
512
881
            fix_int_mv_precision(&res);
513
9.48k
        return res;
514
17.1k
    }
515
94.3k
    case DAV1D_WM_TYPE_IDENTITY:
516
94.3k
        return (mv) { .x = 0, .y = 0 };
517
123k
    }
518
123k
}
Unexecuted instantiation: lib.c:get_gmv_2d
Unexecuted instantiation: log.c:get_gmv_2d
Unexecuted instantiation: mem.c:get_gmv_2d
Unexecuted instantiation: obu.c:get_gmv_2d
Unexecuted instantiation: picture.c:get_gmv_2d
refmvs.c:get_gmv_2d
Line
Count
Source
482
100k
{
483
100k
    switch (gmv->type) {
484
13.0k
    case DAV1D_WM_TYPE_ROT_ZOOM:
485
13.0k
        assert(gmv->matrix[5] ==  gmv->matrix[2]);
486
13.0k
        assert(gmv->matrix[4] == -gmv->matrix[3]);
487
        // fall-through
488
13.0k
    default:
489
14.7k
    case DAV1D_WM_TYPE_AFFINE: {
490
14.7k
        const int x = bx4 * 4 + bw4 * 2 - 1;
491
14.7k
        const int y = by4 * 4 + bh4 * 2 - 1;
492
14.7k
        const int xc = (gmv->matrix[2] - (1 << 16)) * x +
493
14.7k
                       gmv->matrix[3] * y + gmv->matrix[0];
494
14.7k
        const int yc = (gmv->matrix[5] - (1 << 16)) * y +
495
14.7k
                       gmv->matrix[4] * x + gmv->matrix[1];
496
14.7k
        const int shift = 16 - (3 - !hdr->hp);
497
14.7k
        const int round = (1 << shift) >> 1;
498
14.7k
        mv res = (mv) {
499
14.7k
            .y = apply_sign(((abs(yc) + round) >> shift) << !hdr->hp, yc),
500
14.7k
            .x = apply_sign(((abs(xc) + round) >> shift) << !hdr->hp, xc),
501
14.7k
        };
502
14.7k
        if (hdr->force_integer_mv)
503
1.49k
            fix_int_mv_precision(&res);
504
14.7k
        return res;
505
13.0k
    }
506
7.57k
    case DAV1D_WM_TYPE_TRANSLATION: {
507
7.57k
        mv res = (mv) {
508
7.57k
            .y = gmv->matrix[0] >> 13,
509
7.57k
            .x = gmv->matrix[1] >> 13,
510
7.57k
        };
511
7.57k
        if (hdr->force_integer_mv)
512
748
            fix_int_mv_precision(&res);
513
7.57k
        return res;
514
13.0k
    }
515
77.6k
    case DAV1D_WM_TYPE_IDENTITY:
516
77.6k
        return (mv) { .x = 0, .y = 0 };
517
100k
    }
518
100k
}
Unexecuted instantiation: thread_task.c:get_gmv_2d
Unexecuted instantiation: cdf.c:get_gmv_2d
decode.c:get_gmv_2d
Line
Count
Source
482
23.2k
{
483
23.2k
    switch (gmv->type) {
484
4.06k
    case DAV1D_WM_TYPE_ROT_ZOOM:
485
4.06k
        assert(gmv->matrix[5] ==  gmv->matrix[2]);
486
4.06k
        assert(gmv->matrix[4] == -gmv->matrix[3]);
487
        // fall-through
488
4.06k
    default:
489
4.66k
    case DAV1D_WM_TYPE_AFFINE: {
490
4.66k
        const int x = bx4 * 4 + bw4 * 2 - 1;
491
4.66k
        const int y = by4 * 4 + bh4 * 2 - 1;
492
4.66k
        const int xc = (gmv->matrix[2] - (1 << 16)) * x +
493
4.66k
                       gmv->matrix[3] * y + gmv->matrix[0];
494
4.66k
        const int yc = (gmv->matrix[5] - (1 << 16)) * y +
495
4.66k
                       gmv->matrix[4] * x + gmv->matrix[1];
496
4.66k
        const int shift = 16 - (3 - !hdr->hp);
497
4.66k
        const int round = (1 << shift) >> 1;
498
4.66k
        mv res = (mv) {
499
4.66k
            .y = apply_sign(((abs(yc) + round) >> shift) << !hdr->hp, yc),
500
4.66k
            .x = apply_sign(((abs(xc) + round) >> shift) << !hdr->hp, xc),
501
4.66k
        };
502
4.66k
        if (hdr->force_integer_mv)
503
183
            fix_int_mv_precision(&res);
504
4.66k
        return res;
505
4.06k
    }
506
1.90k
    case DAV1D_WM_TYPE_TRANSLATION: {
507
1.90k
        mv res = (mv) {
508
1.90k
            .y = gmv->matrix[0] >> 13,
509
1.90k
            .x = gmv->matrix[1] >> 13,
510
1.90k
        };
511
1.90k
        if (hdr->force_integer_mv)
512
133
            fix_int_mv_precision(&res);
513
1.90k
        return res;
514
4.06k
    }
515
16.6k
    case DAV1D_WM_TYPE_IDENTITY:
516
16.6k
        return (mv) { .x = 0, .y = 0 };
517
23.2k
    }
518
23.2k
}
Unexecuted instantiation: recon_tmpl.c:get_gmv_2d
Unexecuted instantiation: cdef_apply_tmpl.c:get_gmv_2d
Unexecuted instantiation: ipred_prepare_tmpl.c:get_gmv_2d
Unexecuted instantiation: lf_apply_tmpl.c:get_gmv_2d
Unexecuted instantiation: lr_apply_tmpl.c:get_gmv_2d
519
520
#endif /* DAV1D_SRC_ENV_H */