Output correct RLE length.

master
Philip Heron 2010-10-02 18:08:39 +01:00
rodzic 2d08faf137
commit f9a4095148
2 zmienionych plików z 6 dodań i 5 usunięć

10
ssdv.c
Wyświetl plik

@ -220,7 +220,7 @@ static char ssdv_process(ssdv_t *s)
ssdv_out_jpeg_int(s, 0, s->dc[s->component]); ssdv_out_jpeg_int(s, 0, s->dc[s->component]);
else ssdv_out_jpeg_int(s, 0, 0); else ssdv_out_jpeg_int(s, 0, 0);
/* skip* to the next AC part immediately */ /* skip to the next AC part immediately */
s->acpart++; s->acpart++;
} }
else else
@ -232,8 +232,7 @@ static char ssdv_process(ssdv_t *s)
} }
else /* AC */ else /* AC */
{ {
/* Output AC codes directly */ s->acrle = 0;
//ssdv_out_huff(s, symbol);
if(symbol == 0x00) if(symbol == 0x00)
{ {
@ -251,7 +250,8 @@ static char ssdv_process(ssdv_t *s)
{ {
/* Next bits are an integer value */ /* Next bits are an integer value */
s->state = J_INT; s->state = J_INT;
s->acpart += symbol >> 4; s->acrle = symbol >> 4;
s->acpart += s->acrle;
s->needbits = symbol & 0x0F; s->needbits = symbol & 0x0F;
} }
} }
@ -288,7 +288,7 @@ static char ssdv_process(ssdv_t *s)
else /* AC */ else /* AC */
{ {
/* Output AC codes directly */ /* 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 */ /* Next AC part to expect */

1
ssdv.h
Wyświetl plik

@ -68,6 +68,7 @@ typedef struct
unsigned char mcupart; /* 0-3 = Y, 4 = Cb, 5 = Cr */ unsigned char mcupart; /* 0-3 = Y, 4 = Cb, 5 = Cr */
unsigned char acpart; /* 0 - 64; 0 = DC, 1 - 64 = AC */ unsigned char acpart; /* 0 - 64; 0 = DC, 1 - 64 = AC */
int dc[COMPONENTS]; /* DC value for each component */ 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 */ unsigned char needbits; /* Number of bits needed to decode integer */
/* Small buffer for reading SOF0 and SOS header data into */ /* Small buffer for reading SOF0 and SOS header data into */