Probleme mit Videocapture



  • Hi,
    ich habe Probs beim Capturen mit der AVICap WindowClass.
    Habe mir mithilfe der MSDN und diesem Forum folgenden Code zusammengeschustert (wobei das meiste noch der Standardcode von Dev-Cpp is):

    #include <windows.h>
    #include <Vfw.h>
    
    /*  Declare Windows procedure  */
    LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
    
    /*  Make the class name into a global variable  */
    char szClassName[ ] = "Webcam Testkrams";
    
    int WINAPI WinMain (HINSTANCE hThisInstance,
                        HINSTANCE hPrevInstance,
                        LPSTR lpszArgument,
                        int nFunsterStil)
    
    {
        HWND hwnd;               /* This is the handle for our window */
        MSG messages;            /* Here messages to the application are saved */
        WNDCLASSEX wincl;        /* Data structure for the windowclass */
    
        /* The Window structure */
        wincl.hInstance = hThisInstance;
        wincl.lpszClassName = szClassName;
        wincl.lpfnWndProc = WindowProcedure;      /* This function is called by windows */
        wincl.style = CS_DBLCLKS;                 /* Catch double-clicks */
        wincl.cbSize = sizeof (WNDCLASSEX);
    
        /* Use default icon and mouse-pointer */
        wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
        wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
        wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
        wincl.lpszMenuName = NULL;                 /* No menu */
        wincl.cbClsExtra = 0;                      /* No extra bytes after the window class */
        wincl.cbWndExtra = 0;                      /* structure or the window instance */
        /* Use Windows's default color as the background of the window */
        wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;
    
        /* Register the window class, and if it fails quit the program */
        if (!RegisterClassEx (&wincl))
            return 0;
    
        /* The class is registered, let's create the program*/
        hwnd = CreateWindowEx (
               0,                   /* Extended possibilites for variation */
               szClassName,         /* Classname */
               "Windows App",       /* Title Text */
               WS_OVERLAPPEDWINDOW, /* default window */
               CW_USEDEFAULT,       /* Windows decides the position */
               CW_USEDEFAULT,       /* where the window ends up on the screen */
               544,                 /* The programs width */
               375,                 /* and height in pixels */
               HWND_DESKTOP,        /* The window is a child-window to desktop */
               NULL,                /* No menu */
               hThisInstance,       /* Program Instance handler */
               NULL                 /* No Window Creation data */
               );
    
        /* Make the window visible on the screen */
        ShowWindow (hwnd, nFunsterStil);
    
        /* Run the message loop. It will run until GetMessage() returns 0 */
        while (GetMessage (&messages, NULL, 0, 0))
        {
            /* Translate virtual-key messages into character messages */
            TranslateMessage(&messages);
            /* Send message to WindowProcedure */
            DispatchMessage(&messages);
        }
    
        /* The program return-value is 0 - The value that PostQuitMessage() gave */
        return messages.wParam;
    }
    
    /*  This function is called by the Windows function DispatchMessage()  */
    
    LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
        static HWND hwndVideo;
    
        switch (message)                  /* handle the messages */
        {
            case WM_CREATE : 
                   hwndVideo = capCreateCaptureWindow( (LPSTR)"WebCam", 
                                                        WS_CHILD| WS_VISIBLE | WS_MAXIMIZE, 
                                                        0, 0, CW_USEDEFAULT, CW_USEDEFAULT,(HWND) hwnd, (int) 3); 
                   return 0 ;
    
            case WM_DESTROY:
                PostQuitMessage (0);       /* send a WM_QUIT to the message queue */
                break;
            default:                      /* for messages that we don't deal with */
                return DefWindowProc (hwnd, message, wParam, lParam);
        }
    
        return 0;
    }
    

    Habe ebenfalls die libvfw32.a included.

    Der Code is natürlich noch nciht ausreichend für nen vollständiges Capturen, aber ich wollte schonmal zur Fehlersuche compilen und bekomme folgenden Fehler:

    86 C:\Dokumente und Einstellungen\NobodysNightmare\Eigene Dateien\C++ Files\Webcam\main.cpp `capCreateCaptureWindow' undeclared (first use this function)

    Nur wie kommt der zustande?
    Ich hab mir nen paar Beispielsources durchgelesen, aba nirgends ne weitere Datei gefunden die ich includen müsste. In der MSDN steht auch nur diese Datei und die lib.

    Weiß eina von euch Rat?

    Auron

    edit: was noch wichtig sein könnte: Ich verwende Dev-Cpp Version 4.9.9.1



  • melde das doch den entwickerln von mingw. kannst du bei sourceforge in den bug report eintragen. hab ich auch gemacht und es wurde hinzugefügt in der nächsten version.



  • verwendet der standardmäßig mingw?
    hmpfk... ich weiß nur, dass der das mitinstalled hat... ich kenn ja cnihtmal vor oda nachteile und sowas davon.

    Krieg ich Dev-Cpp auch erstmal dazu die Standarddinger zu verwenden? oda hat der nur noch mingw?



  • MinGW ist der Compiler der von der IDE Dev-C++ verwendet wird.

    Du kannst dir doch selbst die Zeile in den Header schreiben oder mit CreateWindowEx gehts wahrscheinlich auch.



  • aso... naja, ich dachte der verwendet das Ding nur optional ^^

    naja, ich versuchs mir mal selbst reinzuschreiben... wenn ich das hinbekomme werd ich mich erstmal ne Runde wundern.

    Schonmal danke für die Hilfe.

    Auron

    P.S.: Krieg ich Dev-Cpp auch dazu wieda den alten Compiler zu nutzen? (bin der Meinung die haben mal nen anderen benutzt)

    P.P.S.: Bzw. hat irgendwer bereits nen Header der das kann, bzw. könnte mir erklären wo ich das da einfügen müsste? 😮



  • Header ändern bringt nichts. In der lib ist es auch nicht drin und die kann man ja nicht einfach ändern.

    CreateWindowEx



  • Dann eben die Funktionen manuell deklarieren und LoadLibary() benutzen...
    ...ist dann zwar etwas aufwändiger 😉



  • die funktion capCreateCaptureWindow ist in libvfw32.a und im libavicap32.a library vom mingw enthalten. Die vfw.h zumindest in der neusten Version(4.9.9.2). Welche Version vom devcpp hast Du denn? Post ma bitte Dein compile log.
    Ach ja, Leerzeichen in Pfaden sowie hier: "C:\Dokumente und Einstellungen\NobodysNightmare\Eigene Dateien\C++ Files\Webcam\main.cpp" sollte man beim Dev vermeiden, dessen compiler ist ne unix-portierung und mag die nicht.
    Empfohlen wird c:\Projekte\ oder sowas, funzte bei mir aber bisher in allen Verzeichnissen, sofern sie keine Leerzeichen enthielten.

    sen$ai



  • hmmm...
    damit hatte ich BISHER noch keine probs... allerdings wurde auf meine anfrage bei mingw folgendes geantwortet:

    Date: 2005-04-25 00:09
    Sender: dannysmith
    Logged In: YES
    user_id=11494

    Prototypes added to vfw.h
    Danny

    wenn ich das nu richtig sehe wurde es also erst hinzugefügt... nur komisch, dass es dann ebi dir drinne is.

    Naja, ich werd mir demnächst mal V 4.9.9.2 ziehen.
    Damit is das Prob wohl erledigt...



  • hm, ich hab grad nochma in die vfw.h reingeguckt, die Funktion ist dort tatsächlich nicht deklariert, ist aber im besagten Lib drin. Von daher glaub ich auch nicht dass es mit der 4.9.9.2 behoben sein wird. Mußt wohl doch selbst den Prototyp in den Header eintragen, aber das sollte zu schaffen sein 😉



  • ne, 4992 hilft nix...

    also einfach irgendwo reinschreiben? (natürlich innerhalb des #ifdef's), oda sollte ich noch mehr beachten?

    Nungut, ich schaue mal... werd dann wohol auch gleich noch alle weiteren fehlenden prototypen adden müssen.



  • Soll ich jetzt mal "klugscheißen"?

    Schreib mal

    #include <vfw.h>
    

    statt

    #include <Vfw.h>
    

    dann klappt das auch! (bei mir zumindest) 😉



  • el Clio schrieb:

    Schreib mal

    #include <vfw.h>
    

    statt

    #include <Vfw.h>
    

    *lol*



  • dachte das wäre unter Windows egal....
    hmmpfk


Anmelden zum Antworten