#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 |
Definition in file h264_mvpred.h.
#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().
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 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.
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.
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.
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] |