5 #include "CoderMixer2.h"
7 namespace NCoderMixer {
9 CBindReverseConverter::CBindReverseConverter(const CBindInfo &srcBindInfo):
10 _srcBindInfo(srcBindInfo)
12 srcBindInfo.GetNumStreams(NumSrcInStreams, _numSrcOutStreams);
15 for (j = 0; j < NumSrcInStreams; j++)
17 _srcInToDestOutMap.Add(0);
18 DestOutToSrcInMap.Add(0);
20 for (j = 0; j < _numSrcOutStreams; j++)
22 _srcOutToDestInMap.Add(0);
23 _destInToSrcOutMap.Add(0);
26 UInt32 destInOffset = 0;
27 UInt32 destOutOffset = 0;
28 UInt32 srcInOffset = NumSrcInStreams;
29 UInt32 srcOutOffset = _numSrcOutStreams;
31 for (int i = srcBindInfo.Coders.Size() - 1; i >= 0; i--)
33 const CCoderStreamsInfo &srcCoderInfo = srcBindInfo.Coders[i];
35 srcInOffset -= srcCoderInfo.NumInStreams;
36 srcOutOffset -= srcCoderInfo.NumOutStreams;
39 for (j = 0; j < srcCoderInfo.NumInStreams; j++, destOutOffset++)
41 UInt32 index = srcInOffset + j;
42 _srcInToDestOutMap[index] = destOutOffset;
43 DestOutToSrcInMap[destOutOffset] = index;
45 for (j = 0; j < srcCoderInfo.NumOutStreams; j++, destInOffset++)
47 UInt32 index = srcOutOffset + j;
48 _srcOutToDestInMap[index] = destInOffset;
49 _destInToSrcOutMap[destInOffset] = index;
54 void CBindReverseConverter::CreateReverseBindInfo(CBindInfo &destBindInfo)
56 destBindInfo.Coders.Clear();
57 destBindInfo.BindPairs.Clear();
58 destBindInfo.InStreams.Clear();
59 destBindInfo.OutStreams.Clear();
62 for (i = _srcBindInfo.Coders.Size() - 1; i >= 0; i--)
64 const CCoderStreamsInfo &srcCoderInfo = _srcBindInfo.Coders[i];
65 CCoderStreamsInfo destCoderInfo;
66 destCoderInfo.NumInStreams = srcCoderInfo.NumOutStreams;
67 destCoderInfo.NumOutStreams = srcCoderInfo.NumInStreams;
68 destBindInfo.Coders.Add(destCoderInfo);
70 for (i = _srcBindInfo.BindPairs.Size() - 1; i >= 0; i--)
72 const CBindPair &srcBindPair = _srcBindInfo.BindPairs[i];
73 CBindPair destBindPair;
74 destBindPair.InIndex = _srcOutToDestInMap[srcBindPair.OutIndex];
75 destBindPair.OutIndex = _srcInToDestOutMap[srcBindPair.InIndex];
76 destBindInfo.BindPairs.Add(destBindPair);
78 for (i = 0; i < _srcBindInfo.InStreams.Size(); i++)
79 destBindInfo.OutStreams.Add(_srcInToDestOutMap[_srcBindInfo.InStreams[i]]);
80 for (i = 0; i < _srcBindInfo.OutStreams.Size(); i++)
81 destBindInfo.InStreams.Add(_srcOutToDestInMap[_srcBindInfo.OutStreams[i]]);
84 CCoderInfo2::CCoderInfo2(UInt32 numInStreams, UInt32 numOutStreams):
85 NumInStreams(numInStreams),
86 NumOutStreams(numOutStreams)
88 InSizes.Reserve(NumInStreams);
89 InSizePointers.Reserve(NumInStreams);
90 OutSizePointers.Reserve(NumOutStreams);
91 OutSizePointers.Reserve(NumOutStreams);
94 static void SetSizes(const UInt64 **srcSizes, CRecordVector<UInt64> &sizes,
95 CRecordVector<const UInt64 *> &sizePointers, UInt32 numItems)
99 for(UInt32 i = 0; i < numItems; i++)
101 if (srcSizes == 0 || srcSizes[i] == NULL)
104 sizePointers.Add(NULL);
108 sizes.Add(*srcSizes[i]);
109 sizePointers.Add(&sizes.Back());
114 void CCoderInfo2::SetCoderInfo(const UInt64 **inSizes,
115 const UInt64 **outSizes)
117 SetSizes(inSizes, InSizes, InSizePointers, NumInStreams);
118 SetSizes(outSizes, OutSizes, OutSizePointers, NumOutStreams);