Я работаю с простым фильтром directshow, который получен из CBaseRenderer
в базовых классах directshow, и я получаю тупики в этом классе.Прямая версия CBaseRenderer безопасна?
У меня был хороший Google, и нашел кого-то, кто имел exact same problem (тупиком между InterfaceLock
в СТОП и RendererLock
в Receive
), но он не получил никаких ответов, что предполагает его редкое обстоятельство что он и я получили наш код (а не ошибку в базовом классе MS).
Итак, кто-нибудь еще видел эту проблему? Должен ли я получить свой фильтр (который не делает столько TBH) от CBaseRenderer
или перейти прямо к классам CBaseFilter/CBaseInputPin
? Если я должен переопределить WaitForReceiveToComplete
, что мне там положить?
Я вернусь к основам и посмотрю на фильтр образцов дампа, но мне все равно будут интересны ответы людей, у которых есть опыт использования CBaseRenderer
.
Там может быть тупик, но если вы создадите свой собственный рендерер - у вас есть весь исходный код для его устранения (например, не удерживая внешнюю блокировку или не разблокируя ее при ожидании сообщений и т. Д.). –
@RomanR. Я не занимаю никаких замков CBaseRenderer, у меня есть свои собственные (как указано в документах), но я пытаюсь понять, что я должен сделать, чтобы заставить базовый класс работать ... возможно, мне следует начать блокировки базовых классов. Я должен попробовать. – gbjbaanb
Я понимаю, что вы зашли в тупик вокруг 'm_InterfaceLock'. У меня никогда не было этого, поэтому никакого решения не было у меня на голове, но, глядя на код, он выглядит вполне возможным. Я бы сказал, что проблема заключается в том, что 'for' просматривает' WaitForReceiveToComplete', который должен запускаться с разблокированной блокировкой - это то, что я попытаюсь добавить в код BaseClasses. –