From: Anuradha S. <asu...@us...> - 2006-05-16 11:22:26
|
Update of /cvsroot/dirac/compress/libdirac_encoder In directory sc8-pr-cvs4.sourceforge.net:/tmp/cvs-serv30658/libdirac_encoder Modified Files: comp_compress.cpp comp_compress.h Log Message: Spec Compliance - multiple quantisers are used when code block mode is set to QUANT_MULTIPLE - All values are set to 0 if a block is skipped irrespective of whether is is a DC block or not. - Modified SetupCodeBlocks functions to use the default code blocks if default partitioning is enabled or values of from the bitstream for custom paritioning (only for decoder) Index: comp_compress.h =================================================================== RCS file: /cvsroot/dirac/compress/libdirac_encoder/comp_compress.h,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** comp_compress.h 20 Apr 2006 10:41:57 -0000 1.9 --- comp_compress.h 16 May 2006 11:22:21 -0000 1.10 *************** *** 84,88 **** SubbandList& bands , OneDArray<unsigned int>& est_counts, ! const bool using_multi_quants ); int SelectMultiQuants( PicArray& pic_data , --- 84,88 ---- SubbandList& bands , OneDArray<unsigned int>& est_counts, ! const CodeBlockMode cb_mode ); int SelectMultiQuants( PicArray& pic_data , Index: comp_compress.cpp =================================================================== RCS file: /cvsroot/dirac/compress/libdirac_encoder/comp_compress.cpp,v retrieving revision 1.29 retrieving revision 1.30 diff -C2 -d -r1.29 -r1.30 *** comp_compress.cpp 15 May 2006 11:45:27 -0000 1.29 --- comp_compress.cpp 16 May 2006 11:22:21 -0000 1.30 *************** *** 98,102 **** OneDArray<unsigned int> estimated_bits( Range( 1 , bands.Length() ) ); ! SelectQuantisers( pic_data , bands , estimated_bits , m_encparams.MultiQuants() ); // create byte output --- 98,102 ---- OneDArray<unsigned int> estimated_bits( Range( 1 , bands.Length() ) ); ! SelectQuantisers( pic_data , bands , estimated_bits , m_encparams.GetCodeBlockMode() ); // create byte output *************** *** 132,139 **** --- 132,143 ---- else { // ... skipped + #if 0 if (b == bands.Length() && m_fsort.IsIntra()) SetToVal( pic_data , bands(b) , wtransform.GetMeanDCVal() ); else SetToVal( pic_data , bands(b) , 0 ); + #else + SetToVal( pic_data , bands(b) , 0 ); + #endif } *************** *** 153,157 **** } ! void CompCompressor::SetupCodeBlocks( SubbandList& bands ) { --- 157,161 ---- } ! #if 0 void CompCompressor::SetupCodeBlocks( SubbandList& bands ) { *************** *** 216,224 **** }// band_num } void CompCompressor::SelectQuantisers( PicArray& pic_data , SubbandList& bands , OneDArray<unsigned int>& est_bits, ! const bool using_multi_quants ) { // Select all the quantizers --- 220,263 ---- }// band_num } + #else + void CompCompressor::SetupCodeBlocks( SubbandList& bands ) + { + int xregions; + int yregions; + + // The minimum x and y dimensions of a block + const int min_dim( 4 ); + + // The maximum number of regions horizontally and vertically + int max_xregion, max_yregion; + + for (int band_num = 1; band_num<=bands.Length() ; ++band_num) + { + if (m_encparams.SpatialPartition()) + { + int level = m_encparams.TransformDepth() - (band_num-1)/3; + const CodeBlocks &cb = m_encparams.GetCodeBlocks(level); + xregions = cb.HorizontalCodeBlocks(); + yregions = cb.VerticalCodeBlocks(); + } + else + { + xregions = 1; + yregions = 1; + } + + max_xregion = bands( band_num ).Xl() / min_dim; + max_yregion = bands( band_num ).Yl() / min_dim; + + bands( band_num ).SetNumBlocks( std::min( yregions , max_yregion ), + std::min( xregions , max_xregion ) ); + }// band_num + } + #endif void CompCompressor::SelectQuantisers( PicArray& pic_data , SubbandList& bands , OneDArray<unsigned int>& est_bits, ! const CodeBlockMode cb_mode ) { // Select all the quantizers *************** *** 228,240 **** { // Set multiquants flag in the subband only if ! // a. Global using_multi_quants flags is set in encparams // and // b. Current subband has more than one block if ( ! using_multi_quants && (bands(b).GetCodeBlocks().LengthX() > 1 || bands(b).GetCodeBlocks().LengthY() > 1) ) ! bands(b).SetUsingMultiQuants( using_multi_quants ); else bands(b).SetUsingMultiQuants( false ); --- 267,279 ---- { // Set multiquants flag in the subband only if ! // a. Global m_cb_mode flag is set to QUANT_MULTIPLE in encparams // and // b. Current subband has more than one block if ( ! cb_mode == QUANT_MULTIPLE && (bands(b).GetCodeBlocks().LengthX() > 1 || bands(b).GetCodeBlocks().LengthY() > 1) ) ! bands(b).SetUsingMultiQuants( true ); else bands(b).SetUsingMultiQuants( false ); |