FFmpeg
Macros | Functions | Variables
hevc_mvs.c File Reference
#include "hevc.h"
#include "hevcdec.h"
#include "threadframe.h"

Go to the source code of this file.

Macros

#define MIN_TB_ADDR_ZS(x, y)   s->ps.pps->min_tb_addr_zs[(y) * (s->ps.sps->tb_mask+2) + (x)]
 
#define MATCH_MV(x)   (AV_RN32A(&A.x) == AV_RN32A(&B.x))
 
#define MATCH(x)   (A.x == B.x)
 
#define CHECK_MVSET(l)
 
#define TAB_MVF(x, y)   tab_mvf[(y) * min_pu_width + x]
 
#define TAB_MVF_PU(v)
 
#define DERIVE_TEMPORAL_COLOCATED_MVS
 
#define AVAILABLE(cand, v)   (cand && !(TAB_MVF_PU(v).pred_flag == PF_INTRA))
 
#define PRED_BLOCK_AVAILABLE(v)   z_scan_block_avail(s, x0, y0, x ## v, y ## v)
 
#define COMPARE_MV_REFIDX(a, b)   compare_mv_ref_idx(TAB_MVF_PU(a), TAB_MVF_PU(b))
 
#define MP_MX(v, pred, mx)
 
#define MP_MX_LT(v, pred, mx)
 

Functions

void ff_hevc_set_neighbour_available (HEVCLocalContext *lc, int x0, int y0, int nPbW, int nPbH)
 
static av_always_inline int z_scan_block_avail (const HEVCContext *s, int xCurr, int yCurr, int xN, int yN)
 
static av_always_inline int is_diff_mer (const HEVCContext *s, int xN, int yN, int xP, int yP)
 
static av_always_inline int compare_mv_ref_idx (struct MvField A, struct MvField B)
 
static av_always_inline void mv_scale (Mv *dst, const Mv *src, int td, int tb)
 
static int check_mvset (Mv *mvLXCol, const Mv *mvCol, int colPic, int poc, const RefPicList *refPicList, int X, int refIdxLx, const RefPicList *refPicList_col, int listCol, int refidxCol)
 
static int derive_temporal_colocated_mvs (const HEVCContext *s, MvField temp_col, int refIdxLx, Mv *mvLXCol, int X, int colPic, const RefPicList *refPicList_col)
 
static int temporal_luma_motion_vector (const HEVCContext *s, int x0, int y0, int nPbW, int nPbH, int refIdxLx, Mv *mvLXCol, int X)
 
static void derive_spatial_merge_candidates (HEVCLocalContext *lc, const HEVCContext *s, int x0, int y0, int nPbW, int nPbH, int log2_cb_size, int singleMCLFlag, int part_idx, int merge_idx, struct MvField mergecandlist[])
 
void ff_hevc_luma_mv_merge_mode (HEVCLocalContext *lc, int x0, int y0, int nPbW, int nPbH, int log2_cb_size, int part_idx, int merge_idx, MvField *mv)
 
static av_always_inline void dist_scale (const HEVCContext *s, Mv *mv, int min_pu_width, int x, int y, int elist, int ref_idx_curr, int ref_idx)
 
static int mv_mp_mode_mx (const HEVCContext *s, int x, int y, int pred_flag_index, Mv *mv, int ref_idx_curr, int ref_idx)
 
static int mv_mp_mode_mx_lt (const HEVCContext *s, int x, int y, int pred_flag_index, Mv *mv, int ref_idx_curr, int ref_idx)
 
void ff_hevc_luma_mv_mvp_mode (HEVCLocalContext *lc, int x0, int y0, int nPbW, int nPbH, int log2_cb_size, int part_idx, int merge_idx, MvField *mv, int mvp_lx_flag, int LX)
 

Variables

static const uint8_t l0_l1_cand_idx [12][2]
 

Macro Definition Documentation

◆ MIN_TB_ADDR_ZS

#define MIN_TB_ADDR_ZS (   x,
 
)    s->ps.pps->min_tb_addr_zs[(y) * (s->ps.sps->tb_mask+2) + (x)]

◆ MATCH_MV

#define MATCH_MV (   x)    (AV_RN32A(&A.x) == AV_RN32A(&B.x))

Definition at line 95 of file hevc_mvs.c.

◆ MATCH

#define MATCH (   x)    (A.x == B.x)

Definition at line 96 of file hevc_mvs.c.

◆ CHECK_MVSET

#define CHECK_MVSET (   l)
Value:
check_mvset(mvLXCol, temp_col.mv + l, \
colPic, s->poc, \
refPicList, X, refIdxLx, \
refPicList_col, L ## l, temp_col.ref_idx[l])

Definition at line 157 of file hevc_mvs.c.

◆ TAB_MVF

#define TAB_MVF (   x,
 
)    tab_mvf[(y) * min_pu_width + x]

Definition at line 204 of file hevc_mvs.c.

◆ TAB_MVF_PU

#define TAB_MVF_PU (   v)
Value:
TAB_MVF(((x ## v) >> s->ps.sps->log2_min_pu_size), \
((y ## v) >> s->ps.sps->log2_min_pu_size))

Definition at line 207 of file hevc_mvs.c.

◆ DERIVE_TEMPORAL_COLOCATED_MVS

#define DERIVE_TEMPORAL_COLOCATED_MVS
Value:
refIdxLx, mvLXCol, X, colPic, \

Definition at line 211 of file hevc_mvs.c.

◆ AVAILABLE

#define AVAILABLE (   cand,
 
)    (cand && !(TAB_MVF_PU(v).pred_flag == PF_INTRA))

Definition at line 274 of file hevc_mvs.c.

◆ PRED_BLOCK_AVAILABLE

#define PRED_BLOCK_AVAILABLE (   v)    z_scan_block_avail(s, x0, y0, x ## v, y ## v)

Definition at line 277 of file hevc_mvs.c.

◆ COMPARE_MV_REFIDX

#define COMPARE_MV_REFIDX (   a,
  b 
)    compare_mv_ref_idx(TAB_MVF_PU(a), TAB_MVF_PU(b))

Definition at line 280 of file hevc_mvs.c.

◆ MP_MX

#define MP_MX (   v,
  pred,
  mx 
)
Value:
(x ## v) >> s->ps.sps->log2_min_pu_size, \
(y ## v) >> s->ps.sps->log2_min_pu_size, \
pred, &mx, ref_idx_curr, ref_idx)

Definition at line 571 of file hevc_mvs.c.

◆ MP_MX_LT

#define MP_MX_LT (   v,
  pred,
  mx 
)
Value:
(x ## v) >> s->ps.sps->log2_min_pu_size, \
(y ## v) >> s->ps.sps->log2_min_pu_size, \
pred, &mx, ref_idx_curr, ref_idx)

Definition at line 577 of file hevc_mvs.c.

Function Documentation

◆ ff_hevc_set_neighbour_available()

void ff_hevc_set_neighbour_available ( HEVCLocalContext lc,
int  x0,
int  y0,
int  nPbW,
int  nPbH 
)

◆ z_scan_block_avail()

static av_always_inline int z_scan_block_avail ( const HEVCContext s,
int  xCurr,
int  yCurr,
int  xN,
int  yN 
)
static

Definition at line 65 of file hevc_mvs.c.

◆ is_diff_mer()

static av_always_inline int is_diff_mer ( const HEVCContext s,
int  xN,
int  yN,
int  xP,
int  yP 
)
static

Definition at line 87 of file hevc_mvs.c.

Referenced by derive_spatial_merge_candidates().

◆ compare_mv_ref_idx()

static av_always_inline int compare_mv_ref_idx ( struct MvField  A,
struct MvField  B 
)
static

Definition at line 99 of file hevc_mvs.c.

◆ mv_scale()

static av_always_inline void mv_scale ( Mv dst,
const Mv src,
int  td,
int  tb 
)
static

◆ check_mvset()

static int check_mvset ( Mv mvLXCol,
const Mv mvCol,
int  colPic,
int  poc,
const RefPicList refPicList,
int  X,
int  refIdxLx,
const RefPicList refPicList_col,
int  listCol,
int  refidxCol 
)
static

Definition at line 130 of file hevc_mvs.c.

◆ derive_temporal_colocated_mvs()

static int derive_temporal_colocated_mvs ( const HEVCContext s,
MvField  temp_col,
int  refIdxLx,
Mv mvLXCol,
int  X,
int  colPic,
const RefPicList refPicList_col 
)
static

Definition at line 164 of file hevc_mvs.c.

◆ temporal_luma_motion_vector()

static int temporal_luma_motion_vector ( const HEVCContext s,
int  x0,
int  y0,
int  nPbW,
int  nPbH,
int  refIdxLx,
Mv mvLXCol,
int  X 
)
static

Definition at line 219 of file hevc_mvs.c.

Referenced by derive_spatial_merge_candidates(), and ff_hevc_luma_mv_mvp_mode().

◆ derive_spatial_merge_candidates()

static void derive_spatial_merge_candidates ( HEVCLocalContext lc,
const HEVCContext s,
int  x0,
int  y0,
int  nPbW,
int  nPbH,
int  log2_cb_size,
int  singleMCLFlag,
int  part_idx,
int  merge_idx,
struct MvField  mergecandlist[] 
)
static

Definition at line 286 of file hevc_mvs.c.

Referenced by ff_hevc_luma_mv_merge_mode().

◆ ff_hevc_luma_mv_merge_mode()

void ff_hevc_luma_mv_merge_mode ( HEVCLocalContext lc,
int  x0,
int  y0,
int  nPbW,
int  nPbH,
int  log2_cb_size,
int  part_idx,
int  merge_idx,
MvField mv 
)

Definition at line 480 of file hevc_mvs.c.

Referenced by hls_prediction_unit().

◆ dist_scale()

static av_always_inline void dist_scale ( const HEVCContext s,
Mv mv,
int  min_pu_width,
int  x,
int  y,
int  elist,
int  ref_idx_curr,
int  ref_idx 
)
static

Definition at line 513 of file hevc_mvs.c.

Referenced by mv_mp_mode_mx_lt().

◆ mv_mp_mode_mx()

static int mv_mp_mode_mx ( const HEVCContext s,
int  x,
int  y,
int  pred_flag_index,
Mv mv,
int  ref_idx_curr,
int  ref_idx 
)
static

Definition at line 530 of file hevc_mvs.c.

◆ mv_mp_mode_mx_lt()

static int mv_mp_mode_mx_lt ( const HEVCContext s,
int  x,
int  y,
int  pred_flag_index,
Mv mv,
int  ref_idx_curr,
int  ref_idx 
)
static

Definition at line 546 of file hevc_mvs.c.

◆ ff_hevc_luma_mv_mvp_mode()

void ff_hevc_luma_mv_mvp_mode ( HEVCLocalContext lc,
int  x0,
int  y0,
int  nPbW,
int  nPbH,
int  log2_cb_size,
int  part_idx,
int  merge_idx,
MvField mv,
int  mvp_lx_flag,
int  LX 
)

Definition at line 583 of file hevc_mvs.c.

Referenced by hevc_luma_mv_mvp_mode().

Variable Documentation

◆ l0_l1_cand_idx

const uint8_t l0_l1_cand_idx[12][2]
static
Initial value:
= {
{ 0, 1, },
{ 1, 0, },
{ 0, 2, },
{ 2, 0, },
{ 1, 2, },
{ 2, 1, },
{ 0, 3, },
{ 3, 0, },
{ 1, 3, },
{ 3, 1, },
{ 2, 3, },
{ 3, 2, },
}

Definition at line 28 of file hevc_mvs.c.

Referenced by derive_spatial_merge_candidates().

ff_hevc_get_ref_list
const RefPicList * ff_hevc_get_ref_list(const HEVCContext *s, const HEVCFrame *ref, int x0, int y0)
Definition: hevc_refs.c:58
mv_mp_mode_mx
static int mv_mp_mode_mx(const HEVCContext *s, int x, int y, int pred_flag_index, Mv *mv, int ref_idx_curr, int ref_idx)
Definition: hevc_mvs.c:530
s
#define s(width, name)
Definition: cbs_vp9.c:256
derive_temporal_colocated_mvs
static int derive_temporal_colocated_mvs(const HEVCContext *s, MvField temp_col, int refIdxLx, Mv *mvLXCol, int X, int colPic, const RefPicList *refPicList_col)
Definition: hevc_mvs.c:164
TAB_MVF
#define TAB_MVF(x, y)
Definition: hevc_mvs.c:204
mv_mp_mode_mx_lt
static int mv_mp_mode_mx_lt(const HEVCContext *s, int x, int y, int pred_flag_index, Mv *mv, int ref_idx_curr, int ref_idx)
Definition: hevc_mvs.c:546
pred
static const float pred[4]
Definition: siprdata.h:259
ref
static int ref[MAX_W *MAX_W]
Definition: jpeg2000dwt.c:112
L
#define L(x)
Definition: vpx_arith.h:36
X
@ X
Definition: vf_addroi.c:26
check_mvset
static int check_mvset(Mv *mvLXCol, const Mv *mvCol, int colPic, int poc, const RefPicList *refPicList, int X, int refIdxLx, const RefPicList *refPicList_col, int listCol, int refidxCol)
Definition: hevc_mvs.c:130