FFmpeg  4.0
Data Structures | Macros | Enumerations | Functions | Variables
smacker.c File Reference

Smacker decoder. More...

#include <stdio.h>
#include <stdlib.h>
#include "libavutil/channel_layout.h"
#include "avcodec.h"
#include "bytestream.h"
#include "get_bits.h"
#include "internal.h"
#include "mathops.h"

Go to the source code of this file.

Data Structures

struct  SmackVContext
 
struct  HuffContext
 Context used for code reconstructing. More...
 
struct  DBCtx
 

Macros

#define BITSTREAM_READER_LE
 
#define SMKTREE_BITS   9
 
#define SMK_NODE   0x80000000
 
#define SMKTREE_DECODE_MAX_RECURSION   32
 
#define SMKTREE_DECODE_BIG_MAX_RECURSION   500
 

Enumerations

enum  SmkBlockTypes { SMK_BLK_MONO = 0, SMK_BLK_FULL = 1, SMK_BLK_SKIP = 2, SMK_BLK_FILL = 3 }
 

Functions

static int smacker_decode_tree (GetBitContext *gb, HuffContext *hc, uint32_t prefix, int length)
 Decode local frame tree. More...
 
static int smacker_decode_bigtree (GetBitContext *gb, HuffContext *hc, DBCtx *ctx, int length)
 Decode header tree. More...
 
static int smacker_decode_header_tree (SmackVContext *smk, GetBitContext *gb, int **recodes, int *last, int size)
 Store large tree as FFmpeg's vlc codes. More...
 
static int decode_header_trees (SmackVContext *smk)
 
static av_always_inline void last_reset (int *recode, int *last)
 
static av_always_inline int smk_get_code (GetBitContext *gb, int *recode, int *last)
 
static int decode_frame (AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
 
static av_cold int decode_end (AVCodecContext *avctx)
 
static av_cold int decode_init (AVCodecContext *avctx)
 
static av_cold int smka_decode_init (AVCodecContext *avctx)
 
static int smka_decode_frame (AVCodecContext *avctx, void *data, int *got_frame_ptr, AVPacket *avpkt)
 Decode Smacker audio data. More...
 

Variables

static const int block_runs [64]
 
AVCodec ff_smacker_decoder
 
AVCodec ff_smackaud_decoder
 

Detailed Description

Smacker decoder.

Definition in file smacker.c.

Macro Definition Documentation

◆ BITSTREAM_READER_LE

#define BITSTREAM_READER_LE

Definition at line 36 of file smacker.c.

◆ SMKTREE_BITS

#define SMKTREE_BITS   9

◆ SMK_NODE

#define SMK_NODE   0x80000000

Definition at line 44 of file smacker.c.

Referenced by smacker_decode_bigtree(), and smk_get_code().

◆ SMKTREE_DECODE_MAX_RECURSION

#define SMKTREE_DECODE_MAX_RECURSION   32

Definition at line 46 of file smacker.c.

Referenced by smacker_decode_tree().

◆ SMKTREE_DECODE_BIG_MAX_RECURSION

#define SMKTREE_DECODE_BIG_MAX_RECURSION   500

Definition at line 47 of file smacker.c.

Referenced by smacker_decode_bigtree().

Enumeration Type Documentation

◆ SmkBlockTypes

Enumerator
SMK_BLK_MONO 
SMK_BLK_FULL 
SMK_BLK_SKIP 
SMK_BLK_FILL 

Definition at line 89 of file smacker.c.

Function Documentation

◆ smacker_decode_tree()

static int smacker_decode_tree ( GetBitContext gb,
HuffContext hc,
uint32_t  prefix,
int  length 
)
static

Decode local frame tree.

Definition at line 98 of file smacker.c.

Referenced by smacker_decode_header_tree(), and smka_decode_frame().

◆ smacker_decode_bigtree()

static int smacker_decode_bigtree ( GetBitContext gb,
HuffContext hc,
DBCtx ctx,
int  length 
)
static

Decode header tree.

Definition at line 135 of file smacker.c.

Referenced by smacker_decode_header_tree().

◆ smacker_decode_header_tree()

static int smacker_decode_header_tree ( SmackVContext smk,
GetBitContext gb,
int **  recodes,
int last,
int  size 
)
static

Store large tree as FFmpeg's vlc codes.

Definition at line 187 of file smacker.c.

Referenced by decode_header_trees().

◆ decode_header_trees()

static int decode_header_trees ( SmackVContext smk)
static

Definition at line 319 of file smacker.c.

Referenced by decode_init().

◆ last_reset()

static av_always_inline void last_reset ( int recode,
int last 
)
static

Definition at line 384 of file smacker.c.

Referenced by decode_frame().

◆ smk_get_code()

static av_always_inline int smk_get_code ( GetBitContext gb,
int recode,
int last 
)
static

Definition at line 389 of file smacker.c.

Referenced by decode_frame().

◆ decode_frame()

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

Definition at line 408 of file smacker.c.

◆ decode_end()

static av_cold int decode_end ( AVCodecContext avctx)
static

Definition at line 561 of file smacker.c.

Referenced by decode_init().

◆ decode_init()

static av_cold int decode_init ( AVCodecContext avctx)
static

Definition at line 576 of file smacker.c.

◆ smka_decode_init()

static av_cold int smka_decode_init ( AVCodecContext avctx)
static

Definition at line 606 of file smacker.c.

◆ smka_decode_frame()

static int smka_decode_frame ( AVCodecContext avctx,
void data,
int got_frame_ptr,
AVPacket avpkt 
)
static

Decode Smacker audio data.

Definition at line 621 of file smacker.c.

Variable Documentation

◆ block_runs

const int block_runs[64]
static
Initial value:
= {
1, 2, 3, 4, 5, 6, 7, 8,
9, 10, 11, 12, 13, 14, 15, 16,
17, 18, 19, 20, 21, 22, 23, 24,
25, 26, 27, 28, 29, 30, 31, 32,
33, 34, 35, 36, 37, 38, 39, 40,
41, 42, 43, 44, 45, 46, 47, 48,
49, 50, 51, 52, 53, 54, 55, 56,
57, 58, 59, 128, 256, 512, 1024, 2048 }

Definition at line 79 of file smacker.c.

Referenced by decode_frame().

◆ ff_smacker_decoder

AVCodec ff_smacker_decoder
Initial value:
= {
.name = "smackvid",
.long_name = NULL_IF_CONFIG_SMALL("Smacker video"),
.priv_data_size = sizeof(SmackVContext),
.close = decode_end,
.capabilities = AV_CODEC_CAP_DR1,
}
static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
Definition: smacker.c:408
static av_cold int init(AVCodecContext *avctx)
Definition: avrndec.c:35
static av_cold int decode_init(AVCodecContext *avctx)
Definition: smacker.c:576
static void decode(AVCodecContext *dec_ctx, AVPacket *pkt, AVFrame *frame, FILE *outfile)
Definition: decode_audio.c:42
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
Definition: internal.h:186
static av_cold int decode_end(AVCodecContext *avctx)
Definition: smacker.c:561
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators.
Definition: avcodec.h:959

Definition at line 812 of file smacker.c.

◆ ff_smackaud_decoder

AVCodec ff_smackaud_decoder
Initial value:
= {
.name = "smackaud",
.long_name = NULL_IF_CONFIG_SMALL("Smacker audio"),
.decode = smka_decode_frame,
.capabilities = AV_CODEC_CAP_DR1,
}
static av_cold int smka_decode_init(AVCodecContext *avctx)
Definition: smacker.c:606
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
Definition: internal.h:186
static int smka_decode_frame(AVCodecContext *avctx, void *data, int *got_frame_ptr, AVPacket *avpkt)
Decode Smacker audio data.
Definition: smacker.c:621
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators.
Definition: avcodec.h:959

Definition at line 824 of file smacker.c.