| OLD | NEW |
| (Empty) |
| 1 // CoderMixer2.h | |
| 2 | |
| 3 #ifndef __CODER_MIXER2_H | |
| 4 #define __CODER_MIXER2_H | |
| 5 | |
| 6 #include "../../../Common/MyVector.h" | |
| 7 #include "../../../Common/Types.h" | |
| 8 #include "../../../Common/MyCom.h" | |
| 9 #include "../../ICoder.h" | |
| 10 | |
| 11 namespace NCoderMixer { | |
| 12 | |
| 13 struct CBindPair | |
| 14 { | |
| 15 UInt32 InIndex; | |
| 16 UInt32 OutIndex; | |
| 17 }; | |
| 18 | |
| 19 struct CCoderStreamsInfo | |
| 20 { | |
| 21 UInt32 NumInStreams; | |
| 22 UInt32 NumOutStreams; | |
| 23 }; | |
| 24 | |
| 25 struct CBindInfo | |
| 26 { | |
| 27 CRecordVector<CCoderStreamsInfo> Coders; | |
| 28 CRecordVector<CBindPair> BindPairs; | |
| 29 CRecordVector<UInt32> InStreams; | |
| 30 CRecordVector<UInt32> OutStreams; | |
| 31 | |
| 32 void Clear() | |
| 33 { | |
| 34 Coders.Clear(); | |
| 35 BindPairs.Clear(); | |
| 36 InStreams.Clear(); | |
| 37 OutStreams.Clear(); | |
| 38 } | |
| 39 | |
| 40 /* | |
| 41 UInt32 GetCoderStartOutStream(UInt32 coderIndex) const | |
| 42 { | |
| 43 UInt32 numOutStreams = 0; | |
| 44 for (UInt32 i = 0; i < coderIndex; i++) | |
| 45 numOutStreams += Coders[i].NumOutStreams; | |
| 46 return numOutStreams; | |
| 47 } | |
| 48 */ | |
| 49 | |
| 50 | |
| 51 void GetNumStreams(UInt32 &numInStreams, UInt32 &numOutStreams) const | |
| 52 { | |
| 53 numInStreams = 0; | |
| 54 numOutStreams = 0; | |
| 55 for (int i = 0; i < Coders.Size(); i++) | |
| 56 { | |
| 57 const CCoderStreamsInfo &coderStreamsInfo = Coders[i]; | |
| 58 numInStreams += coderStreamsInfo.NumInStreams; | |
| 59 numOutStreams += coderStreamsInfo.NumOutStreams; | |
| 60 } | |
| 61 } | |
| 62 | |
| 63 int FindBinderForInStream(UInt32 inStream) const | |
| 64 { | |
| 65 for (int i = 0; i < BindPairs.Size(); i++) | |
| 66 if (BindPairs[i].InIndex == inStream) | |
| 67 return i; | |
| 68 return -1; | |
| 69 } | |
| 70 int FindBinderForOutStream(UInt32 outStream) const | |
| 71 { | |
| 72 for (int i = 0; i < BindPairs.Size(); i++) | |
| 73 if (BindPairs[i].OutIndex == outStream) | |
| 74 return i; | |
| 75 return -1; | |
| 76 } | |
| 77 | |
| 78 UInt32 GetCoderInStreamIndex(UInt32 coderIndex) const | |
| 79 { | |
| 80 UInt32 streamIndex = 0; | |
| 81 for (UInt32 i = 0; i < coderIndex; i++) | |
| 82 streamIndex += Coders[i].NumInStreams; | |
| 83 return streamIndex; | |
| 84 } | |
| 85 | |
| 86 UInt32 GetCoderOutStreamIndex(UInt32 coderIndex) const | |
| 87 { | |
| 88 UInt32 streamIndex = 0; | |
| 89 for (UInt32 i = 0; i < coderIndex; i++) | |
| 90 streamIndex += Coders[i].NumOutStreams; | |
| 91 return streamIndex; | |
| 92 } | |
| 93 | |
| 94 | |
| 95 void FindInStream(UInt32 streamIndex, UInt32 &coderIndex, | |
| 96 UInt32 &coderStreamIndex) const | |
| 97 { | |
| 98 for (coderIndex = 0; coderIndex < (UInt32)Coders.Size(); coderIndex++) | |
| 99 { | |
| 100 UInt32 curSize = Coders[coderIndex].NumInStreams; | |
| 101 if (streamIndex < curSize) | |
| 102 { | |
| 103 coderStreamIndex = streamIndex; | |
| 104 return; | |
| 105 } | |
| 106 streamIndex -= curSize; | |
| 107 } | |
| 108 throw 1; | |
| 109 } | |
| 110 void FindOutStream(UInt32 streamIndex, UInt32 &coderIndex, | |
| 111 UInt32 &coderStreamIndex) const | |
| 112 { | |
| 113 for (coderIndex = 0; coderIndex < (UInt32)Coders.Size(); coderIndex++) | |
| 114 { | |
| 115 UInt32 curSize = Coders[coderIndex].NumOutStreams; | |
| 116 if (streamIndex < curSize) | |
| 117 { | |
| 118 coderStreamIndex = streamIndex; | |
| 119 return; | |
| 120 } | |
| 121 streamIndex -= curSize; | |
| 122 } | |
| 123 throw 1; | |
| 124 } | |
| 125 }; | |
| 126 | |
| 127 class CBindReverseConverter | |
| 128 { | |
| 129 UInt32 _numSrcOutStreams; | |
| 130 NCoderMixer::CBindInfo _srcBindInfo; | |
| 131 CRecordVector<UInt32> _srcInToDestOutMap; | |
| 132 CRecordVector<UInt32> _srcOutToDestInMap; | |
| 133 CRecordVector<UInt32> _destInToSrcOutMap; | |
| 134 public: | |
| 135 UInt32 NumSrcInStreams; | |
| 136 CRecordVector<UInt32> DestOutToSrcInMap; | |
| 137 | |
| 138 CBindReverseConverter(const NCoderMixer::CBindInfo &srcBindInfo); | |
| 139 void CreateReverseBindInfo(NCoderMixer::CBindInfo &destBindInfo); | |
| 140 }; | |
| 141 | |
| 142 struct CCoderInfo2 | |
| 143 { | |
| 144 CMyComPtr<ICompressCoder> Coder; | |
| 145 CMyComPtr<ICompressCoder2> Coder2; | |
| 146 UInt32 NumInStreams; | |
| 147 UInt32 NumOutStreams; | |
| 148 | |
| 149 CRecordVector<UInt64> InSizes; | |
| 150 CRecordVector<UInt64> OutSizes; | |
| 151 CRecordVector<const UInt64 *> InSizePointers; | |
| 152 CRecordVector<const UInt64 *> OutSizePointers; | |
| 153 | |
| 154 CCoderInfo2(UInt32 numInStreams, UInt32 numOutStreams); | |
| 155 void SetCoderInfo(const UInt64 **inSizes, const UInt64 **outSizes); | |
| 156 | |
| 157 HRESULT QueryInterface(REFGUID iid, void** pp) const | |
| 158 { | |
| 159 IUnknown *p = Coder ? (IUnknown *)Coder : (IUnknown *)Coder2; | |
| 160 return p->QueryInterface(iid, pp); | |
| 161 } | |
| 162 }; | |
| 163 | |
| 164 class CCoderMixer2 | |
| 165 { | |
| 166 public: | |
| 167 virtual HRESULT SetBindInfo(const CBindInfo &bindInfo) = 0; | |
| 168 virtual void ReInit() = 0; | |
| 169 virtual void SetCoderInfo(UInt32 coderIndex, const UInt64 **inSizes, const UIn
t64 **outSizes) = 0; | |
| 170 }; | |
| 171 | |
| 172 } | |
| 173 #endif | |
| 174 | |
| OLD | NEW |