wavpack.c File Reference

WavPack lossless audio decoder. More...

#include "libavutil/channel_layout.h"
#include "avcodec.h"
#include "get_bits.h"
#include "internal.h"
#include "unary.h"
Include dependency graph for wavpack.c:

Go to the source code of this file.

Data Structures

struct  SavedContext
 
struct  Decorr
 
struct  WvChannel
 
struct  WavpackFrameContext
 
struct  WavpackContext
 

Macros

#define BITSTREAM_READER_LE
 
#define WV_MONO   0x00000004
 
#define WV_JOINT_STEREO   0x00000010
 
#define WV_FALSE_STEREO   0x40000000
 
#define WV_HYBRID_MODE   0x00000008
 
#define WV_HYBRID_SHAPE   0x00000008
 
#define WV_HYBRID_BITRATE   0x00000200
 
#define WV_HYBRID_BALANCE   0x00000400
 
#define WV_FLT_SHIFT_ONES   0x01
 
#define WV_FLT_SHIFT_SAME   0x02
 
#define WV_FLT_SHIFT_SENT   0x04
 
#define WV_FLT_ZERO_SENT   0x08
 
#define WV_FLT_ZERO_SIGN   0x10
 
#define WV_MAX_SAMPLES   131072
 
#define MAX_TERMS   16
 
#define WV_MAX_FRAME_DECODERS   14
 
#define LEVEL_DECAY(a)   ((a + 0x80) >> 8)
 
#define GET_MED(n)   ((c->median[n] >> 4) + 1)
 
#define DEC_MED(n)   c->median[n] -= ((c->median[n] + (128 >> n) - 2) / (128 >> n)) * 2
 
#define INC_MED(n)   c->median[n] += ((c->median[n] + (128 >> n) ) / (128 >> n)) * 5
 
#define UPDATE_WEIGHT_CLIP(weight, delta, samples, in)
 

Typedefs

typedef struct SavedContext SavedContext
 
typedef struct Decorr Decorr
 
typedef struct WvChannel WvChannel
 
typedef struct WavpackFrameContext WavpackFrameContext
 
typedef struct WavpackContext WavpackContext
 

Enumerations

enum  WP_ID_Flags { WP_IDF_MASK = 0x1F, WP_IDF_IGNORE = 0x20, WP_IDF_ODD = 0x40, WP_IDF_LONG = 0x80 }
 
enum  WP_ID {
  WP_ID_DUMMY = 0, WP_ID_ENCINFO, WP_ID_DECTERMS, WP_ID_DECWEIGHTS,
  WP_ID_DECSAMPLES, WP_ID_ENTROPY, WP_ID_HYBRID, WP_ID_SHAPING,
  WP_ID_FLOATINFO, WP_ID_INT32INFO, WP_ID_DATA, WP_ID_CORR,
  WP_ID_EXTRABITS, WP_ID_CHANINFO
}
 

Functions

static av_always_inline int wp_exp2 (int16_t val)
 
static av_always_inline int wp_log2 (int32_t val)
 
static av_always_inline int get_tail (GetBitContext *gb, int k)
 
static void update_error_limit (WavpackFrameContext *ctx)
 
static int wv_get_value (WavpackFrameContext *ctx, GetBitContext *gb, int channel, int *last)
 
static int wv_get_value_integer (WavpackFrameContext *s, uint32_t *crc, int S)
 
static float wv_get_value_float (WavpackFrameContext *s, uint32_t *crc, int S)
 
static void wv_reset_saved_context (WavpackFrameContext *s)
 
static int wv_check_crc (WavpackFrameContext *s, uint32_t crc, uint32_t crc_extra_bits)
 
static int wv_unpack_stereo (WavpackFrameContext *s, GetBitContext *gb, void *dst, const int type)
 
static int wv_unpack_mono (WavpackFrameContext *s, GetBitContext *gb, void *dst, const int type)
 
static av_cold int wv_alloc_frame_context (WavpackContext *c)
 
static av_cold int wavpack_decode_init (AVCodecContext *avctx)
 
static av_cold int wavpack_decode_end (AVCodecContext *avctx)
 
static int wavpack_decode_block (AVCodecContext *avctx, int block_no, void *data, int *got_frame_ptr, const uint8_t *buf, int buf_size)
 
static void wavpack_decode_flush (AVCodecContext *avctx)
 
static int wavpack_decode_frame (AVCodecContext *avctx, void *data, int *got_frame_ptr, AVPacket *avpkt)
 

Variables

static const uint8_t wp_exp2_table [256]
 
static const uint8_t wp_log2_table []
 
AVCodec ff_wavpack_decoder
 

Detailed Description

WavPack lossless audio decoder.

Definition in file wavpack.c.

Macro Definition Documentation

#define BITSTREAM_READER_LE

Definition at line 22 of file wavpack.c.

#define DEC_MED (   n)    c->median[n] -= ((c->median[n] + (128 >> n) - 2) / (128 >> n)) * 2

Definition at line 217 of file wavpack.c.

Referenced by wv_get_value().

#define GET_MED (   n)    ((c->median[n] >> 4) + 1)

Definition at line 216 of file wavpack.c.

Referenced by wv_get_value().

#define INC_MED (   n)    c->median[n] += ((c->median[n] + (128 >> n) ) / (128 >> n)) * 5

Definition at line 218 of file wavpack.c.

Referenced by wv_get_value().

#define LEVEL_DECAY (   a)    ((a + 0x80) >> 8)

Definition at line 213 of file wavpack.c.

Referenced by update_error_limit(), and wv_get_value().

#define MAX_TERMS   16

Definition at line 83 of file wavpack.c.

Referenced by wavpack_decode_block().

#define UPDATE_WEIGHT_CLIP (   weight,
  delta,
  samples,
  in 
)
Value:
if (samples && in) { \
if ((samples ^ in) < 0) { \
if (weight < -1024) \
weight = -1024; \
} else { \
if (weight > 1024) \
weight = 1024; \
} \
}
About Git write you should know how to use GIT properly Luckily Git comes with excellent documentation git help man git shows you the available git< command > help man git< command > shows information about the subcommand< command > The most comprehensive manual is the website Git Reference visit they are quite exhaustive You do not need a special username or password All you need is to provide a ssh public key to the Git server admin What follows now is a basic introduction to Git and some FFmpeg specific guidelines Read it at least if you are granted commit privileges to the FFmpeg project you are expected to be familiar with these rules I if not You can get git from etc no matter how small Every one of them has been saved from looking like a fool by this many times It s very easy for stray debug output or cosmetic modifications to slip in
Definition: git-howto.txt:5
initialize output if(nPeaks >3)%at least 3 peaks in spectrum for trying to find f0 nf0peaks
float delta
static int weight(int i, int blen, int offset)
Filter the word “frame” indicates either a video frame or a group of audio samples

Definition at line 221 of file wavpack.c.

Referenced by wv_unpack_stereo().

#define WV_FALSE_STEREO   0x40000000

Definition at line 37 of file wavpack.c.

Referenced by wavpack_decode_block().

#define WV_FLT_SHIFT_ONES   0x01

Definition at line 44 of file wavpack.c.

Referenced by wv_get_value_float().

#define WV_FLT_SHIFT_SAME   0x02

Definition at line 45 of file wavpack.c.

Referenced by wv_get_value_float().

#define WV_FLT_SHIFT_SENT   0x04

Definition at line 46 of file wavpack.c.

Referenced by wv_get_value_float().

#define WV_FLT_ZERO_SENT   0x08

Definition at line 47 of file wavpack.c.

Referenced by wv_get_value_float().

#define WV_FLT_ZERO_SIGN   0x10

Definition at line 48 of file wavpack.c.

Referenced by wv_get_value_float().

#define WV_HYBRID_BALANCE   0x00000400

Definition at line 42 of file wavpack.c.

#define WV_HYBRID_BITRATE   0x00000200

Definition at line 41 of file wavpack.c.

Referenced by wavpack_decode_block().

#define WV_HYBRID_MODE   0x00000008

Definition at line 39 of file wavpack.c.

Referenced by wavpack_decode_block().

#define WV_HYBRID_SHAPE   0x00000008

Definition at line 40 of file wavpack.c.

#define WV_JOINT_STEREO   0x00000010

Definition at line 36 of file wavpack.c.

Referenced by wavpack_decode_block().

#define WV_MAX_FRAME_DECODERS   14

Definition at line 128 of file wavpack.c.

Referenced by wv_alloc_frame_context().

#define WV_MAX_SAMPLES   131072

Definition at line 50 of file wavpack.c.

Referenced by wavpack_decode_frame().

#define WV_MONO   0x00000004

Definition at line 35 of file wavpack.c.

Referenced by wavpack_decode_block().

Typedef Documentation

typedef struct Decorr Decorr
typedef struct SavedContext SavedContext
typedef struct WvChannel WvChannel

Enumeration Type Documentation

enum WP_ID
Enumerator
WP_ID_DUMMY 
WP_ID_ENCINFO 
WP_ID_DECTERMS 
WP_ID_DECWEIGHTS 
WP_ID_DECSAMPLES 
WP_ID_ENTROPY 
WP_ID_HYBRID 
WP_ID_SHAPING 
WP_ID_FLOATINFO 
WP_ID_INT32INFO 
WP_ID_DATA 
WP_ID_CORR 
WP_ID_EXTRABITS 
WP_ID_CHANINFO 

Definition at line 59 of file wavpack.c.

Enumerator
WP_IDF_MASK 
WP_IDF_IGNORE 
WP_IDF_ODD 
WP_IDF_LONG 

Definition at line 52 of file wavpack.c.

Function Documentation

static av_always_inline int get_tail ( GetBitContext gb,
int  k 
)
static

Definition at line 235 of file wavpack.c.

Referenced by wv_get_value().

static void update_error_limit ( WavpackFrameContext ctx)
static

Definition at line 249 of file wavpack.c.

Referenced by wv_get_value().

static int wavpack_decode_block ( AVCodecContext avctx,
int  block_no,
void data,
int *  got_frame_ptr,
const uint8_t buf,
int  buf_size 
)
static

Definition at line 762 of file wavpack.c.

Referenced by wavpack_decode_frame().

static av_cold int wavpack_decode_end ( AVCodecContext avctx)
static

Definition at line 750 of file wavpack.c.

static void wavpack_decode_flush ( AVCodecContext avctx)
static

Definition at line 1171 of file wavpack.c.

Referenced by wavpack_decode_frame().

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

Definition at line 1180 of file wavpack.c.

static av_cold int wavpack_decode_init ( AVCodecContext avctx)
static

Definition at line 722 of file wavpack.c.

static av_always_inline int wp_exp2 ( int16_t  val)
static

Definition at line 182 of file wavpack.c.

Referenced by update_error_limit(), and wavpack_decode_block().

static av_always_inline int wp_log2 ( int32_t  val)
static

Definition at line 197 of file wavpack.c.

Referenced by wv_get_value().

static av_cold int wv_alloc_frame_context ( WavpackContext c)
static

Definition at line 706 of file wavpack.c.

Referenced by wavpack_decode_block().

static int wv_check_crc ( WavpackFrameContext s,
uint32_t  crc,
uint32_t  crc_extra_bits 
)
inlinestatic

Definition at line 509 of file wavpack.c.

Referenced by wv_unpack_mono(), and wv_unpack_stereo().

static int wv_get_value ( WavpackFrameContext ctx,
GetBitContext gb,
int  channel,
int *  last 
)
static

Definition at line 283 of file wavpack.c.

Referenced by wv_unpack_mono(), and wv_unpack_stereo().

static float wv_get_value_float ( WavpackFrameContext s,
uint32_t *  crc,
int  S 
)
static

Definition at line 430 of file wavpack.c.

Referenced by wv_unpack_mono(), and wv_unpack_stereo().

static int wv_get_value_integer ( WavpackFrameContext s,
uint32_t *  crc,
int  S 
)
inlinestatic

Definition at line 407 of file wavpack.c.

Referenced by wv_unpack_mono(), and wv_unpack_stereo().

static void wv_reset_saved_context ( WavpackFrameContext s)
static
static int wv_unpack_mono ( WavpackFrameContext s,
GetBitContext gb,
void dst,
const int  type 
)
inlinestatic

Definition at line 641 of file wavpack.c.

Referenced by wavpack_decode_block().

static int wv_unpack_stereo ( WavpackFrameContext s,
GetBitContext gb,
void dst,
const int  type 
)
inlinestatic

Definition at line 524 of file wavpack.c.

Referenced by wavpack_decode_block().

Variable Documentation

AVCodec ff_wavpack_decoder
Initial value:
= {
.name = "wavpack",
.priv_data_size = sizeof(WavpackContext),
.long_name = NULL_IF_CONFIG_SMALL("WavPack"),
}
static void wavpack_decode_flush(AVCodecContext *avctx)
Definition: wavpack.c:1171
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.
struct WavpackContext WavpackContext
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
static void flush(AVCodecContext *avctx)
static av_cold int wavpack_decode_end(AVCodecContext *avctx)
Definition: wavpack.c:750
static void close(AVCodecParserContext *s)
Definition: h264_parser.c:375
static int wavpack_decode_frame(AVCodecContext *avctx, void *data, int *got_frame_ptr, AVPacket *avpkt)
Definition: wavpack.c:1180
#define CODEC_CAP_SUBFRAMES
Codec can output multiple frames per AVPacket Normally demuxers return one frame at a time...
static int decode(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
Definition: crystalhd.c:868
static av_cold int wavpack_decode_init(AVCodecContext *avctx)
Definition: wavpack.c:722

Definition at line 1258 of file wavpack.c.

const uint8_t wp_exp2_table[256]
static
Initial value:
= {
0x00, 0x01, 0x01, 0x02, 0x03, 0x03, 0x04, 0x05, 0x06, 0x06, 0x07, 0x08, 0x08, 0x09, 0x0a, 0x0b,
0x0b, 0x0c, 0x0d, 0x0e, 0x0e, 0x0f, 0x10, 0x10, 0x11, 0x12, 0x13, 0x13, 0x14, 0x15, 0x16, 0x16,
0x17, 0x18, 0x19, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1d, 0x1e, 0x1f, 0x20, 0x20, 0x21, 0x22, 0x23,
0x24, 0x24, 0x25, 0x26, 0x27, 0x28, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2c, 0x2d, 0x2e, 0x2f, 0x30,
0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3a, 0x3b, 0x3c, 0x3d,
0x3e, 0x3f, 0x40, 0x41, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x48, 0x49, 0x4a, 0x4b,
0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a,
0x5b, 0x5c, 0x5d, 0x5e, 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69,
0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79,
0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x87, 0x88, 0x89, 0x8a,
0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b,
0x9c, 0x9d, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad,
0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0,
0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc8, 0xc9, 0xca, 0xcb, 0xcd, 0xce, 0xcf, 0xd0, 0xd2, 0xd3, 0xd4,
0xd6, 0xd7, 0xd8, 0xd9, 0xdb, 0xdc, 0xdd, 0xde, 0xe0, 0xe1, 0xe2, 0xe4, 0xe5, 0xe6, 0xe8, 0xe9,
0xea, 0xec, 0xed, 0xee, 0xf0, 0xf1, 0xf2, 0xf4, 0xf5, 0xf6, 0xf8, 0xf9, 0xfa, 0xfc, 0xfd, 0xff
}

Definition at line 144 of file wavpack.c.

Referenced by wp_exp2().

const uint8_t wp_log2_table[]
static
Initial value:
= {
0x00, 0x01, 0x03, 0x04, 0x06, 0x07, 0x09, 0x0a, 0x0b, 0x0d, 0x0e, 0x10, 0x11, 0x12, 0x14, 0x15,
0x16, 0x18, 0x19, 0x1a, 0x1c, 0x1d, 0x1e, 0x20, 0x21, 0x22, 0x24, 0x25, 0x26, 0x28, 0x29, 0x2a,
0x2c, 0x2d, 0x2e, 0x2f, 0x31, 0x32, 0x33, 0x34, 0x36, 0x37, 0x38, 0x39, 0x3b, 0x3c, 0x3d, 0x3e,
0x3f, 0x41, 0x42, 0x43, 0x44, 0x45, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4d, 0x4e, 0x4f, 0x50, 0x51,
0x52, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5c, 0x5d, 0x5e, 0x5f, 0x60, 0x61, 0x62, 0x63,
0x64, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x74, 0x75,
0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85,
0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95,
0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4,
0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb2,
0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc0,
0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcb, 0xcc, 0xcd, 0xce,
0xcf, 0xd0, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd8, 0xd9, 0xda, 0xdb,
0xdc, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe4, 0xe5, 0xe6, 0xe7, 0xe7,
0xe8, 0xe9, 0xea, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xee, 0xef, 0xf0, 0xf1, 0xf1, 0xf2, 0xf3, 0xf4,
0xf4, 0xf5, 0xf6, 0xf7, 0xf7, 0xf8, 0xf9, 0xf9, 0xfa, 0xfb, 0xfc, 0xfc, 0xfd, 0xfe, 0xff, 0xff
}

Definition at line 163 of file wavpack.c.

Referenced by wp_log2().