Я сделал кодировщик с использованием WIC. то я попытался использовать поток для наиболее трудоемкой части. которыйпотоки возвращают ошибки (иногда) в WIC
/*Encodes a bitmap source*/
hr = piBitmapFrame->WriteSource(
piBitmapSrc, /*bitmap source*/
rc /*area which need to be wrote*/
);
piBitmapSrc → WICBitmap
гс → WICRect, площадь прямоугольника, чтобы сделать работу
Это как я tryied.
HRESULT writeSrc(
IWICBitmapFrameEncode *piBitmapFrame,
IWICBitmap *piBitmapSrc,
WICRect *rc
)
{
/*Encodes a bitmap source*/
hr = piBitmapFrame->WriteSource(
piBitmapSrc, /*bitmap source*/
rc /*area which need to be wrote*/
);
return hr;
}
, а затем я его называю, как этот
const int numberOfThreads = 4;
std::thread t[numberOfThreads];
int ht = (lHeight/numberOfThreads);
WICRect rc;
rc.X = 0;
rc.Height = ht;
rc.Width = lWidth;
rc.Y = 0;
t[0] = std::thread(writeSrc, piBitmapFrame, piBitmapSrc, &rc);
rc.Y += ht;
t[1] = std::thread(writeSrc, piBitmapFrame, piBitmapSrc, &rc);
rc.Y += ht;
t[2] = std::thread(writeSrc, piBitmapFrame, piBitmapSrc, &rc);
rc.Y += ht;
rc.Height = (lHeight - (3*ht));
t[3] = std::thread(writeSrc, piBitmapFrame, piBitmapSrc, &rc);
t[0].join();
t[1].join();
t[2].join();
t[3].join();
проблемы, piBitmapFrame->WriteSource()
называют в 4 раза, но только 1 возвращает S_OK. другие 3 возвращает следующие коды ошибок
WINCODEC_ERR_STREAMWRITE
или
WINCODEC_ERR_CODECTOOMANYSCANLINES
почему это. и как я мог правильно использовать потоки для этого?