123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- /********************************************************************
- * *
- * THIS FILE IS PART OF THE OggTheora SOFTWARE CODEC SOURCE CODE. *
- * USE, DISTRIBUTION AND REPRODUCTION OF THIS LIBRARY SOURCE IS *
- * GOVERNED BY A BSD-STYLE SOURCE LICENSE INCLUDED WITH THIS SOURCE *
- * IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
- * *
- * THE Theora SOURCE CODE IS COPYRIGHT (C) 2002-2009 *
- * by the Xiph.Org Foundation and contributors http://www.xiph.org/ *
- * *
- ********************************************************************
- function:
- last mod: $Id: decint.h 16503 2009-08-22 18:14:02Z giles $
- ********************************************************************/
- #include <limits.h>
- #if !defined(_decint_H)
- # define _decint_H (1)
- # include "theora/theoradec.h"
- # include "internal.h"
- # include "bitpack.h"
- typedef struct th_setup_info oc_setup_info;
- typedef struct th_dec_ctx oc_dec_ctx;
- # include "huffdec.h"
- # include "dequant.h"
- /*Constants for the packet-in state machine specific to the decoder.*/
- /*Next packet to read: Data packet.*/
- #define OC_PACKET_DATA (0)
- struct th_setup_info{
- /*The Huffman codes.*/
- oc_huff_node *huff_tables[TH_NHUFFMAN_TABLES];
- /*The quantization parameters.*/
- th_quant_info qinfo;
- };
- struct th_dec_ctx{
- /*Shared encoder/decoder state.*/
- oc_theora_state state;
- /*Whether or not packets are ready to be emitted.
- This takes on negative values while there are remaining header packets to
- be emitted, reaches 0 when the codec is ready for input, and goes to 1
- when a frame has been processed and a data packet is ready.*/
- int packet_state;
- /*Buffer in which to assemble packets.*/
- oc_pack_buf opb;
- /*Huffman decode trees.*/
- oc_huff_node *huff_tables[TH_NHUFFMAN_TABLES];
- /*The index of the first token in each plane for each coefficient.*/
- ptrdiff_t ti0[3][64];
- /*The number of outstanding EOB runs at the start of each coefficient in each
- plane.*/
- ptrdiff_t eob_runs[3][64];
- /*The DCT token lists.*/
- unsigned char *dct_tokens;
- /*The extra bits associated with DCT tokens.*/
- unsigned char *extra_bits;
- /*The number of dct tokens unpacked so far.*/
- int dct_tokens_count;
- /*The out-of-loop post-processing level.*/
- int pp_level;
- /*The DC scale used for out-of-loop deblocking.*/
- int pp_dc_scale[64];
- /*The sharpen modifier used for out-of-loop deringing.*/
- int pp_sharp_mod[64];
- /*The DC quantization index of each block.*/
- unsigned char *dc_qis;
- /*The variance of each block.*/
- int *variances;
- /*The storage for the post-processed frame buffer.*/
- unsigned char *pp_frame_data;
- /*Whether or not the post-processsed frame buffer has space for chroma.*/
- int pp_frame_state;
- /*The buffer used for the post-processed frame.
- Note that this is _not_ guaranteed to have the same strides and offsets as
- the reference frame buffers.*/
- th_ycbcr_buffer pp_frame_buf;
- /*The striped decode callback function.*/
- th_stripe_callback stripe_cb;
- # if defined(HAVE_CAIRO)
- /*Output metrics for debugging.*/
- int telemetry;
- int telemetry_mbmode;
- int telemetry_mv;
- int telemetry_qi;
- int telemetry_bits;
- int telemetry_frame_bytes;
- int telemetry_coding_bytes;
- int telemetry_mode_bytes;
- int telemetry_mv_bytes;
- int telemetry_qi_bytes;
- int telemetry_dc_bytes;
- unsigned char *telemetry_frame_data;
- # endif
- };
- #endif
|