mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 10:18:11 +00:00
ImageDecoder+LibImageDecoder+LibWeb: Support animations in ImageDecoder
The ImageDecoder service now returns a list of image frames, each with a duration value. The code for in-process image decoding is removed from LibWeb, an all image decode requests are sent out-of-process to ImageDecoder. :^) This won't scale super well to very long and/or large animations, but we can work on improving that separately. The main goal here is simply to stop doing any image decoding inside LibWeb. Fixes #5165.
This commit is contained in:
parent
449d56ef74
commit
7449c1b27f
10 changed files with 143 additions and 73 deletions
|
@ -33,6 +33,17 @@
|
|||
|
||||
namespace ImageDecoderClient {
|
||||
|
||||
struct Frame {
|
||||
RefPtr<Gfx::Bitmap> bitmap;
|
||||
u32 duration { 0 };
|
||||
};
|
||||
|
||||
struct DecodedImage {
|
||||
bool is_animated { false };
|
||||
u32 loop_count { 0 };
|
||||
Vector<Frame> frames;
|
||||
};
|
||||
|
||||
class Client
|
||||
: public IPC::ServerConnection<ImageDecoderClientEndpoint, ImageDecoderServerEndpoint>
|
||||
, public ImageDecoderClientEndpoint {
|
||||
|
@ -41,7 +52,7 @@ class Client
|
|||
public:
|
||||
virtual void handshake() override;
|
||||
|
||||
RefPtr<Gfx::Bitmap> decode_image(const ByteBuffer&);
|
||||
Optional<DecodedImage> decode_image(const ByteBuffer&);
|
||||
|
||||
private:
|
||||
Client();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue