Updating Contact email
[BrunelResearch-dirac.git] / libdirac_motionest / motion_estimate.h
blob69052cd5ff8dcd9e123aed75356af04e6c54ef38
1 /* ***** BEGIN LICENSE BLOCK *****
3 * $Id$ $Name$
5 * Version: MPL 1.1/GPL 2.0/LGPL 2.1
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/
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.
16 * The Original Code is BBC Research and Development code.
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.
23 * Contributor(s): Thomas Davies (Original Author)
25 * Alternatively, the contents of this file may be used under the terms of
26 * the GNU General Public License Version 2 (the "GPL"), or the GNU Lesser
27 * Public License Version 2.1 (the "LGPL"), in which case the provisions of
28 * the GPL or the LGPL are applicable instead of those above. If you wish to
29 * allow use of your version of this file only under the terms of the either
30 * the GPL or LGPL and not to allow others to use your version of this file
31 * under the MPL, indicate your decision by deleting the provisions above
32 * and replace them with the notice and other provisions required by the GPL
33 * or LGPL. If you do not delete the provisions above, a recipient may use
34 * your version of this file under the terms of any one of the MPL, the GPL
35 * or the LGPL.
36 * ***** END LICENSE BLOCK ***** */
39 #ifndef _MOTION_ESTIMATE_H_
40 #define _MOTION_ESTIMATE_H_
42 #include <libdirac_common/motion.h>
43 namespace dirac
46 class EncQueue;
49 //! Class to handle the whole motion estimation process.
50 /*!
52 Class to handle the whole motion estimation process, which works in
53 three stages.
55 First a pixel-accurate estimate is formed by looking at the current
56 picture data and the data from the reference picture(s). Motion vectors
57 are found for every block.
59 Second, these pixel-accurate motion vectors are refined to sub-pixel
60 accuracy. This means some sort of upconversion needs to be applied to
61 the reference. This can be done by actually upconverting the reference
62 to create a bigger picture or by doing some interpolation of values
63 on the fly.
65 Third, mode decisions have to be made. This means choosing which (if
66 any) reference to use for each block, and whether to use the same
67 motion vectors for groups of blocks together. A 2x2 group of blocks is
68 called a sub-MB and a 4x4 group of blocks is a MB (Macroblock). All
69 the MV data is organised by MB.
71 class MotionEstimator{
72 public:
73 //! Constructor
74 MotionEstimator( const EncoderParams& encp );
75 //! Destructor
76 ~MotionEstimator(){}
78 //! Do the motion estimation
79 void DoME( EncQueue& my_buffer , int pic_num );
81 private:
82 //! Copy constructor: private, body-less - class should not be copied
83 MotionEstimator( const MotionEstimator& cpy );
85 //! Assignment= : //private, body-less - class should not be assigned
86 MotionEstimator& operator=( const MotionEstimator& rhs );
88 //! Go through all the intra blocks and extract the chroma dc values to be coded
89 void SetChromaDC( EncQueue& my_buffer, int pic_num);
91 //! Called by previous fn for each component
92 void SetChromaDC(const PicArray& pic_data, MEData& me_data,CompSort csort);
94 //! Called by previous fn for each block
95 ValueType GetChromaBlockDC(const PicArray& pic_data, int xloc,int yloc,int split);
97 // Member variables
99 //! A local reference to the encoder parameters
100 const EncoderParams& m_encparams;
103 } // namespace dirac
105 #endif