Пишу фильтр у которого есть несколько входных и один выходной пин.(назовем его миксер)
Идея этого всего следующая: на первый пин едет видеопоток а на второй идут субтитры(необязательно только текст).
Фильтр спилтер тоже собственного написания.
граф имеет такой вид
видео поток — декодер потока --
источник — фильтр сплиттер-| |мой фильтр миксер---Видеорендер
потко субтитров-------------------
В фильтре делаю следующее:
Приходит семпл с данными субтитров TTextInputPin.Receive(pSample: IMediaSample) :
1) копирую данные во времнный буффер
2) ожидаю когда придет семпл с видеоданными
res:=WaitForSingleObject(FFilter.weitevent,INFINITE);
ResetEvent(FFilter.weitevent);
3) проверяю флаг FFlushing в зависимости от этого возврящаю результат либо S_OK или S_FALSE
1) Проверяю флаги FFlushig и isStopped
2) накладываю на пришедшый семпл субтитры
3) передаю семпл нижележащему пину OutPin.Deliver(IMediaSample);
4) SetEvent(FFilter.weitevent) разрешаю обновить данные на пине с субтитрами
В методе BeginFlush:
FFlushing = true;
SetEvent(FFilter.weitevent) для того что бы разблокировать Receive с субтитрами
Данная схема работает но не стабильно, при попытке перемещения указателя времени(перемотать) бывают deadlock`и..
в методе OutPut.DeliverData(im) , либо граф просто молча закрывается
сталкивался ли кто нибудь с аналогичными проблеммами помогите ..у же неделю парюсь никак не могу понять в чем дело .