Coverage Report

Created: 2026-10-17 06:52

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/avm/av2/common/tip.h
Line
Count
Source
1
/*
2
 * Copyright (c) 2021, Alliance for Open Media. All rights reserved
3
 *
4
 * This source code is subject to the terms of the BSD 3-Clause Clear License
5
 * and the Alliance for Open Media Patent License 1.0. If the BSD 3-Clause
6
 * Clear License was not distributed with this source code in the LICENSE file,
7
 * you can obtain it at aomedia.org/license/software-license/bsd-3-c-c/.
8
 * If the Alliance for Open Media Patent License 1.0 was not distributed with
9
 * this source code in the PATENTS file, you can obtain it at
10
 * aomedia.org/license/patent-license/.
11
 */
12
13
#ifndef AVM_AV2_COMMON_TIP_H_
14
#define AVM_AV2_COMMON_TIP_H_
15
16
#ifdef __cplusplus
17
extern "C" {
18
#endif
19
20
#include "av2/common/av2_common_int.h"
21
#include "av2/common/mvref_common.h"
22
#include "av2/common/reconinter.h"
23
24
#define TIP_RD_CORRECTION 100000
25
26
// Maximum block size allowed to combine the blocks with same MV
27
0
#define MAX_BLOCK_SIZE_WITH_SAME_MV 64
28
29
// Encoder: Decide TIP mode is enabled or disabled. If TIP is enabled, derive
30
// temporal motion field from one closest forward and one closet backward
31
// reference frames, then fill the hole
32
void av2_enc_setup_tip_motion_field(AV2_COMMON *cm);
33
34
// Derive temporal motion field from one closest forward and one closet
35
// backward reference frames, then fill the hole
36
void av2_setup_tip_motion_field(AV2_COMMON *cm);
37
38
// Generate the whole TIP frame with the temporal motion field
39
void av2_setup_tip_frame(AV2_COMMON *cm, MACROBLOCKD *xd, uint16_t **mc_buf,
40
                         CONV_BUF_TYPE *tmp_conv_dst,
41
                         CalcSubpelParamsFunc calc_subpel_params_func,
42
                         int copy_refined_mvs);
43
44
// Row based processing for TIP frame
45
void av2_tip_setup_tip_frame_row(AV2_COMMON *cm, MACROBLOCKD *xd, int blk_row,
46
                                 int blk_col_start, int blk_row_end,
47
                                 int blk_col_end, int mvs_stride,
48
                                 int unit_blk_size, int max_allow_blk_size,
49
                                 uint16_t **mc_buf, CONV_BUF_TYPE *tmp_conv_dst,
50
                                 CalcSubpelParamsFunc calc_subpel_params_func,
51
                                 int copy_refined_mvs);
52
53
// Get the block width when blocks with same MV are combined.
54
static AVM_INLINE int get_tip_block_width_with_same_mv(
55
    const AV2_COMMON *cm, const TPL_MV_REF *tpl_mvs, int unit_blk_size,
56
0
    int blk_col, int blk_col_end, int max_allow_blk_size) {
57
0
  int blk_width = unit_blk_size;
58
0
  const int step = unit_blk_size >> TMVP_MI_SZ_LOG2;
59
0
  int offset = step;
60
61
0
  const int cur_col_offset = blk_col + derive_col_mv_tpl_offset(cm, blk_col);
62
0
  int next_col_offset =
63
0
      blk_col + offset + derive_col_mv_tpl_offset(cm, blk_col + offset);
64
0
  const int is_zero_tpl_mv = tpl_mvs[cur_col_offset].mfmv0.as_int == 0 ||
65
0
                             tpl_mvs[cur_col_offset].mfmv0.as_int == INVALID_MV;
66
67
0
  while (blk_col + offset < blk_col_end && blk_width < max_allow_blk_size &&
68
0
         (tpl_mvs[cur_col_offset].mfmv0.as_int ==
69
0
              tpl_mvs[next_col_offset].mfmv0.as_int ||
70
0
          (is_zero_tpl_mv &&
71
0
           (tpl_mvs[next_col_offset].mfmv0.as_int == 0 ||
72
0
            tpl_mvs[next_col_offset].mfmv0.as_int == INVALID_MV)))) {
73
0
    blk_width += unit_blk_size;
74
0
    offset += step;
75
0
    next_col_offset =
76
0
        blk_col + offset + derive_col_mv_tpl_offset(cm, blk_col + offset);
77
0
  }
78
79
0
  blk_width = 1 << get_msb(blk_width);
80
0
  return blk_width;
81
0
}
Unexecuted instantiation: av2_dx_iface.c:get_tip_block_width_with_same_mv
Unexecuted instantiation: annexF.c:get_tip_block_width_with_same_mv
Unexecuted instantiation: decodeframe.c:get_tip_block_width_with_same_mv
Unexecuted instantiation: decodemv.c:get_tip_block_width_with_same_mv
Unexecuted instantiation: decoder.c:get_tip_block_width_with_same_mv
Unexecuted instantiation: decodetxb.c:get_tip_block_width_with_same_mv
Unexecuted instantiation: detokenize.c:get_tip_block_width_with_same_mv
Unexecuted instantiation: obu_fgm.c:get_tip_block_width_with_same_mv
Unexecuted instantiation: obu.c:get_tip_block_width_with_same_mv
Unexecuted instantiation: obu_ci.c:get_tip_block_width_with_same_mv
Unexecuted instantiation: obu_atlas.c:get_tip_block_width_with_same_mv
Unexecuted instantiation: obu_lcr.c:get_tip_block_width_with_same_mv
Unexecuted instantiation: obu_ops.c:get_tip_block_width_with_same_mv
Unexecuted instantiation: obu_buf.c:get_tip_block_width_with_same_mv
Unexecuted instantiation: alloccommon.c:get_tip_block_width_with_same_mv
Unexecuted instantiation: level.c:get_tip_block_width_with_same_mv
Unexecuted instantiation: mvref_common.c:get_tip_block_width_with_same_mv
Unexecuted instantiation: reconinter.c:get_tip_block_width_with_same_mv
Unexecuted instantiation: thread_common.c:get_tip_block_width_with_same_mv
Unexecuted instantiation: tip.c:get_tip_block_width_with_same_mv
Unexecuted instantiation: obu_qm.c:get_tip_block_width_with_same_mv
82
83
// Check if MV refinement is disabled for TIP 16x16 blocks.
84
static AVM_INLINE int is_tip_mv_refinement_disabled_for_unit_size_16x16(
85
0
    int unit_blk_size, int enable_tip_refinemv, TIP_FRAME_MODE tip_frame_mode) {
86
0
  if (unit_blk_size != 16) return 0;
87
0
  return !enable_tip_refinemv || tip_frame_mode == TIP_FRAME_AS_OUTPUT;
88
0
}
Unexecuted instantiation: av2_dx_iface.c:is_tip_mv_refinement_disabled_for_unit_size_16x16
Unexecuted instantiation: annexF.c:is_tip_mv_refinement_disabled_for_unit_size_16x16
Unexecuted instantiation: decodeframe.c:is_tip_mv_refinement_disabled_for_unit_size_16x16
Unexecuted instantiation: decodemv.c:is_tip_mv_refinement_disabled_for_unit_size_16x16
Unexecuted instantiation: decoder.c:is_tip_mv_refinement_disabled_for_unit_size_16x16
Unexecuted instantiation: decodetxb.c:is_tip_mv_refinement_disabled_for_unit_size_16x16
Unexecuted instantiation: detokenize.c:is_tip_mv_refinement_disabled_for_unit_size_16x16
Unexecuted instantiation: obu_fgm.c:is_tip_mv_refinement_disabled_for_unit_size_16x16
Unexecuted instantiation: obu.c:is_tip_mv_refinement_disabled_for_unit_size_16x16
Unexecuted instantiation: obu_ci.c:is_tip_mv_refinement_disabled_for_unit_size_16x16
Unexecuted instantiation: obu_atlas.c:is_tip_mv_refinement_disabled_for_unit_size_16x16
Unexecuted instantiation: obu_lcr.c:is_tip_mv_refinement_disabled_for_unit_size_16x16
Unexecuted instantiation: obu_ops.c:is_tip_mv_refinement_disabled_for_unit_size_16x16
Unexecuted instantiation: obu_buf.c:is_tip_mv_refinement_disabled_for_unit_size_16x16
Unexecuted instantiation: alloccommon.c:is_tip_mv_refinement_disabled_for_unit_size_16x16
Unexecuted instantiation: level.c:is_tip_mv_refinement_disabled_for_unit_size_16x16
Unexecuted instantiation: mvref_common.c:is_tip_mv_refinement_disabled_for_unit_size_16x16
Unexecuted instantiation: reconinter.c:is_tip_mv_refinement_disabled_for_unit_size_16x16
Unexecuted instantiation: thread_common.c:is_tip_mv_refinement_disabled_for_unit_size_16x16
Unexecuted instantiation: tip.c:is_tip_mv_refinement_disabled_for_unit_size_16x16
Unexecuted instantiation: obu_qm.c:is_tip_mv_refinement_disabled_for_unit_size_16x16
89
90
// Compute scale factor for temporal scaling
91
0
static AVM_INLINE int tip_derive_scale_factor(int num, int den_signed) {
92
0
  int den = den_signed < 0 ? -den_signed : den_signed;
93
0
  int sign = den_signed < 0 ? -1 : 1;
94
0
  den = AVMMIN(den, MAX_FRAME_DISTANCE);
95
0
  num = num > 0 ? AVMMIN(num, MAX_FRAME_DISTANCE)
96
0
                : AVMMAX(num, -MAX_FRAME_DISTANCE);
97
0
  return sign * num * div_mult[den];
98
0
}
Unexecuted instantiation: av2_dx_iface.c:tip_derive_scale_factor
Unexecuted instantiation: annexF.c:tip_derive_scale_factor
Unexecuted instantiation: decodeframe.c:tip_derive_scale_factor
Unexecuted instantiation: decodemv.c:tip_derive_scale_factor
Unexecuted instantiation: decoder.c:tip_derive_scale_factor
Unexecuted instantiation: decodetxb.c:tip_derive_scale_factor
Unexecuted instantiation: detokenize.c:tip_derive_scale_factor
Unexecuted instantiation: obu_fgm.c:tip_derive_scale_factor
Unexecuted instantiation: obu.c:tip_derive_scale_factor
Unexecuted instantiation: obu_ci.c:tip_derive_scale_factor
Unexecuted instantiation: obu_atlas.c:tip_derive_scale_factor
Unexecuted instantiation: obu_lcr.c:tip_derive_scale_factor
Unexecuted instantiation: obu_ops.c:tip_derive_scale_factor
Unexecuted instantiation: obu_buf.c:tip_derive_scale_factor
Unexecuted instantiation: alloccommon.c:tip_derive_scale_factor
Unexecuted instantiation: level.c:tip_derive_scale_factor
Unexecuted instantiation: mvref_common.c:tip_derive_scale_factor
Unexecuted instantiation: reconinter.c:tip_derive_scale_factor
Unexecuted instantiation: thread_common.c:tip_derive_scale_factor
Unexecuted instantiation: tip.c:tip_derive_scale_factor
Unexecuted instantiation: obu_qm.c:tip_derive_scale_factor
99
#ifdef __cplusplus
100
}  // extern "C"
101
#endif
102
103
#endif  // AVM_AV2_COMMON_TIP_H_