Несколько входных пинов
От: Andriano Россия  
Дата: 05.06.07 11:40
Оценка:
Приветствую коллеги!

Пишу фильтр у которого есть несколько входных и один выходной пин.(назовем его миксер)
Идея этого всего следующая: на первый пин едет видеопоток а на второй идут субтитры(необязательно только текст).

Фильтр спилтер тоже собственного написания.
граф имеет такой вид

видео поток — декодер потока --
источник — фильтр сплиттер-| |мой фильтр миксер---Видеорендер
потко субтитров-------------------

В фильтре делаю следующее:

Приходит семпл с данными субтитров TTextInputPin.Receive(pSample: IMediaSample) :

1) копирую данные во времнный буффер
2) ожидаю когда придет семпл с видеоданными
res:=WaitForSingleObject(FFilter.weitevent,INFINITE);
ResetEvent(FFilter.weitevent);
3) проверяю флаг FFlushing в зависимости от этого возврящаю результат либо S_OK или S_FALSE


Приходят семплы видеоданных TVideoInputPin.Receive(pSample: IMediaSample)

1) Проверяю флаги FFlushig и isStopped
2) накладываю на пришедшый семпл субтитры
3) передаю семпл нижележащему пину OutPin.Deliver(IMediaSample);
4) SetEvent(FFilter.weitevent) разрешаю обновить данные на пине с субтитрами


В методе BeginFlush:
FFlushing = true;
SetEvent(FFilter.weitevent) для того что бы разблокировать Receive с субтитрами


Данная схема работает но не стабильно, при попытке перемещения указателя времени(перемотать) бывают deadlock`и..
в методе OutPut.DeliverData(im) , либо граф просто молча закрывается

сталкивался ли кто нибудь с аналогичными проблеммами помогите ..у же неделю парюсь никак не могу понять в чем дело .


Спасибо!!!
ICQ 377769318
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.