]> git.sesse.net Git - ffmpeg/blobdiff - libavcodec/dcadec.c
Merge commit '00658253e237ab975ae2d384e02b5936781f103d'
[ffmpeg] / libavcodec / dcadec.c
index f3c397250c476f92efe3e05e94d5bd1bc6dd46c5..f5ddc21c869db8ce04fb6562daa63e493a78b927 100644 (file)
@@ -22,7 +22,7 @@
 #include "libavutil/channel_layout.h"
 
 #include "dcadec.h"
-#include "dcamath.h"
+#include "dcahuff.h"
 #include "dca_syncwords.h"
 #include "profiles.h"
 
@@ -76,33 +76,6 @@ int ff_dca_set_channel_layout(AVCodecContext *avctx, int *ch_remap, int dca_mask
     return nchannels;
 }
 
-static uint16_t crc16(const uint8_t *data, int size)
-{
-    static const uint16_t crctab[16] = {
-        0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,
-        0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,
-    };
-
-    uint16_t res = 0xffff;
-    int i;
-
-    for (i = 0; i < size; i++) {
-        res = (res << 4) ^ crctab[(data[i] >> 4) ^ (res >> 12)];
-        res = (res << 4) ^ crctab[(data[i] & 15) ^ (res >> 12)];
-    }
-
-    return res;
-}
-
-int ff_dca_check_crc(GetBitContext *s, int p1, int p2)
-{
-    if (((p1 | p2) & 7) || p1 < 0 || p2 > s->size_in_bits || p2 - p1 < 16)
-        return -1;
-    if (crc16(s->buffer + p1 / 8, (p2 - p1) / 8))
-        return -1;
-    return 0;
-}
-
 void ff_dca_downmix_to_stereo_fixed(DCADSPContext *dcadsp, int32_t **samples,
                                     int *coeff_l, int nsamples, int ch_mask)
 {
@@ -350,6 +323,8 @@ static av_cold int dcadec_init(AVCodecContext *avctx)
     s->exss.avctx = avctx;
     s->xll.avctx = avctx;
 
+    ff_dca_init_vlcs();
+
     if (ff_dca_core_init(&s->core) < 0)
         return AVERROR(ENOMEM);
 
@@ -357,6 +332,8 @@ static av_cold int dcadec_init(AVCodecContext *avctx)
     s->core.dcadsp = &s->dcadsp;
     s->xll.dcadsp = &s->dcadsp;
 
+    s->crctab = av_crc_get_table(AV_CRC_16_CCITT);
+
     switch (avctx->request_channel_layout & ~AV_CH_LAYOUT_NATIVE) {
     case 0:
         s->request_channel_layout = 0;