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