alder_lake_bios/Insyde/InsydeModulePkg/Library/H2OImageDecoderLib/H2OGifDecoder/Gif.h

150 lines
4.5 KiB
C

/** @file
Gif processor header
;******************************************************************************
;* Copyright (c) 2020, Insyde Software Corp. All Rights Reserved.
;*
;* You may not reproduce, distribute, publish, display, perform, modify, adapt,
;* transmit, broadcast, present, recite, release, license or otherwise exploit
;* any part of this publication in any form, by any means, without the prior
;* written permission of Insyde Software Corporation.
;*
;******************************************************************************
*/
#ifndef _EFI_GIF_H_
#define _EFI_GIF_H_
#include "H2OImageDecoderLibCommon.h"
#define GIF_TRAILER 0x3B
#define EXTENSION_INTRODUCER 0x21
#define GRAPHIC_CONTROL_LABEL 0xF9
#define IMAGE_SEPARATOR 0x2C
//
// LZW decoder relative definition
//
#define NONCODE 0xFFFF
typedef struct _LZW_ENTRY {
INT16 Prefix;
UINT8 Suffix;
} LZW_ENTRY;
#pragma pack(1)
//
// GIF header
//
typedef struct _GIF_HEADER {
UINT8 Signature[3];
UINT8 Version[3];
} GIF_HEADER;
//
// Logical screen descriptor
//
typedef struct _GIF_LOGICAL_SCREEN_PACKED_FIELDS {
UINT8 SizeOfGlobalColorTable : 3;
UINT8 SortFlag : 1;
UINT8 ColorResolution : 3;
UINT8 GlobalColorTableFlag : 1;
} GIF_LOGICAL_SCREEN_PACKED_FIELDS;
typedef struct _GIF_LOGICAL_SCREEN_DESCRIPTOR {
UINT16 LogicalScreenWidth;
UINT16 LogicalScreenHeight;
GIF_LOGICAL_SCREEN_PACKED_FIELDS PackedFields;
UINT8 BackGroundColorIndex;
UINT8 PixelAspectRatio;
} GIF_LOGICAL_SCREEN_DESCRIPTOR;
//
// Graphic control extension
//
typedef struct _GIF_GRAPHIC_CONTROL_PACKED_FIELDS {
UINT8 TransparentColorFlag : 1;
UINT8 UserInputFlag : 1;
UINT8 DisposalMethod : 3;
UINT8 Reserved : 3;
} GIF_GRAPHIC_CONTROL_PACKED_FIELDS;
typedef struct _GIF_GRAPHIC_CONTROL_EXTENSION {
UINT8 ExtensionIntroducer;
UINT8 GraphicControlLabel;
UINT8 BlockSize;
GIF_GRAPHIC_CONTROL_PACKED_FIELDS PackedFields;
UINT16 DelayTime;
UINT8 TransparentColorIndex;
UINT8 BlockTerminator;
} GIF_GRAPHIC_CONTROL_EXTENSION;
//
// Image descriptor
//
typedef struct _GIF_IMAGE_PACKED_FIELDS {
UINT8 SizeOfLocalColorTable : 3;
UINT8 Reserved : 2;
UINT8 SortFlag : 1;
UINT8 InterlaceFlag : 1;
UINT8 LocalColorTableFlag : 1;
} GIF_IMAGE_PACKED_FIELDS;
typedef struct _GIF_IMAGE_DESCRIPTOR {
UINT8 ImageSeparator;
UINT16 ImageLeftPosition;
UINT16 ImageTopPosition;
UINT16 ImageWidth;
UINT16 ImageHeight;
GIF_IMAGE_PACKED_FIELDS PackedFields;
} GIF_IMAGE_DESCRIPTOR;
#pragma pack()
extern UINT8 *mOutStack;
extern LZW_ENTRY *mLzwTable;
EFI_STATUS
GifDecoderGetLogicalScreen (
IN OUT UINT8 **GifFileImage,
IN OUT UINTN *GifFileSize,
OUT GIF_LOGICAL_SCREEN_DESCRIPTOR *GifScreen,
OUT EFI_GRAPHICS_OUTPUT_BLT_PIXEL *GlobalColorMap
);
EFI_STATUS
GifDecoderGetFirstGraphicControl (
IN UINT8 *FileImage,
IN UINTN FileSize,
OUT GIF_GRAPHIC_CONTROL_EXTENSION *GraphicControl
);
EFI_STATUS
GifDecoderGetImageDesc (
IN UINT8 **GifFileImage,
IN UINTN *GifFileSize,
OUT GIF_IMAGE_DESCRIPTOR *ImageDesc,
OUT EFI_GRAPHICS_OUTPUT_BLT_PIXEL *LocalColorMap,
OUT GIF_GRAPHIC_CONTROL_EXTENSION *GraphicControl
);
EFI_STATUS
GifDecoderGetImageData (
IN UINT8 **GifFileImage,
IN UINTN *GifFileSize,
IN GIF_IMAGE_DESCRIPTOR *ImageDesc,
IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL *GlobalColorMap,
IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL *LocalColorMap,
IN GIF_GRAPHIC_CONTROL_EXTENSION *GraphicControl,
OUT EFI_GRAPHICS_OUTPUT_BLT_PIXEL *ImageData,
IN UINT32 ImageSize,
IN UINT8 *CompressedData,
IN OUT UINTN *CompressedDataSize
);
#endif