libavcodec/h264_mvpred.h File Reference

H.264 / AVC / MPEG4 part10 motion vector predicion. More...

#include "internal.h"
#include "avcodec.h"
#include "h264.h"
#include "libavutil/avassert.h"

Go to the source code of this file.

Defines

#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 (H264Context *h, const int16_t **C, int i, int list, int part_width)
static av_always_inline void pred_motion (H264Context *const h, int n, int part_width, int list, int ref, int *const mx, int *const my)
 Get the predicted MV.
static av_always_inline void pred_16x8_motion (H264Context *const h, int n, int list, int ref, int *const mx, int *const my)
 Get the directionally predicted 16x8 MV.
static av_always_inline void pred_8x16_motion (H264Context *const h, int n, int list, int ref, int *const mx, int *const my)
 Get the directionally predicted 8x16 MV.
static av_always_inline void pred_pskip_motion (H264Context *const h)
static void fill_decode_neighbors (H264Context *h, int mb_type)
static void fill_decode_caches (H264Context *h, int mb_type)
static void av_unused decode_mb_skip (H264Context *h)
 decodes a P_SKIP or B_SKIP macroblock


Detailed Description

H.264 / AVC / MPEG4 part10 motion vector predicion.

Author:
Michael Niedermayer <michaelni@gmx.at>

Definition in file h264_mvpred.h.


Define Documentation

#define FIX_MV_MBAFF ( type,
refn,
mvn,
idx   ) 

Value:

if (FRAME_MBAFF) {                          \
        if (MB_FIELD) {                         \
            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] <<= 1;            \
                mvn = mvbuf[idx];               \
            }                                   \
        }                                       \
    }

Definition at line 233 of file h264_mvpred.h.

Referenced by pred_pskip_motion().

#define MAP_F2F ( idx,
mb_type   ) 

Value:

if (IS_INTERLACED(mb_type) && h->ref_cache[list][idx] >= 0) {       \
        h->ref_cache[list][idx]    >>= 1;                               \
        h->mv_cache[list][idx][1]  <<= 1;                               \
        h->mvd_cache[list][idx][1] <<= 1;                               \
    }

#define MAP_F2F ( idx,
mb_type   ) 

Value:

if (!IS_INTERLACED(mb_type) && h->ref_cache[list][idx] >= 0) {      \
        h->ref_cache[list][idx]    <<= 1;                               \
        h->mv_cache[list][idx][1]   /= 2;                               \
        h->mvd_cache[list][idx][1] >>= 1;                               \
    }

#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])

Referenced by fill_decode_caches().

#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) * s->mb_stride];    \
        if (!USES_LIST(mb_type, list))                                  \
            return LIST_NOT_USED;                                       \
        mv = s->current_picture_ptr->f.motion_val[list][h->mb2b_xy[xy] + 3 + y4 * h->b_stride]; \
        h->mv_cache[list][scan8[0] - 2][0] = mv[0];                     \
        h->mv_cache[list][scan8[0] - 2][1] = mv[1] MV_OP;               \
        return s->current_picture_ptr->f.ref_index[list][4 * xy + 1 + (y4 & ~1)] REF_OP;

Referenced by fetch_diagonal_mv().


Function Documentation

static void av_unused decode_mb_skip ( H264Context h  )  [static]

decodes a P_SKIP or B_SKIP macroblock

Definition at line 800 of file h264_mvpred.h.

Referenced by ff_h264_decode_mb_cabac(), and ff_h264_decode_mb_cavlc().

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

Definition at line 37 of file h264_mvpred.h.

Referenced by pred_8x16_motion(), and pred_motion().

static void fill_decode_caches ( H264Context h,
int  mb_type 
) [static]

Definition at line 441 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_neighbors ( H264Context h,
int  mb_type 
) [static]

Definition at line 351 of file h264_mvpred.h.

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

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

Get the directionally predicted 16x8 MV.

Parameters:
n the block index
mx the x component of the predicted motion vector
my the y component of the predicted motion vector

Definition at line 157 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 ( H264Context *const   h,
int  n,
int  list,
int  ref,
int *const   mx,
int *const   my 
) [static]

Get the directionally predicted 8x16 MV.

Parameters:
n the block index
mx the x component of the predicted motion vector
my the y component of the predicted motion vector

Definition at line 197 of file h264_mvpred.h.

Referenced by ff_h264_decode_mb_cabac(), and ff_h264_decode_mb_cavlc().

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

Get the predicted MV.

Parameters:
n the block index
part_width the width of the partition (4, 8,16) -> (1, 2, 4)
mx the x component of the predicted motion vector
my the y component of the predicted motion vector

Definition at line 94 of file h264_mvpred.h.

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

static av_always_inline void pred_pskip_motion ( H264Context *const   h  )  [static]

Definition at line 252 of file h264_mvpred.h.

Referenced by decode_mb_skip().


Generated on Fri Oct 26 02:50:05 2012 for FFmpeg by  doxygen 1.5.8