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++) {
249 for (i = 0; i < 256; i++)
253 for (i = 0; i < 256; i++)
281 #define DECODE(size, endian, src, dst, n, shift, offset) \
282 for (; n > 0; n--) { \
283 uint ## size ## _t v = bytestream_get_ ## endian(&src); \
284 AV_WN ## size ## A(dst, (v - offset) << shift); \
288 #define DECODE_PLANAR(size, endian, src, dst, n, shift, offset) \
289 n /= avctx->channels; \
290 for (c = 0; c < avctx->channels; c++) { \
292 dst = s->frame.extended_data[c]; \
293 for (i = n; i > 0; i--) { \
294 uint ## size ## _t v = bytestream_get_ ## endian(&src); \
295 AV_WN ## size ## A(dst, (v - offset) << shift); \
301 int *got_frame_ptr,
AVPacket *avpkt)
304 int buf_size = avpkt->
size;
306 int sample_size,
c, n, ret, samples_per_block;
313 samples_per_block = 1;
318 "PCM DVD unsupported sample depth %i\n",
323 samples_per_block = 2;
327 samples_per_block = 2;
331 if (sample_size == 0) {
348 if (n && buf_size % n) {
351 "Invalid PCM packet, data has size %d but at least a size of %d was expected\n",
355 buf_size -= buf_size % n;
358 n = buf_size / sample_size;
370 DECODE(32,
le32, src, samples, n, 0, 0x80000000)
373 DECODE(32,
be32, src, samples, n, 0, 0x80000000)
385 DECODE(32,
le24, src, samples, n, 8, 0x800000)
388 DECODE(32,
be24, src, samples, n, 8, 0x800000)
392 uint32_t v = bytestream_get_be24(&src);
407 *samples++ = *src++ + 128;
411 for (c = 0; c < avctx->
channels; c++) {
414 for (i = n; i > 0; i--)
415 *samples++ = *src++ + 128;
459 memcpy(samples, src, n * sample_size);
468 for (c = 0; c < avctx->
channels; c++) {
499 *dst_int32_t++ = (bytestream_get_be16(&src) << 16) + ((*src8 & 0xf0) << 8);
500 *dst_int32_t++ = (bytestream_get_be16(&src) << 16) + ((*src8++ & 0x0f) << 12);
510 *dst_int32_t++ = (bytestream_get_be16(&src) << 16) + ((*src8++) << 8);
511 *dst_int32_t++ = (bytestream_get_be16(&src) << 16) + ((*src8++) << 8);
523 for (c = 0; c < avctx->
channels; c++) {
525 for (i = 0; i < n; i++) {
527 *dst_int32_t++ = (src[2] << 28) |
530 ((src[2] & 0x0F) << 8) |
533 *dst_int32_t++ = (src[4] << 24) |
535 ((src[2] & 0xF0) << 8) |
553 #define PCM_ENCODER_0(id_, sample_fmt_, name_, long_name_)
554 #define PCM_ENCODER_1(id_, sample_fmt_, name_, long_name_) \
555 AVCodec ff_ ## name_ ## _encoder = { \
557 .type = AVMEDIA_TYPE_AUDIO, \
558 .id = AV_CODEC_ID_ ## id_, \
559 .init = pcm_encode_init, \
560 .encode2 = pcm_encode_frame, \
561 .close = pcm_encode_close, \
562 .capabilities = CODEC_CAP_VARIABLE_FRAME_SIZE, \
563 .sample_fmts = (const enum AVSampleFormat[]){ sample_fmt_, \
564 AV_SAMPLE_FMT_NONE }, \
565 .long_name = NULL_IF_CONFIG_SMALL(long_name_), \
568 #define PCM_ENCODER_2(cf, id, sample_fmt, name, long_name) \
569 PCM_ENCODER_ ## cf(id, sample_fmt, name, long_name)
570 #define PCM_ENCODER_3(cf, id, sample_fmt, name, long_name) \
571 PCM_ENCODER_2(cf, id, sample_fmt, name, long_name)
572 #define PCM_ENCODER(id, sample_fmt, name, long_name) \
573 PCM_ENCODER_3(CONFIG_ ## id ## _ENCODER, id, sample_fmt, name, long_name)
575 #define PCM_DECODER_0(id, sample_fmt, name, long_name)
576 #define PCM_DECODER_1(id_, sample_fmt_, name_, long_name_) \
577 AVCodec ff_ ## name_ ## _decoder = { \
579 .type = AVMEDIA_TYPE_AUDIO, \
580 .id = AV_CODEC_ID_ ## id_, \
581 .priv_data_size = sizeof(PCMDecode), \
582 .init = pcm_decode_init, \
583 .decode = pcm_decode_frame, \
584 .capabilities = CODEC_CAP_DR1, \
585 .sample_fmts = (const enum AVSampleFormat[]){ sample_fmt_, \
586 AV_SAMPLE_FMT_NONE }, \
587 .long_name = NULL_IF_CONFIG_SMALL(long_name_), \
590 #define PCM_DECODER_2(cf, id, sample_fmt, name, long_name) \
591 PCM_DECODER_ ## cf(id, sample_fmt, name, long_name)
592 #define PCM_DECODER_3(cf, id, sample_fmt, name, long_name) \
593 PCM_DECODER_2(cf, id, sample_fmt, name, long_name)
594 #define PCM_DECODER(id, sample_fmt, name, long_name) \
595 PCM_DECODER_3(CONFIG_ ## id ## _DECODER, id, sample_fmt, name, long_name)
597 #define PCM_CODEC(id, sample_fmt_, name, long_name_) \
598 PCM_ENCODER(id, sample_fmt_, name, long_name_); \
599 PCM_DECODER(id, sample_fmt_, name, long_name_)