#if !defined(_encint_H)
# define _encint_H (1)
# include "theora/theoraenc.h"
# include "state.h"
# include "mathops.h"
# include "enquant.h"
# include "huffenc.h"
typedef oc_mv oc_mv2[2];
typedef struct oc_enc_opt_vtable oc_enc_opt_vtable;
typedef struct oc_enc_opt_data oc_enc_opt_data;
typedef struct oc_mb_enc_info oc_mb_enc_info;
typedef struct oc_mode_scheme_chooser oc_mode_scheme_chooser;
typedef struct oc_fr_state oc_fr_state;
typedef struct oc_qii_state oc_qii_state;
typedef struct oc_enc_pipeline_state oc_enc_pipeline_state;
typedef struct oc_mode_rd oc_mode_rd;
typedef struct oc_iir_filter oc_iir_filter;
typedef struct oc_frame_metrics oc_frame_metrics;
typedef struct oc_rc_state oc_rc_state;
typedef struct th_enc_ctx oc_enc_ctx;
typedef struct oc_token_checkpoint oc_token_checkpoint;
# if defined(OC_X86_ASM)
# if defined(_MSC_VER)
# include "x86_vc/x86enc.h"
# else
# include "x86/x86enc.h"
# endif
# endif
# if defined(OC_ARM_ASM)
# include "arm/armenc.h"
# endif
# if !defined(oc_enc_accel_init)
# define oc_enc_accel_init oc_enc_accel_init_c
# endif
# if defined(OC_ENC_USE_VTABLE)
# if !defined(oc_enc_frag_sub)
# define oc_enc_frag_sub(_enc,_diff,_src,_ref,_ystride) \
((*(_enc)->opt_vtable.frag_sub)(_diff,_src,_ref,_ystride))
# endif
# if !defined(oc_enc_frag_sub_128)
# define oc_enc_frag_sub_128(_enc,_diff,_src,_ystride) \
((*(_enc)->opt_vtable.frag_sub_128)(_diff,_src,_ystride))
# endif
# if !defined(oc_enc_frag_sad)
# define oc_enc_frag_sad(_enc,_src,_ref,_ystride) \
((*(_enc)->opt_vtable.frag_sad)(_src,_ref,_ystride))
# endif
# if !defined(oc_enc_frag_sad_thresh)
# define oc_enc_frag_sad_thresh(_enc,_src,_ref,_ystride,_thresh) \
((*(_enc)->opt_vtable.frag_sad_thresh)(_src,_ref,_ystride,_thresh))
# endif
# if !defined(oc_enc_frag_sad2_thresh)
# define oc_enc_frag_sad2_thresh(_enc,_src,_ref1,_ref2,_ystride,_thresh) \
((*(_enc)->opt_vtable.frag_sad2_thresh)(_src,_ref1,_ref2,_ystride,_thresh))
# endif
# if !defined(oc_enc_frag_intra_sad)
# define oc_enc_frag_intra_sad(_enc,_src,_ystride) \
((*(_enc)->opt_vtable.frag_intra_sad)(_src,_ystride))
# endif
# if !defined(oc_enc_frag_satd)
# define oc_enc_frag_satd(_enc,_dc,_src,_ref,_ystride) \
((*(_enc)->opt_vtable.frag_satd)(_dc,_src,_ref,_ystride))
# endif
# if !defined(oc_enc_frag_satd2)
# define oc_enc_frag_satd2(_enc,_dc,_src,_ref1,_ref2,_ystride) \
((*(_enc)->opt_vtable.frag_satd2)(_dc,_src,_ref1,_ref2,_ystride))
# endif
# if !defined(oc_enc_frag_intra_satd)
# define oc_enc_frag_intra_satd(_enc,_dc,_src,_ystride) \
((*(_enc)->opt_vtable.frag_intra_satd)(_dc,_src,_ystride))
# endif
# if !defined(oc_enc_frag_ssd)
# define oc_enc_frag_ssd(_enc,_src,_ref,_ystride) \
((*(_enc)->opt_vtable.frag_ssd)(_src,_ref,_ystride))
# endif
# if !defined(oc_enc_frag_border_ssd)
# define oc_enc_frag_border_ssd(_enc,_src,_ref,_ystride,_mask) \
((*(_enc)->opt_vtable.frag_border_ssd)(_src,_ref,_ystride,_mask))
# endif
# if !defined(oc_enc_frag_copy2)
# define oc_enc_frag_copy2(_enc,_dst,_src1,_src2,_ystride) \
((*(_enc)->opt_vtable.frag_copy2)(_dst,_src1,_src2,_ystride))
# endif
# if !defined(oc_enc_enquant_table_init)
# define oc_enc_enquant_table_init(_enc,_enquant,_dequant) \
((*(_enc)->opt_vtable.enquant_table_init)(_enquant,_dequant))
# endif
# if !defined(oc_enc_enquant_table_fixup)
# define oc_enc_enquant_table_fixup(_enc,_enquant,_nqis) \
((*(_enc)->opt_vtable.enquant_table_fixup)(_enquant,_nqis))
# endif
# if !defined(oc_enc_quantize)
# define oc_enc_quantize(_enc,_qdct,_dct,_dequant,_enquant) \
((*(_enc)->opt_vtable.quantize)(_qdct,_dct,_dequant,_enquant))
# endif
# if !defined(oc_enc_frag_recon_intra)
# define oc_enc_frag_recon_intra(_enc,_dst,_ystride,_residue) \
((*(_enc)->opt_vtable.frag_recon_intra)(_dst,_ystride,_residue))
# endif
# if !defined(oc_enc_frag_recon_inter)
# define oc_enc_frag_recon_inter(_enc,_dst,_src,_ystride,_residue) \
((*(_enc)->opt_vtable.frag_recon_inter)(_dst,_src,_ystride,_residue))
# endif
# if !defined(oc_enc_fdct8x8)
# define oc_enc_fdct8x8(_enc,_y,_x) \
((*(_enc)->opt_vtable.fdct8x8)(_y,_x))
# endif
# else
# if !defined(oc_enc_frag_sub)
# define oc_enc_frag_sub(_enc,_diff,_src,_ref,_ystride) \
oc_enc_frag_sub_c(_diff,_src,_ref,_ystride)
# endif
# if !defined(oc_enc_frag_sub_128)
# define oc_enc_frag_sub_128(_enc,_diff,_src,_ystride) \
oc_enc_frag_sub_128_c(_diff,_src,_ystride)
# endif
# if !defined(oc_enc_frag_sad)
# define oc_enc_frag_sad(_enc,_src,_ref,_ystride) \
oc_enc_frag_sad_c(_src,_ref,_ystride)
# endif
# if !defined(oc_enc_frag_sad_thresh)
# define oc_enc_frag_sad_thresh(_enc,_src,_ref,_ystride,_thresh) \
oc_enc_frag_sad_thresh_c(_src,_ref,_ystride,_thresh)
# endif
# if !defined(oc_enc_frag_sad2_thresh)
# define oc_enc_frag_sad2_thresh(_enc,_src,_ref1,_ref2,_ystride,_thresh) \
oc_enc_frag_sad2_thresh_c(_src,_ref1,_ref2,_ystride,_thresh)
# endif
# if !defined(oc_enc_frag_intra_sad)
# define oc_enc_frag_intra_sad(_enc,_src,_ystride) \
oc_enc_frag_intra_sad_c(_src,_ystride)
# endif
# if !defined(oc_enc_frag_satd)
# define oc_enc_frag_satd(_enc,_dc,_src,_ref,_ystride) \
oc_enc_frag_satd_c(_dc,_src,_ref,_ystride)
# endif
# if !defined(oc_enc_frag_satd2)
# define oc_enc_frag_satd2(_enc,_dc,_src,_ref1,_ref2,_ystride) \
oc_enc_frag_satd2_c(_dc,_src,_ref1,_ref2,_ystride)
# endif
# if !defined(oc_enc_frag_intra_satd)
# define oc_enc_frag_intra_satd(_enc,_dc,_src,_ystride) \
oc_enc_frag_intra_satd_c(_dc,_src,_ystride)
# endif
# if !defined(oc_enc_frag_ssd)
# define oc_enc_frag_ssd(_enc,_src,_ref,_ystride) \
oc_enc_frag_ssd_c(_src,_ref,_ystride)
# endif
# if !defined(oc_enc_frag_border_ssd)
# define oc_enc_frag_border_ssd(_enc,_src,_ref,_ystride,_mask) \
oc_enc_frag_border_ssd_c(_src,_ref,_ystride,_mask)
# endif
# if !defined(oc_enc_frag_copy2)
# define oc_enc_frag_copy2(_enc,_dst,_src1,_src2,_ystride) \
oc_enc_frag_copy2_c(_dst,_src1,_src2,_ystride)
# endif
# if !defined(oc_enc_enquant_table_init)
# define oc_enc_enquant_table_init(_enc,_enquant,_dequant) \
oc_enc_enquant_table_init_c(_enquant,_dequant)
# endif
# if !defined(oc_enc_enquant_table_fixup)
# define oc_enc_enquant_table_fixup(_enc,_enquant,_nqis) \
oc_enc_enquant_table_fixup_c(_enquant,_nqis)
# endif
# if !defined(oc_enc_quantize)
# define oc_enc_quantize(_enc,_qdct,_dct,_dequant,_enquant) \
oc_enc_quantize_c(_qdct,_dct,_dequant,_enquant)
# endif
# if !defined(oc_enc_frag_recon_intra)
# define oc_enc_frag_recon_intra(_enc,_dst,_ystride,_residue) \
oc_frag_recon_intra_c(_dst,_ystride,_residue)
# endif
# if !defined(oc_enc_frag_recon_inter)
# define oc_enc_frag_recon_inter(_enc,_dst,_src,_ystride,_residue) \
oc_frag_recon_inter_c(_dst,_src,_ystride,_residue)
# endif
# if !defined(oc_enc_fdct8x8)
# define oc_enc_fdct8x8(_enc,_y,_x) oc_enc_fdct8x8_c(_y,_x)
# endif
# endif
#define OC_PACKET_EMPTY (0)
#define OC_PACKET_READY (1)
#define OC_SP_LEVEL_SLOW (0)
#define OC_SP_LEVEL_EARLY_SKIP (1)
#define OC_SP_LEVEL_FAST_ANALYSIS (2)
#define OC_SP_LEVEL_NOSATD (3)
#define OC_SP_LEVEL_NOMC (4)
#define OC_SP_LEVEL_MAX (4)
# define OC_BIT_SCALE (6)
# define OC_RMSE_SCALE (5)
# define OC_LOGQ_BINS (8)
# define OC_COMP_BINS (24)
# define OC_SAD_SHIFT (6)
# define OC_SATD_SHIFT (9)
# define OC_RD_SCALE_BITS (12-OC_BIT_SCALE)
# define OC_RD_ISCALE_BITS (11)
# if LONG_MAX>2147483647
# define OC_RD_SCALE(_ssd,_rd_scale) \
((unsigned)((unsigned long)(_ssd)*(_rd_scale) \
+((1<<OC_RD_SCALE_BITS)>>1)>>OC_RD_SCALE_BITS))
# else
# define OC_RD_SCALE(_ssd,_rd_scale) \
(((_ssd)>>OC_RD_SCALE_BITS)*(_rd_scale) \
+(((_ssd)&(1<<OC_RD_SCALE_BITS)-1)*(_rd_scale) \
+((1<<OC_RD_SCALE_BITS)>>1)>>OC_RD_SCALE_BITS))
# endif
# define OC_RD_SKIP_SCALE(_ssd,_rd_scale) \
((_ssd)*(_rd_scale)+((1<<OC_RD_SCALE_BITS-4)>>1)>>OC_RD_SCALE_BITS-4)
# define OC_RD_ISCALE(_lambda,_rd_iscale) \
((_lambda)*(_rd_iscale)+((1<<OC_RD_ISCALE_BITS)>>1)>>OC_RD_ISCALE_BITS)
extern const unsigned char OC_MODE_BITS[2][OC_NMODES];
extern const unsigned char OC_MV_BITS[2][64];
extern const ogg_uint16_t OC_SB_RUN_VAL_MIN[8];
extern const unsigned char OC_SB_RUN_CODE_NBITS[7];
extern const unsigned char OC_BLOCK_RUN_CODE_NBITS[30];
struct oc_enc_opt_vtable{
void (*frag_sub)(ogg_int16_t _diff[64],const unsigned char *_src,
const unsigned char *_ref,int _ystride);
void (*frag_sub_128)(ogg_int16_t _diff[64],
const unsigned char *_src,int _ystride);
unsigned (*frag_sad)(const unsigned char *_src,
const unsigned char *_ref,int _ystride);
unsigned (*frag_sad_thresh)(const unsigned char *_src,
const unsigned char *_ref,int _ystride,unsigned _thresh);
unsigned (*frag_sad2_thresh)(const unsigned char *_src,
const unsigned char *_ref1,const unsigned char *_ref2,int _ystride,
unsigned _thresh);
unsigned (*frag_intra_sad)(const unsigned char *_src,int _ystride);
unsigned (*frag_satd)(int *_dc,const unsigned char *_src,
const unsigned char *_ref,int _ystride);
unsigned (*frag_satd2)(int *_dc,const unsigned char *_src,
const unsigned char *_ref1,const unsigned char *_ref2,int _ystride);
unsigned (*frag_intra_satd)(int *_dc,const unsigned char *_src,int _ystride);
unsigned (*frag_ssd)(const unsigned char *_src,
const unsigned char *_ref,int _ystride);
unsigned (*frag_border_ssd)(const unsigned char *_src,
const unsigned char *_ref,int _ystride,ogg_int64_t _mask);
void (*frag_copy2)(unsigned char *_dst,
const unsigned char *_src1,const unsigned char *_src2,int _ystride);
void (*enquant_table_init)(void *_enquant,
const ogg_uint16_t _dequant[64]);
void (*enquant_table_fixup)(void *_enquant[3][3][2],int _nqis);
int (*quantize)(ogg_int16_t _qdct[64],const ogg_int16_t _dct[64],
const ogg_uint16_t _dequant[64],const void *_enquant);
void (*frag_recon_intra)(unsigned char *_dst,int _ystride,
const ogg_int16_t _residue[64]);
void (*frag_recon_inter)(unsigned char *_dst,
const unsigned char *_src,int _ystride,const ogg_int16_t _residue[64]);
void (*fdct8x8)(ogg_int16_t _y[64],const ogg_int16_t _x[64]);
};
struct oc_enc_opt_data{
size_t enquant_table_size;
int enquant_table_alignment;
};
void oc_enc_accel_init(oc_enc_ctx *_enc);
struct oc_mb_enc_info{
unsigned cneighbors[4];
unsigned pneighbors[4];
unsigned char ncneighbors;
unsigned char npneighbors;
unsigned char refined;
oc_mv2 analysis_mv[3];
oc_mv unref_mv[2];
oc_mv block_mv[4];
oc_mv ref_mv[4];
ogg_uint16_t error[2];
unsigned satd[2];
unsigned block_satd[4];
};
struct oc_mode_scheme_chooser{
const unsigned char *mode_ranks[8];
unsigned char scheme0_ranks[OC_NMODES];
unsigned char scheme0_list[OC_NMODES];
unsigned mode_counts[OC_NMODES];
unsigned char scheme_list[8];
ptrdiff_t scheme_bits[8];
};
void oc_mode_scheme_chooser_init(oc_mode_scheme_chooser *_chooser);
struct oc_fr_state{
ptrdiff_t bits;
unsigned sb_partial_count:16;
unsigned sb_full_count:16;
unsigned b_coded_count_prev:6;
signed int b_coded_prev:2;
unsigned b_coded_count:6;
signed int b_coded:2;
unsigned b_count:5;
unsigned sb_prefer_partial:1;
signed int sb_partial:2;
unsigned sb_bits:6;
signed int sb_full:2;
};
struct oc_qii_state{
ptrdiff_t bits;
unsigned qi01_count:14;
signed int qi01:2;
unsigned qi12_count:14;
signed int qi12:2;
};
struct oc_enc_pipeline_state{
OC_ALIGN16(ogg_int16_t dct_data[64*3]);
OC_ALIGN16(signed char bounding_values[256]);
oc_fr_state fr[3];
oc_qii_state qs[3];
unsigned *skip_ssd[3];
ptrdiff_t *coded_fragis[3];
ptrdiff_t *uncoded_fragis[3];
ptrdiff_t ncoded_fragis[3];
ptrdiff_t nuncoded_fragis[3];
ptrdiff_t froffset[3];
int fragy0[3];
int fragy_end[3];
unsigned sbi0[3];
unsigned sbi_end[3];
int ndct_tokens1[3];
int eob_run1[3];
int loop_filter;
};
struct oc_mode_rd{
ogg_int16_t rate;
ogg_int16_t rmse;
};
# if defined(OC_COLLECT_METRICS)
# include "collect.h"
# endif
struct oc_iir_filter{
ogg_int32_t c[2];
ogg_int64_t g;
ogg_int32_t x[2];
ogg_int32_t y[2];
};
struct oc_frame_metrics{
ogg_int32_t log_scale;
unsigned dup_count:31;
unsigned frame_type:1;
unsigned activity_avg;
};
struct oc_rc_state{
ogg_int64_t bits_per_frame;
ogg_int64_t fullness;
ogg_int64_t target;
ogg_int64_t max;
ogg_int64_t log_npixels;
unsigned exp[2];
int buf_delay;
ogg_uint32_t prev_drop_count;
ogg_int64_t log_drop_scale;
ogg_int64_t log_scale[2];
ogg_int64_t log_qtarget;
unsigned char drop_frames;
unsigned char cap_overflow;
unsigned char cap_underflow;
oc_iir_filter scalefilter[2];
int inter_count;
int inter_delay;
int inter_delay_target;
oc_iir_filter vfrfilter;
int twopass;
unsigned char twopass_buffer[48];
int twopass_buffer_bytes;
int twopass_buffer_fill;
unsigned char twopass_force_kf;
oc_frame_metrics prev_metrics;
oc_frame_metrics cur_metrics;
oc_frame_metrics *frame_metrics;
int nframe_metrics;
int cframe_metrics;
int frame_metrics_head;
ogg_uint32_t frames_total[3];
ogg_uint32_t frames_left[3];
ogg_int64_t scale_sum[2];
int scale_window0;
int scale_window_end;
int nframes[3];
ogg_int64_t rate_bias;
};
void oc_rc_state_init(oc_rc_state *_rc,oc_enc_ctx *_enc);
void oc_rc_state_clear(oc_rc_state *_rc);
void oc_enc_rc_resize(oc_enc_ctx *_enc);
int oc_enc_select_qi(oc_enc_ctx *_enc,int _qti,int _clamp);
void oc_enc_calc_lambda(oc_enc_ctx *_enc,int _frame_type);
int oc_enc_update_rc_state(oc_enc_ctx *_enc,
long _bits,int _qti,int _qi,int _trial,int _droppable);
int oc_enc_rc_2pass_out(oc_enc_ctx *_enc,unsigned char **_buf);
int oc_enc_rc_2pass_in(oc_enc_ctx *_enc,unsigned char *_buf,size_t _bytes);
struct th_enc_ctx{
oc_theora_state state;
oggpack_buffer opb;
oc_mb_enc_info *mb_info;
ogg_int16_t *frag_dc;
unsigned *coded_mbis;
size_t ncoded_mbis;
int packet_state;
ogg_uint32_t keyframe_frequency_force;
ogg_uint32_t dup_count;
ogg_uint32_t nqueued_dups;
ogg_uint32_t prev_dup_count;
int sp_level;
unsigned char vp3_compatible;
unsigned char coded_inter_frame;
unsigned char prevframe_dropped;
unsigned char huff_idxs[2][2][2];
size_t mv_bits[2];
oc_mode_scheme_chooser chooser;
oc_enc_pipeline_state pipe;
int mcu_nvsbs;
unsigned *mcu_skip_ssd;
ogg_uint16_t *mcu_rd_scale;
ogg_uint16_t *mcu_rd_iscale;
unsigned char **dct_tokens[3];
ogg_uint16_t **extra_bits[3];
ptrdiff_t ndct_tokens[3][64];
ogg_uint16_t eob_run[3][64];
unsigned char dct_token_offs[3][64];
int dc_pred_last[3][4];
#if defined(OC_COLLECT_METRICS)
unsigned *frag_sad;
unsigned *frag_satd;
unsigned *frag_ssd;
#endif
int lambda;
unsigned activity_avg;
unsigned luma_avg;
th_huff_code huff_codes[TH_NHUFFMAN_TABLES][TH_NDCT_TOKENS];
th_quant_info qinfo;
ogg_uint16_t dequant_dc[64][3][2];
const ogg_uint16_t *dequant[3][3][2];
void *enquant[3][3][2];
void *enquant_tables[64][3][2];
unsigned char *enquant_table_data;
ogg_int64_t log_qavg[2][64];
ogg_int16_t log_plq[64][3][2];
ogg_uint16_t chroma_rd_scale[2][64][2];
oc_mode_rd mode_rd[3][3][2][OC_COMP_BINS];
oc_rc_state rc;
# if defined(OC_ENC_USE_VTABLE)
oc_enc_opt_vtable opt_vtable;
# endif
oc_enc_opt_data opt_data;
};
void oc_enc_analyze_intra(oc_enc_ctx *_enc,int _recode);
int oc_enc_analyze_inter(oc_enc_ctx *_enc,int _allow_keyframe,int _recode);
void oc_mcenc_search(oc_enc_ctx *_enc,int _mbi);
void oc_mcenc_refine1mv(oc_enc_ctx *_enc,int _mbi,int _frame);
void oc_mcenc_refine4mv(oc_enc_ctx *_enc,int _mbi);
struct oc_token_checkpoint{
unsigned char pli;
unsigned char zzi;
ogg_uint16_t eob_run;
ptrdiff_t ndct_tokens;
};
void oc_enc_tokenize_start(oc_enc_ctx *_enc);
int oc_enc_tokenize_ac(oc_enc_ctx *_enc,int _pli,ptrdiff_t _fragi,
ogg_int16_t *_qdct_out,const ogg_int16_t *_qdct_in,
const ogg_uint16_t *_dequant,const ogg_int16_t *_dct,
int _zzi,oc_token_checkpoint **_stack,int _lambda,int _acmin);
int oc_enc_tokenize_ac_fast(oc_enc_ctx *_enc,int _pli,ptrdiff_t _fragi,
ogg_int16_t *_qdct_out,const ogg_int16_t *_qdct_in,
const ogg_uint16_t *_dequant,const ogg_int16_t *_dct,
int _zzi,oc_token_checkpoint **_stack,int _lambda,int _acmin);
void oc_enc_tokenlog_rollback(oc_enc_ctx *_enc,
const oc_token_checkpoint *_stack,int _n);
void oc_enc_pred_dc_frag_rows(oc_enc_ctx *_enc,
int _pli,int _fragy0,int _frag_yend);
void oc_enc_tokenize_dc_frag_list(oc_enc_ctx *_enc,int _pli,
const ptrdiff_t *_coded_fragis,ptrdiff_t _ncoded_fragis,
int _prev_ndct_tokens1,int _prev_eob_run1);
void oc_enc_tokenize_finish(oc_enc_ctx *_enc);
int oc_state_flushheader(oc_theora_state *_state,int *_packet_state,
oggpack_buffer *_opb,const th_quant_info *_qinfo,
const th_huff_code _codes[TH_NHUFFMAN_TABLES][TH_NDCT_TOKENS],
const char *_vendor,th_comment *_tc,ogg_packet *_op);
void oc_enc_accel_init_c(oc_enc_ctx *_enc);
void oc_enc_frag_sub_c(ogg_int16_t _diff[64],
const unsigned char *_src,const unsigned char *_ref,int _ystride);
void oc_enc_frag_sub_128_c(ogg_int16_t _diff[64],
const unsigned char *_src,int _ystride);
unsigned oc_enc_frag_sad_c(const unsigned char *_src,
const unsigned char *_ref,int _ystride);
unsigned oc_enc_frag_sad_thresh_c(const unsigned char *_src,
const unsigned char *_ref,int _ystride,unsigned _thresh);
unsigned oc_enc_frag_sad2_thresh_c(const unsigned char *_src,
const unsigned char *_ref1,const unsigned char *_ref2,int _ystride,
unsigned _thresh);
unsigned oc_enc_frag_intra_sad_c(const unsigned char *_src, int _ystride);
unsigned oc_enc_frag_satd_c(int *_dc,const unsigned char *_src,
const unsigned char *_ref,int _ystride);
unsigned oc_enc_frag_satd2_c(int *_dc,const unsigned char *_src,
const unsigned char *_ref1,const unsigned char *_ref2,int _ystride);
unsigned oc_enc_frag_intra_satd_c(int *_dc,
const unsigned char *_src,int _ystride);
unsigned oc_enc_frag_ssd_c(const unsigned char *_src,
const unsigned char *_ref,int _ystride);
unsigned oc_enc_frag_border_ssd_c(const unsigned char *_src,
const unsigned char *_ref,int _ystride,ogg_int64_t _mask);
void oc_enc_frag_copy2_c(unsigned char *_dst,
const unsigned char *_src1,const unsigned char *_src2,int _ystride);
void oc_enc_enquant_table_init_c(void *_enquant,
const ogg_uint16_t _dequant[64]);
void oc_enc_enquant_table_fixup_c(void *_enquant[3][3][2],int _nqis);
int oc_enc_quantize_c(ogg_int16_t _qdct[64],const ogg_int16_t _dct[64],
const ogg_uint16_t _dequant[64],const void *_enquant);
void oc_enc_fdct8x8_c(ogg_int16_t _y[64],const ogg_int16_t _x[64]);
#endif