1 /*
2 * Atrac 3 compatible decoder
3 * Copyright (c) 2006-2008 Maxim Poliakovski
4 * Copyright (c) 2006-2008 Benjamin Larsson
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 * Atrac 3 compatible decoder.
26 * This decoder handles Sony's ATRAC3 data.
27 *
28 * Container formats used to store atrac 3 data:
29 * RealMedia (.rm), RIFF WAV (.wav, .at3), Sony OpenMG (.oma, .aa3).
30 *
31 * To use this decoder, a calling application must supply the extradata
32 * bytes provided in the containers above.
33 */
34
36 #include <stddef.h>
37 #include <stdio.h>
38
47
50
51 #define JOINT_STEREO 0x12
53
54 #define SAMPLES_PER_FRAME 1024
56
62
66
72
80
83
88
92 //@{
93 /** stream data */
95
97 //@}
98 //@{
99 /** joint-stereo related variables */
104 //@}
105 //@{
106 /** data buffers */
109 //@}
110 //@{
111 /** extradata */
113 //@}
114
119
125
126
127 /**
128 * Regular 512 points IMDCT without overlapping, with the exception of the
129 * swapping of odd bands caused by the reverse spectra of the QMF.
130 *
131 * @param odd_band 1 if the band is an odd band
132 */
134 {
135 int i;
136
137 if (odd_band) {
138 /**
139 * Reverse the odd bands before IMDCT, this is an effect of the QMF
140 * transform or it gives better compression to do it this way.
141 * FIXME: It should be possible to handle this in imdct_calc
142 * for that to happen a modification of the prerotation step of
143 * all SIMD code and C code is needed.
144 * Or fix the functions before so they generate a pre reversed spectrum.
145 */
146 for (i = 0; i < 128; i++)
147 FFSWAP(
float, input[i], input[255 - i]);
148 }
149
151
152 /* Perform windowing on the output. */
154 }
155
156 /*
157 * indata descrambling, only used for data coming from the rm container
158 */
160 {
163 const uint32_t *buf;
164 uint32_t *output = (uint32_t *)out;
165
166 off = (intptr_t)input & 3;
167 buf = (const uint32_t *)(input - off);
168 if (off)
169 c =
av_be2ne32((0x537F6103U >> (off * 8)) | (0x537F6103U << (32 - (off * 8))));
170 else
173 for (i = 0; i < bytes / 4; i++)
174 output[i] = c ^ buf[i];
175
176 if (off)
178
180 }
181
183 {
184 int i, j;
185
186 /* generate the mdct window, for details see
187 * http://wiki.multimedia.cx/index.php?title=RealAudio_atrc#Windows */
188 for (i = 0, j = 255; i < 128; i++, j--) {
189 float wi = sin(((i + 0.5) / 256.0 - 0.5) *
M_PI) + 1.0;
190 float wj = sin(((j + 0.5) / 256.0 - 0.5) *
M_PI) + 1.0;
191 float w = 0.5 * (wi * wi + wj * wj);
194 }
195 }
196
198 {
200
203
205
206 return 0;
207 }
208
209 /**
210 * Mantissa decoding
211 *
212 * @param selector which table the output values are coded with
213 * @param coding_flag constant length coding or variable length coding
214 * @param mantissas mantissa output table
215 * @param num_codes number of values to get
216 */
218 int coding_flag, int *mantissas,
219 int num_codes)
220 {
221 int i, code, huff_symb;
222
223 if (selector == 1)
224 num_codes /= 2;
225
226 if (coding_flag != 0) {
227 /* constant length coding (CLC) */
229
230 if (selector > 1) {
231 for (i = 0; i < num_codes; i++) {
232 if (num_bits)
234 else
235 code = 0;
236 mantissas[i] = code;
237 }
238 } else {
239 for (i = 0; i < num_codes; i++) {
240 if (num_bits)
241 code =
get_bits(gb, num_bits);
// num_bits is always 4 in this case
242 else
243 code = 0;
246 }
247 }
248 } else {
249 /* variable length coding (VLC) */
250 if (selector != 1) {
251 for (i = 0; i < num_codes; i++) {
252 huff_symb =
get_vlc2(gb, spectral_coeff_tab[selector-1].
table,
253 spectral_coeff_tab[selector-1].
bits, 3);
254 huff_symb += 1;
255 code = huff_symb >> 1;
256 if (huff_symb & 1)
257 code = -code;
258 mantissas[i] = code;
259 }
260 } else {
261 for (i = 0; i < num_codes; i++) {
262 huff_symb =
get_vlc2(gb, spectral_coeff_tab[selector - 1].
table,
263 spectral_coeff_tab[selector - 1].
bits, 3);
266 }
267 }
268 }
269 }
270
271 /**
272 * Restore the quantized band spectrum coefficients
273 *
274 * @return subband count, fix for broken specification/files
275 */
277 {
278 int num_subbands, coding_mode, i, j, first, last, subband_size;
279 int subband_vlc_index[32], sf_index[32];
280 int mantissas[128];
281 float scale_factor;
282
283 num_subbands =
get_bits(gb, 5);
// number of coded subbands
284 coding_mode =
get_bits1(gb);
// coding Mode: 0 - VLC/ 1-CLC
285
286 /* get the VLC selector table for the subbands, 0 means not coded */
287 for (i = 0; i <= num_subbands; i++)
288 subband_vlc_index[i] =
get_bits(gb, 3);
289
290 /* read the scale factor indexes from the stream */
291 for (i = 0; i <= num_subbands; i++) {
292 if (subband_vlc_index[i] != 0)
294 }
295
296 for (i = 0; i <= num_subbands; i++) {
299
300 subband_size = last - first;
301
302 if (subband_vlc_index[i] != 0) {
303 /* decode spectral coefficients for this subband */
304 /* TODO: This can be done faster is several blocks share the
305 * same VLC selector (subband_vlc_index) */
307 mantissas, subband_size);
308
309 /* decode the scale factor for this subband */
312
313 /* inverse quantize the coefficients */
314 for (j = 0; first < last; first++, j++)
315 output[first] = mantissas[j] * scale_factor;
316 } else {
317 /* this subband was not coded, so zero the entire subband */
318 memset(output + first, 0, subband_size * sizeof(*output));
319 }
320 }
321
322 /* clear the subbands that were not coded */
325 return num_subbands;
326 }
327
328 /**
329 * Restore the quantized tonal components
330 *
331 * @param components tonal components
332 * @param num_bands number of coded bands
333 */
336 {
338 int nb_components, coding_mode_selector, coding_mode;
339 int band_flags[4], mantissa[8];
340 int component_count = 0;
341
343
344 /* no tonal components */
345 if (nb_components == 0)
346 return 0;
347
348 coding_mode_selector =
get_bits(gb, 2);
349 if (coding_mode_selector == 2)
351
352 coding_mode = coding_mode_selector & 1;
353
354 for (i = 0; i < nb_components; i++) {
355 int coded_values_per_component, quant_step_index;
356
357 for (b = 0; b <= num_bands; b++)
359
360 coded_values_per_component =
get_bits(gb, 3);
361
363 if (quant_step_index <= 1)
365
366 if (coding_mode_selector == 3)
368
369 for (b = 0; b < (num_bands + 1) * 4; b++) {
370 int coded_components;
371
372 if (band_flags[b >> 2] == 0)
373 continue;
374
376
377 for (c = 0; c < coded_components; c++) {
379 int sf_index, coded_values, max_coded_values;
380 float scale_factor;
381
383 if (component_count >= 64)
385
387
389 coded_values = coded_values_per_component + 1;
390 coded_values =
FFMIN(max_coded_values, coded_values);
391
394
396 mantissa, coded_values);
397
399
400 /* inverse quant */
401 for (m = 0; m < coded_values; m++)
402 cmp->
coef[m] = mantissa[m] * scale_factor;
403
404 component_count++;
405 }
406 }
407 }
408
409 return component_count;
410 }
411
412 /**
413 * Decode gain parameters for the coded bands
414 *
415 * @param block the gainblock for the current band
416 * @param num_bands amount of coded bands
417 */
419 int num_bands)
420 {
421 int i, cf, num_data;
423
425
426 for (i = 0; i <= num_bands; i++) {
431
435 if (cf && loc[cf] <= loc[cf - 1])
437 }
438 }
439
440 /* Clear the unused blocks. */
441 for (; i < 4 ; i++)
442 gain[i].num_gain_data = 0;
443
444 return 0;
445 }
446
447 /**
448 * Apply gain parameters and perform the MDCT overlapping part
449 *
450 * @param input input buffer
451 * @param prev previous buffer to perform overlap against
452 * @param output output buffer
453 * @param gain1 current band gain info
454 * @param gain2 next band gain info
455 */
459 {
460 float g1, g2, gain_inc;
461 int i, j, num_data, start_loc, end_loc;
462
463
465 g1 = 1.0;
466 else
468
470 for (i = 0; i < 256; i++)
471 output[i] = input[i] * g1 + prev[i];
472 } else {
476
477 for (i = 0, j = 0; i < num_data; i++) {
479 end_loc = start_loc + 8;
480
484
485 /* interpolate */
486 for (; j < start_loc; j++)
487 output[j] = (input[j] * g1 + prev[j]) * g2;
488
489 /* interpolation is done over eight samples */
490 for (; j < end_loc; j++) {
491 output[j] = (input[j] * g1 + prev[j]) * g2;
492 g2 *= gain_inc;
493 }
494 }
495
496 for (; j < 256; j++)
497 output[j] = input[j] * g1 + prev[j];
498 }
499
500 /* Delay for the overlapping part. */
501 memcpy(prev, &input[256], 256 * sizeof(*prev));
502 }
503
504 /**
505 * Combine the tonal band spectrum and regular band spectrum
506 *
507 * @param spectrum output spectrum buffer
508 * @param num_components number of tonal components
509 * @param components tonal components for this band
510 * @return position of the last tonal coefficient
511 */
514 {
515 int i, j, last_pos = -1;
516 float *input, *output;
517
518 for (i = 0; i < num_components; i++) {
519 last_pos =
FFMAX(components[i].pos + components[i].num_coefs, last_pos);
520 input = components[i].
coef;
521 output = &spectrum[components[i].
pos];
522
523 for (j = 0; j < components[i].num_coefs; j++)
524 output[j] += input[j];
525 }
526
527 return last_pos;
528 }
529
530 #define INTERPOLATE(old, new, nsample) \
531 ((old) + (nsample) * 0.125 * ((new) - (old)))
532
534 int *curr_code)
535 {
536 int i, nsample, band;
537 float mc1_l, mc1_r, mc2_l, mc2_r;
538
539 for (i = 0, band = 0; band < 4 * 256; band += 256, i++) {
540 int s1 = prev_code[i];
541 int s2 = curr_code[i];
542 nsample = band;
543
544 if (s1 != s2) {
545 /* Selector value changed, interpolation needed. */
550
551 /* Interpolation is done over the first eight samples. */
552 for (; nsample < band + 8; nsample++) {
553 float c1 = su1[nsample];
554 float c2 = su2[nsample];
555 c2 = c1 *
INTERPOLATE(mc1_l, mc2_l, nsample - band) +
558 su2[nsample] = c1 * 2.0 -
c2;
559 }
560 }
561
562 /* Apply the matrix without interpolation. */
563 switch (s2) {
564 case 0: /* M/S decoding */
565 for (; nsample < band + 256; nsample++) {
566 float c1 = su1[nsample];
567 float c2 = su2[nsample];
568 su1[nsample] = c2 * 2.0;
569 su2[nsample] = (c1 -
c2) * 2.0;
570 }
571 break;
572 case 1:
573 for (; nsample < band + 256; nsample++) {
574 float c1 = su1[nsample];
575 float c2 = su2[nsample];
576 su1[nsample] = (c1 +
c2) * 2.0;
577 su2[nsample] = c2 * -2.0;
578 }
579 break;
580 case 2:
581 case 3:
582 for (; nsample < band + 256; nsample++) {
583 float c1 = su1[nsample];
584 float c2 = su2[nsample];
585 su1[nsample] = c1 +
c2;
586 su2[nsample] = c1 -
c2;
587 }
588 break;
589 default:
591 }
592 }
593 }
594
596 {
597 if (index == 7) {
598 ch[0] = 1.0;
599 ch[1] = 1.0;
600 } else {
601 ch[0] = (index & 7) / 7.0;
602 ch[1] = sqrt(2 - ch[0] * ch[0]);
603 if (flag)
604 FFSWAP(
float, ch[0], ch[1]);
605 }
606 }
607
609 {
610 int band, nsample;
611 /* w[x][y] y=0 is left y=1 is right */
612 float w[2][2];
613
614 if (p3[1] != 7 || p3[3] != 7) {
617
618 for (band = 256; band < 4 * 256; band += 256) {
619 for (nsample = band; nsample < band + 8; nsample++) {
620 su1[nsample] *=
INTERPOLATE(w[0][0], w[0][1], nsample - band);
621 su2[nsample] *=
INTERPOLATE(w[1][0], w[1][1], nsample - band);
622 }
623 for(; nsample < band + 256; nsample++) {
624 su1[nsample] *= w[1][0];
625 su2[nsample] *= w[1][1];
626 }
627 }
628 }
629 }
630
631 /**
632 * Decode a Sound Unit
633 *
634 * @param snd the channel unit to be used
635 * @param output the decoded samples before IQMF in float representation
636 * @param channel_num channel number
637 * @param coding_mode the coding mode (JOINT_STEREO or regular stereo/mono)
638 */
641 int channel_num, int coding_mode)
642 {
643 int band, ret, num_subbands, last_tonal, num_bands;
646
651 }
652 } else {
656 }
657 }
658
659 /* number of coded QMF bands */
661
663 if (ret)
664 return ret;
665
669 return -1;
670
672
673 /* Merge the decoded spectrum and tonal components. */
676
677
678 /* calculate number of used MLT/QMF bands according to the amount of coded
679 spectral lines */
681 if (last_tonal >= 0)
682 num_bands =
FFMAX((last_tonal + 256) >> 8, num_bands);
683
684
685 /* Reconstruct time domain samples. */
686 for (band = 0; band < 4; band++) {
687 /* Perform the IMDCT step without overlapping. */
688 if (band <= num_bands)
690 else
692
693 /* gain compensation and overlapping */
696 &output[band * 256],
699 }
700
701 /* Swap the gain control buffers for the next frame. */
703
704 return 0;
705 }
706
708 float **out_samples)
709 {
711 int ret, i;
713
715 /* channel coupling mode */
716 /* decode Sound Unit 1 */
718
721 if (ret != 0)
722 return ret;
723
724 /* Framedata of the su2 in the joint-stereo mode is encoded in
725 * reverse byte order so we need to swap it first. */
729 for (i = 0; i < avctx->
block_align / 2; i++, ptr1++, ptr2--)
731 } else {
735 }
736
737 /* Skip the sync codes (0xF8). */
739 for (i = 4; *ptr1 == 0xF8; i++, ptr1++) {
742 }
743
744
745 /* set the bitstream reader at the start of the second Sound Unit*/
747
748 /* Fill the Weighting coeffs delay buffer */
753
754 for (i = 0; i < 4; i++) {
758 }
759
760 /* Decode Sound Unit 2. */
763 if (ret != 0)
764 return ret;
765
766 /* Reconstruct the channel coefficients. */
770
772 } else {
773 /* normal stereo mode or mono */
774 /* Decode the channel sound units. */
775 for (i = 0; i < avctx->
channels; i++) {
776 /* Set the bitstream reader at the start of a channel sound unit. */
780
783 if (ret != 0)
784 return ret;
785 }
786 }
787
788 /* Apply the iQMF synthesis filter. */
789 for (i = 0; i < avctx->
channels; i++) {
790 float *p1 = out_samples[i];
791 float *p2 = p1 + 256;
792 float *p3 = p2 + 256;
793 float *p4 = p3 + 256;
797 }
798
799 return 0;
800 }
801
803 int *got_frame_ptr,
AVPacket *avpkt)
804 {
806 int buf_size = avpkt->
size;
808 int ret;
810
811 if (buf_size < avctx->block_align) {
813 "Frame too small (%d bytes). Truncated file?\n", buf_size);
815 }
816
817 /* get output buffer */
821 return ret;
822 }
823
824 /* Check if we need to descramble and what buffer to pass on. */
828 } else {
829 databuf = buf;
830 }
831
833 if (ret) {
835 return ret;
836 }
837
838 *got_frame_ptr = 1;
840
842 }
843
845 {
846 int i;
847
850
851 /* Initialize the VLC tables. */
852 for (i = 0; i < 7; i++) {
855 atrac3_vlc_offs[i ];
859 }
860
861 /* Generate gain tables */
862 for (i = 0; i < 16; i++)
864
865 for (i = -15; i < 16; i++)
867 }
868
870 {
871 static int static_init_done;
872 int i, ret;
873 int version, delay, samples_per_frame, frame_factor;
876
880 }
881
882 if (!static_init_done)
884 static_init_done = 1;
885
886 /* Take care of the codec-specific extradata. */
888 /* Parse the extradata, WAV format */
890 bytestream_get_le16(&edata_ptr)); // Unknown value always 1
891 edata_ptr += 4; // samples per channel
894 bytestream_get_le16(&edata_ptr)); //Dupe of coding mode
895 frame_factor = bytestream_get_le16(&edata_ptr); // Unknown always 1
897 bytestream_get_le16(&edata_ptr)); // Unknown always 0
898
899 /* setup */
901 version = 4;
902 delay = 0x88E;
905
913 }
915 /* Parse the extradata, RM format. */
916 version = bytestream_get_be32(&edata_ptr);
917 samples_per_frame = bytestream_get_be16(&edata_ptr);
918 delay = bytestream_get_be16(&edata_ptr);
921
922 } else {
926 }
927
931 }
932
933 /* Check the extradata */
934
935 if (version != 4) {
938 }
939
943 samples_per_frame);
945 }
946
947 if (delay != 0x88E) {
949 delay);
951 }
952
957 else {
961 }
962
965
970
972
973 /* initialize the MDCT transform */
977 return ret;
978 }
979
980 /* init the joint-stereo decoding data */
987
988 for (i = 0; i < 4; i++) {
992 }
993
996
1001 }
1002
1005
1006 return 0;
1007 }
1008
1021 };