Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как обратится напрямую к видеопамяти, и сохранить данные в DIB ? 
:(
    Опции темы
p0s0l
Дата 18.10.2004, 01:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: нет
Всего: 112



Кстати, я тут посмотрел, похоже к видеопамяти есть прямой доступ без всяких прибамбасов.
В директдраве у PrimarySurface делаем Lock ( + можно сразу же Unlock), при этом получаем адрес сурфейса. Этот адрес соответсвует базовому адресу видеопамяти (очень похоже на это).
Читайте и пишите туда наздоровье, как говорится, только против оверлеев это не спасёт...


--------------------
С уважением, г-н Посол.
PM   Вверх
oleg1973
Дата 18.10.2004, 09:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


asm fanat
****


Профиль
Группа: Экс. модератор
Сообщений: 3283
Регистрация: 16.7.2003
Где: Italy

Репутация: 2
Всего: 34



Neo! оверлеев не бывает :)
есть видеокарта и линейный кусок видепамяти
адресс его находится елементарно
далее найдя адр начала , логично предположить что достаточно скопировать к примеру 1024*768*3 байт чтоб получить копию LFB которая будет являтся непосредственной частью видео памяти которую мы видим на экране, внеэкранная нас в данный момент не интересует


--------------------
SST 465555
icq 200-512-712
PM MAIL WWW ICQ   Вверх
oleg1973
Дата 18.10.2004, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


asm fanat
****


Профиль
Группа: Экс. модератор
Сообщений: 3283
Регистрация: 16.7.2003
Где: Italy

Репутация: 2
Всего: 34



p0s0l
совершенно верно
при lock получаем адрес на видеопамять
но тут есть нюанс
ddraw позволяет делать эмуляцию в оперативе, если к примеру мала видеопамяти а нам нада 10 бэкбуферов, оно будет в оперативе
хотя в принципе на результат не повлеяет

осталось тока залесть в чужой процесс и сделать оттуда lock :D
предлагаю написать враппер ddraw.dll который по нажатию там каких нить кнопок будет шкрин грабить ;-)


--------------------
SST 465555
icq 200-512-712
PM MAIL WWW ICQ   Вверх
p0s0l
Дата 18.10.2004, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: нет
Всего: 112



Цитата
ddraw позволяет делать эмуляцию в оперативе, если к примеру мала видеопамяти а нам нада 10 бэкбуферов, оно будет в оперативе

Можно тогда просто создать любой малюсенный сурфейс в видеопамяти (в dwCaps указав DDSCAPS_VIDEOMEMORY), делаем Lock, получаем адрес сурфейса, далее VirtualQuery выдаст базовый адрес региона (AllocationBase), то бишь начало видеопамяти.

Цитата
осталось тока залесть в чужой процесс и сделать оттуда lock
Что-то не понимаю: зачем ? Видеопамять - одна на всех, изменяя её в своём процессе, я изменяю её и в другом. Она проецируется в виртуальное пространство процессов по разным адресам, но физически это одна и та же память.

Цитата
Neo! оверлеев не бывает

Объясни почему ? Откуда такая уверенность ? Загляни в настройки видеопроигрывателя и ты скорее всего найдешь метод вывода. Например, в Zoom Player: Standart Renderer, Overlay Mixer, Video Mixing Renderer (VMR9).
Если выставишь Overlay Mixer (а он выставлен по умолчанию), то при проигрывании фильма PrintScreen будет снимать вместо фильма черноту.

Цитата
есть видеокарта и линейный кусок видепамяти
адресс его находится елементарно
далее найдя адр начала , логично предположить что достаточно скопировать к примеру 1024*768*3 байт чтоб получить копию LFB которая будет являтся непосредственной частью видео памяти которую мы видим на экране, внеэкранная нас в данный момент не интересует
А ты пробовал ? Я пробовал. Как я и говорил - прямой доступ к памяти ничего не даст. Простой PrintScreen будет работать ничем не хуже. И я уже объяснял почему:
Проигрыватель закрашивает всю клиентскую область окна ключевым цветом оверлея, DirectShow рендерит фильм не на окно проигрывателя, а на невидимый оверлейный сурфейс. Поэтому и в куске видеопамяти, выводимой на экран, хранится только КЛЮЧЕВОЙ ЦВЕТ на месте оверлея, а то, что должно выводится вместо этого ключевого цвета (кадр фильма к примеру), тоже хранится в видеопамяти, но уже в другом куске памяти, и это и есть оверлей.
Я себе представляют так:
видяха при выводе на монитор читает последовательно видеопамять. Если есть хотя бы один видимый оверлей, она проверяет, входит ли выводимый пиксел в область оверлея, если да, то еще проверят, является ли считанный пиксел ключевым цветом, и если является, то вместо него выводит соотвествующий пиксел оверлея...



--------------------
С уважением, г-н Посол.
PM   Вверх
oleg1973
Дата 21.10.2004, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


asm fanat
****


Профиль
Группа: Экс. модератор
Сообщений: 3283
Регистрация: 16.7.2003
Где: Italy

Репутация: 2
Всего: 34



p0s0l
шас как тока будет свободная минутка попробую сделать грабилку, (ddraw.dll wrapper)


--------------------
SST 465555
icq 200-512-712
PM MAIL WWW ICQ   Вверх
p0s0l
Дата 21.10.2004, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: нет
Всего: 112



oleg1973, почитай, главное выделено, из MSDN:
Цитата

DirectDraw also supports overlays. An overlay surface is one that can be displayed on top of the primary surface without altering the physical bits in the surface underneath it. With an overlay, registers are set that define a rectangle on the primary surface that contains the overlay surface. The digital-to-analog converter (DAC) changes the location of the rectangles. The scan line reads data in primary surface memory until it reaches the rectangle that is set aside for the overlay. It reads from the overlay surface until that line in the overlay is finished, then continues with the original primary surface image. This switching from primary surface to the overlay and back happens on every pass of the scan line and continues until the overlay is completely displayed.

The overlay surface can have a different pixel depth than the primary surface. For example, while 8 bits per pixel (bpp) may look fine for the primary surface, a video clip may need 16 bpp to display acceptably. The pixel depth switches seamlessly between the primary surface and the overlay. For more information about overlays with DirectDraw, see the Video Port Extensions to DirectX section.

Overlays flip in exactly the same way as the primary surface. The DirectDraw surface objects swap pointers so that the new overlay surface is read when the scan line reaches the rectangle bounding the overlay. The same flipping algorithm described in Timing a Flip prevents tearing.

Т.е. если хочешь делать грабилку, то придётся грабить как ПримариСурфейс, так и Оверлейный Сурфейс...



--------------------
С уважением, г-н Посол.
PM   Вверх
RuslanB
Дата 6.11.2004, 23:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 21.10.2004

Репутация: нет
Всего: нет



Вы мое спасенье!!! smile Надо написать программу, выводящую дамп памяти (содержимое памяти) с адреса, указанного в ES:SI. Содержимое памяти выводить в текстовом видеорежиме 80x25, числа выводятся в шестнадцатеричном виде строками по 16 байт. Всего вывести 256 байт памяти (16 строк).
PM MAIL   Вверх
Byo
Дата 21.10.2005, 19:27 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Нефиг спорить ))
p0s0l абсолютно прав .
так что удачи в поисках ).


  Вверх
JoyEx
Дата 3.12.2005, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дядя
**


Профиль
Группа: Участник
Сообщений: 323
Регистрация: 21.6.2005
Где: Москва, РФ

Репутация: нет
Всего: 12



Касательно Win!!! smile

Лучше всего иметь у себя PRM (Programmer's Reference Manual) на свою видяху.
Например, http://www.intel.com/design/chipsets/manuals/29823701.pdf
и затем работать напрямую

А если по-умному, то лучше изучить архитектуру работы дисплея и делать драйверок.


p0s0l, с Днем Варенья тебя!

Это сообщение отредактировал(а) JoyEx - 3.12.2005, 20:02


--------------------
Если ты уже никого не боишься, значит ты самый страшный 
PM IM ICQ AOL YIM MSN   Вверх
JoyEx
Дата 5.12.2005, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дядя
**


Профиль
Группа: Участник
Сообщений: 323
Регистрация: 21.6.2005
Где: Москва, РФ

Репутация: нет
Всего: 12



И потом, напрямую адрес (>0x80000000) видеопамяти получить можно, а вот вычислить внеэкранную будет намного сложнее. Еще можно вспомнить об основных VGA регистрах, чтобы попытаться сделать что-то нехорошое с видяхой.


--------------------
Если ты уже никого не боишься, значит ты самый страшный 
PM IM ICQ AOL YIM MSN   Вверх
oleg1973
Дата 5.12.2005, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


asm fanat
****


Профиль
Группа: Экс. модератор
Сообщений: 3283
Регистрация: 16.7.2003
Где: Italy

Репутация: 2
Всего: 34



Цитата
вот вычислить внеэкранную будет намного сложнее

ну если в досе все делать то там можно получить данные о установленом видеорежиме
и в том же массиве есть адрес (линейный) видеобуффера


--------------------
SST 465555
icq 200-512-712
PM MAIL WWW ICQ   Вверх
JoyEx
Дата 5.12.2005, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дядя
**


Профиль
Группа: Участник
Сообщений: 323
Регистрация: 21.6.2005
Где: Москва, РФ

Репутация: нет
Всего: 12



oleg1973
ДА.

shedon
Через HDC проще всего сделать и потом сразу забыть о проблеме.

В DVD самое ценное это меню, а через видяху DVD-менюшку не сграбить. Если тебе нужно типа VHS, то тогда дерзай!



--------------------
Если ты уже никого не боишься, значит ты самый страшный 
PM IM ICQ AOL YIM MSN   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для Windows/DOS"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для Windows/Dos | Следующая тема »


 




[ Время генерации скрипта: 0.0814 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.