FreeRDP
rfx.c File Reference
#include <freerdp/config.h>
#include <winpr/assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <winpr/crt.h>
#include <winpr/tchar.h>
#include <winpr/sysinfo.h>
#include <winpr/registry.h>
#include <freerdp/log.h>
#include <freerdp/settings.h>
#include <freerdp/codec/rfx.h>
#include <freerdp/constants.h>
#include <freerdp/primitives.h>
#include <freerdp/codec/region.h>
#include <freerdp/build-config.h>
#include "rfx_constants.h"
#include "rfx_types.h"
#include "rfx_decode.h"
#include "rfx_encode.h"
#include "rfx_quantization.h"
#include "rfx_dwt.h"
#include "rfx_rlgr.h"
#include "rfx_sse2.h"
#include "rfx_neon.h"

Macros

#define TAG   FREERDP_TAG("codec")
 
#define RFX_INIT_SIMD(_rfx_context)
 
#define RFX_KEY   "Software\\" FREERDP_VENDOR_STRING "\\" FREERDP_PRODUCT_STRING "\\RemoteFX"
 
#define TILE_NO(v)   ((v) / 64)
 

Functions

static INLINE BOOL rfx_write_progressive_tile_simple (RFX_CONTEXT *rfx, wStream *s, const RFX_TILE *tile)
 
static void rfx_profiler_create (RFX_CONTEXT *context)
 
static void rfx_profiler_free (RFX_CONTEXT *context)
 
static void rfx_profiler_print (RFX_CONTEXT *context)
 
static void rfx_tile_init (void *obj)
 
static void * rfx_decoder_tile_new (const void *val)
 
static void rfx_decoder_tile_free (void *obj)
 
static void * rfx_encoder_tile_new (const void *val)
 
static void rfx_encoder_tile_free (void *obj)
 
RFX_CONTEXT * rfx_context_new (BOOL encoder)
 
RFX_CONTEXT * rfx_context_new_ex (BOOL encoder, UINT32 ThreadingFlags)
 
void rfx_context_free (RFX_CONTEXT *context)
 
static RFX_TILErfx_message_get_tile (RFX_MESSAGE *message, UINT32 index)
 
static const RFX_RECTrfx_message_get_rect_const (const RFX_MESSAGE *message, UINT32 index)
 
static RFX_RECTrfx_message_get_rect (RFX_MESSAGE *message, UINT32 index)
 
void rfx_context_set_pixel_format (RFX_CONTEXT *context, UINT32 pixel_format)
 
UINT32 rfx_context_get_pixel_format (RFX_CONTEXT *context)
 
void rfx_context_set_palette (RFX_CONTEXT *context, const BYTE *palette)
 
const BYTErfx_context_get_palette (RFX_CONTEXT *context)
 
BOOL rfx_context_reset (RFX_CONTEXT *context, UINT32 width, UINT32 height)
 
static BOOL rfx_process_message_sync (RFX_CONTEXT *context, wStream *s)
 
static BOOL rfx_process_message_codec_versions (RFX_CONTEXT *context, wStream *s)
 
static BOOL rfx_process_message_channels (RFX_CONTEXT *context, wStream *s)
 
static BOOL rfx_process_message_context (RFX_CONTEXT *context, wStream *s)
 
static BOOL rfx_process_message_frame_begin (RFX_CONTEXT *context, RFX_MESSAGE *message, wStream *s, UINT16 *pExpectedBlockType)
 
static BOOL rfx_process_message_frame_end (RFX_CONTEXT *context, RFX_MESSAGE *message, wStream *s, UINT16 *pExpectedBlockType)
 
static BOOL rfx_resize_rects (RFX_MESSAGE *message)
 
static BOOL rfx_process_message_region (RFX_CONTEXT *context, RFX_MESSAGE *message, wStream *s, UINT16 *pExpectedBlockType)
 
static void CALLBACK rfx_process_message_tile_work_callback (PTP_CALLBACK_INSTANCE instance, void *context, PTP_WORK work)
 
static BOOL rfx_allocate_tiles (RFX_MESSAGE *message, size_t count, BOOL allocOnly)
 
static BOOL rfx_process_message_tileset (RFX_CONTEXT *context, RFX_MESSAGE *message, wStream *s, UINT16 *pExpectedBlockType)
 
BOOL rfx_process_message (RFX_CONTEXT *context, const BYTE *data, UINT32 length, UINT32 left, UINT32 top, BYTE *dst, UINT32 dstFormat, UINT32 dstStride, UINT32 dstHeight, REGION16 *invalidRegion)
 
const UINT32 * rfx_message_get_quants (const RFX_MESSAGE *message, UINT16 *numQuantVals)
 
const RFX_TILE ** rfx_message_get_tiles (const RFX_MESSAGE *message, UINT16 *numTiles)
 
UINT16 rfx_message_get_tile_count (const RFX_MESSAGE *message)
 
const RFX_RECTrfx_message_get_rects (const RFX_MESSAGE *message, UINT16 *numRects)
 
UINT16 rfx_message_get_rect_count (const RFX_MESSAGE *message)
 
void rfx_message_free (RFX_CONTEXT *context, RFX_MESSAGE *message)
 
static void rfx_update_context_properties (RFX_CONTEXT *context)
 
static void rfx_write_message_sync (const RFX_CONTEXT *context, wStream *s)
 
static void rfx_write_message_codec_versions (const RFX_CONTEXT *context, wStream *s)
 
static void rfx_write_message_channels (const RFX_CONTEXT *context, wStream *s)
 
static void rfx_write_message_context (RFX_CONTEXT *context, wStream *s)
 
static BOOL rfx_compose_message_header (RFX_CONTEXT *context, wStream *s)
 
static size_t rfx_tile_length (const RFX_TILE *tile)
 
static BOOL rfx_write_tile (wStream *s, const RFX_TILE *tile)
 
static void CALLBACK rfx_compose_message_tile_work_callback (PTP_CALLBACK_INSTANCE instance, void *context, PTP_WORK work)
 
static BOOL computeRegion (const RFX_RECT *rects, size_t numRects, REGION16 *region, size_t width, size_t height)
 
static BOOL setupWorkers (RFX_CONTEXT *context, size_t nbTiles)
 
static BOOL rfx_ensure_tiles (RFX_MESSAGE *message, size_t count)
 
RFX_MESSAGE * rfx_encode_message (RFX_CONTEXT *context, const RFX_RECT *rects, size_t numRects, const BYTE *data, UINT32 w, UINT32 h, size_t s)
 
static BOOL rfx_clone_rects (RFX_MESSAGE *dst, const RFX_MESSAGE *src)
 
static BOOL rfx_clone_quants (RFX_MESSAGE *dst, const RFX_MESSAGE *src)
 
static RFX_MESSAGE * rfx_split_message (RFX_CONTEXT *context, RFX_MESSAGE *message, size_t *numMessages, size_t maxDataSize)
 
const RFX_MESSAGE * rfx_message_list_get (const RFX_MESSAGE_LIST *messages, size_t idx)
 
void rfx_message_list_free (RFX_MESSAGE_LIST *messages)
 
static RFX_MESSAGE_LIST * rfx_message_list_new (RFX_CONTEXT *context, RFX_MESSAGE *messages, size_t count)
 
RFX_MESSAGE_LIST * rfx_encode_messages (RFX_CONTEXT *context, const RFX_RECT *rects, size_t numRects, const BYTE *data, UINT32 width, UINT32 height, UINT32 scanline, size_t *numMessages, size_t maxDataSize)
 
static BOOL rfx_write_message_tileset (RFX_CONTEXT *context, wStream *s, const RFX_MESSAGE *message)
 
static BOOL rfx_write_message_frame_begin (RFX_CONTEXT *context, wStream *s, const RFX_MESSAGE *message)
 
static BOOL rfx_write_message_region (RFX_CONTEXT *context, wStream *s, const RFX_MESSAGE *message)
 
static BOOL rfx_write_message_frame_end (RFX_CONTEXT *context, wStream *s, const RFX_MESSAGE *message)
 
BOOL rfx_write_message (RFX_CONTEXT *context, wStream *s, const RFX_MESSAGE *message)
 
BOOL rfx_compose_message (RFX_CONTEXT *context, wStream *s, const RFX_RECT *rects, size_t numRects, const BYTE *data, UINT32 width, UINT32 height, UINT32 scanline)
 
BOOL rfx_context_set_mode (RFX_CONTEXT *context, RLGR_MODE mode)
 
RLGR_MODE rfx_context_get_mode (RFX_CONTEXT *context)
 
UINT32 rfx_context_get_frame_idx (const RFX_CONTEXT *context)
 
UINT32 rfx_message_get_frame_idx (const RFX_MESSAGE *message)
 
static INLINE BOOL rfx_write_progressive_wb_sync (RFX_CONTEXT *rfx, wStream *s)
 
static INLINE BOOL rfx_write_progressive_wb_context (RFX_CONTEXT *rfx, wStream *s)
 
static INLINE BOOL rfx_write_progressive_region (RFX_CONTEXT *rfx, wStream *s, const RFX_MESSAGE *msg)
 
static INLINE BOOL rfx_write_progressive_frame_begin (RFX_CONTEXT *rfx, wStream *s, const RFX_MESSAGE *msg)
 
static INLINE BOOL rfx_write_progressive_frame_end (RFX_CONTEXT *rfx, wStream *s)
 
const char * rfx_get_progressive_block_type_string (UINT16 blockType)
 
BOOL rfx_write_message_progressive_simple (RFX_CONTEXT *context, wStream *s, const RFX_MESSAGE *msg)
 

Variables

static const UINT32 rfx_default_quantization_values [] = { 6, 6, 6, 6, 7, 7, 8, 8, 8, 9 }
 

Macro Definition Documentation

◆ RFX_INIT_SIMD

#define RFX_INIT_SIMD (   _rfx_context)
Value:
do \
{ \
} while (0)

◆ RFX_KEY

#define RFX_KEY   "Software\\" FREERDP_VENDOR_STRING "\\" FREERDP_PRODUCT_STRING "\\RemoteFX"

◆ TAG

#define TAG   FREERDP_TAG("codec")

FreeRDP: A Remote Desktop Protocol Implementation RemoteFX Codec Library

Copyright 2011 Vic Lee Copyright 2015 Thincast Technologies GmbH Copyright 2015 Norbert Federa norbe.nosp@m.rt.f.nosp@m.edera.nosp@m.@thi.nosp@m.ncast.nosp@m..com

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

◆ TILE_NO

#define TILE_NO (   v)    ((v) / 64)

Function Documentation

◆ computeRegion()

static BOOL computeRegion ( const RFX_RECT rects,
size_t  numRects,
REGION16 region,
size_t  width,
size_t  height 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ rfx_allocate_tiles()

static BOOL rfx_allocate_tiles ( RFX_MESSAGE *  message,
size_t  count,
BOOL  allocOnly 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ rfx_clone_quants()

static BOOL rfx_clone_quants ( RFX_MESSAGE *  dst,
const RFX_MESSAGE *  src 
)
static
Here is the caller graph for this function:

◆ rfx_clone_rects()

static BOOL rfx_clone_rects ( RFX_MESSAGE *  dst,
const RFX_MESSAGE *  src 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ rfx_compose_message()

BOOL rfx_compose_message ( RFX_CONTEXT *  context,
wStream s,
const RFX_RECT rects,
size_t  numRects,
const BYTE data,
UINT32  width,
UINT32  height,
UINT32  scanline 
)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ rfx_compose_message_header()

static BOOL rfx_compose_message_header ( RFX_CONTEXT *  context,
wStream s 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ rfx_compose_message_tile_work_callback()

static void CALLBACK rfx_compose_message_tile_work_callback ( PTP_CALLBACK_INSTANCE  instance,
void *  context,
PTP_WORK  work 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ rfx_context_free()

void rfx_context_free ( RFX_CONTEXT *  context)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ rfx_context_get_frame_idx()

UINT32 rfx_context_get_frame_idx ( const RFX_CONTEXT *  context)
Here is the caller graph for this function:

◆ rfx_context_get_mode()

RLGR_MODE rfx_context_get_mode ( RFX_CONTEXT *  context)

◆ rfx_context_get_palette()

const BYTE* rfx_context_get_palette ( RFX_CONTEXT *  context)

◆ rfx_context_get_pixel_format()

UINT32 rfx_context_get_pixel_format ( RFX_CONTEXT *  context)

◆ rfx_context_new()

RFX_CONTEXT* rfx_context_new ( BOOL  encoder)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ rfx_context_new_ex()

RFX_CONTEXT* rfx_context_new_ex ( BOOL  encoder,
UINT32  ThreadingFlags 
)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ rfx_context_reset()

BOOL rfx_context_reset ( RFX_CONTEXT *  context,
UINT32  width,
UINT32  height 
)
Here is the caller graph for this function:

◆ rfx_context_set_mode()

BOOL rfx_context_set_mode ( RFX_CONTEXT *  context,
RLGR_MODE  mode 
)
Here is the caller graph for this function:

◆ rfx_context_set_palette()

void rfx_context_set_palette ( RFX_CONTEXT *  context,
const BYTE palette 
)

◆ rfx_context_set_pixel_format()

void rfx_context_set_pixel_format ( RFX_CONTEXT *  context,
UINT32  pixel_format 
)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ rfx_decoder_tile_free()

static void rfx_decoder_tile_free ( void *  obj)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ rfx_decoder_tile_new()

static void* rfx_decoder_tile_new ( const void *  val)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ rfx_encode_message()

RFX_MESSAGE* rfx_encode_message ( RFX_CONTEXT *  context,
const RFX_RECT rects,
size_t  numRects,
const BYTE data,
UINT32  w,
UINT32  h,
size_t  s 
)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ rfx_encode_messages()

RFX_MESSAGE_LIST* rfx_encode_messages ( RFX_CONTEXT *  context,
const RFX_RECT rects,
size_t  numRects,
const BYTE data,
UINT32  width,
UINT32  height,
UINT32  scanline,
size_t *  numMessages,
size_t  maxDataSize 
)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ rfx_encoder_tile_free()

static void rfx_encoder_tile_free ( void *  obj)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ rfx_encoder_tile_new()

static void* rfx_encoder_tile_new ( const void *  val)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ rfx_ensure_tiles()

static BOOL rfx_ensure_tiles ( RFX_MESSAGE *  message,
size_t  count 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ rfx_get_progressive_block_type_string()

const char* rfx_get_progressive_block_type_string ( UINT16  blockType)
Here is the caller graph for this function:

◆ rfx_message_free()

void rfx_message_free ( RFX_CONTEXT *  context,
RFX_MESSAGE *  message 
)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ rfx_message_get_frame_idx()

UINT32 rfx_message_get_frame_idx ( const RFX_MESSAGE *  message)

◆ rfx_message_get_quants()

const UINT32* rfx_message_get_quants ( const RFX_MESSAGE *  message,
UINT16 numQuantVals 
)

◆ rfx_message_get_rect()

static RFX_RECT* rfx_message_get_rect ( RFX_MESSAGE *  message,
UINT32  index 
)
static
Here is the caller graph for this function:

◆ rfx_message_get_rect_const()

static const RFX_RECT* rfx_message_get_rect_const ( const RFX_MESSAGE *  message,
UINT32  index 
)
static
Here is the caller graph for this function:

◆ rfx_message_get_rect_count()

UINT16 rfx_message_get_rect_count ( const RFX_MESSAGE *  message)

◆ rfx_message_get_rects()

const RFX_RECT* rfx_message_get_rects ( const RFX_MESSAGE *  message,
UINT16 numRects 
)

◆ rfx_message_get_tile()

static RFX_TILE* rfx_message_get_tile ( RFX_MESSAGE *  message,
UINT32  index 
)
static
Here is the caller graph for this function:

◆ rfx_message_get_tile_count()

UINT16 rfx_message_get_tile_count ( const RFX_MESSAGE *  message)

◆ rfx_message_get_tiles()

const RFX_TILE** rfx_message_get_tiles ( const RFX_MESSAGE *  message,
UINT16 numTiles 
)

◆ rfx_message_list_free()

void rfx_message_list_free ( RFX_MESSAGE_LIST *  messages)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ rfx_message_list_get()

const RFX_MESSAGE* rfx_message_list_get ( const RFX_MESSAGE_LIST *  messages,
size_t  idx 
)
Here is the caller graph for this function:

◆ rfx_message_list_new()

static RFX_MESSAGE_LIST* rfx_message_list_new ( RFX_CONTEXT *  context,
RFX_MESSAGE *  messages,
size_t  count 
)
static
Here is the caller graph for this function:

◆ rfx_process_message()

BOOL rfx_process_message ( RFX_CONTEXT *  context,
const BYTE data,
UINT32  length,
UINT32  left,
UINT32  top,
BYTE dst,
UINT32  dstFormat,
UINT32  dstStride,
UINT32  dstHeight,
REGION16 invalidRegion 
)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ rfx_process_message_channels()

static BOOL rfx_process_message_channels ( RFX_CONTEXT *  context,
wStream s 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ rfx_process_message_codec_versions()

static BOOL rfx_process_message_codec_versions ( RFX_CONTEXT *  context,
wStream s 
)
static
Here is the caller graph for this function:

◆ rfx_process_message_context()

static BOOL rfx_process_message_context ( RFX_CONTEXT *  context,
wStream s 
)
static
Here is the caller graph for this function:

◆ rfx_process_message_frame_begin()

static BOOL rfx_process_message_frame_begin ( RFX_CONTEXT *  context,
RFX_MESSAGE *  message,
wStream s,
UINT16 pExpectedBlockType 
)
static
Here is the caller graph for this function:

◆ rfx_process_message_frame_end()

static BOOL rfx_process_message_frame_end ( RFX_CONTEXT *  context,
RFX_MESSAGE *  message,
wStream s,
UINT16 pExpectedBlockType 
)
static
Here is the caller graph for this function:

◆ rfx_process_message_region()

static BOOL rfx_process_message_region ( RFX_CONTEXT *  context,
RFX_MESSAGE *  message,
wStream s,
UINT16 pExpectedBlockType 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ rfx_process_message_sync()

static BOOL rfx_process_message_sync ( RFX_CONTEXT *  context,
wStream s 
)
static
Here is the caller graph for this function:

◆ rfx_process_message_tile_work_callback()

static void CALLBACK rfx_process_message_tile_work_callback ( PTP_CALLBACK_INSTANCE  instance,
void *  context,
PTP_WORK  work 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ rfx_process_message_tileset()

static BOOL rfx_process_message_tileset ( RFX_CONTEXT *  context,
RFX_MESSAGE *  message,
wStream s,
UINT16 pExpectedBlockType 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ rfx_profiler_create()

static void rfx_profiler_create ( RFX_CONTEXT *  context)
static
Here is the caller graph for this function:

◆ rfx_profiler_free()

static void rfx_profiler_free ( RFX_CONTEXT *  context)
static
Here is the caller graph for this function:

◆ rfx_profiler_print()

static void rfx_profiler_print ( RFX_CONTEXT *  context)
static
Here is the caller graph for this function:

◆ rfx_resize_rects()

static BOOL rfx_resize_rects ( RFX_MESSAGE *  message)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ rfx_split_message()

static RFX_MESSAGE* rfx_split_message ( RFX_CONTEXT *  context,
RFX_MESSAGE *  message,
size_t *  numMessages,
size_t  maxDataSize 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ rfx_tile_init()

static void rfx_tile_init ( void *  obj)
static
Here is the caller graph for this function:

◆ rfx_tile_length()

static size_t rfx_tile_length ( const RFX_TILE tile)
static
Here is the caller graph for this function:

◆ rfx_update_context_properties()

static void rfx_update_context_properties ( RFX_CONTEXT *  context)
static
Here is the caller graph for this function:

◆ rfx_write_message()

BOOL rfx_write_message ( RFX_CONTEXT *  context,
wStream s,
const RFX_MESSAGE *  message 
)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ rfx_write_message_channels()

static void rfx_write_message_channels ( const RFX_CONTEXT *  context,
wStream s 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ rfx_write_message_codec_versions()

static void rfx_write_message_codec_versions ( const RFX_CONTEXT *  context,
wStream s 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ rfx_write_message_context()

static void rfx_write_message_context ( RFX_CONTEXT *  context,
wStream s 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ rfx_write_message_frame_begin()

static BOOL rfx_write_message_frame_begin ( RFX_CONTEXT *  context,
wStream s,
const RFX_MESSAGE *  message 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ rfx_write_message_frame_end()

static BOOL rfx_write_message_frame_end ( RFX_CONTEXT *  context,
wStream s,
const RFX_MESSAGE *  message 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ rfx_write_message_progressive_simple()

BOOL rfx_write_message_progressive_simple ( RFX_CONTEXT *  context,
wStream s,
const RFX_MESSAGE *  msg 
)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ rfx_write_message_region()

static BOOL rfx_write_message_region ( RFX_CONTEXT *  context,
wStream s,
const RFX_MESSAGE *  message 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ rfx_write_message_sync()

static void rfx_write_message_sync ( const RFX_CONTEXT *  context,
wStream s 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ rfx_write_message_tileset()

static BOOL rfx_write_message_tileset ( RFX_CONTEXT *  context,
wStream s,
const RFX_MESSAGE *  message 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ rfx_write_progressive_frame_begin()

static INLINE BOOL rfx_write_progressive_frame_begin ( RFX_CONTEXT *  rfx,
wStream s,
const RFX_MESSAGE *  msg 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ rfx_write_progressive_frame_end()

static INLINE BOOL rfx_write_progressive_frame_end ( RFX_CONTEXT *  rfx,
wStream s 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ rfx_write_progressive_region()

static INLINE BOOL rfx_write_progressive_region ( RFX_CONTEXT *  rfx,
wStream s,
const RFX_MESSAGE *  msg 
)
static

Note: The RFX_COMPONENT_CODEC_QUANT structure differs from the TS_RFX_CODEC_QUANT ([MS-RDPRFX] section 2.2.2.1.5) structure with respect to the order of the bands. 0 1 2 3 4 5 6 7 8 9 RDPRFX: LL3, LH3, HL3, HH3, LH2, HL2, HH2, LH1, HL1, HH1 RDPEGFX: LL3, HL3, LH3, HH3, HL2, LH2, HH2, HL1, LH1, HH1

Here is the call graph for this function:
Here is the caller graph for this function:

◆ rfx_write_progressive_tile_simple()

static INLINE BOOL rfx_write_progressive_tile_simple ( RFX_CONTEXT *  rfx,
wStream s,
const RFX_TILE tile 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ rfx_write_progressive_wb_context()

static INLINE BOOL rfx_write_progressive_wb_context ( RFX_CONTEXT *  rfx,
wStream s 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ rfx_write_progressive_wb_sync()

static INLINE BOOL rfx_write_progressive_wb_sync ( RFX_CONTEXT *  rfx,
wStream s 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ rfx_write_tile()

static BOOL rfx_write_tile ( wStream s,
const RFX_TILE tile 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ setupWorkers()

static BOOL setupWorkers ( RFX_CONTEXT *  context,
size_t  nbTiles 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

Variable Documentation

◆ rfx_default_quantization_values

const UINT32 rfx_default_quantization_values[] = { 6, 6, 6, 6, 7, 7, 8, 8, 8, 9 }
static

The quantization values control the compression rate and quality. The value range is between 6 and 15. The higher value, the higher compression rate and lower quality.

This is the default values being use by the MS RDP server, and we will also use it as our default values for the encoder. It can be overrided by setting the context->num_quants and context->quants member.

The order of the values are: LL3, LH3, HL3, HH3, LH2, HL2, HH2, LH1, HL1, HH1