Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. /*
  2.  * TTA (The Lossless True Audio) decoder
  3.  * Copyright (c) 2006 Alex Beregszaszi
  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.  * TTA (The Lossless True Audio) decoder
  25.  * @see http://www.true-audio.com/
  26.  * @see http://tta.corecodec.org/
  27.  * @author Alex Beregszaszi
  28.  */
  29.  
  30. #define BITSTREAM_READER_LE
  31. #include <limits.h>
  32. #include "ttadata.h"
  33. #include "ttadsp.h"
  34. #include "avcodec.h"
  35. #include "get_bits.h"
  36. #include "thread.h"
  37. #include "unary.h"
  38. #include "internal.h"
  39. #include "libavutil/crc.h"
  40. #include "libavutil/intreadwrite.h"
  41. #include "libavutil/opt.h"
  42.  
  43. #define FORMAT_SIMPLE    1
  44. #define FORMAT_ENCRYPTED 2
  45.  
  46. typedef struct TTAContext {
  47.     AVClass *class;
  48.     AVCodecContext *avctx;
  49.     const AVCRC *crc_table;
  50.  
  51.     int format, channels, bps;
  52.     unsigned data_length;
  53.     int frame_length, last_frame_length;
  54.  
  55.     int32_t *decode_buffer;
  56.  
  57.     uint8_t crc_pass[8];
  58.     uint8_t *pass;
  59.     TTAChannel *ch_ctx;
  60.     TTADSPContext dsp;
  61. } TTAContext;
  62.  
  63. static const int64_t tta_channel_layouts[7] = {
  64.     AV_CH_LAYOUT_STEREO,
  65.     AV_CH_LAYOUT_STEREO|AV_CH_LOW_FREQUENCY,
  66.     AV_CH_LAYOUT_QUAD,
  67.     0,
  68.     AV_CH_LAYOUT_5POINT1_BACK,
  69.     AV_CH_LAYOUT_5POINT1_BACK|AV_CH_BACK_CENTER,
  70.     AV_CH_LAYOUT_7POINT1_WIDE
  71. };
  72.  
  73. static int tta_check_crc(TTAContext *s, const uint8_t *buf, int buf_size)
  74. {
  75.     uint32_t crc, CRC;
  76.  
  77.     CRC = AV_RL32(buf + buf_size);
  78.     crc = av_crc(s->crc_table, 0xFFFFFFFFU, buf, buf_size);
  79.     if (CRC != (crc ^ 0xFFFFFFFFU)) {
  80.         av_log(s->avctx, AV_LOG_ERROR, "CRC error\n");
  81.         return AVERROR_INVALIDDATA;
  82.     }
  83.  
  84.     return 0;
  85. }
  86.  
  87. static uint64_t tta_check_crc64(uint8_t *pass)
  88. {
  89.     uint64_t crc = UINT64_MAX, poly = 0x42F0E1EBA9EA3693U;
  90.     uint8_t *end = pass + strlen(pass);
  91.     int i;
  92.  
  93.     while (pass < end) {
  94.         crc ^= (uint64_t)*pass++ << 56;
  95.         for (i = 0; i < 8; i++)
  96.             crc = (crc << 1) ^ (poly & (((int64_t) crc) >> 63));
  97.     }
  98.  
  99.     return crc ^ UINT64_MAX;
  100. }
  101.  
  102. static int allocate_buffers(AVCodecContext *avctx)
  103. {
  104.     TTAContext *s = avctx->priv_data;
  105.  
  106.     if (s->bps < 3) {
  107.         s->decode_buffer = av_mallocz_array(sizeof(int32_t)*s->frame_length, s->channels);
  108.         if (!s->decode_buffer)
  109.             return AVERROR(ENOMEM);
  110.     } else
  111.         s->decode_buffer = NULL;
  112.     s->ch_ctx = av_malloc_array(avctx->channels, sizeof(*s->ch_ctx));
  113.     if (!s->ch_ctx) {
  114.         av_freep(&s->decode_buffer);
  115.         return AVERROR(ENOMEM);
  116.     }
  117.  
  118.     return 0;
  119. }
  120.  
  121. static av_cold int tta_decode_init(AVCodecContext * avctx)
  122. {
  123.     TTAContext *s = avctx->priv_data;
  124.     GetBitContext gb;
  125.     int total_frames;
  126.     int ret;
  127.  
  128.     s->avctx = avctx;
  129.  
  130.     // 30bytes includes TTA1 header
  131.     if (avctx->extradata_size < 22)
  132.         return AVERROR_INVALIDDATA;
  133.  
  134.     s->crc_table = av_crc_get_table(AV_CRC_32_IEEE_LE);
  135.     ret = init_get_bits8(&gb, avctx->extradata, avctx->extradata_size);
  136.     if (ret < 0)
  137.         return ret;
  138.  
  139.     if (show_bits_long(&gb, 32) == AV_RL32("TTA1")) {
  140.         /* signature */
  141.         skip_bits_long(&gb, 32);
  142.  
  143.         s->format = get_bits(&gb, 16);
  144.         if (s->format > 2) {
  145.             av_log(avctx, AV_LOG_ERROR, "Invalid format\n");
  146.             return AVERROR_INVALIDDATA;
  147.         }
  148.         if (s->format == FORMAT_ENCRYPTED) {
  149.             if (!s->pass) {
  150.                 av_log(avctx, AV_LOG_ERROR, "Missing password for encrypted stream. Please use the -password option\n");
  151.                 return AVERROR(EINVAL);
  152.             }
  153.             AV_WL64(s->crc_pass, tta_check_crc64(s->pass));
  154.         }
  155.         avctx->channels = s->channels = get_bits(&gb, 16);
  156.         if (s->channels > 1 && s->channels < 9)
  157.             avctx->channel_layout = tta_channel_layouts[s->channels-2];
  158.         avctx->bits_per_raw_sample = get_bits(&gb, 16);
  159.         s->bps = (avctx->bits_per_raw_sample + 7) / 8;
  160.         avctx->sample_rate = get_bits_long(&gb, 32);
  161.         s->data_length = get_bits_long(&gb, 32);
  162.         skip_bits_long(&gb, 32); // CRC32 of header
  163.  
  164.         if (s->channels == 0) {
  165.             av_log(avctx, AV_LOG_ERROR, "Invalid number of channels\n");
  166.             return AVERROR_INVALIDDATA;
  167.         } else if (avctx->sample_rate == 0) {
  168.             av_log(avctx, AV_LOG_ERROR, "Invalid samplerate\n");
  169.             return AVERROR_INVALIDDATA;
  170.         }
  171.  
  172.         switch(s->bps) {
  173.         case 1: avctx->sample_fmt = AV_SAMPLE_FMT_U8; break;
  174.         case 2:
  175.             avctx->sample_fmt = AV_SAMPLE_FMT_S16;
  176.             break;
  177.         case 3:
  178.             avctx->sample_fmt = AV_SAMPLE_FMT_S32;
  179.             break;
  180.         //case 4: avctx->sample_fmt = AV_SAMPLE_FMT_S32; break;
  181.         default:
  182.             av_log(avctx, AV_LOG_ERROR, "Invalid/unsupported sample format.\n");
  183.             return AVERROR_INVALIDDATA;
  184.         }
  185.  
  186.         // prevent overflow
  187.         if (avctx->sample_rate > 0x7FFFFFu) {
  188.             av_log(avctx, AV_LOG_ERROR, "sample_rate too large\n");
  189.             return AVERROR(EINVAL);
  190.         }
  191.         s->frame_length = 256 * avctx->sample_rate / 245;
  192.  
  193.         s->last_frame_length = s->data_length % s->frame_length;
  194.         total_frames = s->data_length / s->frame_length +
  195.                        (s->last_frame_length ? 1 : 0);
  196.  
  197.         av_log(avctx, AV_LOG_DEBUG, "format: %d chans: %d bps: %d rate: %d block: %d\n",
  198.             s->format, avctx->channels, avctx->bits_per_coded_sample, avctx->sample_rate,
  199.             avctx->block_align);
  200.         av_log(avctx, AV_LOG_DEBUG, "data_length: %d frame_length: %d last: %d total: %d\n",
  201.             s->data_length, s->frame_length, s->last_frame_length, total_frames);
  202.  
  203.         if(s->frame_length >= UINT_MAX / (s->channels * sizeof(int32_t))){
  204.             av_log(avctx, AV_LOG_ERROR, "frame_length too large\n");
  205.             return AVERROR_INVALIDDATA;
  206.         }
  207.     } else {
  208.         av_log(avctx, AV_LOG_ERROR, "Wrong extradata present\n");
  209.         return AVERROR_INVALIDDATA;
  210.     }
  211.  
  212.     ff_ttadsp_init(&s->dsp);
  213.  
  214.     return allocate_buffers(avctx);
  215. }
  216.  
  217. static int tta_decode_frame(AVCodecContext *avctx, void *data,
  218.                             int *got_frame_ptr, AVPacket *avpkt)
  219. {
  220.     AVFrame *frame     = data;
  221.     ThreadFrame tframe = { .f = data };
  222.     const uint8_t *buf = avpkt->data;
  223.     int buf_size = avpkt->size;
  224.     TTAContext *s = avctx->priv_data;
  225.     GetBitContext gb;
  226.     int i, ret;
  227.     int cur_chan = 0, framelen = s->frame_length;
  228.     int32_t *p;
  229.  
  230.     if (avctx->err_recognition & AV_EF_CRCCHECK) {
  231.         if (buf_size < 4 ||
  232.             (tta_check_crc(s, buf, buf_size - 4) && avctx->err_recognition & AV_EF_EXPLODE))
  233.             return AVERROR_INVALIDDATA;
  234.     }
  235.  
  236.     if ((ret = init_get_bits8(&gb, avpkt->data, avpkt->size)) < 0)
  237.         return ret;
  238.  
  239.     /* get output buffer */
  240.     frame->nb_samples = framelen;
  241.     if ((ret = ff_thread_get_buffer(avctx, &tframe, 0)) < 0)
  242.         return ret;
  243.  
  244.     // decode directly to output buffer for 24-bit sample format
  245.     if (s->bps == 3)
  246.         s->decode_buffer = (int32_t *)frame->data[0];
  247.  
  248.     // init per channel states
  249.     for (i = 0; i < s->channels; i++) {
  250.         TTAFilter *filter = &s->ch_ctx[i].filter;
  251.         s->ch_ctx[i].predictor = 0;
  252.         ff_tta_filter_init(filter, ff_tta_filter_configs[s->bps-1]);
  253.         if (s->format == FORMAT_ENCRYPTED) {
  254.             int i;
  255.             for (i = 0; i < 8; i++)
  256.                 filter->qm[i] = sign_extend(s->crc_pass[i], 8);
  257.         }
  258.         ff_tta_rice_init(&s->ch_ctx[i].rice, 10, 10);
  259.     }
  260.  
  261.     i = 0;
  262.     for (p = s->decode_buffer; p < s->decode_buffer + (framelen * s->channels); p++) {
  263.         int32_t *predictor = &s->ch_ctx[cur_chan].predictor;
  264.         TTAFilter *filter = &s->ch_ctx[cur_chan].filter;
  265.         TTARice *rice = &s->ch_ctx[cur_chan].rice;
  266.         uint32_t unary, depth, k;
  267.         int32_t value;
  268.  
  269.         unary = get_unary(&gb, 0, get_bits_left(&gb));
  270.  
  271.         if (unary == 0) {
  272.             depth = 0;
  273.             k = rice->k0;
  274.         } else {
  275.             depth = 1;
  276.             k = rice->k1;
  277.             unary--;
  278.         }
  279.  
  280.         if (get_bits_left(&gb) < k) {
  281.             ret = AVERROR_INVALIDDATA;
  282.             goto error;
  283.         }
  284.  
  285.         if (k) {
  286.             if (k > MIN_CACHE_BITS) {
  287.                 ret = AVERROR_INVALIDDATA;
  288.                 goto error;
  289.             }
  290.             value = (unary << k) + get_bits(&gb, k);
  291.         } else
  292.             value = unary;
  293.  
  294.         // FIXME: copy paste from original
  295.         switch (depth) {
  296.         case 1:
  297.             rice->sum1 += value - (rice->sum1 >> 4);
  298.             if (rice->k1 > 0 && rice->sum1 < ff_tta_shift_16[rice->k1])
  299.                 rice->k1--;
  300.             else if(rice->sum1 > ff_tta_shift_16[rice->k1 + 1])
  301.                 rice->k1++;
  302.             value += ff_tta_shift_1[rice->k0];
  303.         default:
  304.             rice->sum0 += value - (rice->sum0 >> 4);
  305.             if (rice->k0 > 0 && rice->sum0 < ff_tta_shift_16[rice->k0])
  306.                 rice->k0--;
  307.             else if(rice->sum0 > ff_tta_shift_16[rice->k0 + 1])
  308.                 rice->k0++;
  309.         }
  310.  
  311.         // extract coded value
  312.         *p = 1 + ((value >> 1) ^ ((value & 1) - 1));
  313.  
  314.         // run hybrid filter
  315.         s->dsp.ttafilter_process_dec(filter->qm, filter->dx, filter->dl, &filter->error, p,
  316.                                      filter->shift, filter->round);
  317.  
  318.         // fixed order prediction
  319. #define PRED(x, k) (int32_t)((((uint64_t)(x) << (k)) - (x)) >> (k))
  320.         switch (s->bps) {
  321.         case 1: *p += PRED(*predictor, 4); break;
  322.         case 2:
  323.         case 3: *p += PRED(*predictor, 5); break;
  324.         case 4: *p +=      *predictor;     break;
  325.         }
  326.         *predictor = *p;
  327.  
  328.         // flip channels
  329.         if (cur_chan < (s->channels-1))
  330.             cur_chan++;
  331.         else {
  332.             // decorrelate in case of multiple channels
  333.             if (s->channels > 1) {
  334.                 int32_t *r = p - 1;
  335.                 for (*p += *r / 2; r > p - s->channels; r--)
  336.                     *r = *(r + 1) - *r;
  337.             }
  338.             cur_chan = 0;
  339.             i++;
  340.             // check for last frame
  341.             if (i == s->last_frame_length && get_bits_left(&gb) / 8 == 4) {
  342.                 frame->nb_samples = framelen = s->last_frame_length;
  343.                 break;
  344.             }
  345.         }
  346.     }
  347.  
  348.     align_get_bits(&gb);
  349.     if (get_bits_left(&gb) < 32) {
  350.         ret = AVERROR_INVALIDDATA;
  351.         goto error;
  352.     }
  353.     skip_bits_long(&gb, 32); // frame crc
  354.  
  355.     // convert to output buffer
  356.     switch (s->bps) {
  357.     case 1: {
  358.         uint8_t *samples = (uint8_t *)frame->data[0];
  359.         for (p = s->decode_buffer; p < s->decode_buffer + (framelen * s->channels); p++)
  360.             *samples++ = *p + 0x80;
  361.         break;
  362.         }
  363.     case 2: {
  364.         int16_t *samples = (int16_t *)frame->data[0];
  365.         for (p = s->decode_buffer; p < s->decode_buffer + (framelen * s->channels); p++)
  366.             *samples++ = *p;
  367.         break;
  368.         }
  369.     case 3: {
  370.         // shift samples for 24-bit sample format
  371.         int32_t *samples = (int32_t *)frame->data[0];
  372.         for (i = 0; i < framelen * s->channels; i++)
  373.             *samples++ <<= 8;
  374.         // reset decode buffer
  375.         s->decode_buffer = NULL;
  376.         break;
  377.         }
  378.     }
  379.  
  380.     *got_frame_ptr = 1;
  381.  
  382.     return buf_size;
  383. error:
  384.     // reset decode buffer
  385.     if (s->bps == 3)
  386.         s->decode_buffer = NULL;
  387.     return ret;
  388. }
  389.  
  390. static int init_thread_copy(AVCodecContext *avctx)
  391. {
  392.     TTAContext *s = avctx->priv_data;
  393.     s->avctx = avctx;
  394.     return allocate_buffers(avctx);
  395. }
  396.  
  397. static av_cold int tta_decode_close(AVCodecContext *avctx) {
  398.     TTAContext *s = avctx->priv_data;
  399.  
  400.     if (s->bps < 3)
  401.         av_freep(&s->decode_buffer);
  402.     s->decode_buffer = NULL;
  403.     av_freep(&s->ch_ctx);
  404.  
  405.     return 0;
  406. }
  407.  
  408. #define OFFSET(x) offsetof(TTAContext, x)
  409. #define DEC (AV_OPT_FLAG_DECODING_PARAM | AV_OPT_FLAG_AUDIO_PARAM)
  410. static const AVOption options[] = {
  411.     { "password", "Set decoding password", OFFSET(pass), AV_OPT_TYPE_STRING, { .str = NULL }, 0, 0, DEC },
  412.     { NULL },
  413. };
  414.  
  415. static const AVClass tta_decoder_class = {
  416.     .class_name = "TTA Decoder",
  417.     .item_name  = av_default_item_name,
  418.     .option     = options,
  419.     .version    = LIBAVUTIL_VERSION_INT,
  420. };
  421.  
  422. AVCodec ff_tta_decoder = {
  423.     .name           = "tta",
  424.     .long_name      = NULL_IF_CONFIG_SMALL("TTA (True Audio)"),
  425.     .type           = AVMEDIA_TYPE_AUDIO,
  426.     .id             = AV_CODEC_ID_TTA,
  427.     .priv_data_size = sizeof(TTAContext),
  428.     .init           = tta_decode_init,
  429.     .close          = tta_decode_close,
  430.     .decode         = tta_decode_frame,
  431.     .init_thread_copy = ONLY_IF_THREADS_ENABLED(init_thread_copy),
  432.     .capabilities   = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS,
  433.     .priv_class     = &tta_decoder_class,
  434. };
  435.