vorbisdec.c
Go to the documentation of this file.
1 /**
2  * @file
3  * Vorbis I decoder
4  * @author Denes Balatoni ( dbalatoni programozo hu )
5  *
6  * This file is part of FFmpeg.
7  *
8  * FFmpeg is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Lesser General Public
10  * License as published by the Free Software Foundation; either
11  * version 2.1 of the License, or (at your option) any later version.
12  *
13  * FFmpeg is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16  * Lesser General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with FFmpeg; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21  */
22 
23 /**
24  * @file
25  * Vorbis I decoder
26  * @author Denes Balatoni ( dbalatoni programozo hu )
27  */
28 
29 #include <inttypes.h>
30 #include <math.h>
31 
32 #define BITSTREAM_READER_LE
33 #include "libavutil/float_dsp.h"
34 #include "libavutil/avassert.h"
35 #include "avcodec.h"
36 #include "get_bits.h"
37 #include "fft.h"
38 #include "fmtconvert.h"
39 #include "internal.h"
40 
41 #include "vorbis.h"
42 #include "vorbisdsp.h"
43 #include "xiph.h"
44 
45 #define V_NB_BITS 8
46 #define V_NB_BITS2 11
47 #define V_MAX_VLCS (1 << 16)
48 #define V_MAX_PARTITIONS (1 << 20)
49 
50 typedef struct {
55  float *codevectors;
56  unsigned int nb_bits;
58 
59 typedef union vorbis_floor_u vorbis_floor_data;
60 typedef struct vorbis_floor0_s vorbis_floor0;
61 typedef struct vorbis_floor1_s vorbis_floor1;
62 struct vorbis_context_s;
63 typedef
65  (struct vorbis_context_s *, vorbis_floor_data *, float *);
66 typedef struct {
70  struct vorbis_floor0_s {
72  uint16_t rate;
73  uint16_t bark_map_size;
74  int32_t *map[2];
75  uint32_t map_size[2];
80  float *lsp;
81  } t0;
82  struct vorbis_floor1_s {
84  uint8_t partition_class[32];
85  uint8_t class_dimensions[16];
86  uint8_t class_subclasses[16];
87  uint8_t class_masterbook[16];
88  int16_t subclass_books[16][8];
90  uint16_t x_list_dim;
92  } t1;
93  } data;
94 } vorbis_floor;
95 
96 typedef struct {
97  uint16_t type;
98  uint32_t begin;
99  uint32_t end;
100  unsigned partition_size;
103  int16_t books[64][8];
105  uint16_t ptns_to_read;
108 
109 typedef struct {
111  uint16_t coupling_steps;
115  uint8_t submap_floor[16];
116  uint8_t submap_residue[16];
118 
119 typedef struct {
121  uint16_t windowtype;
122  uint16_t transformtype;
124 } vorbis_mode;
125 
126 typedef struct vorbis_context_s {
132 
135  uint32_t version;
138  uint32_t bitrate_maximum;
139  uint32_t bitrate_nominal;
140  uint32_t bitrate_minimum;
141  uint32_t blocksize[2];
142  const float *win[2];
143  uint16_t codebook_count;
153  uint8_t mode_number; // mode number for the current packet
156  float *saved;
158 
159 /* Helper functions */
160 
161 #define BARK(x) \
162  (13.1f * atan(0.00074f * (x)) + 2.24f * atan(1.85e-8f * (x) * (x)) + 1e-4f * (x))
163 
164 static const char idx_err_str[] = "Index value %d out of range (0 - %d) for %s at %s:%i\n";
165 #define VALIDATE_INDEX(idx, limit) \
166  if (idx >= limit) {\
167  av_log(vc->avctx, AV_LOG_ERROR,\
168  idx_err_str,\
169  (int)(idx), (int)(limit - 1), #idx, __FILE__, __LINE__);\
170  return AVERROR_INVALIDDATA;\
171  }
172 #define GET_VALIDATED_INDEX(idx, bits, limit) \
173  {\
174  idx = get_bits(gb, bits);\
175  VALIDATE_INDEX(idx, limit)\
176  }
177 
178 static float vorbisfloat2float(unsigned val)
179 {
180  double mant = val & 0x1fffff;
181  long exp = (val & 0x7fe00000L) >> 21;
182  if (val & 0x80000000)
183  mant = -mant;
184  return ldexp(mant, exp - 20 - 768);
185 }
186 
187 
188 // Free all allocated memory -----------------------------------------
189 
190 static void vorbis_free(vorbis_context *vc)
191 {
192  int i;
193 
195  av_freep(&vc->saved);
196 
197  if (vc->residues)
198  for (i = 0; i < vc->residue_count; i++)
199  av_free(vc->residues[i].classifs);
200  av_freep(&vc->residues);
201  av_freep(&vc->modes);
202 
203  ff_mdct_end(&vc->mdct[0]);
204  ff_mdct_end(&vc->mdct[1]);
205 
206  if (vc->codebooks)
207  for (i = 0; i < vc->codebook_count; ++i) {
208  av_free(vc->codebooks[i].codevectors);
209  ff_free_vlc(&vc->codebooks[i].vlc);
210  }
211  av_freep(&vc->codebooks);
212 
213  if (vc->floors)
214  for (i = 0; i < vc->floor_count; ++i) {
215  if (vc->floors[i].floor_type == 0) {
216  av_free(vc->floors[i].data.t0.map[0]);
217  av_free(vc->floors[i].data.t0.map[1]);
218  av_free(vc->floors[i].data.t0.book_list);
219  av_free(vc->floors[i].data.t0.lsp);
220  } else {
221  av_free(vc->floors[i].data.t1.list);
222  }
223  }
224  av_freep(&vc->floors);
225 
226  if (vc->mappings)
227  for (i = 0; i < vc->mapping_count; ++i) {
228  av_free(vc->mappings[i].magnitude);
229  av_free(vc->mappings[i].angle);
230  av_free(vc->mappings[i].mux);
231  }
232  av_freep(&vc->mappings);
233 }
234 
235 // Parse setup header -------------------------------------------------
236 
237 // Process codebooks part
238 
240 {
241  unsigned cb;
242  uint8_t *tmp_vlc_bits = NULL;
243  uint32_t *tmp_vlc_codes = NULL;
244  GetBitContext *gb = &vc->gb;
245  uint16_t *codebook_multiplicands = NULL;
246  int ret = 0;
247 
248  vc->codebook_count = get_bits(gb, 8) + 1;
249 
250  av_dlog(NULL, " Codebooks: %d \n", vc->codebook_count);
251 
252  vc->codebooks = av_mallocz(vc->codebook_count * sizeof(*vc->codebooks));
253  tmp_vlc_bits = av_mallocz(V_MAX_VLCS * sizeof(*tmp_vlc_bits));
254  tmp_vlc_codes = av_mallocz(V_MAX_VLCS * sizeof(*tmp_vlc_codes));
255  codebook_multiplicands = av_malloc(V_MAX_VLCS * sizeof(*codebook_multiplicands));
256  if (!vc->codebooks ||
257  !tmp_vlc_bits || !tmp_vlc_codes || !codebook_multiplicands) {
258  ret = AVERROR(ENOMEM);
259  goto error;
260  }
261 
262  for (cb = 0; cb < vc->codebook_count; ++cb) {
263  vorbis_codebook *codebook_setup = &vc->codebooks[cb];
264  unsigned ordered, t, entries, used_entries = 0;
265 
266  av_dlog(NULL, " %u. Codebook\n", cb);
267 
268  if (get_bits(gb, 24) != 0x564342) {
270  " %u. Codebook setup data corrupt.\n", cb);
271  ret = AVERROR_INVALIDDATA;
272  goto error;
273  }
274 
275  codebook_setup->dimensions=get_bits(gb, 16);
276  if (codebook_setup->dimensions > 16 || codebook_setup->dimensions == 0) {
278  " %u. Codebook's dimension is invalid (%d).\n",
279  cb, codebook_setup->dimensions);
280  ret = AVERROR_INVALIDDATA;
281  goto error;
282  }
283  entries = get_bits(gb, 24);
284  if (entries > V_MAX_VLCS) {
286  " %u. Codebook has too many entries (%u).\n",
287  cb, entries);
288  ret = AVERROR_INVALIDDATA;
289  goto error;
290  }
291 
292  ordered = get_bits1(gb);
293 
294  av_dlog(NULL, " codebook_dimensions %d, codebook_entries %u\n",
295  codebook_setup->dimensions, entries);
296 
297  if (!ordered) {
298  unsigned ce, flag;
299  unsigned sparse = get_bits1(gb);
300 
301  av_dlog(NULL, " not ordered \n");
302 
303  if (sparse) {
304  av_dlog(NULL, " sparse \n");
305 
306  used_entries = 0;
307  for (ce = 0; ce < entries; ++ce) {
308  flag = get_bits1(gb);
309  if (flag) {
310  tmp_vlc_bits[ce] = get_bits(gb, 5) + 1;
311  ++used_entries;
312  } else
313  tmp_vlc_bits[ce] = 0;
314  }
315  } else {
316  av_dlog(NULL, " not sparse \n");
317 
318  used_entries = entries;
319  for (ce = 0; ce < entries; ++ce)
320  tmp_vlc_bits[ce] = get_bits(gb, 5) + 1;
321  }
322  } else {
323  unsigned current_entry = 0;
324  unsigned current_length = get_bits(gb, 5) + 1;
325 
326  av_dlog(NULL, " ordered, current length: %u\n", current_length); //FIXME
327 
328  used_entries = entries;
329  for (; current_entry < used_entries && current_length <= 32; ++current_length) {
330  unsigned i, number;
331 
332  av_dlog(NULL, " number bits: %u ", ilog(entries - current_entry));
333 
334  number = get_bits(gb, ilog(entries - current_entry));
335 
336  av_dlog(NULL, " number: %u\n", number);
337 
338  for (i = current_entry; i < number+current_entry; ++i)
339  if (i < used_entries)
340  tmp_vlc_bits[i] = current_length;
341 
342  current_entry+=number;
343  }
344  if (current_entry>used_entries) {
345  av_log(vc->avctx, AV_LOG_ERROR, " More codelengths than codes in codebook. \n");
346  ret = AVERROR_INVALIDDATA;
347  goto error;
348  }
349  }
350 
351  codebook_setup->lookup_type = get_bits(gb, 4);
352 
353  av_dlog(NULL, " lookup type: %d : %s \n", codebook_setup->lookup_type,
354  codebook_setup->lookup_type ? "vq" : "no lookup");
355 
356 // If the codebook is used for (inverse) VQ, calculate codevectors.
357 
358  if (codebook_setup->lookup_type == 1) {
359  unsigned i, j, k;
360  unsigned codebook_lookup_values = ff_vorbis_nth_root(entries, codebook_setup->dimensions);
361 
362  float codebook_minimum_value = vorbisfloat2float(get_bits_long(gb, 32));
363  float codebook_delta_value = vorbisfloat2float(get_bits_long(gb, 32));
364  unsigned codebook_value_bits = get_bits(gb, 4) + 1;
365  unsigned codebook_sequence_p = get_bits1(gb);
366 
367  av_dlog(NULL, " We expect %d numbers for building the codevectors. \n",
368  codebook_lookup_values);
369  av_dlog(NULL, " delta %f minmum %f \n",
370  codebook_delta_value, codebook_minimum_value);
371 
372  for (i = 0; i < codebook_lookup_values; ++i) {
373  codebook_multiplicands[i] = get_bits(gb, codebook_value_bits);
374 
375  av_dlog(NULL, " multiplicands*delta+minmum : %e \n",
376  (float)codebook_multiplicands[i] * codebook_delta_value + codebook_minimum_value);
377  av_dlog(NULL, " multiplicand %u\n", codebook_multiplicands[i]);
378  }
379 
380 // Weed out unused vlcs and build codevector vector
381  codebook_setup->codevectors = used_entries ? av_mallocz(used_entries *
382  codebook_setup->dimensions *
383  sizeof(*codebook_setup->codevectors))
384  : NULL;
385  for (j = 0, i = 0; i < entries; ++i) {
386  unsigned dim = codebook_setup->dimensions;
387 
388  if (tmp_vlc_bits[i]) {
389  float last = 0.0;
390  unsigned lookup_offset = i;
391 
392  av_dlog(vc->avctx, "Lookup offset %u ,", i);
393 
394  for (k = 0; k < dim; ++k) {
395  unsigned multiplicand_offset = lookup_offset % codebook_lookup_values;
396  codebook_setup->codevectors[j * dim + k] = codebook_multiplicands[multiplicand_offset] * codebook_delta_value + codebook_minimum_value + last;
397  if (codebook_sequence_p)
398  last = codebook_setup->codevectors[j * dim + k];
399  lookup_offset/=codebook_lookup_values;
400  }
401  tmp_vlc_bits[j] = tmp_vlc_bits[i];
402 
403  av_dlog(vc->avctx, "real lookup offset %u, vector: ", j);
404  for (k = 0; k < dim; ++k)
405  av_dlog(vc->avctx, " %f ",
406  codebook_setup->codevectors[j * dim + k]);
407  av_dlog(vc->avctx, "\n");
408 
409  ++j;
410  }
411  }
412  if (j != used_entries) {
413  av_log(vc->avctx, AV_LOG_ERROR, "Bug in codevector vector building code. \n");
414  ret = AVERROR_INVALIDDATA;
415  goto error;
416  }
417  entries = used_entries;
418  } else if (codebook_setup->lookup_type >= 2) {
419  av_log(vc->avctx, AV_LOG_ERROR, "Codebook lookup type not supported. \n");
420  ret = AVERROR_INVALIDDATA;
421  goto error;
422  }
423 
424 // Initialize VLC table
425  if (ff_vorbis_len2vlc(tmp_vlc_bits, tmp_vlc_codes, entries)) {
426  av_log(vc->avctx, AV_LOG_ERROR, " Invalid code lengths while generating vlcs. \n");
427  ret = AVERROR_INVALIDDATA;
428  goto error;
429  }
430  codebook_setup->maxdepth = 0;
431  for (t = 0; t < entries; ++t)
432  if (tmp_vlc_bits[t] >= codebook_setup->maxdepth)
433  codebook_setup->maxdepth = tmp_vlc_bits[t];
434 
435  if (codebook_setup->maxdepth > 3 * V_NB_BITS)
436  codebook_setup->nb_bits = V_NB_BITS2;
437  else
438  codebook_setup->nb_bits = V_NB_BITS;
439 
440  codebook_setup->maxdepth = (codebook_setup->maxdepth+codebook_setup->nb_bits - 1) / codebook_setup->nb_bits;
441 
442  if ((ret = init_vlc(&codebook_setup->vlc, codebook_setup->nb_bits,
443  entries, tmp_vlc_bits, sizeof(*tmp_vlc_bits),
444  sizeof(*tmp_vlc_bits), tmp_vlc_codes,
445  sizeof(*tmp_vlc_codes), sizeof(*tmp_vlc_codes),
446  INIT_VLC_LE))) {
447  av_log(vc->avctx, AV_LOG_ERROR, " Error generating vlc tables. \n");
448  goto error;
449  }
450  }
451 
452  av_free(tmp_vlc_bits);
453  av_free(tmp_vlc_codes);
454  av_free(codebook_multiplicands);
455  return 0;
456 
457 // Error:
458 error:
459  av_free(tmp_vlc_bits);
460  av_free(tmp_vlc_codes);
461  av_free(codebook_multiplicands);
462  return ret;
463 }
464 
465 // Process time domain transforms part (unused in Vorbis I)
466 
468 {
469  GetBitContext *gb = &vc->gb;
470  unsigned i, vorbis_time_count = get_bits(gb, 6) + 1;
471 
472  for (i = 0; i < vorbis_time_count; ++i) {
473  unsigned vorbis_tdtransform = get_bits(gb, 16);
474 
475  av_dlog(NULL, " Vorbis time domain transform %u: %u\n",
476  vorbis_time_count, vorbis_tdtransform);
477 
478  if (vorbis_tdtransform) {
479  av_log(vc->avctx, AV_LOG_ERROR, "Vorbis time domain transform data nonzero. \n");
480  return AVERROR_INVALIDDATA;
481  }
482  }
483  return 0;
484 }
485 
486 // Process floors part
487 
488 static int vorbis_floor0_decode(vorbis_context *vc,
489  vorbis_floor_data *vfu, float *vec);
490 static int create_map(vorbis_context *vc, unsigned floor_number);
491 static int vorbis_floor1_decode(vorbis_context *vc,
492  vorbis_floor_data *vfu, float *vec);
494 {
495  GetBitContext *gb = &vc->gb;
496  int i, j, k, ret;
497 
498  vc->floor_count = get_bits(gb, 6) + 1;
499 
500  vc->floors = av_mallocz(vc->floor_count * sizeof(*vc->floors));
501  if (!vc->floors)
502  return AVERROR(ENOMEM);
503 
504  for (i = 0; i < vc->floor_count; ++i) {
505  vorbis_floor *floor_setup = &vc->floors[i];
506 
507  floor_setup->floor_type = get_bits(gb, 16);
508 
509  av_dlog(NULL, " %d. floor type %d \n", i, floor_setup->floor_type);
510 
511  if (floor_setup->floor_type == 1) {
512  int maximum_class = -1;
513  unsigned rangebits, rangemax, floor1_values = 2;
514 
515  floor_setup->decode = vorbis_floor1_decode;
516 
517  floor_setup->data.t1.partitions = get_bits(gb, 5);
518 
519  av_dlog(NULL, " %d.floor: %d partitions \n",
520  i, floor_setup->data.t1.partitions);
521 
522  for (j = 0; j < floor_setup->data.t1.partitions; ++j) {
523  floor_setup->data.t1.partition_class[j] = get_bits(gb, 4);
524  if (floor_setup->data.t1.partition_class[j] > maximum_class)
525  maximum_class = floor_setup->data.t1.partition_class[j];
526 
527  av_dlog(NULL, " %d. floor %d partition class %d \n",
528  i, j, floor_setup->data.t1.partition_class[j]);
529 
530  }
531 
532  av_dlog(NULL, " maximum class %d \n", maximum_class);
533 
534  for (j = 0; j <= maximum_class; ++j) {
535  floor_setup->data.t1.class_dimensions[j] = get_bits(gb, 3) + 1;
536  floor_setup->data.t1.class_subclasses[j] = get_bits(gb, 2);
537 
538  av_dlog(NULL, " %d floor %d class dim: %d subclasses %d \n", i, j,
539  floor_setup->data.t1.class_dimensions[j],
540  floor_setup->data.t1.class_subclasses[j]);
541 
542  if (floor_setup->data.t1.class_subclasses[j]) {
544 
545  av_dlog(NULL, " masterbook: %d \n", floor_setup->data.t1.class_masterbook[j]);
546  }
547 
548  for (k = 0; k < (1 << floor_setup->data.t1.class_subclasses[j]); ++k) {
549  int16_t bits = get_bits(gb, 8) - 1;
550  if (bits != -1)
551  VALIDATE_INDEX(bits, vc->codebook_count)
552  floor_setup->data.t1.subclass_books[j][k] = bits;
553 
554  av_dlog(NULL, " book %d. : %d \n", k, floor_setup->data.t1.subclass_books[j][k]);
555  }
556  }
557 
558  floor_setup->data.t1.multiplier = get_bits(gb, 2) + 1;
559  floor_setup->data.t1.x_list_dim = 2;
560 
561  for (j = 0; j < floor_setup->data.t1.partitions; ++j)
562  floor_setup->data.t1.x_list_dim+=floor_setup->data.t1.class_dimensions[floor_setup->data.t1.partition_class[j]];
563 
564  floor_setup->data.t1.list = av_mallocz(floor_setup->data.t1.x_list_dim *
565  sizeof(*floor_setup->data.t1.list));
566  if (!floor_setup->data.t1.list)
567  return AVERROR(ENOMEM);
568 
569  rangebits = get_bits(gb, 4);
570  rangemax = (1 << rangebits);
571  if (rangemax > vc->blocksize[1] / 2) {
573  "Floor value is too large for blocksize: %u (%"PRIu32")\n",
574  rangemax, vc->blocksize[1] / 2);
575  return AVERROR_INVALIDDATA;
576  }
577  floor_setup->data.t1.list[0].x = 0;
578  floor_setup->data.t1.list[1].x = rangemax;
579 
580  for (j = 0; j < floor_setup->data.t1.partitions; ++j) {
581  for (k = 0; k < floor_setup->data.t1.class_dimensions[floor_setup->data.t1.partition_class[j]]; ++k, ++floor1_values) {
582  floor_setup->data.t1.list[floor1_values].x = get_bits(gb, rangebits);
583 
584  av_dlog(NULL, " %u. floor1 Y coord. %d\n", floor1_values,
585  floor_setup->data.t1.list[floor1_values].x);
586  }
587  }
588 
589 // Precalculate order of x coordinates - needed for decode
591  floor_setup->data.t1.list,
592  floor_setup->data.t1.x_list_dim)) {
593  return AVERROR_INVALIDDATA;
594  }
595  } else if (floor_setup->floor_type == 0) {
596  unsigned max_codebook_dim = 0;
597 
598  floor_setup->decode = vorbis_floor0_decode;
599 
600  floor_setup->data.t0.order = get_bits(gb, 8);
601  if (!floor_setup->data.t0.order) {
602  av_log(vc->avctx, AV_LOG_ERROR, "Floor 0 order is 0.\n");
603  return AVERROR_INVALIDDATA;
604  }
605  floor_setup->data.t0.rate = get_bits(gb, 16);
606  if (!floor_setup->data.t0.rate) {
607  av_log(vc->avctx, AV_LOG_ERROR, "Floor 0 rate is 0.\n");
608  return AVERROR_INVALIDDATA;
609  }
610  floor_setup->data.t0.bark_map_size = get_bits(gb, 16);
611  if (!floor_setup->data.t0.bark_map_size) {
613  "Floor 0 bark map size is 0.\n");
614  return AVERROR_INVALIDDATA;
615  }
616  floor_setup->data.t0.amplitude_bits = get_bits(gb, 6);
617  floor_setup->data.t0.amplitude_offset = get_bits(gb, 8);
618  floor_setup->data.t0.num_books = get_bits(gb, 4) + 1;
619 
620  /* allocate mem for booklist */
621  floor_setup->data.t0.book_list =
622  av_malloc(floor_setup->data.t0.num_books);
623  if (!floor_setup->data.t0.book_list)
624  return AVERROR(ENOMEM);
625  /* read book indexes */
626  {
627  int idx;
628  unsigned book_idx;
629  for (idx = 0; idx < floor_setup->data.t0.num_books; ++idx) {
630  GET_VALIDATED_INDEX(book_idx, 8, vc->codebook_count)
631  floor_setup->data.t0.book_list[idx] = book_idx;
632  if (vc->codebooks[book_idx].dimensions > max_codebook_dim)
633  max_codebook_dim = vc->codebooks[book_idx].dimensions;
634  }
635  }
636 
637  if ((ret = create_map(vc, i)) < 0)
638  return ret;
639 
640  /* codebook dim is for padding if codebook dim doesn't *
641  * divide order+1 then we need to read more data */
642  floor_setup->data.t0.lsp =
643  av_malloc((floor_setup->data.t0.order + 1 + max_codebook_dim)
644  * sizeof(*floor_setup->data.t0.lsp));
645  if (!floor_setup->data.t0.lsp)
646  return AVERROR(ENOMEM);
647 
648  /* debug output parsed headers */
649  av_dlog(NULL, "floor0 order: %u\n", floor_setup->data.t0.order);
650  av_dlog(NULL, "floor0 rate: %u\n", floor_setup->data.t0.rate);
651  av_dlog(NULL, "floor0 bark map size: %u\n",
652  floor_setup->data.t0.bark_map_size);
653  av_dlog(NULL, "floor0 amplitude bits: %u\n",
654  floor_setup->data.t0.amplitude_bits);
655  av_dlog(NULL, "floor0 amplitude offset: %u\n",
656  floor_setup->data.t0.amplitude_offset);
657  av_dlog(NULL, "floor0 number of books: %u\n",
658  floor_setup->data.t0.num_books);
659  av_dlog(NULL, "floor0 book list pointer: %p\n",
660  floor_setup->data.t0.book_list);
661  {
662  int idx;
663  for (idx = 0; idx < floor_setup->data.t0.num_books; ++idx) {
664  av_dlog(NULL, " Book %d: %u\n", idx + 1,
665  floor_setup->data.t0.book_list[idx]);
666  }
667  }
668  } else {
669  av_log(vc->avctx, AV_LOG_ERROR, "Invalid floor type!\n");
670  return AVERROR_INVALIDDATA;
671  }
672  }
673  return 0;
674 }
675 
676 // Process residues part
677 
679 {
680  GetBitContext *gb = &vc->gb;
681  unsigned i, j, k;
682 
683  vc->residue_count = get_bits(gb, 6)+1;
684  vc->residues = av_mallocz(vc->residue_count * sizeof(*vc->residues));
685  if (!vc->residues)
686  return AVERROR(ENOMEM);
687 
688  av_dlog(NULL, " There are %d residues. \n", vc->residue_count);
689 
690  for (i = 0; i < vc->residue_count; ++i) {
691  vorbis_residue *res_setup = &vc->residues[i];
692  uint8_t cascade[64];
693  unsigned high_bits, low_bits;
694 
695  res_setup->type = get_bits(gb, 16);
696 
697  av_dlog(NULL, " %u. residue type %d\n", i, res_setup->type);
698 
699  res_setup->begin = get_bits(gb, 24);
700  res_setup->end = get_bits(gb, 24);
701  res_setup->partition_size = get_bits(gb, 24) + 1;
702  /* Validations to prevent a buffer overflow later. */
703  if (res_setup->begin>res_setup->end ||
704  res_setup->end > (res_setup->type == 2 ? vc->audio_channels : 1) * vc->blocksize[1] / 2 ||
705  (res_setup->end-res_setup->begin) / res_setup->partition_size > V_MAX_PARTITIONS) {
707  "partition out of bounds: type, begin, end, size, blocksize: %"PRIu16", %"PRIu32", %"PRIu32", %u, %"PRIu32"\n",
708  res_setup->type, res_setup->begin, res_setup->end,
709  res_setup->partition_size, vc->blocksize[1] / 2);
710  return AVERROR_INVALIDDATA;
711  }
712 
713  res_setup->classifications = get_bits(gb, 6) + 1;
714  GET_VALIDATED_INDEX(res_setup->classbook, 8, vc->codebook_count)
715 
716  res_setup->ptns_to_read =
717  (res_setup->end - res_setup->begin) / res_setup->partition_size;
718  res_setup->classifs = av_malloc(res_setup->ptns_to_read *
719  vc->audio_channels *
720  sizeof(*res_setup->classifs));
721  if (!res_setup->classifs)
722  return AVERROR(ENOMEM);
723 
724  av_dlog(NULL, " begin %d end %d part.size %d classif.s %d classbook %d \n",
725  res_setup->begin, res_setup->end, res_setup->partition_size,
726  res_setup->classifications, res_setup->classbook);
727 
728  for (j = 0; j < res_setup->classifications; ++j) {
729  high_bits = 0;
730  low_bits = get_bits(gb, 3);
731  if (get_bits1(gb))
732  high_bits = get_bits(gb, 5);
733  cascade[j] = (high_bits << 3) + low_bits;
734 
735  av_dlog(NULL, " %u class cascade depth: %d\n", j, ilog(cascade[j]));
736  }
737 
738  res_setup->maxpass = 0;
739  for (j = 0; j < res_setup->classifications; ++j) {
740  for (k = 0; k < 8; ++k) {
741  if (cascade[j]&(1 << k)) {
742  GET_VALIDATED_INDEX(res_setup->books[j][k], 8, vc->codebook_count)
743 
744  av_dlog(NULL, " %u class cascade depth %u book: %d\n",
745  j, k, res_setup->books[j][k]);
746 
747  if (k>res_setup->maxpass)
748  res_setup->maxpass = k;
749  } else {
750  res_setup->books[j][k] = -1;
751  }
752  }
753  }
754  }
755  return 0;
756 }
757 
758 // Process mappings part
759 
761 {
762  GetBitContext *gb = &vc->gb;
763  unsigned i, j;
764 
765  vc->mapping_count = get_bits(gb, 6)+1;
766  vc->mappings = av_mallocz(vc->mapping_count * sizeof(*vc->mappings));
767  if (!vc->mappings)
768  return AVERROR(ENOMEM);
769 
770  av_dlog(NULL, " There are %d mappings. \n", vc->mapping_count);
771 
772  for (i = 0; i < vc->mapping_count; ++i) {
773  vorbis_mapping *mapping_setup = &vc->mappings[i];
774 
775  if (get_bits(gb, 16)) {
776  av_log(vc->avctx, AV_LOG_ERROR, "Other mappings than type 0 are not compliant with the Vorbis I specification. \n");
777  return AVERROR_INVALIDDATA;
778  }
779  if (get_bits1(gb)) {
780  mapping_setup->submaps = get_bits(gb, 4) + 1;
781  } else {
782  mapping_setup->submaps = 1;
783  }
784 
785  if (get_bits1(gb)) {
786  mapping_setup->coupling_steps = get_bits(gb, 8) + 1;
787  mapping_setup->magnitude = av_mallocz(mapping_setup->coupling_steps *
788  sizeof(*mapping_setup->magnitude));
789  mapping_setup->angle = av_mallocz(mapping_setup->coupling_steps *
790  sizeof(*mapping_setup->angle));
791  if (!mapping_setup->angle || !mapping_setup->magnitude)
792  return AVERROR(ENOMEM);
793 
794  for (j = 0; j < mapping_setup->coupling_steps; ++j) {
795  GET_VALIDATED_INDEX(mapping_setup->magnitude[j], ilog(vc->audio_channels - 1), vc->audio_channels)
796  GET_VALIDATED_INDEX(mapping_setup->angle[j], ilog(vc->audio_channels - 1), vc->audio_channels)
797  }
798  } else {
799  mapping_setup->coupling_steps = 0;
800  }
801 
802  av_dlog(NULL, " %u mapping coupling steps: %d\n",
803  i, mapping_setup->coupling_steps);
804 
805  if (get_bits(gb, 2)) {
806  av_log(vc->avctx, AV_LOG_ERROR, "%u. mapping setup data invalid.\n", i);
807  return AVERROR_INVALIDDATA; // following spec.
808  }
809 
810  if (mapping_setup->submaps>1) {
811  mapping_setup->mux = av_mallocz(vc->audio_channels *
812  sizeof(*mapping_setup->mux));
813  if (!mapping_setup->mux)
814  return AVERROR(ENOMEM);
815 
816  for (j = 0; j < vc->audio_channels; ++j)
817  mapping_setup->mux[j] = get_bits(gb, 4);
818  }
819 
820  for (j = 0; j < mapping_setup->submaps; ++j) {
821  skip_bits(gb, 8); // FIXME check?
822  GET_VALIDATED_INDEX(mapping_setup->submap_floor[j], 8, vc->floor_count)
823  GET_VALIDATED_INDEX(mapping_setup->submap_residue[j], 8, vc->residue_count)
824 
825  av_dlog(NULL, " %u mapping %u submap : floor %d, residue %d\n", i, j,
826  mapping_setup->submap_floor[j],
827  mapping_setup->submap_residue[j]);
828  }
829  }
830  return 0;
831 }
832 
833 // Process modes part
834 
835 static int create_map(vorbis_context *vc, unsigned floor_number)
836 {
837  vorbis_floor *floors = vc->floors;
838  vorbis_floor0 *vf;
839  int idx;
840  int blockflag, n;
841  int32_t *map;
842 
843  for (blockflag = 0; blockflag < 2; ++blockflag) {
844  n = vc->blocksize[blockflag] / 2;
845  floors[floor_number].data.t0.map[blockflag] =
846  av_malloc((n + 1) * sizeof(int32_t)); // n + sentinel
847  if (!floors[floor_number].data.t0.map[blockflag])
848  return AVERROR(ENOMEM);
849 
850  map = floors[floor_number].data.t0.map[blockflag];
851  vf = &floors[floor_number].data.t0;
852 
853  for (idx = 0; idx < n; ++idx) {
854  map[idx] = floor(BARK((vf->rate * idx) / (2.0f * n)) *
855  (vf->bark_map_size / BARK(vf->rate / 2.0f)));
856  if (vf->bark_map_size-1 < map[idx])
857  map[idx] = vf->bark_map_size - 1;
858  }
859  map[n] = -1;
860  vf->map_size[blockflag] = n;
861  }
862 
863  for (idx = 0; idx <= n; ++idx) {
864  av_dlog(NULL, "floor0 map: map at pos %d is %d\n", idx, map[idx]);
865  }
866 
867  return 0;
868 }
869 
871 {
872  GetBitContext *gb = &vc->gb;
873  unsigned i;
874 
875  vc->mode_count = get_bits(gb, 6) + 1;
876  vc->modes = av_mallocz(vc->mode_count * sizeof(*vc->modes));
877  if (!vc->modes)
878  return AVERROR(ENOMEM);
879 
880  av_dlog(NULL, " There are %d modes.\n", vc->mode_count);
881 
882  for (i = 0; i < vc->mode_count; ++i) {
883  vorbis_mode *mode_setup = &vc->modes[i];
884 
885  mode_setup->blockflag = get_bits1(gb);
886  mode_setup->windowtype = get_bits(gb, 16); //FIXME check
887  mode_setup->transformtype = get_bits(gb, 16); //FIXME check
888  GET_VALIDATED_INDEX(mode_setup->mapping, 8, vc->mapping_count);
889 
890  av_dlog(NULL, " %u mode: blockflag %d, windowtype %d, transformtype %d, mapping %d\n",
891  i, mode_setup->blockflag, mode_setup->windowtype,
892  mode_setup->transformtype, mode_setup->mapping);
893  }
894  return 0;
895 }
896 
897 // Process the whole setup header using the functions above
898 
900 {
901  GetBitContext *gb = &vc->gb;
902  int ret;
903 
904  if ((get_bits(gb, 8) != 'v') || (get_bits(gb, 8) != 'o') ||
905  (get_bits(gb, 8) != 'r') || (get_bits(gb, 8) != 'b') ||
906  (get_bits(gb, 8) != 'i') || (get_bits(gb, 8) != 's')) {
907  av_log(vc->avctx, AV_LOG_ERROR, " Vorbis setup header packet corrupt (no vorbis signature). \n");
908  return AVERROR_INVALIDDATA;
909  }
910 
911  if ((ret = vorbis_parse_setup_hdr_codebooks(vc))) {
912  av_log(vc->avctx, AV_LOG_ERROR, " Vorbis setup header packet corrupt (codebooks). \n");
913  return ret;
914  }
915  if ((ret = vorbis_parse_setup_hdr_tdtransforms(vc))) {
916  av_log(vc->avctx, AV_LOG_ERROR, " Vorbis setup header packet corrupt (time domain transforms). \n");
917  return ret;
918  }
919  if ((ret = vorbis_parse_setup_hdr_floors(vc))) {
920  av_log(vc->avctx, AV_LOG_ERROR, " Vorbis setup header packet corrupt (floors). \n");
921  return ret;
922  }
923  if ((ret = vorbis_parse_setup_hdr_residues(vc))) {
924  av_log(vc->avctx, AV_LOG_ERROR, " Vorbis setup header packet corrupt (residues). \n");
925  return ret;
926  }
927  if ((ret = vorbis_parse_setup_hdr_mappings(vc))) {
928  av_log(vc->avctx, AV_LOG_ERROR, " Vorbis setup header packet corrupt (mappings). \n");
929  return ret;
930  }
931  if ((ret = vorbis_parse_setup_hdr_modes(vc))) {
932  av_log(vc->avctx, AV_LOG_ERROR, " Vorbis setup header packet corrupt (modes). \n");
933  return ret;
934  }
935  if (!get_bits1(gb)) {
936  av_log(vc->avctx, AV_LOG_ERROR, " Vorbis setup header packet corrupt (framing flag). \n");
937  return AVERROR_INVALIDDATA; // framing flag bit unset error
938  }
939 
940  return 0;
941 }
942 
943 // Process the identification header
944 
946 {
947  GetBitContext *gb = &vc->gb;
948  unsigned bl0, bl1;
949 
950  if ((get_bits(gb, 8) != 'v') || (get_bits(gb, 8) != 'o') ||
951  (get_bits(gb, 8) != 'r') || (get_bits(gb, 8) != 'b') ||
952  (get_bits(gb, 8) != 'i') || (get_bits(gb, 8) != 's')) {
953  av_log(vc->avctx, AV_LOG_ERROR, " Vorbis id header packet corrupt (no vorbis signature). \n");
954  return AVERROR_INVALIDDATA;
955  }
956 
957  vc->version = get_bits_long(gb, 32); //FIXME check 0
958  vc->audio_channels = get_bits(gb, 8);
959  if (vc->audio_channels <= 0) {
960  av_log(vc->avctx, AV_LOG_ERROR, "Invalid number of channels\n");
961  return AVERROR_INVALIDDATA;
962  }
963  vc->audio_samplerate = get_bits_long(gb, 32);
964  if (vc->audio_samplerate <= 0) {
965  av_log(vc->avctx, AV_LOG_ERROR, "Invalid samplerate\n");
966  return AVERROR_INVALIDDATA;
967  }
968  vc->bitrate_maximum = get_bits_long(gb, 32);
969  vc->bitrate_nominal = get_bits_long(gb, 32);
970  vc->bitrate_minimum = get_bits_long(gb, 32);
971  bl0 = get_bits(gb, 4);
972  bl1 = get_bits(gb, 4);
973  if (bl0 > 13 || bl0 < 6 || bl1 > 13 || bl1 < 6 || bl1 < bl0) {
974  av_log(vc->avctx, AV_LOG_ERROR, " Vorbis id header packet corrupt (illegal blocksize). \n");
975  return AVERROR_INVALIDDATA;
976  }
977  vc->blocksize[0] = (1 << bl0);
978  vc->blocksize[1] = (1 << bl1);
979  vc->win[0] = ff_vorbis_vwin[bl0 - 6];
980  vc->win[1] = ff_vorbis_vwin[bl1 - 6];
981 
982  if ((get_bits1(gb)) == 0) {
983  av_log(vc->avctx, AV_LOG_ERROR, " Vorbis id header packet corrupt (framing flag not set). \n");
984  return AVERROR_INVALIDDATA;
985  }
986 
987  vc->channel_residues = av_malloc((vc->blocksize[1] / 2) * vc->audio_channels * sizeof(*vc->channel_residues));
988  vc->saved = av_mallocz((vc->blocksize[1] / 4) * vc->audio_channels * sizeof(*vc->saved));
989  if (!vc->channel_residues || !vc->saved)
990  return AVERROR(ENOMEM);
991 
992  vc->previous_window = 0;
993 
994  ff_mdct_init(&vc->mdct[0], bl0, 1, -1.0);
995  ff_mdct_init(&vc->mdct[1], bl1, 1, -1.0);
996 
997  av_dlog(NULL, " vorbis version %d \n audio_channels %d \n audio_samplerate %d \n bitrate_max %d \n bitrate_nom %d \n bitrate_min %d \n blk_0 %d blk_1 %d \n ",
999 
1000 /*
1001  BLK = vc->blocksize[0];
1002  for (i = 0; i < BLK / 2; ++i) {
1003  vc->win[0][i] = sin(0.5*3.14159265358*(sin(((float)i + 0.5) / (float)BLK*3.14159265358))*(sin(((float)i + 0.5) / (float)BLK*3.14159265358)));
1004  }
1005 */
1006 
1007  return 0;
1008 }
1009 
1010 // Process the extradata using the functions above (identification header, setup header)
1011 
1013 {
1014  vorbis_context *vc = avctx->priv_data;
1015  uint8_t *headers = avctx->extradata;
1016  int headers_len = avctx->extradata_size;
1017  uint8_t *header_start[3];
1018  int header_len[3];
1019  GetBitContext *gb = &vc->gb;
1020  int hdr_type, ret;
1021 
1022  vc->avctx = avctx;
1023  ff_vorbisdsp_init(&vc->dsp);
1025  ff_fmt_convert_init(&vc->fmt_conv, avctx);
1026 
1027  avctx->sample_fmt = AV_SAMPLE_FMT_FLTP;
1028 
1029  if (!headers_len) {
1030  av_log(avctx, AV_LOG_ERROR, "Extradata missing.\n");
1031  return AVERROR_INVALIDDATA;
1032  }
1033 
1034  if ((ret = avpriv_split_xiph_headers(headers, headers_len, 30, header_start, header_len)) < 0) {
1035  av_log(avctx, AV_LOG_ERROR, "Extradata corrupt.\n");
1036  return ret;
1037  }
1038 
1039  init_get_bits(gb, header_start[0], header_len[0]*8);
1040  hdr_type = get_bits(gb, 8);
1041  if (hdr_type != 1) {
1042  av_log(avctx, AV_LOG_ERROR, "First header is not the id header.\n");
1043  return AVERROR_INVALIDDATA;
1044  }
1045  if ((ret = vorbis_parse_id_hdr(vc))) {
1046  av_log(avctx, AV_LOG_ERROR, "Id header corrupt.\n");
1047  vorbis_free(vc);
1048  return ret;
1049  }
1050 
1051  init_get_bits(gb, header_start[2], header_len[2]*8);
1052  hdr_type = get_bits(gb, 8);
1053  if (hdr_type != 5) {
1054  av_log(avctx, AV_LOG_ERROR, "Third header is not the setup header.\n");
1055  vorbis_free(vc);
1056  return AVERROR_INVALIDDATA;
1057  }
1058  if ((ret = vorbis_parse_setup_hdr(vc))) {
1059  av_log(avctx, AV_LOG_ERROR, "Setup header corrupt.\n");
1060  vorbis_free(vc);
1061  return ret;
1062  }
1063 
1064  if (vc->audio_channels > 8)
1065  avctx->channel_layout = 0;
1066  else
1068 
1069  avctx->channels = vc->audio_channels;
1070  avctx->sample_rate = vc->audio_samplerate;
1071 
1072  return 0;
1073 }
1074 
1075 // Decode audiopackets -------------------------------------------------
1076 
1077 // Read and decode floor
1078 
1080  vorbis_floor_data *vfu, float *vec)
1081 {
1082  vorbis_floor0 *vf = &vfu->t0;
1083  float *lsp = vf->lsp;
1084  unsigned amplitude, book_idx;
1085  unsigned blockflag = vc->modes[vc->mode_number].blockflag;
1086 
1087  if (!vf->amplitude_bits)
1088  return 1;
1089 
1090  amplitude = get_bits(&vc->gb, vf->amplitude_bits);
1091  if (amplitude > 0) {
1092  float last = 0;
1093  unsigned idx, lsp_len = 0;
1094  vorbis_codebook codebook;
1095 
1096  book_idx = get_bits(&vc->gb, ilog(vf->num_books));
1097  if (book_idx >= vf->num_books) {
1098  av_log(vc->avctx, AV_LOG_ERROR, "floor0 dec: booknumber too high!\n");
1099  book_idx = 0;
1100  }
1101  av_dlog(NULL, "floor0 dec: booknumber: %u\n", book_idx);
1102  codebook = vc->codebooks[vf->book_list[book_idx]];
1103  /* Invalid codebook! */
1104  if (!codebook.codevectors)
1105  return AVERROR_INVALIDDATA;
1106 
1107  while (lsp_len<vf->order) {
1108  int vec_off;
1109 
1110  av_dlog(NULL, "floor0 dec: book dimension: %d\n", codebook.dimensions);
1111  av_dlog(NULL, "floor0 dec: maximum depth: %d\n", codebook.maxdepth);
1112  /* read temp vector */
1113  vec_off = get_vlc2(&vc->gb, codebook.vlc.table,
1114  codebook.nb_bits, codebook.maxdepth)
1115  * codebook.dimensions;
1116  av_dlog(NULL, "floor0 dec: vector offset: %d\n", vec_off);
1117  /* copy each vector component and add last to it */
1118  for (idx = 0; idx < codebook.dimensions; ++idx)
1119  lsp[lsp_len+idx] = codebook.codevectors[vec_off+idx] + last;
1120  last = lsp[lsp_len+idx-1]; /* set last to last vector component */
1121 
1122  lsp_len += codebook.dimensions;
1123  }
1124  /* DEBUG: output lsp coeffs */
1125  {
1126  int idx;
1127  for (idx = 0; idx < lsp_len; ++idx)
1128  av_dlog(NULL, "floor0 dec: coeff at %d is %f\n", idx, lsp[idx]);
1129  }
1130 
1131  /* synthesize floor output vector */
1132  {
1133  int i;
1134  int order = vf->order;
1135  float wstep = M_PI / vf->bark_map_size;
1136 
1137  for (i = 0; i < order; i++)
1138  lsp[i] = 2.0f * cos(lsp[i]);
1139 
1140  av_dlog(NULL, "floor0 synth: map_size = %"PRIu32"; m = %d; wstep = %f\n",
1141  vf->map_size[blockflag], order, wstep);
1142 
1143  i = 0;
1144  while (i < vf->map_size[blockflag]) {
1145  int j, iter_cond = vf->map[blockflag][i];
1146  float p = 0.5f;
1147  float q = 0.5f;
1148  float two_cos_w = 2.0f * cos(wstep * iter_cond); // needed all times
1149 
1150  /* similar part for the q and p products */
1151  for (j = 0; j + 1 < order; j += 2) {
1152  q *= lsp[j] - two_cos_w;
1153  p *= lsp[j + 1] - two_cos_w;
1154  }
1155  if (j == order) { // even order
1156  p *= p * (2.0f - two_cos_w);
1157  q *= q * (2.0f + two_cos_w);
1158  } else { // odd order
1159  q *= two_cos_w-lsp[j]; // one more time for q
1160 
1161  /* final step and square */
1162  p *= p * (4.f - two_cos_w * two_cos_w);
1163  q *= q;
1164  }
1165 
1166  /* calculate linear floor value */
1167  q = exp((((amplitude*vf->amplitude_offset) /
1168  (((1 << vf->amplitude_bits) - 1) * sqrt(p + q)))
1169  - vf->amplitude_offset) * .11512925f);
1170 
1171  /* fill vector */
1172  do {
1173  vec[i] = q; ++i;
1174  } while (vf->map[blockflag][i] == iter_cond);
1175  }
1176  }
1177  } else {
1178  /* this channel is unused */
1179  return 1;
1180  }
1181 
1182  av_dlog(NULL, " Floor0 decoded\n");
1183 
1184  return 0;
1185 }
1186 
1188  vorbis_floor_data *vfu, float *vec)
1189 {
1190  vorbis_floor1 *vf = &vfu->t1;
1191  GetBitContext *gb = &vc->gb;
1192  uint16_t range_v[4] = { 256, 128, 86, 64 };
1193  unsigned range = range_v[vf->multiplier - 1];
1194  uint16_t floor1_Y[258];
1195  uint16_t floor1_Y_final[258];
1196  int floor1_flag[258];
1197  unsigned partition_class, cdim, cbits, csub, cval, offset, i, j;
1198  int book, adx, ady, dy, off, predicted, err;
1199 
1200 
1201  if (!get_bits1(gb)) // silence
1202  return 1;
1203 
1204 // Read values (or differences) for the floor's points
1205 
1206  floor1_Y[0] = get_bits(gb, ilog(range - 1));
1207  floor1_Y[1] = get_bits(gb, ilog(range - 1));
1208 
1209  av_dlog(NULL, "floor 0 Y %d floor 1 Y %d \n", floor1_Y[0], floor1_Y[1]);
1210 
1211  offset = 2;
1212  for (i = 0; i < vf->partitions; ++i) {
1213  partition_class = vf->partition_class[i];
1214  cdim = vf->class_dimensions[partition_class];
1215  cbits = vf->class_subclasses[partition_class];
1216  csub = (1 << cbits) - 1;
1217  cval = 0;
1218 
1219  av_dlog(NULL, "Cbits %u\n", cbits);
1220 
1221  if (cbits) // this reads all subclasses for this partition's class
1222  cval = get_vlc2(gb, vc->codebooks[vf->class_masterbook[partition_class]].vlc.table,
1223  vc->codebooks[vf->class_masterbook[partition_class]].nb_bits, 3);
1224 
1225  for (j = 0; j < cdim; ++j) {
1226  book = vf->subclass_books[partition_class][cval & csub];
1227 
1228  av_dlog(NULL, "book %d Cbits %u cval %u bits:%d\n",
1229  book, cbits, cval, get_bits_count(gb));
1230 
1231  cval = cval >> cbits;
1232  if (book > -1) {
1233  floor1_Y[offset+j] = get_vlc2(gb, vc->codebooks[book].vlc.table,
1234  vc->codebooks[book].nb_bits, 3);
1235  } else {
1236  floor1_Y[offset+j] = 0;
1237  }
1238 
1239  av_dlog(NULL, " floor(%d) = %d \n",
1240  vf->list[offset+j].x, floor1_Y[offset+j]);
1241  }
1242  offset+=cdim;
1243  }
1244 
1245 // Amplitude calculation from the differences
1246 
1247  floor1_flag[0] = 1;
1248  floor1_flag[1] = 1;
1249  floor1_Y_final[0] = floor1_Y[0];
1250  floor1_Y_final[1] = floor1_Y[1];
1251 
1252  for (i = 2; i < vf->x_list_dim; ++i) {
1253  unsigned val, highroom, lowroom, room, high_neigh_offs, low_neigh_offs;
1254 
1255  low_neigh_offs = vf->list[i].low;
1256  high_neigh_offs = vf->list[i].high;
1257  dy = floor1_Y_final[high_neigh_offs] - floor1_Y_final[low_neigh_offs]; // render_point begin
1258  adx = vf->list[high_neigh_offs].x - vf->list[low_neigh_offs].x;
1259  ady = FFABS(dy);
1260  err = ady * (vf->list[i].x - vf->list[low_neigh_offs].x);
1261  off = err / adx;
1262  if (dy < 0) {
1263  predicted = floor1_Y_final[low_neigh_offs] - off;
1264  } else {
1265  predicted = floor1_Y_final[low_neigh_offs] + off;
1266  } // render_point end
1267 
1268  val = floor1_Y[i];
1269  highroom = range-predicted;
1270  lowroom = predicted;
1271  if (highroom < lowroom) {
1272  room = highroom * 2;
1273  } else {
1274  room = lowroom * 2; // SPEC misspelling
1275  }
1276  if (val) {
1277  floor1_flag[low_neigh_offs] = 1;
1278  floor1_flag[high_neigh_offs] = 1;
1279  floor1_flag[i] = 1;
1280  if (val >= room) {
1281  if (highroom > lowroom) {
1282  floor1_Y_final[i] = av_clip_uint16(val - lowroom + predicted);
1283  } else {
1284  floor1_Y_final[i] = av_clip_uint16(predicted - val + highroom - 1);
1285  }
1286  } else {
1287  if (val & 1) {
1288  floor1_Y_final[i] = av_clip_uint16(predicted - (val + 1) / 2);
1289  } else {
1290  floor1_Y_final[i] = av_clip_uint16(predicted + val / 2);
1291  }
1292  }
1293  } else {
1294  floor1_flag[i] = 0;
1295  floor1_Y_final[i] = av_clip_uint16(predicted);
1296  }
1297 
1298  av_dlog(NULL, " Decoded floor(%d) = %u / val %u\n",
1299  vf->list[i].x, floor1_Y_final[i], val);
1300  }
1301 
1302 // Curve synth - connect the calculated dots and convert from dB scale FIXME optimize ?
1303 
1304  ff_vorbis_floor1_render_list(vf->list, vf->x_list_dim, floor1_Y_final, floor1_flag, vf->multiplier, vec, vf->list[1].x);
1305 
1306  av_dlog(NULL, " Floor decoded\n");
1307 
1308  return 0;
1309 }
1310 
1311 // Read and decode residue
1312 
1314  vorbis_residue *vr,
1315  unsigned ch,
1316  uint8_t *do_not_decode,
1317  float *vec,
1318  unsigned vlen,
1319  unsigned ch_left,
1320  int vr_type)
1321 {
1322  GetBitContext *gb = &vc->gb;
1323  unsigned c_p_c = vc->codebooks[vr->classbook].dimensions;
1324  unsigned ptns_to_read = vr->ptns_to_read;
1325  uint8_t *classifs = vr->classifs;
1326  unsigned pass, ch_used, i, j, k, l;
1327  unsigned max_output = (ch - 1) * vlen;
1328 
1329  if (vr_type == 2) {
1330  for (j = 1; j < ch; ++j)
1331  do_not_decode[0] &= do_not_decode[j]; // FIXME - clobbering input
1332  if (do_not_decode[0])
1333  return 0;
1334  ch_used = 1;
1335  max_output += vr->end / ch;
1336  } else {
1337  ch_used = ch;
1338  max_output += vr->end;
1339  }
1340 
1341  if (max_output > ch_left * vlen) {
1342  av_log(vc->avctx, AV_LOG_ERROR, "Insufficient output buffer\n");
1343  return -1;
1344  }
1345 
1346  av_dlog(NULL, " residue type 0/1/2 decode begin, ch: %d cpc %d \n", ch, c_p_c);
1347 
1348  for (pass = 0; pass <= vr->maxpass; ++pass) { // FIXME OPTIMIZE?
1349  uint16_t voffset, partition_count, j_times_ptns_to_read;
1350 
1351  voffset = vr->begin;
1352  for (partition_count = 0; partition_count < ptns_to_read;) { // SPEC error
1353  if (!pass) {
1354  unsigned inverse_class = ff_inverse[vr->classifications];
1355  for (j_times_ptns_to_read = 0, j = 0; j < ch_used; ++j) {
1356  if (!do_not_decode[j]) {
1357  unsigned temp = get_vlc2(gb, vc->codebooks[vr->classbook].vlc.table,
1358  vc->codebooks[vr->classbook].nb_bits, 3);
1359 
1360  av_dlog(NULL, "Classword: %u\n", temp);
1361 
1362  av_assert0(vr->classifications > 1 && temp <= 65536); //needed for inverse[]
1363  for (i = 0; i < c_p_c; ++i) {
1364  unsigned temp2;
1365 
1366  temp2 = (((uint64_t)temp) * inverse_class) >> 32;
1367  if (partition_count + c_p_c - 1 - i < ptns_to_read)
1368  classifs[j_times_ptns_to_read + partition_count + c_p_c - 1 - i] = temp - temp2 * vr->classifications;
1369  temp = temp2;
1370  }
1371  }
1372  j_times_ptns_to_read += ptns_to_read;
1373  }
1374  }
1375  for (i = 0; (i < c_p_c) && (partition_count < ptns_to_read); ++i) {
1376  for (j_times_ptns_to_read = 0, j = 0; j < ch_used; ++j) {
1377  unsigned voffs;
1378 
1379  if (!do_not_decode[j]) {
1380  unsigned vqclass = classifs[j_times_ptns_to_read + partition_count];
1381  int vqbook = vr->books[vqclass][pass];
1382 
1383  if (vqbook >= 0 && vc->codebooks[vqbook].codevectors) {
1384  unsigned coffs;
1385  unsigned dim = vc->codebooks[vqbook].dimensions;
1386  unsigned step = FASTDIV(vr->partition_size << 1, dim << 1);
1387  vorbis_codebook codebook = vc->codebooks[vqbook];
1388 
1389  if (vr_type == 0) {
1390 
1391  voffs = voffset+j*vlen;
1392  for (k = 0; k < step; ++k) {
1393  coffs = get_vlc2(gb, codebook.vlc.table, codebook.nb_bits, 3) * dim;
1394  for (l = 0; l < dim; ++l)
1395  vec[voffs + k + l * step] += codebook.codevectors[coffs + l];
1396  }
1397  } else if (vr_type == 1) {
1398  voffs = voffset + j * vlen;
1399  for (k = 0; k < step; ++k) {
1400  coffs = get_vlc2(gb, codebook.vlc.table, codebook.nb_bits, 3) * dim;
1401  for (l = 0; l < dim; ++l, ++voffs) {
1402  vec[voffs]+=codebook.codevectors[coffs+l];
1403 
1404  av_dlog(NULL, " pass %d offs: %d curr: %f change: %f cv offs.: %d \n",
1405  pass, voffs, vec[voffs], codebook.codevectors[coffs+l], coffs);
1406  }
1407  }
1408  } else if (vr_type == 2 && ch == 2 && (voffset & 1) == 0 && (dim & 1) == 0) { // most frequent case optimized
1409  voffs = voffset >> 1;
1410 
1411  if (dim == 2) {
1412  for (k = 0; k < step; ++k) {
1413  coffs = get_vlc2(gb, codebook.vlc.table, codebook.nb_bits, 3) * 2;
1414  vec[voffs + k ] += codebook.codevectors[coffs ];
1415  vec[voffs + k + vlen] += codebook.codevectors[coffs + 1];
1416  }
1417  } else if (dim == 4) {
1418  for (k = 0; k < step; ++k, voffs += 2) {
1419  coffs = get_vlc2(gb, codebook.vlc.table, codebook.nb_bits, 3) * 4;
1420  vec[voffs ] += codebook.codevectors[coffs ];
1421  vec[voffs + 1 ] += codebook.codevectors[coffs + 2];
1422  vec[voffs + vlen ] += codebook.codevectors[coffs + 1];
1423  vec[voffs + vlen + 1] += codebook.codevectors[coffs + 3];
1424  }
1425  } else
1426  for (k = 0; k < step; ++k) {
1427  coffs = get_vlc2(gb, codebook.vlc.table, codebook.nb_bits, 3) * dim;
1428  for (l = 0; l < dim; l += 2, voffs++) {
1429  vec[voffs ] += codebook.codevectors[coffs + l ];
1430  vec[voffs + vlen] += codebook.codevectors[coffs + l + 1];
1431 
1432  av_dlog(NULL, " pass %d offs: %d curr: %f change: %f cv offs.: %d+%d \n",
1433  pass, voffset / ch + (voffs % ch) * vlen,
1434  vec[voffset / ch + (voffs % ch) * vlen],
1435  codebook.codevectors[coffs + l], coffs, l);
1436  }
1437  }
1438 
1439  } else if (vr_type == 2) {
1440  unsigned voffs_div = FASTDIV(voffset << 1, ch <<1);
1441  unsigned voffs_mod = voffset - voffs_div * ch;
1442 
1443  for (k = 0; k < step; ++k) {
1444  coffs = get_vlc2(gb, codebook.vlc.table, codebook.nb_bits, 3) * dim;
1445  for (l = 0; l < dim; ++l) {
1446  vec[voffs_div + voffs_mod * vlen] +=
1447  codebook.codevectors[coffs + l];
1448 
1449  av_dlog(NULL, " pass %d offs: %d curr: %f change: %f cv offs.: %d+%d \n",
1450  pass, voffs_div + voffs_mod * vlen,
1451  vec[voffs_div + voffs_mod * vlen],
1452  codebook.codevectors[coffs + l], coffs, l);
1453 
1454  if (++voffs_mod == ch) {
1455  voffs_div++;
1456  voffs_mod = 0;
1457  }
1458  }
1459  }
1460  }
1461  }
1462  }
1463  j_times_ptns_to_read += ptns_to_read;
1464  }
1465  ++partition_count;
1466  voffset += vr->partition_size;
1467  }
1468  }
1469  }
1470  return 0;
1471 }
1472 
1474  unsigned ch,
1475  uint8_t *do_not_decode,
1476  float *vec, unsigned vlen,
1477  unsigned ch_left)
1478 {
1479  if (vr->type == 2)
1480  return vorbis_residue_decode_internal(vc, vr, ch, do_not_decode, vec, vlen, ch_left, 2);
1481  else if (vr->type == 1)
1482  return vorbis_residue_decode_internal(vc, vr, ch, do_not_decode, vec, vlen, ch_left, 1);
1483  else if (vr->type == 0)
1484  return vorbis_residue_decode_internal(vc, vr, ch, do_not_decode, vec, vlen, ch_left, 0);
1485  else {
1486  av_log(vc->avctx, AV_LOG_ERROR, " Invalid residue type while residue decode?! \n");
1487  return AVERROR_INVALIDDATA;
1488  }
1489 }
1490 
1491 void ff_vorbis_inverse_coupling(float *mag, float *ang, intptr_t blocksize)
1492 {
1493  int i;
1494  for (i = 0; i < blocksize; i++) {
1495  if (mag[i] > 0.0) {
1496  if (ang[i] > 0.0) {
1497  ang[i] = mag[i] - ang[i];
1498  } else {
1499  float temp = ang[i];
1500  ang[i] = mag[i];
1501  mag[i] += temp;
1502  }
1503  } else {
1504  if (ang[i] > 0.0) {
1505  ang[i] += mag[i];
1506  } else {
1507  float temp = ang[i];
1508  ang[i] = mag[i];
1509  mag[i] -= temp;
1510  }
1511  }
1512  }
1513 }
1514 
1515 // Decode the audio packet using the functions above
1516 
1517 static int vorbis_parse_audio_packet(vorbis_context *vc, float **floor_ptr)
1518 {
1519  GetBitContext *gb = &vc->gb;
1520  FFTContext *mdct;
1521  unsigned previous_window = vc->previous_window;
1522  unsigned mode_number, blockflag, blocksize;
1523  int i, j;
1524  uint8_t no_residue[255];
1525  uint8_t do_not_decode[255];
1527  float *ch_res_ptr = vc->channel_residues;
1528  uint8_t res_chan[255];
1529  unsigned res_num = 0;
1530  int retlen = 0;
1531  unsigned ch_left = vc->audio_channels;
1532  unsigned vlen;
1533 
1534  if (get_bits1(gb)) {
1535  av_log(vc->avctx, AV_LOG_ERROR, "Not a Vorbis I audio packet.\n");
1536  return AVERROR_INVALIDDATA; // packet type not audio
1537  }
1538 
1539  if (vc->mode_count == 1) {
1540  mode_number = 0;
1541  } else {
1542  GET_VALIDATED_INDEX(mode_number, ilog(vc->mode_count-1), vc->mode_count)
1543  }
1544  vc->mode_number = mode_number;
1545  mapping = &vc->mappings[vc->modes[mode_number].mapping];
1546 
1547  av_dlog(NULL, " Mode number: %u , mapping: %d , blocktype %d\n", mode_number,
1548  vc->modes[mode_number].mapping, vc->modes[mode_number].blockflag);
1549 
1550  blockflag = vc->modes[mode_number].blockflag;
1551  blocksize = vc->blocksize[blockflag];
1552  vlen = blocksize / 2;
1553  if (blockflag) {
1554  previous_window = get_bits(gb, 1);
1555  skip_bits1(gb); // next_window
1556  }
1557 
1558  memset(ch_res_ptr, 0, sizeof(float) * vc->audio_channels * vlen); //FIXME can this be removed ?
1559  for (i = 0; i < vc->audio_channels; ++i)
1560  memset(floor_ptr[i], 0, vlen * sizeof(floor_ptr[0][0])); //FIXME can this be removed ?
1561 
1562 // Decode floor
1563 
1564  for (i = 0; i < vc->audio_channels; ++i) {
1565  vorbis_floor *floor;
1566  int ret;
1567  if (mapping->submaps > 1) {
1568  floor = &vc->floors[mapping->submap_floor[mapping->mux[i]]];
1569  } else {
1570  floor = &vc->floors[mapping->submap_floor[0]];
1571  }
1572 
1573  ret = floor->decode(vc, &floor->data, floor_ptr[i]);
1574 
1575  if (ret < 0) {
1576  av_log(vc->avctx, AV_LOG_ERROR, "Invalid codebook in vorbis_floor_decode.\n");
1577  return AVERROR_INVALIDDATA;
1578  }
1579  no_residue[i] = ret;
1580  }
1581 
1582 // Nonzero vector propagate
1583 
1584  for (i = mapping->coupling_steps - 1; i >= 0; --i) {
1585  if (!(no_residue[mapping->magnitude[i]] & no_residue[mapping->angle[i]])) {
1586  no_residue[mapping->magnitude[i]] = 0;
1587  no_residue[mapping->angle[i]] = 0;
1588  }
1589  }
1590 
1591 // Decode residue
1592 
1593  for (i = 0; i < mapping->submaps; ++i) {
1594  vorbis_residue *residue;
1595  unsigned ch = 0;
1596  int ret;
1597 
1598  for (j = 0; j < vc->audio_channels; ++j) {
1599  if ((mapping->submaps == 1) || (i == mapping->mux[j])) {
1600  res_chan[j] = res_num;
1601  if (no_residue[j]) {
1602  do_not_decode[ch] = 1;
1603  } else {
1604  do_not_decode[ch] = 0;
1605  }
1606  ++ch;
1607  ++res_num;
1608  }
1609  }
1610  residue = &vc->residues[mapping->submap_residue[i]];
1611  if (ch_left < ch) {
1612  av_log(vc->avctx, AV_LOG_ERROR, "Too many channels in vorbis_floor_decode.\n");
1613  return -1;
1614  }
1615  if (ch) {
1616  ret = vorbis_residue_decode(vc, residue, ch, do_not_decode, ch_res_ptr, vlen, ch_left);
1617  if (ret < 0)
1618  return ret;
1619  }
1620 
1621  ch_res_ptr += ch * vlen;
1622  ch_left -= ch;
1623  }
1624 
1625  if (ch_left > 0)
1626  return AVERROR_INVALIDDATA;
1627 
1628 // Inverse coupling
1629 
1630  for (i = mapping->coupling_steps - 1; i >= 0; --i) { //warning: i has to be signed
1631  float *mag, *ang;
1632 
1633  mag = vc->channel_residues+res_chan[mapping->magnitude[i]] * blocksize / 2;
1634  ang = vc->channel_residues+res_chan[mapping->angle[i]] * blocksize / 2;
1635  vc->dsp.vorbis_inverse_coupling(mag, ang, blocksize / 2);
1636  }
1637 
1638 // Dotproduct, MDCT
1639 
1640  mdct = &vc->mdct[blockflag];
1641 
1642  for (j = vc->audio_channels-1;j >= 0; j--) {
1643  ch_res_ptr = vc->channel_residues + res_chan[j] * blocksize / 2;
1644  vc->fdsp.vector_fmul(floor_ptr[j], floor_ptr[j], ch_res_ptr, blocksize / 2);
1645  mdct->imdct_half(mdct, ch_res_ptr, floor_ptr[j]);
1646  }
1647 
1648 // Overlap/add, save data for next overlapping
1649 
1650  retlen = (blocksize + vc->blocksize[previous_window]) / 4;
1651  for (j = 0; j < vc->audio_channels; j++) {
1652  unsigned bs0 = vc->blocksize[0];
1653  unsigned bs1 = vc->blocksize[1];
1654  float *residue = vc->channel_residues + res_chan[j] * blocksize / 2;
1655  float *saved = vc->saved + j * bs1 / 4;
1656  float *ret = floor_ptr[j];
1657  float *buf = residue;
1658  const float *win = vc->win[blockflag & previous_window];
1659 
1660  if (blockflag == previous_window) {
1661  vc->fdsp.vector_fmul_window(ret, saved, buf, win, blocksize / 4);
1662  } else if (blockflag > previous_window) {
1663  vc->fdsp.vector_fmul_window(ret, saved, buf, win, bs0 / 4);
1664  memcpy(ret+bs0/2, buf+bs0/4, ((bs1-bs0)/4) * sizeof(float));
1665  } else {
1666  memcpy(ret, saved, ((bs1 - bs0) / 4) * sizeof(float));
1667  vc->fdsp.vector_fmul_window(ret + (bs1 - bs0) / 4, saved + (bs1 - bs0) / 4, buf, win, bs0 / 4);
1668  }
1669  memcpy(saved, buf + blocksize / 4, blocksize / 4 * sizeof(float));
1670  }
1671 
1672  vc->previous_window = blockflag;
1673  return retlen;
1674 }
1675 
1676 // Return the decoded audio packet through the standard api
1677 
1679  int *got_frame_ptr, AVPacket *avpkt)
1680 {
1681  const uint8_t *buf = avpkt->data;
1682  int buf_size = avpkt->size;
1683  vorbis_context *vc = avctx->priv_data;
1684  AVFrame *frame = data;
1685  GetBitContext *gb = &vc->gb;
1686  float *channel_ptrs[255];
1687  int i, len, ret;
1688 
1689  av_dlog(NULL, "packet length %d \n", buf_size);
1690 
1691  if (*buf == 1 && buf_size > 7) {
1692  init_get_bits(gb, buf+1, buf_size*8 - 8);
1693  vorbis_free(vc);
1694  if ((ret = vorbis_parse_id_hdr(vc))) {
1695  av_log(avctx, AV_LOG_ERROR, "Id header corrupt.\n");
1696  vorbis_free(vc);
1697  return ret;
1698  }
1699 
1700  if (vc->audio_channels > 8)
1701  avctx->channel_layout = 0;
1702  else
1704 
1705  avctx->channels = vc->audio_channels;
1706  avctx->sample_rate = vc->audio_samplerate;
1707  return buf_size;
1708  }
1709 
1710  if (*buf == 3 && buf_size > 7) {
1711  av_log(avctx, AV_LOG_DEBUG, "Ignoring comment header\n");
1712  return buf_size;
1713  }
1714 
1715  if (*buf == 5 && buf_size > 7 && vc->channel_residues && !vc->modes) {
1716  init_get_bits(gb, buf+1, buf_size*8 - 8);
1717  if ((ret = vorbis_parse_setup_hdr(vc))) {
1718  av_log(avctx, AV_LOG_ERROR, "Setup header corrupt.\n");
1719  vorbis_free(vc);
1720  return ret;
1721  }
1722  return buf_size;
1723  }
1724 
1725  if (!vc->channel_residues || !vc->modes) {
1726  av_log(avctx, AV_LOG_ERROR, "Data packet before valid headers\n");
1727  return AVERROR_INVALIDDATA;
1728  }
1729 
1730  /* get output buffer */
1731  frame->nb_samples = vc->blocksize[1] / 2;
1732  if ((ret = ff_get_buffer(avctx, frame, 0)) < 0)
1733  return ret;
1734 
1735  if (vc->audio_channels > 8) {
1736  for (i = 0; i < vc->audio_channels; i++)
1737  channel_ptrs[i] = (float *)frame->extended_data[i];
1738  } else {
1739  for (i = 0; i < vc->audio_channels; i++) {
1741  channel_ptrs[ch] = (float *)frame->extended_data[i];
1742  }
1743  }
1744 
1745  init_get_bits(gb, buf, buf_size*8);
1746 
1747  if ((len = vorbis_parse_audio_packet(vc, channel_ptrs)) <= 0)
1748  return len;
1749 
1750  if (!vc->first_frame) {
1751  vc->first_frame = 1;
1752  *got_frame_ptr = 0;
1753  av_frame_unref(frame);
1754  return buf_size;
1755  }
1756 
1757  av_dlog(NULL, "parsed %d bytes %d bits, returned %d samples (*ch*bits) \n",
1758  get_bits_count(gb) / 8, get_bits_count(gb) % 8, len);
1759 
1760  frame->nb_samples = len;
1761  *got_frame_ptr = 1;
1762 
1763  return buf_size;
1764 }
1765 
1766 // Close decoder
1767 
1769 {
1770  vorbis_context *vc = avctx->priv_data;
1771 
1772  vorbis_free(vc);
1773 
1774  return 0;
1775 }
1776 
1778 {
1779  vorbis_context *vc = avctx->priv_data;
1780 
1781  if (vc->saved) {
1782  memset(vc->saved, 0, (vc->blocksize[1] / 4) * vc->audio_channels *
1783  sizeof(*vc->saved));
1784  }
1785  vc->previous_window = 0;
1786 }
1787 
1789  .name = "vorbis",
1790  .type = AVMEDIA_TYPE_AUDIO,
1791  .id = AV_CODEC_ID_VORBIS,
1792  .priv_data_size = sizeof(vorbis_context),
1797  .capabilities = CODEC_CAP_DR1,
1798  .long_name = NULL_IF_CONFIG_SMALL("Vorbis"),
1799  .channel_layouts = ff_vorbis_channel_layouts,
1800  .sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_FLTP,
1802 };
void * av_mallocz(size_t size)
Allocate a block of size bytes with alignment suitable for all memory accesses (including vectors if ...
Definition: mem.c:205
struct vorbis_floor1_s vorbis_floor1
Definition: vorbisdec.c:61
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
Definition: error.h:59
uint16_t windowtype
Definition: vorbisdec.c:121
unsigned int ff_vorbis_nth_root(unsigned int x, unsigned int n)
Definition: vorbis.c:39
static int vorbis_parse_setup_hdr_floors(vorbis_context *vc)
Definition: vorbisdec.c:493
This structure describes decoded (raw) audio or video data.
Definition: frame.h:76
vorbis_residue * residues
Definition: vorbisdec.c:148
void ff_vorbis_inverse_coupling(float *mag, float *ang, intptr_t blocksize)
Definition: vorbisdec.c:1491
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
Definition: get_bits.h:240
int(* vorbis_floor_decode_func)(struct vorbis_context_s *, vorbis_floor_data *, float *)
Definition: vorbisdec.c:65
else temp
Definition: vf_mcdeint.c:148
VorbisDSPContext dsp
Definition: vorbisdec.c:129
static av_cold int vorbis_decode_close(AVCodecContext *avctx)
Definition: vorbisdec.c:1768
static av_cold int init(AVCodecContext *avctx)
Definition: avrndec.c:35
vorbis_floor * floors
Definition: vorbisdec.c:146
Sinusoidal phase f
location of range
#define pass
Definition: fft.c:335
uint8_t audio_channels
Definition: vorbisdec.c:136
uint8_t dimensions
Definition: vorbisdec.c:51
GetBitContext gb
Definition: vorbisdec.c:128
unsigned partition_size
Definition: vorbisdec.c:100
av_dlog(ac->avr,"%d samples - audio_convert: %s to %s (%s)\n", len, av_get_sample_fmt_name(ac->in_fmt), av_get_sample_fmt_name(ac->out_fmt), use_generic?ac->func_descr_generic:ac->func_descr)
uint32_t bitrate_maximum
Definition: vorbisdec.c:138
static const char idx_err_str[]
Definition: vorbisdec.c:164
#define ilog(i)
Definition: vorbis.h:48
#define V_NB_BITS
Definition: vorbisdec.c:45
static av_always_inline int vorbis_residue_decode_internal(vorbis_context *vc, vorbis_residue *vr, unsigned ch, uint8_t *do_not_decode, float *vec, unsigned vlen, unsigned ch_left, int vr_type)
Definition: vorbisdec.c:1313
FFmpeg currently uses a custom build this text attempts to document some of its obscure features and options Makefile the full command issued by make and its output will be shown on the screen DESTDIR Destination directory for the install useful to prepare packages or install FFmpeg in cross environments Makefile builds all the libraries and the executables fate Run the fate test note you must have installed it fate list Will list all fate regression test targets install Install headers
Definition: build_system.txt:1
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
#define av_assert0(cond)
assert() equivalent, that is always enabled.
Definition: avassert.h:37
const uint32_t ff_inverse[257]
Definition: mathtables.c:25
uint8_t bits
Definition: crc.c:216
enum AVSampleFormat sample_fmt
audio sample format
uint8_t
#define av_cold
Definition: attributes.h:78
uint8_t mapping
Definition: vorbisdec.c:123
#define BARK(x)
Definition: vorbisdec.c:161
static int vorbis_floor0_decode(vorbis_context *vc, vorbis_floor_data *vfu, float *vec)
Definition: vorbisdec.c:1079
FFTContext mdct[2]
Definition: vorbisdec.c:133
void(* vector_fmul)(float *dst, const float *src0, const float *src1, int len)
Calculate the product of two vectors of floats and store the result in a vector of floats...
Definition: float_dsp.h:38
#define VALIDATE_INDEX(idx, limit)
Definition: vorbisdec.c:165
uint8_t * extradata
some codecs need / can use extradata like Huffman tables.
#define t0
Definition: regdef.h:28
#define CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators.
uint8_t * mux
Definition: vorbisdec.c:114
void(* vorbis_inverse_coupling)(float *mag, float *ang, intptr_t blocksize)
Definition: vorbisdsp.h:26
uint8_t * data
uint32_t audio_samplerate
Definition: vorbisdec.c:137
static int get_bits_count(const GetBitContext *s)
Definition: get_bits.h:193
unsigned int nb_bits
Definition: vorbisdec.c:56
uint8_t maxpass
Definition: vorbisdec.c:104
bitstream reader API header.
integer sqrt
Definition: avutil.txt:2
#define CODEC_FLAG_BITEXACT
Use only bitexact stuff (except (I)DCT).
vorbis_mapping * mappings
Definition: vorbisdec.c:150
float, planar
Definition: samplefmt.h:60
#define V_NB_BITS2
Definition: vorbisdec.c:46
frame
Definition: stft.m:14
void(* vector_fmul_window)(float *dst, const float *src0, const float *src1, const float *win, int len)
Overlap/add with window function.
Definition: float_dsp.h:103
uint16_t codebook_count
Definition: vorbisdec.c:143
void av_free(void *ptr)
Free a memory block which has been allocated with av_malloc(z)() or av_realloc(). ...
Definition: mem.c:183
uint16_t transformtype
Definition: vorbisdec.c:122
uint8_t classbook
Definition: vorbisdec.c:102
void ff_vorbisdsp_init(VorbisDSPContext *dsp)
Definition: vorbisdsp.c:23
AVCodecContext * avctx
Definition: vorbisdec.c:127
static int create_map(vorbis_context *vc, unsigned floor_number)
Definition: vorbisdec.c:835
uint8_t mode_number
Definition: vorbisdec.c:153
uint8_t residue_count
Definition: vorbisdec.c:147
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
Spectrum Plot time data
uint16_t x
Definition: vorbis.h:33
static int vorbis_floor1_decode(vorbis_context *vc, vorbis_floor_data *vfu, float *vec)
Definition: vorbisdec.c:1187
#define t1
Definition: regdef.h:29
uint16_t ptns_to_read
Definition: vorbisdec.c:105
int flags
CODEC_FLAG_*.
simple assert() macros that are a bit more flexible than ISO C assert().
void av_log(void *avcl, int level, const char *fmt,...)
Definition: log.c:246
const char * name
Name of the codec implementation.
AVCodec ff_vorbis_decoder
Definition: vorbisdec.c:1788
#define ff_mdct_init
Definition: fft.h:147
static const uint8_t offset[127][2]
Definition: vf_spp.c:70
external API header
uint8_t first_frame
Definition: vorbisdec.c:134
uint32_t bitrate_nominal
Definition: vorbisdec.c:139
Definition: get_bits.h:63
uint64_t channel_layout
Audio channel layout.
uint8_t floor_type
Definition: vorbisdec.c:67
union vorbis_floor_u vorbis_floor_data
Definition: vorbisdec.c:59
float * codevectors
Definition: vorbisdec.c:55
static int vorbis_parse_id_hdr(vorbis_context *vc)
Definition: vorbisdec.c:945
Definition: fft.h:62
#define V_MAX_VLCS
Definition: vorbisdec.c:47
#define GET_VALIDATED_INDEX(idx, bits, limit)
Definition: vorbisdec.c:172
union vorbis_floor::vorbis_floor_u data
ret
Definition: avfilter.c:821
static void vorbis_free(vorbis_context *vc)
Definition: vorbisdec.c:190
t
Definition: genspecsines3.m:6
int32_t
uint8_t blockflag
Definition: vorbisdec.c:120
int ff_vorbis_len2vlc(uint8_t *bits, uint32_t *codes, unsigned num)
Definition: vorbis.c:57
struct vorbis_floor0_s vorbis_floor0
Definition: vorbisdec.c:60
Harmonics mapping(fx) Xmag(ploc)
uint32_t bitrate_minimum
Definition: vorbisdec.c:140
#define FFABS(a)
Definition: common.h:53
static av_always_inline int get_vlc2(GetBitContext *s, VLC_TYPE(*table)[2], int bits, int max_depth)
Parse a vlc code.
Definition: get_bits.h:524
#define L(x)
uint8_t submap_floor[16]
Definition: vorbisdec.c:115
uint16_t coupling_steps
Definition: vorbisdec.c:111
static void flush(AVCodecContext *avctx)
uint8_t submap_residue[16]
Definition: vorbisdec.c:116
static int vorbis_parse_setup_hdr_residues(vorbis_context *vc)
Definition: vorbisdec.c:678
static int vorbis_parse_setup_hdr_mappings(vorbis_context *vc)
Definition: vorbisdec.c:760
for k
1i.*Xphase exp()
NULL
Definition: eval.c:55
vorbis_codebook * codebooks
Definition: vorbisdec.c:144
static int vorbis_decode_frame(AVCodecContext *avctx, void *data, int *got_frame_ptr, AVPacket *avpkt)
Definition: vorbisdec.c:1678
int sample_rate
samples per second
uint16_t type
Definition: vorbisdec.c:97
FIXME Range Coding of cb
Definition: snow.txt:367
main external API structure.
static void close(AVCodecParserContext *s)
Definition: h264_parser.c:375
#define FASTDIV(a, b)
Definition: mathops.h:195
const uint64_t ff_vorbis_channel_layouts[9]
Definition: vorbis_data.c:47
uint8_t * magnitude
Definition: vorbisdec.c:112
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
mag
Definition: lab5.m:14
#define init_vlc(vlc, nb_bits, nb_codes,bits, bits_wrap, bits_size,codes, codes_wrap, codes_size,flags)
Definition: get_bits.h:426
uint8_t maxdepth
Definition: vorbisdec.c:53
void * buf
Definition: avisynth_c.h:594
uint8_t previous_window
Definition: vorbisdec.c:154
uint8_t classifications
Definition: vorbisdec.c:101
#define INIT_VLC_LE
Definition: get_bits.h:442
static unsigned int get_bits1(GetBitContext *s)
Definition: get_bits.h:273
static void skip_bits1(GetBitContext *s)
Definition: get_bits.h:298
void * av_malloc(size_t size)
Allocate a block of size bytes with alignment suitable for all memory accesses (including vectors if ...
Definition: mem.c:73
static void skip_bits(GetBitContext *s, int n)
Definition: get_bits.h:265
synthesis window for stochastic i
AVFloatDSPContext fdsp
Definition: vorbisdec.c:130
static int init_get_bits(GetBitContext *s, const uint8_t *buffer, int bit_size)
Initialize GetBitContext.
Definition: get_bits.h:379
uint32_t blocksize[2]
Definition: vorbisdec.c:141
static int vorbis_parse_setup_hdr(vorbis_context *vc)
Definition: vorbisdec.c:899
int avpriv_split_xiph_headers(uint8_t *extradata, int extradata_size, int first_header_size, uint8_t *header_start[3], int header_len[3])
Split a single extradata buffer into the three headers that most Xiph codecs use. ...
Definition: xiph.c:24
int dim
vorbis_mode * modes
Definition: vorbisdec.c:152
void av_frame_unref(AVFrame *frame)
Unreference all the buffers referenced by frame and reset the frame fields.
Definition: frame.c:330
static unsigned int get_bits_long(GetBitContext *s, int n)
Read 0-32 bits.
Definition: get_bits.h:306
uint8_t floor_count
Definition: vorbisdec.c:145
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 mode_count
Definition: vorbisdec.c:151
void(* imdct_half)(struct FFTContext *s, FFTSample *output, const FFTSample *input)
Definition: fft.h:82
#define V_MAX_PARTITIONS
Definition: vorbisdec.c:48
const float *const ff_vorbis_vwin[8]
Definition: vorbis_data.c:2190
uint8_t mapping_count
Definition: vorbisdec.c:149
static float vorbisfloat2float(unsigned val)
Definition: vorbisdec.c:178
static av_cold int vorbis_decode_init(AVCodecContext *avctx)
Definition: vorbisdec.c:1012
uint8_t * classifs
Definition: vorbisdec.c:106
common internal api header.
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
Definition: log.h:162
struct vorbis_floor::vorbis_floor_u::vorbis_floor1_s t1
struct vorbis_context_s vorbis_context
#define ff_mdct_end
Definition: fft.h:148
static int vorbis_residue_decode(vorbis_context *vc, vorbis_residue *vr, unsigned ch, uint8_t *do_not_decode, float *vec, unsigned vlen, unsigned ch_left)
Definition: vorbisdec.c:1473
AVSampleFormat
Audio Sample Formats.
Definition: samplefmt.h:49
vorbis_floor_decode_func decode
Definition: vorbisdec.c:68
uint32_t version
Definition: vorbisdec.c:135
static int vorbis_parse_setup_hdr_tdtransforms(vorbis_context *vc)
Definition: vorbisdec.c:467
static int vorbis_parse_setup_hdr_modes(vorbis_context *vc)
Definition: vorbisdec.c:870
av_cold void ff_fmt_convert_init(FmtConvertContext *c, AVCodecContext *avctx)
Definition: fmtconvert.c:79
int len
uint8_t * angle
Definition: vorbisdec.c:113
int channels
number of audio channels
VLC_TYPE(* table)[2]
code, bits
Definition: get_bits.h:65
uint32_t end
Definition: vorbisdec.c:99
int16_t books[64][8]
Definition: vorbisdec.c:103
void ff_vorbis_floor1_render_list(vorbis_floor1_entry *list, int values, uint16_t *y_list, int *flag, int multiplier, float *out, int samples)
Definition: vorbis.c:214
uint8_t lookup_type
Definition: vorbisdec.c:52
struct vorbis_floor::vorbis_floor_u::vorbis_floor0_s t0
#define av_always_inline
Definition: attributes.h:41
static int decode(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
Definition: crystalhd.c:868
#define M_PI
Definition: mathematics.h:46
FmtConvertContext fmt_conv
Definition: vorbisdec.c:131
void avpriv_float_dsp_init(AVFloatDSPContext *fdsp, int bit_exact)
Initialize a float DSP context.
Definition: float_dsp.c:118
uint32_t begin
Definition: vorbisdec.c:98
const uint8_t ff_vorbis_channel_layout_offsets[8][8]
Definition: vorbis_data.c:25
float * channel_residues
Definition: vorbisdec.c:155
uint8_t ** extended_data
pointers to the data planes/channels.
Definition: frame.h:117
static av_cold void vorbis_decode_flush(AVCodecContext *avctx)
Definition: vorbisdec.c:1777
Definition: vorbis.h:32
This structure stores compressed data.
static int vorbis_parse_setup_hdr_codebooks(vorbis_context *vc)
Definition: vorbisdec.c:239
void ff_free_vlc(VLC *vlc)
Definition: bitstream.c:344
const float * win[2]
Definition: vorbisdec.c:142
static int vorbis_parse_audio_packet(vorbis_context *vc, float **floor_ptr)
Definition: vorbisdec.c:1517
int nb_samples
number of audio samples (per channel) described by this frame
Definition: frame.h:127
trying all byte sequences megabyte in length and selecting the best looking sequence will yield cases to try But a word about which is also called distortion Distortion can be quantified by almost any quality measurement one chooses the sum of squared differences is used but more complex methods that consider psychovisual effects can be used as well It makes no difference in this discussion First step
uint8_t submaps
Definition: vorbisdec.c:110
int ff_vorbis_ready_floor1_list(AVCodecContext *avctx, vorbis_floor1_entry *list, int values)
Definition: vorbis.c:124