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 // #### 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