FFmpeg  4.0
Macros | Functions
h264_mvpred.h File Reference

H.264 / AVC / MPEG-4 part10 motion vector prediction. More...

#include "internal.h"
#include "avcodec.h"
#include "h264dec.h"
#include "mpegutils.h"
#include "libavutil/avassert.h"

Go to the source code of this file.

Macros

#define SET_DIAG_MV(MV_OP, REF_OP, XY, Y4)
 
#define FIX_MV_MBAFF(type, refn, mvn, idx)
 
#define MAP_MVS
 
#define MAP_F2F(idx, mb_type)
 
#define MAP_F2F(idx, mb_type)
 

Functions

static av_always_inline int fetch_diagonal_mv (const H264Context *h, H264SliceContext *sl, const int16_t **C, int i, int list, int part_width)
 
static av_always_inline void pred_motion (const H264Context *const h, H264SliceContext *sl, int n, int part_width, int list, int ref, int *const mx, int *const my)
 Get the predicted MV. More...
 
static av_always_inline void pred_16x8_motion (const H264Context *const h, H264SliceContext *sl, int n, int list, int ref, int *const mx, int *const my)
 Get the directionally predicted 16x8 MV. More...
 
static av_always_inline void pred_8x16_motion (const H264Context *const h, H264SliceContext *sl, int n, int list, int ref, int *const mx, int *const my)
 Get the directionally predicted 8x16 MV. More...
 
static av_always_inline void pred_pskip_motion (const H264Context *const h, H264SliceContext *sl)
 
static void fill_decode_neighbors (const H264Context *h, H264SliceContext *sl, int mb_type)
 
static void fill_decode_caches (const H264Context *h, H264SliceContext *sl, int mb_type)
 
static void av_unused decode_mb_skip (const H264Context *h, H264SliceContext *sl)
 decodes a P_SKIP or B_SKIP macroblock More...
 

Detailed Description

H.264 / AVC / MPEG-4 part10 motion vector prediction.

Author
Michael Niedermayer micha.nosp@m.elni.nosp@m.@gmx..nosp@m.at

Definition in file h264_mvpred.h.

Macro Definition Documentation

◆ SET_DIAG_MV

#define SET_DIAG_MV (   MV_OP,
  REF_OP,
  XY,
  Y4 
)
Value:
const int xy = XY, y4 = Y4; \
const int mb_type = mb_types[xy + (y4 >> 2) * h->mb_stride]; \
if (!USES_LIST(mb_type, list)) \
return LIST_NOT_USED; \
mv = h->cur_pic_ptr->motion_val[list][h->mb2b_xy[xy] + 3 + y4 * h->b_stride]; \
sl->mv_cache[list][scan8[0] - 2][0] = mv[0]; \
sl->mv_cache[list][scan8[0] - 2][1] = mv[1] MV_OP; \
return h->cur_pic_ptr->ref_index[list][4 * xy + 1 + (y4 & ~1)] REF_OP;
#define USES_LIST(a, list)
Definition: mpegutils.h:99
if(ret< 0)
Definition: vf_mcdeint.c:279
static const int8_t mv[256][2]
Definition: 4xm.c:77
static const uint8_t scan8[16 *3+3]
Definition: h264dec.h:644
#define LIST_NOT_USED
Definition: h264dec.h:390

Referenced by fetch_diagonal_mv().

◆ FIX_MV_MBAFF

#define FIX_MV_MBAFF (   type,
  refn,
  mvn,
  idx 
)
Value:
if (FRAME_MBAFF(h)) { \
if (MB_FIELD(sl)) { \
if (!IS_INTERLACED(type)) { \
refn <<= 1; \
AV_COPY32(mvbuf[idx], mvn); \
mvbuf[idx][1] /= 2; \
mvn = mvbuf[idx]; \
} \
} else { \
if (IS_INTERLACED(type)) { \
refn >>= 1; \
AV_COPY32(mvbuf[idx], mvn); \
mvbuf[idx][1] *= 2; \
mvn = mvbuf[idx]; \
} \
} \
}
#define MB_FIELD(sl)
Definition: h264dec.h:72
#define IS_INTERLACED(a)
Definition: mpegutils.h:83
#define FRAME_MBAFF(h)
Definition: h264dec.h:73
cl_device_type type

Definition at line 238 of file h264_mvpred.h.

Referenced by pred_pskip_motion().

◆ MAP_MVS

#define MAP_MVS
Value:
MAP_F2F(scan8[0] - 1 - 1 * 8, topleft_type) \
MAP_F2F(scan8[0] + 0 - 1 * 8, top_type) \
MAP_F2F(scan8[0] + 1 - 1 * 8, top_type) \
MAP_F2F(scan8[0] + 2 - 1 * 8, top_type) \
MAP_F2F(scan8[0] + 3 - 1 * 8, top_type) \
MAP_F2F(scan8[0] + 4 - 1 * 8, topright_type) \
MAP_F2F(scan8[0] - 1 + 0 * 8, left_type[LTOP]) \
MAP_F2F(scan8[0] - 1 + 1 * 8, left_type[LTOP]) \
MAP_F2F(scan8[0] - 1 + 2 * 8, left_type[LBOT]) \
MAP_F2F(scan8[0] - 1 + 3 * 8, left_type[LBOT])
#define MAP_F2F(idx, mb_type)
static const uint8_t scan8[16 *3+3]
Definition: h264dec.h:644
#define LBOT
Definition: h264dec.h:77
#define LTOP
Definition: h264dec.h:76

Referenced by fill_decode_caches().

◆ MAP_F2F [1/2]

#define MAP_F2F (   idx,
  mb_type 
)
Value:
if (!IS_INTERLACED(mb_type) && sl->ref_cache[list][idx] >= 0) { \
sl->ref_cache[list][idx] *= 2; \
sl->mv_cache[list][idx][1] /= 2; \
sl->mvd_cache[list][idx][1] >>= 1; \
}
#define IS_INTERLACED(a)
Definition: mpegutils.h:83

◆ MAP_F2F [2/2]

#define MAP_F2F (   idx,
  mb_type 
)
Value:
if (IS_INTERLACED(mb_type) && sl->ref_cache[list][idx] >= 0) { \
sl->ref_cache[list][idx] >>= 1; \
sl->mv_cache[list][idx][1] *= 2; \
sl->mvd_cache[list][idx][1] <<= 1; \
}
#define IS_INTERLACED(a)
Definition: mpegutils.h:83

Function Documentation

◆ fetch_diagonal_mv()

static av_always_inline int fetch_diagonal_mv ( const H264Context h,
H264SliceContext sl,
const int16_t **  C,
int  i,
int  list,
int  part_width 
)
static

Definition at line 38 of file h264_mvpred.h.

Referenced by pred_8x16_motion(), and pred_motion().

◆ pred_motion()

static av_always_inline void pred_motion ( const H264Context *const  h,
H264SliceContext sl,
int  n,
int  part_width,
int  list,
int  ref,
int *const  mx,
int *const  my 
)
static

Get the predicted MV.

Parameters
nthe block index
part_widththe width of the partition (4, 8,16) -> (1, 2, 4)
mxthe x component of the predicted motion vector
mythe y component of the predicted motion vector

Definition at line 95 of file h264_mvpred.h.

Referenced by ff_h264_decode_mb_cabac(), ff_h264_decode_mb_cavlc(), pred_16x8_motion(), and pred_8x16_motion().

◆ pred_16x8_motion()

static av_always_inline void pred_16x8_motion ( const H264Context *const  h,
H264SliceContext sl,
int  n,
int  list,
int  ref,
int *const  mx,
int *const  my 
)
static

Get the directionally predicted 16x8 MV.

Parameters
nthe block index
mxthe x component of the predicted motion vector
mythe y component of the predicted motion vector

Definition at line 160 of file h264_mvpred.h.

Referenced by ff_h264_decode_mb_cabac(), and ff_h264_decode_mb_cavlc().

◆ pred_8x16_motion()

static av_always_inline void pred_8x16_motion ( const H264Context *const  h,
H264SliceContext sl,
int  n,
int  list,
int  ref,
int *const  mx,
int *const  my 
)
static

Get the directionally predicted 8x16 MV.

Parameters
nthe block index
mxthe x component of the predicted motion vector
mythe y component of the predicted motion vector

Definition at line 201 of file h264_mvpred.h.

Referenced by ff_h264_decode_mb_cabac(), and ff_h264_decode_mb_cavlc().

◆ pred_pskip_motion()

static av_always_inline void pred_pskip_motion ( const H264Context *const  h,
H264SliceContext sl 
)
static

Definition at line 257 of file h264_mvpred.h.

Referenced by decode_mb_skip().

◆ fill_decode_neighbors()

static void fill_decode_neighbors ( const H264Context h,
H264SliceContext sl,
int  mb_type 
)
static

Definition at line 356 of file h264_mvpred.h.

Referenced by decode_mb_skip(), ff_h264_decode_mb_cabac(), and ff_h264_decode_mb_cavlc().

◆ fill_decode_caches()

static void fill_decode_caches ( const H264Context h,
H264SliceContext sl,
int  mb_type 
)
static

Definition at line 445 of file h264_mvpred.h.

Referenced by decode_mb_skip(), ff_h264_decode_mb_cabac(), and ff_h264_decode_mb_cavlc().

◆ decode_mb_skip()

static void av_unused decode_mb_skip ( const H264Context h,
H264SliceContext sl 
)
static

decodes a P_SKIP or B_SKIP macroblock

Definition at line 803 of file h264_mvpred.h.

Referenced by ff_h264_decode_mb_cabac(), and ff_h264_decode_mb_cavlc().