C Globale Variable entfernen?



  • Hi,

    ich habe ein Programm bekommen, welches mithilfe von OpenCV eine Webcam ausliest und das Videobild in einem Fenster darstellt. Das Funktioniert gut.

    Ich habe das Projekt erweitert und eine zweite Webcam hinzugefügt. Wenn ich das Programm zweimal (parallel) starte und jeweils eine andere Webcam als Quelle angebe, kommt es zu Problemen. In beiden parallel laufenden Programmen, wird das gleiche Videobild dargestellt.

    Ich vermute, das liegt an der Globalen Variable: "CvCapture *capture"
    Diese enthält das Videobild. Dadurch das sie Global ist, greifen beide Programme darauf zu und das eine Überschreibt das Bild des anderen oder?
    Wie kriege ich es jetzt hin das ich ohne Globale Variable auskomme?

    Hier mal der grobe Aufbau mit den beiden Funktionen, die auf die capture Variable zugreifen.

    #include ...
    
    CvCapture *capture;
    
    void webcam_Start_wrapper(const boolean_T  *preview, const uint16_T *res_width, const uint16_T *res_height, int *webcamsource)
    {
       int wcs = *webcamsource - 1;    
       capture = cvCreateCameraCapture(wcs);
       cvSetCaptureProperty(capture,CV_CAP_PROP_FRAME_WIDTH,*res_width);
       cvSetCaptureProperty(capture,CV_CAP_PROP_FRAME_HEIGHT,*res_height);
    }
    
    void webcam_Terminate_wrapper(const boolean_T  *preview,char* model_name)
    {
        if ((int) *preview != 0)
        {   
            cvDestroyAllWindows();
        }
    
        cvReleaseCapture(&capture);
    }
    

    Danke schonmal!
    Gruß Daniel



  • Die Variable ist global in deinem Programm.
    Aber nicht global in deinem System.
    2 Programme -> 2 globale Variablen



  • Welchen Wert hat den *webcamsource?



  • Ich führe 2 mal die gleiche .exe aus. Ist meine Annahme mit der gleichen Variable dann falsch?

    webcamsource hat entweder 1 oder 2. Da der OpenCV aber bei 0 anfängt zu zählen muss ich noch eine 1 abziehen. Ich weiss das ist unschön, lässt sich aber nicht ändern weil webcamsource bei 1 anfängt und da habe ich keinen Einfluss drauf.

    Hast du eine andere Vermutung, warum in beiden Programmen das gleiche Videobild dargestellt wird?



  • Werden denn unterschiedliche Bilder für 1 und 2 angezeigt, wenn du es nur einmal laufen lässt?



  • Ja dann klappt es. Wenn ich dann eine andere Webcamsource angebe wechselt er zu der zweiten Webcam. Nur wenn ich beide Parallel laufen lassen wird es nix...


Anmelden zum Antworten