Форум программистов  
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Delphi > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 17.10.2016, 17:50   #1
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 483
Репутация: 101
По умолчанию DirectShow IMediaControl.run возвращает ошибку, но работает

Здравствуйте.
Строим граф фильтров.
Код:

  Result := CoCreateInstance(CLSID_FilterGraph, nil, CLSCTX_INPROC_SERVER ,
                           IID_IGraphBuilder, _pl.pGraphBuilder);
  Result := CoCreateInstance(CLSID_CaptureGraphBuilder2, NIL,
                          CLSCTX_INPROC_SERVER, IID_ICaptureGraphBuilder2,
                         _pl.pCaptureGraphBuilder);
  _pl.pCaptureGraphBuilder.SetFiltergraph(_pl.pGraphBuilder);

  Result := _pl.pGraphBuilder.AddSourceFilter(StringToOleStr(_pl.FileName),'source',_pl.fsource);
  Result :=   coCreateInstance(CLSID_VideoRenderer, nil,
                                   CLSCTX_INPROC_SERVER,
                                   IID_IBaseFilter, _pl.fVideoRenderer);
  _pl.pGraphBuilder.AddFilter(_pl.fVideoRenderer,'Video renderer');
  Result := CoCreateInstance(CLSID_FfdshowVideoDecoder,nil,CLSCTX_INPROC_SERVER,
                               IID_IBaseFilter,_pl.fVideoDecoder);
  _pl.pGraphBuilder.AddFilter(_pl.fVideoDecoder,'video decoder');

  Result := _pl.pCaptureGraphBuilder.RenderStream(nil,@MEDIATYPE_VIDEO,
                                   _pl.fSource,_pl.fVideoDecoder,_pl.fVideoRenderer);
  _pl.pGraphBuilder.QueryInterface(IID_IBasicVideo,_pl.pBasicVideo);
  _pl.pGraphBuilder.QueryInterface(IID_IVideoWindow,_pl.pVideoWindow);
  _pl.pGraphBuilder.QueryInterface(IID_IMediaControl,_pl.pMediaControl);
  _pl.pGraphBuilder.QueryInterface(IID_IMediaPosition,_pl.pMediaPosition);
  Result := _pl.pMediaPosition.get_Duration(_pl.MediaInfo.TrackDuration);
  if (_pl.pVideoWindow<>nil) then
  begin
    _pl.pVideoWindow.Put_Owner(_pl.Screen);
    _pl.pVideoWindow.Put_WindowStyle(WS_CHILD OR WS_CLIPSIBLINGS);
    _pl.pVideoWindow.put_MessageDrain(_pl.Screen);
    _pl.ResizeScreen;
  end;

    Result := _pl.pMediaControl.Run;

При первом вызове pMediaControl.Run возвращает S_FALSE, но граф всё-равно запускается. При последующих вызовах pMediaControl.Pause / pMediaControl.Run всегда возвращается S_OK.
Почему первый вызов неудачный, но граф при этом запускается?
BLACK_RAIN вне форума   Ответить с цитированием
Ответ



Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
VirtualAllocEx возвращает ошибку 87 (неправильный параметр) calypso Win Api 7 26.02.2013 22:51
TrackPopupMenuEx возвращает 87 ошибку (неверные входные параметры) TitoAlehandro Win Api 0 27.09.2011 11:01
Run работает, а Bild создает ошибку. Как отлаживать? ImpFromLiga Общие вопросы по Java, Java SE, Kotlin 0 24.05.2011 22:10
HttpWebResponse: вервер возвращает 500 ошибку Manonia Общие вопросы .NET 0 24.07.2010 08:07
Помогите исправить ошибку run.dll Ninel Операционные системы общие вопросы 10 10.12.2009 10:26




02:14.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

купить трафик


как улучшить посещаемость, а также решения по монетизации сайтов, видео и приложений

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru