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 37typedef 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 47typedef 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 54extern const int32_t * const ff_hq_quants[16][2][4]; 55extern const HQProfile ff_hq_profile[NUM_HQ_PROFILES]; 56 57extern const uint8_t ff_hq_ac_skips[NUM_HQ_AC_ENTRIES]; 58extern const int16_t ff_hq_ac_syms [NUM_HQ_AC_ENTRIES]; 59 60int ff_hq_init_vlcs(HQContext *c); 61 62#endif /* AVCODEC_HQ_HQA_H */ 63