![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
При соединение фильтра, у которого много выходов с фильтром, у которого один вход прога ругается. Я в панике).
ругается здесь: красным выделил сообщение, которое вылетает Код:
вот процедура:
function GetPin(pFilter: IBaseFilter; pinDir: PIN_DIRECTION): IPin;
var
bFound: Boolean;
pEnum : IEnumPins;
pPin : IPin;
PinDirThis: PIN_DIRECTION;
begin
Result := nil;
bFound := false;
pFilter.EnumPins(pEnum);
while (pEnum.Next(1, pPin, nil) = S_OK) do
begin
pPin.QueryDirection(PinDirThis);
if (pinDir = PinDirThis) then
begin
bFound := true;
break;
end;
end;
pEnum.Reset;
if bFound then Result := pPin;
end;Видимо надо здесь как то узнавать какой пин брать... плииз хеелп, а то бадааа буум)) Последний раз редактировалось Admin, 05.12.2011 в 21:04. |
|
#2
|
|||
|
|||
|
Нет красного цвета. Где вылетает?
|
|
#3
|
|||
|
|||
|
спасибо администратору, который удалил весь второй листинг))
Код:
// берем пины
pAVIspliterOutV := GetPin(pAVIspliter, PINDIR_OUTPUT);
if not Assigned(pAVIspliterOutV) then begin
ShowMessage('Не удается получить pAVIspliterOutV');
exit;
end;
pVideodecoderIn := GetPin(pVideodecoder, PINDIR_INPUT);
if not Assigned(pVideodecoderIn) then begin
ShowMessage('Не удается получить pVideodecoderIn');
exit;
end;
pAudiodecoderIn := GetPin(pAudiodecoder, PINDIR_INPUT);
if not Assigned(pAudiodecoderIn) then begin
ShowMessage('Не удается получить pAudiodecoderIn');
exit;
end;
// соединяем
hr := pGraphBuilder.Connect(pAVIspliterOutV, pVideodecoderIn);
if FAILED(hr) then begin
ShowMessage('Не удается соединить фильтры pAVIspliterOutV и pVideodecoderIn');
exit;
end;
hr := pGraphBuilder.Connect(pAVIspliterOutV, pAudiodecoderIn);
if FAILED(hr) then begin
ShowMessage('Не удается соединить фильтры pAVIspliterOutV и pAudiodecoderIn');
exit;
end; |
|
#4
|
|||
|
|||
|
У вас два последних Connect не могут сработать одновременно, т.к. вы дважды задействовали пин pAVIspliterOutV. Попробуйте поменять местами, может, он соединится с pAudiodecoderIn. При нумерации и поиске пинов вы проверяете только направление (in/out), а надо ещё и тип среды (видео-, аудио-поток).
|
|
#5
|
|||
|
|||
|
А каким образом проверить видео поток это или нет?)
|
|
#6
|
|||
|
|||
|
Когда вы находите IPin, то у него есть метод EnumMediaTypes. Это интерфейс IEnumMediaTypes, который через метод Next перечислит вам все возможные среды: массив структур AM_MEDIA_TYPE. Вот в этой структуре член majortype (GUID) будет равен или MEDIATYPE_Audio, или MEDIATYPE_Video, хотя есть и другие варианты. Извините, читаю справку (а там для Си), так что без примеров на Delphi.
|
|
#7
|
|||
|
|||
|
тогда получается мне находить этот majortype через свойства пина с помощью pPin.QueryPinInfo()? типо так?
|
|
#8
|
|||
|
|||
|
и ведь получилось таки)))) только не через тип майора)) а через название пина, оно тоже уникальное))) пришлось по подставлять, зато работает)) огромное спасибо.
|
|
#9
|
|||
|
|||
|
Цитата:
pPin.EnumMediaTypes() |
|
#10
|
|||
|
|||
|
Цитата:
|
|
#11
|
|||
|
|||
|
ну я программу пишу, можно сказать, из графа) поэтому все должно быть чики-чики))
|
|
#12
|
|||
|
|||
|
появился еще один вопрос, мне для того, что бы сохранить в mov формате файл, надо видео и аудио поток соеденить при помощи фильтра MOV muxer. Но изначально у него только один вход, в граф едите) при соединение одного пина, сразу создается второй, а в делфи - нет. Как мне принудительно сделать еще один пин?
|