FFmpeg
Data Structures | Macros | Functions | Variables
wavpack.c File Reference
#include "libavutil/channel_layout.h"
#include "avcodec.h"
#include "bytestream.h"
#include "get_bits.h"
#include "internal.h"
#include "thread.h"
#include "unary.h"
#include "wavpack.h"

Go to the source code of this file.

Data Structures

struct  SavedContext
 
struct  WavpackFrameContext
 
struct  WavpackContext
 

Macros

#define BITSTREAM_READER_LE
 
#define WV_MAX_FRAME_DECODERS   14
 
#define LEVEL_DECAY(a)   (((a) + 0x80) >> 8)
 

Functions

static av_always_inline unsigned get_tail (GetBitContext *gb, int k)
 
static int 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, unsigned 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_l, void *dst_r, 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, AVFrame *frame, 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

AVCodec ff_wavpack_decoder
 

Detailed Description

WavPack lossless audio decoder

Definition in file wavpack.c.

Macro Definition Documentation

◆ BITSTREAM_READER_LE

#define BITSTREAM_READER_LE

Definition at line 24 of file wavpack.c.

◆ WV_MAX_FRAME_DECODERS

#define WV_MAX_FRAME_DECODERS   14

Definition at line 73 of file wavpack.c.

◆ LEVEL_DECAY

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

Definition at line 86 of file wavpack.c.

Function Documentation

◆ get_tail()

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

Definition at line 88 of file wavpack.c.

Referenced by wv_get_value().

◆ update_error_limit()

static int update_error_limit ( WavpackFrameContext ctx)
static

Definition at line 102 of file wavpack.c.

Referenced by wv_get_value().

◆ wv_get_value()

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

Definition at line 140 of file wavpack.c.

Referenced by wv_unpack_mono(), and wv_unpack_stereo().

◆ wv_get_value_integer()

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

Definition at line 270 of file wavpack.c.

Referenced by wv_unpack_mono(), and wv_unpack_stereo().

◆ wv_get_value_float()

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

Definition at line 294 of file wavpack.c.

Referenced by wv_unpack_mono(), and wv_unpack_stereo().

◆ wv_reset_saved_context()

static void wv_reset_saved_context ( WavpackFrameContext s)
static

◆ wv_check_crc()

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

Definition at line 374 of file wavpack.c.

Referenced by wv_unpack_mono(), and wv_unpack_stereo().

◆ wv_unpack_stereo()

static int wv_unpack_stereo ( WavpackFrameContext s,
GetBitContext gb,
void *  dst_l,
void *  dst_r,
const int  type 
)
inlinestatic

Definition at line 389 of file wavpack.c.

Referenced by wavpack_decode_block().

◆ wv_unpack_mono()

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

Definition at line 522 of file wavpack.c.

Referenced by wavpack_decode_block().

◆ wv_alloc_frame_context()

static av_cold int wv_alloc_frame_context ( WavpackContext c)
static

Definition at line 591 of file wavpack.c.

Referenced by wavpack_decode_block().

◆ wavpack_decode_init()

static av_cold int wavpack_decode_init ( AVCodecContext avctx)
static

Definition at line 615 of file wavpack.c.

◆ wavpack_decode_end()

static av_cold int wavpack_decode_end ( AVCodecContext avctx)
static

Definition at line 626 of file wavpack.c.

◆ wavpack_decode_block()

static int wavpack_decode_block ( AVCodecContext avctx,
int  block_no,
AVFrame frame,
const uint8_t buf,
int  buf_size 
)
static

Definition at line 638 of file wavpack.c.

Referenced by wavpack_decode_frame().

◆ wavpack_decode_flush()

static void wavpack_decode_flush ( AVCodecContext avctx)
static

Definition at line 1075 of file wavpack.c.

Referenced by wavpack_decode_frame().

◆ wavpack_decode_frame()

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

Definition at line 1084 of file wavpack.c.

Variable Documentation

◆ ff_wavpack_decoder

AVCodec ff_wavpack_decoder
Initial value:

Definition at line 1150 of file wavpack.c.

init
static av_cold int init(AVCodecContext *avctx)
Definition: avrndec.c:35
wavpack_decode_flush
static void wavpack_decode_flush(AVCodecContext *avctx)
Definition: wavpack.c:1075
WavpackContext
Definition: wavpack.c:75
decode
static void decode(AVCodecContext *dec_ctx, AVPacket *pkt, AVFrame *frame, FILE *outfile)
Definition: decode_audio.c:42
AVMEDIA_TYPE_AUDIO
@ AVMEDIA_TYPE_AUDIO
Definition: avutil.h:202
AV_CODEC_CAP_FRAME_THREADS
#define AV_CODEC_CAP_FRAME_THREADS
Codec supports frame-level multithreading.
Definition: avcodec.h:1037
flush
static void flush(AVCodecContext *avctx)
Definition: aacdec_template.c:500
ONLY_IF_THREADS_ENABLED
#define ONLY_IF_THREADS_ENABLED(x)
Define a function with only the non-default version specified.
Definition: internal.h:227
AV_CODEC_CAP_DR1
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators.
Definition: avcodec.h:981
NULL_IF_CONFIG_SMALL
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
Definition: internal.h:188
wavpack_decode_frame
static int wavpack_decode_frame(AVCodecContext *avctx, void *data, int *got_frame_ptr, AVPacket *avpkt)
Definition: wavpack.c:1084
init_thread_copy
the pkt_dts and pkt_pts fields in AVFrame will work as usual Restrictions on codec whose streams don t reset across will not work because their bitstreams cannot be decoded in parallel *The contents of buffers must not be read before as well as code calling up to before the decode process starts Call have add an init_thread_copy() which re-allocates them for other threads. Add AV_CODEC_CAP_FRAME_THREADS to the codec capabilities. There will be very little speed gain at this point but it should work. If there are inter-frame dependencies
wavpack_decode_end
static av_cold int wavpack_decode_end(AVCodecContext *avctx)
Definition: wavpack.c:626
wavpack_decode_init
static av_cold int wavpack_decode_init(AVCodecContext *avctx)
Definition: wavpack.c:615
AV_CODEC_ID_WAVPACK
@ AV_CODEC_ID_WAVPACK
Definition: avcodec.h:589