1 /* ***** BEGIN LICENSE BLOCK ***** 2 * 3 * $Id: dirac_byte_stream.h,v 1.4 2008/08/14 00:51:08 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): Andrew Kennedy (Original Author) 24 * Anuradha Suraparaju 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 DiracByteStream 41 */ 42 #ifndef dirac_byte_stream_h 43 #define dirac_byte_stream_h 44 45 //SYSTEM INCLUDES 46 #include <queue> 47 48 //LOCAL INCLUDES 49 #include "byteio.h" // Parent class 50 #include "accessunit_byteio.h" // manages parse-unit types 51 #include "picture_byteio.h" // manages parse-unit types 52 53 namespace dirac 54 { 55 56 /** 57 * Represents a series of bytes in the Dirac bytestream specfication format. 58 * These bytes are grouped into more managable parse units by this class. 59 */ 60 class DiracByteStream : public ByteIO 61 { 62 public: 63 64 /** 65 * Constructor 66 */ 67 DiracByteStream(); 68 69 /** 70 * Destructor 71 */ 72 ~DiracByteStream(); 73 74 /** 75 * Adds Dirac-formatted bytes to internal-byte-stream for processing 76 *@param start Start of char list 77 *@param count Number of chars 78 */ 79 void AddBytes(char* start, int count); 80 81 /** 82 * Gets the statistics of the most recent parse-unit to be processed 83 *@return Byte-statistics 84 */ 85 DiracByteStats GetLastUnitStats(); 86 87 /** 88 * Gets the next parse-unit in the current byte-stream 89 */ 90 ParseUnitByteIO* GetNextParseUnit(); 91 92 93 /** 94 * Gets stats for current sequence 95 */ 96 DiracByteStats GetSequenceStats() const; 97 98 /** 99 * Adds a random access point to the current Dirac byte stream 100 *@param p_seqheader_byteio Sequence header data. 101 */ 102 void AddSequenceHeader(SequenceHeaderByteIO *p_seqheader_byteio); 103 104 /** 105 * Adds a picture to the current Dirac byte stream 106 *@param p_frame_byteio Picture stream. This class is now responsible for deleting. 107 */ 108 void AddPicture(PictureByteIO *p_frame_byteio); 109 110 /** 111 * Clear parse-units 112 */ 113 void Clear(); 114 115 /** 116 * Insert end-of-sequence data 117 *@return Sequence stats 118 */ 119 DiracByteStats EndSequence(); 120 121 /** 122 * Gets a pointer to all current output bytes 123 */ 124 const std::string GetBytes(); 125 126 /** 127 * Any info pending? 128 */ 129 bool IsUnitAvailable() const; 130 131 private: 132 133 void Reset(ParseUnitByteIO* p_curr_unit, int pos); 134 135 private: 136 137 /** 138 * Parse-units in Dirac stream 139 */ 140 typedef std::queue< std::pair <ParseUnitType, ParseUnitByteIO*> > ParseUnitList; 141 ParseUnitList m_parse_unit_list; 142 143 /** 144 * Last unit to be processed 145 * Required for specifying the previous parse-unit 146 */ 147 ParseUnitByteIO* mp_prev_parse_unit; 148 149 /** 150 * Stats for current sequence 151 */ 152 DiracByteStats m_sequence_stats; 153 154 }; 155 156 } // namespace dirac 157 158 #endif 159