Dirac - A Video Codec

Created by the British Broadcasting Corporation.


wavelet_utils.h
Go to the documentation of this file.
1/* ***** BEGIN LICENSE BLOCK *****
2*
3* $Id: wavelet_utils.h,v 1.32 2008/10/20 04:21:02 asuraparaju Exp $ $Name: Dirac_1_0_2 $
4*
5* Version: MPL 1.1/GPL 2.0/LGPL 2.1
6*
7* The contents of this file are subject to the Mozilla Public License
8* Version 1.1 (the "License"); you may not use this file except in compliance
9* with the License. You may obtain a copy of the License at
10* http://www.mozilla.org/MPL/
11*
12* Software distributed under the License is distributed on an "AS IS" basis,
13* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
14* the specific language governing rights and limitations under the License.
15*
16* The Original Code is BBC Research and Development code.
17*
18* The Initial Developer of the Original Code is the British Broadcasting
19* Corporation.
20* Portions created by the Initial Developer are Copyright (C) 2004.
21* All Rights Reserved.
22*
23* Contributor(s): Thomas Davies (Original Author),
24* Scott R Ladd
25* Anuradha Suraparaju
26*
27* Alternatively, the contents of this file may be used under the terms of
28* the GNU General Public License Version 2 (the "GPL"), or the GNU Lesser
29* Public License Version 2.1 (the "LGPL"), in which case the provisions of
30* the GPL or the LGPL are applicable instead of those above. If you wish to
31* allow use of your version of this file only under the terms of the either
32* the GPL or LGPL and not to allow others to use your version of this file
33* under the MPL, indicate your decision by deleting the provisions above
34* and replace them with the notice and other provisions required by the GPL
35* or LGPL. If you do not delete the provisions above, a recipient may use
36* your version of this file under the terms of any one of the MPL, the GPL
37* or the LGPL.
38* ***** END LICENSE BLOCK ***** */
39
40#ifndef _WAVELET_UTILS_H_
41#define _WAVELET_UTILS_H_
42
45#include <vector>
46#include <cmath>
47#include <iostream>
48
49//utilities for subband and wavelet transforms
50//Includes fast transform using lifting
51
52namespace dirac
53{
54
55 class PicArray;
56 class Subband;
57
60 {
61
62 friend class Subband;
63
64 public:
66 /*
67 Default constructor - sets all dimensions to zero
68 */
70
72 /*
73 Initialise the code block
74 \param xstart the x-coord of the first coefficient in the block
75 \param xend one past the last coefficient, horizontally
76 \param ystart the y-coord of the first coefficient in the block
77 \param yend one past the last coefficient, vertically
78 */
79 CodeBlock( const int xstart , const int ystart , const int xend , const int yend);
80
82 int Xstart() const { return m_xstart; }
83
85 int Ystart() const { return m_ystart; }
86
88 int Xend() const { return m_xend; }
89
91 int Yend() const { return m_yend; }
92
94 int Xl() const { return m_xl; }
95
97 int Yl() const { return m_yl; }
98
100 int QuantIndex() const{ return m_quantindex; }
101
103 bool Skipped() const { return m_skipped; }
104
106 void SetQuantIndex( const int quantindex ){ m_quantindex = quantindex; }
107
109 void SetSkip( bool skip ){ m_skipped = skip; }
110
111 private:
112
114 /*
115 Initialise the code block
116 \param xstart the x-coord of the first coefficient in the block
117 \param xend one past the last coefficient, horizontally
118 \param ystart the y-coord of the first coefficient in the block
119 \param yend one past the last coefficient, vertically
120 */
121 void Init( const int xstart , const int ystart , const int xend , const int yend );
122
123 private:
124
129 int m_xl;
130 int m_yl;
131
133
135 };
136
137
140 {
141 public:
142
145
147
155 Subband(int xpos, int ypos, int xlen, int ylen);
156
158
167 Subband(int xpos, int ypos, int xlen, int ylen, int d);
168
171
172 //Default (shallow) copy constructor and operator= used
173
175 int Xl() const {return m_xl;}
176
178 int Xp() const {return m_xp;}
179
181 int Yl() const {return m_yl;}
182
184 int Yp() const {return m_yp;}
185
187 int Max() const {return m_max_bit;}
188
190 double Wt() const {return m_wt;}
191
193 int Depth() const {return m_depth;}
194
196 int Scale() const {return ( 1<<m_depth );}
197
199 int QuantIndex() const {return m_qindex;}
200
202 bool UsingMultiQuants() const {return m_multi_quants; }
203
205 int Parent() const {return m_parent;}
206
208 const std::vector<int>& Children() const {return m_children;}
209
211 int Child(const int n) const {return m_children[n];}
212
215
218
220 bool Skipped() const { return m_skipped; }
221
223 void SetWt( const float w );
224
226 void SetParent( const int p ){ m_parent=p; }
227
229 void SetDepth( const int d ){ m_depth=d;}
230
232 void SetMax( const int m ){ m_max_bit=m; };
233
235 void SetNumBlocks( const int ynum , const int xnum );
236
238 void SetQuantIndex( const int idx){ m_qindex = idx; }
239
241 void SetUsingMultiQuants( const bool multi){ m_multi_quants = multi; }
242
244 void SetSkip(const bool skip ){ m_skipped = skip; }
245
246 private:
247 // subband bounds
248 int m_xp , m_yp , m_xl , m_yl;
249
250 // perceptual weight for quantisation
251 double m_wt;
252
253 // depth in the transform
255
256 // quantiser index
258
259 // position of parent in a subband list
261
262 // positions of children in the subband list
263 std::vector<int> m_children;
264
265 // position of the MSB of the largest absolute value
267
268 // The code blocks
270
271 // A flag indicating whether we're using one qf for each code block
273
274 // Whether the subband is skipped or not
276 };
277
280 {
281 public:
284
287
288 //Default (shallow) copy constructor and operator= used
290 void Init(const int depth,const int xlen,const int ylen);
291
293 int Length() const {return bands.size();}
294
296 Subband& operator()(const int n){return bands[n-1];}
297
299 const Subband& operator()(const int n) const {return bands[n-1];}
300
302 void AddBand(const Subband& b){bands.push_back(b);}
303
305 void Clear(){bands.clear();}
306
307 private:
308
310 float PerceptualWeight( const float xf , const float yf , const CompSort cs);
311
312 private:
313 std::vector<Subband> bands;
314 };
315
316 class CoeffArray;
319 {
320
321 public:
322
324
325 virtual ~VHFilter(){}
326
328 virtual void Split(const int xp, const int yp, const int xl, const int yl, CoeffArray& coeff_data)=0;
329
331 virtual void Synth(const int xp, const int yp, const int xl, const int yl, CoeffArray& coeff_data)=0;
332
334 virtual int GetShift() const =0;
335
336 protected:
337
339 inline void Interleave( const int xp, const int yp, const int xl, const int yl, CoeffArray& coeff_data );
340
341
343 inline void DeInterleave( const int xp, const int yp, const int xl, const int yl, CoeffArray& coeff_data );
344
346 void ShiftRowLeft(CoeffType *row, int length, int shift);
347
349 void ShiftRowRight(CoeffType *row, int length, int shift);
350 };
351
354 {
355
356 public:
357
359 void Split(const int xp, const int yp, const int xl, const int yl, CoeffArray& coeff_data);
360
362 void Synth(const int xp, const int yp, const int xl, const int yl, CoeffArray& coeff_data);
363
365 int GetShift() const {return 1;}
366
367
368 };
369
372 {
373
374 public:
375
377 void Split(const int xp, const int yp, const int xl, const int yl, CoeffArray& coeff_data);
378
380 void Synth(const int xp, const int yp, const int xl, const int yl, CoeffArray& coeff_data);
381
383 int GetShift() const {return 1;}
384
385
386#ifdef HAVE_MMX
387 inline void HorizSynth (int xp, int xl, int ystart, int yend, CoeffArray &coeff_data);
388#endif
389
390 };
391
393 class VHFilterDD9_7 : public VHFilter
394 {
395
396 public:
397
399 void Split(const int xp, const int yp, const int xl, const int yl, CoeffArray& coeff_data);
400
402 void Synth(const int xp, const int yp, const int xl, const int yl, CoeffArray& coeff_data);
403
405 int GetShift() const {return 1;}
406 };
407
408
411 {
412
413 public:
414
416 void Split(const int xp, const int yp, const int xl, const int yl, CoeffArray& coeff_data);
417
419 void Synth(const int xp, const int yp, const int xl, const int yl, CoeffArray& coeff_data);
420
422 int GetShift() const {return 1;}
423
424 };
425
427 class VHFilterHAAR0 : public VHFilter
428 {
429
430 public:
431
433 void Split(const int xp, const int yp, const int xl, const int yl, CoeffArray& coeff_data);
434
436 void Synth(const int xp, const int yp, const int xl, const int yl, CoeffArray& coeff_data);
437
439 int GetShift() const {return 0;}
440
441
442 };
443
445 class VHFilterHAAR1 : public VHFilter
446 {
447
448 public:
449
451 void Split(const int xp, const int yp, const int xl, const int yl, CoeffArray& coeff_data);
452
454 void Synth(const int xp, const int yp, const int xl, const int yl, CoeffArray& coeff_data);
455
457 int GetShift() const {return 1;}
458
459 };
460
461
463 class VHFilterHAAR2 : public VHFilter
464 {
465
466 public:
467
469 void Split(const int xp, const int yp, const int xl, const int yl, CoeffArray& coeff_data);
470
472 void Synth(const int xp, const int yp, const int xl, const int yl, CoeffArray& coeff_data);
473
475 double GetLowFactor() const { return 1.414213562;}
476
478 double GetHighFactor() const { return 0.707106781;}
479
481 int GetShift() const {return 2;}
482
483 };
484
485
486
487 // Lifting steps used in the filters
488
490 template<int shift>
492 {
493
494 public:
495
498
499 // Assume default copy constructor, assignment= and destructor //
500
502 /*
503 Do the filtering.
504 \param in_val the value being predicted
505 \param val1 the first value being used for prediction
506 \param val2 the second value being used for prediction
507 */
508 inline void Filter(CoeffType& in_val, const CoeffType& val1, const CoeffType& val2) const
509 {
510 in_val -= (( val1 + val2 + (1<<(shift-1)) ) >>shift );
511 }
512
513 };
514
516 template<int shift>
518 {
519
520 public:
523
525 /*
526 Do the filtering.
527 \param in_val the value being updated
528 \param val1 the first value being used for updating
529 \param val2 the second value being used for updating
530 */
531 inline void Filter(CoeffType& in_val, const CoeffType& val1, const CoeffType& val2) const
532 {
533 in_val += ( ( val1 + val2 + (1<<(shift-1)) ) >>shift );
534 }
535
536 };
537
539 template <int shift , int tap1, int tap2>
541 {
542 public:
543
546
547 // Assume default copy constructor, assignment= and destructor //
548
550 inline void Filter(CoeffType& in_val, const CoeffType& val1, const CoeffType& val2 ,
551 const CoeffType& val3, const CoeffType& val4 ) const
552 {
553 in_val -= ( tap1*( val1 + val2 ) + tap2*( val3 + val4 ) + (1<<(shift-1)))>>shift;
554 }
555 };
556
558 template <int shift , int tap1 , int tap2>
560 {
561
562 public:
565
567 inline void Filter(CoeffType& in_val, const CoeffType& val1, const CoeffType& val2 ,
568 const CoeffType& val3, const CoeffType& val4 ) const
569 {
570 in_val += ( tap1*( val1 + val2 ) + tap2*( val3 + val4 ) + (1<<(shift-1)) )>>shift;
571 }
572 };
573
575 template <int gain> class PredictStep97
576 {
577 public:
578
581
582 // Assume default copy constructor, assignment= and destructor //
583
585 /*
586 Do the filtering.
587 \param in_val the value being predicted
588 \param val1 the first value being used for prediction
589 \param val2 the second value being used for prediction
590 */
591 inline void Filter(CoeffType& in_val, const CoeffType& val1, const CoeffType& val2) const
592 {
593 in_val -= static_cast< CoeffType >( (gain * static_cast< int >( val1 + val2 )) >>12 );
594 }
595 };
596
598 template <int gain> class UpdateStep97
599 {
600
601 public:
604
606 /*
607 Do the filtering.
608 \param in_val the value being updated
609 \param val1 the first value being used for updating
610 \param val2 the second value being used for updating
611 */
612 inline void Filter(CoeffType& in_val, const CoeffType& val1, const CoeffType& val2) const
613 {
614 in_val += static_cast< CoeffType >( (gain * static_cast< int >( val1 + val2 )) >>12 );
615 }
616 };
617
619
622 class CoeffArray: public TwoDArray<CoeffType>
623 {
624 public:
626
630
632
636 CoeffArray(int height, int width, CompSort cs=Y_COMP):
637 TwoDArray<CoeffType>(height, width), m_csort(cs){}
638
639 //copy constructor and assignment= derived by inheritance
640
643
645 const CompSort& CSort() const {return m_csort;}
646
648 void SetCSort(const CompSort cs){ m_csort = cs; }
649
652
654 const SubbandList& BandList() const {return m_band_list;}
655
657
662 void SetBandWeights (const EncoderParams& encparams,
663 const PictureParams& pparams,
664 const CompSort csort,
665 const float cpd_scale_factor);
666
667 private:
668
670
671 // The subband list to be used for conventional transform apps
673
674 private:
675
677 float PerceptualWeight(float xf,float yf,CompSort cs);
678
679 };
680
682
687 {
688 public:
691
694
696
702 void Transform(const Direction d, PicArray& pic_data, CoeffArray& coeff_data);
703
704 private:
705
706
707 private:
708
709 // Private variables
710
713
716
719
720 private:
721 // Private functions
724
727
728 };
729}// end namespace dirac
730
731#endif
WltFilter
Definition: common_types.h:62
@ DAUB9_7
Definition: common_types.h:69
Definition of class SequenceHeaderByteIO.
Definition: accessunit_byteio.h:52
int CoeffType
Type of wavelet coefficient data (should be larger than ValueType)
Definition: common.h:74
CompSort
Types of picture component.
Definition: common.h:87
@ Y_COMP
Definition: common.h:87
Direction
Forward or backward.
Definition: common.h:93
A template class for two-dimensional arrays.
Definition: arrays.h:285
Parameters for initialising picture class objects.
Definition: common.h:533
A class for picture component data.
Definition: common.h:719
Parameters for the encoding process.
Definition: common.h:1280
Class for encapsulating metadata concerning a block of coefficients in a subband.
Definition: wavelet_utils.h:60
bool Skipped() const
Returns true if the code-block is skipped, false if not.
Definition: wavelet_utils.h:103
int Xstart() const
Returns the horizontal start of the block.
Definition: wavelet_utils.h:82
int m_xl
Definition: wavelet_utils.h:129
int m_xend
Definition: wavelet_utils.h:127
bool m_skipped
Definition: wavelet_utils.h:134
int m_quantindex
Definition: wavelet_utils.h:132
int Xl() const
Returns the width of the code block.
Definition: wavelet_utils.h:94
void SetSkip(bool skip)
Sets whether the code block is skipped or not.
Definition: wavelet_utils.h:109
int m_xstart
Definition: wavelet_utils.h:125
void Init(const int xstart, const int ystart, const int xend, const int yend)
Initialise the code block.
void SetQuantIndex(const int quantindex)
Sets the quantisation index.
Definition: wavelet_utils.h:106
int Ystart() const
Returns the vertical start of the block.
Definition: wavelet_utils.h:85
int m_yl
Definition: wavelet_utils.h:130
int QuantIndex() const
Returns the quantisation index associated to the code block.
Definition: wavelet_utils.h:100
int m_ystart
Definition: wavelet_utils.h:126
CodeBlock()
Constructor.
int m_yend
Definition: wavelet_utils.h:128
int Xend() const
Returns one past the last coefficient coord, horizontally.
Definition: wavelet_utils.h:88
int Yend() const
Returns one past the last coefficient coord, vertically.
Definition: wavelet_utils.h:91
int Yl() const
Returns the height of the code block.
Definition: wavelet_utils.h:97
CodeBlock(const int xstart, const int ystart, const int xend, const int yend)
Constructor.
Class encapsulating all the metadata relating to a wavelet subband.
Definition: wavelet_utils.h:140
int Yl() const
Return the height of the subband.
Definition: wavelet_utils.h:181
int m_yl
Definition: wavelet_utils.h:248
Subband(int xpos, int ypos, int xlen, int ylen)
Constructor.
int m_depth
Definition: wavelet_utils.h:254
int Parent() const
Return the index of the parent subband.
Definition: wavelet_utils.h:205
Subband()
Default constructor.
void SetMax(const int m)
Set the index of the maximum bit of the largest coefficient.
Definition: wavelet_utils.h:232
int Xp() const
Return the horizontal position of the subband.
Definition: wavelet_utils.h:178
TwoDArray< CodeBlock > & GetCodeBlocks()
Return the code blocks.
Definition: wavelet_utils.h:214
int m_yp
Definition: wavelet_utils.h:248
void SetParent(const int p)
Set the parent index.
Definition: wavelet_utils.h:226
int m_qindex
Definition: wavelet_utils.h:257
double m_wt
Definition: wavelet_utils.h:251
void SetQuantIndex(const int idx)
Set the quantisation index.
Definition: wavelet_utils.h:238
int m_max_bit
Definition: wavelet_utils.h:266
bool Skipped() const
Returns true if subband is skipped, false if not.
Definition: wavelet_utils.h:220
int Max() const
Return the index of the maximum bit of the largest coefficient.
Definition: wavelet_utils.h:187
bool m_skipped
Definition: wavelet_utils.h:275
void SetNumBlocks(const int ynum, const int xnum)
Set the number of (spatial) quantisers in the subband. Creates code block structure.
std::vector< int > m_children
Definition: wavelet_utils.h:263
int Child(const int n) const
Return the index of a specific child band.
Definition: wavelet_utils.h:211
int Xl() const
Return the width of the subband.
Definition: wavelet_utils.h:175
void SetDepth(const int d)
Set the subband depth.
Definition: wavelet_utils.h:229
int m_xl
Definition: wavelet_utils.h:248
bool m_multi_quants
Definition: wavelet_utils.h:272
int Scale() const
Return the scale of the subband, viewed as a subsampled version of the picture.
Definition: wavelet_utils.h:196
const TwoDArray< CodeBlock > & GetCodeBlocks() const
Return the code blocks.
Definition: wavelet_utils.h:217
const std::vector< int > & Children() const
Return the indices of any child subbands.
Definition: wavelet_utils.h:208
void SetUsingMultiQuants(const bool multi)
Set the number of (spatial) quantisers in the subband. Creates code block structure.
Definition: wavelet_utils.h:241
TwoDArray< CodeBlock > m_code_block_array
Definition: wavelet_utils.h:269
bool UsingMultiQuants() const
Return a flag indicating whether we have separate quantisers for each code block.
Definition: wavelet_utils.h:202
~Subband()
Destructor.
int QuantIndex() const
Return a quantisation index.
Definition: wavelet_utils.h:199
int Yp() const
Return the vertical position of the subband.
Definition: wavelet_utils.h:184
int m_xp
Definition: wavelet_utils.h:248
void SetSkip(const bool skip)
Set whether the subband is skipped or not.
Definition: wavelet_utils.h:244
double Wt() const
Return the subband perceptual weight.
Definition: wavelet_utils.h:190
int Depth() const
Return the depth of the subband in the transform.
Definition: wavelet_utils.h:193
int m_parent
Definition: wavelet_utils.h:260
Subband(int xpos, int ypos, int xlen, int ylen, int d)
Constructor.
void SetWt(const float w)
Set the perceptual weight.
A class encapulating all the subbands produced by a transform.
Definition: wavelet_utils.h:280
std::vector< Subband > bands
Definition: wavelet_utils.h:313
float PerceptualWeight(const float xf, const float yf, const CompSort cs)
Given x and y spatial frequencies in cycles per degree, returns a weighting value.
void AddBand(const Subband &b)
Add a band to the list.
Definition: wavelet_utils.h:302
SubbandList()
Constructor.
Definition: wavelet_utils.h:283
int Length() const
Return the length of the subband list.
Definition: wavelet_utils.h:293
Subband & operator()(const int n)
Return the subband at position n (1<=n<=length)
Definition: wavelet_utils.h:296
void Init(const int depth, const int xlen, const int ylen)
Initialise the list.
const Subband & operator()(const int n) const
Return the subband at position n (1<=n<=length)
Definition: wavelet_utils.h:299
~SubbandList()
Destructor.
Definition: wavelet_utils.h:286
void Clear()
Remove all the bands from the list.
Definition: wavelet_utils.h:305
A virtual parent class to do vertical and horizontal splitting with wavelet filters.
Definition: wavelet_utils.h:319
virtual void Split(const int xp, const int yp, const int xl, const int yl, CoeffArray &coeff_data)=0
Split a subband into 4.
virtual int GetShift() const =0
Return the value of the additional bitshift.
void Interleave(const int xp, const int yp, const int xl, const int yl, CoeffArray &coeff_data)
Interleave data from separate subbands into even and odd positions for in-place calculation - called ...
virtual ~VHFilter()
Definition: wavelet_utils.h:325
virtual void Synth(const int xp, const int yp, const int xl, const int yl, CoeffArray &coeff_data)=0
Create a single band from 4 quadrant bands.
void DeInterleave(const int xp, const int yp, const int xl, const int yl, CoeffArray &coeff_data)
De-interleave data even and odd positions into separate subbands - called by Split.
void ShiftRowLeft(CoeffType *row, int length, int shift)
Shift all vals in Row by 'shift' bits to the left to increase accuracy by 'shift' bits....
void ShiftRowRight(CoeffType *row, int length, int shift)
Shift all vals in Row by 'shift' bits to the right to counter the shift in the Analysis stage....
VHFilter()
Definition: wavelet_utils.h:323
Class to do Daubechies (9,7) filtering operations.
Definition: wavelet_utils.h:354
void Split(const int xp, const int yp, const int xl, const int yl, CoeffArray &coeff_data)
Split a subband into 4.
void Synth(const int xp, const int yp, const int xl, const int yl, CoeffArray &coeff_data)
Create a single band from 4 quadrant bands.
int GetShift() const
Return the value of the additional bitshift.
Definition: wavelet_utils.h:365
Class to do (5,3) wavelet filtering operations.
Definition: wavelet_utils.h:372
int GetShift() const
Return the value of the additional bitshift.
Definition: wavelet_utils.h:383
void Synth(const int xp, const int yp, const int xl, const int yl, CoeffArray &coeff_data)
Create a single band from 4 quadrant bands.
void Split(const int xp, const int yp, const int xl, const int yl, CoeffArray &coeff_data)
Split a subband into 4.
A short filter that's actually close to Daubechies (9,7) but with just two lifting steps.
Definition: wavelet_utils.h:394
int GetShift() const
Return the value of the additional bitshift.
Definition: wavelet_utils.h:405
void Split(const int xp, const int yp, const int xl, const int yl, CoeffArray &coeff_data)
Split a subband into 4.
void Synth(const int xp, const int yp, const int xl, const int yl, CoeffArray &coeff_data)
Create a single band from 4 quadrant bands.
An extension of DD9_7, with a better low-pass filter but more computation.
Definition: wavelet_utils.h:411
void Split(const int xp, const int yp, const int xl, const int yl, CoeffArray &coeff_data)
Split a subband into 4.
int GetShift() const
Return the value of the additional bitshift.
Definition: wavelet_utils.h:422
void Synth(const int xp, const int yp, const int xl, const int yl, CoeffArray &coeff_data)
Create a single band from 4 quadrant bands.
Class to do Haar wavelet filtering operations.
Definition: wavelet_utils.h:428
void Split(const int xp, const int yp, const int xl, const int yl, CoeffArray &coeff_data)
Split a subband into 4.
int GetShift() const
Return the value of the additional bitshift.
Definition: wavelet_utils.h:439
void Synth(const int xp, const int yp, const int xl, const int yl, CoeffArray &coeff_data)
Create a single band from 4 quadrant bands.
Class to do Haar wavelet filtering operations with a single shift per level.
Definition: wavelet_utils.h:446
int GetShift() const
Return the value of the additional bitshift.
Definition: wavelet_utils.h:457
void Split(const int xp, const int yp, const int xl, const int yl, CoeffArray &coeff_data)
Split a subband into 4.
void Synth(const int xp, const int yp, const int xl, const int yl, CoeffArray &coeff_data)
Create a single band from 4 quadrant bands.
Class to do Haar wavelet filtering operations with a double shift per level.
Definition: wavelet_utils.h:464
void Synth(const int xp, const int yp, const int xl, const int yl, CoeffArray &coeff_data)
Create a single band from 4 quadrant bands.
double GetHighFactor() const
Return a correction factor to compensate for non-unity power gain of high-pass filter.
Definition: wavelet_utils.h:478
void Split(const int xp, const int yp, const int xl, const int yl, CoeffArray &coeff_data)
Split a subband into 4.
double GetLowFactor() const
Return a correction factor to compensate for non-unity power gain of low-pass filter.
Definition: wavelet_utils.h:475
int GetShift() const
Return the value of the additional bitshift.
Definition: wavelet_utils.h:481
Class to do two-tap prediction lifting step.
Definition: wavelet_utils.h:492
void Filter(CoeffType &in_val, const CoeffType &val1, const CoeffType &val2) const
Do the filtering.
Definition: wavelet_utils.h:508
PredictStepShift()
Constructor.
Definition: wavelet_utils.h:497
Class to do two-tap updating lifting step.
Definition: wavelet_utils.h:518
UpdateStepShift()
Constructor.
Definition: wavelet_utils.h:522
void Filter(CoeffType &in_val, const CoeffType &val1, const CoeffType &val2) const
Do the filtering.
Definition: wavelet_utils.h:531
Class to do symmetric four-tap prediction lifting step.
Definition: wavelet_utils.h:541
void Filter(CoeffType &in_val, const CoeffType &val1, const CoeffType &val2, const CoeffType &val3, const CoeffType &val4) const
Do the filtering.
Definition: wavelet_utils.h:550
PredictStepFourTap()
Constructor.
Definition: wavelet_utils.h:545
Class to do symmetric four-tap update lifting step.
Definition: wavelet_utils.h:560
UpdateStepFourTap()
Constructor.
Definition: wavelet_utils.h:564
void Filter(CoeffType &in_val, const CoeffType &val1, const CoeffType &val2, const CoeffType &val3, const CoeffType &val4) const
Do the filtering.
Definition: wavelet_utils.h:567
Class to do two-tap prediction lifting step for Daubechies (9,7)
Definition: wavelet_utils.h:576
PredictStep97()
Constructor.
Definition: wavelet_utils.h:580
void Filter(CoeffType &in_val, const CoeffType &val1, const CoeffType &val2) const
Do the filtering.
Definition: wavelet_utils.h:591
Class to do two-tap update lifting step for Daubechies (9,7)
Definition: wavelet_utils.h:599
void Filter(CoeffType &in_val, const CoeffType &val1, const CoeffType &val2) const
Do the filtering.
Definition: wavelet_utils.h:612
UpdateStep97()
Constructor.
Definition: wavelet_utils.h:603
A class for wavelet coefficient data.
Definition: wavelet_utils.h:623
SubbandList m_band_list
Definition: wavelet_utils.h:672
CompSort m_csort
Definition: wavelet_utils.h:669
void SetBandWeights(const EncoderParams &encparams, const PictureParams &pparams, const CompSort csort, const float cpd_scale_factor)
Sets the subband weights.
void SetCSort(const CompSort cs)
Set the type of component being stored.
Definition: wavelet_utils.h:648
const SubbandList & BandList() const
Returns the set of subbands.
Definition: wavelet_utils.h:654
SubbandList & BandList()
Returns the set of subbands.
Definition: wavelet_utils.h:651
CoeffArray(int height, int width, CompSort cs=Y_COMP)
Constructor.
Definition: wavelet_utils.h:636
float PerceptualWeight(float xf, float yf, CompSort cs)
Given x and y spatial frequencies in cycles per degree, returns a weighting value.
CoeffArray()
Default constructor.
Definition: wavelet_utils.h:629
~CoeffArray()
Destructor.
Definition: wavelet_utils.h:642
const CompSort & CSort() const
Return which component is stored.
Definition: wavelet_utils.h:645
A class to do wavelet transforms.
Definition: wavelet_utils.h:687
virtual ~WaveletTransform()
Destructor.
void Transform(const Direction d, PicArray &pic_data, CoeffArray &coeff_data)
Transforms the data to and from the wavelet domain.
WaveletTransform & operator=(const WaveletTransform &rhs)
Private, bodyless copy operator=: class should not be assigned.
int m_depth
Depth of the transform.
Definition: wavelet_utils.h:712
WltFilter m_filt_sort
The (vertical and horizontal) wavelet filter set to be used.
Definition: wavelet_utils.h:715
WaveletTransform(const WaveletTransform &cpy)
Private, bodyless copy constructor: class should not be copied.
WaveletTransform(int d=4, WltFilter f=DAUB9_7)
Constructor.
VHFilter * m_vhfilter
A class to do the vertical and horizontal filtering required.
Definition: wavelet_utils.h:718

© 2004 British Broadcasting Corporation. Dirac code licensed under the Mozilla Public License (MPL) Version 1.1.
HTML documentation generated by Dimitri van Heesch's excellent Doxygen tool.