FFmpeg
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

#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)
static const int8_t mv[256][2]
Definition: 4xm.c:77
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining list
static const uint8_t scan8[16 *3+3]
Definition: h264dec.h:644
#define LIST_NOT_USED
Definition: h264dec.h:390
these buffered frames must be flushed immediately if a new input produces new the filter must not call request_frame to get more It must just process the frame or queue it The task of requesting more frames is left to the filter s request_frame method or the application If a filter has several the filter must be ready for frames arriving randomly on any input any filter with several inputs will most likely require some kind of queuing mechanism It is perfectly acceptable to have a limited queue and to drop frames when the inputs are too unbalanced request_frame For filters that do not use the this method is called when a frame is wanted on an output For a it should directly call filter_frame on the corresponding output For a if there are queued frames already one of these frames should be pushed If the filter should request a frame on one of its repeatedly until at least one frame has been pushed Return or at least make progress towards producing a it should return

Referenced by fetch_diagonal_mv().

#define FIX_MV_MBAFF (   type,
  refn,
  mvn,
  idx 
)
Value:
if (FRAME_MBAFF(h)) { \
if (MB_FIELD(sl)) { \
refn <<= 1; \
AV_COPY32(mvbuf[idx], mvn); \
mvbuf[idx][1] /= 2; \
mvn = mvbuf[idx]; \
} \
} else { \
refn >>= 1; \
AV_COPY32(mvbuf[idx], mvn); \
mvbuf[idx][1] *= 2; \
mvn = mvbuf[idx]; \
} \
} \
}
GLint GLenum type
Definition: opengl_enc.c:104
#define AV_COPY32(d, s)
Definition: intreadwrite.h:601
#define MB_FIELD(sl)
Definition: h264dec.h:72
if(ret)
#define IS_INTERLACED(a)
Definition: mpegutils.h:83
#define FRAME_MBAFF(h)
Definition: h264dec.h:73

Definition at line 238 of file h264_mvpred.h.

Referenced by pred_pskip_motion().

#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().

#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
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining list
#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
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining list

Function Documentation

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().

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().

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().

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().

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().

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().

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().

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().