/*
 * Siren audio decoder
 * Copyright (c) 2012 Youness Alaoui <kakaroto@kakaroto.homelinux.net>
 * Copyright (c) 2018 Paul B Mahol
 * Copyright (c) 2019 Lynne <dev@lynne.ee>
 *
 * This file is part of FFmpeg.
 *
 * FFmpeg is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * FFmpeg is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with FFmpeg; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 */

#include "libavutil/tx.h"
#include "libavutil/float_dsp.h"

#include "avcodec.h"
#include "get_bits.h"
#include "internal.h"
#include "mathops.h"

static const uint8_t index_table[8] = {4, 4, 3, 3, 2, 2, 1, 0};
static const uint8_t vector_dimension[8] = { 2, 2, 2, 4, 4, 5, 5, 1 };
static const uint8_t number_of_vectors[8] = { 10, 10, 10, 5, 5, 4, 4, 20 };
static const uint8_t expected_bits_table[8] = { 52, 47, 43, 37, 29, 22, 16, 0 };
static const int8_t differential_decoder_tree[27][24][2] = {
    {
        {1, 2}, {3, 4}, {5, 6}, {7, 8}, {9, 10}, {11, -12}, {-11, -10}, {-8, -9}, {-7, -6}, {-13, 12},
        {-5, -4}, {0, 13}, {-3, -14}, {-2, 14}, {-1, 15}, {-15, 16}, {-16, 17}, {-17, 18}, {19, 20},
        {21, 22}, {-18, -19}, {-20, -21}, {-22, -23}, {-32, -32}
    },
    {
        {1, 2}, {3, 4}, {5, 6}, {7, 8}, {-10, -9}, {-8, -11}, {-7, -6}, {9, -5}, {10, -12}, {-4, 11},
        {-13, -3}, {12, -2}, {13, -14}, {-1, 14}, {15, -15}, {0, 16}, {-16, 17}, {-17, 18}, {-18, 19},
        {20, 21},{22, -19}, {-20, -21}, {-22, -23}, {-32, -32}
    },
    {
        {1, 2}, {3, 4}, {5, 6}, {7, 8}, {9, 10}, {-12, 11}, {-11, -13}, {-10, -9}, {12, -14}, {-8, -7},
        {-15, -6}, {13, -5}, {-16, -4}, {14, -17}, {15, -3}, {16, -18}, {-2, 17}, {18, -19}, {-1, 19},
        {-20, 20}, {0, 21}, {22, -21}, {-22, -23}, {-32, -32}
    },
    {
        {1, 2}, {3, 4}, {5, 6}, {-11, -10}, {7, -12}, {8, -9}, {9, -13}, {-14, 10}, {-8, -15}, {-16, 11},
        {-7, 12}, {-17, -6}, {13, 14}, {-18, 15}, {-5, -4}, {16, 17}, {-3, -2}, {-19, 18}, {-1, 19},
        {-20, 20}, {21, 22}, {0, -21}, {-22, -23}, {-32, -32}
    },
    {
        {1, 2}, {3, 4}, {5, 6}, {-12, -11}, {-13, 7}, {8, -14}, {-10, 9}, {10, -15}, {-9, 11}, {-8, 12},
        {-16, 13}, {-7, -6}, {-17, 14}, {-5, -18}, {15, -4}, {16, -19}, {17, -3}, {-20, 18}, {-2, 19},
        {-21, 20}, {0, 21}, {22, -1}, {-22, -23}, {-32, -32}
    },
    {
        {1, 2}, {3, 4}, {5, 6}, {-11, 7}, {-12, -10}, {-13, -9}, {8, 9}, {-14, -8}, {10, -15}, {-7, 11},
        {-16, 12}, {-6, -17}, {13, 14}, {-5, 15}, {-18, 16}, {-4, 17}, {-3, -19}, {18, -2}, {-20, 19},
        {-1, 20}, {0, 21}, {22, -21}, {-22, -23}, {-32, -32}
    },
    {
        {1, 2}, {3, 4}, {5, -12}, {6, -11}, {-10, -13}, {-9, 7}, {8, -14}, {9, -8}, {-15, 10}, {-7, -16},
        {11, -6}, {12, -17}, {13, -5}, {-18, 14}, {15, -4}, {-19, 16}, {17, -3}, {-20, 18}, {19, 20},
        {21, 22}, {0, -2}, {-1, -21}, {-22, -23}, {-32, -32}
    },
    {
        {1, 2}, {3, 4}, {5, -12}, {6, -13}, {-11, -10}, {7, -14}, {8, -9}, {9, -15}, {-8, 10}, {-7, -16},
        {11, 12}, {-6, -17}, {-5, 13}, {14, 15}, {-18, -4}, {-19, 16}, {-3, 17}, {18, -2}, {-20, 19},
        {20, 21}, {22, 0}, {-1, -21}, {-22, -23}, {-32, -32}
    },
    {
        {1, 2}, {3, 4}, {5, 6}, {-11, -10}, {-12, -9}, {7, 8}, {-13, -8}, {9, -14}, {-7, 10}, {-6, -15},
        {11, 12}, {-5, -16}, {13, 14}, {-17, 15}, {-4, 16}, {17, -18}, {18, -3}, {-2, 19}, {-1, 0},
        {-19, 20}, {-20, 21}, {22, -21}, {-22, -23}, {-32, -32}
    },
    {
        {1, 2}, {3, 4}, {5, 6}, {-11, 7}, {-10, -12}, {-9, 8}, {-8, -13}, {9, -7}, {10, -14}, {-6, 11},
        {-15, 12}, {-5, 13}, {-16, -4}, {14, 15}, {-17, -3}, {-18, 16}, {17, -19}, {-2, 18}, {-20, 19},
        {-1, 20}, {21, 22}, {0, -21}, {-22, -23}, {-32, -32}
    },
    {
        {1, 2}, {3, 4}, {5, -12}, {6, -11}, {7, 8}, {-10, -13}, {-9, 9}, {-8, -14}, {10, -7}, {11, -15},
        {-6, 12}, {-5, 13}, {-4, -16}, {14, 15}, {-3, -17}, {16, 17}, {-18, -2}, {18, -19}, {-1, 19},
        {-20, 20}, {-21, 21}, {22, 0}, {-22, -23}, {-32, -32}
    },
    {
        {1, 2}, {3, 4}, {5, -12}, {-13, 6}, {-11, 7}, {-14, 8}, {-10, 9}, {-15, -9}, {-8, 10}, {-7, -16},
        {11, -6}, {12, -5}, {-17, 13}, {14, -18}, {15, -4}, {16, -19}, {17, -3}, {18, -2}, {19, -1},
        {-20, 20}, {21, 22}, {0, -21}, {-22, -23}, {-32, -32}
    },
    {
        {1, 2}, {3, 4}, {-12, 5}, {-11, -13}, {6, -14}, {-10, 7}, {8, -15}, {-9, 9}, {-16, 10}, {-8, -17},
        {11, 12}, {-7, -18}, {-6, 13}, {14, -5}, {15, -19}, {-4, 16}, {-20, 17}, {18, 19}, {20, 21},
        {22, 0}, {-1, -3}, {-2, -21}, {-22, -23}, {-32, -32}
    },
    {
        {1, 2}, {3, 4}, {-12, 5}, {-11, -13}, {6, -14}, {-10, 7}, {8, -15}, {-9, 9}, {-16, 10}, {-8, -17},
        {11, 12}, {-7, -18}, {-6, 13}, {14, -5}, {15, -19}, {-4, 16}, {-20, 17}, {18, 19}, {20, 21},
        {22, 0}, {-1, -3}, {-2, -21}, {-22, -23}, {-32, -32}
    },
    {
        {1, 2}, {3, 4}, {-12, 5}, {-11, -13}, {6, -14}, {-10, 7}, {8, -15}, {-9, 9}, {-16, 10}, {-8, -17},
        {11, 12}, {-7, -18}, {-6, 13}, {14, -5}, {15, -19}, {-4, 16}, {-20, 17}, {18, 19}, {20, 21},
        {22, 0}, {-1, -3}, {-2, -21}, {-22, -23}, {-32, -32}
    },
    {
        {1, 2}, {3, 4}, {-12, 5}, {-11, -13}, {6, -14}, {-10, 7}, {8, -15}, {-9, 9}, {-16, 10}, {-8, -17},
        {11, 12}, {-7, -18}, {-6, 13}, {14, -5}, {15, -19}, {-4, 16}, {-20, 17}, {18, 19}, {20, 21},
        {22, 0}, {-1, -3}, {-2, -21}, {-22, -23}, {-32, -32}
    },
    {
        {1, 2}, {3, 4}, {-12, 5}, {-11, -13}, {6, -14}, {-10, 7}, {8, -15}, {-9, 9}, {-16, 10}, {-8, -17},
        {11, 12}, {-7, -18}, {-6, 13}, {14, -5}, {15, -19}, {-4, 16}, {-20, 17}, {18, 19}, {20, 21},
        {22, 0}, {-1, -3}, {-2, -21}, {-22, -23}, {-32, -32}
    },
    {
        {1, 2}, {3, 4}, {-12, 5}, {-11, -13}, {6, -14}, {-10, 7}, {8, -15}, {-9, 9}, {-16, 10}, {-8, -17},
        {11, 12}, {-7, -18}, {-6, 13}, {14, -5}, {15, -19}, {-4, 16}, {-20, 17}, {18, 19}, {20, 21},
        {22, 0}, {-1, -3}, {-2, -21}, {-22, -23}, {-32, -32}
    },
    {
        {1, 2}, {3, 4}, {-12, 5}, {-11, -13}, {6, -14}, {-10, 7}, {8, -15}, {-9, 9}, {-16, 10}, {-8, -17},
        {11, 12}, {-7, -18}, {-6, 13}, {14, -5}, {15, -19}, {-4, 16}, {-20, 17}, {18, 19}, {20, 21},
        {22, 0}, {-1, -3}, {-2, -21}, {-22, -23}, {-32, -32}
    },
    {
        {1, 2}, {3, 4}, {-12, 5}, {-11, -13}, {6, -14}, {-10, 7}, {8, -15}, {-9, 9}, {-16, 10}, {-8, -17},
        {11, 12}, {-7, -18}, {-6, 13}, {14, -5}, {15, -19}, {-4, 16}, {-20, 17}, {18, 19}, {20, 21},
        {22, 0}, {-1, -3}, {-2, -21}, {-22, -23}, {-32, -32}
    },
    {
        {1, 2}, {3, 4}, {-12, 5}, {-11, -13}, {6, -14}, {-10, 7}, {8, -15}, {-9, 9}, {-16, 10}, {-8, -17},
        {11, 12}, {-7, -18}, {-6, 13}, {14, -5}, {15, -19}, {-4, 16}, {-20, 17}, {18, 19}, {20, 21},
        {22, 0}, {-1, -3}, {-2, -21}, {-22, -23}, {-32, -32}
    },
    {
        {1, 2}, {3, 4}, {-12, 5}, {-11, -13}, {6, -14}, {-10, 7}, {8, -15}, {-9, 9}, {-16, 10}, {-8, -17},
        {11, 12}, {-7, -18}, {-6, 13}, {14, -5}, {15, -19}, {-4, 16}, {-20, 17}, {18, 19}, {20, 21},
        {22, 0}, {-1, -3}, {-2, -21}, {-22, -23}, {-32, -32}
    },
    {
        {1, 2}, {3, 4}, {-12, 5}, {-11, -13}, {6, -14}, {-10, 7}, {8, -15}, {-9, 9}, {-16, 10}, {-8, -17},
        {11, 12}, {-7, -18}, {-6, 13}, {14, -5}, {15, -19}, {-4, 16}, {-20, 17}, {18, 19}, {20, 21},
        {22, 0}, {-1, -3}, {-2, -21}, {-22, -23}, {-32, -32}
    },
    {
        {1, 2}, {3, 4}, {-12, 5}, {-11, -13}, {6, -14}, {-10, 7}, {8, -15}, {-9, 9}, {-16, 10}, {-8, -17},
        {11, 12}, {-7, -18}, {-6, 13}, {14, -5}, {15, -19}, {-4, 16}, {-20, 17}, {18, 19}, {20, 21},
        {22, 0}, {-1, -3}, {-2, -21}, {-22, -23}, {-32, -32}
    },
    {
        {1, 2}, {3, 4}, {-12, 5}, {-11, -13}, {6, -14}, {-10, 7}, {8, -15}, {-9, 9}, {-16, 10}, {-8, -17},
        {11, 12}, {-7, -18}, {-6, 13}, {14, -5}, {15, -19}, {-4, 16}, {-20, 17}, {18, 19}, {20, 21},
        {22, 0}, {-1, -3}, {-2, -21}, {-22, -23}, {-32, -32}
    },
    {
        {1, 2}, {3, 4}, {-12, 5}, {-11, -13}, {6, -14}, {-10, 7}, {8, -15}, {-9, 9}, {-16, 10}, {-8, -17},
        {11, 12}, {-7, -18}, {-6, 13}, {14, -5}, {15, -19}, {-4, 16}, {-20, 17}, {18, 19}, {20, 21},
        {22, 0}, {-1, -3}, {-2, -21}, {-22, -23}, {-32, -32}
    },
    {
        {1, 2}, {3, 4}, {-12, 5}, {-11, -13}, {6, -14}, {-10, 7}, {8, -15}, {-9, 9}, {-16, 10}, {-8, -17},
        {11, 12}, {-7, -18}, {-6, 13}, {14, -5}, {15, -19}, {-4, 16}, {-20, 17}, {18, 19}, {20, 21},
        {22, 0}, {-1, -3}, {-2, -21}, {-22, -23}, {-32, -32}
    },
};

static const uint16_t decoder_tree0[360] = {
    2, 1, 4, 6, 8, 10, 12, 14, 16, 18, 33, 3, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 35, 40,
    42, 44, 46, 5, 48, 65, 50, 52, 54, 56, 58, 60, 62, 64, 37, 66, 67, 68, 97, 70, 72, 74, 7,
    76, 78, 80, 82, 84, 86, 88, 99, 90, 39, 92, 94, 96, 129, 98, 9, 100, 102, 104, 106, 108,
    110, 112, 41, 161, 69, 114, 116, 118, 131, 120, 122, 11, 124, 126, 128, 193, 130, 132, 71,
    134, 43, 136, 138, 140, 163, 101, 13, 142, 144, 146, 148, 150, 152, 154, 225, 156, 158, 195,
    160, 162, 45, 164, 15, 166, 73, 168, 170, 133, 47, 172, 257, 174, 176, 178, 75, 103, 180, 165,
    182, 17, 227, 184, 105, 49, 135, 186, 289, 188, 259, 190, 192, 194, 196, 198, 291, 77, 200,
    202, 197, 107, 204, 19, 51, 229, 206, 167, 208, 210, 212, 214, 21, 79, 81, 109, 216, 218, 220,
    222, 53, 137, 224, 199, 226, 323, 321, 169, 228, 111, 230, 232, 139, 261, 234, 83, 236, 201,
    238, 240, 293, 242, 353, 231, 141, 244, 246, 113, 23, 355, 85, 248, 55, 115, 250, 263, 252,
    254, 203, 171, 256, 258, 233, 235, 143, 357, 325, 260, 295, 262, 173, 145, 177, 87, 264, 327,
    267, 266, 268, 175, 270, 272, 117, 297, 274, 265, 147, 179, 205, 276, 207, 237, 269, 278, 57,
    59, 387, 209, 280, 282, 149, 329, 385, 284, 25, 286, 239, 119, 288, 27, 290, 292, 299, 294, 359,
    89, 296, 298, 419, 181, 300, 331, 271, 417, 211, 361, 151, 389, 241, 302, 304, 303, 306, 308,
    421, 91, 310, 312, 391, 314, 121, 316, 333, 318, 275, 213, 301, 243, 183, 335, 320, 363, 322,
    215, 324, 393, 273, 337, 153, 326, 423, 365, 328, 367, 247, 395, 185, 123, 330, 425, 245, 155,
    332, 334, 305, 397, 336, 277, 217, 338, 340, 339, 427, 342, 344, 346, 307, 399, 187, 348, 309,
    341, 350, 369, 279, 311, 429, 249, 219, 352, 354, 356, 358, 431, 373, 401, 371, 313, 281, 433,
    343, 403, 251, 283
};

static const uint16_t decoder_tree1[188] = {
    2, 1, 4, 6, 8, 10, 12, 14, 16, 3, 33, 18, 20, 22, 24, 26, 35, 28, 30, 32, 34, 36, 5, 65, 38, 40,
    37, 42, 44, 46, 67, 48, 50, 52, 54, 56, 58, 60, 7, 62, 39, 97, 64, 69, 66, 99, 68, 70, 72, 74, 76,
    78, 80, 129, 41, 131, 82, 9, 71, 84, 86, 101, 88, 90, 92, 94, 96, 161, 43, 11, 73, 98, 103, 100,
    163, 102, 104, 106, 108, 133, 110, 105, 112, 75, 114, 45, 13, 116, 165, 118, 195, 135, 193, 120, 77,
    122, 47, 124, 167, 225, 126, 79, 107, 227, 128, 137, 197, 15, 130, 169, 199, 132, 109, 134, 17, 139,
    49, 136, 229, 138, 140, 81, 259, 142, 144, 171, 146, 141, 148, 111, 150, 201, 231, 152, 51, 257, 289,
    154, 19, 113, 156, 261, 158, 203, 173, 263, 143, 160, 291, 235, 83, 162, 233, 265, 164, 205, 166, 293,
    145, 168, 175, 177, 237, 115, 295, 170, 207, 172, 267, 174, 176, 297, 147, 178, 180, 269, 182, 271,
    209, 299, 239, 179, 184, 301, 241, 211, 0, 0
};

static const uint16_t decoder_tree2[96] = {
    2, 1, 4, 6, 8, 10, 12, 3, 17, 14, 19, 16, 18, 20, 22, 24, 26, 5, 21, 35, 33, 28, 30, 32, 34, 36, 38, 37,
    40, 23, 51, 42, 7, 49, 44, 46, 48, 50, 39, 53, 52, 54, 56, 25, 67, 9, 58, 60, 65, 55, 41, 62, 64, 69, 66,
    11, 27, 68, 57, 83, 70, 71, 81, 43, 72, 74, 13, 76, 85, 29, 73, 78, 99, 59, 87, 101, 80, 97, 45, 82, 84,
    75, 89, 61, 86, 103, 88, 77, 90, 105, 91, 92, 107, 93, 0, 0
};

static const uint16_t decoder_tree3[1040] = {
    2, 4, 6, 8, 10, 1, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 3, 36, 1025, 38, 40, 42, 44, 46, 48, 50,
    129, 17, 52, 54, 1153, 19, 56, 58, 60, 62, 64, 66, 68, 145, 70, 72, 74, 76, 78, 1169, 1027, 147, 80, 82, 1171,
    84, 86, 131, 88, 1155, 1043, 1041, 90, 92, 5, 94, 96, 98, 100, 102, 104, 21, 106, 108, 2049, 2177, 110, 112, 114,
    116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 33, 144, 163, 146, 148, 150, 152, 154, 161,
    156, 35, 158, 1297, 160, 162, 273, 257, 164, 166, 149, 168, 1281, 170, 172, 2193, 174, 176, 178, 1299, 180, 1045,
    182, 184, 1173, 186, 3201, 188, 190, 192, 194, 2195, 1187, 23, 2179, 196, 7, 198, 275, 200, 2051, 202, 2065, 204,
    206, 1029, 1185, 208, 210, 1157, 37, 3073, 2067, 133, 212, 214, 2321, 216, 165, 218, 1059, 220, 1283, 222, 2305,
    224, 226, 228, 230, 259, 232, 234, 2323, 236, 1409, 1057, 1315, 238, 240, 242, 244, 246, 1425, 248, 1313, 250, 252,
    254, 256, 258, 260, 289, 262, 264, 1189, 266, 268, 179, 151, 270, 272, 274, 276, 278, 291, 280, 282, 9, 385, 284,
    286, 177, 49, 401, 1061, 288, 290, 292, 51, 294, 296, 298, 300, 302, 304, 25, 306, 2083, 39, 308, 310, 3329, 167,
    312, 314, 1175, 316, 318, 1203, 135, 320, 322, 324, 326, 328, 2211, 2307, 330, 1301, 332, 334, 1047, 336, 338, 2449,
    3217, 340, 1427, 2209, 53, 342, 2339, 3345, 344, 346, 348, 403, 181, 4097, 2197, 350, 2181, 1285, 1317, 1031, 352,
    354, 356, 3089, 358, 360, 4225, 277, 362, 364, 366, 368, 2069, 370, 3203, 293, 1201, 305, 372, 3219, 307, 2433, 374,
    376, 378, 380, 2081, 1411, 382, 384, 3075, 1443, 513, 386, 387, 388, 390, 1331, 261, 392, 394, 396, 398, 400, 1441,
    1075, 67, 1159, 402, 404, 406, 408, 410, 412, 414, 3347, 2325, 416, 65, 418, 420, 422, 424, 426, 2053, 193, 1073, 428,
    430, 432, 1537, 1329, 2337, 2213, 434, 417, 183, 41, 436, 438, 440, 442, 444, 446, 448, 450, 195, 2435, 452, 2085, 1063,
    1191, 454, 456, 458, 460, 419, 2071, 1553, 3091, 55, 137, 462, 464, 466, 468, 470, 472, 474, 476, 478, 2309, 4113, 480,
    482, 484, 486, 2451, 2465, 1205, 153, 488, 490, 492, 494, 496, 498, 500, 502, 504, 506, 508, 510, 512, 514, 516, 518,
    520, 522, 524, 1333, 526, 1555, 2467, 2227, 3205, 3331, 528, 530, 532, 534, 536, 538, 540, 542, 544, 546, 548, 529, 309,
    1303, 3473, 3457, 389, 1569, 1445, 1077, 69, 2199, 1539, 4353, 550, 552, 554, 556, 558, 560, 562, 1459, 4241, 3221, 1429,
    2341, 279, 3475, 169, 564, 545, 3105, 323, 2353, 2097, 3235, 421, 2229, 3107, 3233, 566, 568, 570, 572, 574, 576, 578,
    580, 582, 584, 586, 588, 590, 592, 594, 596, 2099, 1091, 531, 2437, 4227, 405, 197, 263, 1287, 2577, 1049, 1571, 598, 600,
    602, 604, 606, 608, 610, 612, 614, 616, 618, 620, 622, 624, 626, 628, 630, 632, 634, 636, 638, 640, 642, 644, 646, 648, 650,
    1345, 1219, 3077, 1457, 2225, 2579, 515, 2561, 2469, 433, 1221, 2183, 4243, 652, 654, 656, 658, 660, 662, 664, 666, 668,
    670, 1217, 3333, 3093, 435, 321, 4369, 1089, 2055, 4099, 3361, 1319, 547, 1161, 1177, 672, 2355, 4115, 1413, 4257, 3349,
    2453, 3109, 2357, 2215, 3363, 1079, 1207, 311, 1033, 1347, 1065, 674, 676, 678, 680, 682, 684, 686, 688, 690, 692, 694, 696,
    698, 700, 702, 704, 706, 708, 710, 712, 714, 716, 718, 720, 722, 724, 726, 728, 730, 732, 734, 736, 738, 740, 742, 744, 746,
    748, 750, 752, 754, 756, 758, 760, 762, 764, 766, 768, 770, 772, 774, 776, 778, 780, 782, 784, 786, 788, 790, 792, 794, 796,
    798, 800, 802, 804, 806, 808, 810, 812, 814, 2593, 2565, 4261, 3253, 437, 325, 3489, 2311, 4259, 1431, 2087, 2563, 295, 2343,
    449, 199, 265, 2201, 4371, 1193, 816, 533, 1557, 2581, 2241, 3365, 3491, 3603, 549, 2101, 1461, 1093, 2117, 3459, 3079, 4481,
    3095, 2327, 3461, 4129, 3249, 1447, 2471, 2231, 71, 4497, 2609, 1289, 393, 3251, 2073, 3097, 2371, 1305, 2089, 818, 820, 822,
    824, 826, 828, 830, 832, 834, 836, 838, 840, 842, 844, 846, 848, 850, 852, 854, 856, 858, 860, 862, 864, 866, 868, 870, 872,
    874, 876, 878, 880, 882, 884, 886, 888, 890, 892, 894, 896, 898, 900, 902, 904, 906, 908, 910, 912, 914, 916, 918, 920, 922,
    924, 926, 928, 930, 932, 934, 936, 938, 940, 942, 944, 946, 948, 950, 952, 954, 956, 958, 960, 962, 964, 966, 968, 970, 972,
    974, 976, 978, 980, 982, 984, 986, 988, 990, 992, 994, 996, 998, 1000, 1002, 1004, 1006, 1008, 1010, 1012, 1014, 1016, 1018,
    1020, 1022, 1024, 1026, 1028, 1030, 1032, 1034, 1036, 4161, 4273, 3507, 3493, 4517, 2497, 1573, 2597, 3621, 4531, 4627, 3523,
    3125, 4149, 4529, 3139, 4515, 451, 4277, 2113, 4163, 4499, 3381, 4405, 1473, 4373, 2485, 3509, 565, 1589, 2613, 3585, 3123,
    4403, 3141, 4147, 563, 2245, 3269, 4357, 1349, 2373, 3397, 453, 1477, 2501, 2481, 579, 1601, 3477, 4103, 3265, 2243, 1587,
    3207, 4231, 3267, 4501, 1475, 3335, 4359, 391, 1415, 2439, 3463, 4487, 519, 1543, 2567, 3591, 4609, 4289, 4611, 2499, 4119,
    4385, 4145, 4401, 3223, 4247, 3379, 577, 3393, 3351, 4375, 407, 1585, 2455, 3479, 4503, 535, 1559, 2583, 3607, 3605, 4513,
    4485, 3111, 4135, 3121, 517, 3377, 3239, 4263, 1541, 4291, 4229, 3367, 4391, 423, 2115, 4131, 3495, 551, 1575, 2599, 3635, 3395,
    2103, 3127, 4151, 3589, 4101, 1603, 3255, 4279, 3601, 1335, 2359, 3383, 439, 1463, 2487, 3511, 567, 1591, 4133, 1095, 2119, 3143,
    2369, 1223, 2247, 3271, 327, 1351, 2375, 455, 1479, 3137, 3521, 2057, 3081, 4105, 4387, 3505, 2185, 3209, 4233, 3587, 4355, 2313,
    3337, 3237, 1417, 2441, 3465, 521, 1545, 3617, 3633, 561, 4625, 4121, 2611, 2483, 2595, 3225, 4249, 281, 4245, 2329, 3353, 409,
    1433, 2457, 3481, 537, 1561, 4483, 3619, 4389, 3113, 4275, 4117, 2217, 3241, 297, 1321, 2345, 3369, 425, 1449, 2473, 57, 1081,
    2105, 3129, 185, 1209, 2233, 3257, 313, 1337, 2361, 441, 1465, 73, 1097, 201, 1225, 0, 0
};

static const uint16_t decoder_tree4[416] = {
    2, 4, 6, 1, 8, 10, 12, 14, 16, 18, 20, 22, 24, 3, 129, 26, 28, 9, 33, 30, 32,
    34, 36, 11, 161, 38, 40, 42, 41, 44, 46, 131, 43, 169, 35, 48, 137, 50, 52, 54, 56, 139,
    163, 171, 58, 60, 62, 64, 5, 66, 68, 70, 257, 72, 74, 76, 13, 78, 80, 289, 82, 84, 17,
    86, 88, 65, 90, 201, 19, 92, 94, 51, 193, 96, 98, 49, 100, 73, 102, 104, 106, 45, 108, 110,
    297, 112, 114, 116, 37, 203, 118, 120, 179, 122, 177, 124, 265, 126, 75, 133, 259, 291, 147, 128, 67,
    195, 130, 141, 173, 299, 132, 145, 134, 165, 136, 138, 140, 142, 7, 144, 146, 21, 267, 148, 53, 150,
    321, 152, 154, 15, 156, 81, 158, 160, 385, 162, 417, 164, 166, 168, 83, 170, 172, 329, 174, 211, 176,
    27, 178, 180, 182, 209, 184, 186, 188, 190, 25, 192, 331, 194, 196, 105, 57, 198, 97, 200, 202, 323,
    225, 59, 149, 204, 206, 233, 307, 208, 77, 181, 210, 212, 214, 216, 218, 220, 222, 47, 224, 226, 69,
    228, 230, 197, 232, 425, 393, 205, 275, 293, 39, 234, 236, 238, 305, 135, 155, 301, 143, 240, 242, 235,
    395, 244, 246, 248, 250, 252, 254, 256, 258, 260, 262, 273, 269, 185, 264, 266, 268, 270, 272, 274, 276,
    261, 153, 278, 280, 282, 187, 337, 387, 107, 284, 427, 227, 167, 419, 286, 288, 290, 292, 294, 296, 298,
    300, 302, 304, 306, 308, 310, 312, 314, 316, 318, 320, 322, 324, 326, 328, 330, 332, 334, 336, 338, 115,
    99, 85, 213, 29, 113, 23, 89, 241, 61, 449, 339, 175, 340, 342, 344, 346, 348, 350, 352, 354, 356,
    358, 360, 362, 364, 366, 368, 370, 372, 374, 376, 378, 380, 382, 384, 386, 388, 390, 392, 394, 396, 398,
    400, 402, 404, 406, 408, 410, 412, 414, 389, 361, 457, 465, 429, 451, 333, 109, 277, 243, 263, 295, 199,
    283, 151, 55, 183, 229, 357, 363, 123, 491, 397, 411, 251, 313, 441, 467, 345, 433, 461, 219, 237, 365,
    435, 353, 347, 405, 409, 217, 309, 437, 369, 371, 341, 117, 245, 249, 157, 285, 403, 189, 317, 93, 221,
    315, 401, 481, 391, 489, 121, 421, 423, 71, 483, 327, 103, 231, 443, 459, 271, 399, 355, 91, 303, 431,
    79, 207, 335, 111, 239, 281, 325, 279, 453, 101, 311, 87, 215, 31, 159, 63, 191
};

static const uint16_t decoder_tree5[384] = {
    2, 4, 1, 6, 8, 10, 12, 14, 16, 18, 20, 22, 3, 513, 24, 26, 28, 9, 129, 33, 30, 32, 34, 36, 38, 40, 11, 42, 641, 44, 46, 41,
    161, 48, 515, 50, 52, 131, 54, 35, 545, 137, 56, 58, 60, 521, 62, 43, 673, 64, 169, 66, 68, 523, 70, 163, 643, 139, 553, 72, 649, 74, 547,
    76, 78, 80, 681, 171, 82, 84, 555, 86, 675, 88, 651, 5, 90, 92, 1025, 94, 96, 98, 683, 13,
    100, 17, 102, 104, 106, 65, 108, 110, 257, 112, 114, 1153, 19, 116, 118, 120, 122, 124, 49, 126, 128,
    769, 289, 130, 132, 134, 73, 136, 138, 140, 142, 193, 144, 146, 148, 150, 152, 154, 517, 156, 158, 37,
    51, 160, 201, 162, 145, 164, 166, 168, 133, 170, 801, 45, 172, 174, 1057, 176, 178, 67, 180, 1027, 577,
    182, 184, 186, 188, 190, 192, 194, 196, 198, 259, 200, 202, 204, 525, 177, 265, 141, 206, 208, 210, 212,
    195, 297, 214, 75, 216, 1033, 203, 585, 1155, 1185, 267, 1161, 549, 218, 220, 657, 777, 147, 222, 224, 226,
    228, 230, 232, 234, 236, 238, 240, 587, 645, 165, 242, 244, 246, 248, 250, 771, 291, 252, 579, 1065, 1035,
    705, 531, 529, 659, 173, 254, 561, 653, 256, 713, 677, 557, 258, 260, 262, 264, 266, 268, 270, 272, 274,
    276, 278, 280, 282, 284, 286, 288, 290, 292, 294, 296, 298, 300, 707, 1059, 809, 715, 563, 179, 691, 1193,
    21, 779, 1067, 299, 1187, 302, 304, 306, 308, 310, 312, 314, 316, 318, 320, 322, 324, 326, 328, 330, 332,
    334, 336, 338, 340, 342, 344, 346, 348, 350, 352, 354, 356, 358, 360, 362, 364, 366, 368, 370, 372, 374,
    376, 378, 380, 83, 69, 1281, 803, 321, 1195, 1163, 811, 1323, 689, 1321, 1099, 305, 835, 1227, 331, 843, 785,
    593, 1043, 1291, 1283, 1171, 275, 787, 1217, 833, 1075, 1313, 1219, 1203, 307, 819, 841, 595, 211, 723, 721, 817,
    1029, 329, 81, 1157, 261, 773, 1097, 1089, 1061, 1169, 1091, 1189, 293, 805, 1201, 581, 197, 709, 1289, 273, 1037,
    1315, 1041, 1165, 269, 781, 209, 1073, 1069, 323, 685, 1197, 301, 813, 77, 589, 205, 717, 1225, 533, 149, 661,
    53, 565, 181, 693, 0, 0
};

static const uint16_t decoder_tree6[62] = {
    2, 1, 4, 6, 8, 10, 12, 14, 16, 3, 33, 5, 17, 9, 18, 20, 22, 24, 26, 28, 30, 32, 34, 7, 49, 13, 25, 36, 38, 11,
    21, 41, 35, 37, 19, 40, 42, 44, 46, 48, 50, 15, 52, 57, 29, 27, 23, 53, 54, 51, 39, 45, 43, 56, 58, 31, 55, 60,
    61, 47, 59, 63
};

static const uint16_t *const decoder_tables[7] = {
    decoder_tree0,
    decoder_tree1,
    decoder_tree2,
    decoder_tree3,
    decoder_tree4,
    decoder_tree5,
    decoder_tree6,
};

static const int decoder_tables_elements[7] = {
    FF_ARRAY_ELEMS(decoder_tree0),
    FF_ARRAY_ELEMS(decoder_tree1),
    FF_ARRAY_ELEMS(decoder_tree2),
    FF_ARRAY_ELEMS(decoder_tree3),
    FF_ARRAY_ELEMS(decoder_tree4),
    FF_ARRAY_ELEMS(decoder_tree5),
    FF_ARRAY_ELEMS(decoder_tree6),
};

static const float mlt_quant[7][14] = {
    { 0.0f, 0.392f, 0.761f, 1.120f, 1.477f, 1.832f, 2.183f, 2.541f, 2.893f, 3.245f, 3.598f, 3.942f, 4.288f, 4.724f },
    { 0.0f, 0.544f, 1.060f, 1.563f, 2.068f, 2.571f, 3.072f, 3.562f, 4.070f, 4.620f, 0.0f, 0.0f, 0.0f, 0.0f },
    { 0.0f, 0.746f, 1.464f, 2.180f, 2.882f, 3.584f, 4.316f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f },
    { 0.0f, 1.006f, 2.000f, 2.993f, 3.985f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f },
    { 0.0f, 1.321f, 2.703f, 3.983f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f },
    { 0.0f, 1.657f, 3.491f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f },
    { 0.0f, 1.964f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f }
};

static const float noise_category5[20] = {
    0.70711f, 0.6179f, 0.5005f, 0.3220f, 0.17678f, 0.17678f, 0.17678f, 0.17678f, 0.17678f, 0.17678f, 0.17678f,
    0.17678f, 0.17678f, 0.17678f, 0.17678f, 0.17678f, 0.17678f, 0.17678f, 0.17678f, 0.17678f
};

static const float noise_category6[20] = {
    0.70711f, 0.5686f, 0.3563f, 0.25f, 0.25f, 0.25f, 0.25f, 0.25f, 0.25f, 0.25f, 0.25f, 0.25f,
    0.25f, 0.25f, 0.25f, 0.25f, 0.25f, 0.25f, 0.25f, 0.25f
};

#define FRAME_SIZE 320

typedef struct SirenContext {
    GetBitContext gb;

    int rate_control_possibilities;
    int esf_adjustment;
    int number_of_regions;
    int scale_factor;
    int sample_rate_bits;
    int region_size;

    unsigned dw1, dw2, dw3, dw4;

    int absolute_region_power_index[32];
    float decoder_standard_deviation[32];
    int power_categories[32];
    int category_balance[32];
    float standard_deviation[64];
    float backup_frame[FRAME_SIZE];

    AVFloatDSPContext *fdsp;
    av_tx_fn           tx_fn;
    AVTXContext       *tx_ctx;

    DECLARE_ALIGNED(32, float, imdct_buf)[4][FRAME_SIZE];
    float          *window;
    float          *imdct_in;
    float          *imdct_out;
    float          *imdct_prev;
} SirenContext;

static av_cold int siren_init(AVCodecContext *avctx)
{
    const float scale = 1.0f / (22.f * 32768.f);
    SirenContext *s = avctx->priv_data;
    int i;

    s->imdct_in   = s->imdct_buf[0];
    s->imdct_out  = s->imdct_buf[1];
    s->imdct_prev = s->imdct_buf[2];
    s->window     = s->imdct_buf[3];

    avctx->channels       = 1;
    avctx->channel_layout = AV_CH_LAYOUT_MONO;
    avctx->sample_fmt     = AV_SAMPLE_FMT_FLT;

    s->rate_control_possibilities = 16;
    s->esf_adjustment = 7;
    s->number_of_regions = 14;
    s->scale_factor = 22;
    s->region_size = 20;
    s->dw1 = s->dw2 = s->dw3 = s->dw4 = 1;

    for (i = 0; i < 64; i++) {
        float region_power = powf(10, (i - 24) * 0.3010299957);

        s->standard_deviation[i] = sqrtf(region_power);
    }

    for (i = 0; i < FRAME_SIZE; i++) {
        float angle = ((i + 0.5f) * M_PI_2) / 320.f;
        s->window[i] = sinf(angle);
    }

    s->fdsp = avpriv_float_dsp_alloc(avctx->flags & AV_CODEC_FLAG_BITEXACT);
    if (!s->fdsp)
        return AVERROR(ENOMEM);

    return av_tx_init(&s->tx_ctx, &s->tx_fn, AV_TX_FLOAT_MDCT, 1, FRAME_SIZE, &scale, 0);
}

static int decode_envelope(SirenContext *s, GetBitContext *gb,
                           int number_of_regions, float *decoder_standard_deviation,
                           int *absolute_region_power_index, int esf_adjustment)
{
    absolute_region_power_index[0] = (int)get_bits(gb, 5) - esf_adjustment;
    absolute_region_power_index[0] = av_clip(absolute_region_power_index[0], -24, 39);
    decoder_standard_deviation[0] = s->standard_deviation[absolute_region_power_index[0] + 24];

    for (int i = 1; i < number_of_regions; i++) {
        int index = 0;

        do {
            index = differential_decoder_tree[i - 1][index][get_bits1(gb)];
        } while (index > 0);

        absolute_region_power_index[i] = av_clip(absolute_region_power_index[i - 1] - index - 12, -24, 39);
        decoder_standard_deviation[i] = s->standard_deviation[absolute_region_power_index[i] + 24];
    }

    return get_bits_count(gb);
}

static int categorize_regions(int number_of_regions, int number_of_available_bits,
                              int *absolute_region_power_index, int *power_categories,
                              int *category_balance)
{
    int region, delta, i, temp;
    int expected_number_of_code_bits;
    int min, max;
    int offset, num_rate_control_possibilities = 16,
        raw_value, raw_max_idx = 0, raw_min_idx = 0;
    int max_rate_categories[28];
    int min_rate_categories[28];
    int temp_category_balances[64];
    int *min_rate_ptr = NULL;
    int *max_rate_ptr = NULL;

    offset = -32;
    for (delta = 32; number_of_regions > 0 && delta > 0; delta /= 2) {
        expected_number_of_code_bits = 0;
        for (region = 0; region < number_of_regions; region++) {
            i = (delta + offset -
                 absolute_region_power_index[region]) >> 1;
            i = av_clip_uintp2(i, 3);
            power_categories[region] = i;
            expected_number_of_code_bits += expected_bits_table[i];

        }
        if (expected_number_of_code_bits >= number_of_available_bits - 32)
            offset += delta;
    }

    expected_number_of_code_bits = 0;
    for (region = 0; region < number_of_regions; region++) {
        i = (offset - absolute_region_power_index[region]) >> 1;
        i = av_clip_uintp2(i, 3);
        max_rate_categories[region] = min_rate_categories[region] =
            power_categories[region] = i;
        expected_number_of_code_bits += expected_bits_table[i];
    }

    min = max = expected_number_of_code_bits;
    min_rate_ptr = max_rate_ptr =
        temp_category_balances + num_rate_control_possibilities;
    for (i = 0; i < num_rate_control_possibilities - 1; i++) {
        if (min + max > number_of_available_bits * 2) {
            raw_value = -99;
            for (region = number_of_regions - 1; region >= 0; region--) {
                if (min_rate_categories[region] < 7) {
                    temp =
                        offset - absolute_region_power_index[region] -
                        2 * min_rate_categories[region];
                    if (temp > raw_value) {
                        raw_value = temp;
                        raw_min_idx = region;
                    }
                }
            }
            if (raw_value == -99)
                return AVERROR_INVALIDDATA;
            *min_rate_ptr++ = raw_min_idx;
            min +=
                expected_bits_table[min_rate_categories[raw_min_idx] + 1] -
                expected_bits_table[min_rate_categories[raw_min_idx]];
            min_rate_categories[raw_min_idx]++;
        } else {
            raw_value = 99;
            for (region = 0; region < number_of_regions; region++) {
                if (max_rate_categories[region] > 0) {
                    temp =
                        offset - absolute_region_power_index[region] -
                        2 * max_rate_categories[region];
                    if (temp < raw_value) {
                        raw_value = temp;
                        raw_max_idx = region;
                    }
                }
            }
            if (raw_value == 99)
                return AVERROR_INVALIDDATA;

            *--max_rate_ptr = raw_max_idx;
            max += expected_bits_table[max_rate_categories[raw_max_idx] - 1] -
                   expected_bits_table[max_rate_categories[raw_max_idx]];
            max_rate_categories[raw_max_idx]--;
        }
    }

    for (region = 0; region < number_of_regions; region++)
        power_categories[region] = max_rate_categories[region];

    for (i = 0; i < num_rate_control_possibilities - 1; i++)
        category_balance[i] = *max_rate_ptr++;

    return 0;
}

static int get_dw(SirenContext *s)
{
    int ret = s->dw1 + s->dw4;

    if ((ret & 0x8000) != 0)
        ret++;

    s->dw1 = s->dw2;
    s->dw2 = s->dw3;
    s->dw3 = s->dw4;
    s->dw4 = ret;

    return ret;
}

static int decode_vector(SirenContext *s, int number_of_regions,
                         int number_of_available_bits, float *decoder_standard_deviation,
                         int *power_categories, float *coefs, int scale_factor)
{
    GetBitContext *gb = &s->gb;
    float *coefs_ptr;
    float decoded_value;
    float noise;
    const uint16_t *decoder_tree;
    int region;
    int category;
    int i, j;
    int index;
    int error = 0;
    int dw1;
    int dw2;

    for (region = 0; region < number_of_regions; region++) {
        category = power_categories[region];
        coefs_ptr = coefs + (region * s->region_size);

        if (category >= 0 && category < 7) {
            decoder_tree = decoder_tables[category];

            for (i = 0; i < number_of_vectors[category]; i++) {
                index = 0;
                do {
                    if (get_bits_left(gb) <= 0) {
                        error = 1;
                        break;
                    }

                    if (index + show_bits1(gb) >= decoder_tables_elements[category]) {
                        error = 1;
                        break;
                    }
                    index = decoder_tree[index + get_bits1(gb)];
                } while ((index & 1) == 0);

                index >>= 1;

                if (error == 0 && get_bits_left(gb) >= 0) {
                    for (j = 0; j < vector_dimension[category]; j++) {
                        decoded_value = mlt_quant[category][index & ((1 << index_table[category]) - 1)];
                        index >>= index_table[category];

                        if (decoded_value) {
                            if (!get_bits1(gb))
                                decoded_value *= -decoder_standard_deviation[region];
                            else
                                decoded_value *= decoder_standard_deviation[region];
                        }

                        *coefs_ptr++ = decoded_value * scale_factor;
                    }
                } else {
                    error = 1;
                    break;
                }
            }

            if (error == 1) {
                for (j = region + 1; j < number_of_regions; j++)
                    power_categories[j] = 7;
                category = 7;
            }
        }

        coefs_ptr = coefs + (region * s->region_size);

        if (category == 5) {
            i = 0;
            for (j = 0; j < s->region_size; j++) {
                if (*coefs_ptr != 0)
                    i++;
                coefs_ptr++;
            }

            noise = decoder_standard_deviation[region] * noise_category5[i];
        } else if (category == 6) {
            i = 0;
            for (j = 0; j < s->region_size; j++) {
                if (*coefs_ptr++ != 0)
                    i++;
            }

            noise = decoder_standard_deviation[region] * noise_category6[i];
        } else if (category == 7) {
            noise = decoder_standard_deviation[region] * 0.70711f;
        } else {
            noise = 0;
        }

        coefs_ptr = coefs + (region * s->region_size);

        if (category == 5 || category == 6 || category == 7) {
            dw1 = get_dw(s);
            dw2 = get_dw(s);

            for (j = 0; j < 10; j++) {
                if (category == 7 || *coefs_ptr == 0)
                    *coefs_ptr = dw1 & 1 ? noise : -noise;
                coefs_ptr++;
                dw1 >>= 1;

                if (category == 7 || *coefs_ptr == 0)
                    *coefs_ptr = dw2 & 1 ? noise : -noise;
                coefs_ptr++;
                dw2 >>= 1;
            }
        }
    }

    return error == 1 ? AVERROR_INVALIDDATA : get_bits_left(gb);
}

static int siren_decode(AVCodecContext *avctx, void *data,
                        int *got_frame, AVPacket *avpkt)
{
    SirenContext *s = avctx->priv_data;
    GetBitContext *gb = &s->gb;
    AVFrame *frame = data;
    int ret, number_of_valid_coefs = 20 * s->number_of_regions;
    int frame_error = 0, rate_control = 0;

    if ((ret = init_get_bits8(gb, avpkt->data, avpkt->size)) < 0)
        return ret;

    decode_envelope(s, gb, s->number_of_regions,
                    s->decoder_standard_deviation,
                    s->absolute_region_power_index, s->esf_adjustment);

    rate_control = get_bits(gb, 4);

    ret = categorize_regions(s->number_of_regions, get_bits_left(gb),
                             s->absolute_region_power_index, s->power_categories,
                             s->category_balance);
    if (ret < 0)
        return ret;

    for (int i = 0; i < rate_control; i++)
        s->power_categories[s->category_balance[i]]++;

    ret = decode_vector(s, s->number_of_regions, get_bits_left(gb),
                        s->decoder_standard_deviation, s->power_categories,
                        s->imdct_in, s->scale_factor);
    if (ret < 0)
        return ret;

    if (get_bits_left(gb) > 0) {
        do {
            frame_error |= !get_bits1(gb);
        } while (get_bits_left(gb) > 0);
    } else if (get_bits_left(gb) < 0 &&
               rate_control + 1 < s->rate_control_possibilities) {
        frame_error = 1;
    }

    for (int i = 0; i < s->number_of_regions; i++) {
        if (s->absolute_region_power_index[i] > 33 ||
            s->absolute_region_power_index[i] < -31)
            frame_error = 1;
    }

    if (frame_error) {
        memcpy(s->imdct_in, s->backup_frame, number_of_valid_coefs * sizeof(float));
        memset(s->backup_frame, 0, number_of_valid_coefs * sizeof(float));
    } else {
        memcpy(s->backup_frame, s->imdct_in, number_of_valid_coefs * sizeof(float));
    }

    frame->nb_samples = FRAME_SIZE;
    if ((ret = ff_get_buffer(avctx, frame, 0)) < 0)
        return ret;

    for (int i = 0; i < 320; i += 2)
        s->imdct_in[i] *= -1;

    s->tx_fn(s->tx_ctx, s->imdct_out, s->imdct_in, sizeof(float));
    s->fdsp->vector_fmul_window((float *)frame->data[0],
                                s->imdct_prev + (FRAME_SIZE >> 1),
                                s->imdct_out, s->window,
                                FRAME_SIZE >> 1);
    FFSWAP(float *, s->imdct_out, s->imdct_prev);

    *got_frame = 1;

    return avpkt->size;
}

static av_cold void siren_flush(AVCodecContext *avctx)
{
    SirenContext *s = avctx->priv_data;

    memset(s->backup_frame, 0, sizeof(s->backup_frame));
    memset(s->imdct_prev, 0, FRAME_SIZE * sizeof(*s->imdct_prev));
    memset(s->imdct_out, 0, FRAME_SIZE * sizeof(*s->imdct_out));
}

static av_cold int siren_close(AVCodecContext *avctx)
{
    SirenContext *s = avctx->priv_data;

    av_freep(&s->fdsp);
    av_tx_uninit(&s->tx_ctx);

    return 0;
}

AVCodec ff_siren_decoder = {
    .name           = "siren",
    .long_name      = NULL_IF_CONFIG_SMALL("Siren"),
    .priv_data_size = sizeof(SirenContext),
    .type           = AVMEDIA_TYPE_AUDIO,
    .id             = AV_CODEC_ID_SIREN,
    .init           = siren_init,
    .close          = siren_close,
    .decode         = siren_decode,
    .flush          = siren_flush,
    .capabilities   = AV_CODEC_CAP_CHANNEL_CONF |
                      AV_CODEC_CAP_DR1,
    .caps_internal  = FF_CODEC_CAP_INIT_THREADSAFE |
                      FF_CODEC_CAP_INIT_CLEANUP,
};
