Модераторы: feodorv, GremlinProg, xvr, Fixin

Поиск:

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


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


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

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



Цитата(JoyEx @ 3.8.2005, 20:05)
Вот
Пример 1
Пример 2
Пример 3
Пример 4
Чего-то я там не нашёл примера, который бы захватывал оверлеи... smile Можешь дать конкретный рабочий пример, который бы граббил содержимое оверлея ?...




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


Опытный
**


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

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



Fixin сразу на диск писать не получается это слишком медленно.
Сделал по таймеру 1с запись всего рабочего стола в Avi поток, тормозит ужасно smile
PM MAIL   Вверх
ManiaK
Дата 4.8.2005, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Homo Sapience
***


Профиль
Группа: Комодератор
Сообщений: 1145
Регистрация: 3.8.2004
Где: ИУ5-93

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



Цитата(JoyEx @ 3.8.2005, 21:05)
Вот

Первый пример уловка, там грабление происходит не из проигрывателя, а из самого файла, насколько понял. Остальные интересней, спасибо smile
PM MAIL WWW   Вверх
Leksey
Дата 4.8.2005, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Написал захват изображения в лоб по кадрам.
Беру по таймеру изображение в прямоугольнике и записываю в Avi поток по кадрам.
Неплохо получается при небольших размерах прямоугольника, но если весь рабочий стол,то жуткие тормоза.
Вот только курсор самому надо рисовать.
Возникает глюк- в MS Paint курсор карандаш, а у меня обычная стрелка?!
Пользуюсь функцией GetCursor(),а рисую DrawIconEx.
Никто не знает как это исправить?
Еще нашел в интернете пару ActiveX контролов,которые позволяют добавить в приложение запись экрана монитора, но они все платные.

PM MAIL   Вверх
Leksey
Дата 4.8.2005, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



И еще как можно избежать повторного копирования:
BitBlt
GetDIBits
AVIStreamWrite
Можно ли пропустить промежуточный шаг?

PM MAIL   Вверх
Fixin
Дата 4.8.2005, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ёжик
***


Профиль
Группа: Комодератор
Сообщений: 1357
Регистрация: 6.1.2004

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



Цитата(Leksey @ 4.8.2005, 10:24)
Fixin сразу на диск писать не получается это слишком медленно.
Сделал по таймеру 1с запись всего рабочего стола в Avi поток, тормозит ужасно smile

Сразу? Естественно. Надо по несколько кадров кучей и в отдельном потоке (программном).
Поток AVI тормозит из-за сжатия (возможно). Я бы делал собственный формат - один заголовок и далее набор кадров.

В любом случае, кадры нужно буферизировать.
Добавлено @ 20:58
Цитата
Вот только курсор самому надо рисовать.
Цитата
И еще как можно избежать повторного копирования:
BitBlt
GetDIBits
AVIStreamWrite
Можно ли пропустить промежуточный шаг?
Все это исправляется при прямом использовании видеобуфера. Надо поискать...
PM MAIL ICQ   Вверх
Fixin
Дата 4.8.2005, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ёжик
***


Профиль
Группа: Комодератор
Сообщений: 1357
Регистрация: 6.1.2004

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



Порылся в МСДН, но искал я всега плохо...
PM MAIL ICQ   Вверх
JoyEx
Дата 5.8.2005, 08:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дядя
**


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

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



Цитата(p0s0l @ 4.8.2005, 01:04)
Цитата(JoyEx @ 3.8.2005, 20:05)
Вот
Пример 1
Пример 2
Пример 3
Пример 4
Чего-то я там не нашёл примера, который бы захватывал оверлеи... smile Можешь дать конкретный рабочий пример, который бы граббил содержимое оверлея ?...

p0s0l
У тебя получается как в анекдоте, в военкомате:
Цитата

- Ну чё? Взяли?
- Да. А  тебя?
- Нет.
- А почему?
- Хм... К примеру, ты вон тот, желтый автобус на мосту видишь?
- Да.
- А я вот не вижу...


К примеру, Пример 1:

FrameGrabberdemo.zip – это проект для DirectShow

Чтобы скомпилировать этот проект:

0) Пропиши в VC++ пути к DirectX 9.0 SDK

1) Если будет fatal error LNK1181: cannot open input file 'Strmbase.lib', то тогда иди в \DX90SDK\Samples\C++\DirectShow\BaseClasses\ и компилируй проект, получишь Strmbase.lib, StrmbaseD.lib

У себя в проекте добавь в .cpp
Код

#pragma comment (lib,"..\\BaseClasses\\Debug\\strmbasd.lib")

или в св-вах проекта (через диалог)

2) Если компилятор не найдет CLSID-ы и IID-ы, то тогда следует подсунуть ему strmiids.lib

3) В функции CFrameGrabberDemoDlg::DoExtractFrame() исправь код, чтобы было примерно так:
Код

    long size = 0;
    pSampleGrabber->GetCurrentBuffer(&size, (long *)NULL);
    
    hr = pSampleGrabber->GetCurrentBuffer(&size, (long *)buffer);    
 


т.е. в переменную size необходимо записывать размер картинки и токо потом в битмап (через buffer) засовывать что-то.


4) В mt.subtype = MEDIASUBTYPE_RGB??? укажи правильный подтип, в зависмости от bpp экрана.



Видео обычно выводится через оверлей, но если видяха не поддерживает его аппаратно, то тогда программно эмулируется оверлей, а это значит, что тебе DirectX не нужен: из видеопамяти Рабочего стола, через HDC можно сграбить картинку. Ну, а если вывод осуществляется аппаратно, то тогда приходит на помощь интерфейс ISampleGrabber (чтобы увидеть окно с оверлеем - pVideoWindow->put_AutoShow(OATRUE);), т.е. проигрываешь видео и с помощью фильтров делаешь что хочешь.





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


Homo Sapience
***


Профиль
Группа: Комодератор
Сообщений: 1145
Регистрация: 3.8.2004
Где: ИУ5-93

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



Модератор: Кхе-кхе... не отклоняемся от темы, господа smile
Добавлено @ 10:14
Смотрим сюды: http://forum.vingrad.ru/index.php?showtopi...40&st=0&hl=jpeg
Тырим код кодирования изображения в JPG. Далаем вот это:

Цитата(Leksey @ 4.8.2005, 15:16)
Беру по таймеру изображение в прямоугольнике и записываю в Avi поток по кадрам.

Только кодируя на лету. Из каждого кадра в 3 мега получаем примерно 40-50 кб. Тормоза должны уйти.
PM MAIL WWW   Вверх
Leksey
Дата 5.8.2005, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Fixin я пробовал и с сжатием и без сжатия.
Если кодек нормальный то разница не очень большая.
А вообще хранить кадры целиком в виде кучи не очень красиво.
Слишком большой рост занимаемой оперативной памяти будет.


PM MAIL   Вверх
Leksey
Дата 5.8.2005, 10:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ой я ошибся попробовал с кодеками Microsoft MPEG4- загрузка ЦП 100%, в то время как полные кадры 50% при захвате прямоугольника 500x500.
Maniak зачем самому кодировать,если можно использвать готовые кодеки?
PM MAIL   Вверх
ManiaK
Дата 5.8.2005, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Homo Sapience
***


Профиль
Группа: Комодератор
Сообщений: 1145
Регистрация: 3.8.2004
Где: ИУ5-93

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



Цитата(Leksey @ 5.8.2005, 11:51)
Maniak зачем самому кодировать,если можно использвать готовые кодеки?

Мне не очень понятно как эти кодеки могут работать. Как ты делаешь?..
PM MAIL WWW   Вверх
Leksey
Дата 5.8.2005, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



С помощью AviCompressedStream функции получаю указатель на stream/
Потом просто кадры не сжатые в него пишу.Если выбрать нормальный кодек, то размер файла получается очень маленький.
Кстати протестил две программки, которые тоже самое делают, они тоже сильно тормозят, когда 1024X768.
еще когда прямоугольник маленький они увеличивают количество кадров в секунду.
PM MAIL   Вверх
Leksey
Дата 5.8.2005, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Как-то можно юзать DirectX для этих целей.
Недавно тестил программку, которая тем же занимается, она при 1024X768 30% процессора хавает, но почему то курсор мыши при этом мигает.
Правда из DirectDraw импортирует только DirectDrawCreate,как узнать как она это делает?
Похоже пора перемещаться на раздел DirectX.
PM MAIL   Вверх
ManiaK
Дата 5.8.2005, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Homo Sapience
***


Профиль
Группа: Комодератор
Сообщений: 1145
Регистрация: 3.8.2004
Где: ИУ5-93

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



Leksey проблема интересная, перемещайся smile
PM MAIL WWW   Вверх
Страницы: (4) Все 1 [2] 3 4 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


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

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




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


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

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