FFmpeg
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Data Structures | Macros | Enumerations | Functions | Variables
mss4.c File Reference

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

#include "avcodec.h"
#include "bytestream.h"
#include "get_bits.h"
#include "internal.h"
#include "mss34dsp.h"
#include "unary.h"

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))
 

Enumerations

enum  FrameType {
  ACTIVE_FRAME, SID_FRAME, UNTRANSMITTED_FRAME, INTRA_FRAME = 0,
  INTER_FRAME, SKIP_FRAME, FIRST_FRAME, INNER_FRAME,
  FINAL_FRAME, LINEAR_MODE, FRAME_NB
}
 
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_end (AVCodecContext *avctx)
 
static av_cold int mss4_decode_init (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 35 of file mss4.c.

Referenced by mss4_decode_frame().

#define MAX_ENTRIES   162

Definition at line 125 of file mss4.c.

Referenced by mss4_init_vlc().

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

Definition at line 366 of file mss4.c.

Referenced by mss4_decode_image_block().

Enumeration Type Documentation

enum FrameType
Enumerator
ACTIVE_FRAME 

Active speech.

SID_FRAME 

Silence Insertion Descriptor frame.

UNTRANSMITTED_FRAME 
INTRA_FRAME 
INTER_FRAME 
SKIP_FRAME 
FIRST_FRAME 
INNER_FRAME 
FINAL_FRAME 
LINEAR_MODE 
FRAME_NB 

Definition at line 37 of file mss4.c.

enum BlockType
Enumerator
FILL_BLOCK 
IMAGE_BLOCK 
DCT_BLOCK 
HAAR_BLOCK 
SKIP_BLOCK 
SKIP_BLOCK 
DCT_BLOCK 
IMAGE_BLOCK 

Definition at line 43 of file mss4.c.

enum CachePos
Enumerator
LEFT 
TOP_LEFT 
TOP 

Definition at line 49 of file mss4.c.

Function Documentation

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

Definition at line 145 of file mss4.c.

Referenced by mss4_init_vlcs().

static av_cold int mss4_init_vlcs ( MSS4Context ctx)
static

Definition at line 167 of file mss4.c.

Referenced by mss4_decode_init().

static av_cold void mss4_free_vlcs ( MSS4Context ctx)
static

Definition at line 187 of file mss4.c.

Referenced by mss4_decode_end(), and mss4_decode_init().

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

Definition at line 205 of file mss4.c.

Referenced by get_coeff(), and mss4_decode_dct().

static int get_coeff ( GetBitContext gb,
VLC vlc 
)
inlinestatic

Definition at line 219 of file mss4.c.

Referenced by mss4_decode_dct(), and 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 226 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 281 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 329 of file mss4.c.

Referenced by mss4_decode_image_block().

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 355 of file mss4.c.

Referenced by mss4_decode_image_block().

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

Definition at line 379 of file mss4.c.

Referenced by mss4_decode_frame().

static void mss4_update_dc_cache ( MSS4Context c,
int  mb_x 
)
inlinestatic

Definition at line 489 of file mss4.c.

Referenced by mss4_decode_frame().

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

Definition at line 508 of file mss4.c.

static av_cold int mss4_decode_end ( AVCodecContext avctx)
static

Definition at line 629 of file mss4.c.

Referenced by mss4_decode_init().

static av_cold int mss4_decode_init ( AVCodecContext avctx)
static

Definition at line 642 of file mss4.c.

Variable Documentation

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 55 of file mss4.c.

Referenced by mss4_init_vlcs().

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 60 of file mss4.c.

Referenced by mss4_init_vlcs().

const uint8_t mss4_ac_vlc_syms[2][162]
static

Definition at line 65 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 110 of file mss4.c.

Referenced by mss4_decode_image_block().

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 115 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 120 of file mss4.c.

Referenced by mss4_init_vlcs().

AVCodec ff_mts2_decoder
Initial value:
= {
.name = "mts2",
.long_name = NULL_IF_CONFIG_SMALL("MS Expression Encoder Screen"),
.priv_data_size = sizeof(MSS4Context),
.close = mss4_decode_end,
.capabilities = AV_CODEC_CAP_DR1,
}
static av_cold int mss4_decode_end(AVCodecContext *avctx)
Definition: mss4.c:629
static av_cold int init(AVCodecContext *avctx)
Definition: avrndec.c:35
static int mss4_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
Definition: mss4.c:508
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
Definition: internal.h:179
static av_cold int mss4_decode_init(AVCodecContext *avctx)
Definition: mss4.c:642
static int decode(AVCodecContext *avctx, AVFrame *frame, int *got_frame, AVPacket *pkt)
Definition: ffmpeg.c:2257
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators.
Definition: avcodec.h:994

Definition at line 673 of file mss4.c.