1baa3858d3f5d128a5c8466b700098109edcad5f2repo sync// CoderMixer2.cpp
2baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
3baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#include "StdAfx.h"
4baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
5baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#include "CoderMixer2.h"
6baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
7baa3858d3f5d128a5c8466b700098109edcad5f2repo syncnamespace NCoderMixer {
8baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
9baa3858d3f5d128a5c8466b700098109edcad5f2repo syncCBindReverseConverter::CBindReverseConverter(const CBindInfo &srcBindInfo):
10baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  _srcBindInfo(srcBindInfo)
11baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{
12baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  srcBindInfo.GetNumStreams(NumSrcInStreams, _numSrcOutStreams);
13baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
14baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  UInt32  j;
15baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  for (j = 0; j < NumSrcInStreams; j++)
16baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  {
17baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    _srcInToDestOutMap.Add(0);
18baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    DestOutToSrcInMap.Add(0);
19baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  }
20baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  for (j = 0; j < _numSrcOutStreams; j++)
21baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  {
22baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    _srcOutToDestInMap.Add(0);
23baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    _destInToSrcOutMap.Add(0);
24baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  }
25baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
26baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  UInt32 destInOffset = 0;
27baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  UInt32 destOutOffset = 0;
28baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  UInt32 srcInOffset = NumSrcInStreams;
29baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  UInt32 srcOutOffset = _numSrcOutStreams;
30baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
31baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  for (int i = srcBindInfo.Coders.Size() - 1; i >= 0; i--)
32baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  {
33baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    const CCoderStreamsInfo &srcCoderInfo = srcBindInfo.Coders[i];
34baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
35baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    srcInOffset -= srcCoderInfo.NumInStreams;
36baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    srcOutOffset -= srcCoderInfo.NumOutStreams;
37baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
38baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    UInt32 j;
39baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    for (j = 0; j < srcCoderInfo.NumInStreams; j++, destOutOffset++)
40baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    {
41baa3858d3f5d128a5c8466b700098109edcad5f2repo sync      UInt32 index = srcInOffset + j;
42baa3858d3f5d128a5c8466b700098109edcad5f2repo sync      _srcInToDestOutMap[index] = destOutOffset;
43baa3858d3f5d128a5c8466b700098109edcad5f2repo sync      DestOutToSrcInMap[destOutOffset] = index;
44baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    }
45baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    for (j = 0; j < srcCoderInfo.NumOutStreams; j++, destInOffset++)
46baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    {
47baa3858d3f5d128a5c8466b700098109edcad5f2repo sync      UInt32 index = srcOutOffset + j;
48baa3858d3f5d128a5c8466b700098109edcad5f2repo sync      _srcOutToDestInMap[index] = destInOffset;
49baa3858d3f5d128a5c8466b700098109edcad5f2repo sync      _destInToSrcOutMap[destInOffset] = index;
50baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    }
51baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  }
52baa3858d3f5d128a5c8466b700098109edcad5f2repo sync}
53baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
54baa3858d3f5d128a5c8466b700098109edcad5f2repo syncvoid CBindReverseConverter::CreateReverseBindInfo(CBindInfo &destBindInfo)
55baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{
56baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  destBindInfo.Coders.Clear();
57baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  destBindInfo.BindPairs.Clear();
58baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  destBindInfo.InStreams.Clear();
59baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  destBindInfo.OutStreams.Clear();
60baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
61baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  int i;
62baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  for (i = _srcBindInfo.Coders.Size() - 1; i >= 0; i--)
63baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  {
64baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    const CCoderStreamsInfo &srcCoderInfo = _srcBindInfo.Coders[i];
65baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    CCoderStreamsInfo destCoderInfo;
66baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    destCoderInfo.NumInStreams = srcCoderInfo.NumOutStreams;
67baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    destCoderInfo.NumOutStreams = srcCoderInfo.NumInStreams;
68baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    destBindInfo.Coders.Add(destCoderInfo);
69baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  }
70baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  for (i = _srcBindInfo.BindPairs.Size() - 1; i >= 0; i--)
71baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  {
72baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    const CBindPair &srcBindPair = _srcBindInfo.BindPairs[i];
73baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    CBindPair destBindPair;
74baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    destBindPair.InIndex = _srcOutToDestInMap[srcBindPair.OutIndex];
75baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    destBindPair.OutIndex = _srcInToDestOutMap[srcBindPair.InIndex];
76baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    destBindInfo.BindPairs.Add(destBindPair);
77baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  }
78baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  for (i = 0; i < _srcBindInfo.InStreams.Size(); i++)
79baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    destBindInfo.OutStreams.Add(_srcInToDestOutMap[_srcBindInfo.InStreams[i]]);
80baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  for (i = 0; i < _srcBindInfo.OutStreams.Size(); i++)
81baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    destBindInfo.InStreams.Add(_srcOutToDestInMap[_srcBindInfo.OutStreams[i]]);
82baa3858d3f5d128a5c8466b700098109edcad5f2repo sync}
83baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
84baa3858d3f5d128a5c8466b700098109edcad5f2repo syncCCoderInfo2::CCoderInfo2(UInt32 numInStreams, UInt32 numOutStreams):
85baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    NumInStreams(numInStreams),
86baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    NumOutStreams(numOutStreams)
87baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{
88baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  InSizes.Reserve(NumInStreams);
89baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  InSizePointers.Reserve(NumInStreams);
90baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  OutSizes.Reserve(NumOutStreams);
91baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  OutSizePointers.Reserve(NumOutStreams);
92baa3858d3f5d128a5c8466b700098109edcad5f2repo sync}
93baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
94baa3858d3f5d128a5c8466b700098109edcad5f2repo syncstatic void SetSizes(const UInt64 **srcSizes, CRecordVector<UInt64> &sizes,
95baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    CRecordVector<const UInt64 *> &sizePointers, UInt32 numItems)
96baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{
97baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  sizes.Clear();
98baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  sizePointers.Clear();
99baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  for(UInt32 i = 0; i < numItems; i++)
100baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  {
101baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    if (srcSizes == 0 || srcSizes[i] == NULL)
102baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    {
103baa3858d3f5d128a5c8466b700098109edcad5f2repo sync      sizes.Add(0);
104baa3858d3f5d128a5c8466b700098109edcad5f2repo sync      sizePointers.Add(NULL);
105baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    }
106baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    else
107baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    {
108baa3858d3f5d128a5c8466b700098109edcad5f2repo sync      sizes.Add(*srcSizes[i]);
109baa3858d3f5d128a5c8466b700098109edcad5f2repo sync      sizePointers.Add(&sizes.Back());
110baa3858d3f5d128a5c8466b700098109edcad5f2repo sync    }
111baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  }
112baa3858d3f5d128a5c8466b700098109edcad5f2repo sync}
113baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
114baa3858d3f5d128a5c8466b700098109edcad5f2repo syncvoid CCoderInfo2::SetCoderInfo(const UInt64 **inSizes,
115baa3858d3f5d128a5c8466b700098109edcad5f2repo sync      const UInt64 **outSizes)
116baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{
117baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  SetSizes(inSizes, InSizes, InSizePointers, NumInStreams);
118baa3858d3f5d128a5c8466b700098109edcad5f2repo sync  SetSizes(outSizes, OutSizes, OutSizePointers, NumOutStreams);
119baa3858d3f5d128a5c8466b700098109edcad5f2repo sync}
120baa3858d3f5d128a5c8466b700098109edcad5f2repo sync
121baa3858d3f5d128a5c8466b700098109edcad5f2repo sync}
122