]> git.sesse.net Git - fjl/blobdiff - driver.c
Add the level bias we're supposed to have.
[fjl] / driver.c
index 1411b51311e7efca363b88b038a1c9a634173455..2e5bda67f475f7e2fe58f2f899c1f2c7e2a17769 100644 (file)
--- a/driver.c
+++ b/driver.c
@@ -62,8 +62,8 @@ void read_sof(struct byte_source* source, struct jpeg_image* image)
        assert(len >= 8);
        image->precision = read_uint8(byte_source_input_func, source);
        assert(image->precision == 8);
-       image->width = read_uint16(byte_source_input_func, source);
        image->height = read_uint16(byte_source_input_func, source);
+       image->width = read_uint16(byte_source_input_func, source);
        image->num_components = read_uint8(byte_source_input_func, source);
        len -= 8;
 
@@ -163,10 +163,9 @@ void read_scan(struct byte_source* source, struct jpeg_image* image, huffman_tab
                                                        i += 15;
                                                        continue;
                                                }
+                                               i += r;
 
                                                possibly_refill(&bits, s);
-
-                                               i += r;
                                                coeff[unzigzag[i]] = extend(read_bits(&bits, s), s);
                                        }
                        
@@ -185,8 +184,13 @@ void read_scan(struct byte_source* source, struct jpeg_image* image, huffman_tab
                                }
                        }
 
-                       if (cn == 1 && ++xb * DCTSIZE == y_stride) {
-                               fwrite(y_row_data, y_stride * DCTSIZE * image->vsample[1], 1, stdout);
+                       if (cn != 1) {
+                               continue;
+                       }
+
+                       xb += image->hsample[cn];
+                       if (xb * DCTSIZE == y_stride) {
+                               fwrite(y_row_data, y_stride * DCTSIZE * image->vsample[cn], 1, stdout);
                                xb = 0;
                        }
                }