libavcodec/pcm.c File Reference

PCM codecs. More...

#include "avcodec.h"
#include "libavutil/common.h"
#include "bytestream.h"
#include "internal.h"
#include "pcm_tablegen.h"

Go to the source code of this file.

Data Structures

struct  PCMDecode

Defines

#define MAX_CHANNELS   64
#define ENCODE(type, endian, src, dst, n, shift, offset)
 Write PCM samples macro.
#define DECODE(size, endian, src, dst, n, shift, offset)
 Read PCM samples macro.
#define PCM_ENCODER(id_, sample_fmt_, name_, long_name_)
#define PCM_DECODER(id_, sample_fmt_, name_, long_name_)
#define PCM_CODEC(id, sample_fmt_, name, long_name_)   PCM_ENCODER(id,sample_fmt_,name,long_name_); PCM_DECODER(id,sample_fmt_,name,long_name_)

Typedefs

typedef struct PCMDecode PCMDecode

Functions

static av_cold int pcm_encode_init (AVCodecContext *avctx)
static av_cold int pcm_encode_close (AVCodecContext *avctx)
static int pcm_encode_frame (AVCodecContext *avctx, AVPacket *avpkt, const AVFrame *frame, int *got_packet_ptr)
static av_cold int pcm_decode_init (AVCodecContext *avctx)
static int pcm_decode_frame (AVCodecContext *avctx, void *data, int *got_frame_ptr, AVPacket *avpkt)
 PCM_CODEC (CODEC_ID_PCM_ALAW, AV_SAMPLE_FMT_S16, pcm_alaw,"PCM A-law")
 PCM_DECODER (CODEC_ID_PCM_DVD, AV_SAMPLE_FMT_S32, pcm_dvd,"PCM signed 20|24-bit big-endian")
 PCM_CODEC (CODEC_ID_PCM_F32BE, AV_SAMPLE_FMT_FLT, pcm_f32be,"PCM 32-bit floating point big-endian")
 PCM_CODEC (CODEC_ID_PCM_F32LE, AV_SAMPLE_FMT_FLT, pcm_f32le,"PCM 32-bit floating point little-endian")
 PCM_CODEC (CODEC_ID_PCM_F64BE, AV_SAMPLE_FMT_DBL, pcm_f64be,"PCM 64-bit floating point big-endian")
 PCM_CODEC (CODEC_ID_PCM_F64LE, AV_SAMPLE_FMT_DBL, pcm_f64le,"PCM 64-bit floating point little-endian")
 PCM_DECODER (CODEC_ID_PCM_LXF, AV_SAMPLE_FMT_S32, pcm_lxf,"PCM signed 20-bit little-endian planar")
 PCM_CODEC (CODEC_ID_PCM_MULAW, AV_SAMPLE_FMT_S16, pcm_mulaw,"PCM mu-law")
 PCM_CODEC (CODEC_ID_PCM_S8, AV_SAMPLE_FMT_U8, pcm_s8,"PCM signed 8-bit")
 PCM_CODEC (CODEC_ID_PCM_S16BE, AV_SAMPLE_FMT_S16, pcm_s16be,"PCM signed 16-bit big-endian")
 PCM_CODEC (CODEC_ID_PCM_S16LE, AV_SAMPLE_FMT_S16, pcm_s16le,"PCM signed 16-bit little-endian")
 PCM_DECODER (CODEC_ID_PCM_S16LE_PLANAR, AV_SAMPLE_FMT_S16, pcm_s16le_planar,"PCM 16-bit little-endian planar")
 PCM_CODEC (CODEC_ID_PCM_S24BE, AV_SAMPLE_FMT_S32, pcm_s24be,"PCM signed 24-bit big-endian")
 PCM_CODEC (CODEC_ID_PCM_S24DAUD, AV_SAMPLE_FMT_S16, pcm_s24daud,"PCM D-Cinema audio signed 24-bit")
 PCM_CODEC (CODEC_ID_PCM_S24LE, AV_SAMPLE_FMT_S32, pcm_s24le,"PCM signed 24-bit little-endian")
 PCM_CODEC (CODEC_ID_PCM_S32BE, AV_SAMPLE_FMT_S32, pcm_s32be,"PCM signed 32-bit big-endian")
 PCM_CODEC (CODEC_ID_PCM_S32LE, AV_SAMPLE_FMT_S32, pcm_s32le,"PCM signed 32-bit little-endian")
 PCM_CODEC (CODEC_ID_PCM_U8, AV_SAMPLE_FMT_U8, pcm_u8,"PCM unsigned 8-bit")
 PCM_CODEC (CODEC_ID_PCM_U16BE, AV_SAMPLE_FMT_S16, pcm_u16be,"PCM unsigned 16-bit big-endian")
 PCM_CODEC (CODEC_ID_PCM_U16LE, AV_SAMPLE_FMT_S16, pcm_u16le,"PCM unsigned 16-bit little-endian")
 PCM_CODEC (CODEC_ID_PCM_U24BE, AV_SAMPLE_FMT_S32, pcm_u24be,"PCM unsigned 24-bit big-endian")
 PCM_CODEC (CODEC_ID_PCM_U24LE, AV_SAMPLE_FMT_S32, pcm_u24le,"PCM unsigned 24-bit little-endian")
 PCM_CODEC (CODEC_ID_PCM_U32BE, AV_SAMPLE_FMT_S32, pcm_u32be,"PCM unsigned 32-bit big-endian")
 PCM_CODEC (CODEC_ID_PCM_U32LE, AV_SAMPLE_FMT_S32, pcm_u32le,"PCM unsigned 32-bit little-endian")
 PCM_DECODER (CODEC_ID_PCM_ZORK, AV_SAMPLE_FMT_U8, pcm_zork,"PCM Zork")

Detailed Description

PCM codecs.

Definition in file pcm.c.


Define Documentation

#define DECODE (   size,
  endian,
  src,
  dst,
  n,
  shift,
  offset 
)
Value:
for(;n>0;n--) { \
        uint##size##_t v = bytestream_get_##endian(&src); \
        AV_WN##size##A(dst, (v - offset) << shift); \
        dst += size / 8; \
    }

Read PCM samples macro.

Parameters:
size Data size of native machine format
endian bytestream_get_xxx() endian suffix
src Source pointer (variable name)
dst Destination pointer (variable name)
n Total number of samples (variable name)
shift Bitshift (bits)
offset Sample value offset

Definition at line 250 of file pcm.c.

Referenced by pcm_decode_frame().

#define ENCODE (   type,
  endian,
  src,
  dst,
  n,
  shift,
  offset 
)
Value:
samples_##type = (const type*) src; \
    for(;n>0;n--) { \
        register type v = (*samples_##type++ >> shift) + offset; \
        bytestream_put_##endian(&dst, v); \
    }

Write PCM samples macro.

Parameters:
type Datatype of native machine format
endian bytestream_put_xxx() suffix
src Source pointer (variable name)
dst Destination pointer (variable name)
n Total number of samples (variable name)
shift Bitshift (bits)
offset Sample value offset

Definition at line 74 of file pcm.c.

Referenced by pcm_encode_frame().

#define MAX_CHANNELS   64

Definition at line 33 of file pcm.c.

Referenced by pcm_decode_init().

#define PCM_CODEC (   id,
  sample_fmt_,
  name,
  long_name_ 
)    PCM_ENCODER(id,sample_fmt_,name,long_name_); PCM_DECODER(id,sample_fmt_,name,long_name_)

Definition at line 509 of file pcm.c.

#define PCM_DECODER (   id_,
  sample_fmt_,
  name_,
  long_name_ 
)
Value:
AVCodec ff_ ## name_ ## _decoder = {            \
    .name           = #name_,                   \
    .type           = AVMEDIA_TYPE_AUDIO,       \
    .id             = id_,                      \
    .priv_data_size = sizeof(PCMDecode),        \
    .init           = pcm_decode_init,          \
    .decode         = pcm_decode_frame,         \
    .capabilities   = CODEC_CAP_DR1,            \
    .sample_fmts = (const enum AVSampleFormat[]){sample_fmt_,AV_SAMPLE_FMT_NONE}, \
    .long_name = NULL_IF_CONFIG_SMALL(long_name_), \
}

Definition at line 493 of file pcm.c.

#define PCM_ENCODER (   id_,
  sample_fmt_,
  name_,
  long_name_ 
)
Value:
AVCodec ff_ ## name_ ## _encoder = {            \
    .name        = #name_,                      \
    .type        = AVMEDIA_TYPE_AUDIO,          \
    .id          = id_,                         \
    .init        = pcm_encode_init,             \
    .encode2     = pcm_encode_frame,            \
    .close       = pcm_encode_close,            \
    .capabilities = CODEC_CAP_VARIABLE_FRAME_SIZE, \
    .sample_fmts = (const enum AVSampleFormat[]){sample_fmt_,AV_SAMPLE_FMT_NONE}, \
    .long_name = NULL_IF_CONFIG_SMALL(long_name_), \
}

Definition at line 476 of file pcm.c.


Typedef Documentation

typedef struct PCMDecode PCMDecode

Function Documentation

PCM_CODEC ( CODEC_ID_PCM_ALAW  ,
AV_SAMPLE_FMT_S16  ,
pcm_alaw  ,
"PCM A-law"   
)
PCM_CODEC ( CODEC_ID_PCM_F32BE  ,
AV_SAMPLE_FMT_FLT  ,
pcm_f32be  ,
"PCM 32-bit floating point big-endian"   
)
PCM_CODEC ( CODEC_ID_PCM_U32LE  ,
AV_SAMPLE_FMT_S32  ,
pcm_u32le  ,
"PCM unsigned 32-bit little-endian"   
)
PCM_CODEC ( CODEC_ID_PCM_F32LE  ,
AV_SAMPLE_FMT_FLT  ,
pcm_f32le  ,
"PCM 32-bit floating point little-endian"   
)
PCM_CODEC ( CODEC_ID_PCM_U24LE  ,
AV_SAMPLE_FMT_S32  ,
pcm_u24le  ,
"PCM unsigned 24-bit little-endian"   
)
PCM_CODEC ( CODEC_ID_PCM_S16LE  ,
AV_SAMPLE_FMT_S16  ,
pcm_s16le  ,
"PCM signed 16-bit little-endian"   
)
PCM_CODEC ( CODEC_ID_PCM_S24BE  ,
AV_SAMPLE_FMT_S32  ,
pcm_s24be  ,
"PCM signed 24-bit big-endian"   
)
PCM_CODEC ( CODEC_ID_PCM_S24DAUD  ,
AV_SAMPLE_FMT_S16  ,
pcm_s24daud  ,
"PCM D-Cinema audio signed 24-bit"   
)
PCM_CODEC ( CODEC_ID_PCM_U8  ,
AV_SAMPLE_FMT_U8  ,
pcm_u8  ,
"PCM unsigned 8-bit"   
)
PCM_CODEC ( CODEC_ID_PCM_S32LE  ,
AV_SAMPLE_FMT_S32  ,
pcm_s32le  ,
"PCM signed 32-bit little-endian"   
)
PCM_CODEC ( CODEC_ID_PCM_F64BE  ,
AV_SAMPLE_FMT_DBL  ,
pcm_f64be  ,
"PCM 64-bit floating point big-endian"   
)
PCM_CODEC ( CODEC_ID_PCM_S24LE  ,
AV_SAMPLE_FMT_S32  ,
pcm_s24le  ,
"PCM signed 24-bit little-endian"   
)
PCM_CODEC ( CODEC_ID_PCM_S32BE  ,
AV_SAMPLE_FMT_S32  ,
pcm_s32be  ,
"PCM signed 32-bit big-endian"   
)
PCM_CODEC ( CODEC_ID_PCM_F64LE  ,
AV_SAMPLE_FMT_DBL  ,
pcm_f64le  ,
"PCM 64-bit floating point little-endian"   
)
PCM_CODEC ( CODEC_ID_PCM_MULAW  ,
AV_SAMPLE_FMT_S16  ,
pcm_mulaw  ,
"PCM mu-law"   
)
PCM_CODEC ( CODEC_ID_PCM_U16BE  ,
AV_SAMPLE_FMT_S16  ,
pcm_u16be  ,
"PCM unsigned 16-bit big-endian"   
)
PCM_CODEC ( CODEC_ID_PCM_S16BE  ,
AV_SAMPLE_FMT_S16  ,
pcm_s16be  ,
"PCM signed 16-bit big-endian"   
)
PCM_CODEC ( CODEC_ID_PCM_U32BE  ,
AV_SAMPLE_FMT_S32  ,
pcm_u32be  ,
"PCM unsigned 32-bit big-endian"   
)
PCM_CODEC ( CODEC_ID_PCM_U16LE  ,
AV_SAMPLE_FMT_S16  ,
pcm_u16le  ,
"PCM unsigned 16-bit little-endian"   
)
PCM_CODEC ( CODEC_ID_PCM_U24BE  ,
AV_SAMPLE_FMT_S32  ,
pcm_u24be  ,
"PCM unsigned 24-bit big-endian"   
)
PCM_CODEC ( CODEC_ID_PCM_S8  ,
AV_SAMPLE_FMT_U8  ,
pcm_s8  ,
"PCM signed 8-bit"   
)
static int pcm_decode_frame ( AVCodecContext avctx,
void *  data,
int *  got_frame_ptr,
AVPacket avpkt 
) [static]

Definition at line 257 of file pcm.c.

static av_cold int pcm_decode_init ( AVCodecContext avctx  )  [static]

Definition at line 206 of file pcm.c.

PCM_DECODER ( CODEC_ID_PCM_LXF  ,
AV_SAMPLE_FMT_S32  ,
pcm_lxf  ,
"PCM signed 20-bit little-endian planar"   
)
PCM_DECODER ( CODEC_ID_PCM_ZORK  ,
AV_SAMPLE_FMT_U8  ,
pcm_zork  ,
"PCM Zork"   
)
PCM_DECODER ( CODEC_ID_PCM_DVD  ,
AV_SAMPLE_FMT_S32  ,
pcm_dvd  ,
"PCM signed 20|24-bit big-endian"   
)
PCM_DECODER ( CODEC_ID_PCM_S16LE_PLANAR  ,
AV_SAMPLE_FMT_S16  ,
pcm_s16le_planar  ,
"PCM 16-bit little-endian planar"   
)
static av_cold int pcm_encode_close ( AVCodecContext avctx  )  [static]

Definition at line 57 of file pcm.c.

static int pcm_encode_frame ( AVCodecContext avctx,
AVPacket avpkt,
const AVFrame frame,
int *  got_packet_ptr 
) [static]

Definition at line 81 of file pcm.c.

static av_cold int pcm_encode_init ( AVCodecContext avctx  )  [static]

Definition at line 35 of file pcm.c.