gecko/gfx/layers/ipc/SharedRGBImage.h
Phil Ringnalda ac63c0f4a1 Backed out 3 changesets (bug 972703, bug 889959) for build failures and crashes
CLOSED TREE

Backed out changeset ef3d90780478 (bug 972703)
Backed out changeset 34c95e937671 (bug 889959)
Backed out changeset 5e25912d6696 (bug 889959)
2014-02-16 15:17:01 -08:00

136 lines
4.0 KiB
C++

/* 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 "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;
gfx::IntSize GetSize();
size_t GetBufferSize();
static uint8_t BytesPerPixel(gfxImageFormat aImageFormat);
already_AddRefed<gfxASurface> DeprecatedGetAsSurface();
virtual TemporaryRef<gfx::SourceSurface> GetAsSourceSurface() MOZ_OVERRIDE;
/**
* 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(CompositableClient* aClient) MOZ_OVERRIDE { return nullptr; }
protected:
gfx::IntSize 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(CompositableClient* aClient) MOZ_OVERRIDE;
virtual uint8_t* GetBuffer() MOZ_OVERRIDE;
gfx::IntSize GetSize();
size_t GetBufferSize();
already_AddRefed<gfxASurface> DeprecatedGetAsSurface();
TemporaryRef<gfx::SourceSurface> GetAsSourceSurface();
bool Allocate(gfx::IntSize aSize, gfx::SurfaceFormat aFormat);
private:
gfx::IntSize mSize;
RefPtr<ImageClient> mCompositable;
RefPtr<BufferTextureClient> mTextureClient;
};
} // namespace layers
} // namespace mozilla
#endif