libavcodec/adpcm.c File Reference

ADPCM decoders First version by Francois Revol (revol@free.fr) Fringe ADPCM codecs (e.g., DK3, DK4, Westwood) by Mike Melanson (melanson@pcisys.net) CD-ROM XA ADPCM codec by BERO EA ADPCM decoder by Robin Kay (komadori@myrealbox.com) EA ADPCM R1/R2/R3 decoder by Peter Ross (pross@xvid.org) EA IMA EACS decoder by Peter Ross (pross@xvid.org) EA IMA SEAD decoder by Peter Ross (pross@xvid.org) EA ADPCM XAS decoder by Peter Ross (pross@xvid.org) MAXIS EA ADPCM decoder by Robert Marston (rmarston@gmail.com) THP ADPCM decoder by Marco Gerards (mgerards@xs4all.nl). More...

#include "avcodec.h"
#include "get_bits.h"
#include "put_bits.h"
#include "bytestream.h"
#include "adpcm.h"
#include "adpcm_data.h"

Go to the source code of this file.

Data Structures

struct  ADPCMDecodeContext

Defines

#define DK3_GET_NEXT_NIBBLE()
#define ADPCM_DECODER(id_, name_, long_name_)

Functions

static av_cold int adpcm_decode_init (AVCodecContext *avctx)
static short adpcm_ima_expand_nibble (ADPCMChannelStatus *c, char nibble, int shift)
static int adpcm_ima_qt_expand_nibble (ADPCMChannelStatus *c, int nibble, int shift)
static short adpcm_ms_expand_nibble (ADPCMChannelStatus *c, char nibble)
static short adpcm_ct_expand_nibble (ADPCMChannelStatus *c, char nibble)
static short adpcm_sbpro_expand_nibble (ADPCMChannelStatus *c, char nibble, int size, int shift)
static short adpcm_yamaha_expand_nibble (ADPCMChannelStatus *c, unsigned char nibble)
static void xa_decode (short *out, const unsigned char *in, ADPCMChannelStatus *left, ADPCMChannelStatus *right, int inc)
static int get_nb_samples (AVCodecContext *avctx, const uint8_t *buf, int buf_size, int *coded_samples)
 Get the number of samples that will be decoded from the packet.
static int adpcm_decode_frame (AVCodecContext *avctx, void *data, int *got_frame_ptr, AVPacket *avpkt)
 ADPCM_DECODER (CODEC_ID_ADPCM_4XM, adpcm_4xm,"ADPCM 4X Movie")
 ADPCM_DECODER (CODEC_ID_ADPCM_CT, adpcm_ct,"ADPCM Creative Technology")
 ADPCM_DECODER (CODEC_ID_ADPCM_EA, adpcm_ea,"ADPCM Electronic Arts")
 ADPCM_DECODER (CODEC_ID_ADPCM_EA_MAXIS_XA, adpcm_ea_maxis_xa,"ADPCM Electronic Arts Maxis CDROM XA")
 ADPCM_DECODER (CODEC_ID_ADPCM_EA_R1, adpcm_ea_r1,"ADPCM Electronic Arts R1")
 ADPCM_DECODER (CODEC_ID_ADPCM_EA_R2, adpcm_ea_r2,"ADPCM Electronic Arts R2")
 ADPCM_DECODER (CODEC_ID_ADPCM_EA_R3, adpcm_ea_r3,"ADPCM Electronic Arts R3")
 ADPCM_DECODER (CODEC_ID_ADPCM_EA_XAS, adpcm_ea_xas,"ADPCM Electronic Arts XAS")
 ADPCM_DECODER (CODEC_ID_ADPCM_IMA_AMV, adpcm_ima_amv,"ADPCM IMA AMV")
 ADPCM_DECODER (CODEC_ID_ADPCM_IMA_DK3, adpcm_ima_dk3,"ADPCM IMA Duck DK3")
 ADPCM_DECODER (CODEC_ID_ADPCM_IMA_DK4, adpcm_ima_dk4,"ADPCM IMA Duck DK4")
 ADPCM_DECODER (CODEC_ID_ADPCM_IMA_EA_EACS, adpcm_ima_ea_eacs,"ADPCM IMA Electronic Arts EACS")
 ADPCM_DECODER (CODEC_ID_ADPCM_IMA_EA_SEAD, adpcm_ima_ea_sead,"ADPCM IMA Electronic Arts SEAD")
 ADPCM_DECODER (CODEC_ID_ADPCM_IMA_ISS, adpcm_ima_iss,"ADPCM IMA Funcom ISS")
 ADPCM_DECODER (CODEC_ID_ADPCM_IMA_QT, adpcm_ima_qt,"ADPCM IMA QuickTime")
 ADPCM_DECODER (CODEC_ID_ADPCM_IMA_SMJPEG, adpcm_ima_smjpeg,"ADPCM IMA Loki SDL MJPEG")
 ADPCM_DECODER (CODEC_ID_ADPCM_IMA_WAV, adpcm_ima_wav,"ADPCM IMA WAV")
 ADPCM_DECODER (CODEC_ID_ADPCM_IMA_WS, adpcm_ima_ws,"ADPCM IMA Westwood")
 ADPCM_DECODER (CODEC_ID_ADPCM_MS, adpcm_ms,"ADPCM Microsoft")
 ADPCM_DECODER (CODEC_ID_ADPCM_SBPRO_2, adpcm_sbpro_2,"ADPCM Sound Blaster Pro 2-bit")
 ADPCM_DECODER (CODEC_ID_ADPCM_SBPRO_3, adpcm_sbpro_3,"ADPCM Sound Blaster Pro 2.6-bit")
 ADPCM_DECODER (CODEC_ID_ADPCM_SBPRO_4, adpcm_sbpro_4,"ADPCM Sound Blaster Pro 4-bit")
 ADPCM_DECODER (CODEC_ID_ADPCM_SWF, adpcm_swf,"ADPCM Shockwave Flash")
 ADPCM_DECODER (CODEC_ID_ADPCM_THP, adpcm_thp,"ADPCM Nintendo Gamecube THP")
 ADPCM_DECODER (CODEC_ID_ADPCM_XA, adpcm_xa,"ADPCM CDROM XA")
 ADPCM_DECODER (CODEC_ID_ADPCM_YAMAHA, adpcm_yamaha,"ADPCM Yamaha")

Variables

static const int xa_adpcm_table [5][2]
static const int ea_adpcm_table []
static const int swf_index_tables [4][16]


Detailed Description

ADPCM decoders First version by Francois Revol (revol@free.fr) Fringe ADPCM codecs (e.g., DK3, DK4, Westwood) by Mike Melanson (melanson@pcisys.net) CD-ROM XA ADPCM codec by BERO EA ADPCM decoder by Robin Kay (komadori@myrealbox.com) EA ADPCM R1/R2/R3 decoder by Peter Ross (pross@xvid.org) EA IMA EACS decoder by Peter Ross (pross@xvid.org) EA IMA SEAD decoder by Peter Ross (pross@xvid.org) EA ADPCM XAS decoder by Peter Ross (pross@xvid.org) MAXIS EA ADPCM decoder by Robert Marston (rmarston@gmail.com) THP ADPCM decoder by Marco Gerards (mgerards@xs4all.nl).

Features and limitations:

Reference documents: http://wiki.multimedia.cx/index.php?title=Category:ADPCM_Audio_Codecs http://www.pcisys.net/~melanson/codecs/simpleaudio.html [dead] http://www.geocities.com/SiliconValley/8682/aud3.txt [dead] http://openquicktime.sourceforge.net/ XAnim sources (xa_codec.c) http://xanim.polter.net/ http://www.cs.ucla.edu/~leec/mediabench/applications.html [dead] SoX source code http://sox.sourceforge.net/

CD-ROM XA: http://ku-www.ss.titech.ac.jp/~yatsushi/xaadpcm.html [dead] vagpack & depack http://homepages.compuserve.de/bITmASTER32/psx-index.html [dead] readstr http://www.geocities.co.jp/Playtown/2004/

Definition in file adpcm.c.


Define Documentation

#define ADPCM_DECODER ( id_,
name_,
long_name_   ) 

Value:

AVCodec ff_ ## name_ ## _decoder = {                        \
    .name           = #name_,                               \
    .type           = AVMEDIA_TYPE_AUDIO,                   \
    .id             = id_,                                  \
    .priv_data_size = sizeof(ADPCMDecodeContext),           \
    .init           = adpcm_decode_init,                    \
    .decode         = adpcm_decode_frame,                   \
    .capabilities   = CODEC_CAP_DR1,                        \
    .long_name      = NULL_IF_CONFIG_SMALL(long_name_),     \
}

Definition at line 1203 of file adpcm.c.

 
#define DK3_GET_NEXT_NIBBLE (  ) 

Value:

if (decode_top_nibble_next) \
    { \
        nibble = last_byte >> 4; \
        decode_top_nibble_next = 0; \
    } \
    else \
    { \
        if (end_of_packet) \
            break; \
        last_byte = *src++; \
        if (src >= buf + buf_size) \
            end_of_packet = 1; \
        nibble = last_byte & 0x0F; \
        decode_top_nibble_next = 1; \
    }

Definition at line 496 of file adpcm.c.

Referenced by adpcm_decode_frame().


Function Documentation

static short adpcm_ct_expand_nibble ( ADPCMChannelStatus c,
char  nibble 
) [inline, static]

Definition at line 204 of file adpcm.c.

Referenced by adpcm_decode_frame().

static int adpcm_decode_frame ( AVCodecContext avctx,
void *  data,
int *  got_frame_ptr,
AVPacket avpkt 
) [static]

Definition at line 513 of file adpcm.c.

static av_cold int adpcm_decode_init ( AVCodecContext avctx  )  [static]

Definition at line 91 of file adpcm.c.

ADPCM_DECODER ( CODEC_ID_ADPCM_YAMAHA  ,
adpcm_yamaha  ,
"ADPCM Yamaha"   
)

ADPCM_DECODER ( CODEC_ID_ADPCM_XA  ,
adpcm_xa  ,
"ADPCM CDROM XA"   
)

ADPCM_DECODER ( CODEC_ID_ADPCM_THP  ,
adpcm_thp  ,
"ADPCM Nintendo Gamecube THP"   
)

ADPCM_DECODER ( CODEC_ID_ADPCM_SWF  ,
adpcm_swf  ,
"ADPCM Shockwave Flash"   
)

ADPCM_DECODER ( CODEC_ID_ADPCM_SBPRO_4  ,
adpcm_sbpro_4  ,
"ADPCM Sound Blaster Pro 4-bit"   
)

ADPCM_DECODER ( CODEC_ID_ADPCM_SBPRO_3  ,
adpcm_sbpro_3  ,
"ADPCM Sound Blaster Pro 2.6-bit"   
)

ADPCM_DECODER ( CODEC_ID_ADPCM_SBPRO_2  ,
adpcm_sbpro_2  ,
"ADPCM Sound Blaster Pro 2-bit"   
)

ADPCM_DECODER ( CODEC_ID_ADPCM_MS  ,
adpcm_ms  ,
"ADPCM Microsoft"   
)

ADPCM_DECODER ( CODEC_ID_ADPCM_IMA_WS  ,
adpcm_ima_ws  ,
"ADPCM IMA Westwood"   
)

ADPCM_DECODER ( CODEC_ID_ADPCM_IMA_WAV  ,
adpcm_ima_wav  ,
"ADPCM IMA WAV"   
)

ADPCM_DECODER ( CODEC_ID_ADPCM_IMA_SMJPEG  ,
adpcm_ima_smjpeg  ,
"ADPCM IMA Loki SDL MJPEG"   
)

ADPCM_DECODER ( CODEC_ID_ADPCM_IMA_QT  ,
adpcm_ima_qt  ,
"ADPCM IMA QuickTime"   
)

ADPCM_DECODER ( CODEC_ID_ADPCM_IMA_ISS  ,
adpcm_ima_iss  ,
"ADPCM IMA Funcom ISS"   
)

ADPCM_DECODER ( CODEC_ID_ADPCM_IMA_EA_SEAD  ,
adpcm_ima_ea_sead  ,
"ADPCM IMA Electronic Arts SEAD"   
)

ADPCM_DECODER ( CODEC_ID_ADPCM_IMA_EA_EACS  ,
adpcm_ima_ea_eacs  ,
"ADPCM IMA Electronic Arts EACS"   
)

ADPCM_DECODER ( CODEC_ID_ADPCM_IMA_DK4  ,
adpcm_ima_dk4  ,
"ADPCM IMA Duck DK4"   
)

ADPCM_DECODER ( CODEC_ID_ADPCM_IMA_DK3  ,
adpcm_ima_dk3  ,
"ADPCM IMA Duck DK3"   
)

ADPCM_DECODER ( CODEC_ID_ADPCM_IMA_AMV  ,
adpcm_ima_amv  ,
"ADPCM IMA AMV"   
)

ADPCM_DECODER ( CODEC_ID_ADPCM_EA_XAS  ,
adpcm_ea_xas  ,
"ADPCM Electronic Arts XAS"   
)

ADPCM_DECODER ( CODEC_ID_ADPCM_EA_R3  ,
adpcm_ea_r3  ,
"ADPCM Electronic Arts R3"   
)

ADPCM_DECODER ( CODEC_ID_ADPCM_EA_R2  ,
adpcm_ea_r2  ,
"ADPCM Electronic Arts R2"   
)

ADPCM_DECODER ( CODEC_ID_ADPCM_EA_R1  ,
adpcm_ea_r1  ,
"ADPCM Electronic Arts R1"   
)

ADPCM_DECODER ( CODEC_ID_ADPCM_EA_MAXIS_XA  ,
adpcm_ea_maxis_xa  ,
"ADPCM Electronic Arts Maxis CDROM XA"   
)

ADPCM_DECODER ( CODEC_ID_ADPCM_EA  ,
adpcm_ea  ,
"ADPCM Electronic Arts"   
)

ADPCM_DECODER ( CODEC_ID_ADPCM_CT  ,
adpcm_ct  ,
"ADPCM Creative Technology"   
)

ADPCM_DECODER ( CODEC_ID_ADPCM_4XM  ,
adpcm_4xm  ,
"ADPCM 4X Movie"   
)

static short adpcm_ima_expand_nibble ( ADPCMChannelStatus c,
char  nibble,
int  shift 
) [inline, static]

Definition at line 136 of file adpcm.c.

Referenced by adpcm_decode_frame().

static int adpcm_ima_qt_expand_nibble ( ADPCMChannelStatus c,
int  nibble,
int  shift 
) [inline, static]

Definition at line 163 of file adpcm.c.

Referenced by adpcm_decode_frame().

static short adpcm_ms_expand_nibble ( ADPCMChannelStatus c,
char  nibble 
) [inline, static]

Definition at line 189 of file adpcm.c.

Referenced by adpcm_decode_frame().

static short adpcm_sbpro_expand_nibble ( ADPCMChannelStatus c,
char  nibble,
int  size,
int  shift 
) [inline, static]

Definition at line 225 of file adpcm.c.

Referenced by adpcm_decode_frame().

static short adpcm_yamaha_expand_nibble ( ADPCMChannelStatus c,
unsigned char  nibble 
) [inline, static]

Definition at line 245 of file adpcm.c.

Referenced by adpcm_decode_frame().

static int get_nb_samples ( AVCodecContext avctx,
const uint8_t *  buf,
int  buf_size,
int *  coded_samples 
) [static]

Get the number of samples that will be decoded from the packet.

In one case, this is actually the maximum number of samples possible to decode with the given buf_size.

Parameters:
[out] coded_samples set to the number of samples as coded in the packet, or 0 if the codec does not encode the number of samples in each frame.

Definition at line 333 of file adpcm.c.

Referenced by adpcm_decode_frame().

static void xa_decode ( short *  out,
const unsigned char *  in,
ADPCMChannelStatus left,
ADPCMChannelStatus right,
int  inc 
) [static]

Definition at line 259 of file adpcm.c.

Referenced by adpcm_decode_frame().


Variable Documentation

const int ea_adpcm_table[] [static]

Initial value:

 {
    0,  240,  460,  392,
    0,    0, -208, -220,
    0,    1,    3,    4,
    7,    8,   10,   11,
    0,   -1,   -3,   -4
}

Definition at line 68 of file adpcm.c.

Referenced by adpcm_decode_frame().

const int swf_index_tables[4][16] [static]

Initial value:

 {
     { -1, 2 },
     { -1, -1, 2, 4 },
     { -1, -1, -1, -1, 2, 4, 6, 8 },
     { -1, -1, -1, -1, -1, -1, -1, -1, 1, 2, 4, 6, 8, 10, 13, 16 }
}

Definition at line 77 of file adpcm.c.

Referenced by adpcm_decode_frame().

const int xa_adpcm_table[5][2] [static]

Initial value:

 {
    {   0,   0 },
    {  60,   0 },
    { 115, -52 },
    {  98, -55 },
    { 122, -60 }
}

Definition at line 60 of file adpcm.c.

Referenced by xa_decode().


Generated on Fri Oct 26 02:43:46 2012 for FFmpeg by  doxygen 1.5.8