/* * Canopus HQX decoder * * 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 */ #ifndef AVCODEC_HQX_H #define AVCODEC_HQX_H #include <stdint.h> #include "libavutil/frame.h" #include "libavutil/mem.h" #include "get_bits.h" #include "hqxdsp.h" enum HQXACMode { HQX_AC_Q0 = 0, HQX_AC_Q8, HQX_AC_Q16, HQX_AC_Q32, HQX_AC_Q64, HQX_AC_Q128, NUM_HQX_AC }; typedef struct HQXLUT { int16_t lev; uint8_t run; int8_t bits; } HQXLUT; typedef struct HQXAC { int lut_bits, extra_bits; const HQXLUT *lut; } HQXAC; struct HQXContext; typedef int (*mb_decode_func)(struct HQXContext *ctx, int slice_no, int x, int y); typedef struct HQXSlice { GetBitContext gb; DECLARE_ALIGNED(16, int16_t, block)[16][64]; } HQXSlice; typedef struct HQXContext { HQXDSPContext hqxdsp; HQXSlice slice[16]; AVFrame *pic; mb_decode_func decode_func; int format, dcb, width, height; int interlaced; uint8_t *src; unsigned int data_size; uint32_t slice_off[17]; VLC cbp_vlc; VLC dc_vlc[3]; } HQXContext; #define HQX_DC_VLC_BITS 9 extern const HQXAC ff_hqx_ac[NUM_HQX_AC]; int ff_hqx_init_vlcs(HQXContext *ctx); #endif /* AVCODEC_HQX_H */