1 /* ***** BEGIN LICENSE BLOCK ***** 2 * 3 * $Id: mvdata_byteio.h,v 1.5 2008/09/10 12:28:46 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): Anuradha Suraparaju (Original Author) 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 * Definition of class MvDataByteIO 41 */ 42 #ifndef MV_DATA_BYTEIO_H 43 #define MV_DATA_BYTEIO_H 44 45 46 // DIRAC INCLUDES 47 #include <libdirac_common/common.h> // EncParams 48 49 //LOCAL INCLUDES 50 #include <libdirac_byteio/byteio.h> // Parent class 51 #include <libdirac_byteio/mvdataelement_byteio.h>// Member byteio class 52 53 54 namespace dirac 55 { 56 /** 57 * Represents compressed sequence-parameter data used in an AccessUnit 58 */ 59 class MvDataByteIO : public ByteIO 60 { 61 public: 62 63 /** 64 * Constructor 65 *@param pparams Picture Params 66 *@param picpredparams Picture prediction parameters 67 */ 68 MvDataByteIO(PictureParams& pparams, 69 PicturePredParams& picpredparams); 70 71 /** 72 * Constructor 73 *@param byte_io Input/Output Byte stream 74 *@param pparams Picture Params 75 *@param picpredparams Picture prediction parameters 76 */ 77 MvDataByteIO(ByteIO &byte_io, PictureParams& pparams, 78 PicturePredParams& picpredparams); 79 80 /** 81 * Destructor 82 */ 83 virtual ~MvDataByteIO(); 84 85 /** 86 * Gathers byte stats on the motion vector data 87 *@param dirac_byte_stats Stat container 88 */ 89 void CollateByteStats(DiracByteStats& dirac_byte_stats); 90 91 /** 92 * Outputs motion vector data Dirac byte-format 93 */ 94 void Output(); 95 96 /** 97 * Inputs motion vector information 98 */ 99 void Input(); 100 101 102 /** 103 * Get string containing coded bytes 104 */ 105 virtual const std::string GetBytes(); 106 107 /** 108 * Return pointer to the superblock splitting modes ByteIO stream 109 */ SplitModeData()110 MvDataElementByteIO* SplitModeData() { return &m_splitmode_data; }; 111 112 /** 113 * Return pointer to the superblock splitting modes ByteIO stream 114 */ PredModeData()115 MvDataElementByteIO* PredModeData() { return &m_predmode_data; }; 116 117 /** 118 * Return pointer to the block MVs reference 1 ByteIO stream 119 */ MV1HorizData()120 MvDataElementByteIO* MV1HorizData() { return &m_mv1hblock_data; }; 121 122 /** 123 * Return pointer to the block MVs reference 1 ByteIO stream 124 */ MV1VertData()125 MvDataElementByteIO* MV1VertData() { return &m_mv1vblock_data; }; 126 127 /** 128 * Return pointer to the block MV reference 2 ByteIO stream 129 */ MV2HorizData()130 MvDataElementByteIO* MV2HorizData() { return &m_mv2hblock_data; }; 131 132 /** 133 * Return pointer to the block MV reference 2 ByteIO stream 134 */ MV2VertData()135 MvDataElementByteIO* MV2VertData() { return &m_mv2vblock_data; }; 136 137 /** 138 * Return pointer to the block Y DC values ByteIO stream 139 */ YDCData()140 MvDataElementByteIO* YDCData() { return &m_ydcblock_data; }; 141 142 /** 143 * Return pointer to the block U DC values ByteIO stream 144 */ UDCData()145 MvDataElementByteIO* UDCData() { return &m_udcblock_data; }; 146 147 /** 148 * Return pointer to the block V DC values ByteIO stream 149 */ VDCData()150 MvDataElementByteIO* VDCData() { return &m_vdcblock_data; }; 151 152 /** 153 * Return the size 154 */ 155 int GetSize() const; 156 157 protected: 158 159 160 private: 161 /** 162 * Inputs block parameters 163 */ 164 void InputBlockParams(); 165 166 /** 167 * Inputs Motion vector precision data 168 */ 169 void InputMVPrecision(); 170 171 /** 172 * Inputs global motion parameters 173 */ 174 void InputGlobalMotionParams(); 175 176 /** 177 * Inputs picture prediction mode 178 */ 179 void InputFramePredictionMode(); 180 181 /** 182 * Inputs Picture Weights 183 */ 184 void InputPictureWeights(); 185 186 /** 187 * Outputs block parameters 188 */ 189 void OutputBlockParams(); 190 191 /** 192 * Outputs Motion vector precision data 193 */ 194 void OutputMVPrecision(); 195 196 /** 197 * Outputs global motion parameters 198 */ 199 void OutputGlobalMotionParams(); 200 201 /** 202 * Outputs picture prediction mode 203 */ 204 void OutputFramePredictionMode(); 205 206 /** 207 * Outputs Picture Weights 208 */ 209 void OutputPictureWeights(); 210 211 /** 212 * Sequence paramters for intput/output 213 */ 214 PictureParams& m_pparams; 215 216 /** 217 * Codec params - EncParams for Output and DecParams for input 218 */ 219 PicturePredParams& m_picpredparams; 220 221 /** 222 * block data containing split modes 223 */ 224 MvDataElementByteIO m_splitmode_data; 225 226 /** 227 * block data containing prediction modes 228 */ 229 MvDataElementByteIO m_predmode_data; 230 231 /** 232 * block data containing horizontal MV components for reference 1 233 */ 234 MvDataElementByteIO m_mv1hblock_data; 235 236 /** 237 * block data containing vertical MV components for reference 1 238 */ 239 MvDataElementByteIO m_mv1vblock_data; 240 241 /** 242 * block data containing horizontal MV components for reference 2 243 */ 244 MvDataElementByteIO m_mv2hblock_data; 245 246 /** 247 * block data containing vertical MV components for reference 2 248 */ 249 MvDataElementByteIO m_mv2vblock_data; 250 251 /** 252 * block data containing Y DC data 253 */ 254 MvDataElementByteIO m_ydcblock_data; 255 256 /** 257 * block data containing U DC data 258 */ 259 MvDataElementByteIO m_udcblock_data; 260 261 /** 262 * block data containing V DC data 263 */ 264 MvDataElementByteIO m_vdcblock_data; 265 }; 266 267 } // namespace dirac 268 269 #endif 270