Created by the British Broadcasting Corporation.
00001 /* ***** BEGIN LICENSE BLOCK ***** 00002 * 00003 * $Id: parseunit_byteio.h,v 1.11 2008/05/02 05:57:19 asuraparaju Exp $ $Name: Dirac_1_0_2 $ 00004 * 00005 * Version: MPL 1.1/GPL 2.0/LGPL 2.1 00006 * 00007 * The contents of this file are subject to the Mozilla Public License 00008 * Version 1.1 (the "License"); you may not use this file except in compliance 00009 * with the License. You may obtain a copy of the License at 00010 * http://www.mozilla.org/MPL/ 00011 * 00012 * Software distributed under the License is distributed on an "AS IS" basis, 00013 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for 00014 * the specific language governing rights and limitations under the License. 00015 * 00016 * The Original Code is BBC Research and Development code. 00017 * 00018 * The Initial Developer of the Original Code is the British Broadcasting 00019 * Corporation. 00020 * Portions created by the Initial Developer are Copyright (C) 2004. 00021 * All Rights Reserved. 00022 * 00023 * Contributor(s): Andrew Kennedy (Original Author) 00024 * Anuradha Suraparaju 00025 * 00026 * Alternatively, the contents of this file may be used under the terms of 00027 * the GNU General Public License Version 2 (the "GPL"), or the GNU Lesser 00028 * Public License Version 2.1 (the "LGPL"), in which case the provisions of 00029 * the GPL or the LGPL are applicable instead of those above. If you wish to 00030 * allow use of your version of this file only under the terms of the either 00031 * the GPL or LGPL and not to allow others to use your version of this file 00032 * under the MPL, indicate your decision by deleting the provisions above 00033 * and replace them with the notice and other provisions required by the GPL 00034 * or LGPL. If you do not delete the provisions above, a recipient may use 00035 * your version of this file under the terms of any one of the MPL, the GPL 00036 * or the LGPL. 00037 * ***** END LICENSE BLOCK ***** */ 00038 00042 #ifndef parseunit_byteio_h 00043 #define parseunit_byteio_h 00044 00045 //SYSTEM INLUDES 00046 #include <map> // Byte-map 00047 #include <string> // stores values 00048 00049 //LOCAL INCLUDES 00050 #include "byteio.h" // Parent class 00051 00052 00053 namespace dirac 00054 { 00055 00056 /* Types of parse-unit */ 00057 typedef enum { 00058 PU_SEQ_HEADER=0, 00059 PU_PICTURE, 00060 PU_END_OF_SEQUENCE, 00061 PU_AUXILIARY_DATA, 00062 PU_PADDING_DATA, 00063 PU_CORE_PICTURE, 00064 PU_LOW_DELAY_PICTURE, 00065 PU_UNDEFINED 00066 } ParseUnitType; 00067 00072 class ParseUnitByteIO : public ByteIO 00073 { 00074 public: 00075 00079 ParseUnitByteIO(); 00080 00085 ParseUnitByteIO(const ByteIO& byte_io); 00086 00091 ParseUnitByteIO(const ParseUnitByteIO& parseunit_byteio); 00092 00096 ~ParseUnitByteIO(); 00097 00102 virtual void CollateByteStats(DiracByteStats& dirac_byte_stats); 00103 00108 bool Input(); // decoding 00109 00113 bool IsValid(); 00114 00119 bool CanSkip(); 00120 00124 virtual const std::string GetBytes(); // encoding 00125 00130 void SetAdjacentParseUnits(ParseUnitByteIO *p_prev_parseunit); // encoding 00131 00132 /* 00133 * Gets number of bytes input/output within unit 00134 */ 00135 virtual int GetSize() const; 00136 00140 int GetNextParseOffset() const; 00141 00145 int GetPreviousParseOffset() const; 00146 00150 virtual ParseUnitType GetType() const; 00151 00155 bool IsSeqHeader() const 00156 { return m_parse_code==0x00; } 00157 00161 bool IsEndOfSequence() const 00162 { return m_parse_code==0x10; } 00163 00167 bool IsAuxiliaryData() const 00168 { return (m_parse_code&0xF8)==0x20; } 00169 00173 bool IsPaddingData() const 00174 { return m_parse_code==0x30; } 00175 00179 bool IsPicture() const 00180 { return ((m_parse_code&0x08)==0x08); } 00181 00185 bool IsLowDelay() const 00186 { return ((m_parse_code&0x88)==0x88); } 00187 00191 bool IsCoreSyntax() const 00192 { return ((m_parse_code&0x88)==0x08); } 00193 00197 bool IsUsingAC() const 00198 { return ((m_parse_code&0x48)==0x08); } 00199 00200 protected: 00201 00206 virtual int CalcNextUnitOffset(); 00207 00212 virtual unsigned char CalcParseCode() const { return 0;} // encoding 00213 00218 bool SyncToUnitStart(); // decoding 00219 00223 unsigned char GetParseCode() const { return m_parse_code;} 00224 00225 private: 00226 00230 int m_previous_parse_offset; 00231 00235 int m_next_parse_offset; 00236 00240 unsigned char m_parse_code; 00241 00242 }; 00243 00244 00245 } // namespace dirac 00246 00247 #endif
© 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.