36#define DSD_SILENCE 0x69
37#define DSD_SILENCE_REVERSED 0x96
63 memset(
s[
i].buf, silence,
sizeof(
s[
i].buf));
83 int src_next, src_stride;
84 float *
dst = ((
float **)
frame->extended_data)[j];
87 src_next =
frame->nb_samples;
95 avpkt->
data + j * src_next, src_stride,
102 int *got_frame_ptr,
AVPacket *avpkt)
120#define DSD_DECODER(id_, name_, long_name_) \
121const FFCodec ff_ ## name_ ## _decoder = { \
123 CODEC_LONG_NAME(long_name_), \
124 .p.type = AVMEDIA_TYPE_AUDIO, \
125 .p.id = AV_CODEC_ID_##id_, \
126 .init = decode_init, \
127 FF_CODEC_DECODE_CB(decode_frame), \
128 .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_SLICE_THREADS, \
131DSD_DECODER(DSD_LSBF, dsd_lsbf,
"DSD (Direct Stream Digital), least significant bit first")
132DSD_DECODER(DSD_MSBF, dsd_msbf,
"DSD (Direct Stream Digital), most significant bit first")
133DSD_DECODER(DSD_MSBF_PLANAR, dsd_msbf_planar,
"DSD (Direct Stream Digital), most significant bit first, planar")
134DSD_DECODER(DSD_LSBF_PLANAR, dsd_lsbf_planar,
"DSD (Direct Stream Digital), least significant bit first, planar")
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t intptr_t int int16_t * dst
Libavcodec external API header.
#define i(width, name, range_min, range_max)
int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
Get a buffer for a frame.
av_cold void ff_init_dsd_data(void)
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 DSD_SILENCE_REVERSED
static int decode_frame(AVCodecContext *avctx, AVFrame *frame, int *got_frame_ptr, AVPacket *avpkt)
static av_cold int decode_init(AVCodecContext *avctx)
#define DSD_DECODER(id_, name_, long_name_)
static int dsd_channel(AVCodecContext *avctx, void *tdata, int j, int threadnr)
@ AV_CODEC_ID_DSD_MSBF_PLANAR
@ AV_CODEC_ID_DSD_LSBF_PLANAR
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
@ AV_SAMPLE_FMT_FLTP
float, planar
Memory handling functions.
int nb_channels
Number of channels in this layout.
main external API structure.
AVChannelLayout ch_layout
Audio channel layout.
enum AVSampleFormat sample_fmt
audio sample format
int(* execute2)(struct AVCodecContext *c, int(*func)(struct AVCodecContext *c2, void *arg, int jobnr, int threadnr), void *arg2, int *ret, int count)
The codec may call this to execute several independent things.
This structure describes decoded (raw) audio or video data.
This structure stores compressed data.
Used for passing data between threads.
#define av_malloc_array(a, b)