Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с драйвером, Video Capture Device Drivers 
:(
    Опции темы
Ak47black
  Дата 13.1.2007, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2205
Регистрация: 2.12.2005

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



Пытаюсь понять как работать с Video Capture Device Drivers.
По руководству функция DriverProc драйвера написана вот так
Код

LRESULT FAR PASCAL _loadds DriverProc(DWORD dwDriverID, HDRVR hDriver, 
UINT uiMessage, LPARAM lParam1, LPARAM lParam2)
{
switch (uiMessage)
    {

        case DRV_LOAD:
            return (LRESULT)1L; //Device loaded successfully

        case DRV_FREE:
            return (LRESULT)1L; //Device freed successfully

        case DRV_OPEN:
            // lParam2 is NULL when the user configures 
            // the device driver with the Drivers Option of the 
            // Control Panel. If opened without an open structure, 
            // return a dummy (non-zero) ID so OpenDriver will work.
            if (lParam2 == NULL)
                return BOGUS_DRIVER_ID;

            // Verify this open is for a video capture driver, and 
            // not for an installable compressor/decompressor
            if (((LPVIDEO_OPEN_PARMS) lParam2) -> fccType != OPEN_TYPE_VCAP)
                return 0L;

            return (DWORD)(WORD)
                VideoOpen ((LPVIDEO_OPEN_PARMS) lParam2);
...

Пытаюсь работать делаю
Код

function MAKEFOURCC(ch0,ch1,ch2,ch3:char):DWORD;
begin
  result:=byte(ch0)+(byte(ch1) shl 8)+(byte(ch2) shl 16)+(byte(ch3) shl 24)
end;
const
  DRV_LOAD = $0001;
  DRV_ENABLE = $0002;
  DRV_OPEN = $0003;
  DRV_CLOSE = $0004;
  DRV_DISABLE = $0005;
  DRV_FREE = $0006;
  DRV_CONFIGURE = $0007;
  DRV_QUERYCONFIGURE = $0008;
  DRV_INSTALL = $0009;
  DRV_REMOVE = $000A;
  DRV_EXITSESSION = $000B;
  DRV_POWER = $000F;
  DRV_RESERVED = $0800;
  DRV_USER = $4000;






    Handle:= LoadLibrary(PChar(CodecFile));
    @DriverProc:= GetProcAddress(Handle,'DriverProc');
    Video_Open_params.fccType:= MAKEFOURCC('v', 'c', 'a', 'p');
    ShowMessage(IntToStr(DriverProc(0,0,DRV_LOAD,0,0))); //тут получаю 1 ,соотвествует DRV_OK 
    ShowMessage(IntToStr(DriverProc(0,0,DRV_OPEN,0,integer(@Video_Open_params))));  тут 0 DRV_CANCEL
    ShowMessage(IntToStr(Video_Open_params.dwSize));
    FreeLibrary(Handle);

Как правильно передать указатель ?
PM MAIL   Вверх
bems
Дата 14.1.2007, 00:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Ak47black @  13.1.2007,  18:47 Найти цитируемый пост)
Как правильно передать указатель ?
ээ.. А где ты пытаешся это сделать?



--------------------
Обижено школьников: 8
PM MAIL   Вверх
dumb
Дата 14.1.2007, 03:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


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

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



Цитата(Ak47black @  13.1.2007,  18:47 Найти цитируемый пост)

Код

ShowMessage(IntToStr(DriverProc(0,0,DRV_OPEN,0,integer(@Video_Open_params))));  тут 0 DRV_CANCEL

Код

            // Verify this open is for a video capture driver, and 
            // not for an installable compressor/decompressor
            if (((LPVIDEO_OPEN_PARMS) lParam2) -> fccType != OPEN_TYPE_VCAP)
                return 0L;


Video_Open_params.fccType у тебя равен OPEN_TYPE_VCAP?
PM MAIL   Вверх
Ak47black
Дата 14.1.2007, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2205
Регистрация: 2.12.2005

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



Извините я тут ошибся не с тем типом драйвера работал, но всеровно трудно до меня эта методы работы с драйверами доходят, пишите что знаете.
Я пытаюсь понять как работать с драйверами(кодеками), взял для примера я взял один из самых известных кодеков divx.dll.
Нашол одно единственное руководство, прикрепил его.
Пытаюсь пытаюсь понять, вроде все правильно делаю, но невыходит
Код

LRESULT CALLBACK _loadds DriverProc(DWORD dwDriverID, HDRVR hDriver, 
UINT uiMessage, LPARAM lParam1, LPARAM lParam2)
{
    INSTINFO *pi = (INSTINFO *)(UINT)dwDriverID;

    switch (uiMessage)
    {

       case DRV_LOAD:
            return (LRESULT) Load();

       case DRV_FREE:
            Free();
            return (LRESULT)1L;

       case DRV_OPEN:
            // If being opened without an open structure, return a non-zero
            // value without actually opening.
            if (lParam2 == 0L)
                return 0xFFFF0000;

            return (LRESULT)(DWORD)(WORD)Open((ICOPEN FAR *) lParam2);

Проверяю что при DRV_OPEN и lParam2 = 0 возврашаеться 0xFFFF0000
Код

const
  DRV_LOAD = $0001;
  DRV_ENABLE = $0002;
  DRV_OPEN = $0003;
  DRV_CLOSE = $0004;
  DRV_DISABLE = $0005;
  DRV_FREE = $0006;
  DRV_CONFIGURE = $0007;
  DRV_QUERYCONFIGURE = $0008;
  DRV_INSTALL = $0009;
  DRV_REMOVE = $000A;
  DRV_EXITSESSION = $000B;
  DRV_POWER = $000F;
  DRV_RESERVED = $0800;
  DRV_USER = $4000;
type
  TDriverProc = function (dwDriverId: DWORD; hdrvr: DWORD; msg: DWORD; lParam1: DWORD; lParam2: DWORD): DWORD; stdcall;
var
  Handle: DWORD;
  DriverProc: TDriverProc;
begin
    Handle:= LoadLibrary(PChar('divx.dll'));
    @DriverProc:= GetProcAddress(Handle,'DriverProc');
    ShowMessage(IntToStr(DriverProc(0,0,DRV_LOAD,0,0)));// тут $1 это соотвествует DRV_OK как я понимаю драйвер загрузился успешно
    ShowMessage(IntToStr(DriverProc(0,0,DRV_OPEN,0,0)));// тут $F43C40 а не $FFFF0000 :(
    FreeLibrary(Handle);
end;


Это сообщение отредактировал(а) Ak47black - 14.1.2007, 14:20

Присоединённый файл ( Кол-во скачиваний: 8 )
Присоединённый файл  vcompddk.rar 50,24 Kb
PM MAIL   Вверх
MetalFan
Дата 15.1.2007, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


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

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



есть же DSPack, зачем велосипед изобретать?!


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Ak47black
Дата 15.1.2007, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2205
Регистрация: 2.12.2005

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



Там же нету широких возможностей перекодировкм форматов?
А при помоши библиотеки vfw большие файлы неполучаеться у меня полностью перекодировать, точнее частично так там получаеться только одно видео без аудио  smile 
PM MAIL   Вверх
MetalFan
Дата 15.1.2007, 22:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


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

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



Ak47black, почему нету?! вся мощь directX в твоих руках. строишь цепочку что там куда(граф) и кодируй на здоровье
вот, скачай, посмотри демки. там примеры толковые)


Это сообщение отредактировал(а) MetalFan - 15.1.2007, 22:45


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Ak47black
Дата 15.1.2007, 23:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2205
Регистрация: 2.12.2005

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



MetalFan, чтото я там непонимаю ,немогу понять какой пример перекодирование демонстрирует  smile ?
Demos\D6-D7\Compress\DIVX Compressor\ этот пример если делает файл то почемуто он выходит 0 kb 
Мне нужно сделать чтобы список кодеков выдавался ,а после с выбранным начинался процес перекодировки. 

Это сообщение отредактировал(а) Ak47black - 15.1.2007, 23:11
PM MAIL   Вверх
MetalFan
Дата 15.1.2007, 23:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


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

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



Ak47black, разбираться надо! большая часть " супер-пупер конверторов всех форматов" через DirectShow и работает)
а DSPack - это обертка над оным для делфи и билдера.
я уже не помню, но однажды с этим ковырялся - ничего сложного, если разобраться.


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Ak47black
Дата 15.1.2007, 23:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2205
Регистрация: 2.12.2005

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



Ок спасибо. Буду пробовать завтра на свежую голову.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

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


 




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


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

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