1 /* 2 * Canopus HQX decoder 3 * 4 * This file is part of FFmpeg. 5 * 6 * FFmpeg is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU Lesser General Public 8 * License as published by the Free Software Foundation; either 9 * version 2.1 of the License, or (at your option) any later version. 10 * 11 * FFmpeg is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 * Lesser General Public License for more details. 15 * 16 * You should have received a copy of the GNU Lesser General Public 17 * License along with FFmpeg; if not, write to the Free Software 18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 19 */ 20 21 #ifndef AVCODEC_HQX_H 22 #define AVCODEC_HQX_H 23 24 #include <stdint.h> 25 26 #include "libavutil/frame.h" 27 #include "libavutil/mem.h" 28 #include "get_bits.h" 29 #include "hqxdsp.h" 30 31 enum HQXACMode { 32 HQX_AC_Q0 = 0, 33 HQX_AC_Q8, 34 HQX_AC_Q16, 35 HQX_AC_Q32, 36 HQX_AC_Q64, 37 HQX_AC_Q128, 38 NUM_HQX_AC 39 }; 40 41 typedef struct HQXLUT { 42 int16_t lev; 43 uint8_t run; 44 int8_t bits; 45 } HQXLUT; 46 47 typedef struct HQXAC { 48 int lut_bits, extra_bits; 49 const HQXLUT *lut; 50 } HQXAC; 51 52 struct HQXContext; 53 54 typedef int (*mb_decode_func)(struct HQXContext *ctx, 55 int slice_no, int x, int y); 56 57 typedef struct HQXSlice { 58 GetBitContext gb; 59 DECLARE_ALIGNED(16, int16_t, block)[16][64]; 60 } HQXSlice; 61 62 typedef struct HQXContext { 63 HQXDSPContext hqxdsp; 64 HQXSlice slice[16]; 65 66 AVFrame *pic; 67 mb_decode_func decode_func; 68 69 int format, dcb, width, height; 70 int interlaced; 71 72 uint8_t *src; 73 unsigned int data_size; 74 uint32_t slice_off[17]; 75 76 VLC cbp_vlc; 77 VLC dc_vlc[3]; 78 } HQXContext; 79 80 #define HQX_DC_VLC_BITS 9 81 82 extern const HQXAC ff_hqx_ac[NUM_HQX_AC]; 83 84 int ff_hqx_init_vlcs(HQXContext *ctx); 85 86 #endif /* AVCODEC_HQX_H */ 87