mirror of
https://github.com/servo/servo.git
synced 2025-07-23 07:13:52 +01:00
Coalesce animated image frame data into a single shared memory region (#37058)
This makes servo use less file descriptors for animated images and avoids the crash described in https://github.com/servo/servo/issues/36792. Doing this also forces the end users to be more explicit about whether they want to deal with all image frames or just the first one. Previously, `Image::bytes` silently returned only the data for the first frame. With this change there's now a `frames` method which returns an iterator over all frames in the image. Testing: No tests - this simply reduces the number of fds used. Servo doesn't currently display animated gifs anyways. Fixes: https://github.com/servo/servo/issues/36792 Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
This commit is contained in:
parent
d5e02d27be
commit
384d8f1ff8
6 changed files with 75 additions and 36 deletions
|
@ -66,10 +66,10 @@ fn set_webrender_image_key(compositor_api: &CrossProcessCompositorApi, image: &m
|
|||
return;
|
||||
}
|
||||
let mut bytes = Vec::new();
|
||||
let frame_bytes = image.bytes();
|
||||
let frame_bytes = image.first_frame().bytes;
|
||||
let is_opaque = match image.format {
|
||||
PixelFormat::BGRA8 => {
|
||||
bytes.extend_from_slice(&frame_bytes);
|
||||
bytes.extend_from_slice(frame_bytes);
|
||||
pixels::rgba8_premultiply_inplace(bytes.as_mut_slice())
|
||||
},
|
||||
PixelFormat::RGB8 => {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue