1 /* ***** BEGIN LICENSE BLOCK *****
2 *
3 * $Id: comp_decompress.h,v 1.14 2008/06/19 10:33:24 tjdwave 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), Scott R Ladd
24 *                 Andrew Kennedy
25 *
26 * Alternatively, the contents of this file may be used under the terms of
27 * the GNU General Public License Version 2 (the "GPL"), or the GNU Lesser
28 * Public License Version 2.1 (the "LGPL"), in which case the provisions of
29 * the GPL or the LGPL are applicable instead of those above. If you wish to
30 * allow use of your version of this file only under the terms of the either
31 * the GPL or LGPL and not to allow others to use your version of this file
32 * under the MPL, indicate your decision by deleting the provisions above
33 * and replace them with the notice and other provisions required by the GPL
34 * or LGPL. If you do not delete the provisions above, a recipient may use
35 * your version of this file under the terms of any one of the MPL, the GPL
36 * or the LGPL.
37 * ***** END LICENSE BLOCK ***** */
38 
39 
40 
41 #ifndef _COMP_DECOMPRESS_H_
42 #define _COMP_DECOMPRESS_H_
43 
44 #include <libdirac_common/arrays.h>
45 #include <libdirac_common/wavelet_utils.h>
46 #include <libdirac_common/common.h>
47 #include <libdirac_byteio/component_byteio.h>
48 
49 namespace dirac
50 {
51     //! Decompress a picture component
52     /*!
53         This class decompresses one of the three components (Y, U, or V) of a
54         picture according to a given set or parameters. CompDecompressor is used
55         by PictureCompressor..
56     */
57     class CompDecompressor
58     {
59     public:
60         //! Constructor
61         /*!
62             Create and initialize a component decompressor with the given
63             characteristics.
64             \param  decp    decoding parameters
65             \param  fp      picture parameters
66         */
67         CompDecompressor( DecoderParams& decp, const PictureParams& fp);
68 
69         //! Decompress a picture component
70         /*!
71             Decompress a PicArray containing a picture component (Y, U, or V).
72 
73             \param p_component_byteio Bytestream of component data
74             \param coeff_data          contains the component data to be decompressed
75             \param bands               the subband metadata
76         */
77         void Decompress(ComponentByteIO *p_component_byteio,
78                         CoeffArray& coeff_data,
79                         SubbandList& bands);
80 
81     private:
82         //! Copy constructor is private and body-less
83         /*!
84             Copy constructor is private and body-less. This class should not
85             be copied.
86 
87         */
88         CompDecompressor(const CompDecompressor& cpy);
89 
90         //! Assignment = is private and body-less
91         /*!
92             Assignment = is private and body-less. This class should not be
93             assigned.
94 
95         */
96         CompDecompressor& operator=(const CompDecompressor& rhs);
97 
98         //! Sets the data of a specific subband node to a given value
99         /*!
100             Sets the data of a specific subband node to a given value
101 
102             \param  pic_data    contains the component data
103             \param  node        subband node
104             \param    val            the value to set
105         */
106         void SetToVal(CoeffArray& pic_data,const Subband& node,CoeffType val);
107 
108         //! Set up the code block structures for each subband
109         /*!
110              Set up the code block structures for each subband
111             \param bands    the set of all the subbands
112         */
113         void SetupCodeBlocks( SubbandList& bands );
114 
115         //! Copy of the decompression parameters provided to the constructor
116         DecoderParams& m_decparams;
117 
118         //! Reference to the picture parameters provided to the constructor
119         const PictureParams& m_pparams;
120 
121         //! Reference to the picture sort
122         const PictureSort& m_psort;
123 
124 
125     };
126 
127 } // namespace dirac
128 
129 #endif
130