Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.10.2016, 16:50   #1
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию 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 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
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 09:26