| Форум Beholder http://beholder.ru/bb/ | |
| Обсуждение BeholdTV 5.10 http://beholder.ru/bb/viewtopic.php?f=1&t=8764 |
Страница 12 из 13 |
| Автор: | Maxch5 [ 14 окт 2010, 16:05 ] |
| Заголовок сообщения: | |
при размере окна 300*217 телетекст еще нормально читается, а вот OSD уже с трудом. Хотя если сильно нарушить соотношение сторон, даже при большем размере видео окна, действительно текст становится не читаемым( Но видео тоже становится ужасным, я не думаю что кто нибудь смотрит ТВ с такими искажениями. Я так понял ПО тюнера передаёт(через директ Х, презентер,...) видеокарте картинку со стандартными разрешением, а она уже сама масштабирует и выводит в нужном месте. То есть картинка с размером окна уже не возвращается в ПО тюнера??? |
|
| Автор: | hd44780 [ 14 окт 2010, 16:34 ] |
| Заголовок сообщения: | |
писал(а): То есть картинка с размером окна уже не возвращается в ПО тюнера???
Скорее всего так. Я когда-то смотрел исходники какой-то программы работающей с тюнером через Directshow и оверлей. Там вообще отсутствовала какая-либо обработка событий видеоокна. Хотя картинка масштабировалась как угодно (текст там правда не накладывался вообще). Я и делаю вывод, что масштабированием занимается видеорендерер, а не отдельные фильтры. |
|
| Автор: | Maxch5 [ 14 окт 2010, 19:56 ] |
| Заголовок сообщения: | |
Мда, жаль, такой вариант снижает загрузку ЦП, но ограничивает возможности((( Хотя видеокарта это всего лишь инструмент, наверно можно изменить картинку поле обработки самой видеокартой, но для этого программистам придется повозиться. Проще будет "склеить" видео окно и OSD, чтоб не расслаивались. OSD это отдельное окно(нестандартной формы), которое "парит" над видео окном??? |
|
| Автор: | hd44780 [ 14 окт 2010, 20:21 ] |
| Заголовок сообщения: | |
писал(а): OSD это отдельное окно(нестандартной формы), которое "парит" над видео окном???
Вообще - да. Хотя, как это реализовано в btv, не знаю. |
|
| Автор: | Maxch5 [ 14 окт 2010, 22:44 ] |
| Заголовок сообщения: | |
Я смог словить три объекта: TVideoFrame, VideoRenderer и TBhOsdWnd. Как реализовано я догадываюсь, это самый простой вариант, имеет всего 1 глюк(расслоение) и 1 заморочку с синхронным перемещением двух окон. От них можно попытаться избавится используя MDI формы(окно в окне), над синхронным перемещение парится ОС и расслоений не бывает, но мне не удалось сделать вложенное окно нестандартной формы отдельно от основного(делал на VB6). Есть другой вариант, может удастся сделать обычный рисунок нестандартной формы, ну в крайнем случае сделать OSD из множества отдельных компонентов одного окна. |
|
| Автор: | hd44780 [ 15 окт 2010, 08:54 ] |
| Заголовок сообщения: | |
писал(а): Я смог словить три объекта: TVideoFrame, VideoRenderer и TBhOsdWnd.
Ну да, TVideoFrame - окно с ТВ картинкой, TBhOsdWnd - OSD. Третье - не знаю. Есть еще TMain - панель управления. Именно ему посылаютя WM сообщения для управления. Я смотрел утилитой Spy++ из состава VC6 или VS2005 (в 2008 ее не нашел) - там этих TBhOsdWnd вообще штук 5 (у меня ПО 5.10). Но с этими окнами я не игрался. Окна VideoRenderer я у себя не нашел. Зато есть EVR Fullscreen Window. Может от типа рендерера зависит..... Maxch5, какой у тебя рендерер включен? У меня EVR. Насчет искажения текста - он в первую очередь страдает при масштабировании. Это легко увидеть в любом примитивном граф. редакторе - написать на любой картинке любой текст, потом отмасштабировать ее. С текстом сразу получаются разные беды Единственный способ (на мой взгляд) избавиться от этого - отлавливать изменения размера окна (какой-нибудь WM_RESIZE) и рисовать текст по-новой с новым, пересчитанным размером. Правда, реализуем ли данный алгоритм или нет - не знаю, т.к. нам неизвестны структура и алгоритм ПО. Все что я сказал - лишь мои мысли вслух. Может я и не прав в чем-то. PS. Ох, накажут меня за этот оффтоп в данной теме |
|
| Автор: | Maxch5 [ 15 окт 2010, 12:59 ] |
| Заголовок сообщения: | |
Эти элементы ловятся и при EVR, и при VMR7/9. Предположительно: TVideoFrame - видео окно VideoRenderer - скорей всего объект через который выводится видео TBhOsdWnd - нарезанное окно OSD, рисуют походу прямо на нем(других элементов этого окна я не словил) Пользуюсь VMR7/9, жрет ресурсов меньше)) По клацал эти режимы и расслаиваться перестало)) |
|
| Автор: | EugeneF [ 15 окт 2010, 21:20 ] |
| Заголовок сообщения: | |
писал(а): Насчет искажения текста - он в первую очередь страдает при масштабировании. Это легко увидеть в любом примитивном граф. редакторе - написать на любой картинке любой текст, потом отмасштабировать ее. С текстом сразу получаются разные беды Это зависит от того, как масштабировать, от алгоритма интерполяции, от антиэлайсингового фильтра. В Direct3D эти все параметры масштабирования текстур может задавать приложение. Наверняка и в параметрах рендерера тоже. Цитата: Единственный способ (на мой взгляд) избавиться от этого - отлавливать изменения размера окна (какой-нибудь WM_RESIZE) и рисовать текст по-новой с новым, пересчитанным размером.
OSD и так сейчас исчезает при каждой попытке масштабирования окна. Так что достаточно его только при каждом новом вызове перерисовывать заново с разным шрифтом в зависимости от размеров окна. Только по-моему, это не поможет, т.к. все равно поверхность с OSD будет масштабироваться рендерером из размера ТВ кадра в размер окна. Вариант, это использовать сглаженные шрифты или двойное масштабирование из формата окна в кадр и потом обратно, хотя это уже изврат... |
|
| Автор: | Maxch5 [ 15 окт 2010, 21:47 ] |
| Заголовок сообщения: | |
А если попробовать словить кадр сразу после масштабирования и наложить OSD, забирать его у видео карты не обязательно, игрушки ворочают всё прямо в памяти видушки. Я так понял используется компонент, который обеспечивает вывод картинки, лучше бы сделали на API))) |
|
| Автор: | EugeneF [ 15 окт 2010, 22:17 ] |
| Заголовок сообщения: | |
А его и сделали на API DirectX. Как же можно без него-то? Windows не позволяет обращаться напрямую к регистрам видеоадаптера. Ловить может как-то и можно, но это уже изврат. Не факт, что EVR и WMR это штатно поддерживают. Обрабатывать кадр во время отрисовки можно с помощью шейдеров, а накладывать чего-нибудь с помощью текстур с альфа каналом, если такая возможность поддерживается рендерером. Но вообще, это обсуждение действительно начинает переходить в оффтоп. Надеюсь, администрация перенесет его в соответствующий раздел... |
|
| Автор: | Maxch5 [ 15 окт 2010, 22:48 ] |
| Заголовок сообщения: | |
Перенести могут всю тему целиком, по этому заканчиваем. Я надеюсь тут есть что нибудь полезное для программистов))). |
|
| Автор: | EugeneF [ 15 окт 2010, 23:05 ] |
| Заголовок сообщения: | |
Всю переносить ни к чему, достаточно только несколько последних сообщений. А эти два потом удалить... ЗЫ: писал(а): Media Foundation uses the Enhanced Video Renderer (EVR) for rendering video content, which acts as a mixer as well. It can mix up to 16 simultaneous streams, with the first stream being a reference stream. All but the reference stream can have per-pixel transparency information, as well as any specified z-order.
|
|
| Автор: | BTVSoft [ 18 окт 2010, 14:35 ] |
| Заголовок сообщения: | |
Maxch5 Цитата: Я так понял используется компонент, который обеспечивает вывод картинки, лучше бы сделали на API)))
Вы заблуждаетесь. Из всех сторонних компонентов используется только RxLib и Berg NextGrid. Все остальное написано ручками на базе WinAPI и Platform WSDK. |
|
| Автор: | Maxch5 [ 18 окт 2010, 18:41 ] |
| Заголовок сообщения: | |
Молодцы! Ну если вы всё это сделали сами, то добавить еще 1 видео поток не составит труда)) |
|
| Автор: | TroN [ 28 окт 2010, 19:44 ] |
| Заголовок сообщения: | |
Уважаемые разработчики не могли бы вы сделать в следующей версии программного обеспечения одну очень простую в реализации и так мне а может и не только мне функцию. А именно как известно существует функция таймера сна. так вот у данной функции нет вариантов действий, а именно она просто выключает ПК. А вот привязать действие ее к тому как настроена кнопка выключения на пульте очень необходимо. Либо хотя бы сделать возможность настраивать этот самый таймер сна. |
|
| Страница 12 из 13 | Часовой пояс: UTC + 3 часа |