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 32enum 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 42typedef struct HQXLUT { 43 int16_t lev; 44 uint8_t run; 45 int8_t bits; 46} HQXLUT; 47 48typedef struct HQXAC { 49 int lut_bits, extra_bits; 50 const HQXLUT *lut; 51} HQXAC; 52 53struct HQXContext; 54 55typedef int (*mb_decode_func)(struct HQXContext *ctx, 56 int slice_no, int x, int y); 57 58typedef struct HQXSlice { 59 GetBitContext gb; 60 DECLARE_ALIGNED(16, int16_t, block)[16][64]; 61} HQXSlice; 62 63typedef 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 const 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 84extern const HQXAC ff_hqx_ac[NUM_HQX_AC]; 85 86int ff_hqx_init_vlcs(HQXContext *ctx); 87 88#endif /* AVCODEC_HQX_H */ 89