Имя:
Пароль:
-- ИЛИ --
Войти, используя:

Форум   Общая тематика и компьютеры   Программирование

Картинка в картинке через DS

 
Пост #51919 от 25 февраля 2008, 22:19 

vdm

Vlafy :
То есть, когда в visual c++ пишу тип переменной и система его опознаёт, наведя на неё мышкой напишет в alt'e __interface так как IVMRFilterConfig9 - тип интерфейса и значит система вызовит этот интерфейс без проблем. А когда я обЪявляю IVMRFilterConfig9 pIVMRFilterConfig, то при компиляции пишет, что не знает такого типа как IVMRFilterConfig9, но когда пишу IVMRFilterConfig, тогда без проблем объявляет. А суть в том, что я хочу повернуть видео изображение на 90 градусов. :-)
Отправить личное сообщениеПрофиль пользователяКонфигурация пользователяЛитва
Постов: 26
Нарушений: Нет
Пост #51922 от 26 февраля 2008, 00:11 

Vlafy

vdm : когда я обЪявляю IVMRFilterConfig9 pIVMRFilterConfig, то при компиляции пишет, что не знает такого типа как IVMRFilterConfig9
Смотрим в SDK, видим что:
SDK : Include D3d9.h, Vmr9.h.

Про поворот не могу сказать, не пробовал такого делать. Возможно, что в общем случае без копирования данных (с помощью отдельного фильтра, например) не обойтись.
Отправить личное сообщениеПрофиль пользователяКонфигурация пользователяБлог пользователяWeb-сайт пользователяРоссия
Сосновый Бор
Постов: 6083
Нарушений: Нет
Пост #57051 от 20 октября 2008, 19:10 

andrju

Вывожу видео в окне. Хочу сделать окно полупрозрачным, чтобы сквозь видео просвечивали другие окна.
Зделать окно прозрачным я могу, но видео не умею.
Может ли кто помочь советом или знает?
Отправить личное сообщениеПрофиль пользователяГермания
Постов: 6
Нарушений: Нет
Пост #57052 от 20 октября 2008, 19:17 

Vlafy

andrju,
Такое, скорее всего, получится только с VMR9. Делаете окно прозрачным, тогда и видео должно тоже стать прозрачным (но я не проверял).
Отправить личное сообщениеПрофиль пользователяКонфигурация пользователяБлог пользователяWeb-сайт пользователяРоссия
Сосновый Бор
Постов: 6083
Нарушений: Нет
Пост #57062 от 21 октября 2008, 11:24 

andrju

Vlafy,
Я пробывал с VMR7 и просто DirectDraw не получается.
Окошко прозрачное, а видео нет, всё тормозит и остаются следы от видео после перемищения окна.
Я думаю и с VMR9 будет тоже самое.
Отправить личное сообщениеПрофиль пользователяГермания
Постов: 6
Нарушений: Нет
Пост #57074 от 21 октября 2008, 16:36 

Vlafy

andrju : Я думаю и с VMR9 будет тоже самое.
А я думаю, что не то же самое. Вы знаете в чём разница у них?
Отправить личное сообщениеПрофиль пользователяКонфигурация пользователяБлог пользователяWeb-сайт пользователяРоссия
Сосновый Бор
Постов: 6083
Нарушений: Нет
Пост #57076 от 21 октября 2008, 17:07 

andrju

Vlafy,
Я думаю, что они могут только смешивать видео потоки, но немогут смешивать видео с десктопом.
Отправить личное сообщениеПрофиль пользователяГермания
Постов: 6
Нарушений: Нет
Пост #57077 от 21 октября 2008, 17:29 

Vlafy

andrju,
Тогда почитайте SDK и попробуйте, тем более, что за то время, что мы тут общаемся, вы бы уже успели всё попробовать.
Отправить личное сообщениеПрофиль пользователяКонфигурация пользователяБлог пользователяWeb-сайт пользователяРоссия
Сосновый Бор
Постов: 6083
Нарушений: Нет
Пост #57079 от 22 октября 2008, 13:39 

andrju

Vlafy
В том то и дело, что это не так то просто. У меня отсутствуют заголовочные файлы для C++ Builder 6.
Их надо ещё поискать. Если бы знал, что будет работать... Поэтому я и спрашиваю здесь.

добавлено спустя 28 минут

Vlafy

Короче я попробывал VMR9 и результат не изменился.

Мой код:
  ICaptureGraphBuilder2 *pBuild = NULL;
  IGraphBuilder* pGraph;
  IBaseFilter*   pRenderer;
  IBaseFilter*   pSource;
  IVMRFilterConfig9* pConfig;
  IVMRMixerControl9* pMixControl;
  IMediaControl* pMediaControl;
  IVideoWindow* pVideoWindow;

  HRESULT HResult = CoInitialize(NULL);
  if (FAILED(HResult)) return;

  HResult = CoCreateInstance(CLSID_CaptureGraphBuilder2, NULL,
                CLSCTX_INPROC_SERVER, IID_ICaptureGraphBuilder2, (void**)&pBuild);
  if (FAILED(HResult)) return;

  HResult = CoCreateInstance(CLSID_FilterGraph,
                              NULL,
                              CLSCTX_INPROC,
                              IID_IGraphBuilder,
                              (void**)&pGraph);
  if (FAILED(HResult)) return;

  pBuild->SetFiltergraph(pGraph);

  HResult = CoCreateInstance(CLSID_VideoMixingRenderer9,
                              NULL,
                              CLSCTX_INPROC,
                              IID_IBaseFilter,
                              (void**)&pRenderer);
  if (FAILED(HResult)) return;

  HResult = pGraph->AddFilter(pRenderer, L"VideoRenderer");
  if (FAILED(HResult)) return;

  HResult = pRenderer->QueryInterface(IID_IVMRFilterConfig9, (void**)&pConfig);
  if (FAILED(HResult)) return;

  HResult = pConfig->SetNumberOfStreams(1);
  if (FAILED(HResult)) return;

  HResult = pRenderer->QueryInterface(IID_IVMRMixerControl9, (void**)&pMixControl);
  if (FAILED(HResult)) return;

  HResult = pGraph->AddSourceFilter(L"C:\\Downloads\\chech.avi", L"SourceFile", &pSource);
  if (FAILED(HResult)) return;

  HResult = pBuild->RenderStream(0, 0, pSource, 0, pRenderer);
  if (FAILED(HResult)) return;
  HResult = pBuild->RenderStream(0, &MEDIATYPE_Audio, pSource, 0, NULL);
  if (FAILED(HResult)) return;

  HResult = pRenderer->QueryInterface(IID_IVideoWindow,(void**)&pVideoWindow);
  if (FAILED(HResult)) return;
  pVideoWindow->put_Owner((OAHWND)Panel1->Handle);
  pVideoWindow->put_WindowStyle(WS_CHILD | WS_CLIPSIBLINGS);
  pVideoWindow->SetWindowPosition(0,0,Panel1->ClientWidth,Panel1->ClientHeight);

  HResult = pMixControl->SetAlpha(0,0.1);
  HResult = pMixControl->SetBackgroundClr(D3DCOLOR_ARGB(128,255,255,255));

  HResult = pGraph->QueryInterface(IID_IMediaControl, (void**)&pMediaControl);
  if (FAILED(HResult)) return;

  HResult = pMediaControl->Run();
  if (FAILED(HResult)) return;

Прозрачность формы делается отдельно.

добавлено спустя 19 ч. 31 минут

Вижу пока единственный выход, это копировать видео картинку на прозрачное окно при помощи GDI.
Отправить личное сообщениеПрофиль пользователяГермания
Постов: 6
Нарушений: Нет
Пост #57096 от 22 октября 2008, 16:22 

Vlafy

andrju : Вижу пока единственный выход, это копировать видео картинку на прозрачное окно при помощи GDI.
Так, конечно, можно, но как-то неинтересно. Хотя в помощью рендереров может быть вообще не получится.
Отправить личное сообщениеПрофиль пользователяКонфигурация пользователяБлог пользователяWeb-сайт пользователяРоссия
Сосновый Бор
Постов: 6083
Нарушений: Нет
Пост #57097 от 22 октября 2008, 16:30 

andrju

Vlafy : Так, конечно, можно, но как-то неинтересно. Хотя в помощью рендереров может быть вообще не получится.
Верно, не интересно, но другого способа я не нашёл.
А так всё работает, и не сильно нагружает процесор, но некоторые кадры выпадают. Думаю, что StretchDraw не достаточно быстро работает, да и не очень здорово скалирует.
Спасибо за участие в дискуссии.
Отправить личное сообщениеПрофиль пользователяГермания
Постов: 6
Нарушений: Нет
Пост #59422 от 20 января 2009, 19:27 

and

Спасибо всем участникам дискусии, особенно andrju, за его пример кода
Отправить личное сообщениеПрофиль пользователя
Постов: 3
Нарушений: Нет
Пост #59827 от 5 февраля 2009, 18:40 

and

Накладываю bitmap на видеопоток с помощью VMR9, постоянная картинка накладывается нормально.

Для смены ее пытаюсь использовать

HRESULT UpdateAlphaBitmapParameters(const VMR9AlphaBitmap* pBmpParms);

HRESULT SetAlphaBitmap(const VMR9AlphaBitmap* pBmpParms);

но больше двух раз картинка не меняется.

Подскажите, пожалуйста, как правильно манипулировать вызовами
UpdateAlphaBitmapParameters(const VMR9AlphaBitmap* pBmpParms);
SetAlphaBitmap(const VMR9AlphaBitmap* pBmpParms);
Отправить личное сообщениеПрофиль пользователя
Постов: 3
Нарушений: Нет
Если Вы зарегистрированы, то для отправки сообщений, пожалуйста, авторизуйтесь.
-- ИЛИ --
Войдите, используя: Facebook Twitter Yandex Вконтакте Mail.ru ...
Страница создана за 0.045 секунды
Copyright © 1999-2012 PcTuner.Ru · Design by Alex Dovby