Быстрое получение доступа к видеопамяти
От: blpunish  
Дата: 12.02.11 10:31
Оценка:
Здравствуйте. Проблема заключается вот в чем, нужно получить цвета всех пикселей на экране максимально бысто где-то 30 раз в секунду. Сделал все через DirectDraw во первых недостаточно быстро ну и еще не определялись цвета после запуска полноэкранных приложений(игр). Есть ли другие способы решения моей проблемы, сейчас пробую через Direct3D, что-то не как не разберусь в последовательности получения указателя на начало картинки. Помогите пожалуйста. Заранее спасибо)
directdraw dd d3d direct3d directx доступ к видеопамяти
Re: Быстрое получение доступа к видеопамяти
От: McSeem2 США http://www.antigrain.com
Дата: 16.02.11 08:22
Оценка:
Здравствуйте, blpunish, Вы писали:

B>Здравствуйте. Проблема заключается вот в чем, нужно получить цвета всех пикселей на экране максимально бысто где-то 30 раз в секунду. Сделал все через DirectDraw во первых недостаточно быстро ну и еще не определялись цвета после запуска полноэкранных приложений(игр). Есть ли другие способы решения моей проблемы, сейчас пробую через Direct3D, что-то не как не разберусь в последовательности получения указателя на начало картинки. Помогите пожалуйста. Заранее спасибо)


Читать из видеопамяти на PC — это очень медленно. Ничего не поможет.
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Re[2]: Быстрое получение доступа к видеопамяти
От: _ilya_  
Дата: 21.02.11 08:55
Оценка:
Здравствуйте, McSeem2, Вы писали:

MS>Здравствуйте, blpunish, Вы писали:


B>>Здравствуйте. Проблема заключается вот в чем, нужно получить цвета всех пикселей на экране максимально бысто где-то 30 раз в секунду. Сделал все через DirectDraw во первых недостаточно быстро ну и еще не определялись цвета после запуска полноэкранных приложений(игр). Есть ли другие способы решения моей проблемы, сейчас пробую через Direct3D, что-то не как не разберусь в последовательности получения указателя на начало картинки. Помогите пожалуйста. Заранее спасибо)


MS>Читать из видеопамяти на PC — это очень медленно. Ничего не поможет.


Fraps же даже в файл умудряется сохранять... если скорости диска хватает под такой fps.
Re[3]: Быстрое получение доступа к видеопамяти
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 21.02.11 11:17
Оценка:
Кстати да, fraps довольно шустрый. При этом еще и сжимать слегка успевает. Так что не все потеряно.
Re: Быстрое получение доступа к видеопамяти
От: squid  
Дата: 24.02.11 11:47
Оценка:
Здравствуйте, blpunish, Вы писали:

b> Здравствуйте. Проблема заключается вот в чем, нужно получить цвета всех пикселей на экране максимально бысто где-то 30 раз в секунду. Сделал все через DirectDraw во первых недостаточно быстро ну и еще не определялись цвета после запуска полноэкранных приложений(игр). Есть ли другие способы решения моей проблемы, сейчас пробую через Direct3D, что-то не как не разберусь в последовательности получения указателя на начало картинки. Помогите пожалуйста. Заранее спасибо)


Будешь смеяться, но GDI. И это работает.
avalon 1.0rc3 rev 366, zlib 1.2.3
Re[2]: Быстрое получение доступа к видеопамяти
От: blpunish  
Дата: 27.02.11 10:05
Оценка:
Нашел библиотеки madCollection вроде там есть функции перехвата чужого полноэкранного приложения, пока не пробывал. Может кто сталкивался?
Re[3]: Быстрое получение доступа к видеопамяти
От: Аноним  
Дата: 01.03.11 07:23
Оценка:
Здравствуйте, blpunish, Вы писали:

B>Нашел библиотеки madCollection вроде там есть функции перехвата чужого полноэкранного приложения, пока не пробывал. Может кто сталкивался?


скорость перехвата из видеопамяти в любом случае ограничена железом. быстро на запись, медленно (очень!) на чтение.
другой вопрос, что этой медленности может и быть достаточно, зависит от задач. для захвата простого офисного десктопа может оказаться и достаточно, а для трансляции чемпионата по CS — нет.

в общем, критерии быстроты в студию.
Re[4]: Быстрое получение доступа к видеопамяти
От: blpunish  
Дата: 07.03.11 19:44
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, blpunish, Вы писали:


B>>Нашел библиотеки madCollection вроде там есть функции перехвата чужого полноэкранного приложения, пока не пробывал. Может кто сталкивался?


А>скорость перехвата из видеопамяти в любом случае ограничена железом. быстро на запись, медленно (очень!) на чтение.

А>другой вопрос, что этой медленности может и быть достаточно, зависит от задач. для захвата простого офисного десктопа может оказаться и достаточно, а для трансляции чемпионата по CS — нет.

А>в общем, критерии быстроты в студию.


В обшем мне нужна скорость не заметная глазом человека, даже чуть быстрее где-то 24-30 раз в секунду
Re: Быстрое получение доступа к видеопамяти
От: acDev Россия  
Дата: 23.06.11 11:50
Оценка:
Здравствуйте, blpunish, Вы писали:

B>Проблема заключается вот в чем, нужно получить цвета всех пикселей на экране максимально бысто где-то 30 раз в секунду. Сделал все через DirectDraw во первых недостаточно быстро ну и еще не определялись цвета после запуска полноэкранных приложений(игр). Есть ли другие способы решения моей проблемы, сейчас пробую через Direct3D, что-то не как не разберусь в последовательности получения указателя на начало картинки.

B>В обшем мне нужна скорость не заметная глазом человека, даже чуть быстрее где-то 24-30 раз в секунду

По поводу скорости.
Установи себе на компы RemoteAdministrator ver 3.x. Включи на 1-ой машинке RAServer, а на второй запусти RAClient и приконнектись к серверу.
При этом можно заметить, что на 1-ой машинке скорость отрисовки GUI контролов упала. А упала из-за того, что RAServer работает как драйвер фильтр. Т.е. вся работа винды с GUI частью осуществляется через RAServer.
Это самый быстрый способ "получения цвета всех пикселей", но и самый сложный.

По поводу возможной реализации.
Начиная с висты видео изображение может напрямую "уходить" на видео-устройство, минуя GDI.
Для корректного снятия скриншота с приложения (не с экрана целиком) нужно в этом приложении хучить функции, через которые и производится отрисовка (или смена буферов).
Глянуть как это делается можно в след. источниках:
1) Taksi
http://taksi.sourceforge.net
Практически аналог fraps'а. Перехват осуществляется уже в работающем приложении.
Поддерживает перехват: OpenGL, Direct3D 8, Direct3D 9.
2) .kkapture
http://www.farb-rausch.de/~fg/kkapture/
Глядя на сурцы, перехват осуществляется при помощи MS Detours и производится в момент старта приложения (это минус).
Во время старта приложения он в хукает Direct***Create*** получает указатели на нужные интерфейсы.
Имеются какието хитрые оптимизации по скорости получения снимков.
Поддерживает перехват: OpenGL, все версии DirectDraw (до 7 версии), Direct3D 8, Direct3D 9.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.