| Предыдущая тема :: Следующая тема |
| Автор |
Сообщение |
Витяня Новенький
Зарегистрирован: 01.07.2007 Сообщения: 6
|
Добавлено: Вс Июл 01, 2007 10:15 pm Заголовок сообщения: Разбить видео поток на 2 части |
|
|
Подскажите, как разрезать видео пополам по вертикали. Конкретно проблема состоит в следующем: есть файлы в формате wmv с расширением 800*1200 или 1024*1536, к компьтеру подключено 2 монитора, в вертикальном расширении рабочего стола, необходимо одну половину файла показывать на одном мониторе, а другую на втором. Программа реализуется в Delphi или Builder6.
Заранее благодарен.
P.S. Возможно кто-то предложит вариант без разбивки видео, тоже будет полезно, лиш бы показывало на обоих мониторах |
|
| Вернуться к началу |
|
 |
WondeRu Главвред :)

Зарегистрирован: 30.10.2006 Сообщения: 188 Откуда: Самара
|
Добавлено: Пн Июл 02, 2007 8:14 am Заголовок сообщения: Re: Разбить видео поток на 2 части |
|
|
| Используй Smart Tee фильтр для разбивки потока, затем выводи на два VMR9 рендерера. В свойствах рендереров указываете положение картинки на экране. Т.е. на первом указываете отображение левой части картинки, на втором - правой. |
|
| Вернуться к началу |
|
 |
WondeRu Главвред :)

Зарегистрирован: 30.10.2006 Сообщения: 188 Откуда: Самара
|
Добавлено: Пн Июл 02, 2007 8:20 am Заголовок сообщения: |
|
|
| PS. рендереры помещать на разных формах |
|
| Вернуться к началу |
|
 |
Витяня Новенький
Зарегистрирован: 01.07.2007 Сообщения: 6
|
Добавлено: Пн Июл 02, 2007 11:20 am Заголовок сообщения: |
|
|
Спасибо огромное, разбивка получилась, как бы мне теперь выделить определённую область из каждого потока, или это просто реализовать скажем вот так:
| Код: |
pVideoWindow1.put_Owner(Form1.Handle);
pVideoWindow2.put_Owner(Form2.Handle);
....
pVideoWindow1.put_WindowStyle(WS_CHILD OR WS_CLIPSIBLINGS);
pVideoWindow1.SetWindowPosition(0,0,Form1.Width,Form1.Height*2); pVideoWindow2.put_WindowStyle(WS_CHILD OR WS_CLIPSIBLINGS);
pVideoWindow2.SetWindowPosition(0,0-Form1.Height,Form1.Width,Form1.Height*2);
|
|
|
| Вернуться к началу |
|
 |
WondeRu Главвред :)

Зарегистрирован: 30.10.2006 Сообщения: 188 Откуда: Самара
|
Добавлено: Вт Июл 03, 2007 9:40 am Заголовок сообщения: |
|
|
Не стоит велосипед изобретать. Есть интерфейс IVMRMixerControl9 у VMR9, он управляет положением видео в окне (метод IVMRMixerControl9::SetOutputRect). |
|
| Вернуться к началу |
|
 |
Витяня Новенький
Зарегистрирован: 01.07.2007 Сообщения: 6
|
Добавлено: Ср Июл 04, 2007 6:39 pm Заголовок сообщения: |
|
|
Что-то в GraphEdit всё так нормально выглядело, а как сам пытаюсь построить, так что-то ничего не получается(((
WMV формат не использует фильтр SourceFile, он сразу начинает с построения Splitter фильтра, притом неизвестно какого, перепробовал всё, что было - не работает, сам построить немогу, поэтому делаю по тупому:
| Код: |
pFilter: IBaseFilter
...........
...........
pGraphBuilder.RenderFile(StringToOleStr(OpenDialog1.FileName), '');
pGraphBuilder.FindFilterByName('Video render',pFilter);
pGraphBuilder.RemoveFilter(pFilter);
|
далее вставляю Smart Tee и 2 VMR9 фильтра, но это же нифига не правильно, как сделать это корректно?
Последний раз редактировалось: Витяня (Ср Июл 04, 2007 7:06 pm), всего редактировалось 2 раз(а) |
|
| Вернуться к началу |
|
 |
Витяня Новенький
Зарегистрирован: 01.07.2007 Сообщения: 6
|
Добавлено: Ср Июл 04, 2007 6:43 pm Заголовок сообщения: Re: Разбить видео поток на 2 части |
|
|
| WondeRu писал(а): | | Используй Smart Tee фильтр для разбивки потока, затем выводи на два VMR9 рендерера. В свойствах рендереров указываете положение картинки на экране. Т.е. на первом указываете отображение левой части картинки, на втором - правой. |
Да и я что-то не нашёл как назначить экраны для обоих VMR фильтров, я поискал на msdn2.microsoft.com, но с английским вообще ни как не дружу  |
|
| Вернуться к началу |
|
 |
WondeRu Главвред :)

Зарегистрирован: 30.10.2006 Сообщения: 188 Откуда: Самара
|
Добавлено: Ср Июл 04, 2007 7:21 pm Заголовок сообщения: Re: Разбить видео поток на 2 части |
|
|
| Витяня писал(а): |
Да и я что-то не нашёл как назначить экраны для обоих VMR фильтров, я поискал на msdn2.microsoft.com, но с английским вообще ни как не дружу  |
Если будет время, то через день-три выложу код |
|
| Вернуться к началу |
|
 |
Витяня Новенький
Зарегистрирован: 01.07.2007 Сообщения: 6
|
Добавлено: Ср Июл 04, 2007 7:53 pm Заголовок сообщения: |
|
|
Буду очень признателен |
|
| Вернуться к началу |
|
 |
WondeRu Главвред :)

Зарегистрирован: 30.10.2006 Сообщения: 188 Откуда: Самара
|
|
| Вернуться к началу |
|
 |
Витяня Новенький
Зарегистрирован: 01.07.2007 Сообщения: 6
|
Добавлено: Чт Июл 05, 2007 10:58 pm Заголовок сообщения: |
|
|
Огромнейшее спасибо!!!! Тут кстати онаружился один интересный факт, который я не догадался проверить с смаого начала , а именно, когда я рендерю файл таким образом pGraphBuilder.RenderFile и вместо стандартного рендера поставляю VMR9, то изображение в полноэкранном режиме преспокойненько отображается на обоих мониторах в вертикальном расширении рабочего стола, т.е. мы по сути и получаем одну половину фильма в одном мониторе, а другую во-втором  |
|
| Вернуться к началу |
|
 |
WondeRu Главвред :)

Зарегистрирован: 30.10.2006 Сообщения: 188 Откуда: Самара
|
Добавлено: Пт Июл 06, 2007 8:25 am Заголовок сообщения: |
|
|
| Витяня писал(а): | Тут кстати онаружился один интересный факт, который я не догадался проверить с смаого начала , а именно, когда я рендерю файл таким образом pGraphBuilder.RenderFile и вместо стандартного рендера поставляю VMR9, то изображение в полноэкранном режиме преспокойненько отображается на обоих мониторах в вертикальном расширении рабочего стола, т.е. мы по сути и получаем одну половину фильма в одном мониторе, а другую во-втором  |
Насколько я помню, у меня с этим были проблемы (возможно не все видеокарты это поддерживают): когда окно на два экрана, то на одном картинка отображается, на втором окно вывода черное. Если не ошибаюсь такое происходит с DVD. Попробуй запустить .vob файл с моим примером и твоим. если заработает, то дело в видеокарточке. |
|
| Вернуться к началу |
|
 |
DeathBaba Новенький
Зарегистрирован: 03.08.2007 Сообщения: 1
|
Добавлено: Пт Авг 03, 2007 3:53 pm Заголовок сообщения: Проблемы с DVD |
|
|
Господа, а как правильно использовать Inf Tee фильтр при воспроизведении DVD? Задача - воспроизвести DVD в двух окнах. Проблема - в двух окнах воспроизводятся только DVD без защиты (не лицензионные диски). На лицензионных при попытке воспроизведения приходит событие EC_DVD_ERROR с ошибкой DVD_ERROR_CopyProtectFail.
Последовательность действий следующая: Использую IDVDGraphBuilder::RenderDvdVideoVolume для создания графа, затем disconnect Video Output pin DVD Navigator'а от декодера, добавляю в граф Infinite Tee фильтр, и переподключаю его входы c DVD Navigator а выходы с декодером.
Замечено, что:
1) Смена декодера не помогает
2) Если добавить в граф Inf Tee до вызова IDVDGraphBuilder::RenderDvdVideoVolume, Inf Tee после вызова этого метода из графа удаляется
3) Если вручную билдить граф без IDVDGraphBuilder, для лицензионных дисков приходит та же ошибка.
Используемый код можно увидеть здесь: http://forums.microsoft.com/MSDN/showpost.aspx?postid=1957338&siteid=1 |
|
| Вернуться к началу |
|
 |
kostasoft Активный
Зарегистрирован: 28.07.2007 Сообщения: 44
|
Добавлено: Сб Авг 18, 2007 7:55 pm Заголовок сообщения: |
|
|
Ну что ж, сделал разделение и вывод кадров в разные видеорендеры
| Код: | procedure TfmMain.bOpenClick(Sender: TObject);
var
hr: HRESULT;
ARect1,ARect2: TVMR9NORMALIZEDRECT;
begin
if OpenDialog.Execute then
begin
if True then //вертикальная стереопара
begin
ARect1.top := 0;
ARect1.bottom := 2;
ARect1.left := 0;
ARect1.right := 1;
ARect2.top := -1;
ARect2.bottom := 1;
ARect2.left := 0;
ARect2.right := 1;
end
else //горизонтальная стереопара
begin
ARect1.top := 0;
ARect1.bottom := 1;
ARect1.left := 0;
ARect1.right := 2;
ARect2.top := 0;
ARect2.bottom := 1;
ARect2.left := -1;
ARect2.right := 1;
end;
(VideoWindow1 as IVMRMixerControl9).SetOutputRect(0,@ARect1);
(VideoWindow2 as IVMRMixerControl9).SetOutputRect(0,@ARect2);
pGraphBuilder := (FilterGraph1 as IGraphBuilder);
hr := pGraphBuilder.AddSourceFilter(StringToOleStr(OpenDialog.FileName), '', pSourceFile);
if FAILED(hr) then begin
ShowMessage('Не удается добавить к графу фильт источника');
exit;
end;
hr := CoCreateInstance(CLSID_InfTee, nil, CLSCTX_INPROC, IID_IBaseFilter, pInfTee);
if FAILED(hr) then begin
ShowMessage('Не удается создать IInfTee');
exit;
end;
hr := CoCreateInstance(CLSID_AudioRender, nil, CLSCTX_INPROC, IID_IBaseFilter, pAudioRender);
if FAILED(hr) then begin
ShowMessage('Не удается создать AudioRender');
exit;
end;
pGraphBuilder.AddFilter(pInfTee, 'Inf Tee');
pGraphBuilder.AddFilter(pAudioRender, 'Audio');
FilterGraph1.QueryInterface(IID_ICaptureGraphBuilder2, pCaptureGraphBuilder2);
pCaptureGraphBuilder2.RenderStream(nil, nil, pSourceFile as IBaseFilter, nil, pInfTee as IBaseFilter);
pCaptureGraphBuilder2.RenderStream(nil, nil, pSourceFile as IBaseFilter, nil, pAudioRender as IBaseFilter);
pCaptureGraphBuilder2.RenderStream(nil, nil, pInfTee as IBaseFilter, nil, VideoWindow1 as IBaseFilter);
pCaptureGraphBuilder2.RenderStream(nil, nil, pInfTee as IBaseFilter, nil, VideoWindow2 as IBaseFilter);
FilterGraph1.Play;
end;
end; |
1. Не могу вывести в DSVideoWindowEx2. А он был бы предпочтительней (вывод в полноэкранном режиме на разные мониторы, вывод на рабочий стол в качестве обоев и т.д.)
2. Изображене в видеорендере получается вытянутым. Как его растянуть на весь экран. _________________ http://kostasoft.com - Наш софт! |
|
| Вернуться к началу |
|
 |
WondeRu Главвред :)

Зарегистрирован: 30.10.2006 Сообщения: 188 Откуда: Самара
|
Добавлено: Пн Авг 20, 2007 8:11 am Заголовок сообщения: |
|
|
| kostasoft писал(а): | 1. Не могу вывести в DSVideoWindowEx2. А он был бы предпочтительней (вывод в полноэкранном режиме на разные мониторы, вывод на рабочий стол в качестве обоев и т.д.)
2. Изображене в видеорендере получается вытянутым. Как его растянуть на весь экран. |
1. Что значит "не могу"?
2. Вытянутость и т.п. регулируется через (VideoWindow1 as IVMRMixerControl9).SetOutputRect(0,@ARect1); Выставляешь разные параметры ARect1, таким образом регулируешь пропорции |
|
| Вернуться к началу |
|
 |
|
|
|
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|
|
|