FFmpeg
Data Structures | Macros | Functions | Variables
dpcm.c File Reference
#include "avcodec.h"
#include "bytestream.h"
#include "codec_internal.h"
#include "decode.h"
#include "mathops.h"

Go to the source code of this file.

Data Structures

struct  DPCMContext
 

Macros

#define DPCM_DECODER(id_, name_, long_name_)
 

Functions

static av_cold int dpcm_decode_init (AVCodecContext *avctx)
 
static int dpcm_decode_frame (AVCodecContext *avctx, AVFrame *frame, int *got_frame_ptr, AVPacket *avpkt)
 
static void dpcm_flush (AVCodecContext *avctx)
 
 DPCM_DECODER (AV_CODEC_ID_CBD2_DPCM, cbd2_dpcm, "DPCM Cuberoot-Delta-Exact")
 
 DPCM_DECODER (AV_CODEC_ID_DERF_DPCM, derf_dpcm, "DPCM Xilam DERF")
 
 DPCM_DECODER (AV_CODEC_ID_GREMLIN_DPCM, gremlin_dpcm, "DPCM Gremlin")
 
 DPCM_DECODER (AV_CODEC_ID_INTERPLAY_DPCM, interplay_dpcm, "DPCM Interplay")
 
 DPCM_DECODER (AV_CODEC_ID_ROQ_DPCM, roq_dpcm, "DPCM id RoQ")
 
 DPCM_DECODER (AV_CODEC_ID_SDX2_DPCM, sdx2_dpcm, "DPCM Squareroot-Delta-Exact")
 
 DPCM_DECODER (AV_CODEC_ID_SOL_DPCM, sol_dpcm, "DPCM Sol")
 
 DPCM_DECODER (AV_CODEC_ID_XAN_DPCM, xan_dpcm, "DPCM Xan")
 
 DPCM_DECODER (AV_CODEC_ID_WADY_DPCM, wady_dpcm, "DPCM Marble WADY")
 

Variables

static const int32_t derf_steps [96]
 
static const int16_t interplay_delta_table []
 
static const int8_t sol_table_old [16]
 
static const int8_t sol_table_new [16]
 
static const int16_t sol_table_16 [128]
 
static const int16_t wady_table [128]
 

Detailed Description

Assorted DPCM (differential pulse code modulation) audio codecs by Mike Melanson (melan.nosp@m.son@.nosp@m.pcisy.nosp@m.s.ne.nosp@m.t) Xan DPCM decoder by Mario Brito (mbrit.nosp@m.o@st.nosp@m.udent.nosp@m..dei.nosp@m..uc.p.nosp@m.t) for more information on the specific data formats, visit: http://www.pcisys.net/~melanson/codecs/simpleaudio.html SOL DPCMs implemented by Konstantin Shishkov

Note about using the Xan DPCM decoder: Xan DPCM is used in AVI files found in the Wing Commander IV computer game. These AVI files contain WAVEFORMAT headers which report the audio format as 0x01: raw PCM. Clearly incorrect. To detect Xan DPCM, you will probably have to special-case your AVI demuxer to use Xan DPCM if the file uses 'Xxan' (Xan video) for its video codec. Alternately, such AVI files also contain the fourcc 'Axan' in the 'auds' chunk of the AVI header.

Definition in file dpcm.c.

Macro Definition Documentation

◆ DPCM_DECODER

#define DPCM_DECODER (   id_,
  name_,
  long_name_ 
)
Value:
const FFCodec ff_ ## name_ ## _decoder = { \
.p.name = #name_, \
CODEC_LONG_NAME(long_name_), \
.p.type = AVMEDIA_TYPE_AUDIO, \
.p.id = id_, \
.p.capabilities = AV_CODEC_CAP_DR1, \
.priv_data_size = sizeof(DPCMContext), \
}

Definition at line 467 of file dpcm.c.

Function Documentation

◆ dpcm_decode_init()

static av_cold int dpcm_decode_init ( AVCodecContext avctx)
static

Definition at line 149 of file dpcm.c.

◆ dpcm_decode_frame()

static int dpcm_decode_frame ( AVCodecContext avctx,
AVFrame frame,
int got_frame_ptr,
AVPacket avpkt 
)
static

Definition at line 239 of file dpcm.c.

◆ dpcm_flush()

static void dpcm_flush ( AVCodecContext avctx)
static

Definition at line 460 of file dpcm.c.

◆ DPCM_DECODER() [1/9]

DPCM_DECODER ( AV_CODEC_ID_CBD2_DPCM  ,
cbd2_dpcm  ,
"DPCM Cuberoot-Delta-Exact"   
)

◆ DPCM_DECODER() [2/9]

DPCM_DECODER ( AV_CODEC_ID_DERF_DPCM  ,
derf_dpcm  ,
"DPCM Xilam DERF"   
)

◆ DPCM_DECODER() [3/9]

DPCM_DECODER ( AV_CODEC_ID_GREMLIN_DPCM  ,
gremlin_dpcm  ,
"DPCM Gremlin"   
)

◆ DPCM_DECODER() [4/9]

DPCM_DECODER ( AV_CODEC_ID_INTERPLAY_DPCM  ,
interplay_dpcm  ,
"DPCM Interplay"   
)

◆ DPCM_DECODER() [5/9]

DPCM_DECODER ( AV_CODEC_ID_ROQ_DPCM  ,
roq_dpcm  ,
"DPCM id RoQ"   
)

◆ DPCM_DECODER() [6/9]

DPCM_DECODER ( AV_CODEC_ID_SDX2_DPCM  ,
sdx2_dpcm  ,
"DPCM Squareroot-Delta-Exact"   
)

◆ DPCM_DECODER() [7/9]

DPCM_DECODER ( AV_CODEC_ID_SOL_DPCM  ,
sol_dpcm  ,
"DPCM Sol"   
)

◆ DPCM_DECODER() [8/9]

DPCM_DECODER ( AV_CODEC_ID_XAN_DPCM  ,
xan_dpcm  ,
"DPCM Xan"   
)

◆ DPCM_DECODER() [9/9]

DPCM_DECODER ( AV_CODEC_ID_WADY_DPCM  ,
wady_dpcm  ,
"DPCM Marble WADY"   
)

Variable Documentation

◆ derf_steps

const int32_t derf_steps[96]
static
Initial value:
= {
0, 1, 2, 3, 4, 5, 6, 7,
8, 9, 10, 11, 12, 13, 14, 16,
17, 19, 21, 23, 25, 28, 31, 34,
37, 41, 45, 50, 55, 60, 66, 73,
80, 88, 97, 107, 118, 130, 143, 157,
173, 190, 209, 230, 253, 279, 307, 337,
371, 408, 449, 494, 544, 598, 658, 724,
796, 876, 963, 1060, 1166, 1282, 1411, 1552,
1707, 1878, 2066, 2272, 2499, 2749, 3024, 3327,
3660, 4026, 4428, 4871, 5358, 5894, 6484, 7132,
7845, 8630, 9493, 10442, 11487, 12635, 13899, 15289,
16818, 18500, 20350, 22385, 24623, 27086, 29794, 32767,
}

Definition at line 53 of file dpcm.c.

Referenced by dpcm_decode_frame().

◆ interplay_delta_table

const int16_t interplay_delta_table[]
static

Definition at line 68 of file dpcm.c.

Referenced by dpcm_decode_frame().

◆ sol_table_old

const int8_t sol_table_old[16]
static
Initial value:
= {
0x0, 0x1, 0x2, 0x3, 0x6, 0xA, 0xF, 0x15,
-0x15, -0xF, -0xA, -0x6, -0x3, -0x2, -0x1, 0x0
}

Definition at line 104 of file dpcm.c.

Referenced by dpcm_decode_init().

◆ sol_table_new

const int8_t sol_table_new[16]
static
Initial value:
= {
0x0, 0x1, 0x2, 0x3, 0x6, 0xA, 0xF, 0x15,
0x0, -0x1, -0x2, -0x3, -0x6, -0xA, -0xF, -0x15
}

Definition at line 109 of file dpcm.c.

Referenced by dpcm_decode_init().

◆ sol_table_16

const int16_t sol_table_16[128]
static
Initial value:
= {
0x000, 0x008, 0x010, 0x020, 0x030, 0x040, 0x050, 0x060, 0x070, 0x080,
0x090, 0x0A0, 0x0B0, 0x0C0, 0x0D0, 0x0E0, 0x0F0, 0x100, 0x110, 0x120,
0x130, 0x140, 0x150, 0x160, 0x170, 0x180, 0x190, 0x1A0, 0x1B0, 0x1C0,
0x1D0, 0x1E0, 0x1F0, 0x200, 0x208, 0x210, 0x218, 0x220, 0x228, 0x230,
0x238, 0x240, 0x248, 0x250, 0x258, 0x260, 0x268, 0x270, 0x278, 0x280,
0x288, 0x290, 0x298, 0x2A0, 0x2A8, 0x2B0, 0x2B8, 0x2C0, 0x2C8, 0x2D0,
0x2D8, 0x2E0, 0x2E8, 0x2F0, 0x2F8, 0x300, 0x308, 0x310, 0x318, 0x320,
0x328, 0x330, 0x338, 0x340, 0x348, 0x350, 0x358, 0x360, 0x368, 0x370,
0x378, 0x380, 0x388, 0x390, 0x398, 0x3A0, 0x3A8, 0x3B0, 0x3B8, 0x3C0,
0x3C8, 0x3D0, 0x3D8, 0x3E0, 0x3E8, 0x3F0, 0x3F8, 0x400, 0x440, 0x480,
0x4C0, 0x500, 0x540, 0x580, 0x5C0, 0x600, 0x640, 0x680, 0x6C0, 0x700,
0x740, 0x780, 0x7C0, 0x800, 0x900, 0xA00, 0xB00, 0xC00, 0xD00, 0xE00,
0xF00, 0x1000, 0x1400, 0x1800, 0x1C00, 0x2000, 0x3000, 0x4000
}

Definition at line 114 of file dpcm.c.

Referenced by dpcm_decode_frame().

◆ wady_table

const int16_t wady_table[128]
static
Initial value:
= {
0, 2, 4, 6, 8, 10, 12, 15,
18, 21, 24, 28, 32, 36, 40, 44,
49, 54, 59, 64, 70, 76, 82, 88,
95, 102, 109, 116, 124, 132, 140, 148,
160, 170, 180, 190, 200, 210, 220, 230,
240, 255, 270, 285, 300, 320, 340, 360,
380, 400, 425, 450, 475, 500, 525, 550,
580, 610, 650, 700, 750, 800, 900, 1000,
-0, -2, -4, -6, -8, -10, -12, -15,
-18, -21, -24, -28, -32, -36, -40, -44,
-49, -54, -59, -64, -70, -76, -82, -88,
-95, -102,-109,-116,-124,-132,-140,-148,
-160,-170,-180,-190,-200,-210,-220,-230,
-240,-255,-270,-285,-300,-320,-340,-360,
-380,-400,-425,-450,-475,-500,-525,-550,
-580,-610,-650,-700,-750,-800,-900,-1000,
}

Definition at line 130 of file dpcm.c.

Referenced by dpcm_decode_frame().

DPCMContext
Definition: dpcm.c:46
dpcm_decode_init
static av_cold int dpcm_decode_init(AVCodecContext *avctx)
Definition: dpcm.c:149
FFCodec
Definition: codec_internal.h:127
FFCodec::p
AVCodec p
The public AVCodec.
Definition: codec_internal.h:131
dpcm_decode_frame
static int dpcm_decode_frame(AVCodecContext *avctx, AVFrame *frame, int *got_frame_ptr, AVPacket *avpkt)
Definition: dpcm.c:239
FF_CODEC_DECODE_CB
#define FF_CODEC_DECODE_CB(func)
Definition: codec_internal.h:306
AVMEDIA_TYPE_AUDIO
@ AVMEDIA_TYPE_AUDIO
Definition: avutil.h:202
init
int(* init)(AVBSFContext *ctx)
Definition: dts2pts_bsf.c:365
AV_CODEC_CAP_DR1
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() or get_encode_buffer() for allocating buffers and supports custom allocators.
Definition: codec.h:52
AVCodec::name
const char * name
Name of the codec implementation.
Definition: codec.h:194
dpcm_flush
static void dpcm_flush(AVCodecContext *avctx)
Definition: dpcm.c:460
flush
void(* flush)(AVBSFContext *ctx)
Definition: dts2pts_bsf.c:367