[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