Source: tracearray.h


Annotated List
Files
Globals
Hierarchy
Index
// ##########################################################################
// ####                                                                  ####
// ####                    Master Thesis Implementation                  ####
// ####  Management of Layered Variable Bitrate Multimedia Streams over  ####
// ####                  DiffServ with A Priori Knowledge                ####
// ####                                                                  ####
// #### ================================================================ ####
// ####                                                                  ####
// ####                                                                  ####
// #### Trace Array                                                      ####
// ####                                                                  ####
// #### Version 1.00  --  October 10, 2000                               ####
// ####                                                                  ####
// #### Copyright (C) 2000 Thomas Dreibholz                              ####
// #### University of Bonn, Department of Computer Science IV            ####
// #### EMail: Dreibholz@bigfoot.com                                     ####
// #### WWW:   http://www.bigfoot.com/~dreibholz/diplom/index.html       ####
// ####                                                                  ####
// ##########################################################################


#ifndef TRACEARRAY_H
#define TRACEARRAY_H


#include "system.h"
#include "traceconfiguration.h"


namespace Coral {


/**
  * This is an array of layer traces.
  *
  * @short   Trace Array
  * @author  Thomas Dreibholz (Dreibholz@bigfoot.com)
  * @version 1.0
  */
class TraceArray
{
   // ====== Constructor/Destructor =========================================
   public:
   /**
     * Constructor.
     *
     * @param config TraceConfiguration object with configuration of the trace.
     */
   TraceArray(const TraceConfiguration& config);

   /**
     * Destructor.
     */
   virtual ~TraceArray();


   // ====== Initialize =====================================================
   /**
     * Initialize trace array.
     *
     * @param maxLayers Maximum number of layers.
     * @param maxFrames Maximum number of frames.
     */
   void init(const cardinal maxLayers,
             const cardinal maxFrames);


   // ====== Calculations ===================================================
   /**
     * Calculate empirical envelope.
     *
     * @param layer Layer number to calculate empirical envelope for.
     * @param start Start position.
     * @param end End position.
     * @param traceStart Trace start position.
     * @param traceEnd Trace end position.
     * @param ee Initialized EmpiricalEnvelope to write sums into.
     * @param frameCount true, to calculate empirical envelope for frame count; false for byterate.
     */
   void calculateEmpiricalEnvelope(const cardinal     layer,
                                   const cardinal     start,
                                   const cardinal     end,
                                   const cardinal     traceStart,
                                   const cardinal     traceEnd,
                                   EmpiricalEnvelope* ee,
                                   const bool         frameCount = false) const;

   /**
     * Calculate optimal intervals refering to given configuration.
     *
     * @param costArray Array to store costs into.
     * @param lengthArray Array to store lengths into.
     * @param minLength Minimum length.
     * @param maxLength Maximum length.
     */
   void calculateOptimalIntervals(
           double*   costArray,
           cardinal* lengthArray,
           const cardinal  minLength,
           const cardinal  maxLength) const;

   /**
     * Calculate traffic cost for an interval.
     *
     * @param position Position.
     * @param length Length.
     * @return Cost.
     */
   inline double TraceArray::calculateTrafficCost(
                                const cardinal position,
                                const cardinal length) const;


   // ====== Frame rate decrement ===========================================
   /**
     * Decrease frame rate to next lower setting.
     *
     * @return TraceArray containing next lower frame rate setting or NULL, if current setting is lowest.
     */
   virtual TraceArray* decreaseFrameRate() const;


   // ====== Public data ====================================================
   public:
   cardinal Layers;
   cardinal Frames;
   cardinal MaxLayers;
   cardinal MaxFrames;
   double   FrameRate;

   struct Trace {
      cardinal         Frames;
      FrameDescription Frame[0];
   }** LayerTrace;



   // ====== Empirical envelope initialization ==============================
   /**
     * Initialize EmpiricalEnvelope.
     *
     * @param buffer Buffer for empirical envelope.
     * @param eePairs Number of D-BIND pairs.
     * @param frameCount true, if empirical envelope is for frame count; false for byterate.
     * @return Required size.
     */
   EmpiricalEnvelope* TraceArray::initEmpiricalEnvelope(
                                     char*          buffer,
                                     const cardinal eePairs,
                                     const bool     frameCount = false) const;


   // ====== Protected data =================================================
   protected:
   TraceConfiguration Config;


   // ====== Private data ===================================================
   private:
   cardinal calculateEmpiricalEnvelopePoint(const cardinal layer,
                                            const cardinal start,
                                            const cardinal end,
                                            const cardinal traceStart,
                                            const cardinal traceEnd,
                                            const cardinal delay,
                                            const bool     frameCount = false) const;
};


/**
  * Output operator.
  */
ostream& operator<<(ostream& os, const TraceArray& traceArray);


}


#include "tracearray.icc"


#endif

Generated by: viper@odin on Mon Oct 16 11:49:26 2000, using kdoc 2.0a36.