Skip to content

Commit 4727fc6

Browse files
committed
core: use swf routines to read DefineBits(Jpeg) tags
1 parent 1c209a2 commit 4727fc6

File tree

2 files changed

+24
-21
lines changed

2 files changed

+24
-21
lines changed

core/src/display_object/movie_clip.rs

Lines changed: 9 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3293,8 +3293,7 @@ impl<'gc, 'a> MovieClipShared<'gc> {
32933293
) -> Result<(), Error> {
32943294
let mc = context.gc();
32953295
let library = self.library_mut(context);
3296-
let id = reader.read_u16()?;
3297-
let jpeg_data = reader.read_slice_to_end();
3296+
let (id, jpeg_data) = reader.read_define_bits()?;
32983297
let jpeg_tables = library.jpeg_tables();
32993298
let jpeg_data =
33003299
ruffle_render::utils::glue_tables_to_jpeg(jpeg_data, jpeg_tables).into_owned();
@@ -3321,12 +3320,11 @@ impl<'gc, 'a> MovieClipShared<'gc> {
33213320
context: &mut UpdateContext<'gc>,
33223321
reader: &mut SwfStream<'a>,
33233322
) -> Result<(), Error> {
3324-
let id = reader.read_u16()?;
3325-
let jpeg_data = reader.read_slice_to_end();
3323+
let (id, jpeg_data) = reader.read_define_bits_jpeg_2()?;
33263324
let (width, height) = ruffle_render::utils::decode_define_bits_jpeg_dimensions(jpeg_data)?;
33273325
let bitmap = Character::Bitmap {
33283326
compressed: CompressedBitmap::Jpeg {
3329-
data: jpeg_data.to_vec(),
3327+
data: jpeg_data.to_owned(),
33303328
alpha: None,
33313329
width,
33323330
height,
@@ -3345,25 +3343,20 @@ impl<'gc, 'a> MovieClipShared<'gc> {
33453343
reader: &mut SwfStream<'a>,
33463344
version: u8,
33473345
) -> Result<(), Error> {
3348-
let id = reader.read_u16()?;
3349-
let jpeg_len = reader.read_u32()? as usize;
3350-
if version == 4 {
3351-
let _deblocking = reader.read_u16()?;
3352-
}
3353-
let jpeg_data = reader.read_slice(jpeg_len)?;
3354-
let alpha_data = reader.read_slice_to_end();
3355-
let (width, height) = ruffle_render::utils::decode_define_bits_jpeg_dimensions(jpeg_data)?;
3346+
let jpeg = reader.read_define_bits_jpeg_3(version)?;
3347+
let (width, height) = ruffle_render::utils::decode_define_bits_jpeg_dimensions(jpeg.data)?;
33563348
let bitmap = Character::Bitmap {
33573349
compressed: CompressedBitmap::Jpeg {
3358-
data: jpeg_data.to_owned(),
3359-
alpha: Some(alpha_data.to_owned()),
3350+
data: jpeg.data.to_owned(),
3351+
alpha: Some(jpeg.alpha_data.to_owned()),
33603352
width,
33613353
height,
33623354
},
33633355
handle: Default::default(),
33643356
avm2_bitmapdata_class: GcCell::new(context.gc(), BitmapClass::NoSubclass),
33653357
};
3366-
self.library_mut(context).register_character(id, bitmap);
3358+
self.library_mut(context)
3359+
.register_character(jpeg.id, bitmap);
33673360
Ok(())
33683361
}
33693362

swf/src/read.rs

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -406,13 +406,11 @@ impl<'a> Reader<'a> {
406406
Tag::DefineBinaryData(tag_reader.read_define_binary_data()?)
407407
}
408408
TagCode::DefineBits => {
409-
let id = tag_reader.read_u16()?;
410-
let jpeg_data = tag_reader.read_slice_to_end();
409+
let (id, jpeg_data) = tag_reader.read_define_bits()?;
411410
Tag::DefineBits { id, jpeg_data }
412411
}
413412
TagCode::DefineBitsJpeg2 => {
414-
let id = tag_reader.read_u16()?;
415-
let jpeg_data = tag_reader.read_slice_to_end();
413+
let (id, jpeg_data) = tag_reader.read_define_bits_jpeg_2()?;
416414
Tag::DefineBitsJpeg2 { id, jpeg_data }
417415
}
418416
TagCode::DefineBitsJpeg3 => {
@@ -2483,7 +2481,19 @@ impl<'a> Reader<'a> {
24832481
})
24842482
}
24852483

2486-
fn read_define_bits_jpeg_3(&mut self, version: u8) -> Result<DefineBitsJpeg3<'a>> {
2484+
pub fn read_define_bits(&mut self) -> Result<(CharacterId, &'a [u8])> {
2485+
let id = self.read_character_id()?;
2486+
let jpeg_data = self.read_slice_to_end();
2487+
Ok((id, jpeg_data))
2488+
}
2489+
2490+
pub fn read_define_bits_jpeg_2(&mut self) -> Result<(CharacterId, &'a [u8])> {
2491+
let id = self.read_character_id()?;
2492+
let jpeg_data = self.read_slice_to_end();
2493+
Ok((id, jpeg_data))
2494+
}
2495+
2496+
pub fn read_define_bits_jpeg_3(&mut self, version: u8) -> Result<DefineBitsJpeg3<'a>> {
24872497
let id = self.read_character_id()?;
24882498
let data_size = self.read_u32()? as usize;
24892499
let deblocking = if version >= 4 {

0 commit comments

Comments
 (0)