dpcm.c File Reference

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. More...

#include "libavutil/intreadwrite.h"
#include "avcodec.h"
#include "bytestream.h"
#include "internal.h"
#include "mathops.h"
Include dependency graph for dpcm.c:

Go to the source code of this file.

Data Structures

struct  DPCMContext
 

Macros

#define DPCM_DECODER(id_, name_, long_name_)
 

Typedefs

typedef struct DPCMContext DPCMContext
 

Functions

static av_cold int dpcm_decode_init (AVCodecContext *avctx)
 
static int dpcm_decode_frame (AVCodecContext *avctx, void *data, int *got_frame_ptr, AVPacket *avpkt)
 
 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_SOL_DPCM, sol_dpcm,"DPCM Sol")
 
 DPCM_DECODER (AV_CODEC_ID_XAN_DPCM, xan_dpcm,"DPCM Xan")
 

Variables

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]
 

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

#define DPCM_DECODER (   id_,
  name_,
  long_name_ 
)
Value:
AVCodec ff_ ## name_ ## _decoder = { \
.name = #name_, \
.type = AVMEDIA_TYPE_AUDIO, \
.id = id_, \
.priv_data_size = sizeof(DPCMContext), \
.capabilities = CODEC_CAP_DR1, \
.long_name = NULL_IF_CONFIG_SMALL(long_name_), \
}
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.
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
static int dpcm_decode_frame(AVCodecContext *avctx, void *data, int *got_frame_ptr, AVPacket *avpkt)
Definition: dpcm.c:169
const char * name
Name of the codec implementation.
static av_cold int dpcm_decode_init(AVCodecContext *avctx)
Definition: dpcm.c:115
struct DPCMContext DPCMContext
static int decode(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
Definition: crystalhd.c:868

Definition at line 328 of file dpcm.c.

Typedef Documentation

typedef struct DPCMContext DPCMContext

Function Documentation

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

Definition at line 169 of file dpcm.c.

static av_cold int dpcm_decode_init ( AVCodecContext avctx)
static

Definition at line 115 of file dpcm.c.

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_SOL_DPCM  ,
sol_dpcm  ,
"DPCM Sol"   
)
DPCM_DECODER ( AV_CODEC_ID_XAN_DPCM  ,
xan_dpcm  ,
"DPCM Xan"   
)

Variable Documentation

const int16_t interplay_delta_table[]
static

Definition at line 52 of file dpcm.c.

Referenced by dpcm_decode_frame().

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 98 of file dpcm.c.

Referenced by dpcm_decode_frame().

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 93 of file dpcm.c.

Referenced by dpcm_decode_init().

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 88 of file dpcm.c.

Referenced by dpcm_decode_init().