75 #define ENCODE(type, endian, src, dst, n, shift, offset) \
76 samples_ ## type = (const type *) src; \
77 for (; n > 0; n--) { \
78 register type v = (*samples_ ## type++ >> shift) + offset; \
79 bytestream_put_ ## endian(&dst, v); \
82 #define ENCODE_PLANAR(type, endian, dst, n, shift, offset) \
83 n /= avctx->channels; \
84 for (c = 0; c < avctx->channels; c++) { \
86 samples_ ## type = (const type *) frame->extended_data[c]; \
87 for (i = n; i > 0; i--) { \
88 register type v = (*samples_ ## type++ >> shift) + offset; \
89 bytestream_put_ ## endian(&dst, v); \
96 int n,
c, sample_size,
v, ret;
100 const int16_t *samples_int16_t;
101 const int32_t *samples_int32_t;
102 const int64_t *samples_int64_t;
103 const uint16_t *samples_uint16_t;
104 const uint32_t *samples_uint32_t;
108 samples = (
const short *)frame->
data[0];
116 ENCODE(uint32_t,
le32, samples, dst, n, 0, 0x80000000)
119 ENCODE(uint32_t,
be32, samples, dst, n, 0, 0x80000000)
131 ENCODE(uint32_t,
le24, samples, dst, n, 8, 0x800000)
134 ENCODE(uint32_t,
be24, samples, dst, n, 8, 0x800000)
138 uint32_t tmp =
ff_reverse[(*samples >> 8) & 0xff] +
141 bytestream_put_be24(&dst, tmp);
146 ENCODE(uint16_t,
le16, samples, dst, n, 0, 0x8000)
149 ENCODE(uint16_t,
be16, samples, dst, n, 0, 0x8000)
198 memcpy(dst, samples, n * sample_size);
207 for (c = 0; c < avctx->
channels; c++) {
248 for (i = 0; i < 256; i++)
252 for (i = 0; i < 256; i++)
277 #define DECODE(size, endian, src, dst, n, shift, offset) \
278 for (; n > 0; n--) { \
279 uint ## size ## _t v = bytestream_get_ ## endian(&src); \
280 AV_WN ## size ## A(dst, (v - offset) << shift); \
284 #define DECODE_PLANAR(size, endian, src, dst, n, shift, offset) \
285 n /= avctx->channels; \
286 for (c = 0; c < avctx->channels; c++) { \
288 dst = frame->extended_data[c]; \
289 for (i = n; i > 0; i--) { \
290 uint ## size ## _t v = bytestream_get_ ## endian(&src); \
291 AV_WN ## size ## A(dst, (v - offset) << shift); \
297 int *got_frame_ptr,
AVPacket *avpkt)
300 int buf_size = avpkt->
size;
303 int sample_size,
c, n, ret, samples_per_block;
310 samples_per_block = 1;
315 "PCM DVD unsupported sample depth %i\n",
320 samples_per_block = 2;
324 samples_per_block = 2;
328 if (sample_size == 0) {
345 if (n && buf_size % n) {
348 "Invalid PCM packet, data has size %d but at least a size of %d was expected\n",
352 buf_size -= buf_size % n;
355 n = buf_size / sample_size;
363 samples = frame->
data[0];
367 DECODE(32,
le32, src, samples, n, 0, 0x80000000)
370 DECODE(32,
be32, src, samples, n, 0, 0x80000000)
382 DECODE(32,
le24, src, samples, n, 8, 0x800000)
385 DECODE(32,
be24, src, samples, n, 8, 0x800000)
389 uint32_t
v = bytestream_get_be24(&src);
404 *samples++ = *src++ + 128;
408 for (c = 0; c < avctx->
channels; c++) {
411 for (i = n; i > 0; i--)
412 *samples++ = *src++ + 128;
456 memcpy(samples, src, n * sample_size);
465 for (c = 0; c < avctx->
channels; c++) {
496 *dst_int32_t++ = (bytestream_get_be16(&src) << 16) + ((*src8 & 0xf0) << 8);
497 *dst_int32_t++ = (bytestream_get_be16(&src) << 16) + ((*src8++ & 0x0f) << 12);
507 *dst_int32_t++ = (bytestream_get_be16(&src) << 16) + ((*src8++) << 8);
508 *dst_int32_t++ = (bytestream_get_be16(&src) << 16) + ((*src8++) << 8);
520 for (c = 0; c < avctx->
channels; c++) {
522 for (i = 0; i < n; i++) {
524 *dst_int32_t++ = (src[2] << 28) |
527 ((src[2] & 0x0F) << 8) |
530 *dst_int32_t++ = (src[4] << 24) |
532 ((src[2] & 0xF0) << 8) |
549 #define PCM_ENCODER_0(id_, sample_fmt_, name_, long_name_)
550 #define PCM_ENCODER_1(id_, sample_fmt_, name_, long_name_) \
551 AVCodec ff_ ## name_ ## _encoder = { \
553 .type = AVMEDIA_TYPE_AUDIO, \
554 .id = AV_CODEC_ID_ ## id_, \
555 .init = pcm_encode_init, \
556 .encode2 = pcm_encode_frame, \
557 .close = pcm_encode_close, \
558 .capabilities = CODEC_CAP_VARIABLE_FRAME_SIZE, \
559 .sample_fmts = (const enum AVSampleFormat[]){ sample_fmt_, \
560 AV_SAMPLE_FMT_NONE }, \
561 .long_name = NULL_IF_CONFIG_SMALL(long_name_), \
564 #define PCM_ENCODER_2(cf, id, sample_fmt, name, long_name) \
565 PCM_ENCODER_ ## cf(id, sample_fmt, name, long_name)
566 #define PCM_ENCODER_3(cf, id, sample_fmt, name, long_name) \
567 PCM_ENCODER_2(cf, id, sample_fmt, name, long_name)
568 #define PCM_ENCODER(id, sample_fmt, name, long_name) \
569 PCM_ENCODER_3(CONFIG_ ## id ## _ENCODER, id, sample_fmt, name, long_name)
571 #define PCM_DECODER_0(id, sample_fmt, name, long_name)
572 #define PCM_DECODER_1(id_, sample_fmt_, name_, long_name_) \
573 AVCodec ff_ ## name_ ## _decoder = { \
575 .type = AVMEDIA_TYPE_AUDIO, \
576 .id = AV_CODEC_ID_ ## id_, \
577 .priv_data_size = sizeof(PCMDecode), \
578 .init = pcm_decode_init, \
579 .decode = pcm_decode_frame, \
580 .capabilities = CODEC_CAP_DR1, \
581 .sample_fmts = (const enum AVSampleFormat[]){ sample_fmt_, \
582 AV_SAMPLE_FMT_NONE }, \
583 .long_name = NULL_IF_CONFIG_SMALL(long_name_), \
586 #define PCM_DECODER_2(cf, id, sample_fmt, name, long_name) \
587 PCM_DECODER_ ## cf(id, sample_fmt, name, long_name)
588 #define PCM_DECODER_3(cf, id, sample_fmt, name, long_name) \
589 PCM_DECODER_2(cf, id, sample_fmt, name, long_name)
590 #define PCM_DECODER(id, sample_fmt, name, long_name) \
591 PCM_DECODER_3(CONFIG_ ## id ## _DECODER, id, sample_fmt, name, long_name)
593 #define PCM_CODEC(id, sample_fmt_, name, long_name_) \
594 PCM_ENCODER(id, sample_fmt_, name, long_name_); \
595 PCM_DECODER(id, sample_fmt_, name, long_name_)