hvirtual/quicktime/ffmpeg/libavcodec/motion_est.c File Reference

#include <stdlib.h>
#include <stdio.h>
#include <limits.h>
#include "avcodec.h"
#include "dsputil.h"
#include "mpegvideo.h"
#include <assert.h>
#include "motion_est_template.c"

Include dependency graph for motion_est.c:

Go to the source code of this file.

Data Structures

struct  Minima

Defines

#define SQ(a)   ((a)*(a))
#define P_LEFT   P[1]
#define P_TOP   P[2]
#define P_TOPRIGHT   P[3]
#define P_MEDIAN   P[4]
#define P_MV1   P[9]
#define FLAG_QPEL   1
#define FLAG_CHROMA   2
#define FLAG_DIRECT   4
#define Z_THRESHOLD   256
#define CHECK_SAD_HALF_MV(suffix, x, y)

Functions

static int sad_hpel_motion_search (MpegEncContext *s, int *mx_ptr, int *my_ptr, int dmin, int src_index, int ref_index, int size, int h)
static int update_map_generation (MotionEstContext *c)
static int minima_cmp (const void *a, const void *b)
static void init_ref (MotionEstContext *c, uint8_t *src[3], uint8_t *ref[3], uint8_t *ref2[3], int x, int y, int ref_index)
static int get_flags (MotionEstContext *c, int direct, int chroma)
static always_inline int cmp (MpegEncContext *s, const int x, const int y, const int subx, const int suby, const int size, const int h, int ref_index, int src_index, me_cmp_func cmp_func, me_cmp_func chroma_cmp_func, const int flags)
static int zero_cmp (void *s, uint8_t *a, uint8_t *b, int stride, int h)
static void zero_hpel (uint8_t *a, const uint8_t *b, int stride, int h)
void ff_init_me (MpegEncContext *s)
static void no_motion_search (MpegEncContext *s, int *mx_ptr, int *my_ptr)
static void set_p_mv_tables (MpegEncContext *s, int mx, int my, int mv4)
static void get_limits (MpegEncContext *s, int x, int y)
static void init_mv4_ref (MotionEstContext *c)
static int h263_mv4_search (MpegEncContext *s, int mx, int my, int shift)
static void init_interlaced_ref (MpegEncContext *s, int ref_index)
static int interlaced_search (MpegEncContext *s, int ref_index, int16_t(*mv_tables[2][2])[2], uint8_t *field_select_tables[2], int mx, int my, int user_field_select)
static void clip_input_mv (MpegEncContext *s, int16_t *mv, int interlaced)
static int check_input_motion (MpegEncContext *s, int mb_x, int mb_y, int p_type)
void ff_estimate_p_frame_motion (MpegEncContext *s, int mb_x, int mb_y)
int ff_pre_estimate_p_frame_motion (MpegEncContext *s, int mb_x, int mb_y)
static int ff_estimate_motion_b (MpegEncContext *s, int mb_x, int mb_y, int16_t(*mv_table)[2], int ref_index, int f_code)
static int check_bidir_mv (MpegEncContext *s, int motion_fx, int motion_fy, int motion_bx, int motion_by, int pred_fx, int pred_fy, int pred_bx, int pred_by, int size, int h)
static int bidir_refine (MpegEncContext *s, int mb_x, int mb_y)
static int direct_search (MpegEncContext *s, int mb_x, int mb_y)
void ff_estimate_b_frame_motion (MpegEncContext *s, int mb_x, int mb_y)
int ff_get_best_fcode (MpegEncContext *s, int16_t(*mv_table)[2], int type)
void ff_fix_long_p_mvs (MpegEncContext *s)
void ff_fix_long_mvs (MpegEncContext *s, uint8_t *field_select_table, int field_select, int16_t(*mv_table)[2], int f_code, int type, int truncate)


Detailed Description

Motion estimation.

Definition in file motion_est.c.


Define Documentation

#define CHECK_SAD_HALF_MV ( suffix,
x,
 ) 

Value:

{\
    d= s->dsp.pix_abs[size][(x?1:0)+(y?2:0)](NULL, pix, ptr+((x)>>1), stride, h);\
    d += (mv_penalty[pen_x + x] + mv_penalty[pen_y + y])*penalty_factor;\
    COPY3_IF_LT(dminh, d, dx, x, dy, y)\
}

Definition at line 545 of file motion_est.c.

Referenced by sad_hpel_motion_search().

#define FLAG_CHROMA   2

Definition at line 77 of file motion_est.c.

Referenced by cmp(), get_flags(), and init_interlaced_ref().

#define FLAG_DIRECT   4

Definition at line 78 of file motion_est.c.

Referenced by cmp(), direct_search(), and get_flags().

#define FLAG_QPEL   1

Definition at line 76 of file motion_est.c.

Referenced by check_input_motion(), cmp(), direct_search(), ff_get_mb_score(), and get_flags().

#define P_LEFT   P[1]

#define P_MEDIAN   P[4]

#define P_MV1   P[9]

#define P_TOP   P[2]

#define P_TOPRIGHT   P[3]

#define SQ ( a   )     ((a)*(a))

Definition at line 39 of file motion_est.c.

#define Z_THRESHOLD   256

Definition at line 543 of file motion_est.c.


Function Documentation

static int bidir_refine ( MpegEncContext s,
int  mb_x,
int  mb_y 
) [inline, static]

static int check_bidir_mv ( MpegEncContext s,
int  motion_fx,
int  motion_fy,
int  motion_bx,
int  motion_by,
int  pred_fx,
int  pred_fy,
int  pred_bx,
int  pred_by,
int  size,
int  h 
) [inline, static]

static int check_input_motion ( MpegEncContext s,
int  mb_x,
int  mb_y,
int  p_type 
) [inline, static]

static void clip_input_mv ( MpegEncContext s,
int16_t *  mv,
int  interlaced 
) [static]

static always_inline int cmp ( MpegEncContext s,
const int  x,
const int  y,
const int  subx,
const int  suby,
const int  size,
const int  h,
int  ref_index,
int  src_index,
me_cmp_func  cmp_func,
me_cmp_func  chroma_cmp_func,
const int  flags 
) [static]

static int direct_search ( MpegEncContext s,
int  mb_x,
int  mb_y 
) [inline, static]

void ff_estimate_b_frame_motion ( MpegEncContext s,
int  mb_x,
int  mb_y 
)

static int ff_estimate_motion_b ( MpegEncContext s,
int  mb_x,
int  mb_y,
int16_t(*)  mv_table[2],
int  ref_index,
int  f_code 
) [static]

void ff_estimate_p_frame_motion ( MpegEncContext s,
int  mb_x,
int  mb_y 
)

Definition at line 1139 of file motion_est.c.

References MotionEstContext::avctx, MpegEncContext::b8_stride, MpegEncContext::block_index, c, CANDIDATE_MB_TYPE_INTER, CANDIDATE_MB_TYPE_INTER4V, CANDIDATE_MB_TYPE_INTER_I, CANDIDATE_MB_TYPE_INTRA, CANDIDATE_MB_TYPE_SKIPPED, check_input_motion(), CODEC_FLAG_4MV, CODEC_FLAG_INTERLACED_ME, CODEC_FLAG_MV0, MotionEstContext::current_mv_penalty, MpegEncContext::current_picture, MpegEncContext::dc_val, MpegEncContext::dsp, MpegEncContext::f_code, FF_CMP_CHROMA, FF_CMP_SSE, ff_epzs_motion_search(), ff_get_mb_score(), FF_MB_DECISION_SIMPLE, MpegEncContext::first_slice_line, MpegEncContext::flags, FMT_H263, get_limits(), get_penalty_factor(), h263_mv4_search(), init_ref(), interlaced_search(), MpegEncContext::lambda, MpegEncContext::lambda2, MpegEncContext::last_dc, MpegEncContext::last_picture, MpegEncContext::linesize, MAX_MV, DSPContext::mb_cmp, AVCodecContext::mb_cmp, AVCodecContext::mb_decision, Picture::mb_mean, MotionEstContext::mb_penalty_factor, MpegEncContext::mb_stride, MpegEncContext::mb_type, Picture::mb_var, MotionEstContext::mb_var_sum_temp, Picture::mc_mb_var, MotionEstContext::mc_mb_var_sum_temp, MpegEncContext::me, AVCodecContext::me_cmp, ME_EPZS, ME_FULL, ME_LOG, MpegEncContext::me_method, ME_PHODS, AVCodecContext::me_sub_cmp, AVCodecContext::me_threshold, ME_X1, ME_ZERO, MotionEstContext::mv_penalty, MpegEncContext::new_picture, no_motion_search(), NULL, MpegEncContext::out_format, P, MpegEncContext::p_field_mv_table, MpegEncContext::p_field_select_table, P_LEFT, P_MEDIAN, MpegEncContext::p_mv_table, P_TOP, P_TOPRIGHT, MotionEstContext::penalty_factor, DSPContext::pix_norm1, DSPContext::pix_sum, MotionEstContext::pred_x, MotionEstContext::pred_y, MpegEncContext::qscale, MpegEncContext::quarter_sample, MotionEstContext::ref, MotionEstContext::scene_change_score, MotionEstContext::scratchpad, set_p_mv_tables(), shift(), MotionEstContext::skip, MotionEstContext::src, DSPContext::sse, MotionEstContext::stride, MotionEstContext::sub_motion_search, MotionEstContext::sub_penalty_factor, MpegEncContext::uvlinesize, MotionEstContext::uvstride, MotionEstContext::xmax, MotionEstContext::xmin, and MotionEstContext::ymax.

Here is the call graph for this function:

void ff_fix_long_mvs ( MpegEncContext s,
uint8_t *  field_select_table,
int  field_select,
int16_t(*)  mv_table[2],
int  f_code,
int  type,
int  truncate 
)

void ff_fix_long_p_mvs ( MpegEncContext s  ) 

int ff_get_best_fcode ( MpegEncContext s,
int16_t(*)  mv_table[2],
int  type 
)

void ff_init_me ( MpegEncContext s  ) 

int ff_pre_estimate_p_frame_motion ( MpegEncContext s,
int  mb_x,
int  mb_y 
)

static int get_flags ( MotionEstContext c,
int  direct,
int  chroma 
) [static]

static void get_limits ( MpegEncContext s,
int  x,
int  y 
) [inline, static]

static int h263_mv4_search ( MpegEncContext s,
int  mx,
int  my,
int  shift 
) [inline, static]

static void init_interlaced_ref ( MpegEncContext s,
int  ref_index 
) [inline, static]

static void init_mv4_ref ( MotionEstContext c  )  [inline, static]

static void init_ref ( MotionEstContext c,
uint8_t *  src[3],
uint8_t *  ref[3],
uint8_t *  ref2[3],
int  x,
int  y,
int  ref_index 
) [inline, static]

static int interlaced_search ( MpegEncContext s,
int  ref_index,
int16_t(*[2][2])  mv_tables[2],
uint8_t *  field_select_tables[2],
int  mx,
int  my,
int  user_field_select 
) [static]

static int minima_cmp ( const void *  a,
const void *  b 
) [static]

Definition at line 69 of file motion_est.c.

References Minima::height.

Referenced by sab_diamond_search().

static void no_motion_search ( MpegEncContext s,
int *  mx_ptr,
int *  my_ptr 
) [inline, static]

Definition at line 313 of file motion_est.c.

References MpegEncContext::mb_x, and MpegEncContext::mb_y.

Referenced by ff_estimate_motion_b(), and ff_estimate_p_frame_motion().

static int sad_hpel_motion_search ( MpegEncContext s,
int *  mx_ptr,
int *  my_ptr,
int  dmin,
int  src_index,
int  ref_index,
int  size,
int  h 
) [inline, static]

static void set_p_mv_tables ( MpegEncContext s,
int  mx,
int  my,
int  mv4 
) [inline, static]

static int update_map_generation ( MotionEstContext c  )  [inline, static]

static int zero_cmp ( void *  s,
uint8_t *  a,
uint8_t *  b,
int  stride,
int  h 
) [static]

Definition at line 222 of file motion_est.c.

static void zero_hpel ( uint8_t *  a,
const uint8_t *  b,
int  stride,
int  h 
) [static]

Definition at line 226 of file motion_est.c.

Referenced by ff_init_me().


Generated on Mon Apr 28 14:05:08 2008 for Cinelerra by  doxygen 1.5.5