C# TV Source - capture.VideoSources Fehler!

fastfred

Mitglied
Hallo Community,

ich habe es endlich geschafft die TV Karte anzusprechen. Eigentlich ganz easy. Funktioniert auch alles. Nur jetzt wollte ich eine Liste machen, wo ich das Eingangssignal auswähle(Tuner, Composite, S-Video, etc.). Die Liste ist auch schon fertig und es werden die möglichen Eingänge ausgelesen. Jetzt wollte ich das so machen, dass man das Eingangssignal aus der Liste auswählen kann. Nur es kommt beim Klicken auf den Preview-Button immer ein Fehler:

ArgumentOutOfRangeException was unhandled

Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index

Hier der Code des Buttons:
Code:
int m = 0;
                int n = 0;
                if (videodeviceselector.geräteliste.SelectedItems.Count > 0)
                { m = videodeviceselector.geräteliste.SelectedItems[0].Index; }
                else { m = 0; }
                
                Filter videoDevice = filters.VideoInputDevices[m];
                Filter audioDevice = null;
                capture = new Capture(videoDevice, audioDevice);
                if (videodeviceselector.sourceliste.SelectedItems.Count > 0)
                { capture.VideoSource = capture.VideoSources[videodeviceselector.sourceliste.SelectedItems[0].Index]; }
                else { capture.VideoSource = capture.VideoSources[0]; }
                
                capture.PreviewWindow = videoPanel;

Weiß jemand wodran es liegen könnte?

Gruß

Fast Fred
 

Christian Kusmanow

Erfahrenes Mitglied
Hi Fast Fred!

Welche Frameworkversion verwendest denn?
Und was verwendest als DirectX Wrapper, die Solution von TheCodeProject?
Und zu guter letzt, in welcher Zeile tritt denn der Fehler auf? ;-]

Schon mal was von Try-Catch gehört? Wenn nicht, geleich mal das Sticky im .NET Café angucken.
Debugge dann das Ganze mal bis zu der entsprechenden Zeile und schau mal nach
ob überhaupt genügend Elemente in der Collection drinn waren die die Ausnahme geworfen hat.
 

fastfred

Mitglied
Ich baue mir das aus dem TheCodeProject-Projekt zusammen mit Framework 2.0.

Ich habe das mal mit try-catch gemacht und dann hat er mir fast das selbe wie beim Debugger ausgespuckt(siehe angehängte Grafik).

Und das ist der auslöser für den Fehler:
Code:
int m = 0;
                int n = 0;
                if (videodeviceselector.geräteliste.SelectedItems.Count > 0)
                { m = videodeviceselector.geräteliste.SelectedItems[0].Index; }
                else { m = 0; }
                
                Filter videoDevice = filters.VideoInputDevices[m];
                Filter audioDevice = null;
                capture = new Capture(videoDevice, audioDevice);
                if (videodeviceselector.sourceliste.SelectedItems.Count > 0)
                { capture.VideoSource = capture.VideoSources[videodeviceselector.sourceliste.SelectedItems[0].Index]; }
                else { capture.VideoSource = capture.VideoSources[0]; }
                
                capture.PreviewWindow = videoPanel;
 

Anhänge

  • 25899attachment.jpg
    25899attachment.jpg
    67,5 KB · Aufrufe: 85

Christian Kusmanow

Erfahrenes Mitglied
In deinen capture.VideoSources gibt also kein Objekt an dem angegeben Index
(sourceliste.SelectedItems[0].Index)
Musst halt schauen, dass der richtige Index vorhanden ist...
 

fastfred

Mitglied
mhhh....das stimmt. Nur wenn ich mal testweise anstatt
Code:
capture.VideoSource = capture.VideoSources[videodeviceselector.sourceliste.SelectedItems[0].Index];
sage:
Code:
capture.VideoSource = capture.VideoSources[0];

kommt genau der selbe Fehler. Oder bin ich jetzt gnaz falsch^^


Gruß

Fast Fred
 

fastfred

Mitglied
Ich habe den Fehler gefunden!
Und zwar dürfen
Code:
capture = new Capture(videoDevice, audioDevice);
und
Code:
capture.VideoSource = capture.VideoSources[0];

nicht in einem Void sein! Habe das getrennt gemacht. Zum testen einfach mal
Code:
capture = new Capture(videoDevice, audioDevice);
in den Form1_Load Void und den anderen Code in den Button-Void. Und siehe da - es hat geklappt.

Trotzdem vielen Dank für eure Bemühungen :).

Gruß

Fast Fred
 

Neue Beiträge