RTP Trace System  1.0
tdtf.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 // #### Thomas Dreibholz's Trace File (TDTF)                             ####
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 TDTF_H
00023 #define TDTF_H
00024 
00025 
00026 #include "system.h"
00027 
00028 
00029 namespace Coral {
00030 
00031 
00035 enum UtilityFunctions
00036 {
00041    UF_Linear = 0x0000,
00042 
00052    UF_Exponential1 = 0x0010,
00053 
00065    UF_Exponential2 = 0x0011,
00066 
00070    UF_Undefined = 0xffff
00071 };
00072 
00073 
00074 
00082 struct TDTFPrefixExtensionHeader
00083 {
00087    char ExtID[4];
00088 
00092    card32 ExtLength;
00093 };
00094 
00095 
00096 
00104 struct TDTFPrefix
00105 {
00109    const static card32 CurrentVersion = 0x74660000;
00110 
00114    const static cardinal MaxTitleLength = 64;
00115 
00119    const static cardinal MaxCopyrightLength = 64;
00120 
00124    const static cardinal MaxCommentLength = 64;
00125 
00129    const static cardinal MaxURLLength = 128;
00130 
00131 
00135    char TDTF_ID[4];
00136 
00140    card32 Version;
00141 
00148    card64 TraceTimeStamp;
00149 
00160    card64 UtilizationTimeStamp;
00161 
00165    card16 MediaType;
00166 
00170    enum MediaTypes {
00171       MT_Unknown = 0x00,
00172       MT_MPEG    = 0x01,
00173       MT_H263    = 0x02,
00174       MT_MP3     = 0x03
00175    };
00176 
00180    card16 MediaSubtype;
00181 
00185    card32 pad01;
00186 
00190    card64 pad02;
00191 
00195    char Title[MaxTitleLength];
00196 
00200    char Copyright[MaxCopyrightLength];
00201 
00205    char Comment[MaxCommentLength];
00206 
00210    char URL[MaxURLLength];
00211 };
00212 
00213 
00214 
00222 struct TDTFSuffix
00223 {
00230    card64 TraceTimeStamp;
00231 
00238    card64 UtilizationTimeStamp;
00239 
00243    card32 ResourceUtilizationStart; 
00244 
00248    card32 ResourceUtilizationIndex;
00249 
00253    card32 MainIndex;
00254 
00258    card32 TraceStart;
00259 
00263    char TDTF_ID[4];
00264 };
00265 
00266 
00267 
00275 struct EmpiricalEnvelopePair
00276 {
00280    card16 Interval;
00281 
00285    card32 Sum;
00286 };
00287 
00288 
00296 struct EmpiricalEnvelope
00297 {
00301    card16 Pairs;
00302 
00306    EmpiricalEnvelopePair Pair[0];
00307 
00308 
00309    // ====== Calculations ===================================================
00316    static inline cardinal getSize(const cardinal eePairs);
00317 
00324    cardinal getConstraint(const cardinal bufferDelay) const;
00325 };
00326 
00327 
00328 
00336 struct FrameDescription
00337 {
00341    card32 ID;
00342 
00346    card32 Size;
00347 };
00348 
00349 
00350 
00358 struct TraceHeader
00359 {
00366    card64 FrameRate;
00367 
00371    card32 Frames;
00372 
00376    card8 Layers;
00377 
00381    card8 pad01;
00382 
00386    card16 pad02;
00387 
00394    FrameDescription Frame[0];
00395 };
00396 
00397 
00398 
00406 struct UtilizationHeader
00407 {
00411    card16 Type;
00412 
00416    card8 MaxConstants;
00417 
00421    card8 Constants;
00422 
00426    card64 Weight;
00427 
00435    card64 Constant[0];
00436 
00437 
00438    // ====== Calculation methods ============================================
00445    static inline cardinal getUtilizationSize(const cardinal maxConstants);
00446 };
00447 
00448 
00456 struct ResourceUtilizationEntry
00457 {
00461    card32 Utilization;
00462 
00466    card64 FrameRate;
00467 
00471    card32 Bandwidth[0];
00472 };
00473 
00474 
00475 
00483 struct ResourceUtilizationHeader
00484 {
00488    card16 Entries;
00489 
00493    card8 Layers;
00494 
00498    card8 Flags;
00499 
00503    card32 Position;
00504 
00508    ResourceUtilizationEntry Entry[0];
00509 
00510 
00511    // ====== Calculation methods ============================================
00519    static inline cardinal getResourceUtilizationSize(
00520                              const cardinal layers,
00521                              const cardinal maxConstants);
00522 };
00523 
00524 
00525 
00533 struct IntervalHeader
00534 {
00538    card32 Position;
00539 
00543    card32 Length;
00544 
00548    card8 Layers;
00549 
00553    card8 Flags;
00554 
00558    card16 pad;
00559 
00563    card32 IntervalDescriptionSize;
00564 
00576    card32 Offset[0];
00577    /*
00578      ====================================================================
00579      IMPORTANT NOTICE:
00580      Changes in offset mapping require change in getIntervalHeaderSize()
00581      and/or get*Offset() methods!!!
00582      ====================================================================
00583    */
00584 
00585 
00586    // ====== Offset calculation methods =====================================
00593    static inline cardinal getIntervalHeaderSize(const cardinal layers);
00594 
00598    static const cardinal offsetUH = 0;
00599 
00606    inline cardinal getOffsetLH(const cardinal layer) const;
00607 
00614    inline cardinal getOffsetEEBR(const cardinal layer) const;
00615 
00622    inline cardinal getOffsetEEFC(const cardinal layer) const;
00623 };
00624 
00625 
00626 
00634 struct LayerHeader
00635 {
00639    card32 FrameSizeUtilizationOffset;
00640 
00645    card32 Scalability;
00646    
00650    card8 Flags;
00651    
00655    card8 pad;
00656 };
00657 
00658 
00659 
00667 struct PositionLengthIntervalIndexEntry
00668 {
00672    card32 Position;
00673 
00677    card32 Length;
00678 
00682    card32 Interval;
00683 };
00684 
00685 
00686 
00694 struct PositionLengthIntervalIndexHeader
00695 {
00699    card32 Entries;
00700 
00704    PositionLengthIntervalIndexEntry Entry[0];
00705 };
00706 
00707 
00715 struct ResourceUtilizationListIndexEntry
00716 {
00720    card32 Position;
00721 
00725    card32 Length;
00726 
00730    card32 List;
00731 };
00732 
00733 
00741 struct ResourceUtilizationListIndexHeader
00742 {
00746    card32 Entries;
00747 
00751    ResourceUtilizationListIndexEntry Entry[0];
00752 };
00753 
00754 
00762 struct MainIndexEntry
00763 {
00767    card64 FrameRate;
00768 
00772    card32 Trace;
00773 
00777    card32 Intervals;
00778 };
00779 
00780 
00781 
00789 struct MainIndexHeader
00790 {
00794    card32 Entries;
00795 
00799    MainIndexEntry Entry[0];
00800 };
00801 
00802 
00803 }
00804 
00805 
00806 #include "tdtf.icc"
00807 
00808 
00809 #endif
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines