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

Macros

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

Macro Definition 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
sizeData size of native machine format
endianbytestream_get_xxx() endian suffix
srcSource pointer (variable name)
dstDestination pointer (variable name)
nTotal number of samples (variable name)
shiftBitshift (bits)
offsetSample 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
typeDatatype of native machine format
endianbytestream_put_xxx() suffix
srcSource pointer (variable name)
dstDestination pointer (variable name)
nTotal number of samples (variable name)
shiftBitshift (bits)
offsetSample 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_frame(), and 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_ 
)

Definition at line 506 of file pcm.c.

#define PCM_ENCODER (   id,
  sample_fmt_,
  name,
  long_name_ 
)

Definition at line 489 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_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_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_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"   
)
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_DVD  ,
AV_SAMPLE_FMT_S32  ,
pcm_dvd  ,
"PCM signed 20|24-bit big-endian"   
)
PCM_DECODER ( CODEC_ID_PCM_LXF  ,
AV_SAMPLE_FMT_S32  ,
pcm_lxf  ,
"PCM signed 20-bit little-endian planar"   
)
PCM_DECODER ( CODEC_ID_PCM_S16LE_PLANAR  ,
AV_SAMPLE_FMT_S16  ,
pcm_s16le_planar  ,
"PCM 16-bit little-endian planar"   
)
PCM_DECODER ( CODEC_ID_PCM_ZORK  ,
AV_SAMPLE_FMT_U8  ,
pcm_zork  ,
"PCM Zork"   
)
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.