From 25c899471decb181b03eaf45ba4b4a1c634c4248 Mon Sep 17 00:00:00 2001 From: Stefan Gehrer Date: Sat, 7 Jul 2007 06:15:05 +0000 Subject: [PATCH] move modification of intra prediction modes into its own inline function Originally committed as revision 9514 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavcodec/cavs.c | 19 +------------------ libavcodec/cavs.h | 24 ++++++++++++++++++++++++ libavcodec/cavsdata.h | 8 ++++---- 3 files changed, 29 insertions(+), 22 deletions(-) diff --git a/libavcodec/cavs.c b/libavcodec/cavs.c index c1b9f49463..e92e869367 100644 --- a/libavcodec/cavs.c +++ b/libavcodec/cavs.c @@ -616,24 +616,7 @@ static int decode_mb_i(AVSContext *h, int cbp_code) { av_log(h->s.avctx, AV_LOG_ERROR, "illegal intra chroma pred mode\n"); return -1; } - - /* save pred modes before they get modified */ - h->pred_mode_Y[3] = h->pred_mode_Y[5]; - h->pred_mode_Y[6] = h->pred_mode_Y[8]; - h->top_pred_Y[h->mbx*2+0] = h->pred_mode_Y[7]; - h->top_pred_Y[h->mbx*2+1] = h->pred_mode_Y[8]; - - /* modify pred modes according to availability of neighbour samples */ - if(!(h->flags & A_AVAIL)) { - modify_pred(left_modifier_l, &h->pred_mode_Y[4] ); - modify_pred(left_modifier_l, &h->pred_mode_Y[7] ); - modify_pred(left_modifier_c, &pred_mode_uv ); - } - if(!(h->flags & B_AVAIL)) { - modify_pred(top_modifier_l, &h->pred_mode_Y[4] ); - modify_pred(top_modifier_l, &h->pred_mode_Y[5] ); - modify_pred(top_modifier_c, &pred_mode_uv ); - } + modify_mb_i(h, &pred_mode_uv); /* get coded block pattern */ if(h->pic_type == FF_I_TYPE) diff --git a/libavcodec/cavs.h b/libavcodec/cavs.h index a2d050a2b3..2d56d4bb1a 100644 --- a/libavcodec/cavs.h +++ b/libavcodec/cavs.h @@ -224,6 +224,10 @@ typedef struct { DCTELEM *block; } AVSContext; +extern const int_fast8_t ff_left_modifier_l[8]; +extern const int_fast8_t ff_top_modifier_l[8]; +extern const int_fast8_t ff_left_modifier_c[7]; +extern const int_fast8_t ff_top_modifier_c[7]; extern const vector_t ff_cavs_un_mv; static inline void load_intra_pred_luma(AVSContext *h, uint8_t *top, @@ -301,6 +305,26 @@ static inline void modify_pred(const int_fast8_t *mod_table, int *mode) { } } +static inline void modify_mb_i(AVSContext *h, int *pred_mode_uv) { + /* save pred modes before they get modified */ + h->pred_mode_Y[3] = h->pred_mode_Y[5]; + h->pred_mode_Y[6] = h->pred_mode_Y[8]; + h->top_pred_Y[h->mbx*2+0] = h->pred_mode_Y[7]; + h->top_pred_Y[h->mbx*2+1] = h->pred_mode_Y[8]; + + /* modify pred modes according to availability of neighbour samples */ + if(!(h->flags & A_AVAIL)) { + modify_pred(ff_left_modifier_l, &h->pred_mode_Y[4] ); + modify_pred(ff_left_modifier_l, &h->pred_mode_Y[7] ); + modify_pred(ff_left_modifier_c, pred_mode_uv ); + } + if(!(h->flags & B_AVAIL)) { + modify_pred(ff_top_modifier_l, &h->pred_mode_Y[4] ); + modify_pred(ff_top_modifier_l, &h->pred_mode_Y[5] ); + modify_pred(ff_top_modifier_c, pred_mode_uv ); + } +} + static inline void set_mvs(vector_t *mv, enum block_t size) { switch(size) { case BLK_16X16: diff --git a/libavcodec/cavsdata.h b/libavcodec/cavsdata.h index 2b38f39e1a..86f7e179bb 100644 --- a/libavcodec/cavsdata.h +++ b/libavcodec/cavsdata.h @@ -513,9 +513,9 @@ static const uint8_t tc_tab[64] = { 5, 5, 5, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 9, 9, 9 }; -static const int_fast8_t left_modifier_l[8] = { 0,-1, 6,-1,-1, 7, 6, 7}; -static const int_fast8_t top_modifier_l[8] = {-1, 1, 5,-1,-1, 5, 7, 7}; -static const int_fast8_t left_modifier_c[7] = { 5,-1, 2,-1, 6, 5, 6}; -static const int_fast8_t top_modifier_c[7] = { 4, 1,-1,-1, 4, 6, 6}; +const int_fast8_t ff_left_modifier_l[8] = { 0,-1, 6,-1,-1, 7, 6, 7}; +const int_fast8_t ff_top_modifier_l[8] = {-1, 1, 5,-1,-1, 5, 7, 7}; +const int_fast8_t ff_left_modifier_c[7] = { 5,-1, 2,-1, 6, 5, 6}; +const int_fast8_t ff_top_modifier_c[7] = { 4, 1,-1,-1, 4, 6, 6}; #endif // AVCODEC_CAVSDATA_H