int avpriv_adx_decode_header(AVCodecContext *avctx, const uint8_t *buf,

                             int bufsize, int *header_size, int *coeff)

{

    int offset, cutoff;



    if (bufsize < 24)

        return AVERROR_INVALIDDATA;



    if (AV_RB16(buf) != 0x8000)

        return AVERROR_INVALIDDATA;

    offset = AV_RB16(buf + 2) + 4;



    /* if copyright string is within the provided data, validate it */

    if (bufsize >= offset && memcmp(buf + offset - 6, "(c)CRI", 6))

        return AVERROR_INVALIDDATA;



    /* check for encoding=3 block_size=18, sample_size=4 */

    if (buf[4] != 3 || buf[5] != 18 || buf[6] != 4) {

        av_log_ask_for_sample(avctx, "unsupported ADX format\n");

        return AVERROR_PATCHWELCOME;

    }



    /* channels */

    avctx->channels = buf[7];

    if (avctx->channels > 2)

        return AVERROR_INVALIDDATA;



    /* sample rate */

    avctx->sample_rate = AV_RB32(buf + 8);

    if (avctx->sample_rate < 1 ||

        avctx->sample_rate > INT_MAX / (avctx->channels * BLOCK_SIZE * 8))

        return AVERROR_INVALIDDATA;



    /* bit rate */

    avctx->bit_rate = avctx->sample_rate * avctx->channels * BLOCK_SIZE * 8 / BLOCK_SAMPLES;



    /* LPC coefficients */

    if (coeff) {

        cutoff = AV_RB16(buf + 16);

        ff_adx_calculate_coeffs(cutoff, avctx->sample_rate, COEFF_BITS, coeff);

    }



    *header_size = offset;

    return 0;

}

int avpriv_adx_decode_header(AVCodecContext *avctx, const uint8_t *buf,

                             int bufsize, int *header_size, int *coeff)

{

    int offset, cutoff;



    if (bufsize < 24)

        return AVERROR_INVALIDDATA;



    if (AV_RB16(buf) != 0x8000)

        return AVERROR_INVALIDDATA;

    offset = AV_RB16(buf + 2) + 4;



    

    if (bufsize >= offset && memcmp(buf + offset - 6, "(c)CRI", 6))

        return AVERROR_INVALIDDATA;



    

    if (buf[4] != 3 || buf[5] != 18 || buf[6] != 4) {

        av_log_ask_for_sample(avctx, "unsupported ADX format\n");

        return AVERROR_PATCHWELCOME;

    }



    

    avctx->channels = buf[7];

    if (avctx->channels > 2)

        return AVERROR_INVALIDDATA;



    

    avctx->sample_rate = AV_RB32(buf + 8);

    if (avctx->sample_rate < 1 ||

        avctx->sample_rate > INT_MAX / (avctx->channels * BLOCK_SIZE * 8))

        return AVERROR_INVALIDDATA;



    

    avctx->bit_rate = avctx->sample_rate * avctx->channels * BLOCK_SIZE * 8 / BLOCK_SAMPLES;



    

    if (coeff) {

        cutoff = AV_RB16(buf + 16);

        ff_adx_calculate_coeffs(cutoff, avctx->sample_rate, COEFF_BITS, coeff);

    }



    *header_size = offset;

    return 0;

}

    if (avctx->channels > 2)
int FUNC_0(AVCodecContext *VAR_0, const uint8_t *VAR_1,

                             int VAR_2, int *VAR_3, int *VAR_4)

{

    int VAR_5, VAR_6;



    if (VAR_2 < 24)

        return AVERROR_INVALIDDATA;



    if (AV_RB16(VAR_1) != 0x8000)

        return AVERROR_INVALIDDATA;

    VAR_5 = AV_RB16(VAR_1 + 2) + 4;



    

    if (VAR_2 >= VAR_5 && memcmp(VAR_1 + VAR_5 - 6, "(c)CRI", 6))

        return AVERROR_INVALIDDATA;



    

    if (VAR_1[4] != 3 || VAR_1[5] != 18 || VAR_1[6] != 4) {

        av_log_ask_for_sample(VAR_0, "unsupported ADX format\n");

        return AVERROR_PATCHWELCOME;

    }



    

    VAR_0->channels = VAR_1[7];

    if (VAR_0->channels > 2)

        return AVERROR_INVALIDDATA;



    

    VAR_0->sample_rate = AV_RB32(VAR_1 + 8);

    if (VAR_0->sample_rate < 1 ||

        VAR_0->sample_rate > INT_MAX / (VAR_0->channels * BLOCK_SIZE * 8))

        return AVERROR_INVALIDDATA;



    

    VAR_0->bit_rate = VAR_0->sample_rate * VAR_0->channels * BLOCK_SIZE * 8 / BLOCK_SAMPLES;



    

    if (VAR_4) {

        VAR_6 = AV_RB16(VAR_1 + 16);

        ff_adx_calculate_coeffs(VAR_6, VAR_0->sample_rate, COEFF_BITS, VAR_4);

    }



    *VAR_3 = VAR_5;

    return 0;

}

int FUNC_0(AVCodecContext *VAR_0, const uint8_t *VAR_1,
int VAR_2, int *VAR_3, int *VAR_4)
{ int VAR_5, VAR_6; if (VAR_2 < 24)
return AVERROR_INVALIDDATA; if (AV_RB16(VAR_1) != 0x8000)
return AVERROR_INVALIDDATA; VAR_5 = AV_RB16(VAR_1 + 2) + 4; if (VAR_2 >= VAR_5 && memcmp(VAR_1 + VAR_5 - 6, "(c)CRI", 6))
return AVERROR_INVALIDDATA; if (VAR_1[4] != 3 || VAR_1[5] != 18 || VAR_1[6] != 4) { av_log_ask_for_sample(VAR_0, "unsupported ADX format\n"); return AVERROR_PATCHWELCOME; } VAR_0->channels = VAR_1[7]; if (VAR_0->channels > 2)
return AVERROR_INVALIDDATA; VAR_0->sample_rate = AV_RB32(VAR_1 + 8); if (VAR_0->sample_rate < 1 ||
VAR_0->sample_rate > INT_MAX / (VAR_0->channels * BLOCK_SIZE * 8))
return AVERROR_INVALIDDATA; VAR_0->bit_rate = VAR_0->sample_rate * VAR_0->channels * BLOCK_SIZE * 8 / BLOCK_SAMPLES; if (VAR_4) { VAR_6 = AV_RB16(VAR_1 + 16); ff_adx_calculate_coeffs(VAR_6, VAR_0->sample_rate, COEFF_BITS, VAR_4); } *VAR_3 = VAR_5; return 0; }