mimic-private.h
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef MIMIC_PRIVATE_H
00019 #define MIMIC_PRIVATE_H
00020
00021 #include "mimic.h"
00022
00023 #define ENCODER_BUFFER_SIZE 16384
00024 #define ENCODER_QUALITY_DEFAULT 0
00025 #define ENCODER_QUALITY_MIN 0
00026 #define ENCODER_QUALITY_MAX 10000
00027
00028 struct _MimCtx {
00029 gboolean encoder_initialized;
00030 gboolean decoder_initialized;
00031
00032 gint frame_width;
00033 gint frame_height;
00034 gint quality;
00035 gint num_coeffs;
00036
00037 gint y_stride;
00038 gint y_row_count;
00039 gint y_size;
00040
00041 gint crcb_stride;
00042 gint crcb_row_count;
00043 gint crcb_size;
00044
00045 gint num_vblocks_y;
00046 gint num_hblocks_y;
00047
00048 gint num_vblocks_cbcr;
00049 gint num_hblocks_cbcr;
00050
00051 guchar *cur_frame_buf;
00052 guchar *prev_frame_buf;
00053
00054 gchar vlcdec_lookup[2296];
00055
00056 gchar *data_buffer;
00057 guint data_index;
00058
00059 guint32 cur_chunk;
00060 gint cur_chunk_len;
00061
00062 guint32 *chunk_ptr;
00063 gboolean read_odd;
00064
00065 gint frame_num;
00066
00067 gint ptr_index;
00068 guchar *buf_ptrs[16];
00069 };
00070
00071 typedef struct {
00072 guchar length1;
00073 guint32 part1;
00074
00075 guchar length2;
00076 guint32 part2;
00077 } VlcSymbol;
00078
00079 typedef struct {
00080 guint32 magic;
00081 guchar pos_add;
00082 guchar num_bits;
00083 } VlcMagic;
00084
00085 void _mimic_init(MimCtx *ctx, gint width, gint height);
00086 guchar _clamp_value(gint value);
00087
00088 guint32 _read_bits(MimCtx *ctx, gint num_bits);
00089 void _write_bits(MimCtx *ctx, guint32 bits, gint length);
00090
00091 void _vlc_encode_block(MimCtx *ctx, const gint *block, gint num_coeffs);
00092 gboolean _vlc_decode_block(MimCtx *ctx, gint *block, gint num_coeffs);
00093
00094 void _fdct_quant_block(MimCtx *ctx, gint *block, const guchar *src,
00095 gint stride, gboolean is_chrom, gint num_coeffs);
00096 void _idct_dequant_block(MimCtx *ctx, gint *block, gboolean is_chrom);
00097
00098 VlcMagic *_find_magic(guint magic);
00099 void _initialize_vlcdec_lookup(gchar *lookup_tbl);
00100
00101 void _rgb_to_yuv(const guchar *input_rgb,
00102 guchar *output_y,
00103 guchar *output_cb,
00104 guchar *output_cr,
00105 gint width,
00106 gint height);
00107 void _yuv_to_rgb(const guchar *input_y,
00108 const guchar *input_cb,
00109 const guchar *input_cr,
00110 guchar *output_rgb,
00111 guint width,
00112 guint height);
00113
00114 void _deblock(guchar *blocks, guint stride, guint row_count);
00115
00116 #endif // MIMIC_PRIVATE_H
00117