![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 3 Всего: 112 |
-------------------- С уважением, г-н Посол. |
|||
|
||||
| Leksey |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 332 Регистрация: 12.12.2004 Репутация: 1 Всего: 1 |
Fixin сразу на диск писать не получается это слишком медленно.
Сделал по таймеру 1с запись всего рабочего стола в Avi поток, тормозит ужасно |
|||
|
||||
| ManiaK |
|
|||
![]() Homo Sapience ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1145 Регистрация: 3.8.2004 Где: ИУ5-93 Репутация: 2 Всего: 29 |
Первый пример уловка, там грабление происходит не из проигрывателя, а из самого файла, насколько понял. Остальные интересней, спасибо |
|||
|
||||
| Leksey |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 332 Регистрация: 12.12.2004 Репутация: 1 Всего: 1 |
Написал захват изображения в лоб по кадрам.
Беру по таймеру изображение в прямоугольнике и записываю в Avi поток по кадрам. Неплохо получается при небольших размерах прямоугольника, но если весь рабочий стол,то жуткие тормоза. Вот только курсор самому надо рисовать. Возникает глюк- в MS Paint курсор карандаш, а у меня обычная стрелка?! Пользуюсь функцией GetCursor(),а рисую DrawIconEx. Никто не знает как это исправить? Еще нашел в интернете пару ActiveX контролов,которые позволяют добавить в приложение запись экрана монитора, но они все платные. |
|||
|
||||
| Leksey |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 332 Регистрация: 12.12.2004 Репутация: 1 Всего: 1 |
И еще как можно избежать повторного копирования:
BitBlt GetDIBits AVIStreamWrite Можно ли пропустить промежуточный шаг? |
|||
|
||||
| Fixin |
|
||||||
![]() Ёжик ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1357 Регистрация: 6.1.2004 Репутация: 8 Всего: 18 |
Сразу? Естественно. Надо по несколько кадров кучей и в отдельном потоке (программном). Поток AVI тормозит из-за сжатия (возможно). Я бы делал собственный формат - один заголовок и далее набор кадров. В любом случае, кадры нужно буферизировать. Добавлено @ 20:58
|
||||||
|
|||||||
| Fixin |
|
|||
![]() Ёжик ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1357 Регистрация: 6.1.2004 Репутация: 8 Всего: 18 |
Порылся в МСДН, но искал я всега плохо...
|
|||
|
||||
| JoyEx |
|
||||||||||
|
Дядя ![]() ![]() Профиль Группа: Участник Сообщений: 323 Регистрация: 21.6.2005 Где: Москва, РФ Репутация: 4 Всего: 12 |
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
или в св-вах проекта (через диалог) 2) Если компилятор не найдет CLSID-ы и IID-ы, то тогда следует подсунуть ему strmiids.lib 3) В функции CFrameGrabberDemoDlg::DoExtractFrame() исправь код, чтобы было примерно так:
т.е. в переменную size необходимо записывать размер картинки и токо потом в битмап (через buffer) засовывать что-то. 4) В mt.subtype = MEDIASUBTYPE_RGB??? укажи правильный подтип, в зависмости от bpp экрана. Видео обычно выводится через оверлей, но если видяха не поддерживает его аппаратно, то тогда программно эмулируется оверлей, а это значит, что тебе DirectX не нужен: из видеопамяти Рабочего стола, через HDC можно сграбить картинку. Ну, а если вывод осуществляется аппаратно, то тогда приходит на помощь интерфейс ISampleGrabber (чтобы увидеть окно с оверлеем - pVideoWindow->put_AutoShow(OATRUE);), т.е. проигрываешь видео и с помощью фильтров делаешь что хочешь. -------------------- Если ты уже никого не боишься, значит ты самый страшный |
||||||||||
|
|||||||||||
| ManiaK |
|
|||
![]() Homo Sapience ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1145 Регистрация: 3.8.2004 Где: ИУ5-93 Репутация: 2 Всего: 29 |
Модератор: Кхе-кхе... не отклоняемся от темы, господа
Добавлено @ 10:14 Смотрим сюды: http://forum.vingrad.ru/index.php?showtopi...40&st=0&hl=jpeg Тырим код кодирования изображения в JPG. Далаем вот это:
Только кодируя на лету. Из каждого кадра в 3 мега получаем примерно 40-50 кб. Тормоза должны уйти. |
|||
|
||||
| Leksey |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 332 Регистрация: 12.12.2004 Репутация: 1 Всего: 1 |
Fixin я пробовал и с сжатием и без сжатия.
Если кодек нормальный то разница не очень большая. А вообще хранить кадры целиком в виде кучи не очень красиво. Слишком большой рост занимаемой оперативной памяти будет. |
|||
|
||||
| Leksey |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 332 Регистрация: 12.12.2004 Репутация: 1 Всего: 1 |
Ой я ошибся попробовал с кодеками Microsoft MPEG4- загрузка ЦП 100%, в то время как полные кадры 50% при захвате прямоугольника 500x500.
Maniak зачем самому кодировать,если можно использвать готовые кодеки? |
|||
|
||||
| ManiaK |
|
|||
![]() Homo Sapience ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1145 Регистрация: 3.8.2004 Где: ИУ5-93 Репутация: 2 Всего: 29 |
Мне не очень понятно как эти кодеки могут работать. Как ты делаешь?.. |
|||
|
||||
| Leksey |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 332 Регистрация: 12.12.2004 Репутация: 1 Всего: 1 |
С помощью AviCompressedStream функции получаю указатель на stream/
Потом просто кадры не сжатые в него пишу.Если выбрать нормальный кодек, то размер файла получается очень маленький. Кстати протестил две программки, которые тоже самое делают, они тоже сильно тормозят, когда 1024X768. еще когда прямоугольник маленький они увеличивают количество кадров в секунду. |
|||
|
||||
| Leksey |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 332 Регистрация: 12.12.2004 Репутация: 1 Всего: 1 |
Как-то можно юзать DirectX для этих целей.
Недавно тестил программку, которая тем же занимается, она при 1024X768 30% процессора хавает, но почему то курсор мыши при этом мигает. Правда из DirectDraw импортирует только DirectDrawCreate,как узнать как она это делает? Похоже пора перемещаться на раздел DirectX. |
|||
|
||||
| ManiaK |
|
|||
![]() Homo Sapience ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1145 Регистрация: 3.8.2004 Где: ИУ5-93 Репутация: 2 Всего: 29 |
Leksey проблема интересная, перемещайся
|
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |