RTP Trace System
1.0
|
00001 // ########################################################################## 00002 // #### #### 00003 // #### Master Thesis Implementation #### 00004 // #### Management of Layered Variable Bitrate Multimedia Streams over #### 00005 // #### DiffServ with A Priori Knowledge #### 00006 // #### #### 00007 // #### ================================================================ #### 00008 // #### #### 00009 // #### #### 00010 // #### Trace Array #### 00011 // #### #### 00012 // #### Version 1.00 -- February 19, 2001 #### 00013 // #### #### 00014 // #### Copyright (C) 2000/2001 Thomas Dreibholz #### 00015 // #### University of Bonn, Department of Computer Science IV #### 00016 // #### EMail: dreibh@iem.uni-due.de #### 00017 // #### WWW: https://www.uni-due.de/~be0001/diplom/index.html #### 00018 // #### #### 00019 // ########################################################################## 00020 00021 00022 #ifndef TRACEARRAY_H 00023 #define TRACEARRAY_H 00024 00025 00026 #include "system.h" 00027 #include "traceconfiguration.h" 00028 00029 00030 namespace Coral { 00031 00032 00040 class TraceArray 00041 { 00042 // ====== Constructor/Destructor ========================================= 00043 public: 00049 TraceArray(const TraceConfiguration& config); 00050 00054 virtual ~TraceArray(); 00055 00056 00057 // ====== Initialize ===================================================== 00064 void init(const cardinal maxLayers, 00065 const cardinal maxFrames); 00066 00067 00068 // ====== Calculations =================================================== 00080 void calculateEmpiricalEnvelope(const cardinal layer, 00081 const cardinal start, 00082 const cardinal end, 00083 const cardinal traceStart, 00084 const cardinal traceEnd, 00085 EmpiricalEnvelope* ee, 00086 const bool frameCount = false) const; 00087 00096 void calculateOptimalIntervals( 00097 double* costArray, 00098 cardinal* lengthArray, 00099 const cardinal minLength, 00100 const cardinal maxLength) const; 00101 00110 double TraceArray::calculateTrafficCost( 00111 EmpiricalEnvelope** ee, 00112 const cardinal position, 00113 const cardinal length) const; 00114 00125 inline double TraceArray::calculateNextTrafficCost( 00126 EmpiricalEnvelope** ee, 00127 const cardinal position, 00128 const cardinal length) const; 00129 00130 00131 // ====== Frame rate decrement =========================================== 00137 virtual TraceArray* decreaseFrameRate() const; 00138 00139 00140 // ====== Public data ==================================================== 00141 public: 00142 cardinal Layers; 00143 cardinal Frames; 00144 cardinal MaxLayers; 00145 cardinal MaxFrames; 00146 double FrameRate; 00147 00148 struct Trace { 00149 cardinal Frames; 00150 FrameDescription Frame[0]; 00151 }** LayerTrace; 00152 00153 00154 00155 // ====== Empirical envelope initialization ============================== 00164 EmpiricalEnvelope* TraceArray::initEmpiricalEnvelope( 00165 char* buffer, 00166 const cardinal eePairs, 00167 const bool frameCount = false) const; 00168 00169 00170 // ====== Protected data ================================================= 00171 protected: 00172 TraceConfiguration Config; 00173 00174 00175 // ====== Private data =================================================== 00176 private: 00177 cardinal calculateEmpiricalEnvelopePoint(const cardinal layer, 00178 const cardinal start, 00179 const cardinal end, 00180 const cardinal traceStart, 00181 const cardinal traceEnd, 00182 const cardinal delay, 00183 const bool frameCount = false) const; 00184 }; 00185 00186 00190 ostream& operator<<(ostream& os, const TraceArray& traceArray); 00191 00192 00193 } 00194 00195 00196 #include "tracearray.icc" 00197 00198 00199 #endif