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