Sophie

Sophie

distrib > Mandriva > 2010.0 > x86_64 > media > main-release > by-pkgid > f250c16c2b84c9364a2f35a71121aaa2 > files > 334

lib64dirac-devel-1.0.2-2mdv2010.0.x86_64.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>Dirac Video Codec</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body bgcolor="#ffffff">
<h1 align="center" color="#606080">
Dirac - A Video Codec
</h1>
<p align="center">
Created by the <a href="http://www.bbc.co.uk">British Broadcasting Corporation</a>.
</p>
<hr>
<!-- Generated by Doxygen 1.5.9 -->
<h1>motion.h</h1><a href="a00200.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* ***** BEGIN LICENSE BLOCK *****</span>
<a name="l00002"></a>00002 <span class="comment">*</span>
<a name="l00003"></a>00003 <span class="comment">* $Id: motion.h,v 1.30 2008/10/01 01:26:47 asuraparaju Exp $ $Name: Dirac_1_0_2 $</span>
<a name="l00004"></a>00004 <span class="comment">*</span>
<a name="l00005"></a>00005 <span class="comment">* Version: MPL 1.1/GPL 2.0/LGPL 2.1</span>
<a name="l00006"></a>00006 <span class="comment">*</span>
<a name="l00007"></a>00007 <span class="comment">* The contents of this file are subject to the Mozilla Public License</span>
<a name="l00008"></a>00008 <span class="comment">* Version 1.1 (the "License"); you may not use this file except in compliance</span>
<a name="l00009"></a>00009 <span class="comment">* with the License. You may obtain a copy of the License at</span>
<a name="l00010"></a>00010 <span class="comment">* http://www.mozilla.org/MPL/</span>
<a name="l00011"></a>00011 <span class="comment">*</span>
<a name="l00012"></a>00012 <span class="comment">* Software distributed under the License is distributed on an "AS IS" basis,</span>
<a name="l00013"></a>00013 <span class="comment">* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for</span>
<a name="l00014"></a>00014 <span class="comment">* the specific language governing rights and limitations under the License.</span>
<a name="l00015"></a>00015 <span class="comment">*</span>
<a name="l00016"></a>00016 <span class="comment">* The Original Code is BBC Research and Development code.</span>
<a name="l00017"></a>00017 <span class="comment">*</span>
<a name="l00018"></a>00018 <span class="comment">* The Initial Developer of the Original Code is the British Broadcasting</span>
<a name="l00019"></a>00019 <span class="comment">* Corporation.</span>
<a name="l00020"></a>00020 <span class="comment">* Portions created by the Initial Developer are Copyright (C) 2004.</span>
<a name="l00021"></a>00021 <span class="comment">* All Rights Reserved.</span>
<a name="l00022"></a>00022 <span class="comment">*</span>
<a name="l00023"></a>00023 <span class="comment">* Contributor(s): Thomas Davies (Original Author),</span>
<a name="l00024"></a>00024 <span class="comment">*                 Chris Bowley,</span>
<a name="l00025"></a>00025 <span class="comment">*                 Tim Borer</span>
<a name="l00026"></a>00026 <span class="comment">*</span>
<a name="l00027"></a>00027 <span class="comment">* Alternatively, the contents of this file may be used under the terms of</span>
<a name="l00028"></a>00028 <span class="comment">* the GNU General Public License Version 2 (the "GPL"), or the GNU Lesser</span>
<a name="l00029"></a>00029 <span class="comment">* Public License Version 2.1 (the "LGPL"), in which case the provisions of</span>
<a name="l00030"></a>00030 <span class="comment">* the GPL or the LGPL are applicable instead of those above. If you wish to</span>
<a name="l00031"></a>00031 <span class="comment">* allow use of your version of this file only under the terms of the either</span>
<a name="l00032"></a>00032 <span class="comment">* the GPL or LGPL and not to allow others to use your version of this file</span>
<a name="l00033"></a>00033 <span class="comment">* under the MPL, indicate your decision by deleting the provisions above</span>
<a name="l00034"></a>00034 <span class="comment">* and replace them with the notice and other provisions required by the GPL</span>
<a name="l00035"></a>00035 <span class="comment">* or LGPL. If you do not delete the provisions above, a recipient may use</span>
<a name="l00036"></a>00036 <span class="comment">* your version of this file under the terms of any one of the MPL, the GPL</span>
<a name="l00037"></a>00037 <span class="comment">* or the LGPL.</span>
<a name="l00038"></a>00038 <span class="comment">* ***** END LICENSE BLOCK ***** */</span>
<a name="l00039"></a>00039 
<a name="l00040"></a>00040 <span class="preprocessor">#include &lt;<a class="code" href="a00171.html">libdirac_common/common.h</a>&gt;</span>
<a name="l00041"></a>00041 <span class="preprocessor">#include &lt;algorithm&gt;</span>
<a name="l00042"></a>00042 <span class="preprocessor">#ifndef _MOTION_H</span>
<a name="l00043"></a>00043 <span class="preprocessor"></span><span class="preprocessor">#define _MOTION_H</span>
<a name="l00044"></a>00044 <span class="preprocessor"></span>
<a name="l00045"></a>00045 <span class="keyword">namespace </span>dirac
<a name="l00046"></a>00046 {
<a name="l00048"></a>00048     <span class="comment">//classes and functions for motion estimation and compensation//</span>
<a name="l00050"></a>00050 <span class="comment"></span>
<a name="l00051"></a>00051     <span class="comment">//classes</span>
<a name="l00052"></a>00052 
<a name="l00054"></a><a class="code" href="a00234.html#96972fd3f02bb2b4dedee98363564c6c47236624b4df1aea786eb11567c22cde">00054</a>     <span class="keyword">enum</span> <a class="code" href="a00234.html#96972fd3f02bb2b4dedee98363564c6c" title="Horizontal or vertical.">MvElement</a> { <a class="code" href="a00234.html#96972fd3f02bb2b4dedee98363564c6c4f862ba901339c0f6797d67d38717bdb">HORIZONTAL</a> , <a class="code" href="a00234.html#96972fd3f02bb2b4dedee98363564c6c47236624b4df1aea786eb11567c22cde">VERTICAL</a> };
<a name="l00055"></a>00055 
<a name="l00057"></a>00057     <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt;
<a name="l00058"></a><a class="code" href="a00091.html">00058</a>     <span class="keyword">class </span><a class="code" href="a00091.html" title="Motion vector class - just a pair.">MotionVector</a>
<a name="l00059"></a>00059     {
<a name="l00060"></a>00060     <span class="keyword">public</span>:
<a name="l00061"></a>00061 
<a name="l00063"></a><a class="code" href="a00091.html#57e08db27981698cd2c3dd571e9ec028">00063</a>         <a class="code" href="a00091.html" title="Motion vector class - just a pair.">MotionVector&lt;T&gt;</a>(T a, T b) : <a class="code" href="a00091.html#2d621e73454d40917e4c765175f0b15f" title="x and y components">x</a>(a), <a class="code" href="a00091.html#121d0b360a1678c750f17b810b5f15f2">y</a>(b) {};
<a name="l00065"></a><a class="code" href="a00091.html#0c31453906a82091018e27859a58ef0d">00065</a>         <a class="code" href="a00091.html" title="Motion vector class - just a pair.">MotionVector&lt;T&gt;</a>() : <a class="code" href="a00091.html#2d621e73454d40917e4c765175f0b15f" title="x and y components">x</a>(0), <a class="code" href="a00091.html#121d0b360a1678c750f17b810b5f15f2">y</a>(0) {};
<a name="l00067"></a>00067         <a class="code" href="a00091.html" title="Motion vector class - just a pair.">MotionVector&lt;T&gt;</a>(T a) : <a class="code" href="a00091.html#2d621e73454d40917e4c765175f0b15f" title="x and y components">x</a>(a), <a class="code" href="a00091.html#121d0b360a1678c750f17b810b5f15f2">y</a>(a) {};
<a name="l00068"></a>00068 
<a name="l00070"></a>00070         <span class="keyword">inline</span> MotionVector&lt;T&gt; <a class="code" href="a00091.html#800a143b3d86016c1c92407aa455ad96" title="Addition.">operator+</a>(<span class="keyword">const</span> MotionVector&lt;T&gt;&amp; argument) <span class="keyword">const</span>;
<a name="l00071"></a>00071 
<a name="l00073"></a>00073         <span class="keyword">inline</span> MotionVector&lt;T&gt; <a class="code" href="a00091.html#07789928f1437f812ede5c76139e05e0" title="Subtraction.">operator-</a>(<span class="keyword">const</span> MotionVector&lt;T&gt;&amp; argument) <span class="keyword">const</span>;
<a name="l00074"></a>00074 
<a name="l00076"></a>00076         <span class="keyword">inline</span> MotionVector&lt;T&gt; <a class="code" href="a00091.html#ba36b0918efe2150e980958e6c28bb79" title="Scalar multiplication.">operator*</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> argument) <span class="keyword">const</span>;
<a name="l00077"></a>00077 
<a name="l00079"></a>00079         <span class="keyword">inline</span> MotionVector&lt;T&gt; <a class="code" href="a00091.html#ba36b0918efe2150e980958e6c28bb79" title="Scalar multiplication.">operator*</a>(<span class="keyword">const</span> <span class="keywordtype">int</span> argument) <span class="keyword">const</span>;
<a name="l00080"></a>00080 
<a name="l00082"></a>00082         <span class="keyword">inline</span> MotionVector&lt;T&gt; <a class="code" href="a00091.html#ddd3208740623570003d06bd9d136f72" title="Bitshift of each component.">operator&lt;&lt;</a>(<span class="keyword">const</span> <span class="keywordtype">int</span> argument) <span class="keyword">const</span>;
<a name="l00083"></a>00083 
<a name="l00085"></a>00085         <span class="keyword">inline</span> MotionVector&lt;T&gt; <a class="code" href="a00091.html#aaa992f4e082d32a0155435dbc59d8ff" title="Bitshift of each component.">operator&gt;&gt;</a>(<span class="keyword">const</span> <span class="keywordtype">int</span> argument) <span class="keyword">const</span>;
<a name="l00086"></a>00086         
<a name="l00088"></a><a class="code" href="a00091.html#47c6cbf41bcfd1dddb319fadd37f0db0">00088</a>         T&amp; <a class="code" href="a00091.html#47c6cbf41bcfd1dddb319fadd37f0db0" title="Array-style element access.">operator[]</a>(<span class="keyword">const</span> <span class="keywordtype">int</span> pos){<span class="keywordflow">return</span> ( ( pos==0) ? <a class="code" href="a00091.html#2d621e73454d40917e4c765175f0b15f" title="x and y components">x</a> : <a class="code" href="a00091.html#121d0b360a1678c750f17b810b5f15f2">y</a> );}
<a name="l00089"></a>00089 
<a name="l00091"></a><a class="code" href="a00091.html#5715655df950536aa6c98a95e076d56e">00091</a>         <span class="keyword">const</span> T&amp; <a class="code" href="a00091.html#5715655df950536aa6c98a95e076d56e" title="Array-style element access.">operator[]</a>(<span class="keyword">const</span> <span class="keywordtype">int</span> pos)<span class="keyword"> const </span>{<span class="keywordflow">return</span> ( ( pos==0) ? <a class="code" href="a00091.html#2d621e73454d40917e4c765175f0b15f" title="x and y components">x</a> : <a class="code" href="a00091.html#121d0b360a1678c750f17b810b5f15f2">y</a> );}
<a name="l00092"></a>00092 
<a name="l00093"></a>00093 
<a name="l00095"></a><a class="code" href="a00091.html#121d0b360a1678c750f17b810b5f15f2">00095</a>         T <a class="code" href="a00091.html#2d621e73454d40917e4c765175f0b15f" title="x and y components">x</a>,<a class="code" href="a00091.html#121d0b360a1678c750f17b810b5f15f2">y</a>;
<a name="l00096"></a>00096 
<a name="l00097"></a>00097     };
<a name="l00098"></a>00098 
<a name="l00099"></a>00099 
<a name="l00100"></a>00100     <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt;
<a name="l00101"></a><a class="code" href="a00091.html#800a143b3d86016c1c92407aa455ad96">00101</a>     <span class="keyword">inline</span> <a class="code" href="a00091.html" title="Motion vector class - just a pair.">MotionVector&lt;T&gt;</a> <a class="code" href="a00091.html#800a143b3d86016c1c92407aa455ad96" title="Addition.">MotionVector&lt;T&gt;::operator+</a>(<span class="keyword">const</span> <a class="code" href="a00091.html" title="Motion vector class - just a pair.">MotionVector&lt;T&gt;</a>&amp; argument)<span class="keyword"> const </span>
<a name="l00102"></a>00102 <span class="keyword">    </span>{
<a name="l00103"></a>00103         <a class="code" href="a00091.html" title="Motion vector class - just a pair.">MotionVector&lt;T&gt;</a> temp;
<a name="l00104"></a>00104         temp.<a class="code" href="a00091.html#2d621e73454d40917e4c765175f0b15f" title="x and y components">x</a> = <a class="code" href="a00091.html#2d621e73454d40917e4c765175f0b15f" title="x and y components">x</a> + argument.<a class="code" href="a00091.html#2d621e73454d40917e4c765175f0b15f" title="x and y components">x</a>;
<a name="l00105"></a>00105         temp.<a class="code" href="a00091.html#121d0b360a1678c750f17b810b5f15f2">y</a> = <a class="code" href="a00091.html#121d0b360a1678c750f17b810b5f15f2">y</a> + argument.<a class="code" href="a00091.html#121d0b360a1678c750f17b810b5f15f2">y</a>;
<a name="l00106"></a>00106 
<a name="l00107"></a>00107         <span class="keywordflow">return</span> temp;
<a name="l00108"></a>00108     }
<a name="l00109"></a>00109 
<a name="l00110"></a>00110     <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt;
<a name="l00111"></a><a class="code" href="a00091.html#07789928f1437f812ede5c76139e05e0">00111</a>     <span class="keyword">inline</span> <a class="code" href="a00091.html" title="Motion vector class - just a pair.">MotionVector&lt;T&gt;</a>  <a class="code" href="a00091.html#07789928f1437f812ede5c76139e05e0" title="Subtraction.">MotionVector&lt;T&gt;::operator-</a>(<span class="keyword">const</span> <a class="code" href="a00091.html" title="Motion vector class - just a pair.">MotionVector&lt;T&gt;</a>&amp; argument)<span class="keyword"> const </span>
<a name="l00112"></a>00112 <span class="keyword">    </span>{
<a name="l00113"></a>00113         <a class="code" href="a00091.html" title="Motion vector class - just a pair.">MotionVector&lt;T&gt;</a> temp;
<a name="l00114"></a>00114         temp.<a class="code" href="a00091.html#2d621e73454d40917e4c765175f0b15f" title="x and y components">x</a> = <a class="code" href="a00091.html#2d621e73454d40917e4c765175f0b15f" title="x and y components">x</a>-argument.<a class="code" href="a00091.html#2d621e73454d40917e4c765175f0b15f" title="x and y components">x</a>;
<a name="l00115"></a>00115         temp.<a class="code" href="a00091.html#121d0b360a1678c750f17b810b5f15f2">y</a> = <a class="code" href="a00091.html#121d0b360a1678c750f17b810b5f15f2">y</a>-argument.<a class="code" href="a00091.html#121d0b360a1678c750f17b810b5f15f2">y</a>;
<a name="l00116"></a>00116 
<a name="l00117"></a>00117         <span class="keywordflow">return</span> temp;
<a name="l00118"></a>00118     }
<a name="l00119"></a>00119 
<a name="l00120"></a>00120     <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt;
<a name="l00121"></a><a class="code" href="a00091.html#ba36b0918efe2150e980958e6c28bb79">00121</a>     <span class="keyword">inline</span> <a class="code" href="a00091.html" title="Motion vector class - just a pair.">MotionVector&lt;T&gt;</a>  <a class="code" href="a00091.html#ba36b0918efe2150e980958e6c28bb79" title="Scalar multiplication.">MotionVector&lt;T&gt;::operator*</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> argument)<span class="keyword"> const </span>
<a name="l00122"></a>00122 <span class="keyword">    </span>{
<a name="l00123"></a>00123         <a class="code" href="a00091.html" title="Motion vector class - just a pair.">MotionVector&lt;T&gt;</a> temp;
<a name="l00124"></a>00124         temp.<a class="code" href="a00091.html#2d621e73454d40917e4c765175f0b15f" title="x and y components">x</a> = <a class="code" href="a00091.html#2d621e73454d40917e4c765175f0b15f" title="x and y components">x</a>*argument;
<a name="l00125"></a>00125         temp.<a class="code" href="a00091.html#121d0b360a1678c750f17b810b5f15f2">y</a> = <a class="code" href="a00091.html#121d0b360a1678c750f17b810b5f15f2">y</a>*argument;
<a name="l00126"></a>00126 
<a name="l00127"></a>00127         <span class="keywordflow">return</span> temp;
<a name="l00128"></a>00128     }
<a name="l00129"></a>00129 
<a name="l00130"></a>00130     <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt;
<a name="l00131"></a><a class="code" href="a00091.html#be57bdc18564a54224210c00339de838">00131</a>     <span class="keyword">inline</span> <a class="code" href="a00091.html" title="Motion vector class - just a pair.">MotionVector&lt;T&gt;</a>  <a class="code" href="a00091.html#ba36b0918efe2150e980958e6c28bb79" title="Scalar multiplication.">MotionVector&lt;T&gt;::operator*</a>(<span class="keyword">const</span> <span class="keywordtype">int</span> argument)<span class="keyword"> const </span>
<a name="l00132"></a>00132 <span class="keyword">    </span>{
<a name="l00133"></a>00133         <a class="code" href="a00091.html" title="Motion vector class - just a pair.">MotionVector&lt;T&gt;</a> temp;
<a name="l00134"></a>00134         temp.<a class="code" href="a00091.html#2d621e73454d40917e4c765175f0b15f" title="x and y components">x</a> = <a class="code" href="a00091.html#2d621e73454d40917e4c765175f0b15f" title="x and y components">x</a>*argument;
<a name="l00135"></a>00135         temp.<a class="code" href="a00091.html#121d0b360a1678c750f17b810b5f15f2">y</a> = <a class="code" href="a00091.html#121d0b360a1678c750f17b810b5f15f2">y</a>*argument;
<a name="l00136"></a>00136 
<a name="l00137"></a>00137         <span class="keywordflow">return</span> temp;
<a name="l00138"></a>00138     }
<a name="l00139"></a>00139 
<a name="l00140"></a>00140     <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt;
<a name="l00141"></a><a class="code" href="a00091.html#ddd3208740623570003d06bd9d136f72">00141</a>     <span class="keyword">inline</span> <a class="code" href="a00091.html" title="Motion vector class - just a pair.">MotionVector&lt;T&gt;</a>  <a class="code" href="a00091.html#ddd3208740623570003d06bd9d136f72" title="Bitshift of each component.">MotionVector&lt;T&gt;::operator&lt;&lt;</a>(<span class="keyword">const</span> <span class="keywordtype">int</span> argument)<span class="keyword"> const </span>
<a name="l00142"></a>00142 <span class="keyword">    </span>{
<a name="l00143"></a>00143         <a class="code" href="a00091.html" title="Motion vector class - just a pair.">MotionVector&lt;T&gt;</a> temp;
<a name="l00144"></a>00144         temp.<a class="code" href="a00091.html#2d621e73454d40917e4c765175f0b15f" title="x and y components">x</a> = <a class="code" href="a00091.html#2d621e73454d40917e4c765175f0b15f" title="x and y components">x</a>&lt;&lt;argument;
<a name="l00145"></a>00145         temp.<a class="code" href="a00091.html#121d0b360a1678c750f17b810b5f15f2">y</a> = <a class="code" href="a00091.html#121d0b360a1678c750f17b810b5f15f2">y</a>&lt;&lt;argument;
<a name="l00146"></a>00146 
<a name="l00147"></a>00147         <span class="keywordflow">return</span> temp;
<a name="l00148"></a>00148     }
<a name="l00149"></a>00149 
<a name="l00150"></a>00150     <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt;
<a name="l00151"></a><a class="code" href="a00091.html#aaa992f4e082d32a0155435dbc59d8ff">00151</a>     <span class="keyword">inline</span> <a class="code" href="a00091.html" title="Motion vector class - just a pair.">MotionVector&lt;T&gt;</a>  <a class="code" href="a00091.html#aaa992f4e082d32a0155435dbc59d8ff" title="Bitshift of each component.">MotionVector&lt;T&gt;::operator&gt;&gt;</a>(<span class="keyword">const</span> <span class="keywordtype">int</span> argument)<span class="keyword"> const </span>
<a name="l00152"></a>00152 <span class="keyword">    </span>{
<a name="l00153"></a>00153         <a class="code" href="a00091.html" title="Motion vector class - just a pair.">MotionVector&lt;T&gt;</a> temp;
<a name="l00154"></a>00154         temp.<a class="code" href="a00091.html#2d621e73454d40917e4c765175f0b15f" title="x and y components">x</a> = <a class="code" href="a00091.html#2d621e73454d40917e4c765175f0b15f" title="x and y components">x</a>&gt;&gt;argument;
<a name="l00155"></a>00155         temp.<a class="code" href="a00091.html#121d0b360a1678c750f17b810b5f15f2">y</a> = <a class="code" href="a00091.html#121d0b360a1678c750f17b810b5f15f2">y</a>&gt;&gt;argument;
<a name="l00156"></a>00156 
<a name="l00157"></a>00157         <span class="keywordflow">return</span> temp;
<a name="l00158"></a>00158     }
<a name="l00159"></a>00159 
<a name="l00161"></a>00161     <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt;
<a name="l00162"></a><a class="code" href="a00234.html#96055df832ee7286936db017d9624e69">00162</a>     std::ostream &amp; operator&lt;&lt; (std::ostream &amp; stream, MotionVector&lt;T&gt; &amp; mv)
<a name="l00163"></a>00163     {
<a name="l00164"></a>00164         stream &lt;&lt; mv.<a class="code" href="a00091.html#2d621e73454d40917e4c765175f0b15f" title="x and y components">x</a> &lt;&lt; <span class="stringliteral">" "</span> &lt;&lt; mv.y;
<a name="l00165"></a>00165 
<a name="l00166"></a>00166         <span class="keywordflow">return</span> stream;
<a name="l00167"></a>00167     }
<a name="l00168"></a>00168 
<a name="l00170"></a>00170     <span class="keyword">template</span> &lt;<span class="keyword">class</span> T&gt;
<a name="l00171"></a><a class="code" href="a00234.html#ec252ef50e8c639d75a72fc1045d7f1b">00171</a>     std::istream &amp; <a class="code" href="a00234.html#601ef46ed6e25d57ffa6bd41cbe128c5" title="A function for inserting array data.">operator&gt;&gt; </a>(std::istream &amp; stream, <a class="code" href="a00091.html" title="Motion vector class - just a pair.">MotionVector&lt;T&gt;</a> &amp; mv)
<a name="l00172"></a>00172     {
<a name="l00173"></a>00173         stream &gt;&gt; mv.<a class="code" href="a00091.html#2d621e73454d40917e4c765175f0b15f" title="x and y components">x</a>;
<a name="l00174"></a>00174         stream &gt;&gt; mv.<a class="code" href="a00091.html#121d0b360a1678c750f17b810b5f15f2">y</a>;
<a name="l00175"></a>00175 
<a name="l00176"></a>00176         <span class="keywordflow">return</span> stream;
<a name="l00177"></a>00177     }
<a name="l00178"></a>00178 
<a name="l00180"></a><a class="code" href="a00234.html#7782429895119df12cea135b40666613">00180</a>     <span class="keyword">typedef</span> <a class="code" href="a00091.html">MotionVector&lt;int&gt;</a> <a class="code" href="a00091.html" title="Motion vector class - just a pair.">MVector</a>;
<a name="l00181"></a>00181 
<a name="l00183"></a><a class="code" href="a00234.html#caaff47bc8c3f9776ed334351006891e">00183</a>     <span class="keyword">typedef</span> <a class="code" href="a00091.html">MotionVector&lt;int&gt;</a> <a class="code" href="a00091.html">ImageCoords</a>;
<a name="l00184"></a>00184 
<a name="l00186"></a><a class="code" href="a00234.html#f7bfef46e009be4bb8670d497278e957">00186</a>     <span class="keyword">typedef</span> <a class="code" href="a00145.html" title="A template class for two-dimensional arrays.">TwoDArray&lt;MVector&gt;</a> <a class="code" href="a00145.html" title="A template class for two-dimensional arrays.">MvArray</a>;
<a name="l00187"></a>00187 
<a name="l00189"></a><a class="code" href="a00234.html#dc8c140258c96e5f2ada27b424c21031">00189</a>     <span class="keyword">typedef</span> <a class="code" href="a00145.html" title="A template class for two-dimensional arrays.">TwoDArray&lt; MotionVector&lt;float&gt;</a> &gt; <a class="code" href="a00145.html" title="A template class for two-dimensional arrays.">MvFloatArray</a>;
<a name="l00190"></a>00190 
<a name="l00192"></a><a class="code" href="a00092.html">00192</a>     <span class="keyword">class </span><a class="code" href="a00092.html" title="Class for recording costs derived in motion estimation.">MvCostData</a>
<a name="l00193"></a>00193     {
<a name="l00194"></a>00194     <span class="keyword">public</span>:
<a name="l00196"></a><a class="code" href="a00092.html#57853c0bc5215e6b2ba1f352a150188d">00196</a>         <a class="code" href="a00092.html#57853c0bc5215e6b2ba1f352a150188d" title="Constructor.">MvCostData</a>():
<a name="l00197"></a>00197         <a class="code" href="a00092.html#cc52f391d4331d61febff1b508f87e00" title="The Sum of Absolute Differences - easier to compute than Sum-Squared Differences...">SAD</a>(0.0),
<a name="l00198"></a>00198         <a class="code" href="a00092.html#4b05d010c0263ac203b1a25ebf3eaa4f" title="The (Lagrangian-weighted) motion vector cost - the difference of a motion vector...">mvcost</a>(0.0),
<a name="l00199"></a>00199         <a class="code" href="a00092.html#f6b5feec7a0f2955da6401146ed3efd1" title="Total=SAD+mvcost.">total</a>(0.0){}
<a name="l00200"></a>00200 
<a name="l00201"></a><a class="code" href="a00092.html#eb0a7c73933716467cd2fdc6bf654943">00201</a>         <span class="keywordtype">void</span> <a class="code" href="a00092.html#eb0a7c73933716467cd2fdc6bf654943">SetTotal</a>( <span class="keyword">const</span> <span class="keywordtype">float</span> lambda ){<a class="code" href="a00092.html#f6b5feec7a0f2955da6401146ed3efd1" title="Total=SAD+mvcost.">total</a> = <a class="code" href="a00092.html#cc52f391d4331d61febff1b508f87e00" title="The Sum of Absolute Differences - easier to compute than Sum-Squared Differences...">SAD</a> + lambda*<a class="code" href="a00092.html#4b05d010c0263ac203b1a25ebf3eaa4f" title="The (Lagrangian-weighted) motion vector cost - the difference of a motion vector...">mvcost</a>;}
<a name="l00202"></a>00202 
<a name="l00204"></a><a class="code" href="a00092.html#cc52f391d4331d61febff1b508f87e00">00204</a>         <span class="keywordtype">float</span> <a class="code" href="a00092.html#cc52f391d4331d61febff1b508f87e00" title="The Sum of Absolute Differences - easier to compute than Sum-Squared Differences...">SAD</a>;
<a name="l00205"></a>00205 
<a name="l00207"></a><a class="code" href="a00092.html#4b05d010c0263ac203b1a25ebf3eaa4f">00207</a>         <span class="keywordtype">float</span> <a class="code" href="a00092.html#4b05d010c0263ac203b1a25ebf3eaa4f" title="The (Lagrangian-weighted) motion vector cost - the difference of a motion vector...">mvcost</a>;
<a name="l00208"></a>00208 
<a name="l00210"></a><a class="code" href="a00092.html#f6b5feec7a0f2955da6401146ed3efd1">00210</a>         <span class="keywordtype">float</span> <a class="code" href="a00092.html#f6b5feec7a0f2955da6401146ed3efd1" title="Total=SAD+mvcost.">total</a>;
<a name="l00211"></a>00211     };
<a name="l00212"></a>00212 
<a name="l00213"></a>00213 
<a name="l00215"></a>00215 
<a name="l00219"></a><a class="code" href="a00093.html">00219</a>     <span class="keyword">class </span><a class="code" href="a00093.html" title="Class for all the motion vector data.">MvData</a>
<a name="l00220"></a>00220     {
<a name="l00221"></a>00221     <span class="keyword">public</span>:
<a name="l00223"></a>00223 
<a name="l00228"></a>00228         <a class="code" href="a00093.html#b4c26a9523c6be15e77297849e7a318a" title="Constructor.">MvData</a>( <span class="keyword">const</span> <a class="code" href="a00114.html" title="Structure to hold motion parameters when motion comp is used.">PicturePredParams</a>&amp; predparams ,  <span class="keyword">const</span> <span class="keywordtype">int</span> num_refs);
<a name="l00229"></a>00229 
<a name="l00231"></a>00231         <a class="code" href="a00093.html#b39a7c46026a80ff2d440c1daf3dbef8" title="Destructor.">~MvData</a>();
<a name="l00232"></a>00232 
<a name="l00234"></a><a class="code" href="a00093.html#8eea47344eb67279f04df04e4114d602">00234</a>         <a class="code" href="a00114.html" title="Structure to hold motion parameters when motion comp is used.">PicturePredParams</a>&amp; <a class="code" href="a00093.html#8eea47344eb67279f04df04e4114d602" title="Return a reference to the local picture prediction params.">GetPicPredParams</a>(){<span class="keywordflow">return</span> <a class="code" href="a00093.html#0f777bb13e11da2bdfd3ea144f46d64a">m_predparams</a>;}
<a name="l00235"></a>00235 
<a name="l00237"></a><a class="code" href="a00093.html#39adb3fe2430ac14519a4771f902c1be">00237</a>         <span class="keyword">const</span> <a class="code" href="a00114.html" title="Structure to hold motion parameters when motion comp is used.">PicturePredParams</a>&amp; <a class="code" href="a00093.html#39adb3fe2430ac14519a4771f902c1be" title="Return a reference to the local picture prediction params.">GetPicPredParams</a>()<span class="keyword"> const</span>{<span class="keywordflow">return</span> <a class="code" href="a00093.html#0f777bb13e11da2bdfd3ea144f46d64a">m_predparams</a>;}
<a name="l00238"></a>00238 
<a name="l00240"></a><a class="code" href="a00093.html#98a11cef52a3a84ce0b3878394a26a9f">00240</a>         <a class="code" href="a00145.html" title="A template class for two-dimensional arrays.">MvArray</a>&amp; <a class="code" href="a00093.html#98a11cef52a3a84ce0b3878394a26a9f" title="Get the MVs for a reference.">Vectors</a>(<span class="keyword">const</span> <span class="keywordtype">int</span> ref_id){<span class="keywordflow">return</span> *( <a class="code" href="a00093.html#1cac19f9caab408b39b2a6a472b2135f">m_vectors</a>[ref_id] );}
<a name="l00241"></a>00241 
<a name="l00243"></a><a class="code" href="a00093.html#418416b2d6fac8850b374439df28af13">00243</a>         <span class="keyword">const</span> <a class="code" href="a00145.html" title="A template class for two-dimensional arrays.">MvArray</a>&amp; <a class="code" href="a00093.html#418416b2d6fac8850b374439df28af13" title="Get the MVs for a reference.">Vectors</a>(<span class="keyword">const</span> <span class="keywordtype">int</span> ref_id)<span class="keyword"> const </span>{<span class="keywordflow">return</span> *( <a class="code" href="a00093.html#1cac19f9caab408b39b2a6a472b2135f">m_vectors</a>[ref_id] );}
<a name="l00244"></a>00244 
<a name="l00246"></a><a class="code" href="a00093.html#a693d823641c046988734f0a2c341763">00246</a>         <a class="code" href="a00145.html" title="A template class for two-dimensional arrays.">MvArray</a>&amp; <a class="code" href="a00093.html#a693d823641c046988734f0a2c341763" title="Get the global MVs for a reference.">GlobalMotionVectors</a>(<span class="keyword">const</span> <span class="keywordtype">int</span> ref_id){<span class="keywordflow">return</span> *( <a class="code" href="a00093.html#1527e22453a70c15429ba1f78a5fcb14">m_gm_vectors</a>[ref_id] );}
<a name="l00247"></a>00247 
<a name="l00249"></a><a class="code" href="a00093.html#1b1a6a567ccc280f2ba032b92572a568">00249</a>         <span class="keyword">const</span> <a class="code" href="a00145.html" title="A template class for two-dimensional arrays.">MvArray</a>&amp; <a class="code" href="a00093.html#1b1a6a567ccc280f2ba032b92572a568" title="Get the global MVs for a reference.">GlobalMotionVectors</a>(<span class="keyword">const</span> <span class="keywordtype">int</span> ref_id)<span class="keyword"> const </span>{<span class="keywordflow">return</span> *( <a class="code" href="a00093.html#1527e22453a70c15429ba1f78a5fcb14">m_gm_vectors</a>[ref_id] );} 
<a name="l00250"></a>00250 
<a name="l00252"></a><a class="code" href="a00093.html#bcabf1afe99ee10e1ee71cdd54cc4486">00252</a>         <a class="code" href="a00145.html">TwoDArray&lt;ValueType&gt;</a>&amp; <a class="code" href="a00093.html#bcabf1afe99ee10e1ee71cdd54cc4486" title="Get the DC values for each component.">DC</a>(<a class="code" href="a00234.html#39dd89c4c7484412efd87d41548271cd" title="Types of picture component.">CompSort</a> cs){<span class="keywordflow">return</span> *( <a class="code" href="a00093.html#c1524f682b4fdac3166403d6d1722436">m_dc</a>[cs] );}
<a name="l00253"></a>00253 
<a name="l00255"></a><a class="code" href="a00093.html#903f795cfe3697d3aa1b43194a3f6d16">00255</a>         <span class="keyword">const</span> <a class="code" href="a00145.html">TwoDArray&lt;ValueType&gt;</a>&amp; <a class="code" href="a00093.html#903f795cfe3697d3aa1b43194a3f6d16" title="Get the DC values for each component.">DC</a>(<a class="code" href="a00234.html#39dd89c4c7484412efd87d41548271cd" title="Types of picture component.">CompSort</a> cs)<span class="keyword"> const </span>{<span class="keywordflow">return</span> *( <a class="code" href="a00093.html#c1524f682b4fdac3166403d6d1722436">m_dc</a>[cs] );}
<a name="l00256"></a>00256 
<a name="l00258"></a><a class="code" href="a00093.html#42ea670734788298243ddf943042ac02">00258</a>         <span class="keyword">const</span> <a class="code" href="a00097.html" title="A template class for one-dimensional arrays.">OneDArray&lt; TwoDArray&lt;ValueType&gt;</a>* &gt;&amp; <a class="code" href="a00093.html#42ea670734788298243ddf943042ac02" title="Get a reference to the vector holding component DC values.">DC</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> <a class="code" href="a00093.html#c1524f682b4fdac3166403d6d1722436">m_dc</a>;}
<a name="l00259"></a>00259 
<a name="l00261"></a><a class="code" href="a00093.html#72e63eef4af110fe27b5066043851669">00261</a>         <a class="code" href="a00145.html">TwoDArray&lt;PredMode&gt;</a>&amp; <a class="code" href="a00093.html#72e63eef4af110fe27b5066043851669" title="Get the block prediction modes.">Mode</a>(){<span class="keywordflow">return</span> <a class="code" href="a00093.html#a182952746692c71f5355d256c6b856a">m_modes</a>;}
<a name="l00262"></a>00262 
<a name="l00264"></a><a class="code" href="a00093.html#956de56a0db1fe8c4ecc70d9254e1396">00264</a>         <span class="keyword">const</span> <a class="code" href="a00145.html">TwoDArray&lt;PredMode&gt;</a>&amp; <a class="code" href="a00093.html#956de56a0db1fe8c4ecc70d9254e1396" title="Get the block prediction modes.">Mode</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> <a class="code" href="a00093.html#a182952746692c71f5355d256c6b856a">m_modes</a>;}
<a name="l00265"></a>00265 
<a name="l00267"></a><a class="code" href="a00093.html#b56da34e62674830d50667fd7c7df221">00267</a>         <a class="code" href="a00145.html">TwoDArray&lt;int&gt;</a>&amp; <a class="code" href="a00093.html#b56da34e62674830d50667fd7c7df221" title="Get the SB split level.">SBSplit</a>(){<span class="keywordflow">return</span> <a class="code" href="a00093.html#427725eb300f7b73aaee67832fb9570a">m_sb_split</a>;}
<a name="l00268"></a>00268 
<a name="l00270"></a><a class="code" href="a00093.html#e7200799b285c2a0840cae2492f078e4">00270</a>         <span class="keyword">const</span> <a class="code" href="a00145.html">TwoDArray&lt;int&gt;</a>&amp; <a class="code" href="a00093.html#e7200799b285c2a0840cae2492f078e4" title="Get the SB split level.">SBSplit</a>()<span class="keyword"> const</span>{<span class="keywordflow">return</span> <a class="code" href="a00093.html#427725eb300f7b73aaee67832fb9570a">m_sb_split</a>;}
<a name="l00271"></a>00271 
<a name="l00273"></a><a class="code" href="a00093.html#a594b1ece2f4b1ccc5bbbc039b7d0a24">00273</a>         <a class="code" href="a00097.html">OneDArray&lt;float&gt;</a>&amp; <a class="code" href="a00093.html#a594b1ece2f4b1ccc5bbbc039b7d0a24" title="Get the global motion model parameters.">GlobalMotionParameters</a>(<span class="keyword">const</span> <span class="keywordtype">int</span> ref_id) { <span class="keywordflow">return</span> *( <a class="code" href="a00093.html#c0ec66d9ce51604be7cc47cc402133f2">m_gm_params</a>[ref_id] ); }
<a name="l00274"></a>00274 
<a name="l00276"></a><a class="code" href="a00093.html#1e9a3b9aa80a89fcbad35faca1964af4">00276</a>         <span class="keyword">const</span> <a class="code" href="a00097.html">OneDArray&lt;float&gt;</a>&amp; <a class="code" href="a00093.html#1e9a3b9aa80a89fcbad35faca1964af4" title="Get the global motion model parameters.">GlobalMotionParameters</a>(<span class="keyword">const</span> <span class="keywordtype">int</span> ref_id)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> *( <a class="code" href="a00093.html#c0ec66d9ce51604be7cc47cc402133f2">m_gm_params</a>[ref_id] ); }
<a name="l00277"></a>00277 
<a name="l00278"></a>00278     <span class="keyword">protected</span>:
<a name="l00279"></a>00279         <span class="comment">// A local copy of the picture prediction parameters</span>
<a name="l00280"></a><a class="code" href="a00093.html#0f777bb13e11da2bdfd3ea144f46d64a">00280</a>     <a class="code" href="a00114.html" title="Structure to hold motion parameters when motion comp is used.">PicturePredParams</a> <a class="code" href="a00093.html#0f777bb13e11da2bdfd3ea144f46d64a">m_predparams</a>;
<a name="l00281"></a>00281 
<a name="l00282"></a>00282         <span class="comment">// Initialises the arrays of data</span>
<a name="l00283"></a>00283         <span class="keywordtype">void</span> <a class="code" href="a00093.html#ddb6fca49e5b5eb8dc0cb4d8204c5119">InitMvData</a>();
<a name="l00284"></a>00284 
<a name="l00285"></a>00285         <span class="comment">// The motion vectors</span>
<a name="l00286"></a><a class="code" href="a00093.html#1cac19f9caab408b39b2a6a472b2135f">00286</a>         <a class="code" href="a00097.html">OneDArray&lt;MvArray*&gt;</a> <a class="code" href="a00093.html#1cac19f9caab408b39b2a6a472b2135f">m_vectors</a>;
<a name="l00287"></a>00287 
<a name="l00288"></a>00288         <span class="comment">// The global motion vectors</span>
<a name="l00289"></a><a class="code" href="a00093.html#1527e22453a70c15429ba1f78a5fcb14">00289</a>         <a class="code" href="a00097.html">OneDArray&lt;MvArray*&gt;</a> <a class="code" href="a00093.html#1527e22453a70c15429ba1f78a5fcb14">m_gm_vectors</a>;
<a name="l00290"></a>00290 
<a name="l00291"></a>00291         <span class="comment">// The block modes</span>
<a name="l00292"></a><a class="code" href="a00093.html#a182952746692c71f5355d256c6b856a">00292</a>         <a class="code" href="a00145.html">TwoDArray&lt;PredMode&gt;</a> <a class="code" href="a00093.html#a182952746692c71f5355d256c6b856a">m_modes</a>;
<a name="l00293"></a>00293 
<a name="l00294"></a>00294         <span class="comment">// The DC values</span>
<a name="l00295"></a><a class="code" href="a00093.html#c1524f682b4fdac3166403d6d1722436">00295</a>         <a class="code" href="a00097.html" title="A template class for one-dimensional arrays.">OneDArray&lt; TwoDArray&lt;ValueType&gt;</a>* &gt; <a class="code" href="a00093.html#c1524f682b4fdac3166403d6d1722436">m_dc</a>;
<a name="l00296"></a>00296 
<a name="l00297"></a>00297         <span class="comment">// The SB split levels</span>
<a name="l00298"></a><a class="code" href="a00093.html#427725eb300f7b73aaee67832fb9570a">00298</a>         <a class="code" href="a00145.html">TwoDArray&lt;int&gt;</a> <a class="code" href="a00093.html#427725eb300f7b73aaee67832fb9570a">m_sb_split</a>;
<a name="l00299"></a>00299 
<a name="l00300"></a>00300         <span class="comment">// Global motion model parameters</span>
<a name="l00301"></a><a class="code" href="a00093.html#c0ec66d9ce51604be7cc47cc402133f2">00301</a>         <a class="code" href="a00097.html" title="A template class for one-dimensional arrays.">OneDArray&lt; OneDArray&lt;float&gt;</a>* &gt; <a class="code" href="a00093.html#c0ec66d9ce51604be7cc47cc402133f2">m_gm_params</a>;
<a name="l00302"></a>00302 
<a name="l00303"></a>00303 <span class="comment">//        // Number of reference frames</span>
<a name="l00304"></a>00304 <span class="comment">//        unsigned int m_num_refs;</span>
<a name="l00305"></a>00305     };
<a name="l00306"></a>00306 
<a name="l00308"></a>00308 
<a name="l00313"></a><a class="code" href="a00082.html">00313</a>     <span class="keyword">class </span><a class="code" href="a00082.html" title="Class for all the motion estimation data.">MEData</a>: <span class="keyword">public</span> <a class="code" href="a00093.html" title="Class for all the motion vector data.">MvData</a>
<a name="l00314"></a>00314     {
<a name="l00315"></a>00315     <span class="keyword">public</span>:
<a name="l00316"></a>00316 
<a name="l00318"></a>00318 
<a name="l00323"></a>00323         <a class="code" href="a00082.html#5bef607127b337e1ead12a861ad6843d" title="Constructor.">MEData</a>( <span class="keyword">const</span> <a class="code" href="a00114.html" title="Structure to hold motion parameters when motion comp is used.">PicturePredParams</a>&amp; predparams , <span class="keyword">const</span> <span class="keywordtype">int</span> num_refs = 2);
<a name="l00324"></a>00324 
<a name="l00326"></a>00326         <a class="code" href="a00082.html#6f03198f31a99511a74fac9288c2ad2a" title="Destructor.">~MEData</a>();
<a name="l00327"></a>00327     
<a name="l00329"></a>00329     <span class="keywordtype">void</span> <a class="code" href="a00082.html#ea163a975a5fcea26d165bc9136045ec" title="drop the data relating to one reference">DropRef</a>( <span class="keywordtype">int</span> ref_index );
<a name="l00330"></a>00330 
<a name="l00332"></a><a class="code" href="a00082.html#d8fd647b7f7d2b0361ddd621c2d952f7">00332</a>         <a class="code" href="a00145.html">TwoDArray&lt;MvCostData&gt;</a>&amp; <a class="code" href="a00082.html#d8fd647b7f7d2b0361ddd621c2d952f7" title="Get the block cost structures for each reference.">PredCosts</a>(<span class="keyword">const</span> <span class="keywordtype">int</span> ref_id){ <span class="keywordflow">return</span> *( <a class="code" href="a00082.html#327024396538d0426d7eeecc220b4062">m_pred_costs</a>[ref_id] ); }
<a name="l00333"></a>00333 
<a name="l00335"></a><a class="code" href="a00082.html#7cf176b08eed4fb96c17480b1258a048">00335</a>         <span class="keyword">const</span> <a class="code" href="a00145.html">TwoDArray&lt;MvCostData&gt;</a>&amp; <a class="code" href="a00082.html#7cf176b08eed4fb96c17480b1258a048" title="Get the block cost structures for each reference.">PredCosts</a>(<span class="keyword">const</span> <span class="keywordtype">int</span> ref_id)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> *( <a class="code" href="a00082.html#327024396538d0426d7eeecc220b4062">m_pred_costs</a>[ref_id] ); }
<a name="l00336"></a>00336 
<a name="l00338"></a><a class="code" href="a00082.html#f5648baf20bf0e052eb5a2369b55210d">00338</a>         <a class="code" href="a00145.html">TwoDArray&lt;float&gt;</a>&amp; <a class="code" href="a00082.html#f5648baf20bf0e052eb5a2369b55210d" title="Get the intra costs.">IntraCosts</a>(){ <span class="keywordflow">return</span> <a class="code" href="a00082.html#835c96794dfad2546c3593b4dddb23a4">m_intra_costs</a>; }
<a name="l00339"></a>00339 
<a name="l00341"></a><a class="code" href="a00082.html#c688db8982842ccb9073b60f5b7cb5d1">00341</a>         <span class="keyword">const</span> <a class="code" href="a00145.html">TwoDArray&lt;float&gt;</a>&amp; <a class="code" href="a00082.html#c688db8982842ccb9073b60f5b7cb5d1" title="Get the intra costs.">IntraCosts</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="a00082.html#835c96794dfad2546c3593b4dddb23a4">m_intra_costs</a>; }
<a name="l00342"></a>00342 
<a name="l00344"></a><a class="code" href="a00082.html#f384de311b4d17bf5bd7428f4b2f3ad7">00344</a>         <a class="code" href="a00145.html">TwoDArray&lt;MvCostData&gt;</a>&amp; <a class="code" href="a00082.html#f384de311b4d17bf5bd7428f4b2f3ad7" title="Get the bipred costs.">BiPredCosts</a>(){ <span class="keywordflow">return</span> <a class="code" href="a00082.html#5f9db04e415f1525ffbe93178ae948bd">m_bipred_costs</a>; }
<a name="l00345"></a>00345 
<a name="l00347"></a><a class="code" href="a00082.html#80274a5a234ebfaa55fee70de2a958aa">00347</a>         <span class="keyword">const</span> <a class="code" href="a00145.html">TwoDArray&lt;MvCostData&gt;</a>&amp; <a class="code" href="a00082.html#80274a5a234ebfaa55fee70de2a958aa" title="Get the bipred costs.">BiPredCosts</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="a00082.html#5f9db04e415f1525ffbe93178ae948bd">m_bipred_costs</a>; }
<a name="l00348"></a>00348 
<a name="l00350"></a><a class="code" href="a00082.html#ba58d2747a4f986bfac506bde407399b">00350</a>         <a class="code" href="a00145.html">TwoDArray&lt;float&gt;</a>&amp; <a class="code" href="a00082.html#ba58d2747a4f986bfac506bde407399b" title="Get the SB costs.">SBCosts</a>(){ <span class="keywordflow">return</span> <a class="code" href="a00082.html#9684c90d6eee757b29fdc77c9dead855">m_SB_costs</a>; }
<a name="l00351"></a>00351 
<a name="l00353"></a><a class="code" href="a00082.html#8ae76dff0ee3bc62c370d3531da69121">00353</a>         <span class="keyword">const</span> <a class="code" href="a00145.html">TwoDArray&lt;float&gt;</a>&amp; <a class="code" href="a00082.html#8ae76dff0ee3bc62c370d3531da69121" title="Get the SB costs.">SBCosts</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="a00082.html#9684c90d6eee757b29fdc77c9dead855">m_SB_costs</a>; }
<a name="l00354"></a>00354 
<a name="l00356"></a><a class="code" href="a00082.html#05b797daebef16f89cdf5ee0f882c3cc">00356</a>     <span class="keywordtype">float</span> <a class="code" href="a00082.html#05b797daebef16f89cdf5ee0f882c3cc" title="Get the proportion of intra blocks.">IntraBlockRatio</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> <a class="code" href="a00082.html#01f9623a1ebe53d23019049eb2cf595d">m_intra_block_ratio</a>; }
<a name="l00357"></a>00357 
<a name="l00359"></a><a class="code" href="a00082.html#99963147fb52607b4536dff4d5e4dac7">00359</a>     <span class="keywordtype">void</span> <a class="code" href="a00082.html#99963147fb52607b4536dff4d5e4dac7" title="Set the intra block ratio.">SetIntraBlockRatio</a>(<span class="keyword">const</span> <span class="keywordtype">float</span> r){ <a class="code" href="a00082.html#01f9623a1ebe53d23019049eb2cf595d">m_intra_block_ratio</a> = r; }
<a name="l00360"></a>00360 
<a name="l00362"></a>00362         <span class="keywordtype">void</span> <a class="code" href="a00082.html#b8c01186029c0f35a62f18bb3378c863" title="Set up the lambda map by detecting motion discontinuities.">SetLambdaMap</a>( <span class="keyword">const</span> <span class="keywordtype">int</span> num_refs , <span class="keyword">const</span> <span class="keywordtype">float</span> lambda );
<a name="l00363"></a>00363 
<a name="l00365"></a>00365         <span class="keywordtype">void</span> <a class="code" href="a00082.html#b8c01186029c0f35a62f18bb3378c863" title="Set up the lambda map by detecting motion discontinuities.">SetLambdaMap</a>( <span class="keyword">const</span> <span class="keywordtype">int</span> level , <span class="keyword">const</span> <a class="code" href="a00145.html">TwoDArray&lt;float&gt;</a>&amp; l_map , <span class="keyword">const</span> <span class="keywordtype">float</span> wt );
<a name="l00366"></a>00366 
<a name="l00368"></a><a class="code" href="a00082.html#7084fa503bad1a67fcf65abdffbc22b0">00368</a>         <span class="keyword">const</span> <a class="code" href="a00145.html">TwoDArray&lt;float&gt;</a>&amp; <a class="code" href="a00082.html#7084fa503bad1a67fcf65abdffbc22b0" title="Get a lambda value for a given block and level.">LambdaMap</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="a00082.html#339575dcc83177d9f5ee601abb3c76d6">m_lambda_map</a>; }
<a name="l00369"></a>00369 
<a name="l00371"></a><a class="code" href="a00082.html#689fb907cad3fb336bcee791227383a7">00371</a>         <a class="code" href="a00145.html">TwoDArray&lt;int&gt;</a>&amp; <a class="code" href="a00082.html#689fb907cad3fb336bcee791227383a7" title="Get the inliers for each reference.">GlobalMotionInliers</a>(<span class="keyword">const</span> <span class="keywordtype">int</span> ref_id){ <span class="keywordflow">return</span> *( <a class="code" href="a00082.html#fe1293cd17e436af2e8c5726b5fac4ab">m_inliers</a>[ref_id] ); }
<a name="l00372"></a>00372 
<a name="l00374"></a><a class="code" href="a00082.html#6ccfe6f14ff3f507cf773b7c954d677d">00374</a>         <span class="keyword">const</span> <a class="code" href="a00145.html">TwoDArray&lt;int&gt;</a>&amp; <a class="code" href="a00082.html#6ccfe6f14ff3f507cf773b7c954d677d" title="Get the inliers for each reference.">GlobalMotionInliers</a>(<span class="keyword">const</span> <span class="keywordtype">int</span> ref_id)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> *( <a class="code" href="a00082.html#fe1293cd17e436af2e8c5726b5fac4ab">m_inliers</a>[ref_id] ); }
<a name="l00375"></a>00375 
<a name="l00377"></a>00377         <span class="keyword">friend</span> std::ostream &amp;<a class="code" href="a00082.html#2b21c19b3b9e8cbb6ddd64e78404d113" title="Overloaded operator&amp;lt;&amp;lt; for outputing to (file) stream.">operator&lt;&lt; </a>(std::ostream &amp; stream, <a class="code" href="a00082.html" title="Class for all the motion estimation data.">MEData</a> &amp; me_data);
<a name="l00378"></a>00378 
<a name="l00380"></a>00380         <span class="keyword">friend</span> std::istream &amp;<a class="code" href="a00082.html#98c23078166a1b28c4a62e756e5d01cc" title="Overloaded operator&amp;gt;&amp;gt; for input of data from (file) stream.">operator&gt;&gt; </a>(std::istream &amp; stream, <a class="code" href="a00082.html" title="Class for all the motion estimation data.">MEData</a> &amp; me_data);
<a name="l00381"></a>00381 
<a name="l00382"></a>00382     <span class="keyword">private</span>:
<a name="l00383"></a>00383         <span class="comment">// Initialises the arrays of data</span>
<a name="l00384"></a>00384         <span class="keywordtype">void</span> <a class="code" href="a00082.html#3d2590ac03921758fb2aeb3ff50b8342">InitMEData</a>();
<a name="l00385"></a>00385 
<a name="l00386"></a>00386         <span class="comment">// Finds transitions in the motion vectors</span>
<a name="l00387"></a>00387         <span class="keywordtype">void</span> <a class="code" href="a00082.html#e09cee21626a575fa68fb49383418e2b">FindTransitions</a>( <a class="code" href="a00145.html" title="A template class for two-dimensional arrays.">TwoDArray&lt;bool&gt;</a>&amp; trans_map , <span class="keyword">const</span> <span class="keywordtype">int</span> ref_num );
<a name="l00388"></a>00388 
<a name="l00389"></a>00389         <span class="comment">// The costs of predicting each block, for each reference</span>
<a name="l00390"></a><a class="code" href="a00082.html#327024396538d0426d7eeecc220b4062">00390</a>         <a class="code" href="a00097.html" title="A template class for one-dimensional arrays.">OneDArray&lt; TwoDArray&lt;MvCostData&gt;</a>* &gt; <a class="code" href="a00082.html#327024396538d0426d7eeecc220b4062">m_pred_costs</a>;
<a name="l00391"></a>00391 
<a name="l00392"></a>00392         <span class="comment">// The costs of predicting each block by DC</span>
<a name="l00393"></a><a class="code" href="a00082.html#835c96794dfad2546c3593b4dddb23a4">00393</a>         <a class="code" href="a00145.html">TwoDArray&lt;float&gt;</a> <a class="code" href="a00082.html#835c96794dfad2546c3593b4dddb23a4">m_intra_costs</a>;
<a name="l00394"></a>00394 
<a name="l00395"></a>00395         <span class="comment">// The costs of predicting each block bidirectionally</span>
<a name="l00396"></a><a class="code" href="a00082.html#5f9db04e415f1525ffbe93178ae948bd">00396</a>         <a class="code" href="a00145.html">TwoDArray&lt;MvCostData&gt;</a> <a class="code" href="a00082.html#5f9db04e415f1525ffbe93178ae948bd">m_bipred_costs</a>;
<a name="l00397"></a>00397 
<a name="l00398"></a>00398         <span class="comment">// The costs for each macroblock as a whole</span>
<a name="l00399"></a><a class="code" href="a00082.html#9684c90d6eee757b29fdc77c9dead855">00399</a>         <a class="code" href="a00145.html">TwoDArray&lt;float&gt;</a> <a class="code" href="a00082.html#9684c90d6eee757b29fdc77c9dead855">m_SB_costs</a>;
<a name="l00400"></a>00400 
<a name="l00401"></a>00401         <span class="comment">// A map of the lambda values to use</span>
<a name="l00402"></a><a class="code" href="a00082.html#339575dcc83177d9f5ee601abb3c76d6">00402</a>         <a class="code" href="a00145.html">TwoDArray&lt;float&gt;</a> <a class="code" href="a00082.html#339575dcc83177d9f5ee601abb3c76d6">m_lambda_map</a>;
<a name="l00403"></a>00403 
<a name="l00404"></a>00404         <span class="comment">// Global motion inliers</span>
<a name="l00405"></a><a class="code" href="a00082.html#fe1293cd17e436af2e8c5726b5fac4ab">00405</a>         <a class="code" href="a00097.html" title="A template class for one-dimensional arrays.">OneDArray&lt; TwoDArray&lt;int&gt;</a>* &gt; <a class="code" href="a00082.html#fe1293cd17e436af2e8c5726b5fac4ab">m_inliers</a>;
<a name="l00406"></a>00406 
<a name="l00407"></a>00407     <span class="comment">// Intra block ratio</span>
<a name="l00408"></a><a class="code" href="a00082.html#01f9623a1ebe53d23019049eb2cf595d">00408</a>     <span class="keywordtype">float</span> <a class="code" href="a00082.html#01f9623a1ebe53d23019049eb2cf595d">m_intra_block_ratio</a>;
<a name="l00409"></a>00409 
<a name="l00410"></a>00410     };
<a name="l00411"></a>00411 
<a name="l00412"></a>00412     <span class="comment">//motion estimation and coding stuff</span>
<a name="l00413"></a>00413     
<a name="l00415"></a>00415     <span class="keywordtype">int</span> <a class="code" href="a00234.html#9ac1cfe6f37daca57b96f4cf42682910" title="Return the median of 3 integers.">Median</a>( <span class="keyword">const</span> <span class="keywordtype">int</span> val1, <span class="keyword">const</span> <span class="keywordtype">int</span> val2, <span class="keyword">const</span> <span class="keywordtype">int</span> val3);
<a name="l00416"></a>00416 
<a name="l00418"></a>00418     <a class="code" href="a00091.html" title="Motion vector class - just a pair.">MVector</a> <a class="code" href="a00234.html#627c6c67b838b1017d1c40e635068a5a" title="Return the median of three motion vectors.">MvMedian</a>(<span class="keyword">const</span> <a class="code" href="a00091.html" title="Motion vector class - just a pair.">MVector</a>&amp; mv1,<span class="keyword">const</span> <a class="code" href="a00091.html" title="Motion vector class - just a pair.">MVector</a>&amp; mv2,<span class="keyword">const</span> <a class="code" href="a00091.html" title="Motion vector class - just a pair.">MVector</a>&amp; mv3);
<a name="l00419"></a>00419 
<a name="l00420"></a>00420 
<a name="l00422"></a>00422     <span class="keywordtype">int</span> <a class="code" href="a00234.html#9ac1cfe6f37daca57b96f4cf42682910" title="Return the median of 3 integers.">Median</a>(<span class="keyword">const</span> std::vector&lt;int&gt;&amp; val_list);
<a name="l00423"></a>00423 
<a name="l00425"></a>00425     <a class="code" href="a00091.html" title="Motion vector class - just a pair.">MVector</a> <a class="code" href="a00234.html#627c6c67b838b1017d1c40e635068a5a" title="Return the median of three motion vectors.">MvMedian</a>(<span class="keyword">const</span> std::vector&lt;MVector&gt;&amp; vect_list);
<a name="l00426"></a>00426 
<a name="l00428"></a>00428     <a class="code" href="a00091.html" title="Motion vector class - just a pair.">MVector</a> <a class="code" href="a00234.html#5dadb3052be537159f72b9ef0a44fddb" title="Return the mean of two motion vectors.">MvMean</a>(<span class="keyword">const</span> <a class="code" href="a00091.html" title="Motion vector class - just a pair.">MVector</a>&amp; mv1, <span class="keyword">const</span> <a class="code" href="a00091.html" title="Motion vector class - just a pair.">MVector</a>&amp; mv2);
<a name="l00429"></a>00429 
<a name="l00431"></a><a class="code" href="a00234.html#8922035cd0995a06de4d499571bbe42f">00431</a>     <span class="keyword">inline</span> <span class="keywordtype">int</span> <a class="code" href="a00234.html#8922035cd0995a06de4d499571bbe42f" title="Return the squared length of a motion vector.">Norm2</a>(<span class="keyword">const</span> <a class="code" href="a00091.html" title="Motion vector class - just a pair.">MVector</a>&amp; mv){<span class="comment">//L^2 norm of a motion vector</span>
<a name="l00432"></a>00432         <span class="keywordflow">return</span> mv.<a class="code" href="a00091.html#2d621e73454d40917e4c765175f0b15f" title="x and y components">x</a>*mv.<a class="code" href="a00091.html#2d621e73454d40917e4c765175f0b15f" title="x and y components">x</a>+mv.<a class="code" href="a00091.html#121d0b360a1678c750f17b810b5f15f2">y</a>*mv.<a class="code" href="a00091.html#121d0b360a1678c750f17b810b5f15f2">y</a>;
<a name="l00433"></a>00433     }
<a name="l00434"></a>00434 
<a name="l00436"></a><a class="code" href="a00234.html#fa05bdcf95317206a28d2fa53f14d163">00436</a>     <span class="keyword">inline</span> <span class="keywordtype">int</span> <a class="code" href="a00234.html#fa05bdcf95317206a28d2fa53f14d163" title="Return the sum of the lengths of a motion vector&amp;#39;s componets.">Norm1</a>(<span class="keyword">const</span> <a class="code" href="a00091.html" title="Motion vector class - just a pair.">MVector</a>&amp; mv){<span class="comment">//L^1 norm of a motion vector</span>
<a name="l00437"></a>00437         <span class="keywordflow">return</span> abs(mv.<a class="code" href="a00091.html#2d621e73454d40917e4c765175f0b15f" title="x and y components">x</a>)+abs(mv.<a class="code" href="a00091.html#121d0b360a1678c750f17b810b5f15f2">y</a>);
<a name="l00438"></a>00438     }
<a name="l00439"></a>00439     
<a name="l00441"></a>00441     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="a00234.html#66649bcd754d54d2ee4c65010f827415" title="Return the mean of a set of unsigned integer values.">GetUMean</a>(std::vector&lt;unsigned int&gt;&amp; values);
<a name="l00442"></a>00442     
<a name="l00444"></a>00444     <span class="keywordtype">int</span> <a class="code" href="a00234.html#ca1824fa04de660ffbfab20ec2200cf6" title="Return the mean of a set of signed integer values.">GetSMean</a>(std::vector&lt;int&gt;&amp; values);
<a name="l00445"></a>00445 
<a name="l00446"></a>00446 } <span class="comment">// namespace dirac</span>
<a name="l00447"></a>00447 
<a name="l00448"></a>00448 <span class="preprocessor">#endif</span>
</pre></div></div>
<hr>
<p align="center"><small>
&copy; 2004 British Broadcasting Corporation.
Dirac code licensed under the <a href="http://www.mozilla.org/MPL/">Mozilla Public License (MPL) Version 1.1</a>.<br>
HTML documentation generated by Dimitri van Heesch's
excellent <a href="http://www.doxygen.org">Doxygen</a> tool.
</small></p>
</body>
</html>