[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    kdelibs/khtml
From:       Luboš Luňák <l.lunak () kde ! org>
Date:       2005-04-05 12:21:27
Message-ID: 20050405122127.5EC3463E () office ! kde ! org
[Download RAW message or body]

CVS commit by lunakl: 

Fix loading of progressive JPEGs.
http://lists.kde.org/?l=kfm-devel&m=111236409504837&w=2


  M +4 -0      ChangeLog   1.417
  M +15 -5     misc/loader_jpeg.cpp   1.29


--- kdelibs/khtml/ChangeLog  #1.416:1.417
@@ -1,2 +1,6 @@
+2005-04-05  Lubos Lunak <l.lunak@kde.org>
+
+        * misc/loader_jpeg.cpp: Fix loading of progressive JPEGs.
+
 2005-04-04  Lubos Lunak <l.lunak@kde.org>
 

--- kdelibs/khtml/misc/loader_jpeg.cpp  #1.28:1.29
@@ -84,4 +84,5 @@ struct khtml_jpeg_source_mgr : public jp
     int ateof;
     QRect change_rect;
+    QRect old_change_rect;
     QTime decoder_timestamp;
     bool final_pass;
@@ -375,4 +376,6 @@ int KJPEGFormat::decode(QImage& image, Q
     }
 
+again:
+
     if(state == decompressStarted) {
         state =  (!jsrc.final_pass && jsrc.decoder_timestamp.elapsed() < \
max_consumingtime) @@ -386,7 +389,8 @@ int KJPEGFormat::decode(QImage& image, Q
         do {
             retval = jpeg_consume_input(&cinfo);
-        } while (retval != JPEG_SUSPENDED && retval != JPEG_REACHED_EOI);
+        } while (retval != JPEG_SUSPENDED && retval != JPEG_REACHED_EOI
+                 && (retval != JPEG_REACHED_SOS || jsrc.decoder_timestamp.elapsed() \
< max_consumingtime));  
-        if(jsrc.decoder_timestamp.elapsed() > max_consumingtime ||
+        if(jsrc.decoder_timestamp.elapsed() >= max_consumingtime ||
            jsrc.final_pass ||
            retval == JPEG_REACHED_EOI || retval == JPEG_REACHED_SOS)
@@ -396,5 +400,4 @@ int KJPEGFormat::decode(QImage& image, Q
     if(state == prepareOutputScan)
     {
-        jsrc.decoder_timestamp.restart();
         if ( jpeg_start_output(&cinfo, cinfo.input_scan_number) )
             state = doOutputScan;
@@ -444,4 +447,8 @@ int KJPEGFormat::decode(QImage& image, Q
 
             if ( jsrc.decoder_timestamp.elapsed() >= max_consumingtime ) {
+                if( !jsrc.old_change_rect.isEmpty()) {
+                    consumer->changed(jsrc.old_change_rect);
+                    jsrc.old_change_rect = QRect();
+                }
                 consumer->changed(jsrc.change_rect);
                 jsrc.change_rect = QRect();
@@ -456,7 +463,9 @@ int KJPEGFormat::decode(QImage& image, Q
                 jsrc.final_pass = jpeg_input_complete(&cinfo);
                 jsrc.decoding_done = jsrc.final_pass && cinfo.input_scan_number == \
                cinfo.output_scan_number;
-                if ( !jsrc.decoding_done )
+                if ( !jsrc.decoding_done ) {
+                    jsrc.old_change_rect |= jsrc.change_rect;
                     jsrc.change_rect =  QRect();
             }
+            }
             else
                 jsrc.decoding_done = true;
@@ -472,7 +481,8 @@ int KJPEGFormat::decode(QImage& image, Q
                        cinfo.output_scan_number);
 #endif
-                // don't return until necessary!
                 jsrc.decoder_timestamp.restart();
                 state = decompressStarted;
+                // don't return until necessary!
+                goto again;
             }
         }


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic