[FFmpeg-soc] [soc]: r1391 - rv40/rv34.c
kostya
subversion at mplayerhq.hu
Fri Sep 21 07:37:38 CEST 2007
Author: kostya
Date: Fri Sep 21 07:37:37 2007
New Revision: 1391
Log:
Move DMV reading code into one place
Modified:
rv40/rv34.c
Modified: rv40/rv34.c
==============================================================================
--- rv40/rv34.c (original)
+++ rv40/rv34.c Fri Sep 21 07:37:37 2007
@@ -879,6 +879,9 @@ static inline void rv34_mc_b_interp(RV34
s->dsp.avg_h264_chroma_pixels_tab[0] (s->dest[2], srcV, s->uvlinesize, 8, uvmx, uvmy);
}
+/** Number of motion vectors in each macroblock type */
+static const int num_mvs[RV34_MB_TYPES] = { 0, 0, 1, 4, 1, 1, 0, 0, 2, 2, 2, 1 };
+
/**
* Decode motion vector differences
* and perform motion vector reconstruction and motion compensation.
@@ -889,6 +892,11 @@ static int rv34_decode_mv(RV34DecContext
GetBitContext *gb = &s->gb;
int i, j;
+ memset(r->dmv, 0, sizeof(r->dmv));
+ for(i = 0; i < num_mvs[block_type]; i++){
+ r->dmv[i][0] = ff_rv34_get_omega_signed(gb);
+ r->dmv[i][1] = ff_rv34_get_omega_signed(gb);
+ }
switch(block_type){
case RV34_MB_TYPE_INTRA:
case RV34_MB_TYPE_INTRA16x16:
@@ -900,43 +908,29 @@ static int rv34_decode_mv(RV34DecContext
}
return 0;
case RV34_MB_SKIP:
- r->dmv[0][0] = 0;
- r->dmv[0][1] = 0;
if(s->pict_type == P_TYPE){
rv34_pred_mv(r, block_type, 0);
rv34_mc(r, block_type, 0, 0, 0, 2, 2);
break;
}
case RV34_MB_B_INTERP:
- r->dmv[0][0] = 0;
- r->dmv[0][1] = 0;
- r->dmv[1][0] = 0;
- r->dmv[1][1] = 0;
rv34_pred_mv_b (r, RV34_MB_B_INTERP);
rv34_mc_b (r, RV34_MB_B_INTERP);
rv34_mc_b_interp(r, RV34_MB_B_INTERP);
break;
case RV34_MB_P_16x16:
case RV34_MB_P_MIX16x16:
- r->dmv[0][0] = ff_rv34_get_omega_signed(gb);
- r->dmv[0][1] = ff_rv34_get_omega_signed(gb);
rv34_pred_mv(r, block_type, 0);
rv34_mc(r, block_type, 0, 0, 0, 2, 2);
break;
case RV34_MB_B_FORWARD:
case RV34_MB_B_BACKWARD:
- r->dmv[0][0] = ff_rv34_get_omega_signed(gb);
- r->dmv[0][1] = ff_rv34_get_omega_signed(gb);
rv34_pred_mv_b (r, block_type);
rv34_mc_b (r, block_type);
break;
case RV34_MB_P_16x8:
case RV34_MB_P_8x16:
case RV34_MB_B_DIRECT:
- r->dmv[0][0] = ff_rv34_get_omega_signed(gb);
- r->dmv[0][1] = ff_rv34_get_omega_signed(gb);
- r->dmv[1][0] = ff_rv34_get_omega_signed(gb);
- r->dmv[1][1] = ff_rv34_get_omega_signed(gb);
rv34_pred_mv(r, block_type, 0);
rv34_pred_mv(r, block_type, 1);
if(block_type == RV34_MB_P_16x8){
@@ -955,8 +949,6 @@ static int rv34_decode_mv(RV34DecContext
break;
case RV34_MB_P_8x8:
for(i=0;i< 4;i++){
- r->dmv[i][0] = ff_rv34_get_omega_signed(gb);
- r->dmv[i][1] = ff_rv34_get_omega_signed(gb);
rv34_pred_mv(r, block_type, i);
rv34_mc(r, block_type, (i&1)<<3, (i&2)<<2, (i&1)+(i>>1)*s->b8_stride, 1, 1);
}
More information about the FFmpeg-soc
mailing list