1 /* 2 * Canopus HQ/HQA 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_HQ_HQA_H 22 #define AVCODEC_HQ_HQA_H 23 24 #include <stdint.h> 25 26 #include "libavutil/mem_internal.h" 27 28 #include "avcodec.h" 29 #include "bytestream.h" 30 #include "hq_hqadsp.h" 31 #include "vlc.h" 32 33 #define NUM_HQ_AC_ENTRIES 746 34 #define NUM_HQ_PROFILES 22 35 #define NUM_HQ_QUANTS 16 36 37 typedef struct HQContext { 38 AVCodecContext *avctx; 39 HQDSPContext hqhqadsp; 40 GetByteContext gbc; 41 42 VLC hq_ac_vlc; 43 VLC hqa_cbp_vlc; 44 DECLARE_ALIGNED(16, int16_t, block)[12][64]; 45 } HQContext; 46 47 typedef struct HQProfile { 48 const uint8_t *perm_tab; 49 int width, height; 50 int num_slices; 51 int tab_w, tab_h; 52 } HQProfile; 53 54 extern const int32_t * const ff_hq_quants[16][2][4]; 55 extern const HQProfile ff_hq_profile[NUM_HQ_PROFILES]; 56 57 extern const uint8_t ff_hq_ac_skips[NUM_HQ_AC_ENTRIES]; 58 extern const int16_t ff_hq_ac_syms [NUM_HQ_AC_ENTRIES]; 59 60 int ff_hq_init_vlcs(HQContext *c); 61 62 #endif /* AVCODEC_HQ_HQA_H */ 63