DirectShow ビデオ入力パラメータクラス

Namespace: FVIL.DS
Assembly: FVILforms (in FVILforms.dll) Version: 3.1.0.0 (3.1.0.9)

Syntax

C#
[SerializableAttribute]
public class CFviGrabberParam : ICloneable, 
	IFviCopyable, IFviFileAccess
Visual Basic
<SerializableAttribute>
Public Class CFviGrabberParam
	Implements ICloneable, IFviCopyable, IFviFileAccess

Remarks

このクラスは、カメラの GUID や映像フォーマット情報等を保有するものです。 主に CFviGrabber クラスの Create(CFviGrabberParam) で使用します。
このクラスの内容はカメラ毎(※1)に異なります。 SelectCameraFormGetParam()()()() を使用して取得してください。 保存する場合は、SaveXml(String, Object) 等をご使用ください。

注1:

このクラスに保存されるカメラの GUID はカメラの種別を識別する為のものですが、 以下の条件では同一のカメラでも GUID が異なりますのでご注意ください。

  • 32bit 版と 64bit 版
  • Windows の標準ドライバとカメラメーカーの専用ドライバ


初期値と範囲:
プロパティ初期値範囲説明
FilterCategory{860BB310-5D01-11d0-BD3B-00A0C911CE86}詳細はMSDN ライブラリをご参照ください.入力フィルタのカテゴリ
FilterInfoCFviFilterInfoの初期値CFviFilterInfoのインスタンス入力フィルタ - フィルタ情報
FilterPinInfoCFviPinInfoの初期値CFviPinInfoのインスタンス入力フィルタ - ピン情報
FilterFormatInfoCFviFormatInfoの初期値CFviFormatInfoのインスタンス入力フィルタ - フォーマット情報
SampleFormatInfoFormatType = RGB24, Width=0, Height=0CFviFormatInfoのインスタンスサンプルグラバー - フォーマット情報
RenderID{C1F400A4-3F08-11D3-9F0B-006008039E37}詳細はMSDN ライブラリをご参照ください.レンダーのクラス識別子

参照:
Microsoft DirectShow リファレンス(定数とGUID)
http://msdn.microsoft.com/ja-jp/library/cc353361.aspx (2010年6月現在)

Examples

保存するデバイス情報により、接続時の動作が異なります。 指定のデバイスについての情報を保存する場合と、デバイス番号のみ保存する場合があります。

ソースコード1:

指定のデバイスについての情報を保存する例です。
該当するデバイスが接続されていない場合は、接続時に例外が発行されます。

C# Copy imageCopy
using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using fvalgcli;
using System.Windows.Forms;
using FVIL.DS;

namespace User.SampleCode
{
    public partial class DS
    {
        /// <summary>
        /// パラメータの読み込みとパラメータの保存.
        /// </summary>
        /// <remarks>
        /// 指定のデバイスについての情報が保存した場合です.
        /// 該当のデバイスがないと、接続時に例外となります.
        /// </remarks>
        [FvPluginExecute]
        public void GrabberParam_Name()
        {
            try
            {
                // 1) カメラ選択ダイアログの表示.
                FVIL.DS.SelectCameraForm form = new FVIL.DS.SelectCameraForm();
                form.ShowDialog();

                // 2) パラメータの取得.
                FVIL.DS.CFviGrabberParam param = form.GetParam();

                // E) 確認.
                Console.Out.WriteLine("デバイス名    : {0}", param.FilterInfo.Name);

                // 3) パラメータの保存.
                string xmlfile = "..\\SampleCode\\DS\\DS.GrabberParam_Name.xml";
                param.Save(xmlfile);

                // E) 確認.
                {
                    // 1) インスタンスの生成.
                    FVIL.DS.CFviGrabberUI grabber = new FVIL.DS.CFviGrabberUI();

                    // 2) パラメータの読込.
                    FVIL.DS.CFviGrabberParam loadparam = new CFviGrabberParam();
                    loadparam.Load(xmlfile);
                    grabber.Controller.Create(loadparam);

                    // 3) 画像取り込み用バッファの設定.
                    grabber.Controller.ImageType = FVIL.ImageType.RGB24;
                    for (int index = 0; index < 3; index++)
                        grabber.Controller.Images.Add(new FVIL.Data.CFviImage());

                    grabber.Controller.Validate();

                    // 4) 入力の開始.
                    grabber.Controller.Run();

                    // 5) 1フレーム取り込み完了まで待機.
                    if (!grabber.Controller.Wait(1000))
                    {
                        Console.WriteLine("TimeOut");
                    }

                    // 6) 入力の停止.
                    grabber.Controller.Stop();

                    // E) 画像の保存.
                    FVIL.File.Function.SaveImageFile(Defs.ResultDir + "/DS.GrabberParam_Name.bmp", grabber.Controller.LastImage);
                }
            }
            catch (FVIL.CFviException ex)
            {
                Console.WriteLine("Function:{0} Error:{1}", ex.Function, ex.ErrorCode);
            }
        }
    }
}


Visual Basic Copy imageCopy
Imports System.Collections.Generic
Imports System.Text
Imports System.Drawing
Imports fvalgcli
Imports System.Windows.Forms
Imports FVIL.DS

Namespace SampleCode
    Public Partial Class DS
        ''' <summary>
        ''' パラメータの読み込みとパラメータの保存.
        ''' </summary>
        ''' <remarks>
        ''' 指定のデバイスについての情報が保存した場合です.
        ''' 該当のデバイスがないと、接続時に例外となります.
        ''' </remarks>
        <FvPluginExecute> _
        Public Sub GrabberParam_Name()
            Try
                ' 1) カメラ選択ダイアログの表示.
                Dim form As New FVIL.DS.SelectCameraForm()
                form.ShowDialog()

                ' 2) パラメータの取得.
                Dim param As FVIL.DS.CFviGrabberParam = form.GetParam()

                ' E) 確認.
                Console.Out.WriteLine("デバイス名" & vbTab & ": {0}", param.FilterInfo.Name)

                ' 3) パラメータの保存.
                Dim xmlfile As String = "..\SampleCode\DS\DS.GrabberParam_Name.xml"
                param.Save(xmlfile)

                ' E) 確認.
                If True Then
                    ' 1) インスタンスの生成.
                    Dim grabber As New FVIL.DS.CFviGrabberUI()

                    ' 2) パラメータの読込.
                    Dim loadparam As FVIL.DS.CFviGrabberParam = New CFviGrabberParam()
                    loadparam.Load(xmlfile)
                    grabber.Controller.Create(loadparam)

                    ' 3) 画像取り込み用バッファの設定.
                    grabber.Controller.ImageType = FVIL.ImageType.RGB24
                    For index As Integer = 0 To 2
                        grabber.Controller.Images.Add(New FVIL.Data.CFviImage())
                    Next

                    grabber.Controller.Validate()

                    ' 4) 入力の開始.
                    grabber.Controller.Run()

                    ' 5) 1フレーム取り込み完了まで待機.
                    If Not grabber.Controller.Wait(1000) Then
                        Console.WriteLine("TimeOut")
                    End If

                    ' 6) 入力の停止.
                    grabber.Controller.[Stop]()

                    ' E) 画像の保存.
                    FVIL.File.[Function].SaveImageFile(Defs.ResultDir & "/DS.GrabberParam_Name.bmp", grabber.Controller.LastImage)
                End If
            Catch ex As FVIL.CFviException
                Console.WriteLine("Function:{0} Error:{1}", ex.[Function], ex.ErrorCode)
            End Try
        End Sub
    End Class
End Namespace

保存したファイルは次のようになります.
Xml Copy imageCopy
<?xml version="1.0"?>
<CFviGrabberParam xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <FilterCategory>{860BB310-5D01-11d0-BD3B-00A0C911CE86}</FilterCategory>
  <FilterInfo>
    <Name>USB ビデオ デバイス</Name>
    <CLSID>{17CCA71B-ECD7-11D0-B908-00A0C9223196}</CLSID>
    <Index>0</Index>
  </FilterInfo>
  <FilterPinInfo>
    <Name>キャプチャ</Name>
    <Direction>PINDIR_OUTPUT</Direction>
  </FilterPinInfo>
  <FilterFormatInfo>
    <MediaType>{73646976-0000-0010-8000-00AA00389B71}</MediaType>
    <MediaSubType>{32595559-0000-0010-8000-00AA00389B71}</MediaSubType>
    <FormatType>{05589F80-C356-11CE-BF01-00AA0055595A}</FormatType>
    <VideoSize>
      <Width>640</Width>
      <Height>480</Height>
    </VideoSize>
  </FilterFormatInfo>
  <SampleFormatInfo>
    <MediaType>{73646976-0000-0010-8000-00AA00389B71}</MediaType>
    <MediaSubType>{E436EB7D-524F-11CE-9F53-0020AF0BA770}</MediaSubType>
    <FormatType>{05589F80-C356-11CE-BF01-00AA0055595A}</FormatType>
    <VideoSize>
      <Width>0</Width>
      <Height>0</Height>
    </VideoSize>
  </SampleFormatInfo>
  <RenderID>{C1F400A4-3F08-11D3-9F0B-006008039E37}</RenderID>
</CFviGrabberParam>


ソースコード2:

デバイス番号を保存する例です。
接続時のデバイス構成により、選択されるデバイスが異なることになりますが、 指定したパラメータ(この場合は、特定のサンプルグラバー - フォーマット)に対応していれば、 機種やメーカーに関わらず接続を開始することができます。 ただしデバイス番号が デバイスリストの大きさを超える値の場合には、接続時に例外が発行されます。

C# Copy imageCopy
using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using fvalgcli;
using System.Windows.Forms;
using FVIL.DS;

namespace User.SampleCode
{
    public partial class DS
    {
        /// <summary>
        /// パラメータの読み込みとパラメータの保存.
        /// </summary>
        /// <remarks>
        /// デバイス番号を保存した場合です.
        /// この場合、特定のサンプルグラバー - フォーマットに対応しているデバイスであれば、接続に成功します.
        /// </remarks>
        [FvPluginExecute]
        public void GrabberParam_Index()
        {
            try
            {
                // 1) インスタンスの生成
                FVIL.DS.CFviGrabberParam param = new FVIL.DS.CFviGrabberParam();

                // 2) パラメータの指定.
                {
                    // フィルタカテゴリ.
                    param.FilterCategory = "{860BB310-5D01-11d0-BD3B-00A0C911CE86}";

                    // フィルタ情報.
                    param.FilterInfo.Index = 0;

                    // ピン情報.
                    param.FilterPinInfo.Direction = PIN_DIRECTION.PINDIR_OUTPUT;

                    // サンプルグラバー - フォーマット情報.
                    param.SampleFormatInfo.MediaType = "{73646976-0000-0010-8000-00AA00389B71}";
                    param.SampleFormatInfo.MediaSubType = "{E436EB7D-524F-11CE-9F53-0020AF0BA770}";
                    param.SampleFormatInfo.FormatType = "{05589F80-C356-11CE-BF01-00AA0055595A}";

                    // レンダーのクラス識別子.
                    param.RenderID = "{C1F400A4-3F08-11D3-9F0B-006008039E37}";
                }

                // 3) パラメータの保存.
                string xmlfile = "..\\SampleCode\\DS\\DS.GrabberParam_Index.xml";
                param.Save(xmlfile);

                // E) 確認.
                {
                    // 1) インスタンスの生成.
                    FVIL.DS.CFviGrabberUI grabber = new FVIL.DS.CFviGrabberUI();

                    // 2) パラメータの読込.
                    FVIL.DS.CFviGrabberParam loadparam = new CFviGrabberParam();
                    loadparam.Load(xmlfile);
                    grabber.Controller.Create(loadparam);

                    // 3) 画像取り込み用バッファの設定.
                    grabber.Controller.ImageType = FVIL.ImageType.RGB24;
                    for (int index = 0; index < 3; index++)
                        grabber.Controller.Images.Add(new FVIL.Data.CFviImage());

                    grabber.Controller.Validate();

                    // 4) 入力の開始.
                    grabber.Controller.Run();

                    // 5) 1フレーム取り込み完了まで待機.
                    if (!grabber.Controller.Wait(1000))
                    {
                        Console.WriteLine("TimeOut");
                    }

                    // 6) 入力の停止.
                    grabber.Controller.Stop();

                    // E) 画像の保存.
                    FVIL.File.Function.SaveImageFile(Defs.ResultDir + "/DS.GrabberParam_Index.bmp", grabber.Controller.LastImage);
                }
            }
            catch (FVIL.CFviException ex)
            {
                Console.WriteLine("Function:{0} Error:{1}", ex.Function, ex.ErrorCode);
            }
        }
    }
}


Visual Basic Copy imageCopy
Imports System.Collections.Generic
Imports System.Text
Imports System.Drawing
Imports fvalgcli
Imports System.Windows.Forms
Imports FVIL.DS

Namespace SampleCode
    Public Partial Class DS
        ''' <summary>
        ''' パラメータの読み込みとパラメータの保存.
        ''' </summary>
        ''' <remarks>
        ''' デバイス番号を保存した場合です.
        ''' この場合、特定のサンプルグラバー - フォーマットに対応しているデバイスであれば、接続に成功します.
        ''' </remarks>
        <FvPluginExecute> _
        Public Sub GrabberParam_Index()
            Try
                ' 1) インスタンスの生成
                Dim param As New FVIL.DS.CFviGrabberParam()

                ' 2) パラメータの指定.
                If True Then
                    ' フィルタカテゴリ.
                    param.FilterCategory = "{860BB310-5D01-11d0-BD3B-00A0C911CE86}"

                    ' フィルタ情報.
                    param.FilterInfo.Index = 0

                    ' ピン情報.
                    param.FilterPinInfo.Direction = PIN_DIRECTION.PINDIR_OUTPUT

                    ' サンプルグラバー - フォーマット情報.
                    param.SampleFormatInfo.MediaType = "{73646976-0000-0010-8000-00AA00389B71}"
                    param.SampleFormatInfo.MediaSubType = "{E436EB7D-524F-11CE-9F53-0020AF0BA770}"
                    param.SampleFormatInfo.FormatType = "{05589F80-C356-11CE-BF01-00AA0055595A}"

                    ' レンダーのクラス識別子.
                    param.RenderID = "{C1F400A4-3F08-11D3-9F0B-006008039E37}"
                End If

                ' 3) パラメータの保存.
                Dim xmlfile As String = "..\SampleCode\DS\DS.GrabberParam_Index.xml"
                param.Save(xmlfile)

                ' E) 確認.
                If True Then
                    ' 1) インスタンスの生成.
                    Dim grabber As New FVIL.DS.CFviGrabberUI()

                    ' 2) パラメータの読込.
                    Dim loadparam As FVIL.DS.CFviGrabberParam = New CFviGrabberParam()
                    loadparam.Load(xmlfile)
                    grabber.Controller.Create(loadparam)

                    ' 3) 画像取り込み用バッファの設定.
                    grabber.Controller.ImageType = FVIL.ImageType.RGB24
                    For index As Integer = 0 To 2
                        grabber.Controller.Images.Add(New FVIL.Data.CFviImage())
                    Next

                    grabber.Controller.Validate()

                    ' 4) 入力の開始.
                    grabber.Controller.Run()

                    ' 5) 1フレーム取り込み完了まで待機.
                    If Not grabber.Controller.Wait(1000) Then
                        Console.WriteLine("TimeOut")
                    End If

                    ' 6) 入力の停止.
                    grabber.Controller.[Stop]()

                    ' E) 画像の保存.
                    FVIL.File.[Function].SaveImageFile(Defs.ResultDir & "/DS.GrabberParam_Index.bmp", grabber.Controller.LastImage)
                End If
            Catch ex As FVIL.CFviException
                Console.WriteLine("Function:{0} Error:{1}", ex.[Function], ex.ErrorCode)
            End Try
        End Sub
    End Class
End Namespace

保存したファイルは次のようになります.
Xml Copy imageCopy
<?xml version="1.0"?>
<CFviGrabberParam xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <FilterCategory>{860BB310-5D01-11d0-BD3B-00A0C911CE86}</FilterCategory>
  <FilterInfo>
    <Name />
    <CLSID />
    <Index>0</Index>
  </FilterInfo>
  <FilterPinInfo>
    <Name />
    <Direction>PINDIR_OUTPUT</Direction>
  </FilterPinInfo>
  <FilterFormatInfo>
    <MediaType />
    <MediaSubType />
    <FormatType />
    <VideoSize>
      <Width>0</Width>
      <Height>0</Height>
    </VideoSize>
  </FilterFormatInfo>
  <SampleFormatInfo>
    <MediaType>{73646976-0000-0010-8000-00AA00389B71}</MediaType>
    <MediaSubType>{E436EB7D-524F-11CE-9F53-0020AF0BA770}</MediaSubType>
    <FormatType>{05589F80-C356-11CE-BF01-00AA0055595A}</FormatType>
    <VideoSize>
      <Width>0</Width>
      <Height>0</Height>
    </VideoSize>
  </SampleFormatInfo>
  <RenderID>{C1F400A4-3F08-11D3-9F0B-006008039E37}</RenderID>
</CFviGrabberParam>

Inheritance Hierarchy

System..::..Object
FVIL.DS..::..CFviGrabberParam

See Also