Have non-animated image decoders give EOD earlier
diff --git a/release/c/wuffs-unsupported-snapshot.c b/release/c/wuffs-unsupported-snapshot.c
index d82edab..a870bb9 100644
--- a/release/c/wuffs-unsupported-snapshot.c
+++ b/release/c/wuffs-unsupported-snapshot.c
@@ -5621,7 +5621,6 @@
uint8_t f_call_sequence;
bool f_top_down;
uint32_t f_pad_per_row;
- uint64_t f_bytes_per_row;
uint32_t f_src_pixfmt;
uint32_t f_io_redirect_fourcc;
uint64_t f_io_redirect_pos;
@@ -5646,7 +5645,6 @@
uint32_t p_decode_image_config[1];
uint32_t p_decode_frame_config[1];
uint32_t p_decode_frame[1];
- uint32_t p_skip_frame[1];
uint32_t p_read_palette[1];
} private_impl;
@@ -5662,10 +5660,6 @@
uint64_t scratch;
} s_decode_frame[1];
struct {
- uint32_t v_rle_state;
- uint64_t scratch;
- } s_skip_frame[1];
- struct {
uint32_t v_i;
uint64_t scratch;
} s_read_palette[1];
@@ -7788,7 +7782,6 @@
uint32_t p_decode_image_config[1];
uint32_t p_decode_frame_config[1];
uint32_t p_decode_frame[1];
- uint32_t p_skip_frame[1];
} private_impl;
struct {
@@ -7803,9 +7796,6 @@
uint8_t v_src[1];
uint8_t v_c;
} s_decode_frame[1];
- struct {
- uint64_t scratch;
- } s_skip_frame[1];
} private_data;
#ifdef __cplusplus
@@ -15870,11 +15860,6 @@
wuffs_base__io_buffer* a_src);
static wuffs_base__status
-wuffs_bmp__decoder__skip_frame(
- wuffs_bmp__decoder* self,
- wuffs_base__io_buffer* a_src);
-
-static wuffs_base__status
wuffs_bmp__decoder__read_palette(
wuffs_bmp__decoder* self,
wuffs_base__io_buffer* a_src);
@@ -16866,27 +16851,20 @@
}
if (self->private_impl.f_bits_per_pixel == 1) {
v_byte_width = ((self->private_impl.f_width >> 3) + (((self->private_impl.f_width & 7) + 7) >> 3));
- self->private_impl.f_bytes_per_row = ((((((uint64_t)(v_byte_width)) * 1) + 3) >> 2) << 2);
self->private_impl.f_pad_per_row = ((4 - (v_byte_width & 3)) & 3);
} else if (self->private_impl.f_bits_per_pixel == 2) {
v_byte_width = ((self->private_impl.f_width >> 2) + (((self->private_impl.f_width & 3) + 3) >> 2));
- self->private_impl.f_bytes_per_row = ((((((uint64_t)(v_byte_width)) * 1) + 3) >> 2) << 2);
self->private_impl.f_pad_per_row = ((4 - (v_byte_width & 3)) & 3);
} else if (self->private_impl.f_bits_per_pixel == 4) {
v_byte_width = ((self->private_impl.f_width >> 1) + (self->private_impl.f_width & 1));
- self->private_impl.f_bytes_per_row = ((((((uint64_t)(v_byte_width)) * 1) + 3) >> 2) << 2);
self->private_impl.f_pad_per_row = ((4 - (v_byte_width & 3)) & 3);
} else if (self->private_impl.f_bits_per_pixel == 8) {
- self->private_impl.f_bytes_per_row = ((((((uint64_t)(self->private_impl.f_width)) * 1) + 3) >> 2) << 2);
self->private_impl.f_pad_per_row = ((4 - (self->private_impl.f_width & 3)) & 3);
} else if (self->private_impl.f_bits_per_pixel == 16) {
- self->private_impl.f_bytes_per_row = ((((((uint64_t)(self->private_impl.f_width)) * 2) + 3) >> 2) << 2);
self->private_impl.f_pad_per_row = ((self->private_impl.f_width & 1) * 2);
} else if (self->private_impl.f_bits_per_pixel == 24) {
- self->private_impl.f_bytes_per_row = ((((((uint64_t)(self->private_impl.f_width)) * 3) + 3) >> 2) << 2);
self->private_impl.f_pad_per_row = (self->private_impl.f_width & 3);
} else if (self->private_impl.f_bits_per_pixel == 32) {
- self->private_impl.f_bytes_per_row = (((uint64_t)(self->private_impl.f_width)) * 4);
self->private_impl.f_pad_per_row = 0;
}
self->private_impl.f_frame_config_io_position = wuffs_base__u64__sat_add(a_src->meta.pos, ((uint64_t)(iop_a_src - io0_a_src)));
@@ -16993,17 +16971,7 @@
goto exit;
}
} else if (self->private_impl.f_call_sequence == 2) {
- if (a_src) {
- a_src->meta.ri = ((size_t)(iop_a_src - a_src->data.ptr));
- }
- WUFFS_BASE__COROUTINE_SUSPENSION_POINT(2);
- status = wuffs_bmp__decoder__skip_frame(self, a_src);
- if (a_src) {
- iop_a_src = a_src->data.ptr + a_src->meta.ri;
- }
- if (status.repr) {
- goto suspend;
- }
+ self->private_impl.f_call_sequence = 3;
status = wuffs_base__make_status(wuffs_base__note__end_of_data);
goto ok;
} else {
@@ -17914,227 +17882,6 @@
return status;
}
-// -------- func bmp.decoder.skip_frame
-
-static wuffs_base__status
-wuffs_bmp__decoder__skip_frame(
- wuffs_bmp__decoder* self,
- wuffs_base__io_buffer* a_src) {
- wuffs_base__status status = wuffs_base__make_status(NULL);
-
- uint8_t v_code = 0;
- uint32_t v_rle_state = 0;
-
- const uint8_t* iop_a_src = NULL;
- const uint8_t* io0_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
- const uint8_t* io1_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
- const uint8_t* io2_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
- if (a_src) {
- io0_a_src = a_src->data.ptr;
- io1_a_src = io0_a_src + a_src->meta.ri;
- iop_a_src = io1_a_src;
- io2_a_src = io0_a_src + a_src->meta.wi;
- }
-
- uint32_t coro_susp_point = self->private_impl.p_skip_frame[0];
- if (coro_susp_point) {
- v_rle_state = self->private_data.s_skip_frame[0].v_rle_state;
- }
- switch (coro_susp_point) {
- WUFFS_BASE__COROUTINE_SUSPENSION_POINT_0;
-
- self->private_data.s_skip_frame[0].scratch = self->private_impl.f_padding;
- WUFFS_BASE__COROUTINE_SUSPENSION_POINT(1);
- if (self->private_data.s_skip_frame[0].scratch > ((uint64_t)(io2_a_src - iop_a_src))) {
- self->private_data.s_skip_frame[0].scratch -= ((uint64_t)(io2_a_src - iop_a_src));
- iop_a_src = io2_a_src;
- status = wuffs_base__make_status(wuffs_base__suspension__short_read);
- goto suspend;
- }
- iop_a_src += self->private_data.s_skip_frame[0].scratch;
- if ((self->private_impl.f_compression != 1) && (self->private_impl.f_compression != 2)) {
- self->private_data.s_skip_frame[0].scratch = (self->private_impl.f_bytes_per_row * ((uint64_t)(self->private_impl.f_height)));
- WUFFS_BASE__COROUTINE_SUSPENSION_POINT(2);
- if (self->private_data.s_skip_frame[0].scratch > ((uint64_t)(io2_a_src - iop_a_src))) {
- self->private_data.s_skip_frame[0].scratch -= ((uint64_t)(io2_a_src - iop_a_src));
- iop_a_src = io2_a_src;
- status = wuffs_base__make_status(wuffs_base__suspension__short_read);
- goto suspend;
- }
- iop_a_src += self->private_data.s_skip_frame[0].scratch;
- } else {
- label__loop__continue:;
- while (true) {
- if (v_rle_state == 0) {
- {
- WUFFS_BASE__COROUTINE_SUSPENSION_POINT(3);
- if (WUFFS_BASE__UNLIKELY(iop_a_src == io2_a_src)) {
- status = wuffs_base__make_status(wuffs_base__suspension__short_read);
- goto suspend;
- }
- uint8_t t_0 = *iop_a_src++;
- v_code = t_0;
- }
- if (v_code == 0) {
- v_rle_state = 2;
- goto label__loop__continue;
- }
- self->private_impl.f_rle_length = ((uint32_t)(v_code));
- v_rle_state = 1;
- goto label__loop__continue;
- } else if (v_rle_state == 1) {
- {
- WUFFS_BASE__COROUTINE_SUSPENSION_POINT(4);
- if (WUFFS_BASE__UNLIKELY(iop_a_src == io2_a_src)) {
- status = wuffs_base__make_status(wuffs_base__suspension__short_read);
- goto suspend;
- }
- uint8_t t_1 = *iop_a_src++;
- v_code = t_1;
- }
- wuffs_base__u32__sat_add_indirect(&self->private_impl.f_dst_x, self->private_impl.f_rle_length);
- v_rle_state = 0;
- goto label__loop__continue;
- } else if (v_rle_state == 2) {
- {
- WUFFS_BASE__COROUTINE_SUSPENSION_POINT(5);
- if (WUFFS_BASE__UNLIKELY(iop_a_src == io2_a_src)) {
- status = wuffs_base__make_status(wuffs_base__suspension__short_read);
- goto suspend;
- }
- uint8_t t_2 = *iop_a_src++;
- v_code = t_2;
- }
- if (v_code < 2) {
- if ((self->private_impl.f_dst_y >= self->private_impl.f_height) && (v_code == 0)) {
- status = wuffs_base__make_status(wuffs_bmp__error__bad_rle_compression);
- goto exit;
- }
- self->private_impl.f_dst_x = 0;
- self->private_impl.f_dst_y += self->private_impl.f_dst_y_inc;
- if (v_code > 0) {
- goto label__loop__break;
- }
- v_rle_state = 0;
- goto label__loop__continue;
- } else if (v_code == 2) {
- v_rle_state = 4;
- goto label__loop__continue;
- }
- self->private_impl.f_rle_length = ((uint32_t)(v_code));
- v_rle_state = 3;
- goto label__loop__continue;
- } else if (v_rle_state == 3) {
- if (self->private_impl.f_bits_per_pixel == 8) {
- self->private_data.s_skip_frame[0].scratch = (((self->private_impl.f_rle_length + 1) / 2) * 2);
- WUFFS_BASE__COROUTINE_SUSPENSION_POINT(6);
- if (self->private_data.s_skip_frame[0].scratch > ((uint64_t)(io2_a_src - iop_a_src))) {
- self->private_data.s_skip_frame[0].scratch -= ((uint64_t)(io2_a_src - iop_a_src));
- iop_a_src = io2_a_src;
- status = wuffs_base__make_status(wuffs_base__suspension__short_read);
- goto suspend;
- }
- iop_a_src += self->private_data.s_skip_frame[0].scratch;
- } else {
- self->private_data.s_skip_frame[0].scratch = (((self->private_impl.f_rle_length + 3) / 4) * 2);
- WUFFS_BASE__COROUTINE_SUSPENSION_POINT(7);
- if (self->private_data.s_skip_frame[0].scratch > ((uint64_t)(io2_a_src - iop_a_src))) {
- self->private_data.s_skip_frame[0].scratch -= ((uint64_t)(io2_a_src - iop_a_src));
- iop_a_src = io2_a_src;
- status = wuffs_base__make_status(wuffs_base__suspension__short_read);
- goto suspend;
- }
- iop_a_src += self->private_data.s_skip_frame[0].scratch;
- }
- wuffs_base__u32__sat_add_indirect(&self->private_impl.f_dst_x, self->private_impl.f_rle_length);
- self->private_impl.f_rle_length = 0;
- v_rle_state = 0;
- goto label__loop__continue;
- } else if (v_rle_state == 4) {
- {
- WUFFS_BASE__COROUTINE_SUSPENSION_POINT(8);
- if (WUFFS_BASE__UNLIKELY(iop_a_src == io2_a_src)) {
- status = wuffs_base__make_status(wuffs_base__suspension__short_read);
- goto suspend;
- }
- uint8_t t_3 = *iop_a_src++;
- self->private_impl.f_rle_delta_x = t_3;
- }
- v_rle_state = 5;
- goto label__loop__continue;
- }
- {
- WUFFS_BASE__COROUTINE_SUSPENSION_POINT(9);
- if (WUFFS_BASE__UNLIKELY(iop_a_src == io2_a_src)) {
- status = wuffs_base__make_status(wuffs_base__suspension__short_read);
- goto suspend;
- }
- uint8_t t_4 = *iop_a_src++;
- v_code = t_4;
- }
- if (self->private_impl.f_rle_delta_x > 0) {
- wuffs_base__u32__sat_add_indirect(&self->private_impl.f_dst_x, ((uint32_t)(self->private_impl.f_rle_delta_x)));
- self->private_impl.f_rle_delta_x = 0;
- if (self->private_impl.f_dst_x > self->private_impl.f_width) {
- status = wuffs_base__make_status(wuffs_bmp__error__bad_rle_compression);
- goto exit;
- }
- }
- if (v_code > 0) {
-#if defined(__GNUC__)
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wconversion"
-#endif
- v_code -= 1;
-#if defined(__GNUC__)
-#pragma GCC diagnostic pop
-#endif
- while (true) {
- self->private_impl.f_dst_y += self->private_impl.f_dst_y_inc;
- if (self->private_impl.f_dst_y >= self->private_impl.f_height) {
- status = wuffs_base__make_status(wuffs_bmp__error__bad_rle_compression);
- goto exit;
- }
- if (v_code <= 0) {
- goto label__0__break;
- }
-#if defined(__GNUC__)
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wconversion"
-#endif
- v_code -= 1;
-#if defined(__GNUC__)
-#pragma GCC diagnostic pop
-#endif
- }
- label__0__break:;
- }
- v_rle_state = 0;
- }
- label__loop__break:;
- }
- self->private_impl.f_call_sequence = 3;
-
- goto ok;
- ok:
- self->private_impl.p_skip_frame[0] = 0;
- goto exit;
- }
-
- goto suspend;
- suspend:
- self->private_impl.p_skip_frame[0] = wuffs_base__status__is_suspension(&status) ? coro_susp_point : 0;
- self->private_data.s_skip_frame[0].v_rle_state = v_rle_state;
-
- goto exit;
- exit:
- if (a_src) {
- a_src->meta.ri = ((size_t)(iop_a_src - a_src->data.ptr));
- }
-
- return status;
-}
-
// -------- func bmp.decoder.frame_dirty_rect
WUFFS_BASE__MAYBE_STATIC wuffs_base__rect_ie_u32
@@ -27645,11 +27392,6 @@
// ---------------- Private Function Prototypes
-static wuffs_base__status
-wuffs_wbmp__decoder__skip_frame(
- wuffs_wbmp__decoder* self,
- wuffs_base__io_buffer* a_src);
-
// ---------------- VTables
const wuffs_base__image_decoder__func_ptrs
@@ -27971,17 +27713,7 @@
goto exit;
}
} else if (self->private_impl.f_call_sequence == 2) {
- if (a_src) {
- a_src->meta.ri = ((size_t)(iop_a_src - a_src->data.ptr));
- }
- WUFFS_BASE__COROUTINE_SUSPENSION_POINT(2);
- status = wuffs_wbmp__decoder__skip_frame(self, a_src);
- if (a_src) {
- iop_a_src = a_src->data.ptr + a_src->meta.ri;
- }
- if (status.repr) {
- goto suspend;
- }
+ self->private_impl.f_call_sequence = 3;
status = wuffs_base__make_status(wuffs_base__note__end_of_data);
goto ok;
} else {
@@ -28199,64 +27931,6 @@
return status;
}
-// -------- func wbmp.decoder.skip_frame
-
-static wuffs_base__status
-wuffs_wbmp__decoder__skip_frame(
- wuffs_wbmp__decoder* self,
- wuffs_base__io_buffer* a_src) {
- wuffs_base__status status = wuffs_base__make_status(NULL);
-
- uint64_t v_bytes_per_row = 0;
- uint64_t v_total_bytes = 0;
-
- const uint8_t* iop_a_src = NULL;
- const uint8_t* io0_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
- const uint8_t* io1_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
- const uint8_t* io2_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
- if (a_src) {
- io0_a_src = a_src->data.ptr;
- io1_a_src = io0_a_src + a_src->meta.ri;
- iop_a_src = io1_a_src;
- io2_a_src = io0_a_src + a_src->meta.wi;
- }
-
- uint32_t coro_susp_point = self->private_impl.p_skip_frame[0];
- switch (coro_susp_point) {
- WUFFS_BASE__COROUTINE_SUSPENSION_POINT_0;
-
- v_bytes_per_row = ((((uint64_t)(self->private_impl.f_width)) + 7) / 8);
- v_total_bytes = (v_bytes_per_row * ((uint64_t)(self->private_impl.f_height)));
- self->private_data.s_skip_frame[0].scratch = v_total_bytes;
- WUFFS_BASE__COROUTINE_SUSPENSION_POINT(1);
- if (self->private_data.s_skip_frame[0].scratch > ((uint64_t)(io2_a_src - iop_a_src))) {
- self->private_data.s_skip_frame[0].scratch -= ((uint64_t)(io2_a_src - iop_a_src));
- iop_a_src = io2_a_src;
- status = wuffs_base__make_status(wuffs_base__suspension__short_read);
- goto suspend;
- }
- iop_a_src += self->private_data.s_skip_frame[0].scratch;
- self->private_impl.f_call_sequence = 3;
-
- goto ok;
- ok:
- self->private_impl.p_skip_frame[0] = 0;
- goto exit;
- }
-
- goto suspend;
- suspend:
- self->private_impl.p_skip_frame[0] = wuffs_base__status__is_suspension(&status) ? coro_susp_point : 0;
-
- goto exit;
- exit:
- if (a_src) {
- a_src->meta.ri = ((size_t)(iop_a_src - a_src->data.ptr));
- }
-
- return status;
-}
-
// -------- func wbmp.decoder.frame_dirty_rect
WUFFS_BASE__MAYBE_STATIC wuffs_base__rect_ie_u32
diff --git a/std/bmp/decode_bmp.wuffs b/std/bmp/decode_bmp.wuffs
index f0a8467..96f91f0 100644
--- a/std/bmp/decode_bmp.wuffs
+++ b/std/bmp/decode_bmp.wuffs
@@ -35,10 +35,9 @@
call_sequence : base.u8,
- top_down : base.bool,
- pad_per_row : base.u32[..= 3],
- bytes_per_row : base.u64[..= 0x0000_0001_FFFF_FFFC], // 4 * 0x7FFF_FFFF
- src_pixfmt : base.u32,
+ top_down : base.bool,
+ pad_per_row : base.u32[..= 3],
+ src_pixfmt : base.u32,
io_redirect_fourcc : base.u32,
io_redirect_pos : base.u64,
@@ -326,29 +325,22 @@
if this.bits_per_pixel == 1 {
// byte_width is this.width divided by 8, rounding up.
byte_width = (this.width >> 3) + (((this.width & 7) + 7) >> 3)
- this.bytes_per_row = ((((byte_width as base.u64) * 1) + 3) >> 2) << 2
this.pad_per_row = (4 - (byte_width & 3)) & 3
} else if this.bits_per_pixel == 2 {
// byte_width is this.width divided by 4, rounding up.
byte_width = (this.width >> 2) + (((this.width & 3) + 3) >> 2)
- this.bytes_per_row = ((((byte_width as base.u64) * 1) + 3) >> 2) << 2
this.pad_per_row = (4 - (byte_width & 3)) & 3
} else if this.bits_per_pixel == 4 {
// byte_width is this.width divided by 2, rounding up.
byte_width = (this.width >> 1) + (this.width & 1)
- this.bytes_per_row = ((((byte_width as base.u64) * 1) + 3) >> 2) << 2
this.pad_per_row = (4 - (byte_width & 3)) & 3
} else if this.bits_per_pixel == 8 {
- this.bytes_per_row = ((((this.width as base.u64) * 1) + 3) >> 2) << 2
this.pad_per_row = (4 - (this.width & 3)) & 3
} else if this.bits_per_pixel == 16 {
- this.bytes_per_row = ((((this.width as base.u64) * 2) + 3) >> 2) << 2
this.pad_per_row = (this.width & 1) * 2
} else if this.bits_per_pixel == 24 {
- this.bytes_per_row = ((((this.width as base.u64) * 3) + 3) >> 2) << 2
this.pad_per_row = this.width & 3
} else if this.bits_per_pixel == 32 {
- this.bytes_per_row = (this.width as base.u64) * 4
this.pad_per_row = 0
}
@@ -383,7 +375,7 @@
return base."#bad restart"
}
} else if this.call_sequence == 2 {
- this.skip_frame?(src: args.src)
+ this.call_sequence = 3
return base."@end of data"
} else {
return base."@end of data"
@@ -1086,102 +1078,6 @@
return ok
}
-pri func decoder.skip_frame?(src: base.io_reader) {
- var code : base.u8
- var rle_state : base.u32
-
- args.src.skip_u32?(n: this.padding)
-
- if (this.compression <> COMPRESSION_RLE8) and
- (this.compression <> COMPRESSION_RLE4) {
- args.src.skip?(n: this.bytes_per_row * (this.height as base.u64))
-
- } else {
- while.loop true {
- if rle_state == RLE_STATE_NEUTRAL {
- code = args.src.read_u8?()
- if code == 0 {
- rle_state = RLE_STATE_ESCAPE
- continue.loop
- }
- this.rle_length = code as base.u32
- rle_state = RLE_STATE_RUN
- continue.loop
-
- } else if rle_state == RLE_STATE_RUN {
- code = args.src.read_u8?()
- this.dst_x ~sat+= this.rle_length
- rle_state = RLE_STATE_NEUTRAL
- continue.loop
-
- } else if rle_state == RLE_STATE_ESCAPE {
- code = args.src.read_u8?()
- if code < 2 { // 0=EOL, 1=EOF.
- if (this.dst_y >= this.height) and (code == 0) {
- return "#bad RLE compression"
- }
- this.dst_x = 0
- this.dst_y ~mod+= this.dst_y_inc
- if code > 0 {
- break.loop
- }
- rle_state = RLE_STATE_NEUTRAL
- continue.loop
- } else if code == 2 { // 2=DELTA.
- rle_state = RLE_STATE_DELTA_X
- continue.loop
- }
- this.rle_length = code as base.u32
- rle_state = RLE_STATE_LITERAL
- continue.loop
-
- } else if rle_state == RLE_STATE_LITERAL {
- if this.bits_per_pixel == 8 {
- args.src.skip_u32?(n: ((this.rle_length + 1) / 2) * 2)
- } else {
- args.src.skip_u32?(n: ((this.rle_length + 3) / 4) * 2)
- }
- this.dst_x ~sat+= this.rle_length
- this.rle_length = 0
- rle_state = RLE_STATE_NEUTRAL
- continue.loop
-
- } else if rle_state == RLE_STATE_DELTA_X {
- this.rle_delta_x = args.src.read_u8?()
- rle_state = RLE_STATE_DELTA_Y
- continue.loop
-
- } // else (rle_state == RLE_STATE_DELTA_Y).
- code = args.src.read_u8?()
- if this.rle_delta_x > 0 {
- this.dst_x ~sat+= this.rle_delta_x as base.u32
- this.rle_delta_x = 0
- if this.dst_x > this.width {
- return "#bad RLE compression"
- }
- }
-
- if code > 0 {
- code -= 1
- while true {
- this.dst_y ~mod+= this.dst_y_inc
- if this.dst_y >= this.height {
- return "#bad RLE compression"
- }
- if code <= 0 {
- break
- }
- code -= 1
- } endwhile
- }
-
- rle_state = RLE_STATE_NEUTRAL
- } endwhile.loop
- }
-
- this.call_sequence = 3
-}
-
pub func decoder.frame_dirty_rect() base.rect_ie_u32 {
return this.util.make_rect_ie_u32(
min_incl_x: 0,
diff --git a/std/wbmp/decode_wbmp.wuffs b/std/wbmp/decode_wbmp.wuffs
index 931461d..caff601 100644
--- a/std/wbmp/decode_wbmp.wuffs
+++ b/std/wbmp/decode_wbmp.wuffs
@@ -102,7 +102,7 @@
return base."#bad restart"
}
} else if this.call_sequence == 2 {
- this.skip_frame?(src: args.src)
+ this.call_sequence = 3
return base."@end of data"
} else {
return base."@end of data"
@@ -224,18 +224,6 @@
this.call_sequence = 3
}
-pri func decoder.skip_frame?(src: base.io_reader) {
- var bytes_per_row : base.u64[..= 0x2000_0000]
- var total_bytes : base.u64
-
- bytes_per_row = ((this.width as base.u64) + 7) / 8
- total_bytes = bytes_per_row * (this.height as base.u64)
-
- args.src.skip?(n: total_bytes)
-
- this.call_sequence = 3
-}
-
pub func decoder.frame_dirty_rect() base.rect_ie_u32 {
return this.util.make_rect_ie_u32(
min_incl_x: 0,
diff --git a/test/c/std/bmp.c b/test/c/std/bmp.c
index 96975cf..3eeb652 100644
--- a/test/c/std/bmp.c
+++ b/test/c/std/bmp.c
@@ -122,10 +122,6 @@
RETURN_FAIL("decode_frame_config #1: have \"%s\", want \"%s\"", status.repr,
wuffs_base__note__end_of_data);
}
- if (src.meta.ri != src.meta.wi) {
- RETURN_FAIL("at end of data: ri (%zu) doesn't equal wi (%zu)", src.meta.ri,
- src.meta.wi);
- }
return NULL;
}
diff --git a/test/c/std/wbmp.c b/test/c/std/wbmp.c
index bef5ff0..3b58ae8 100644
--- a/test/c/std/wbmp.c
+++ b/test/c/std/wbmp.c
@@ -307,10 +307,6 @@
RETURN_FAIL("decode_frame_config #1: have \"%s\", want \"%s\"", status.repr,
wuffs_base__note__end_of_data);
}
- if (src.meta.ri != src.meta.wi) {
- RETURN_FAIL("at end of data: ri (%zu) doesn't equal wi (%zu)", src.meta.ri,
- src.meta.wi);
- }
return NULL;
}