Serenity Operating System
1/*
2 * Copyright (c) 2020, Andreas Kling <kling@serenityos.org>
3 *
4 * SPDX-License-Identifier: BSD-2-Clause
5 */
6
7#pragma once
8
9#include <AK/HashMap.h>
10#include <ImageDecoder/ImageDecoderClientEndpoint.h>
11#include <ImageDecoder/ImageDecoderServerEndpoint.h>
12#include <LibIPC/ConnectionToServer.h>
13
14namespace ImageDecoderClient {
15
16struct Frame {
17 RefPtr<Gfx::Bitmap> bitmap;
18 u32 duration { 0 };
19};
20
21struct DecodedImage {
22 bool is_animated { false };
23 u32 loop_count { 0 };
24 Vector<Frame> frames;
25};
26
27class Client final
28 : public IPC::ConnectionToServer<ImageDecoderClientEndpoint, ImageDecoderServerEndpoint>
29 , public ImageDecoderClientEndpoint {
30 IPC_CLIENT_CONNECTION(Client, "/tmp/session/%sid/portal/image"sv);
31
32public:
33 Optional<DecodedImage> decode_image(ReadonlyBytes, Optional<DeprecatedString> mime_type = {});
34
35 Function<void()> on_death;
36
37private:
38 Client(NonnullOwnPtr<Core::LocalSocket>);
39
40 virtual void die() override;
41};
42
43}