* commit '5b5338f6d1272526d2634501555cbaff4cdfb87b': hqx: Implement slice-threaded decoding Conflicts: libavcodec/hqx.c libavcodec/hqx.h See: eff72a6c7375587a3280ddf59e6e26a4907823b7 Merged-by: Michael Niedermayer <michaelni@gmx.at>
		
			
				
	
	
		
			87 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			87 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * Canopus HQX decoder
 | |
|  *
 | |
|  * This file is part of FFmpeg.
 | |
|  *
 | |
|  * FFmpeg is free software; you can redistribute it and/or
 | |
|  * modify it under the terms of the GNU Lesser General Public
 | |
|  * License as published by the Free Software Foundation; either
 | |
|  * version 2.1 of the License, or (at your option) any later version.
 | |
|  *
 | |
|  * FFmpeg is distributed in the hope that it will be useful,
 | |
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public
 | |
|  * License along with FFmpeg; if not, write to the Free Software
 | |
|  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 | |
|  */
 | |
| 
 | |
| #ifndef AVCODEC_HQX_H
 | |
| #define AVCODEC_HQX_H
 | |
| 
 | |
| #include <stdint.h>
 | |
| 
 | |
| #include "libavutil/frame.h"
 | |
| #include "libavutil/mem.h"
 | |
| #include "get_bits.h"
 | |
| #include "hqxdsp.h"
 | |
| 
 | |
| enum HQXACMode {
 | |
|     HQX_AC_Q0 = 0,
 | |
|     HQX_AC_Q8,
 | |
|     HQX_AC_Q16,
 | |
|     HQX_AC_Q32,
 | |
|     HQX_AC_Q64,
 | |
|     HQX_AC_Q128,
 | |
|     NUM_HQX_AC
 | |
| };
 | |
| 
 | |
| typedef struct HQXLUT {
 | |
|     int16_t lev;
 | |
|     uint8_t run;
 | |
|     int8_t  bits;
 | |
| } HQXLUT;
 | |
| 
 | |
| typedef struct HQXAC {
 | |
|     int lut_bits, extra_bits;
 | |
|     const HQXLUT *lut;
 | |
| } HQXAC;
 | |
| 
 | |
| struct HQXContext;
 | |
| 
 | |
| typedef int (*mb_decode_func)(struct HQXContext *ctx,
 | |
|                               int slice_no, int x, int y);
 | |
| 
 | |
| typedef struct HQXSlice {
 | |
|     GetBitContext gb;
 | |
|     DECLARE_ALIGNED(16, int16_t, block)[16][64];
 | |
| } HQXSlice;
 | |
| 
 | |
| typedef struct HQXContext {
 | |
|     HQXDSPContext hqxdsp;
 | |
|     HQXSlice slice[16];
 | |
| 
 | |
|     AVFrame *pic;
 | |
|     mb_decode_func decode_func;
 | |
| 
 | |
|     int format, dcb, width, height;
 | |
|     int interlaced;
 | |
| 
 | |
|     uint8_t *src;
 | |
|     unsigned int data_size;
 | |
|     uint32_t slice_off[17];
 | |
| 
 | |
|     VLC cbp_vlc;
 | |
|     VLC dc_vlc[3];
 | |
| } HQXContext;
 | |
| 
 | |
| #define HQX_DC_VLC_BITS 9
 | |
| 
 | |
| extern const HQXAC ff_hqx_ac[NUM_HQX_AC];
 | |
| 
 | |
| int ff_hqx_init_vlcs(HQXContext *ctx);
 | |
| 
 | |
| #endif /* AVCODEC_HQX_H */
 |