Go to the documentation of this file.
38 #define DST_MAX_CHANNELS 6
39 #define DST_MAX_ELEMENTS (2 * DST_MAX_CHANNELS)
41 #define DSD_FS44(sample_rate) (sample_rate * 8LL / 44100)
43 #define DST_SAMPLES_PER_FRAME(sample_rate) (588 * DSD_FS44(sample_rate))
102 memset(
s->dsdctx[
i].buf, 0x69,
sizeof(
s->dsdctx[
i].buf));
141 int coeff_bits,
int is_signed,
int offset)
151 int length_bits,
int coeff_bits,
int is_signed,
int offset)
153 unsigned int i, j, k;
159 int method =
get_bits(gb, 2), lsb_size;
166 for (j = method + 1; j < t->
length[
i]; j++) {
168 for (k = 0; k < method + 1; k++)
169 x += code_pred_coeff[method][k] * (
unsigned)t->
coeff[
i][j - k - 1];
176 if (c < offset || c >=
offset + (1<<coeff_bits))
194 unsigned int k = (ac->
a >> 8) | ((ac->
a >> 7) & 1);
195 unsigned int q = k * p;
196 unsigned int a_q = ac->
a - q;
225 for (j = 0; j < 16; j++) {
226 int total =
av_clip(length - j * 8, 0, 8);
228 for (k = 0; k < 256; k++) {
231 for (l = 0; l < total; l++)
232 v += (((k >> l) & 1) * 2 - 1) * fsets->
coeff[
i][j * 8 + l];
243 int *got_frame_ptr,
AVPacket *avpkt)
248 unsigned i, ch, same_map, dst_x_bit;
258 if (avpkt->
size <= 1)
303 s->probs.elements =
s->fsets.elements;
304 memcpy(map_ch_to_pelem, map_ch_to_felem,
sizeof(map_ch_to_felem));
338 memset(
s->status, 0xAA,
sizeof(
s->status));
343 for (
i = 0;
i < samples_per_frame;
i++) {
345 const unsigned felem = map_ch_to_felem[ch];
346 int16_t (*
filter)[256] =
s->filter[felem];
347 uint8_t *
status =
s->status[ch];
348 int prob, residual, v;
350 #define F(x) filter[(x)][status[(x)]]
351 const int16_t
predict =
F( 0) +
F( 1) +
F( 2) +
F( 3) +
352 F( 4) +
F( 5) +
F( 6) +
F( 7) +
353 F( 8) +
F( 9) +
F(10) +
F(11) +
354 F(12) +
F(13) +
F(14) +
F(15);
357 if (!half_prob[ch] ||
i >=
s->fsets.length[felem]) {
358 unsigned pelem = map_ch_to_pelem[ch];
366 v = ((
predict >> 15) ^ residual) & 1;
367 dsd[((
i >> 3) *
channels + ch) << 2] |= v << (7 - (
i & 0x7 ));
static av_always_inline void ac_get(ArithCoder *ac, GetBitContext *gb, int p, int *e)
static int get_bits_left(GetBitContext *gb)
uint8_t status[DST_MAX_CHANNELS][16]
static const ElemCat * elements[ELEMENT_COUNT]
int sample_rate
samples per second
This structure describes decoded (raw) audio or video data.
const uint8_t ff_reverse[256]
static const uint16_t table[]
static int read_table(GetBitContext *gb, Table *t, const int8_t code_pred_coeff[3][3], int length_bits, int coeff_bits, int is_signed, int offset)
filter_frame For filters that do not use the this method is called when a frame is pushed to the filter s input It can be called at any time except in a reentrant way If the input frame is enough to produce then the filter should push the output frames on the output link immediately As an exception to the previous rule if the input frame is enough to produce several output frames then the filter needs output only at least one per link The additional frames can be left buffered in the filter
int nb_channels
Number of channels in this layout.
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
static int decode_frame(AVCodecContext *avctx, AVFrame *frame, int *got_frame_ptr, AVPacket *avpkt)
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
AVCodec p
The public AVCodec.
AVChannelLayout ch_layout
Audio channel layout.
static void ac_init(ArithCoder *ac, GetBitContext *gb)
static int read_map(GetBitContext *gb, Table *t, unsigned int map[DST_MAX_CHANNELS], int channels)
static int get_ur_golomb_jpegls(GetBitContext *gb, int k, int limit, int esc_len)
read unsigned golomb rice code (jpegls).
static int init_get_bits8(GetBitContext *s, const uint8_t *buffer, int byte_size)
Initialize GetBitContext.
#define FF_CODEC_DECODE_CB(func)
static av_cold int decode_init(AVCodecContext *avctx)
int(* init)(AVBSFContext *ctx)
static int get_sbits(GetBitContext *s, int n)
#define CODEC_LONG_NAME(str)
#define FFABS(a)
Absolute value, Note, INT_MIN / INT64_MIN result in undefined behavior as they are not representable ...
Describe the class of an AVClass context structure.
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome.
static unsigned int get_bits1(GetBitContext *s)
int16_t filter[DST_MAX_ELEMENTS][16][256]
static const int8_t fsets_code_pred_coeff[3][3]
Undefined Behavior In the C some operations are like signed integer dereferencing freed accessing outside allocated Undefined Behavior must not occur in a C it is not safe even if the output of undefined operations is unused The unsafety may seem nit picking but Optimizing compilers have in fact optimized code on the assumption that no undefined Behavior occurs Optimizing code based on wrong assumptions can and has in some cases lead to effects beyond the output of computations The signed integer overflow problem in speed critical code Code which is highly optimized and works with signed integers sometimes has the problem that often the output of the computation does not c
av_cold void ff_init_dsd_data(void)
int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
Get a buffer for a frame.
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() or get_encode_buffer() for allocating buffers and supports custom allocators.
#define DECLARE_ALIGNED(n, t, v)
enum AVSampleFormat sample_fmt
audio sample format
static const int8_t probs_code_pred_coeff[3][3]
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf offset
static void skip_bits1(GetBitContext *s)
DSDContext dsdctx[DST_MAX_CHANNELS]
static uint8_t prob_dst_x_bit(int c)
int nb_samples
number of audio samples (per channel) described by this frame
#define i(width, name, range_min, range_max)
static av_always_inline int get_sr_golomb_dst(GetBitContext *gb, unsigned int k)
static int build_filter(int16_t table[DST_MAX_ELEMENTS][16][256], const Table *fsets)
static av_always_inline void predict(PredictorState *ps, float *coef, int output_enable)
AVSampleFormat
Audio sample formats.
const char * name
Name of the codec implementation.
static void read_uncoded_coeff(GetBitContext *gb, int *dst, unsigned int elements, int coeff_bits, int is_signed, int offset)
void ff_dsd2pcm_translate(DSDContext *s, size_t samples, int lsbf, const uint8_t *src, ptrdiff_t src_stride, float *dst, ptrdiff_t dst_stride)
#define prob(name, subs,...)
unsigned int length[DST_MAX_ELEMENTS]
main external API structure.
#define avpriv_request_sample(...)
const VDPAUPixFmtMap * map
This structure stores compressed data.
const FFCodec ff_dst_decoder
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
int coeff[DST_MAX_ELEMENTS][128]
#define DST_SAMPLES_PER_FRAME(sample_rate)