65 #define ENCODE(type, endian, src, dst, n, shift, offset) \
66 samples_ ## type = (const type *) src; \
67 for (; n > 0; n--) { \
68 register type v = (*samples_ ## type++ >> shift) + offset; \
69 bytestream_put_ ## endian(&dst, v); \
72 #define ENCODE_PLANAR(type, endian, dst, n, shift, offset) \
73 n /= avctx->channels; \
74 for (c = 0; c < avctx->channels; c++) { \
76 samples_ ## type = (const type *) frame->extended_data[c]; \
77 for (i = n; i > 0; i--) { \
78 register type v = (*samples_ ## type++ >> shift) + offset; \
79 bytestream_put_ ## endian(&dst, v); \
86 int n,
c, sample_size,
v,
ret;
90 const int16_t *samples_int16_t;
92 const int64_t *samples_int64_t;
93 const uint16_t *samples_uint16_t;
94 const uint32_t *samples_uint32_t;
98 samples = (
const short *)frame->
data[0];
106 ENCODE(uint32_t,
le32, samples, dst, n, 0, 0x80000000)
109 ENCODE(uint32_t,
be32, samples, dst, n, 0, 0x80000000)
121 ENCODE(uint32_t,
le24, samples, dst, n, 8, 0x800000)
124 ENCODE(uint32_t,
be24, samples, dst, n, 8, 0x800000)
128 uint32_t tmp =
ff_reverse[(*samples >> 8) & 0xff] +
131 bytestream_put_be24(&dst, tmp);
136 ENCODE(uint16_t,
le16, samples, dst, n, 0, 0x8000)
139 ENCODE(uint16_t,
be16, samples, dst, n, 0, 0x8000)
188 memcpy(dst, samples, n * sample_size);
197 for (c = 0; c < avctx->
channels; c++) {
238 for (i = 0; i < 256; i++)
242 for (i = 0; i < 256; i++)
267 #define DECODE(size, endian, src, dst, n, shift, offset) \
268 for (; n > 0; n--) { \
269 uint ## size ## _t v = bytestream_get_ ## endian(&src); \
270 AV_WN ## size ## A(dst, (v - offset) << shift); \
274 #define DECODE_PLANAR(size, endian, src, dst, n, shift, offset) \
275 n /= avctx->channels; \
276 for (c = 0; c < avctx->channels; c++) { \
278 dst = frame->extended_data[c]; \
279 for (i = n; i > 0; i--) { \
280 uint ## size ## _t v = bytestream_get_ ## endian(&src); \
281 AV_WN ## size ## A(dst, (v - offset) << shift); \
287 int *got_frame_ptr,
AVPacket *avpkt)
290 int buf_size = avpkt->
size;
293 int sample_size,
c,
n,
ret, samples_per_block;
300 samples_per_block = 1;
305 "PCM DVD unsupported sample depth %i\n",
310 samples_per_block = 2;
314 samples_per_block = 2;
318 if (sample_size == 0) {
335 if (n && buf_size % n) {
338 "Invalid PCM packet, data has size %d but at least a size of %d was expected\n",
342 buf_size -= buf_size %
n;
345 n = buf_size / sample_size;
351 samples = frame->
data[0];
355 DECODE(32,
le32, src, samples, n, 0, 0x80000000)
358 DECODE(32,
be32, src, samples, n, 0, 0x80000000)
370 DECODE(32,
le24, src, samples, n, 8, 0x800000)
373 DECODE(32,
be24, src, samples, n, 8, 0x800000)
377 uint32_t
v = bytestream_get_be24(&src);
392 *samples++ = *src++ + 128;
396 for (c = 0; c < avctx->
channels; c++) {
399 for (i = n; i > 0; i--)
400 *samples++ = *src++ + 128;
444 memcpy(samples, src, n * sample_size);
453 for (c = 0; c < avctx->
channels; c++) {
484 *dst_int32_t++ = (bytestream_get_be16(&src) << 16) + ((*src8 & 0xf0) << 8);
485 *dst_int32_t++ = (bytestream_get_be16(&src) << 16) + ((*src8++ & 0x0f) << 12);
495 *dst_int32_t++ = (bytestream_get_be16(&src) << 16) + ((*src8++) << 8);
496 *dst_int32_t++ = (bytestream_get_be16(&src) << 16) + ((*src8++) << 8);
508 for (c = 0; c < avctx->
channels; c++) {
510 for (i = 0; i <
n; i++) {
512 *dst_int32_t++ = (src[2] << 28) |
515 ((src[2] & 0x0F) << 8) |
518 *dst_int32_t++ = (src[4] << 24) |
520 ((src[2] & 0xF0) << 8) |
537 #define PCM_ENCODER_0(id_, sample_fmt_, name_, long_name_)
538 #define PCM_ENCODER_1(id_, sample_fmt_, name_, long_name_) \
539 AVCodec ff_ ## name_ ## _encoder = { \
541 .type = AVMEDIA_TYPE_AUDIO, \
542 .id = AV_CODEC_ID_ ## id_, \
543 .init = pcm_encode_init, \
544 .encode2 = pcm_encode_frame, \
545 .capabilities = CODEC_CAP_VARIABLE_FRAME_SIZE, \
546 .sample_fmts = (const enum AVSampleFormat[]){ sample_fmt_, \
547 AV_SAMPLE_FMT_NONE }, \
548 .long_name = NULL_IF_CONFIG_SMALL(long_name_), \
551 #define PCM_ENCODER_2(cf, id, sample_fmt, name, long_name) \
552 PCM_ENCODER_ ## cf(id, sample_fmt, name, long_name)
553 #define PCM_ENCODER_3(cf, id, sample_fmt, name, long_name) \
554 PCM_ENCODER_2(cf, id, sample_fmt, name, long_name)
555 #define PCM_ENCODER(id, sample_fmt, name, long_name) \
556 PCM_ENCODER_3(CONFIG_ ## id ## _ENCODER, id, sample_fmt, name, long_name)
558 #define PCM_DECODER_0(id, sample_fmt, name, long_name)
559 #define PCM_DECODER_1(id_, sample_fmt_, name_, long_name_) \
560 AVCodec ff_ ## name_ ## _decoder = { \
562 .type = AVMEDIA_TYPE_AUDIO, \
563 .id = AV_CODEC_ID_ ## id_, \
564 .priv_data_size = sizeof(PCMDecode), \
565 .init = pcm_decode_init, \
566 .decode = pcm_decode_frame, \
567 .capabilities = CODEC_CAP_DR1, \
568 .sample_fmts = (const enum AVSampleFormat[]){ sample_fmt_, \
569 AV_SAMPLE_FMT_NONE }, \
570 .long_name = NULL_IF_CONFIG_SMALL(long_name_), \
573 #define PCM_DECODER_2(cf, id, sample_fmt, name, long_name) \
574 PCM_DECODER_ ## cf(id, sample_fmt, name, long_name)
575 #define PCM_DECODER_3(cf, id, sample_fmt, name, long_name) \
576 PCM_DECODER_2(cf, id, sample_fmt, name, long_name)
577 #define PCM_DECODER(id, sample_fmt, name, long_name) \
578 PCM_DECODER_3(CONFIG_ ## id ## _DECODER, id, sample_fmt, name, long_name)
580 #define PCM_CODEC(id, sample_fmt_, name, long_name_) \
581 PCM_ENCODER(id, sample_fmt_, name, long_name_); \
582 PCM_DECODER(id, sample_fmt_, name, long_name_)