diff --git a/ssdv.c b/ssdv.c index f48723d..b229081 100644 --- a/ssdv.c +++ b/ssdv.c @@ -220,7 +220,7 @@ static char ssdv_process(ssdv_t *s) ssdv_out_jpeg_int(s, 0, s->dc[s->component]); else ssdv_out_jpeg_int(s, 0, 0); - /* skip* to the next AC part immediately */ + /* skip to the next AC part immediately */ s->acpart++; } else @@ -232,8 +232,7 @@ static char ssdv_process(ssdv_t *s) } else /* AC */ { - /* Output AC codes directly */ - //ssdv_out_huff(s, symbol); + s->acrle = 0; if(symbol == 0x00) { @@ -251,7 +250,8 @@ static char ssdv_process(ssdv_t *s) { /* Next bits are an integer value */ s->state = J_INT; - s->acpart += symbol >> 4; + s->acrle = symbol >> 4; + s->acpart += s->acrle; s->needbits = symbol & 0x0F; } } @@ -288,7 +288,7 @@ static char ssdv_process(ssdv_t *s) else /* AC */ { /* Output AC codes directly */ - ssdv_out_jpeg_int(s, 0, i); /* RLE? */ + ssdv_out_jpeg_int(s, s->acrle, i); } /* Next AC part to expect */ diff --git a/ssdv.h b/ssdv.h index 805ee4b..2dc34c2 100644 --- a/ssdv.h +++ b/ssdv.h @@ -68,6 +68,7 @@ typedef struct unsigned char mcupart; /* 0-3 = Y, 4 = Cb, 5 = Cr */ unsigned char acpart; /* 0 - 64; 0 = DC, 1 - 64 = AC */ int dc[COMPONENTS]; /* DC value for each component */ + uint8_t acrle; /* RLE value for current AC value */ unsigned char needbits; /* Number of bits needed to decode integer */ /* Small buffer for reading SOF0 and SOS header data into */