[Ffmpeg-cvslog] r5794 - trunk/libavcodec/vp3.c
michael
subversion
Wed Jul 19 23:20:56 CEST 2006
Author: michael
Date: Wed Jul 19 23:20:56 2006
New Revision: 5794
Modified:
trunk/libavcodec/vp3.c
Log:
simplification
Modified: trunk/libavcodec/vp3.c
==============================================================================
--- trunk/libavcodec/vp3.c (original)
+++ trunk/libavcodec/vp3.c Wed Jul 19 23:20:56 2006
@@ -1367,19 +1367,6 @@
int x, y;
int i = first_fragment;
- /*
- * Fragment prediction groups:
- *
- * 32222222226
- * 10000000004
- * 10000000004
- * 10000000004
- * 10000000004
- *
- * Note: Groups 5 and 7 do not exist as it would mean that the
- * fragment's x coordinate is both 0 and (width - 1) at the same time.
- */
- int predictor_group;
short predicted_dc;
/* validity flags for the left, up-left, up, and up-right fragments */
@@ -1458,113 +1445,33 @@
current_frame_type =
compatible_frame[s->all_fragments[i].coding_method];
- predictor_group = (x == 0) + ((y == 0) << 1) +
- ((x + 1 == fragment_width) << 2);
debug_dc_pred(" frag %d: group %d, orig DC = %d, ",
- i, predictor_group, DC_COEFF(i));
-
- switch (predictor_group) {
-
- case 0:
- /* main body of fragments; consider all 4 possible
- * fragments for prediction */
-
- /* calculate the indices of the predicting fragments */
- ul = i - fragment_width - 1;
- u = i - fragment_width;
- ur = i - fragment_width + 1;
- l = i - 1;
-
- /* fetch the DC values for the predicting fragments */
- vul = DC_COEFF(ul);
- vu = DC_COEFF(u);
- vur = DC_COEFF(ur);
- vl = DC_COEFF(l);
-
- /* figure out which fragments are valid */
- ful = FRAME_CODED(ul) && COMPATIBLE_FRAME(ul);
- fu = FRAME_CODED(u) && COMPATIBLE_FRAME(u);
- fur = FRAME_CODED(ur) && COMPATIBLE_FRAME(ur);
- fl = FRAME_CODED(l) && COMPATIBLE_FRAME(l);
-
- /* decide which predictor transform to use */
- transform = (fl*PL) | (fu*PU) | (ful*PUL) | (fur*PUR);
-
- break;
-
- case 1:
- /* left column of fragments, not including top corner;
- * only consider up and up-right fragments */
-
- /* calculate the indices of the predicting fragments */
- u = i - fragment_width;
- ur = i - fragment_width + 1;
-
- /* fetch the DC values for the predicting fragments */
- vu = DC_COEFF(u);
- vur = DC_COEFF(ur);
-
- /* figure out which fragments are valid */
- fur = FRAME_CODED(ur) && COMPATIBLE_FRAME(ur);
- fu = FRAME_CODED(u) && COMPATIBLE_FRAME(u);
-
- /* decide which predictor transform to use */
- transform = (fu*PU) | (fur*PUR);
-
- break;
+ i, -1, DC_COEFF(i));
- case 2:
- case 6:
- /* top row of fragments, not including top-left frag;
- * only consider the left fragment for prediction */
-
- /* calculate the indices of the predicting fragments */
- l = i - 1;
-
- /* fetch the DC values for the predicting fragments */
+ transform= 0;
+ if(x){
+ l= i-1;
vl = DC_COEFF(l);
-
- /* figure out which fragments are valid */
fl = FRAME_CODED(l) && COMPATIBLE_FRAME(l);
-
- /* decide which predictor transform to use */
- transform = (fl*PL);
-
- break;
-
- case 3:
- /* top-left fragment */
-
- /* nothing to predict from in this case */
- transform = 0;
-
- break;
-
- case 4:
- /* right column of fragments, not including top corner;
- * consider up-left, up, and left fragments for
- * prediction */
-
- /* calculate the indices of the predicting fragments */
- ul = i - fragment_width - 1;
- u = i - fragment_width;
- l = i - 1;
-
- /* fetch the DC values for the predicting fragments */
- vul = DC_COEFF(ul);
+ transform |= fl*PL;
+ }
+ if(y){
+ u= i-fragment_width;
vu = DC_COEFF(u);
- vl = DC_COEFF(l);
-
- /* figure out which fragments are valid */
- ful = FRAME_CODED(ul) && COMPATIBLE_FRAME(ul);
fu = FRAME_CODED(u) && COMPATIBLE_FRAME(u);
- fl = FRAME_CODED(l) && COMPATIBLE_FRAME(l);
-
- /* decide which predictor transform to use */
- transform = (fl*PL) | (fu*PU) | (ful*PUL);
-
- break;
-
+ transform |= fu*PU;
+ if(x){
+ ul= i-fragment_width-1;
+ vul = DC_COEFF(ul);
+ ful = FRAME_CODED(ul) && COMPATIBLE_FRAME(ul);
+ transform |= ful*PUL;
+ }
+ if(x + 1 < fragment_width){
+ ur= i-fragment_width+1;
+ vur = DC_COEFF(ur);
+ fur = FRAME_CODED(ur) && COMPATIBLE_FRAME(ur);
+ transform |= fur*PUR;
+ }
}
debug_dc_pred("transform = %d, ", transform);
More information about the ffmpeg-cvslog
mailing list