Delphi and C# (ActiveX) sample code.
Currently, there are several options for connecting third-party DirectShow filters for you to be able to get the necessary format.
An audio codec, a video codec and a multiplexer – different filters You can use both DirectShow filters and regular codecs as codecs.
A multiplexer, a video codec and an audio codec – one and the same filter.
Another difference is whether the filter can write to a file itself, or you should use the standard File Writer filter, or you need another special filter.
In the first two cases, VisioForge Video Capture will detect it automatically and set the necessary parameters, but you have to specify the necessary filter yourself in the third case.
And now let us see what the code for different options looks like.
Get lists of audio and video codecs
for I := 0 to VideoCapture1.Video_Codecs_GetCount - 1 do cbCustomVideoCodec.Items.Add(VideoCapture1.Video_Codecs_GetItem(i)); for I := 0 to VideoCapture1.Audio_Codecs_GetCount - 1 do cbCustomAudioCodec.Items.Add(VideoCapture1.Audio_Codecs_GetItem(i));
for (int i = 0; i < VideoCapture1.Video_Codecs_GetCount(); i++) cbCustomVideoCodecs.Items.Add(VideoCapture1.Video_Codecs_GetItem(i)); for (int i = 0; i < VideoCapture1.Audio_Codecs_GetCount(); i++) cbCustomAudioCodecs.Items.Add(VideoCapture1.Audio_Codecs_GetItem(i));
for I := 0 to VideoCapture1.DirectShow_Filters_GetCount - 1 do begin cbCustomDSFilterV.Items.Add(VideoCapture1.DirectShow_Filters_GetItem(i)); cbCustomDSFilterA.Items.Add(VideoCapture1.DirectShow_Filters_GetItem(i)); cbCustomMuxer.Items.Add(VideoCapture1.DirectShow_Filters_GetItem(i)); cbCustomFilewriter.Items.Add(VideoCapture1.DirectShow_Filters_GetItem(i)); end;
for (int i = 0; i < VideoCapture1.DirectShow_Filters_GetCount(); i++) { cbCustomDSFilterA.Items.Add(VideoCapture1.DirectShow_Filters_GetItem(i)); cbCustomDSFilterV.Items.Add(VideoCapture1.DirectShow_Filters_GetItem(i)); cbCustomMuxer.Items.Add(VideoCapture1.DirectShow_Filters_GetItem(i)); cbCustomFilewriter.Items.Add(VideoCapture1.DirectShow_Filters_GetItem(i)); }
if rbCustomUseVideoCodecsCat.Checked then begin VideoCapture1.Custom_Output_Video_Codec := cbCustomVideoCodec.Items[cbCustomVideoCodec.ItemIndex]; VideoCapture1.Custom_Output_Video_Codec_Use_Filters_Category := false; end else begin VideoCapture1.Custom_Output_Video_Codec := cbCustomDSFilterV.Items[cbCustomDSFilterV.ItemIndex]; VideoCapture1.Custom_Output_Video_Codec_Use_Filters_Category := true; end; if rbCustomUseAudioCodecsCat.Checked then begin VideoCapture1.Custom_Output_Audio_Codec := cbCustomAudioCodec.Items[cbCustomAudioCodec.ItemIndex]; VideoCapture1.Custom_Output_Audio_Codec_Use_Filters_Category := false; end else begin VideoCapture1.Custom_Output_Audio_Codec := cbCustomDSFilterA.Items[cbCustomDSFilterA.ItemIndex]; VideoCapture1.Custom_Output_Audio_Codec_Use_Filters_Category := true; end; VideoCapture1. Custom_Output_Mux_Filter_Name := cbCustomMuxer.Items[cbCustomMuxer.ItemIndex];
if (rbCustomUseVideoCodecsCat.Checked) { VideoCapture1.Custom_Output_Video_Codec = cbCustomVideoCodecs.Text; VideoCapture1.Custom_Output_Video_Codec_Use_Filters_Category = false; } else { VideoCapture1.Custom_Output_Video_Codec = cbCustomDSFilterV.Text; VideoCapture1.Custom_Output_Video_Codec_Use_Filters_Category = true; }; if (rbCustomUseAudioCodecsCat.Checked) { VideoCapture1.Custom_Output_Audio_Codec = cbCustomAudioCodecs.Text; VideoCapture1.Custom_Output_Audio_Codec_Use_Filters_Category = false; } else { VideoCapture1.Custom_Output_Audio_Codec = cbCustomDSFilterA.Text; VideoCapture1.Custom_Output_Audio_Codec_Use_Filters_Category = true; }; VideoCapture1.Custom_Output_Mux_Filter_Name = cbCustomMuxer.Text;
Get lists of DirectShow filters.
for I := 0 to VideoCapture1.DirectShow_Filters_GetCount - 1 do begin cbCustomDSFilterV.Items.Add(VideoCapture1.DirectShow_Filters_GetItem(i)); cbCustomDSFilterA.Items.Add(VideoCapture1.DirectShow_Filters_GetItem(i)); cbCustomMuxer.Items.Add(VideoCapture1.DirectShow_Filters_GetItem(i)); cbCustomFilewriter.Items.Add(VideoCapture1.DirectShow_Filters_GetItem(i)); end;
for (int i = 0; i < VideoCapture1.DirectShow_Filters_GetCount(); i++) { cbCustomDSFilterA.Items.Add(VideoCapture1.DirectShow_Filters_GetItem(i)); cbCustomDSFilterV.Items.Add(VideoCapture1.DirectShow_Filters_GetItem(i)); cbCustomMuxer.Items.Add(VideoCapture1.DirectShow_Filters_GetItem(i)); cbCustomFilewriter.Items.Add(VideoCapture1.DirectShow_Filters_GetItem(i)); }
VideoCapture1.Custom_Output_Mux_Filter_Name := cbCustomMuxer.Items[cbCustomMuxer.ItemIndex]; VideoCapture1.Custom_Output_Mux_Filter_Is_Encoder := cbCustomMuxFilterIsEncoder.Checked;
VideoCapture1.Custom_Output_Mux_Filter_Name = cbCustomMuxer.Text; VideoCapture1.Custom_Output_Mux_Filter_Is_Encoder = cbCustomMuxFilterIsEncoder.Checked;
VideoCapture1.Custom_Output_Special_FileWriter_Needed := cbUseSpecialFilewriter.Checked; VideoCapture1.Custom_Output_Special_FileWriter_Filter_Name := cbCustomFilewriter.Items[cbCustomFilewriter.ItemIndex];
VideoCapture1.Custom_Output_Special_FileWriter_Needed = cbUseSpecialFilewriter.Checked; VideoCapture1.Custom_Output_Special_FileWriter_Filter_Name = cbCustomFilewriter.Text;
VideoCapture1.Start;
VideoCapture1.Start();