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