diff options
author | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-02-17 00:32:19 +0000 |
---|---|---|
committer | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-02-17 00:32:19 +0000 |
commit | 0d382a262c0638d0f572fc37193ccc5ed3dc895f (patch) | |
tree | 8578dcddfce4191f3f7a142a37769df7add48475 /k9vamps/k9requant.h | |
download | k9copy-0d382a262c0638d0f572fc37193ccc5ed3dc895f.tar.gz k9copy-0d382a262c0638d0f572fc37193ccc5ed3dc895f.zip |
Added old abandoned version of k9copy
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/k9copy@1091546 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'k9vamps/k9requant.h')
-rw-r--r-- | k9vamps/k9requant.h | 278 |
1 files changed, 278 insertions, 0 deletions
diff --git a/k9vamps/k9requant.h b/k9vamps/k9requant.h new file mode 100644 index 0000000..2832c06 --- /dev/null +++ b/k9vamps/k9requant.h @@ -0,0 +1,278 @@ +// +// C++ Interface: k9requant +// +// Description: A transcription from m2vrequantizer in C++ +// +// +// Author: Jean-Michel PETIT <[email protected]>, (C) 2006 +// +// Copyright: See COPYING file that comes with this distribution +// +// +#ifndef K9REQUANT_H +#define K9REQUANT_H +#include "k9common.h" + + +#include <qthread.h> +#include <qmutex.h> +#include <qwaitcondition.h> + + +// user defined types +//typedef unsigned int uint; +typedef unsigned char uint8; +typedef unsigned short uint16; +typedef unsigned int uint32; +typedef unsigned long long uint64; + +typedef char int8; +typedef short int16; +typedef int int32; +typedef long long int64; + + +typedef signed int sint; +typedef signed char sint8; +typedef signed short sint16; +typedef signed int sint32; +#ifdef WIN +typedef __int64 sint64; +#else +typedef signed long long sint64; +#endif + +#define BITS_IN_BUF (8) + +// block data +typedef struct { + uint8 run; + short level; +} +RunLevel; +/* +#define BUF_SIZE (16*1024*1024) +#define MIN_READ (4*1024*1024) +#define MIN_WRITE (8*1024*1024) +#define MAX_READ (10*1024*1024) +*/ + + +// keep gcc happy +#define WRITE \ + orbuf = orbuf; \ + mloka1 = mloka1; \ + mloka2 = mloka2; \ + eof = eof; + +// meaningless +#define MIN_WRITE 0 +#define MAX_READ 0 +#define MOV_READ + +// this is where we switch threads +#define LOCK(x) if (! lock(x)) {rqt_run=false;return;} + +#define COPY(x) \ + tc_memcpy (wbuf, cbuf, x); \ + cbuf += x; \ + wbuf += x; + +#define SEEKR(x) cbuf += x; + +#define SEEKW(x) wbuf += x; + + +/** + @author Jean-Michel PETIT <[email protected]> +*/ +class k9requant : public QThread { +private: + + int inbitcnt, outbitcnt; + uint32 inbitbuf, outbitbuf; + uint64 inbytecnt, outbytecnt; + float fact_x; + int mloka1, mloka2, eof; + + int64 orim2vsize; + int64 bytediff; + double stress_factor; // from 0.0 to 1.0 + + int i_factor; + int p_factor; + int b_factor; + double i_min_stress; + double p_min_stress; + double b_min_stress; + + short quant_table_id_data[4096]; + short *quant_table_id ; + +#ifdef USE_FD + + FILE *ifd, *ofd; +#endif + +#ifdef STAT + + uint64 ori_i, ori_p, ori_b; + uint64 new_i, new_p, new_b; + uint64 cnt_i, cnt_p, cnt_b; + uint64 cnt_p_i, cnt_p_ni; + uint64 cnt_b_i, cnt_b_ni; +#endif + +#ifdef DEMO + + int gopCount; +#endif + +#ifdef LOG_RATE_CONTROL + + FILE* LOG_FILE; +#endif + +#ifdef CHANGE_BRIGHTNESS + + int delta_bright; + int dc_reset; + int old_dc_pred, new_dc_pred; +#endif + + // mpeg2 state + // seq header + uint horizontal_size_value; + uint vertical_size_value; + + // pic header + uint picture_coding_type; + + // pic code ext + uint f_code[2][2]; + uint intra_dc_precision; + uint picture_structure; + uint frame_pred_frame_dct; + uint concealment_motion_vectors; + uint q_scale_type; + uint intra_vlc_format; + uint alternate_scan; + + // error + int validPicHeader; + int validSeqHeader; + int validExtHeader; + int sliceError; + + // slice or mb + uint quantizer_scale; + uint new_quantizer_scale; + uint last_coded_scale; + int h_offset, v_offset; + int mb_skip, mb_add; + int mb_out; + + int mb_sav_run, mb_sav_lev, mb_sav_c; + short *curTable; + + RunLevel block[6][65]; // terminated by level = 0, so we need 64+1 +private: + void putbits(uint val, int n); + void Refill_bits(void); + + void Flush_Bits(uint n); + uint Show_Bits(uint n); + uint Get_Bits(uint n); + + uint Copy_Bits(uint n); + void flush_read_buffer(); + void flush_write_buffer(); + int scale_quant(double quant ); + int increment_quant(int quant); + int intmax( register int x, register int y ); + + int intmin( register int x, register int y ); + void putmbtype(int mb_type); + + int getNewQuant(int curQuant, int intra); + + int isNotEmpty(RunLevel *blk); + + + // return != 0 if error + int putAC(int run, int signed_level, int vlcformat); + // return != 0 if error + int putACfirst(int run, int val); + void putnonintrablk(RunLevel *blk); + void putcbp(int cbp); + + int get_macroblock_modes (); + int get_quantizer_scale (); + void get_motion_delta (const int f_code); + void get_dmv (); + int get_coded_block_pattern (); + int get_luma_dc_dct_diff (); + int get_chroma_dc_dct_diff (); + void get_intra_block_B14 (); + void get_intra_block_B15 (); + int get_non_intra_block_rq (RunLevel *blk); + int get_non_intra_block_sav (RunLevel *blk, int cc); + +#ifdef P_FRAME_NON_INTRA_DROP + + int get_non_intra_block_drop (RunLevel *blk, int cc); +#endif + +#ifdef CHANGE_BRIGHTNESS + + void putDC(const sVLCtable *tab, int val); +#endif + + void slice_intra_DCT (const int cc); + void slice_non_intra_DCT (int cur_block); + void motion_fr_frame ( uint f_code[2] ); + void motion_fr_field ( uint f_code[2] ); + void motion_fr_dmv ( uint f_code[2] ); + void motion_fr_conceal ( ); + void motion_fi_field ( uint f_code[2] ); + void motion_fi_16x8 ( uint f_code[2] ); + void motion_fi_dmv ( uint f_code[2] ); + void motion_fi_conceal (); + void putmbdata(int macroblock_modes); + void put_quantiser(int quantiser); + void putaddrinc(int addrinc); + int slice_init (int code); + void mpeg2_slice ( const int code ); + void initRequant(); + bool lock(int64 x); + +protected: + void run (); + +public: + uint8 *cbuf, *rbuf, *wbuf, *orbuf, *owbuf; + // global data for inter thread com + float rqt_fact; + uint32_t rqt_rcnt; + uint32_t rqt_wcnt; + uint64_t rqt_inbytes; + uint64_t rqt_outbytes; + uint64_t rqt_visize; + uchar *rqt_rptr; + uchar *rqt_wptr; + QWaitCondition condr; + QWaitCondition condw; + QMutex mutr; + QMutex mutw; + bool rqt_stop; + bool rqt_run; + + +public: + k9requant(); + void initvar(); +}; + + + +#endif |