Blame libfreerdp/codec/progressive.h

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