FFmpeg
Loading...
Searching...
No Matches
mss4.c File Reference

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

#include "libavutil/mem.h"
#include "libavutil/thread.h"
#include "libavutil/imgutils.h"
#include "avcodec.h"
#include "bytestream.h"
#include "codec_internal.h"
#include "decode.h"
#include "get_bits.h"
#include "jpegtables.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)
 

Enumerations

enum  FrameType { INTRA_FRAME = 0 , INTER_FRAME , SKIP_FRAME }
 
enum  BlockType { SKIP_BLOCK = 0 , DCT_BLOCK , IMAGE_BLOCK }
 
enum  CachePos { LEFT = 0 , TOP_LEFT , TOP }
 

Functions

static av_cold void mss4_init_vlc (VLC *vlc, unsigned *offset, const uint8_t *lens, const uint8_t *syms)
 
static av_cold void mss4_init_vlcs (void)
 
static av_always_inline int get_coeff_bits (GetBitContext *gb, int nbits)
 
static int get_coeff (GetBitContext *gb, const VLC *vlc, int nb_bits, int max_depth)
 
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, AVFrame *rframe, 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 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]
 
static VLC dc_vlc [2]
 
static VLC ac_vlc [2]
 
static VLC vec_entry_vlc [2]
 
const FFCodec 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

◆ HEADER_SIZE

#define HEADER_SIZE   8

Definition at line 41 of file mss4.c.

◆ MAX_ENTRIES

#define MAX_ENTRIES   162

Definition at line 81 of file mss4.c.

Referenced by mss4_init_vlc().

◆ MKVAL

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

Definition at line 308 of file mss4.c.

Referenced by mss4_decode_image_block().

Enumeration Type Documentation

◆ FrameType

enum FrameType
Enumerator
INTRA_FRAME 
INTER_FRAME 
SKIP_FRAME 

Definition at line 43 of file mss4.c.

◆ BlockType

enum BlockType
Enumerator
SKIP_BLOCK 
DCT_BLOCK 
IMAGE_BLOCK 

Definition at line 49 of file mss4.c.

◆ CachePos

enum CachePos
Enumerator
LEFT 
TOP_LEFT 
TOP 

Definition at line 55 of file mss4.c.

Function Documentation

◆ mss4_init_vlc()

static av_cold void mss4_init_vlc ( VLC * vlc,
unsigned * offset,
const uint8_t * lens,
const uint8_t * syms )
static

Definition at line 102 of file mss4.c.

Referenced by mss4_init_vlcs().

◆ mss4_init_vlcs()

static av_cold void mss4_init_vlcs ( void )
static

Definition at line 125 of file mss4.c.

Referenced by mss4_decode_init().

◆ get_coeff_bits()

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

Definition at line 146 of file mss4.c.

Referenced by get_coeff(), and mss4_decode_dct().

◆ get_coeff()

static int get_coeff ( GetBitContext * gb,
const VLC * vlc,
int nb_bits,
int max_depth )
inlinestatic

Definition at line 160 of file mss4.c.

Referenced by mss4_decode_dct(), and mss4_decode_image_block().

◆ mss4_decode_dct()

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

Referenced by mss4_decode_dct_block().

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

Referenced by mss4_decode_frame().

◆ read_vec_pos()

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

Definition at line 271 of file mss4.c.

Referenced by mss4_decode_image_block().

◆ get_value_cached()

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

Referenced by mss4_decode_image_block().

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

Referenced by mss4_decode_frame().

◆ mss4_update_dc_cache()

static void mss4_update_dc_cache ( MSS4Context * c,
int mb_x )
inlinestatic

Definition at line 431 of file mss4.c.

Referenced by mss4_decode_frame().

◆ mss4_decode_frame()

static int mss4_decode_frame ( AVCodecContext * avctx,
AVFrame * rframe,
int * got_frame,
AVPacket * avpkt )
static

Definition at line 450 of file mss4.c.

◆ mss4_decode_end()

static av_cold int mss4_decode_end ( AVCodecContext * avctx)
static

Definition at line 579 of file mss4.c.

◆ mss4_decode_init()

static av_cold int mss4_decode_init ( AVCodecContext * avctx)
static

Definition at line 591 of file mss4.c.

Variable Documentation

◆ mss4_dc_vlc_lens

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

Referenced by mss4_init_vlcs().

◆ vec_len_syms

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

Definition at line 66 of file mss4.c.

Referenced by mss4_decode_image_block().

◆ mss4_vec_entry_vlc_lens

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

Referenced by mss4_init_vlcs().

◆ mss4_vec_entry_vlc_syms

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

Referenced by mss4_init_vlcs().

◆ dc_vlc

VLC dc_vlc[2]
static

Definition at line 99 of file mss4.c.

◆ ac_vlc

VLC ac_vlc[2]
static

Definition at line 99 of file mss4.c.

◆ vec_entry_vlc

VLC vec_entry_vlc[2]
static

Definition at line 100 of file mss4.c.

Referenced by mss4_decode_image_block(), and mss4_init_vlcs().

◆ ff_mts2_decoder

const FFCodec ff_mts2_decoder
Initial value:
= {
.p.name = "mts2",
CODEC_LONG_NAME("MS Expression Encoder Screen"),
.p.type = AVMEDIA_TYPE_VIDEO,
.priv_data_size = sizeof(MSS4Context),
.p.capabilities = AV_CODEC_CAP_DR1,
.caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
}
static av_cold void close(AVCodecParserContext *s)
Definition apv_parser.c:197
#define FF_CODEC_DECODE_CB(func)
#define CODEC_LONG_NAME(str)
#define FF_CODEC_CAP_INIT_CLEANUP
The codec allows calling the close function for deallocation even if the init function returned a fai...
int(* init)(AVBSFContext *ctx)
Definition dts2pts.c:608
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() or get_encode_buffer() for allocating buffers and supports custom allocators.
Definition codec.h:49
@ AV_CODEC_ID_MTS2
Definition codec_id.h:214
@ AVMEDIA_TYPE_VIDEO
Definition avutil.h:200
static int mss4_decode_frame(AVCodecContext *avctx, AVFrame *rframe, int *got_frame, AVPacket *avpkt)
Definition mss4.c:450
static av_cold int mss4_decode_init(AVCodecContext *avctx)
Definition mss4.c:591
static av_cold int mss4_decode_end(AVCodecContext *avctx)
Definition mss4.c:579

Definition at line 617 of file mss4.c.