ImageDecoderDirect2D.h [plain text]
#pragma once
#if USE(DIRECT2D)
#include "COMPtr.h"
#include "ImageDecoder.h"
#include <wtf/Optional.h>
interface ID2D1RenderTarget;
interface IWICBitmapDecoder;
interface IWICImagingFactory;
namespace WebCore {
class ImageDecoderDirect2D final : public ImageDecoder {
WTF_MAKE_FAST_ALLOCATED;
public:
ImageDecoderDirect2D();
static Ref<ImageDecoderDirect2D> create(SharedBuffer&, AlphaOption, GammaAndColorProfileOption)
{
return adoptRef(*new ImageDecoderDirect2D());
}
static bool supportsMediaType(MediaType type) { return type == MediaType::Image; }
static size_t bytesDecodedToDetermineProperties();
String filenameExtension() const final;
EncodedDataStatus encodedDataStatus() const final;
bool isSizeAvailable() const final;
IntSize size() const final;
size_t frameCount() const final;
RepetitionCount repetitionCount() const final;
std::optional<IntPoint> hotSpot() const final;
IntSize frameSizeAtIndex(size_t, SubsamplingLevel = SubsamplingLevel::Default) const final;
bool frameIsCompleteAtIndex(size_t) const final;
ImageOrientation frameOrientationAtIndex(size_t) const final;
float frameDurationAtIndex(size_t) const final;
bool frameHasAlphaAtIndex(size_t) const final;
bool frameAllowSubsamplingAtIndex(size_t) const final;
unsigned frameBytesAtIndex(size_t, SubsamplingLevel = SubsamplingLevel::Default) const final;
NativeImagePtr createFrameImageAtIndex(size_t, SubsamplingLevel = SubsamplingLevel::Default, const DecodingOptions& = DecodingOptions(DecodingMode::Synchronous)) const final;
void setData(SharedBuffer&, bool allDataReceived) final;
bool isAllDataReceived() const final { return m_isAllDataReceived; }
void clearFrameBufferCache(size_t) final { }
void setTargetContext(ID2D1RenderTarget*);
static IWICImagingFactory* systemImagingFactory();
protected:
bool m_isAllDataReceived { false };
mutable IntSize m_size;
COMPtr<IWICBitmapDecoder> m_nativeDecoder;
COMPtr<ID2D1RenderTarget> m_renderTarget;
};
}
#endif