RTP Trace System  1.0
tracearray.h
Go to the documentation of this file.
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
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines