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