1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
|
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef SHAREDRGBIMAGE_H_
#define SHAREDRGBIMAGE_H_
#include <stddef.h> // for size_t
#include <stdint.h> // for uint8_t
#include "ImageContainer.h" // for ISharedImage, Image, etc
#include "gfxTypes.h"
#include "gfxPoint.h" // for gfxIntSize
#include "mozilla/Attributes.h" // for MOZ_OVERRIDE
#include "mozilla/RefPtr.h" // for RefPtr
#include "mozilla/gfx/Point.h" // for IntSize
#include "mozilla/gfx/Types.h" // for SurfaceFormat
#include "nsCOMPtr.h" // for already_AddRefed
class gfxASurface;
namespace mozilla {
namespace ipc {
class Shmem;
}
namespace layers {
class BufferTextureClient;
class ImageClient;
class ISurfaceAllocator;
class TextureClient;
class SurfaceDescriptor;
already_AddRefed<Image> CreateSharedRGBImage(ImageContainer* aImageContainer,
nsIntSize aSize,
gfxImageFormat aImageFormat);
/**
* Stores RGB data in shared memory
* It is assumed that the image width and stride are equal
*/
class DeprecatedSharedRGBImage : public Image,
public ISharedImage
{
friend already_AddRefed<Image> CreateSharedRGBImage(ImageContainer* aImageContainer,
nsIntSize aSize,
gfxImageFormat aImageFormat);
public:
struct Header {
gfxImageFormat mImageFormat;
};
DeprecatedSharedRGBImage(ISurfaceAllocator *aAllocator);
~DeprecatedSharedRGBImage();
virtual ISharedImage* AsSharedImage() MOZ_OVERRIDE { return this; }
virtual uint8_t *GetBuffer() MOZ_OVERRIDE;
gfxIntSize GetSize();
size_t GetBufferSize();
static uint8_t BytesPerPixel(gfxImageFormat aImageFormat);
already_AddRefed<gfxASurface> GetAsSurface();
/**
* Setup the Surface descriptor to contain this image's shmem, while keeping
* ownership of the shmem.
* if the operation succeeds, return true and AddRef this DeprecatedSharedRGBImage.
*/
bool ToSurfaceDescriptor(SurfaceDescriptor& aResult);
/**
* Setup the Surface descriptor to contain this image's shmem, and loose
* ownership of the shmem.
* if the operation succeeds, return true (and does _not_ AddRef this
* DeprecatedSharedRGBImage).
*/
bool DropToSurfaceDescriptor(SurfaceDescriptor& aResult);
/**
* Returns a DeprecatedSharedRGBImage* iff the descriptor was initialized with
* ToSurfaceDescriptor.
*/
static DeprecatedSharedRGBImage* FromSurfaceDescriptor(const SurfaceDescriptor& aDescriptor);
bool AllocateBuffer(nsIntSize aSize, gfxImageFormat aImageFormat);
TextureClient* GetTextureClient() MOZ_OVERRIDE { return nullptr; }
protected:
gfxIntSize mSize;
gfxImageFormat mImageFormat;
RefPtr<ISurfaceAllocator> mSurfaceAllocator;
bool mAllocated;
ipc::Shmem *mShmem;
};
/**
* Stores RGB data in shared memory
* It is assumed that the image width and stride are equal
*/
class SharedRGBImage : public Image
, public ISharedImage
{
public:
SharedRGBImage(ImageClient* aCompositable);
~SharedRGBImage();
virtual ISharedImage* AsSharedImage() MOZ_OVERRIDE { return this; }
virtual TextureClient* GetTextureClient() MOZ_OVERRIDE;
virtual uint8_t* GetBuffer() MOZ_OVERRIDE;
gfxIntSize GetSize();
size_t GetBufferSize();
already_AddRefed<gfxASurface> GetAsSurface();
bool Allocate(gfx::IntSize aSize, gfx::SurfaceFormat aFormat);
private:
gfx::IntSize mSize;
RefPtr<ImageClient> mCompositable;
RefPtr<BufferTextureClient> mTextureClient;
};
} // namespace layers
} // namespace mozilla
#endif
|