Когда вы можете вызвать IMFSourceReader :: SetCurrentMediaType? - PullRequest
1 голос
/ 05 июня 2019

Если у меня есть активный асинхронный IMFSourceReader, когда безопасно вызывать SetCurrentMediaType () для него?

Первоначально я пытался IMFSourceReaderCallback :: OnReadSample () и IMFSourceReaderCallback :: OnFlush () с доступом к объекту, охраняемымкритическая секция, но я получаю ошибки, связанные с ожидающими выборками или ошибкой порта завершения io.

На самом деле не ясно, что безопасно вызывать в функциях IMFSourceReaderCallback, которые вызываются из рабочих потоков медиа-основания.

Нужно ли полностью очищать / сливать конвейер из-за пределов потоков функции обратного вызова, затем передавать сигнал из потока обратного вызова OnFlush () в потоки вне стека вызовов обратного вызова (убедитесь, что дальнейшие примеры чтения не поставлены в очередь), чтотогда безопасно изменить формат мультимедиа с помощью SetCurrentMediaType ()?

Нужно ли идти еще дальше и уничтожить SourceReader, а затем начать заново, чтобы воссоздать и затем установить формат мультимедиа?

1 Ответ

0 голосов
/ 07 июня 2019

Кажется, что как только вы установили формат мультимедиа, его небезопасно менять после того, как программа чтения исходного кода станет активной.Поэтому вы должны уничтожить программу чтения исходного кода и воссоздать ее.

Но тогда надежное уничтожение асинхронного устройства чтения исходного кода без зависания на Win7 - это другой вопрос ...

...