69 #define ENCODE(type, endian, src, dst, n, shift, offset) \ 70 samples_ ## type = (const type *) src; \ 71 for (; n > 0; n--) { \ 72 register type v = (*samples_ ## type++ >> shift) + offset; \ 73 bytestream_put_ ## endian(&dst, v); \ 76 #define ENCODE_PLANAR(type, endian, dst, n, shift, offset) \ 77 n /= avctx->channels; \ 78 for (c = 0; c < avctx->channels; c++) { \ 80 samples_ ## type = (const type *) frame->extended_data[c]; \ 81 for (i = n; i > 0; i--) { \ 82 register type v = (*samples_ ## type++ >> shift) + offset; \ 83 bytestream_put_ ## endian(&dst, v); \ 90 int n,
c, sample_size, v, ret;
94 const int16_t *samples_int16_t;
96 const int64_t *samples_int64_t;
97 const uint16_t *samples_uint16_t;
98 const uint32_t *samples_uint32_t;
102 samples = (
const short *)frame->
data[0];
110 ENCODE(uint32_t, le32, samples, dst, n, 0, 0x80000000)
113 ENCODE(uint32_t, be32, samples, dst, n, 0, 0x80000000)
125 ENCODE(uint32_t, le24, samples, dst, n, 8, 0x800000)
128 ENCODE(uint32_t, be24, samples, dst, n, 8, 0x800000)
135 bytestream_put_be24(&dst, tmp);
140 ENCODE(uint16_t, le16, samples, dst, n, 0, 0x8000)
143 ENCODE(uint16_t, be16, samples, dst, n, 0, 0x8000)
154 ENCODE(int64_t, le64, samples, dst, n, 0, 0)
164 ENCODE(int16_t, le16, samples, dst, n, 0, 0)
177 ENCODE(int64_t, be64, samples, dst, n, 0, 0)
184 ENCODE(int16_t, be16, samples, dst, n, 0, 0)
196 memcpy(dst, samples, n * sample_size);
205 for (c = 0; c < avctx->
channels; c++) {
254 for (i = 0; i < 256; i++)
258 for (i = 0; i < 256; i++)
262 for (i = 0; i < 256; i++)
306 #define DECODE(size, endian, src, dst, n, shift, offset) \ 307 for (; n > 0; n--) { \ 308 uint ## size ## _t v = bytestream_get_ ## endian(&src); \ 309 AV_WN ## size ## A(dst, (uint ## size ## _t)(v - offset) << shift); \ 313 #define DECODE_PLANAR(size, endian, src, dst, n, shift, offset) \ 314 n /= avctx->channels; \ 315 for (c = 0; c < avctx->channels; c++) { \ 317 dst = frame->extended_data[c]; \ 318 for (i = n; i > 0; i--) { \ 319 uint ## size ## _t v = bytestream_get_ ## endian(&src); \ 320 AV_WN ## size ## A(dst, (uint ## size ##_t)(v - offset) << shift); \ 326 int *got_frame_ptr,
AVPacket *avpkt)
329 int buf_size = avpkt->
size;
332 int sample_size,
c, n, ret, samples_per_block;
339 samples_per_block = 1;
342 samples_per_block = 2;
346 if (sample_size == 0) {
363 if (n && buf_size % n) {
366 "Invalid PCM packet, data has size %d but at least a size of %d was expected\n",
370 buf_size -= buf_size % n;
373 n = buf_size / sample_size;
379 samples = frame->
data[0];
383 DECODE(32, le32, src, samples, n, 0, 0x80000000)
386 DECODE(32, be32, src, samples, n, 0, 0x80000000)
389 DECODE(32, le24, src, samples, n, 8, 0)
395 DECODE(32, be24, src, samples, n, 8, 0)
398 DECODE(32, le24, src, samples, n, 8, 0x800000)
401 DECODE(32, be24, src, samples, n, 8, 0x800000)
405 uint32_t v = bytestream_get_be24(&src);
413 DECODE(16, le16, src, samples, n, 0, 0x8000)
416 DECODE(16, be16, src, samples, n, 0, 0x8000)
420 *samples++ = *src++ + 128;
424 for (c = 0; c < avctx->
channels; c++) {
427 for (i = n; i > 0; i--)
428 *samples++ = *src++ + 128;
434 DECODE(64, le64, src, samples, n, 0, 0)
440 DECODE(32, le32, src, samples, n, 0, 0)
446 DECODE(16, le16, src, samples, n, 0, 0)
459 DECODE(64, be64, src, samples, n, 0, 0)
463 DECODE(32, be32, src, samples, n, 0, 0)
466 DECODE(16, be16, src, samples, n, 0, 0)
480 memcpy(samples, src, n * sample_size);
489 for (c = 0; c < avctx->
channels; c++) {
506 for (c = 0; c < avctx->
channels; c++) {
508 for (i = 0; i < n; i++) {
510 *dst_int32_t++ = ((uint32_t)src[2]<<28) |
513 ((src[2] & 0x0F) << 8) |
516 *dst_int32_t++ = ((uint32_t)src[4]<<24) |
518 ((src[2] & 0xF0) << 8) |
543 #define PCM_ENCODER_0(id_, sample_fmt_, name_, long_name_) 544 #define PCM_ENCODER_1(id_, sample_fmt_, name_, long_name_) \ 545 AVCodec ff_ ## name_ ## _encoder = { \ 547 .long_name = NULL_IF_CONFIG_SMALL(long_name_), \ 548 .type = AVMEDIA_TYPE_AUDIO, \ 549 .id = AV_CODEC_ID_ ## id_, \ 550 .init = pcm_encode_init, \ 551 .encode2 = pcm_encode_frame, \ 552 .capabilities = AV_CODEC_CAP_VARIABLE_FRAME_SIZE, \ 553 .sample_fmts = (const enum AVSampleFormat[]){ sample_fmt_, \ 554 AV_SAMPLE_FMT_NONE }, \ 557 #define PCM_ENCODER_2(cf, id, sample_fmt, name, long_name) \ 558 PCM_ENCODER_ ## cf(id, sample_fmt, name, long_name) 559 #define PCM_ENCODER_3(cf, id, sample_fmt, name, long_name) \ 560 PCM_ENCODER_2(cf, id, sample_fmt, name, long_name) 561 #define PCM_ENCODER(id, sample_fmt, name, long_name) \ 562 PCM_ENCODER_3(CONFIG_ ## id ## _ENCODER, id, sample_fmt, name, long_name) 564 #define PCM_DECODER_0(id, sample_fmt, name, long_name) 565 #define PCM_DECODER_1(id_, sample_fmt_, name_, long_name_) \ 566 AVCodec ff_ ## name_ ## _decoder = { \ 568 .long_name = NULL_IF_CONFIG_SMALL(long_name_), \ 569 .type = AVMEDIA_TYPE_AUDIO, \ 570 .id = AV_CODEC_ID_ ## id_, \ 571 .priv_data_size = sizeof(PCMDecode), \ 572 .init = pcm_decode_init, \ 573 .close = pcm_decode_close, \ 574 .decode = pcm_decode_frame, \ 575 .capabilities = AV_CODEC_CAP_DR1, \ 576 .sample_fmts = (const enum AVSampleFormat[]){ sample_fmt_, \ 577 AV_SAMPLE_FMT_NONE }, \ 580 #define PCM_DECODER_2(cf, id, sample_fmt, name, long_name) \ 581 PCM_DECODER_ ## cf(id, sample_fmt, name, long_name) 582 #define PCM_DECODER_3(cf, id, sample_fmt, name, long_name) \ 583 PCM_DECODER_2(cf, id, sample_fmt, name, long_name) 584 #define PCM_DECODER(id, sample_fmt, name, long_name) \ 585 PCM_DECODER_3(CONFIG_ ## id ## _DECODER, id, sample_fmt, name, long_name) 587 #define PCM_CODEC(id, sample_fmt_, name, long_name_) \ 588 PCM_ENCODER(id, sample_fmt_, name, long_name_); \ 589 PCM_DECODER(id, sample_fmt_, name, long_name_)
const struct AVCodec * codec
static av_cold int vidc2linear(unsigned char u_val)
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
This structure describes decoded (raw) audio or video data.
static void pcm_alaw_tableinit(void)
int64_t bit_rate
the average bitrate
static void pcm_ulaw_tableinit(void)
const uint8_t ff_reverse[256]
#define DECODE_PLANAR(size, endian, src, dst, n, shift, offset)
static av_cold int ulaw2linear(unsigned char u_val)
static int pcm_encode_frame(AVCodecContext *avctx, AVPacket *avpkt, const AVFrame *frame, int *got_packet_ptr)
int bits_per_raw_sample
Bits per sample/pixel of internal libavcodec pixel/sample format.
int block_align
number of bytes per packet if constant and known or 0 Used by some WAV based audio codecs...
Macro definitions for various function/variable attributes.
int ff_alloc_packet2(AVCodecContext *avctx, AVPacket *avpkt, int64_t size, int64_t min_size)
Check AVPacket size and/or allocate data.
enum AVSampleFormat sample_fmt
audio sample format
static av_cold int pcm_decode_close(AVCodecContext *avctx)
static uint8_t linear_to_ulaw[16384]
int bits_per_coded_sample
bits per sample/pixel from the demuxer (needed for huffyuv).
static int pcm_decode_frame(AVCodecContext *avctx, void *data, int *got_frame_ptr, AVPacket *avpkt)
#define PCM_CODEC(id, sample_fmt_, name, long_name_)
#define i(width, name, range_min, range_max)
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
int av_get_bits_per_sample(enum AVCodecID codec_id)
Return codec bits per sample.
av_cold AVFloatDSPContext * avpriv_float_dsp_alloc(int bit_exact)
Allocate a float DSP context.
#define DECODE(size, endian, src, dst, n, shift, offset)
Read PCM samples macro.
#define ENCODE_PLANAR(type, endian, dst, n, shift, offset)
static void pcm_vidc_tableinit(void)
#define ENCODE(type, endian, src, dst, n, shift, offset)
Write PCM samples macro.
static av_cold int pcm_encode_init(AVCodecContext *avctx)
static av_cold int alaw2linear(unsigned char a_val)
static av_always_inline unsigned int bytestream_get_buffer(const uint8_t **b, uint8_t *dst, unsigned int size)
int frame_size
Number of samples per channel in an audio frame.
Libavcodec external API header.
int sample_rate
samples per second
main external API structure.
int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
Get a buffer for a frame.
void(* vector_fmul_scalar)(float *dst, const float *src, float mul, int len)
Multiply a vector of floats by a scalar float.
static av_cold int pcm_decode_init(AVCodecContext *avctx)
#define PCM_DECODER(id, sample_fmt, name, long_name)
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
common internal api header.
static uint8_t linear_to_vidc[16384]
static uint8_t linear_to_alaw[16384]
static av_always_inline void bytestream_put_buffer(uint8_t **b, const uint8_t *src, unsigned int size)
int channels
number of audio channels
enum AVSampleFormat * sample_fmts
array of supported sample formats, or NULL if unknown, array is terminated by -1
uint8_t ** extended_data
pointers to the data planes/channels.
This structure stores compressed data.
int nb_samples
number of audio samples (per channel) described by this frame