Blame libfreerdp/codec/progressive.h

Packit Service fa4841
/**
Packit Service fa4841
 * FreeRDP: A Remote Desktop Protocol Implementation
Packit Service fa4841
 * Progressive Codec Bitmap Compression
Packit Service fa4841
 *
Packit Service fa4841
 * Copyright 2017 Armin Novak <anovak@thincast.com>
Packit Service fa4841
 * Copyright 2017 Thincast Technologies GmbH
Packit Service fa4841
 *
Packit Service fa4841
 * Licensed under the Apache License, Version 2.0 (the "License");
Packit Service fa4841
 * you may not use this file except in compliance with the License.
Packit Service fa4841
 * You may obtain a copy of the License at
Packit Service fa4841
 *
Packit Service fa4841
 *     http://www.apache.org/licenses/LICENSE-2.0
Packit Service fa4841
 *
Packit Service fa4841
 * Unless required by applicable law or agreed to in writing, software
Packit Service fa4841
 * distributed under the License is distributed on an "AS IS" BASIS,
Packit Service fa4841
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Packit Service fa4841
 * See the License for the specific language governing permissions and
Packit Service fa4841
 * limitations under the License.
Packit Service fa4841
 */
Packit Service fa4841
Packit Service fa4841
#ifndef INTERNAL_CODEC_PROGRESSIVE_H
Packit Service fa4841
#define INTERNAL_CODEC_PROGRESSIVE_H
Packit Service fa4841
Packit Service fa4841
#include <winpr/wlog.h>
Packit Service fa4841
#include <winpr/collections.h>
Packit Service fa4841
Packit Service fa4841
#include <freerdp/codec/rfx.h>
Packit Service fa4841
Packit Service fa4841
#define RFX_SUBBAND_DIFFING 0x01
Packit Service fa4841
Packit Service fa4841
#define RFX_TILE_DIFFERENCE 0x01
Packit Service fa4841
Packit Service fa4841
#define RFX_DWT_REDUCE_EXTRAPOLATE 0x01
Packit Service fa4841
Packit Service fa4841
#define PROGRESSIVE_WBT_SYNC 0xCCC0
Packit Service fa4841
#define PROGRESSIVE_WBT_FRAME_BEGIN 0xCCC1
Packit Service fa4841
#define PROGRESSIVE_WBT_FRAME_END 0xCCC2
Packit Service fa4841
#define PROGRESSIVE_WBT_CONTEXT 0xCCC3
Packit Service fa4841
#define PROGRESSIVE_WBT_REGION 0xCCC4
Packit Service fa4841
#define PROGRESSIVE_WBT_TILE_SIMPLE 0xCCC5
Packit Service fa4841
#define PROGRESSIVE_WBT_TILE_FIRST 0xCCC6
Packit Service fa4841
#define PROGRESSIVE_WBT_TILE_UPGRADE 0xCCC7
Packit Service fa4841
Packit Service fa4841
struct _RFX_COMPONENT_CODEC_QUANT
Packit Service fa4841
{
Packit Service fa4841
	BYTE LL3;
Packit Service fa4841
	BYTE HL3;
Packit Service fa4841
	BYTE LH3;
Packit Service fa4841
	BYTE HH3;
Packit Service fa4841
	BYTE HL2;
Packit Service fa4841
	BYTE LH2;
Packit Service fa4841
	BYTE HH2;
Packit Service fa4841
	BYTE HL1;
Packit Service fa4841
	BYTE LH1;
Packit Service fa4841
	BYTE HH1;
Packit Service fa4841
};
Packit Service fa4841
typedef struct _RFX_COMPONENT_CODEC_QUANT RFX_COMPONENT_CODEC_QUANT;
Packit Service fa4841
Packit Service fa4841
struct _RFX_PROGRESSIVE_CODEC_QUANT
Packit Service fa4841
{
Packit Service fa4841
	BYTE quality;
Packit Service fa4841
	RFX_COMPONENT_CODEC_QUANT yQuantValues;
Packit Service fa4841
	RFX_COMPONENT_CODEC_QUANT cbQuantValues;
Packit Service fa4841
	RFX_COMPONENT_CODEC_QUANT crQuantValues;
Packit Service fa4841
};
Packit Service fa4841
typedef struct _RFX_PROGRESSIVE_CODEC_QUANT RFX_PROGRESSIVE_CODEC_QUANT;
Packit Service fa4841
Packit Service fa4841
struct _PROGRESSIVE_BLOCK
Packit Service fa4841
{
Packit Service fa4841
	UINT16 blockType;
Packit Service fa4841
	UINT32 blockLen;
Packit Service fa4841
};
Packit Service fa4841
typedef struct _PROGRESSIVE_BLOCK PROGRESSIVE_BLOCK;
Packit Service fa4841
Packit Service fa4841
struct _PROGRESSIVE_BLOCK_SYNC
Packit Service fa4841
{
Packit Service fa4841
	UINT16 blockType;
Packit Service fa4841
	UINT32 blockLen;
Packit Service fa4841
Packit Service fa4841
	UINT32 magic;
Packit Service fa4841
	UINT16 version;
Packit Service fa4841
};
Packit Service fa4841
typedef struct _PROGRESSIVE_BLOCK_SYNC PROGRESSIVE_BLOCK_SYNC;
Packit Service fa4841
Packit Service fa4841
struct _PROGRESSIVE_BLOCK_CONTEXT
Packit Service fa4841
{
Packit Service fa4841
	UINT16 blockType;
Packit Service fa4841
	UINT32 blockLen;
Packit Service fa4841
Packit Service fa4841
	BYTE ctxId;
Packit Service fa4841
	UINT16 tileSize;
Packit Service fa4841
	BYTE flags;
Packit Service fa4841
};
Packit Service fa4841
typedef struct _PROGRESSIVE_BLOCK_CONTEXT PROGRESSIVE_BLOCK_CONTEXT;
Packit Service fa4841
Packit Service fa4841
struct _RFX_PROGRESSIVE_TILE
Packit Service fa4841
{
Packit Service fa4841
	UINT16 blockType;
Packit Service fa4841
	UINT32 blockLen;
Packit Service fa4841
Packit Service fa4841
	BYTE quantIdxY;
Packit Service fa4841
	BYTE quantIdxCb;
Packit Service fa4841
	BYTE quantIdxCr;
Packit Service fa4841
	UINT16 xIdx;
Packit Service fa4841
	UINT16 yIdx;
Packit Service fa4841
Packit Service fa4841
	BYTE flags;
Packit Service fa4841
	BYTE quality;
Packit Service fa4841
Packit Service fa4841
	UINT16 yLen;
Packit Service fa4841
	UINT16 cbLen;
Packit Service fa4841
	UINT16 crLen;
Packit Service fa4841
	UINT16 tailLen;
Packit Service fa4841
	const BYTE* yData;
Packit Service fa4841
	const BYTE* cbData;
Packit Service fa4841
	const BYTE* crData;
Packit Service fa4841
	const BYTE* tailData;
Packit Service fa4841
Packit Service fa4841
	UINT16 ySrlLen;
Packit Service fa4841
	UINT16 yRawLen;
Packit Service fa4841
	UINT16 cbSrlLen;
Packit Service fa4841
	UINT16 cbRawLen;
Packit Service fa4841
	UINT16 crSrlLen;
Packit Service fa4841
	UINT16 crRawLen;
Packit Service fa4841
	const BYTE* ySrlData;
Packit Service fa4841
	const BYTE* yRawData;
Packit Service fa4841
	const BYTE* cbSrlData;
Packit Service fa4841
	const BYTE* cbRawData;
Packit Service fa4841
	const BYTE* crSrlData;
Packit Service fa4841
	const BYTE* crRawData;
Packit Service fa4841
Packit Service fa4841
	UINT32 x;
Packit Service fa4841
	UINT32 y;
Packit Service fa4841
	UINT32 width;
Packit Service fa4841
	UINT32 height;
Packit Service fa4841
	UINT32 stride;
Packit Service fa4841
Packit Service fa4841
	BYTE* data;
Packit Service fa4841
	BYTE* current;
Packit Service fa4841
Packit Service fa4841
	UINT16 pass;
Packit Service fa4841
	BYTE* sign;
Packit Service fa4841
Packit Service fa4841
	RFX_COMPONENT_CODEC_QUANT yBitPos;
Packit Service fa4841
	RFX_COMPONENT_CODEC_QUANT cbBitPos;
Packit Service fa4841
	RFX_COMPONENT_CODEC_QUANT crBitPos;
Packit Service fa4841
	RFX_COMPONENT_CODEC_QUANT yQuant;
Packit Service fa4841
	RFX_COMPONENT_CODEC_QUANT cbQuant;
Packit Service fa4841
	RFX_COMPONENT_CODEC_QUANT crQuant;
Packit Service fa4841
	RFX_COMPONENT_CODEC_QUANT yProgQuant;
Packit Service fa4841
	RFX_COMPONENT_CODEC_QUANT cbProgQuant;
Packit Service fa4841
	RFX_COMPONENT_CODEC_QUANT crProgQuant;
Packit Service fa4841
};
Packit Service fa4841
typedef struct _RFX_PROGRESSIVE_TILE RFX_PROGRESSIVE_TILE;
Packit Service fa4841
Packit Service fa4841
struct _PROGRESSIVE_BLOCK_REGION
Packit Service fa4841
{
Packit Service fa4841
	UINT16 blockType;
Packit Service fa4841
	UINT32 blockLen;
Packit Service fa4841
Packit Service fa4841
	BYTE tileSize;
Packit Service fa4841
	UINT16 numRects;
Packit Service fa4841
	BYTE numQuant;
Packit Service fa4841
	BYTE numProgQuant;
Packit Service fa4841
	BYTE flags;
Packit Service fa4841
	UINT16 numTiles;
Packit Service fa4841
	UINT16 usedTiles;
Packit Service fa4841
	UINT32 tileDataSize;
Packit Service fa4841
	RFX_RECT rects[0x10000];
Packit Service fa4841
	RFX_COMPONENT_CODEC_QUANT quantVals[0x100];
Packit Service fa4841
	RFX_PROGRESSIVE_CODEC_QUANT quantProgVals[0x100];
Packit Service fa4841
	RFX_PROGRESSIVE_TILE* tiles[0x10000];
Packit Service fa4841
};
Packit Service fa4841
typedef struct _PROGRESSIVE_BLOCK_REGION PROGRESSIVE_BLOCK_REGION;
Packit Service fa4841
Packit Service fa4841
struct _PROGRESSIVE_BLOCK_FRAME_BEGIN
Packit Service fa4841
{
Packit Service fa4841
	UINT16 blockType;
Packit Service fa4841
	UINT32 blockLen;
Packit Service fa4841
Packit Service fa4841
	UINT32 frameIndex;
Packit Service fa4841
	UINT16 regionCount;
Packit Service fa4841
	PROGRESSIVE_BLOCK_REGION* regions;
Packit Service fa4841
};
Packit Service fa4841
typedef struct _PROGRESSIVE_BLOCK_FRAME_BEGIN PROGRESSIVE_BLOCK_FRAME_BEGIN;
Packit Service fa4841
Packit Service fa4841
struct _PROGRESSIVE_BLOCK_FRAME_END
Packit Service fa4841
{
Packit Service fa4841
	UINT16 blockType;
Packit Service fa4841
	UINT32 blockLen;
Packit Service fa4841
};
Packit Service fa4841
typedef struct _PROGRESSIVE_BLOCK_FRAME_END PROGRESSIVE_BLOCK_FRAME_END;
Packit Service fa4841
Packit Service fa4841
struct _PROGRESSIVE_SURFACE_CONTEXT
Packit Service fa4841
{
Packit Service fa4841
	UINT16 id;
Packit Service fa4841
	UINT32 width;
Packit Service fa4841
	UINT32 height;
Packit Service fa4841
	UINT32 gridWidth;
Packit Service fa4841
	UINT32 gridHeight;
Packit Service fa4841
	UINT32 gridSize;
Packit Service fa4841
	RFX_PROGRESSIVE_TILE* tiles;
Packit Service fa4841
};
Packit Service fa4841
typedef struct _PROGRESSIVE_SURFACE_CONTEXT PROGRESSIVE_SURFACE_CONTEXT;
Packit Service fa4841
Packit Service fa4841
enum _WBT_STATE_FLAG
Packit Service fa4841
{
Packit Service fa4841
	FLAG_WBT_SYNC = 0x01,
Packit Service fa4841
	FLAG_WBT_FRAME_BEGIN = 0x02,
Packit Service fa4841
	FLAG_WBT_FRAME_END = 0x04,
Packit Service fa4841
	FLAG_WBT_CONTEXT = 0x08,
Packit Service fa4841
	FLAG_WBT_REGION = 0x10
Packit Service fa4841
};
Packit Service fa4841
typedef enum _WBT_STATE_FLAG WBT_STATE_FLAG;
Packit Service fa4841
Packit Service fa4841
struct _PROGRESSIVE_CONTEXT
Packit Service fa4841
{
Packit Service fa4841
	BOOL Compressor;
Packit Service fa4841
Packit Service fa4841
	wBufferPool* bufferPool;
Packit Service fa4841
Packit Service fa4841
	UINT32 format;
Packit Service fa4841
	UINT32 state;
Packit Service fa4841
Packit Service fa4841
	PROGRESSIVE_BLOCK_CONTEXT context;
Packit Service fa4841
	PROGRESSIVE_BLOCK_REGION region;
Packit Service fa4841
	RFX_PROGRESSIVE_CODEC_QUANT quantProgValFull;
Packit Service fa4841
Packit Service fa4841
	wHashTable* SurfaceContexts;
Packit Service fa4841
	wLog* log;
Packit Service fa4841
};
Packit Service fa4841
Packit Service fa4841
#endif /* INTERNAL_CODEC_PROGRESSIVE_H */