[Ffmpeg-cvslog] CVS: ffmpeg/libavcodec mjpeg.c,1.122,1.123
Michael Niedermayer CVS
michael
Wed Mar 29 03:59:27 CEST 2006
Update of /cvsroot/ffmpeg/ffmpeg/libavcodec
In directory mail:/var2/tmp/cvs-serv14982
Modified Files:
mjpeg.c
Log Message:
optimizations by arpi
Index: mjpeg.c
===================================================================
RCS file: /cvsroot/ffmpeg/ffmpeg/libavcodec/mjpeg.c,v
retrieving revision 1.122
retrieving revision 1.123
diff -u -d -r1.122 -r1.123
--- mjpeg.c 5 Feb 2006 13:35:16 -0000 1.122
+++ mjpeg.c 29 Mar 2006 01:59:24 -0000 1.123
@@ -1246,11 +1246,10 @@
/* decode block and dequantize */
static int decode_block(MJpegDecodeContext *s, DCTELEM *block,
- int component, int dc_index, int ac_index, int quant_index)
+ int component, int dc_index, int ac_index, int16_t *quant_matrix)
{
int code, i, j, level, val;
VLC *ac_vlc;
- int16_t *quant_matrix;
/* DC coef */
val = mjpeg_decode_dc(s, dc_index);
@@ -1258,15 +1257,16 @@
dprintf("error dc\n");
return -1;
}
- quant_matrix = s->quant_matrixes[quant_index];
val = val * quant_matrix[0] + s->last_dc[component];
s->last_dc[component] = val;
block[0] = val;
/* AC coefs */
ac_vlc = &s->vlcs[1][ac_index];
i = 1;
+ OPEN_READER(re, &s->gb)
for(;;) {
- code = get_vlc2(&s->gb, s->vlcs[1][ac_index].table, 9, 2);
+ UPDATE_CACHE(re, &s->gb);
+ GET_VLC(code, re, &s->gb, s->vlcs[1][ac_index].table, 9, 2)
if (code < 0) {
dprintf("error ac\n");
@@ -1278,8 +1278,19 @@
if (code == 0xf0) {
i += 16;
} else {
- level = get_xbits(&s->gb, code & 0xf);
i += code >> 4;
+ code &= 0xf;
+
+ UPDATE_CACHE(re, &s->gb)
+
+ if ((int32_t)GET_CACHE(re,&s->gb)<0) { //MSB=1
+ level = NEG_USR32( GET_CACHE(re,&s->gb),code);
+ } else {
+ level = - NEG_USR32(~GET_CACHE(re,&s->gb),code);
+ }
+
+ SKIP_BITS(re, &s->gb, code)
+
if (i >= 64) {
dprintf("error count: %d\n", i);
return -1;
@@ -1291,6 +1302,8 @@
break;
}
}
+ CLOSE_READER(re, &s->gb)
+
return 0;
}
@@ -1467,7 +1480,7 @@
memset(s->block, 0, sizeof(s->block));
if (decode_block(s, s->block, i,
s->dc_index[i], s->ac_index[i],
- s->quant_index[c]) < 0) {
+ s->quant_matrixes[ s->quant_index[c] ]) < 0) {
dprintf("error y=%d x=%d\n", mb_y, mb_x);
return -1;
}
More information about the ffmpeg-cvslog
mailing list