libavcodec/pcm.c
Go to the documentation of this file.
1 /*
2  * PCM codecs
3  * Copyright (c) 2001 Fabrice Bellard
4  *
5  * This file is part of FFmpeg.
6  *
7  * FFmpeg is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  *
12  * FFmpeg is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with FFmpeg; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20  */
21 
22 /**
23  * @file
24  * PCM codecs
25  */
26 
27 #include "libavutil/attributes.h"
28 #include "avcodec.h"
29 #include "bytestream.h"
30 #include "internal.h"
31 #include "mathops.h"
32 #include "pcm_tablegen.h"
33 
35 {
36  avctx->frame_size = 0;
37  switch (avctx->codec->id) {
40  break;
43  break;
44  default:
45  break;
46  }
47 
49  avctx->block_align = avctx->channels * avctx->bits_per_coded_sample / 8;
50  avctx->bit_rate = avctx->block_align * avctx->sample_rate * 8;
52  if (!avctx->coded_frame)
53  return AVERROR(ENOMEM);
54 
55  return 0;
56 }
57 
59 {
60  av_freep(&avctx->coded_frame);
61 
62  return 0;
63 }
64 
65 /**
66  * Write PCM samples macro
67  * @param type Datatype of native machine format
68  * @param endian bytestream_put_xxx() suffix
69  * @param src Source pointer (variable name)
70  * @param dst Destination pointer (variable name)
71  * @param n Total number of samples (variable name)
72  * @param shift Bitshift (bits)
73  * @param offset Sample value offset
74  */
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); \
80  }
81 
82 #define ENCODE_PLANAR(type, endian, dst, n, shift, offset) \
83  n /= avctx->channels; \
84  for (c = 0; c < avctx->channels; c++) { \
85  int i; \
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); \
90  } \
91  }
92 
93 static int pcm_encode_frame(AVCodecContext *avctx, AVPacket *avpkt,
94  const AVFrame *frame, int *got_packet_ptr)
95 {
96  int n, c, sample_size, v, ret;
97  const short *samples;
98  unsigned char *dst;
99  const uint8_t *samples_uint8_t;
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;
105 
106  sample_size = av_get_bits_per_sample(avctx->codec->id) / 8;
107  n = frame->nb_samples * avctx->channels;
108  samples = (const short *)frame->data[0];
109 
110  if ((ret = ff_alloc_packet2(avctx, avpkt, n * sample_size)) < 0)
111  return ret;
112  dst = avpkt->data;
113 
114  switch (avctx->codec->id) {
116  ENCODE(uint32_t, le32, samples, dst, n, 0, 0x80000000)
117  break;
119  ENCODE(uint32_t, be32, samples, dst, n, 0, 0x80000000)
120  break;
122  ENCODE(int32_t, le24, samples, dst, n, 8, 0)
123  break;
125  ENCODE_PLANAR(int32_t, le24, dst, n, 8, 0)
126  break;
128  ENCODE(int32_t, be24, samples, dst, n, 8, 0)
129  break;
131  ENCODE(uint32_t, le24, samples, dst, n, 8, 0x800000)
132  break;
134  ENCODE(uint32_t, be24, samples, dst, n, 8, 0x800000)
135  break;
137  for (; n > 0; n--) {
138  uint32_t tmp = ff_reverse[(*samples >> 8) & 0xff] +
139  (ff_reverse[*samples & 0xff] << 8);
140  tmp <<= 4; // sync flags would go here
141  bytestream_put_be24(&dst, tmp);
142  samples++;
143  }
144  break;
146  ENCODE(uint16_t, le16, samples, dst, n, 0, 0x8000)
147  break;
149  ENCODE(uint16_t, be16, samples, dst, n, 0, 0x8000)
150  break;
151  case AV_CODEC_ID_PCM_S8:
152  ENCODE(uint8_t, byte, samples, dst, n, 0, -128)
153  break;
155  ENCODE_PLANAR(uint8_t, byte, dst, n, 0, -128)
156  break;
157 #if HAVE_BIGENDIAN
159  ENCODE(int64_t, le64, samples, dst, n, 0, 0)
160  break;
163  ENCODE(int32_t, le32, samples, dst, n, 0, 0)
164  break;
166  ENCODE_PLANAR(int32_t, le32, dst, n, 0, 0)
167  break;
169  ENCODE(int16_t, le16, samples, dst, n, 0, 0)
170  break;
172  ENCODE_PLANAR(int16_t, le16, dst, n, 0, 0)
173  break;
178 #else
180  ENCODE(int64_t, be64, samples, dst, n, 0, 0)
181  break;
184  ENCODE(int32_t, be32, samples, dst, n, 0, 0)
185  break;
187  ENCODE(int16_t, be16, samples, dst, n, 0, 0)
188  break;
190  ENCODE_PLANAR(int16_t, be16, dst, n, 0, 0)
191  break;
196 #endif /* HAVE_BIGENDIAN */
197  case AV_CODEC_ID_PCM_U8:
198  memcpy(dst, samples, n * sample_size);
199  break;
200 #if HAVE_BIGENDIAN
202 #else
205 #endif /* HAVE_BIGENDIAN */
206  n /= avctx->channels;
207  for (c = 0; c < avctx->channels; c++) {
208  const uint8_t *src = frame->extended_data[c];
209  bytestream_put_buffer(&dst, src, n * sample_size);
210  }
211  break;
213  for (; n > 0; n--) {
214  v = *samples++;
215  *dst++ = linear_to_alaw[(v + 32768) >> 2];
216  }
217  break;
219  for (; n > 0; n--) {
220  v = *samples++;
221  *dst++ = linear_to_ulaw[(v + 32768) >> 2];
222  }
223  break;
224  default:
225  return -1;
226  }
227 
228  *got_packet_ptr = 1;
229  return 0;
230 }
231 
232 typedef struct PCMDecode {
233  short table[256];
234 } PCMDecode;
235 
237 {
238  PCMDecode *s = avctx->priv_data;
239  int i;
240 
241  if (avctx->channels <= 0) {
242  av_log(avctx, AV_LOG_ERROR, "PCM channels out of bounds\n");
243  return AVERROR(EINVAL);
244  }
245 
246  switch (avctx->codec_id) {
248  for (i = 0; i < 256; i++)
249  s->table[i] = alaw2linear(i);
250  break;
252  for (i = 0; i < 256; i++)
253  s->table[i] = ulaw2linear(i);
254  break;
255  default:
256  break;
257  }
258 
259  avctx->sample_fmt = avctx->codec->sample_fmts[0];
260 
261  if (avctx->sample_fmt == AV_SAMPLE_FMT_S32)
263 
264  return 0;
265 }
266 
267 /**
268  * Read PCM samples macro
269  * @param size Data size of native machine format
270  * @param endian bytestream_get_xxx() endian suffix
271  * @param src Source pointer (variable name)
272  * @param dst Destination pointer (variable name)
273  * @param n Total number of samples (variable name)
274  * @param shift Bitshift (bits)
275  * @param offset Sample value offset
276  */
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); \
281  dst += size / 8; \
282  }
283 
284 #define DECODE_PLANAR(size, endian, src, dst, n, shift, offset) \
285  n /= avctx->channels; \
286  for (c = 0; c < avctx->channels; c++) { \
287  int i; \
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); \
292  dst += size / 8; \
293  } \
294  }
295 
296 static int pcm_decode_frame(AVCodecContext *avctx, void *data,
297  int *got_frame_ptr, AVPacket *avpkt)
298 {
299  const uint8_t *src = avpkt->data;
300  int buf_size = avpkt->size;
301  PCMDecode *s = avctx->priv_data;
302  AVFrame *frame = data;
303  int sample_size, c, n, ret, samples_per_block;
304  uint8_t *samples;
305  int32_t *dst_int32_t;
306 
307  sample_size = av_get_bits_per_sample(avctx->codec_id) / 8;
308 
309  /* av_get_bits_per_sample returns 0 for AV_CODEC_ID_PCM_DVD */
310  samples_per_block = 1;
311  if (AV_CODEC_ID_PCM_DVD == avctx->codec_id) {
312  if (avctx->bits_per_coded_sample != 20 &&
313  avctx->bits_per_coded_sample != 24) {
314  av_log(avctx, AV_LOG_ERROR,
315  "PCM DVD unsupported sample depth %i\n",
316  avctx->bits_per_coded_sample);
317  return AVERROR(EINVAL);
318  }
319  /* 2 samples are interleaved per block in PCM_DVD */
320  samples_per_block = 2;
321  sample_size = avctx->bits_per_coded_sample * 2 / 8;
322  } else if (avctx->codec_id == AV_CODEC_ID_PCM_LXF) {
323  /* we process 40-bit blocks per channel for LXF */
324  samples_per_block = 2;
325  sample_size = 5;
326  }
327 
328  if (sample_size == 0) {
329  av_log(avctx, AV_LOG_ERROR, "Invalid sample_size\n");
330  return AVERROR(EINVAL);
331  }
332 
333  if (avctx->channels == 0) {
334  av_log(avctx, AV_LOG_ERROR, "Invalid number of channels\n");
335  return AVERROR(EINVAL);
336  }
337 
338  if (avctx->codec_id != avctx->codec->id) {
339  av_log(avctx, AV_LOG_ERROR, "codec ids mismatch\n");
340  return AVERROR(EINVAL);
341  }
342 
343  n = avctx->channels * sample_size;
344 
345  if (n && buf_size % n) {
346  if (buf_size < n) {
347  av_log(avctx, AV_LOG_ERROR,
348  "Invalid PCM packet, data has size %d but at least a size of %d was expected\n",
349  buf_size, n);
350  return AVERROR_INVALIDDATA;
351  } else
352  buf_size -= buf_size % n;
353  }
354 
355  n = buf_size / sample_size;
356 
357  /* get output buffer */
358  frame->nb_samples = n * samples_per_block / avctx->channels;
359  if ((ret = ff_get_buffer(avctx, frame, 0)) < 0)
360  return ret;
361  samples = frame->data[0];
362 
363  switch (avctx->codec_id) {
365  DECODE(32, le32, src, samples, n, 0, 0x80000000)
366  break;
368  DECODE(32, be32, src, samples, n, 0, 0x80000000)
369  break;
371  DECODE(32, le24, src, samples, n, 8, 0)
372  break;
374  DECODE_PLANAR(32, le24, src, samples, n, 8, 0);
375  break;
377  DECODE(32, be24, src, samples, n, 8, 0)
378  break;
380  DECODE(32, le24, src, samples, n, 8, 0x800000)
381  break;
383  DECODE(32, be24, src, samples, n, 8, 0x800000)
384  break;
386  for (; n > 0; n--) {
387  uint32_t v = bytestream_get_be24(&src);
388  v >>= 4; // sync flags are here
389  AV_WN16A(samples, ff_reverse[(v >> 8) & 0xff] +
390  (ff_reverse[v & 0xff] << 8));
391  samples += 2;
392  }
393  break;
395  DECODE(16, le16, src, samples, n, 0, 0x8000)
396  break;
398  DECODE(16, be16, src, samples, n, 0, 0x8000)
399  break;
400  case AV_CODEC_ID_PCM_S8:
401  for (; n > 0; n--)
402  *samples++ = *src++ + 128;
403  break;
405  n /= avctx->channels;
406  for (c = 0; c < avctx->channels; c++) {
407  int i;
408  samples = frame->extended_data[c];
409  for (i = n; i > 0; i--)
410  *samples++ = *src++ + 128;
411  }
412  break;
413 #if HAVE_BIGENDIAN
415  DECODE(64, le64, src, samples, n, 0, 0)
416  break;
419  DECODE(32, le32, src, samples, n, 0, 0)
420  break;
422  DECODE_PLANAR(32, le32, src, samples, n, 0, 0);
423  break;
425  DECODE(16, le16, src, samples, n, 0, 0)
426  break;
428  DECODE_PLANAR(16, le16, src, samples, n, 0, 0);
429  break;
434 #else
436  DECODE(64, be64, src, samples, n, 0, 0)
437  break;
440  DECODE(32, be32, src, samples, n, 0, 0)
441  break;
443  DECODE(16, be16, src, samples, n, 0, 0)
444  break;
446  DECODE_PLANAR(16, be16, src, samples, n, 0, 0);
447  break;
452 #endif /* HAVE_BIGENDIAN */
453  case AV_CODEC_ID_PCM_U8:
454  memcpy(samples, src, n * sample_size);
455  break;
456 #if HAVE_BIGENDIAN
458 #else
461 #endif /* HAVE_BIGENDIAN */
462  n /= avctx->channels;
463  for (c = 0; c < avctx->channels; c++) {
464  samples = frame->extended_data[c];
465  bytestream_get_buffer(&src, samples, n * sample_size);
466  }
467  break;
469  for (; n > 0; n--) {
470  int v = *src++;
471  if (v < 128)
472  v = 128 - v;
473  *samples++ = v;
474  }
475  break;
478  for (; n > 0; n--) {
479  AV_WN16A(samples, s->table[*src++]);
480  samples += 2;
481  }
482  break;
483  case AV_CODEC_ID_PCM_DVD:
484  {
485  const uint8_t *src8;
486  dst_int32_t = (int32_t *)frame->data[0];
487  n /= avctx->channels;
488  switch (avctx->bits_per_coded_sample) {
489  case 20:
490  while (n--) {
491  c = avctx->channels;
492  src8 = src + 4 * c;
493  while (c--) {
494  *dst_int32_t++ = (bytestream_get_be16(&src) << 16) + ((*src8 & 0xf0) << 8);
495  *dst_int32_t++ = (bytestream_get_be16(&src) << 16) + ((*src8++ & 0x0f) << 12);
496  }
497  src = src8;
498  }
499  break;
500  case 24:
501  while (n--) {
502  c = avctx->channels;
503  src8 = src + 4 * c;
504  while (c--) {
505  *dst_int32_t++ = (bytestream_get_be16(&src) << 16) + ((*src8++) << 8);
506  *dst_int32_t++ = (bytestream_get_be16(&src) << 16) + ((*src8++) << 8);
507  }
508  src = src8;
509  }
510  break;
511  }
512  break;
513  }
514  case AV_CODEC_ID_PCM_LXF:
515  {
516  int i;
517  n /= avctx->channels;
518  for (c = 0; c < avctx->channels; c++) {
519  dst_int32_t = (int32_t *)frame->extended_data[c];
520  for (i = 0; i < n; i++) {
521  // extract low 20 bits and expand to 32 bits
522  *dst_int32_t++ = (src[2] << 28) |
523  (src[1] << 20) |
524  (src[0] << 12) |
525  ((src[2] & 0x0F) << 8) |
526  src[1];
527  // extract high 20 bits and expand to 32 bits
528  *dst_int32_t++ = (src[4] << 24) |
529  (src[3] << 16) |
530  ((src[2] & 0xF0) << 8) |
531  (src[4] << 4) |
532  (src[3] >> 4);
533  src += 5;
534  }
535  }
536  break;
537  }
538  default:
539  return -1;
540  }
541 
542  *got_frame_ptr = 1;
543 
544  return buf_size;
545 }
546 
547 #define PCM_ENCODER_0(id_, sample_fmt_, name_, long_name_)
548 #define PCM_ENCODER_1(id_, sample_fmt_, name_, long_name_) \
549 AVCodec ff_ ## name_ ## _encoder = { \
550  .name = #name_, \
551  .type = AVMEDIA_TYPE_AUDIO, \
552  .id = AV_CODEC_ID_ ## id_, \
553  .init = pcm_encode_init, \
554  .encode2 = pcm_encode_frame, \
555  .close = pcm_encode_close, \
556  .capabilities = CODEC_CAP_VARIABLE_FRAME_SIZE, \
557  .sample_fmts = (const enum AVSampleFormat[]){ sample_fmt_, \
558  AV_SAMPLE_FMT_NONE }, \
559  .long_name = NULL_IF_CONFIG_SMALL(long_name_), \
560 }
561 
562 #define PCM_ENCODER_2(cf, id, sample_fmt, name, long_name) \
563  PCM_ENCODER_ ## cf(id, sample_fmt, name, long_name)
564 #define PCM_ENCODER_3(cf, id, sample_fmt, name, long_name) \
565  PCM_ENCODER_2(cf, id, sample_fmt, name, long_name)
566 #define PCM_ENCODER(id, sample_fmt, name, long_name) \
567  PCM_ENCODER_3(CONFIG_ ## id ## _ENCODER, id, sample_fmt, name, long_name)
568 
569 #define PCM_DECODER_0(id, sample_fmt, name, long_name)
570 #define PCM_DECODER_1(id_, sample_fmt_, name_, long_name_) \
571 AVCodec ff_ ## name_ ## _decoder = { \
572  .name = #name_, \
573  .type = AVMEDIA_TYPE_AUDIO, \
574  .id = AV_CODEC_ID_ ## id_, \
575  .priv_data_size = sizeof(PCMDecode), \
576  .init = pcm_decode_init, \
577  .decode = pcm_decode_frame, \
578  .capabilities = CODEC_CAP_DR1, \
579  .sample_fmts = (const enum AVSampleFormat[]){ sample_fmt_, \
580  AV_SAMPLE_FMT_NONE }, \
581  .long_name = NULL_IF_CONFIG_SMALL(long_name_), \
582 }
583 
584 #define PCM_DECODER_2(cf, id, sample_fmt, name, long_name) \
585  PCM_DECODER_ ## cf(id, sample_fmt, name, long_name)
586 #define PCM_DECODER_3(cf, id, sample_fmt, name, long_name) \
587  PCM_DECODER_2(cf, id, sample_fmt, name, long_name)
588 #define PCM_DECODER(id, sample_fmt, name, long_name) \
589  PCM_DECODER_3(CONFIG_ ## id ## _DECODER, id, sample_fmt, name, long_name)
590 
591 #define PCM_CODEC(id, sample_fmt_, name, long_name_) \
592  PCM_ENCODER(id, sample_fmt_, name, long_name_); \
593  PCM_DECODER(id, sample_fmt_, name, long_name_)
594 
595 /* Note: Do not forget to add new entries to the Makefile as well. */
596 PCM_CODEC (PCM_ALAW, AV_SAMPLE_FMT_S16, pcm_alaw, "PCM A-law / G.711 A-law");
597 PCM_DECODER(PCM_DVD, AV_SAMPLE_FMT_S32, pcm_dvd, "PCM signed 20|24-bit big-endian");
598 PCM_CODEC (PCM_F32BE, AV_SAMPLE_FMT_FLT, pcm_f32be, "PCM 32-bit floating point big-endian");
599 PCM_CODEC (PCM_F32LE, AV_SAMPLE_FMT_FLT, pcm_f32le, "PCM 32-bit floating point little-endian");
600 PCM_CODEC (PCM_F64BE, AV_SAMPLE_FMT_DBL, pcm_f64be, "PCM 64-bit floating point big-endian");
601 PCM_CODEC (PCM_F64LE, AV_SAMPLE_FMT_DBL, pcm_f64le, "PCM 64-bit floating point little-endian");
602 PCM_DECODER(PCM_LXF, AV_SAMPLE_FMT_S32P,pcm_lxf, "PCM signed 20-bit little-endian planar");
603 PCM_CODEC (PCM_MULAW, AV_SAMPLE_FMT_S16, pcm_mulaw, "PCM mu-law / G.711 mu-law");
604 PCM_CODEC (PCM_S8, AV_SAMPLE_FMT_U8, pcm_s8, "PCM signed 8-bit");
605 PCM_CODEC (PCM_S8_PLANAR, AV_SAMPLE_FMT_U8P, pcm_s8_planar, "PCM signed 8-bit planar");
606 PCM_CODEC (PCM_S16BE, AV_SAMPLE_FMT_S16, pcm_s16be, "PCM signed 16-bit big-endian");
607 PCM_CODEC (PCM_S16BE_PLANAR, AV_SAMPLE_FMT_S16P,pcm_s16be_planar, "PCM signed 16-bit big-endian planar");
608 PCM_CODEC (PCM_S16LE, AV_SAMPLE_FMT_S16, pcm_s16le, "PCM signed 16-bit little-endian");
609 PCM_CODEC (PCM_S16LE_PLANAR, AV_SAMPLE_FMT_S16P,pcm_s16le_planar, "PCM signed 16-bit little-endian planar");
610 PCM_CODEC (PCM_S24BE, AV_SAMPLE_FMT_S32, pcm_s24be, "PCM signed 24-bit big-endian");
611 PCM_CODEC (PCM_S24DAUD, AV_SAMPLE_FMT_S16, pcm_s24daud, "PCM D-Cinema audio signed 24-bit");
612 PCM_CODEC (PCM_S24LE, AV_SAMPLE_FMT_S32, pcm_s24le, "PCM signed 24-bit little-endian");
613 PCM_CODEC (PCM_S24LE_PLANAR, AV_SAMPLE_FMT_S32P,pcm_s24le_planar, "PCM signed 24-bit little-endian planar");
614 PCM_CODEC (PCM_S32BE, AV_SAMPLE_FMT_S32, pcm_s32be, "PCM signed 32-bit big-endian");
615 PCM_CODEC (PCM_S32LE, AV_SAMPLE_FMT_S32, pcm_s32le, "PCM signed 32-bit little-endian");
616 PCM_CODEC (PCM_S32LE_PLANAR, AV_SAMPLE_FMT_S32P,pcm_s32le_planar, "PCM signed 32-bit little-endian planar");
617 PCM_CODEC (PCM_U8, AV_SAMPLE_FMT_U8, pcm_u8, "PCM unsigned 8-bit");
618 PCM_CODEC (PCM_U16BE, AV_SAMPLE_FMT_S16, pcm_u16be, "PCM unsigned 16-bit big-endian");
619 PCM_CODEC (PCM_U16LE, AV_SAMPLE_FMT_S16, pcm_u16le, "PCM unsigned 16-bit little-endian");
620 PCM_CODEC (PCM_U24BE, AV_SAMPLE_FMT_S32, pcm_u24be, "PCM unsigned 24-bit big-endian");
621 PCM_CODEC (PCM_U24LE, AV_SAMPLE_FMT_S32, pcm_u24le, "PCM unsigned 24-bit little-endian");
622 PCM_CODEC (PCM_U32BE, AV_SAMPLE_FMT_S32, pcm_u32be, "PCM unsigned 32-bit big-endian");
623 PCM_CODEC (PCM_U32LE, AV_SAMPLE_FMT_S32, pcm_u32le, "PCM unsigned 32-bit little-endian");
624 PCM_DECODER(PCM_ZORK, AV_SAMPLE_FMT_U8, pcm_zork, "PCM Zork");
625 
const struct AVCodec * codec
float v
const char * s
Definition: avisynth_c.h:668
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
Definition: error.h:59
This structure describes decoded (raw) audio or video data.
Definition: frame.h:76
static void pcm_alaw_tableinit(void)
Definition: pcm_tablegen.h:108
AVFrame * coded_frame
the picture in the bitstream
static void pcm_ulaw_tableinit(void)
Definition: pcm_tablegen.h:113
#define DECODE_PLANAR(size, endian, src, dst, n, shift, offset)
static av_cold int ulaw2linear(unsigned char u_val)
Definition: pcm_tablegen.h:58
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.
signed 16 bits
Definition: samplefmt.h:52
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.
void av_freep(void *arg)
Free a memory block which has been allocated with av_malloc(z)() or av_realloc() and set the pointer ...
Definition: mem.c:198
initialize output if(nPeaks >3)%at least 3 peaks in spectrum for trying to find f0 nf0peaks
short table[256]
enum AVSampleFormat sample_fmt
audio sample format
uint8_t
#define av_cold
Definition: attributes.h:78
AV_SAMPLE_FMT_U8
uint8_t * data
static uint8_t linear_to_ulaw[16384]
Definition: pcm_tablegen.h:82
signed 32 bits, planar
Definition: samplefmt.h:59
int bits_per_coded_sample
bits per sample/pixel from the demuxer (needed for huffyuv).
frame
Definition: stft.m:14
static int pcm_decode_frame(AVCodecContext *avctx, void *data, int *got_frame_ptr, AVPacket *avpkt)
enum AVCodecID id
#define PCM_CODEC(id, sample_fmt_, name, long_name_)
int av_get_bits_per_sample(enum AVCodecID codec_id)
Return codec bits per sample.
#define DECODE(size, endian, src, dst, n, shift, offset)
Read PCM samples macro.
Spectrum Plot time data
#define ENCODE_PLANAR(type, endian, dst, n, shift, offset)
void av_log(void *avcl, int level, const char *fmt,...)
Definition: log.c:246
external API header
static av_cold int pcm_encode_close(AVCodecContext *avctx)
signed 32 bits
Definition: samplefmt.h:53
AVFrame * avcodec_alloc_frame(void)
Allocate an AVFrame and set its fields to default values.
#define ENCODE(type, endian, src, dst, n, shift, offset)
Write PCM samples macro.
static av_cold int pcm_encode_init(AVCodecContext *avctx)
int bit_rate
the average bitrate
static av_cold int alaw2linear(unsigned char a_val)
Definition: pcm_tablegen.h:43
ret
Definition: avfilter.c:821
int32_t
#define AV_WN16A(p, v)
Definition: intreadwrite.h:526
static av_always_inline unsigned int bytestream_get_buffer(const uint8_t **b, uint8_t *dst, unsigned int size)
Definition: bytestream.h:328
int ff_alloc_packet2(AVCodecContext *avctx, AVPacket *avpkt, int size)
Check AVPacket size and/or allocate data.
int frame_size
Number of samples per channel in an audio frame.
struct PCMDecode PCMDecode
AVS_Value src
Definition: avisynth_c.h:523
enum AVCodecID codec_id
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.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:148
synthesis window for stochastic i
static av_cold int pcm_decode_init(AVCodecContext *avctx)
#define PCM_DECODER(id, sample_fmt, name, long_name)
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFilterBuffer structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later.That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another.Buffer references ownership and permissions
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
Definition: frame.h:87
common internal api header.
static double c[64]
static uint8_t linear_to_alaw[16384]
Definition: pcm_tablegen.h:81
static av_always_inline void bytestream_put_buffer(uint8_t **b, const uint8_t *src, unsigned int size)
Definition: bytestream.h:337
unsigned 8 bits, planar
Definition: samplefmt.h:57
int channels
number of audio channels
else dst[i][x+y *dst_stride[i]]
Definition: vf_mcdeint.c:160
signed 16 bits, planar
Definition: samplefmt.h:58
Filter the word “frame” indicates either a video frame or a group of audio samples
const uint8_t ff_reverse[256]
Definition: mathtables.c:72
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.
Definition: frame.h:117
This structure stores compressed data.
int nb_samples
number of audio samples (per channel) described by this frame
Definition: frame.h:127
for(j=16;j >0;--j)