Microsoft Screen 4 (aka Microsoft Titanium Screen 2, aka Microsoft Expression Encoder Screen) decoder. More...

#include "avcodec.h"
#include "bytestream.h"
#include "dsputil.h"
#include "get_bits.h"
#include "internal.h"
#include "mss34dsp.h"
#include "unary.h"
Include dependency graph for mss4.c:

Go to the source code of this file.

Data Structures

struct  MSS4Context
 

Macros

#define HEADER_SIZE   8
 
#define MAX_ENTRIES   162
 
#define MKVAL(vals)   (vals[0] | (vals[1] << 3) | (vals[2] << 6))
 

Typedefs

typedef struct MSS4Context MSS4Context
 

Enumerations

enum  FrameType {
  ACTIVE_FRAME, SID_FRAME, UNTRANSMITTED_FRAME, INTRA_FRAME = 0,
  INTER_FRAME, SKIP_FRAME, FT_SHORT = 0, FT_MEDIUM,
  FT_LONG, FT_PPC
}
 
enum  BlockType {
  FILL_BLOCK = 0, IMAGE_BLOCK, DCT_BLOCK, HAAR_BLOCK,
  SKIP_BLOCK, SKIP_BLOCK = 0, DCT_BLOCK, IMAGE_BLOCK
}
 
enum  CachePos { LEFT = 0, TOP_LEFT, TOP }
 

Functions

static av_cold int mss4_init_vlc (VLC *vlc, const uint8_t *lens, const uint8_t *syms, int num_syms)
 
static av_cold int mss4_init_vlcs (MSS4Context *ctx)
 
static av_cold void mss4_free_vlcs (MSS4Context *ctx)
 
static av_always_inline int get_coeff_bits (GetBitContext *gb, int nbits)
 
static int get_coeff (GetBitContext *gb, VLC *vlc)
 
static int mss4_decode_dct (GetBitContext *gb, VLC *dc_vlc, VLC *ac_vlc, int *block, int *dc_cache, int bx, int by, uint16_t *quant_mat)
 
static int mss4_decode_dct_block (MSS4Context *c, GetBitContext *gb, uint8_t *dst[3], int mb_x, int mb_y)
 
static void read_vec_pos (GetBitContext *gb, int *vec_pos, int *sel_flag, int *sel_len, int *prev)
 
static int get_value_cached (GetBitContext *gb, int vec_pos, uint8_t *vec, int vec_size, int component, int shift, int *prev)
 
static int mss4_decode_image_block (MSS4Context *ctx, GetBitContext *gb, uint8_t *picdst[3], int mb_x, int mb_y)
 
static void mss4_update_dc_cache (MSS4Context *c, int mb_x)
 
static int mss4_decode_frame (AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
 
static av_cold int mss4_decode_init (AVCodecContext *avctx)
 
static av_cold int mss4_decode_end (AVCodecContext *avctx)
 

Variables

static const uint8_t mss4_dc_vlc_lens [2][16]
 
static const uint8_t mss4_ac_vlc_lens [2][16]
 
static const uint8_t mss4_ac_vlc_syms [2][162]
 
static const uint8_t vec_len_syms [2][4]
 
static const uint8_t mss4_vec_entry_vlc_lens [2][16]
 
static const uint8_t mss4_vec_entry_vlc_syms [2][9]
 
AVCodec ff_mts2_decoder
 

Detailed Description

Microsoft Screen 4 (aka Microsoft Titanium Screen 2, aka Microsoft Expression Encoder Screen) decoder.

Definition in file mss4.c.

Macro Definition Documentation

#define HEADER_SIZE   8

Definition at line 36 of file mss4.c.

Referenced by mss4_decode_frame().

#define MAX_ENTRIES   162

Definition at line 126 of file mss4.c.

Referenced by mss4_init_vlc().

#define MKVAL (   vals)    (vals[0] | (vals[1] << 3) | (vals[2] << 6))

Definition at line 367 of file mss4.c.

Referenced by mss4_decode_image_block().

Typedef Documentation

typedef struct MSS4Context MSS4Context

Enumeration Type Documentation

enum BlockType
Enumerator
FILL_BLOCK 
IMAGE_BLOCK 
DCT_BLOCK 
HAAR_BLOCK 
SKIP_BLOCK 
SKIP_BLOCK 
DCT_BLOCK 
IMAGE_BLOCK 

Definition at line 44 of file mss4.c.

enum CachePos
Enumerator
LEFT 
TOP_LEFT 
TOP 

Definition at line 50 of file mss4.c.

enum FrameType
Enumerator
ACTIVE_FRAME 

Active speech.

SID_FRAME 

Silence Insertion Descriptor frame.

UNTRANSMITTED_FRAME 
INTRA_FRAME 
INTER_FRAME 
SKIP_FRAME 
FT_SHORT 

Short frame (divided in n sub-blocks)

FT_MEDIUM 

Medium frame (divided in m<n sub-blocks)

FT_LONG 

Long frame (single sub-block + PPC)

FT_PPC 

Periodic Peak Component (part of the long frame)

Definition at line 38 of file mss4.c.

Function Documentation

static int get_coeff ( GetBitContext gb,
VLC vlc 
)
inlinestatic

Definition at line 220 of file mss4.c.

Referenced by mss4_decode_dct(), and mss4_decode_image_block().

static av_always_inline int get_coeff_bits ( GetBitContext gb,
int  nbits 
)
static

Definition at line 206 of file mss4.c.

Referenced by get_coeff(), and mss4_decode_dct().

static int get_value_cached ( GetBitContext gb,
int  vec_pos,
uint8_t vec,
int  vec_size,
int  component,
int  shift,
int *  prev 
)
static

Definition at line 356 of file mss4.c.

Referenced by mss4_decode_image_block().

static int mss4_decode_dct ( GetBitContext gb,
VLC dc_vlc,
VLC ac_vlc,
int *  block,
int *  dc_cache,
int  bx,
int  by,
uint16_t *  quant_mat 
)
static

Definition at line 227 of file mss4.c.

Referenced by mss4_decode_dct_block().

static int mss4_decode_dct_block ( MSS4Context c,
GetBitContext gb,
uint8_t dst[3],
int  mb_x,
int  mb_y 
)
static

Definition at line 282 of file mss4.c.

Referenced by mss4_decode_frame().

static av_cold int mss4_decode_end ( AVCodecContext avctx)
static

Definition at line 658 of file mss4.c.

static int mss4_decode_frame ( AVCodecContext avctx,
void data,
int *  got_frame,
AVPacket avpkt 
)
static

Definition at line 509 of file mss4.c.

static int mss4_decode_image_block ( MSS4Context ctx,
GetBitContext gb,
uint8_t picdst[3],
int  mb_x,
int  mb_y 
)
static

Definition at line 380 of file mss4.c.

Referenced by mss4_decode_frame().

static av_cold int mss4_decode_init ( AVCodecContext avctx)
static

Definition at line 629 of file mss4.c.

static av_cold void mss4_free_vlcs ( MSS4Context ctx)
static

Definition at line 188 of file mss4.c.

Referenced by mss4_decode_end(), and mss4_decode_init().

static av_cold int mss4_init_vlc ( VLC vlc,
const uint8_t lens,
const uint8_t syms,
int  num_syms 
)
static

Definition at line 146 of file mss4.c.

Referenced by mss4_init_vlcs().

static av_cold int mss4_init_vlcs ( MSS4Context ctx)
static

Definition at line 168 of file mss4.c.

Referenced by mss4_decode_init().

static void mss4_update_dc_cache ( MSS4Context c,
int  mb_x 
)
inlinestatic

Definition at line 490 of file mss4.c.

Referenced by mss4_decode_frame().

static void read_vec_pos ( GetBitContext gb,
int *  vec_pos,
int *  sel_flag,
int *  sel_len,
int *  prev 
)
static

Definition at line 330 of file mss4.c.

Referenced by mss4_decode_image_block().

Variable Documentation

AVCodec ff_mts2_decoder
Initial value:
= {
.name = "mts2",
.priv_data_size = sizeof(MSS4Context),
.capabilities = CODEC_CAP_DR1,
.long_name = NULL_IF_CONFIG_SMALL("MS Expression Encoder Screen"),
}
static av_cold int mss4_decode_end(AVCodecContext *avctx)
Definition: mss4.c:658
static av_cold int init(AVCodecContext *avctx)
Definition: avrndec.c:35
#define CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators.
static int mss4_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
Definition: mss4.c:509
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
struct MSS4Context MSS4Context
static void close(AVCodecParserContext *s)
Definition: h264_parser.c:375
static av_cold int mss4_decode_init(AVCodecContext *avctx)
Definition: mss4.c:629
static int decode(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
Definition: crystalhd.c:868

Definition at line 672 of file mss4.c.

const uint8_t mss4_ac_vlc_lens[2][16]
static
Initial value:
= {
{ 0, 2, 1, 3, 3, 2, 4, 3, 5, 5, 4, 4, 0, 0, 1, 125 },
{ 0, 2, 1, 2, 4, 4, 3, 4, 7, 5, 4, 4, 0, 1, 2, 119 }
}

Definition at line 61 of file mss4.c.

Referenced by mss4_init_vlcs().

const uint8_t mss4_ac_vlc_syms[2][162]
static

Definition at line 66 of file mss4.c.

Referenced by mss4_init_vlcs().

const uint8_t mss4_dc_vlc_lens[2][16]
static
Initial value:
= {
{ 0, 1, 5, 1, 1, 1, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 3, 1, 1, 1, 1, 1, 1, 1, 2, 0, 0, 0, 0, 0, 0 }
}

Definition at line 56 of file mss4.c.

Referenced by mss4_init_vlcs().

const uint8_t mss4_vec_entry_vlc_lens[2][16]
static
Initial value:
= {
{ 0, 2, 2, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 1, 5, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
}

Definition at line 116 of file mss4.c.

Referenced by mss4_init_vlcs().

const uint8_t mss4_vec_entry_vlc_syms[2][9]
static
Initial value:
= {
{ 0, 7, 6, 5, 8, 4, 3, 1, 2 },
{ 0, 2, 3, 4, 5, 6, 7, 1, 8 }
}

Definition at line 121 of file mss4.c.

Referenced by mss4_init_vlcs().

const uint8_t vec_len_syms[2][4]
static
Initial value:
= {
{ 4, 2, 3, 1 },
{ 4, 1, 2, 3 }
}

Definition at line 111 of file mss4.c.

Referenced by mss4_decode_image_block().