static int mace_decode_frame(AVCodecContext *avctx, void *data,
                             int *got_frame_ptr, AVPacket *avpkt)
{
    AVFrame *frame     = data;
    const uint8_t *buf = avpkt->data;
    int buf_size = avpkt->size;
    int16_t **samples;
    MACEContext *ctx = avctx->priv_data;
    int i, j, k, l, ret;
    int is_mace3 = (avctx->codec_id == AV_CODEC_ID_MACE3);
    /* get output buffer */
    frame->nb_samples = 3 * (buf_size << (1 - is_mace3)) / avctx->channels;
    if ((ret = ff_get_buffer(avctx, frame, 0)) < 0)
        return ret;
    samples = (int16_t **)frame->extended_data;
    for(i = 0; i < avctx->channels; i++) {
        int16_t *output = samples[i];
        for (j=0; j < buf_size / (avctx->channels << is_mace3); j++)
            for (k=0; k < (1 << is_mace3); k++) {
                uint8_t pkt = buf[(i << is_mace3) +
                                  (j*avctx->channels << is_mace3) + k];
                uint8_t val[2][3] = {{pkt >> 5, (pkt >> 3) & 3, pkt & 7 },
                                     {pkt & 7 , (pkt >> 3) & 3, pkt >> 5}};
                for (l=0; l < 3; l++) {
                    if (is_mace3)
                        chomp3(&ctx->chd[i], output, val[1][l], l);
                    else
                        chomp6(&ctx->chd[i], output, val[0][l], l);
                    output += 1 << (1-is_mace3);
    *got_frame_ptr = 1;
    return buf_size;
static int mace_decode_frame(AVCodecContext *avctx, void *data,
                             int *got_frame_ptr, AVPacket *avpkt)
{
    AVFrame *frame     = data;
    const uint8_t *buf = avpkt->data;
    int buf_size = avpkt->size;
    int16_t **samples;
    MACEContext *ctx = avctx->priv_data;
    int i, j, k, l, ret;
    int is_mace3 = (avctx->codec_id == AV_CODEC_ID_MACE3);
    
    frame->nb_samples = 3 * (buf_size << (1 - is_mace3)) / avctx->channels;
    if ((ret = ff_get_buffer(avctx, frame, 0)) < 0)
        return ret;
    samples = (int16_t **)frame->extended_data;
    for(i = 0; i < avctx->channels; i++) {
        int16_t *output = samples[i];
        for (j=0; j < buf_size / (avctx->channels << is_mace3); j++)
            for (k=0; k < (1 << is_mace3); k++) {
                uint8_t pkt = buf[(i << is_mace3) +
                                  (j*avctx->channels << is_mace3) + k];
                uint8_t val[2][3] = {{pkt >> 5, (pkt >> 3) & 3, pkt & 7 },
                                     {pkt & 7 , (pkt >> 3) & 3, pkt >> 5}};
                for (l=0; l < 3; l++) {
                    if (is_mace3)
                        chomp3(&ctx->chd[i], output, val[1][l], l);
                    else
                        chomp6(&ctx->chd[i], output, val[0][l], l);
                    output += 1 << (1-is_mace3);
    *got_frame_ptr = 1;
    return buf_size;
static int FUNC_0(AVCodecContext *VAR_0, void *VAR_1,
                             int *VAR_2, AVPacket *VAR_3)
{
    AVFrame *frame     = VAR_1;
    const uint8_t *VAR_4 = VAR_3->VAR_1;
    int VAR_5 = VAR_3->size;
    int16_t **samples;
    MACEContext *ctx = VAR_0->priv_data;
    int VAR_6, VAR_7, VAR_8, VAR_9, VAR_10;
    int VAR_11 = (VAR_0->codec_id == AV_CODEC_ID_MACE3);
    
    frame->nb_samples = 3 * (VAR_5 << (1 - VAR_11)) / VAR_0->channels;
    if ((VAR_10 = ff_get_buffer(VAR_0, frame, 0)) < 0)
        return VAR_10;
    samples = (int16_t **)frame->extended_data;
    for(VAR_6 = 0; VAR_6 < VAR_0->channels; VAR_6++) {
        int16_t *output = samples[VAR_6];
        for (VAR_7=0; VAR_7 < VAR_5 / (VAR_0->channels << VAR_11); VAR_7++)
            for (VAR_8=0; VAR_8 < (1 << VAR_11); VAR_8++) {
                uint8_t pkt = VAR_4[(VAR_6 << VAR_11) +
                                  (VAR_7*VAR_0->channels << VAR_11) + VAR_8];
                uint8_t val[2][3] = {{pkt >> 5, (pkt >> 3) & 3, pkt & 7 },
                                     {pkt & 7 , (pkt >> 3) & 3, pkt >> 5}};
                for (VAR_9=0; VAR_9 < 3; VAR_9++) {
                    if (VAR_11)
                        chomp3(&ctx->chd[VAR_6], output, val[1][VAR_9], VAR_9);
                    else
                        chomp6(&ctx->chd[VAR_6], output, val[0][VAR_9], VAR_9);
                    output += 1 << (1-VAR_11);
    *VAR_2 = 1;
    return VAR_5;
static int FUNC_0(AVCodecContext *VAR_0, void *VAR_1,
int *VAR_2, AVPacket *VAR_3)
{ AVFrame *frame     = VAR_1; const uint8_t *VAR_4 = VAR_3->VAR_1; int VAR_5 = VAR_3->size; int16_t **samples; MACEContext *ctx = VAR_0->priv_data; int VAR_6, VAR_7, VAR_8, VAR_9, VAR_10; int VAR_11 = (VAR_0->codec_id == AV_CODEC_ID_MACE3); frame->nb_samples = 3 * (VAR_5 << (1 - VAR_11)) / VAR_0->channels; if ((VAR_10 = ff_get_buffer(VAR_0, frame, 0)) < 0)
return VAR_10; samples = (int16_t **)frame->extended_data; for(VAR_6 = 0; VAR_6 < VAR_0->channels; VAR_6++) { int16_t *output = samples[VAR_6]; for (VAR_7=0; VAR_7 < VAR_5 / (VAR_0->channels << VAR_11); VAR_7++) for (VAR_8=0; VAR_8 < (1 << VAR_11); VAR_8++) { uint8_t pkt = VAR_4[(VAR_6 << VAR_11) +
(VAR_7*VAR_0->channels << VAR_11) + VAR_8]; uint8_t val[2][3] = {{pkt >> 5, (pkt >> 3) & 3, pkt & 7 }, {pkt & 7 , (pkt >> 3) & 3, pkt >> 5}}; for (VAR_9=0; VAR_9 < 3; VAR_9++) { if (VAR_11)
chomp3(&ctx->chd[VAR_6], output, val[1][VAR_9], VAR_9); else
chomp6(&ctx->chd[VAR_6], output, val[0][VAR_9], VAR_9); output += 1 << (1-VAR_11); *VAR_2 = 1; return VAR_5;