|
|
|
@ -37,7 +37,7 @@ |
|
|
|
|
* |
|
|
|
|
****************************************************************************/ |
|
|
|
|
|
|
|
|
|
static inline int get_bs(vector_t *mvP, vector_t *mvQ, int b) { |
|
|
|
|
static inline int get_bs(cavs_vector *mvP, cavs_vector *mvQ, int b) { |
|
|
|
|
if((mvP->ref == REF_INTRA) || (mvQ->ref == REF_INTRA)) |
|
|
|
|
return 2; |
|
|
|
|
if( (abs(mvP->x - mvQ->x) >= 4) || (abs(mvP->y - mvQ->y) >= 4) ) |
|
|
|
@ -327,7 +327,7 @@ static inline void mc_dir_part(AVSContext *h,Picture *pic,int square, |
|
|
|
|
int chroma_height,int delta,int list,uint8_t *dest_y, |
|
|
|
|
uint8_t *dest_cb,uint8_t *dest_cr,int src_x_offset, |
|
|
|
|
int src_y_offset,qpel_mc_func *qpix_op, |
|
|
|
|
h264_chroma_mc_func chroma_op,vector_t *mv){ |
|
|
|
|
h264_chroma_mc_func chroma_op,cavs_vector *mv){ |
|
|
|
|
MpegEncContext * const s = &h->s; |
|
|
|
|
const int mx= mv->x + src_x_offset*8; |
|
|
|
|
const int my= mv->y + src_y_offset*8; |
|
|
|
@ -382,7 +382,7 @@ static inline void mc_part_std(AVSContext *h,int square,int chroma_height,int de |
|
|
|
|
uint8_t *dest_y,uint8_t *dest_cb,uint8_t *dest_cr, |
|
|
|
|
int x_offset, int y_offset,qpel_mc_func *qpix_put, |
|
|
|
|
h264_chroma_mc_func chroma_put,qpel_mc_func *qpix_avg, |
|
|
|
|
h264_chroma_mc_func chroma_avg, vector_t *mv){ |
|
|
|
|
h264_chroma_mc_func chroma_avg, cavs_vector *mv){ |
|
|
|
|
qpel_mc_func *qpix_op= qpix_put; |
|
|
|
|
h264_chroma_mc_func chroma_op= chroma_put; |
|
|
|
|
|
|
|
|
@ -447,14 +447,15 @@ void ff_cavs_inter(AVSContext *h, enum mb_t mb_type) { |
|
|
|
|
* |
|
|
|
|
****************************************************************************/ |
|
|
|
|
|
|
|
|
|
static inline void scale_mv(AVSContext *h, int *d_x, int *d_y, vector_t *src, int distp) { |
|
|
|
|
static inline void scale_mv(AVSContext *h, int *d_x, int *d_y, cavs_vector *src, int distp) { |
|
|
|
|
int den = h->scale_den[src->ref]; |
|
|
|
|
|
|
|
|
|
*d_x = (src->x*distp*den + 256 + (src->x>>31)) >> 9; |
|
|
|
|
*d_y = (src->y*distp*den + 256 + (src->y>>31)) >> 9; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static inline void mv_pred_median(AVSContext *h, vector_t *mvP, vector_t *mvA, vector_t *mvB, vector_t *mvC) { |
|
|
|
|
static inline void mv_pred_median(AVSContext *h, cavs_vector *mvP, |
|
|
|
|
cavs_vector *mvA, cavs_vector *mvB, cavs_vector *mvC) { |
|
|
|
|
int ax, ay, bx, by, cx, cy; |
|
|
|
|
int len_ab, len_bc, len_ca, len_mid; |
|
|
|
|
|
|
|
|
@ -481,11 +482,11 @@ static inline void mv_pred_median(AVSContext *h, vector_t *mvP, vector_t *mvA, v |
|
|
|
|
|
|
|
|
|
void ff_cavs_mv(AVSContext *h, enum mv_loc_t nP, enum mv_loc_t nC, |
|
|
|
|
enum mv_pred_t mode, enum block_t size, int ref) { |
|
|
|
|
vector_t *mvP = &h->mv[nP]; |
|
|
|
|
vector_t *mvA = &h->mv[nP-1]; |
|
|
|
|
vector_t *mvB = &h->mv[nP-4]; |
|
|
|
|
vector_t *mvC = &h->mv[nC]; |
|
|
|
|
const vector_t *mvP2 = NULL; |
|
|
|
|
cavs_vector *mvP = &h->mv[nP]; |
|
|
|
|
cavs_vector *mvA = &h->mv[nP-1]; |
|
|
|
|
cavs_vector *mvB = &h->mv[nP-4]; |
|
|
|
|
cavs_vector *mvC = &h->mv[nC]; |
|
|
|
|
const cavs_vector *mvP2 = NULL; |
|
|
|
|
|
|
|
|
|
mvP->ref = ref; |
|
|
|
|
mvP->dist = h->dist[mvP->ref]; |
|
|
|
@ -655,15 +656,15 @@ void ff_cavs_init_pic(AVSContext *h) { |
|
|
|
|
void ff_cavs_init_top_lines(AVSContext *h) { |
|
|
|
|
/* alloc top line of predictors */ |
|
|
|
|
h->top_qp = av_malloc( h->mb_width); |
|
|
|
|
h->top_mv[0] = av_malloc((h->mb_width*2+1)*sizeof(vector_t)); |
|
|
|
|
h->top_mv[1] = av_malloc((h->mb_width*2+1)*sizeof(vector_t)); |
|
|
|
|
h->top_mv[0] = av_malloc((h->mb_width*2+1)*sizeof(cavs_vector)); |
|
|
|
|
h->top_mv[1] = av_malloc((h->mb_width*2+1)*sizeof(cavs_vector)); |
|
|
|
|
h->top_pred_Y = av_malloc( h->mb_width*2*sizeof(*h->top_pred_Y)); |
|
|
|
|
h->top_border_y = av_malloc((h->mb_width+1)*16); |
|
|
|
|
h->top_border_u = av_malloc((h->mb_width)*10); |
|
|
|
|
h->top_border_v = av_malloc((h->mb_width)*10); |
|
|
|
|
|
|
|
|
|
/* alloc space for co-located MVs and types */ |
|
|
|
|
h->col_mv = av_malloc( h->mb_width*h->mb_height*4*sizeof(vector_t)); |
|
|
|
|
h->col_mv = av_malloc( h->mb_width*h->mb_height*4*sizeof(cavs_vector)); |
|
|
|
|
h->col_type_base = av_malloc(h->mb_width*h->mb_height); |
|
|
|
|
h->block = av_mallocz(64*sizeof(DCTELEM)); |
|
|
|
|
} |
|
|
|
|