Avatar billede yeti_a_r_c Nybegynder
01. oktober 2006 - 14:07 Der er 1 kommentar

USB kamera i Visual Studio

Hej
Er ved at lave et projekt hvor vi skal indlæse billeder fra et USB kamera. Koden skrives i C og har forsøgt mig med nogle eksempler jeg har fundet på nettet men ikke rigtigt lykkedes at få hul igennem endnu. Kan ikke rigtigt blive klog på om det er muligt at bruge HID klassen til et webkamera. Kunne godt tyde på at jeg ikke kan da jeg aldrig får VID eller PID på kameraet. Har indsat test koden jeg har forsøgt med underneden. Håber der er nogen der ved nogen om problemet.

På forhånd tak

#include "SPEC.h"
#include <stdio.h>
#include <windows.h>
#include <Winbase.h>
#include <Windef.h>
#include CAMERA_CONTROL
//#include HIDSDI



//extern "C"
//{
#include SETUP_API
//#include "hidclass.h"
//}


HDEVINFO hDeviceInfo;
GUID HidGuid;

HANDLE DeviceHandle = 0;
HANDLE hComm = 0;
HINSTANCE hHID = NULL;
BOOLEAN Result;
SP_DEVICE_INTERFACE_DATA MyDeviceInterfaceData;
PSP_DEVICE_INTERFACE_DETAIL_DATA DetailData;
u16 MemberIndex;
u32 Length;
u8 test = 0;
u16 error;

u8 testHID[] = "USB\VID_046D&PID_08A9&MI_01\6&16584B9B&0&0001";


int main(void)
{

//Pointers to a function are used, therefore:
typedef VOID (__stdcall *PHidD_GetProductString)(HANDLE, PVOID, ULONG);
typedef VOID (__stdcall *PHidD_GetHidGuid)(LPGUID);
//typedef BOOLEAN (__stdcall *PHidD_GetAttributes)(HANDLE, PHIDD_ATTRIBUTES);
typedef BOOLEAN (__stdcall *PHidD_SetFeature)(HANDLE, PVOID, ULONG);
typedef BOOLEAN (__stdcall *PHidD_GetFeature)(HANDLE, PVOID, ULONG);

PHidD_GetProductString HidD_GetProductString = NULL;
PHidD_GetHidGuid HidD_GetHidGuid = NULL;
//PHidD_GetAttributes HidD_GetAttributes = NULL;
PHidD_SetFeature HidD_SetFeature = NULL;
PHidD_GetFeature HidD_GetFeature = NULL;

//Load the library:
hHID = LoadLibrary("HID.DLL");
if (!hHID){
    printf("Failed to load HID.DLL.");
            }
//Update the pointers:
HidD_GetProductString = (PHidD_GetProductString)
    GetProcAddress(hHID, "HidD_GetProductString");

HidD_GetHidGuid = (PHidD_GetHidGuid)
    GetProcAddress(hHID, "HidD_GetHidGuid");

//HidD_GetAttributes = (PHidD_GetAttributes)
//    GetProcAddress(hHID, "HidD_GetAttributes");

HidD_SetFeature = (PHidD_SetFeature)
    GetProcAddress(hHID, "HidD_SetFeature");

HidD_GetFeature = (PHidD_GetFeature)
    GetProcAddress(hHID, "HidD_GetFeature");

MemberIndex = 0;
MyDeviceInterfaceData.cbSize = sizeof(MyDeviceInterfaceData);

//SetupDiGetClassDevs();


HidD_GetHidGuid(&HidGuid);

//SetupDiClassGuidsFromName("USB", &HidGuid, 1, &Length);

hDeviceInfo = SetupDiGetClassDevs(&HidGuid,
                                  NULL,
                                  NULL,
                                  DIGCF_PRESENT|DIGCF_INTERFACEDEVICE);

if (hDeviceInfo == INVALID_HANDLE_VALUE){
    while(test < 10){
    test += 1;}
}

Result = SetupDiEnumDeviceInterfaces(hDeviceInfo,
                                    0,
                                    &HidGuid,
                                    MemberIndex,
                                    &MyDeviceInterfaceData);

Result = SetupDiGetDeviceInterfaceDetail(hDeviceInfo,
                                        &MyDeviceInterfaceData,
                                        NULL,
                                        0,
                                        &Length,
                                        NULL);
DetailData = (PSP_DEVICE_INTERFACE_DETAIL_DATA)malloc(Length);

DetailData ->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);

Result = SetupDiGetDeviceInterfaceDetail(hDeviceInfo,
                                        &MyDeviceInterfaceData,
                                        DetailData,
                                        Length,
                                        &Length,
                                        NULL);

SetupDiDestroyDeviceInfoList(hDeviceInfo);

DeviceHandle = CreateFile(DetailData->DevicePath,
                          GENERIC_READ,
                          FILE_SHARE_READ,/* | FILE_SHARE_WRITE, */
                          NULL,
                          OPEN_EXISTING,
                          NULL,
                          NULL);

if(DeviceHandle == INVALID_HANDLE_VALUE){
printf("could not open handle");
}


    while(1)
    {

    }
}
Avatar billede mollevp Nybegynder
02. oktober 2006 - 22:27 #1
Hej,
Jeg ved ikke om det kan hjælpe dig, men der findes en side yov408.com som har en del gode resurser. Der er bla. en tråd om Webcam programmering i deres forum.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester