1baa3858d3f5d128a5c8466b700098109edcad5f2repo sync// CoderMixer2MT.cpp 2baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 3baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#include "StdAfx.h" 4baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 5baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#include "CoderMixer2MT.h" 6baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 7baa3858d3f5d128a5c8466b700098109edcad5f2repo syncnamespace NCoderMixer { 8baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 9baa3858d3f5d128a5c8466b700098109edcad5f2repo syncCCoder2::CCoder2(UInt32 numInStreams, UInt32 numOutStreams): 10baa3858d3f5d128a5c8466b700098109edcad5f2repo sync CCoderInfo2(numInStreams, numOutStreams) 11baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{ 12baa3858d3f5d128a5c8466b700098109edcad5f2repo sync InStreams.Reserve(NumInStreams); 13baa3858d3f5d128a5c8466b700098109edcad5f2repo sync InStreamPointers.Reserve(NumInStreams); 14baa3858d3f5d128a5c8466b700098109edcad5f2repo sync OutStreams.Reserve(NumOutStreams); 15baa3858d3f5d128a5c8466b700098109edcad5f2repo sync OutStreamPointers.Reserve(NumOutStreams); 16baa3858d3f5d128a5c8466b700098109edcad5f2repo sync} 17baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 18baa3858d3f5d128a5c8466b700098109edcad5f2repo syncvoid CCoder2::Execute() { Code(NULL); } 19baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 20baa3858d3f5d128a5c8466b700098109edcad5f2repo syncvoid CCoder2::Code(ICompressProgressInfo *progress) 21baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{ 22baa3858d3f5d128a5c8466b700098109edcad5f2repo sync InStreamPointers.Clear(); 23baa3858d3f5d128a5c8466b700098109edcad5f2repo sync OutStreamPointers.Clear(); 24baa3858d3f5d128a5c8466b700098109edcad5f2repo sync UInt32 i; 25baa3858d3f5d128a5c8466b700098109edcad5f2repo sync for (i = 0; i < NumInStreams; i++) 26baa3858d3f5d128a5c8466b700098109edcad5f2repo sync { 27baa3858d3f5d128a5c8466b700098109edcad5f2repo sync if (InSizePointers[i] != NULL) 28baa3858d3f5d128a5c8466b700098109edcad5f2repo sync InSizePointers[i] = &InSizes[i]; 29baa3858d3f5d128a5c8466b700098109edcad5f2repo sync InStreamPointers.Add((ISequentialInStream *)InStreams[i]); 30baa3858d3f5d128a5c8466b700098109edcad5f2repo sync } 31baa3858d3f5d128a5c8466b700098109edcad5f2repo sync for (i = 0; i < NumOutStreams; i++) 32baa3858d3f5d128a5c8466b700098109edcad5f2repo sync { 33baa3858d3f5d128a5c8466b700098109edcad5f2repo sync if (OutSizePointers[i] != NULL) 34baa3858d3f5d128a5c8466b700098109edcad5f2repo sync OutSizePointers[i] = &OutSizes[i]; 35baa3858d3f5d128a5c8466b700098109edcad5f2repo sync OutStreamPointers.Add((ISequentialOutStream *)OutStreams[i]); 36baa3858d3f5d128a5c8466b700098109edcad5f2repo sync } 37baa3858d3f5d128a5c8466b700098109edcad5f2repo sync if (Coder) 38baa3858d3f5d128a5c8466b700098109edcad5f2repo sync Result = Coder->Code(InStreamPointers[0], OutStreamPointers[0], 39baa3858d3f5d128a5c8466b700098109edcad5f2repo sync InSizePointers[0], OutSizePointers[0], progress); 40baa3858d3f5d128a5c8466b700098109edcad5f2repo sync else 41baa3858d3f5d128a5c8466b700098109edcad5f2repo sync Result = Coder2->Code(&InStreamPointers.Front(), &InSizePointers.Front(), NumInStreams, 42baa3858d3f5d128a5c8466b700098109edcad5f2repo sync &OutStreamPointers.Front(), &OutSizePointers.Front(), NumOutStreams, progress); 43baa3858d3f5d128a5c8466b700098109edcad5f2repo sync { 44baa3858d3f5d128a5c8466b700098109edcad5f2repo sync int i; 45baa3858d3f5d128a5c8466b700098109edcad5f2repo sync for (i = 0; i < InStreams.Size(); i++) 46baa3858d3f5d128a5c8466b700098109edcad5f2repo sync InStreams[i].Release(); 47baa3858d3f5d128a5c8466b700098109edcad5f2repo sync for (i = 0; i < OutStreams.Size(); i++) 48baa3858d3f5d128a5c8466b700098109edcad5f2repo sync OutStreams[i].Release(); 49baa3858d3f5d128a5c8466b700098109edcad5f2repo sync } 50baa3858d3f5d128a5c8466b700098109edcad5f2repo sync} 51baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 52baa3858d3f5d128a5c8466b700098109edcad5f2repo syncstatic void SetSizes(const UInt64 **srcSizes, CRecordVector<UInt64> &sizes, 53baa3858d3f5d128a5c8466b700098109edcad5f2repo sync CRecordVector<const UInt64 *> &sizePointers, UInt32 numItems) 54baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{ 55baa3858d3f5d128a5c8466b700098109edcad5f2repo sync sizes.Clear(); 56baa3858d3f5d128a5c8466b700098109edcad5f2repo sync sizePointers.Clear(); 57baa3858d3f5d128a5c8466b700098109edcad5f2repo sync for (UInt32 i = 0; i < numItems; i++) 58baa3858d3f5d128a5c8466b700098109edcad5f2repo sync { 59baa3858d3f5d128a5c8466b700098109edcad5f2repo sync if (srcSizes == 0 || srcSizes[i] == NULL) 60baa3858d3f5d128a5c8466b700098109edcad5f2repo sync { 61baa3858d3f5d128a5c8466b700098109edcad5f2repo sync sizes.Add(0); 62baa3858d3f5d128a5c8466b700098109edcad5f2repo sync sizePointers.Add(NULL); 63baa3858d3f5d128a5c8466b700098109edcad5f2repo sync } 64baa3858d3f5d128a5c8466b700098109edcad5f2repo sync else 65baa3858d3f5d128a5c8466b700098109edcad5f2repo sync { 66baa3858d3f5d128a5c8466b700098109edcad5f2repo sync sizes.Add(*srcSizes[i]); 67baa3858d3f5d128a5c8466b700098109edcad5f2repo sync sizePointers.Add(&sizes.Back()); 68baa3858d3f5d128a5c8466b700098109edcad5f2repo sync } 69baa3858d3f5d128a5c8466b700098109edcad5f2repo sync } 70baa3858d3f5d128a5c8466b700098109edcad5f2repo sync} 71baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 72baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 73baa3858d3f5d128a5c8466b700098109edcad5f2repo syncvoid CCoder2::SetCoderInfo(const UInt64 **inSizes, const UInt64 **outSizes) 74baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{ 75baa3858d3f5d128a5c8466b700098109edcad5f2repo sync SetSizes(inSizes, InSizes, InSizePointers, NumInStreams); 76baa3858d3f5d128a5c8466b700098109edcad5f2repo sync SetSizes(outSizes, OutSizes, OutSizePointers, NumOutStreams); 77baa3858d3f5d128a5c8466b700098109edcad5f2repo sync} 78baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 79baa3858d3f5d128a5c8466b700098109edcad5f2repo sync////////////////////////////////////// 80baa3858d3f5d128a5c8466b700098109edcad5f2repo sync// CCoderMixer2MT 81baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 82baa3858d3f5d128a5c8466b700098109edcad5f2repo syncHRESULT CCoderMixer2MT::SetBindInfo(const CBindInfo &bindInfo) 83baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{ 84baa3858d3f5d128a5c8466b700098109edcad5f2repo sync _bindInfo = bindInfo; 85baa3858d3f5d128a5c8466b700098109edcad5f2repo sync _streamBinders.Clear(); 86baa3858d3f5d128a5c8466b700098109edcad5f2repo sync for (int i = 0; i < _bindInfo.BindPairs.Size(); i++) 87baa3858d3f5d128a5c8466b700098109edcad5f2repo sync { 88baa3858d3f5d128a5c8466b700098109edcad5f2repo sync _streamBinders.Add(CStreamBinder()); 89baa3858d3f5d128a5c8466b700098109edcad5f2repo sync RINOK(_streamBinders.Back().CreateEvents()); 90baa3858d3f5d128a5c8466b700098109edcad5f2repo sync } 91baa3858d3f5d128a5c8466b700098109edcad5f2repo sync return S_OK; 92baa3858d3f5d128a5c8466b700098109edcad5f2repo sync} 93baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 94baa3858d3f5d128a5c8466b700098109edcad5f2repo syncvoid CCoderMixer2MT::AddCoderCommon() 95baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{ 96baa3858d3f5d128a5c8466b700098109edcad5f2repo sync const CCoderStreamsInfo &c = _bindInfo.Coders[_coders.Size()]; 97baa3858d3f5d128a5c8466b700098109edcad5f2repo sync CCoder2 threadCoderInfo(c.NumInStreams, c.NumOutStreams); 98baa3858d3f5d128a5c8466b700098109edcad5f2repo sync _coders.Add(threadCoderInfo); 99baa3858d3f5d128a5c8466b700098109edcad5f2repo sync} 100baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 101baa3858d3f5d128a5c8466b700098109edcad5f2repo syncvoid CCoderMixer2MT::AddCoder(ICompressCoder *coder) 102baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{ 103baa3858d3f5d128a5c8466b700098109edcad5f2repo sync AddCoderCommon(); 104baa3858d3f5d128a5c8466b700098109edcad5f2repo sync _coders.Back().Coder = coder; 105baa3858d3f5d128a5c8466b700098109edcad5f2repo sync} 106baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 107baa3858d3f5d128a5c8466b700098109edcad5f2repo syncvoid CCoderMixer2MT::AddCoder2(ICompressCoder2 *coder) 108baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{ 109baa3858d3f5d128a5c8466b700098109edcad5f2repo sync AddCoderCommon(); 110baa3858d3f5d128a5c8466b700098109edcad5f2repo sync _coders.Back().Coder2 = coder; 111baa3858d3f5d128a5c8466b700098109edcad5f2repo sync} 112baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 113baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 114baa3858d3f5d128a5c8466b700098109edcad5f2repo syncvoid CCoderMixer2MT::ReInit() 115baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{ 116baa3858d3f5d128a5c8466b700098109edcad5f2repo sync for (int i = 0; i < _streamBinders.Size(); i++) 117baa3858d3f5d128a5c8466b700098109edcad5f2repo sync _streamBinders[i].ReInit(); 118baa3858d3f5d128a5c8466b700098109edcad5f2repo sync} 119baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 120baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 121baa3858d3f5d128a5c8466b700098109edcad5f2repo syncHRESULT CCoderMixer2MT::Init(ISequentialInStream **inStreams, ISequentialOutStream **outStreams) 122baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{ 123baa3858d3f5d128a5c8466b700098109edcad5f2repo sync /* 124baa3858d3f5d128a5c8466b700098109edcad5f2repo sync if (_coders.Size() != _bindInfo.Coders.Size()) 125baa3858d3f5d128a5c8466b700098109edcad5f2repo sync throw 0; 126baa3858d3f5d128a5c8466b700098109edcad5f2repo sync */ 127baa3858d3f5d128a5c8466b700098109edcad5f2repo sync int i; 128baa3858d3f5d128a5c8466b700098109edcad5f2repo sync for (i = 0; i < _coders.Size(); i++) 129baa3858d3f5d128a5c8466b700098109edcad5f2repo sync { 130baa3858d3f5d128a5c8466b700098109edcad5f2repo sync CCoder2 &coderInfo = _coders[i]; 131baa3858d3f5d128a5c8466b700098109edcad5f2repo sync const CCoderStreamsInfo &coderStreamsInfo = _bindInfo.Coders[i]; 132baa3858d3f5d128a5c8466b700098109edcad5f2repo sync coderInfo.InStreams.Clear(); 133baa3858d3f5d128a5c8466b700098109edcad5f2repo sync UInt32 j; 134baa3858d3f5d128a5c8466b700098109edcad5f2repo sync for (j = 0; j < coderStreamsInfo.NumInStreams; j++) 135baa3858d3f5d128a5c8466b700098109edcad5f2repo sync coderInfo.InStreams.Add(NULL); 136baa3858d3f5d128a5c8466b700098109edcad5f2repo sync coderInfo.OutStreams.Clear(); 137baa3858d3f5d128a5c8466b700098109edcad5f2repo sync for (j = 0; j < coderStreamsInfo.NumOutStreams; j++) 138baa3858d3f5d128a5c8466b700098109edcad5f2repo sync coderInfo.OutStreams.Add(NULL); 139baa3858d3f5d128a5c8466b700098109edcad5f2repo sync } 140baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 141baa3858d3f5d128a5c8466b700098109edcad5f2repo sync for (i = 0; i < _bindInfo.BindPairs.Size(); i++) 142baa3858d3f5d128a5c8466b700098109edcad5f2repo sync { 143baa3858d3f5d128a5c8466b700098109edcad5f2repo sync const CBindPair &bindPair = _bindInfo.BindPairs[i]; 144baa3858d3f5d128a5c8466b700098109edcad5f2repo sync UInt32 inCoderIndex, inCoderStreamIndex; 145baa3858d3f5d128a5c8466b700098109edcad5f2repo sync UInt32 outCoderIndex, outCoderStreamIndex; 146baa3858d3f5d128a5c8466b700098109edcad5f2repo sync _bindInfo.FindInStream(bindPair.InIndex, inCoderIndex, inCoderStreamIndex); 147baa3858d3f5d128a5c8466b700098109edcad5f2repo sync _bindInfo.FindOutStream(bindPair.OutIndex, outCoderIndex, outCoderStreamIndex); 148baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 149baa3858d3f5d128a5c8466b700098109edcad5f2repo sync _streamBinders[i].CreateStreams( 150baa3858d3f5d128a5c8466b700098109edcad5f2repo sync &_coders[inCoderIndex].InStreams[inCoderStreamIndex], 151baa3858d3f5d128a5c8466b700098109edcad5f2repo sync &_coders[outCoderIndex].OutStreams[outCoderStreamIndex]); 152baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 153baa3858d3f5d128a5c8466b700098109edcad5f2repo sync CMyComPtr<ICompressSetBufSize> inSetSize, outSetSize; 154baa3858d3f5d128a5c8466b700098109edcad5f2repo sync _coders[inCoderIndex].QueryInterface(IID_ICompressSetBufSize, (void **)&inSetSize); 155baa3858d3f5d128a5c8466b700098109edcad5f2repo sync _coders[outCoderIndex].QueryInterface(IID_ICompressSetBufSize, (void **)&outSetSize); 156baa3858d3f5d128a5c8466b700098109edcad5f2repo sync if (inSetSize && outSetSize) 157baa3858d3f5d128a5c8466b700098109edcad5f2repo sync { 158baa3858d3f5d128a5c8466b700098109edcad5f2repo sync const UInt32 kBufSize = 1 << 19; 159baa3858d3f5d128a5c8466b700098109edcad5f2repo sync inSetSize->SetInBufSize(inCoderStreamIndex, kBufSize); 160baa3858d3f5d128a5c8466b700098109edcad5f2repo sync outSetSize->SetOutBufSize(outCoderStreamIndex, kBufSize); 161baa3858d3f5d128a5c8466b700098109edcad5f2repo sync } 162baa3858d3f5d128a5c8466b700098109edcad5f2repo sync } 163baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 164baa3858d3f5d128a5c8466b700098109edcad5f2repo sync for (i = 0; i < _bindInfo.InStreams.Size(); i++) 165baa3858d3f5d128a5c8466b700098109edcad5f2repo sync { 166baa3858d3f5d128a5c8466b700098109edcad5f2repo sync UInt32 inCoderIndex, inCoderStreamIndex; 167baa3858d3f5d128a5c8466b700098109edcad5f2repo sync _bindInfo.FindInStream(_bindInfo.InStreams[i], inCoderIndex, inCoderStreamIndex); 168baa3858d3f5d128a5c8466b700098109edcad5f2repo sync _coders[inCoderIndex].InStreams[inCoderStreamIndex] = inStreams[i]; 169baa3858d3f5d128a5c8466b700098109edcad5f2repo sync } 170baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 171baa3858d3f5d128a5c8466b700098109edcad5f2repo sync for (i = 0; i < _bindInfo.OutStreams.Size(); i++) 172baa3858d3f5d128a5c8466b700098109edcad5f2repo sync { 173baa3858d3f5d128a5c8466b700098109edcad5f2repo sync UInt32 outCoderIndex, outCoderStreamIndex; 174baa3858d3f5d128a5c8466b700098109edcad5f2repo sync _bindInfo.FindOutStream(_bindInfo.OutStreams[i], outCoderIndex, outCoderStreamIndex); 175baa3858d3f5d128a5c8466b700098109edcad5f2repo sync _coders[outCoderIndex].OutStreams[outCoderStreamIndex] = outStreams[i]; 176baa3858d3f5d128a5c8466b700098109edcad5f2repo sync } 177baa3858d3f5d128a5c8466b700098109edcad5f2repo sync return S_OK; 178baa3858d3f5d128a5c8466b700098109edcad5f2repo sync} 179baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 180baa3858d3f5d128a5c8466b700098109edcad5f2repo syncHRESULT CCoderMixer2MT::ReturnIfError(HRESULT code) 181baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{ 182baa3858d3f5d128a5c8466b700098109edcad5f2repo sync for (int i = 0; i < _coders.Size(); i++) 183baa3858d3f5d128a5c8466b700098109edcad5f2repo sync if (_coders[i].Result == code) 184baa3858d3f5d128a5c8466b700098109edcad5f2repo sync return code; 185baa3858d3f5d128a5c8466b700098109edcad5f2repo sync return S_OK; 186baa3858d3f5d128a5c8466b700098109edcad5f2repo sync} 187baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 188baa3858d3f5d128a5c8466b700098109edcad5f2repo syncSTDMETHODIMP CCoderMixer2MT::Code(ISequentialInStream **inStreams, 189baa3858d3f5d128a5c8466b700098109edcad5f2repo sync const UInt64 ** /* inSizes */, 190baa3858d3f5d128a5c8466b700098109edcad5f2repo sync UInt32 numInStreams, 191baa3858d3f5d128a5c8466b700098109edcad5f2repo sync ISequentialOutStream **outStreams, 192baa3858d3f5d128a5c8466b700098109edcad5f2repo sync const UInt64 ** /* outSizes */, 193baa3858d3f5d128a5c8466b700098109edcad5f2repo sync UInt32 numOutStreams, 194baa3858d3f5d128a5c8466b700098109edcad5f2repo sync ICompressProgressInfo *progress) 195baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{ 196baa3858d3f5d128a5c8466b700098109edcad5f2repo sync if (numInStreams != (UInt32)_bindInfo.InStreams.Size() || 197baa3858d3f5d128a5c8466b700098109edcad5f2repo sync numOutStreams != (UInt32)_bindInfo.OutStreams.Size()) 198baa3858d3f5d128a5c8466b700098109edcad5f2repo sync return E_INVALIDARG; 199baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 200baa3858d3f5d128a5c8466b700098109edcad5f2repo sync Init(inStreams, outStreams); 201baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 202baa3858d3f5d128a5c8466b700098109edcad5f2repo sync int i; 203baa3858d3f5d128a5c8466b700098109edcad5f2repo sync for (i = 0; i < _coders.Size(); i++) 204baa3858d3f5d128a5c8466b700098109edcad5f2repo sync if (i != _progressCoderIndex) 205baa3858d3f5d128a5c8466b700098109edcad5f2repo sync { 206baa3858d3f5d128a5c8466b700098109edcad5f2repo sync RINOK(_coders[i].Create()); 207baa3858d3f5d128a5c8466b700098109edcad5f2repo sync } 208baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 209baa3858d3f5d128a5c8466b700098109edcad5f2repo sync for (i = 0; i < _coders.Size(); i++) 210baa3858d3f5d128a5c8466b700098109edcad5f2repo sync if (i != _progressCoderIndex) 211baa3858d3f5d128a5c8466b700098109edcad5f2repo sync _coders[i].Start(); 212baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 213baa3858d3f5d128a5c8466b700098109edcad5f2repo sync _coders[_progressCoderIndex].Code(progress); 214baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 215baa3858d3f5d128a5c8466b700098109edcad5f2repo sync for (i = 0; i < _coders.Size(); i++) 216baa3858d3f5d128a5c8466b700098109edcad5f2repo sync if (i != _progressCoderIndex) 217baa3858d3f5d128a5c8466b700098109edcad5f2repo sync _coders[i].WaitFinish(); 218baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 219baa3858d3f5d128a5c8466b700098109edcad5f2repo sync RINOK(ReturnIfError(E_ABORT)); 220baa3858d3f5d128a5c8466b700098109edcad5f2repo sync RINOK(ReturnIfError(E_OUTOFMEMORY)); 221baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 222baa3858d3f5d128a5c8466b700098109edcad5f2repo sync for (i = 0; i < _coders.Size(); i++) 223baa3858d3f5d128a5c8466b700098109edcad5f2repo sync { 224baa3858d3f5d128a5c8466b700098109edcad5f2repo sync HRESULT result = _coders[i].Result; 225baa3858d3f5d128a5c8466b700098109edcad5f2repo sync if (result != S_OK && result != E_FAIL && result != S_FALSE) 226baa3858d3f5d128a5c8466b700098109edcad5f2repo sync return result; 227baa3858d3f5d128a5c8466b700098109edcad5f2repo sync } 228baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 229baa3858d3f5d128a5c8466b700098109edcad5f2repo sync RINOK(ReturnIfError(S_FALSE)); 230baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 231baa3858d3f5d128a5c8466b700098109edcad5f2repo sync for (i = 0; i < _coders.Size(); i++) 232baa3858d3f5d128a5c8466b700098109edcad5f2repo sync { 233baa3858d3f5d128a5c8466b700098109edcad5f2repo sync HRESULT result = _coders[i].Result; 234baa3858d3f5d128a5c8466b700098109edcad5f2repo sync if (result != S_OK) 235baa3858d3f5d128a5c8466b700098109edcad5f2repo sync return result; 236baa3858d3f5d128a5c8466b700098109edcad5f2repo sync } 237baa3858d3f5d128a5c8466b700098109edcad5f2repo sync return S_OK; 238baa3858d3f5d128a5c8466b700098109edcad5f2repo sync} 239baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 240baa3858d3f5d128a5c8466b700098109edcad5f2repo sync} 241