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_internal.h" 28 29 #include "get_bits.h" 30 #include "hqxdsp.h" 31 32 enum HQXACMode { 33 HQX_AC_Q0 = 0, 34 HQX_AC_Q8, 35 HQX_AC_Q16, 36 HQX_AC_Q32, 37 HQX_AC_Q64, 38 HQX_AC_Q128, 39 NUM_HQX_AC 40 }; 41 42 typedef struct HQXLUT { 43 int16_t lev; 44 uint8_t run; 45 int8_t bits; 46 } HQXLUT; 47 48 typedef struct HQXAC { 49 int lut_bits, extra_bits; 50 const HQXLUT *lut; 51 } HQXAC; 52 53 struct HQXContext; 54 55 typedef int (*mb_decode_func)(struct HQXContext *ctx, 56 int slice_no, int x, int y); 57 58 typedef struct HQXSlice { 59 GetBitContext gb; 60 DECLARE_ALIGNED(16, int16_t, block)[16][64]; 61 } HQXSlice; 62 63 typedef struct HQXContext { 64 HQXDSPContext hqxdsp; 65 HQXSlice slice[16]; 66 67 AVFrame *pic; 68 mb_decode_func decode_func; 69 70 int format, dcb, width, height; 71 int interlaced; 72 73 uint8_t *src; 74 unsigned int data_size; 75 uint32_t slice_off[17]; 76 77 VLC cbp_vlc; 78 VLC dc_vlc[3]; 79 } HQXContext; 80 81 #define HQX_CBP_VLC_BITS 5 82 #define HQX_DC_VLC_BITS 9 83 84 extern const HQXAC ff_hqx_ac[NUM_HQX_AC]; 85 86 int ff_hqx_init_vlcs(HQXContext *ctx); 87 88 #endif /* AVCODEC_HQX_H */ 89