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