core: Unify `define_bits_jpeg_3` and `define_bits_jpeg_4`
The only difference is the deblocking field, which is now read only for DefineBitsJpeg4.
This commit is contained in:
parent
00accf3e2a
commit
7f7ecda8a9
|
@ -276,11 +276,11 @@ impl<'gc> MovieClip<'gc> {
|
||||||
TagCode::DefineBitsJpeg3 => self
|
TagCode::DefineBitsJpeg3 => self
|
||||||
.0
|
.0
|
||||||
.write(context.gc_context)
|
.write(context.gc_context)
|
||||||
.define_bits_jpeg_3(context, reader, tag_len),
|
.define_bits_jpeg_3_or_4(context, reader, tag_len, 3),
|
||||||
TagCode::DefineBitsJpeg4 => self
|
TagCode::DefineBitsJpeg4 => self
|
||||||
.0
|
.0
|
||||||
.write(context.gc_context)
|
.write(context.gc_context)
|
||||||
.define_bits_jpeg_4(context, reader, tag_len),
|
.define_bits_jpeg_3_or_4(context, reader, tag_len, 4),
|
||||||
TagCode::DefineBitsLossless => self
|
TagCode::DefineBitsLossless => self
|
||||||
.0
|
.0
|
||||||
.write(context.gc_context)
|
.write(context.gc_context)
|
||||||
|
@ -2401,7 +2401,7 @@ impl<'gc, 'a> MovieClipData<'gc> {
|
||||||
let bitmap_info = context
|
let bitmap_info = context
|
||||||
.renderer
|
.renderer
|
||||||
.register_bitmap_png(&define_bits_lossless)?;
|
.register_bitmap_png(&define_bits_lossless)?;
|
||||||
let bitmap = crate::display_object::Bitmap::new(
|
let bitmap = Bitmap::new(
|
||||||
context,
|
context,
|
||||||
define_bits_lossless.id,
|
define_bits_lossless.id,
|
||||||
bitmap_info.handle,
|
bitmap_info.handle,
|
||||||
|
@ -2607,7 +2607,7 @@ impl<'gc, 'a> MovieClipData<'gc> {
|
||||||
.library_for_movie_mut(self.movie())
|
.library_for_movie_mut(self.movie())
|
||||||
.jpeg_tables(),
|
.jpeg_tables(),
|
||||||
)?;
|
)?;
|
||||||
let bitmap = crate::display_object::Bitmap::new(
|
let bitmap = Bitmap::new(
|
||||||
context,
|
context,
|
||||||
id,
|
id,
|
||||||
bitmap_info.handle,
|
bitmap_info.handle,
|
||||||
|
@ -2634,40 +2634,6 @@ impl<'gc, 'a> MovieClipData<'gc> {
|
||||||
let mut jpeg_data = Vec::with_capacity(data_len);
|
let mut jpeg_data = Vec::with_capacity(data_len);
|
||||||
reader.get_mut().read_to_end(&mut jpeg_data)?;
|
reader.get_mut().read_to_end(&mut jpeg_data)?;
|
||||||
let bitmap_info = context.renderer.register_bitmap_jpeg_2(&jpeg_data)?;
|
let bitmap_info = context.renderer.register_bitmap_jpeg_2(&jpeg_data)?;
|
||||||
let bitmap = crate::display_object::Bitmap::new(
|
|
||||||
context,
|
|
||||||
id,
|
|
||||||
bitmap_info.handle,
|
|
||||||
bitmap_info.width,
|
|
||||||
bitmap_info.height,
|
|
||||||
);
|
|
||||||
context
|
|
||||||
.library
|
|
||||||
.library_for_movie_mut(self.movie())
|
|
||||||
.register_character(id, Character::Bitmap(bitmap));
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
|
|
||||||
#[inline]
|
|
||||||
fn define_bits_jpeg_3(
|
|
||||||
&mut self,
|
|
||||||
context: &mut UpdateContext<'_, 'gc, '_>,
|
|
||||||
reader: &mut SwfStream<'a>,
|
|
||||||
tag_len: usize,
|
|
||||||
) -> DecodeResult {
|
|
||||||
use std::io::Read;
|
|
||||||
let id = reader.read_u16()?;
|
|
||||||
let jpeg_len = reader.read_u32()? as usize;
|
|
||||||
let alpha_len = tag_len
|
|
||||||
.checked_sub(jpeg_len + 6)
|
|
||||||
.ok_or_else(|| std::io::Error::new(std::io::ErrorKind::Other, "Invalid jpeg length"))?;
|
|
||||||
let mut jpeg_data = vec![0; jpeg_len];
|
|
||||||
reader.get_mut().read_exact(&mut jpeg_data)?;
|
|
||||||
let mut alpha_data = vec![0; alpha_len];
|
|
||||||
reader.get_mut().read_exact(&mut alpha_data)?;
|
|
||||||
let bitmap_info = context
|
|
||||||
.renderer
|
|
||||||
.register_bitmap_jpeg_3_or_4(&jpeg_data, &alpha_data)?;
|
|
||||||
let bitmap = Bitmap::new(
|
let bitmap = Bitmap::new(
|
||||||
context,
|
context,
|
||||||
id,
|
id,
|
||||||
|
@ -2683,16 +2649,19 @@ impl<'gc, 'a> MovieClipData<'gc> {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn define_bits_jpeg_4(
|
fn define_bits_jpeg_3_or_4(
|
||||||
&mut self,
|
&mut self,
|
||||||
context: &mut UpdateContext<'_, 'gc, '_>,
|
context: &mut UpdateContext<'_, 'gc, '_>,
|
||||||
reader: &mut SwfStream<'a>,
|
reader: &mut SwfStream<'a>,
|
||||||
tag_len: usize,
|
tag_len: usize,
|
||||||
|
version: u8,
|
||||||
) -> DecodeResult {
|
) -> DecodeResult {
|
||||||
use std::io::Read;
|
use std::io::Read;
|
||||||
let id = reader.read_u16()?;
|
let id = reader.read_u16()?;
|
||||||
let jpeg_len = reader.read_u32()? as usize;
|
let jpeg_len = reader.read_u32()? as usize;
|
||||||
let _deblocking = reader.read_u16()?;
|
if version == 4 {
|
||||||
|
let _deblocking = reader.read_u16()?;
|
||||||
|
}
|
||||||
let alpha_len = tag_len
|
let alpha_len = tag_len
|
||||||
.checked_sub(jpeg_len + 6)
|
.checked_sub(jpeg_len + 6)
|
||||||
.ok_or_else(|| std::io::Error::new(std::io::ErrorKind::Other, "Invalid jpeg length"))?;
|
.ok_or_else(|| std::io::Error::new(std::io::ErrorKind::Other, "Invalid jpeg length"))?;
|
||||||
|
|
Loading…
Reference in New Issue