У меня есть задача обернуть стороннюю библиотеку видеодекодера в фильтр прямого показа преобразования.
Я считаю, что это будет проблемой, так как сторонняя библиотека использует асинхронный обратный вызов, когда полный кадр готов, т.е.
// on main thread
lib->RegisterCallback(callback function)
lib->write(raw data bytes)
void callback(frame)
{
// here is your frame (on a worker thread)
}
Когда я смотрю на чисто виртуальный CTransformFilter.TransformФункция ожидает преобразование быть синхронным.Теперь я могу настроить это так, чтобы оно блокировало событие, которое установлено в обратном вызове, но что произойдет, если данных, поступающих в функцию Transform, недостаточно для генерации полного нового кадра?Я бы заблокировал функцию.
Мой единственный вариант - вернуться к разработчику библиотеки и запросить синхронный декодер?
Я только что посмотрел на функцию приема CTransformFilter.Это то, что вызывает (переопределенную) функцию Transform.Затем он вызывает m_pOutput-> m_pInputPin-> Receive (pOutSample), чтобы передать образец дальше.Могу ли я вызвать эту функцию получения из рабочего потока в обратном вызове или мне нужно сохранить все в одном потоке?
Спасибо