最近DirectShowでマルチメディアプレーヤーアプリを開発しています。ウェブグラフからビデオストリームをキャプチャするためのフィルタグラフを作成できます。ビデオキャプチャを扱う際に、いくつかの新しいアナログビデオフォーマットを使用したり、新しい物理コネクタにルーティングするにはどうすればよいですか?
MSDNのDirectShowドキュメントを読んで、WDMビデオキャプチャフィルタがIAMAnalogVideoDecoderインターフェイスを公開していて、AnalogVideoStandard列挙型のアナログビデオ形式を設定できることがわかりましたが、この列挙型には720p、1080i、 1080:キャプチャカードが複数の物理的な入力があるとき
typedef /* [v1_enum] */
enum tagAnalogVideoStandard
{
AnalogVideo_None = 0,
AnalogVideo_NTSC_M = 0x1,
AnalogVideo_NTSC_M_J = 0x2,
AnalogVideo_NTSC_433 = 0x4,
AnalogVideo_PAL_B = 0x10,
AnalogVideo_PAL_D = 0x20,
AnalogVideo_PAL_G = 0x40,
AnalogVideo_PAL_H = 0x80,
AnalogVideo_PAL_I = 0x100,
AnalogVideo_PAL_M = 0x200,
AnalogVideo_PAL_N = 0x400,
AnalogVideo_PAL_60 = 0x800,
AnalogVideo_SECAM_B = 0x1000,
AnalogVideo_SECAM_D = 0x2000,
AnalogVideo_SECAM_G = 0x4000,
AnalogVideo_SECAM_H = 0x8000,
AnalogVideo_SECAM_K = 0x10000,
AnalogVideo_SECAM_K1 = 0x20000,
AnalogVideo_SECAM_L = 0x40000,
AnalogVideo_SECAM_L1 = 0x80000,
AnalogVideo_PAL_N_COMBO = 0x100000,
AnalogVideoMask_MCE_NTSC = ((((((AnalogVideo_NTSC_M | AnalogVideo_NTSC_M_J) | AnalogVideo_NTSC_433) | AnalogVideo_PAL_M) | AnalogVideo_PAL_N) | AnalogVideo_PAL_60) | AnalogVideo_PAL_N_COMBO) ,
AnalogVideoMask_MCE_PAL = ((((AnalogVideo_PAL_B | AnalogVideo_PAL_D) | AnalogVideo_PAL_G) | AnalogVideo_PAL_H) | AnalogVideo_PAL_I) ,
AnalogVideoMask_MCE_SECAM = (((((((AnalogVideo_SECAM_B | AnalogVideo_SECAM_D) | AnalogVideo_SECAM_G) | AnalogVideo_SECAM_H) | AnalogVideo_SECAM_K) | AnalogVideo_SECAM_K1) | AnalogVideo_SECAM_L) | AnalogVideo_SECAM_L1)
} AnalogVideoStandard;
多くはである何、クロスバーフィルタが自動的に追加されますと、私は私がPhysicalConnectorType列挙型を使用したい入力の経路が、HDMIなどのいくつかの新しい入力することができます含まれていません:
typedef
enum tagPhysicalConnectorType
{
PhysConn_Video_Tuner = 1,
PhysConn_Video_Composite = (PhysConn_Video_Tuner + 1) ,
PhysConn_Video_SVideo = (PhysConn_Video_Composite + 1) ,
PhysConn_Video_RGB = (PhysConn_Video_SVideo + 1) ,
PhysConn_Video_YRYBY = (PhysConn_Video_RGB + 1) ,
PhysConn_Video_SerialDigital = (PhysConn_Video_YRYBY + 1) ,
PhysConn_Video_ParallelDigital = (PhysConn_Video_SerialDigital + 1) ,
PhysConn_Video_SCSI = (PhysConn_Video_ParallelDigital + 1) ,
PhysConn_Video_AUX = (PhysConn_Video_SCSI + 1) ,
PhysConn_Video_1394 = (PhysConn_Video_AUX + 1) ,
PhysConn_Video_USB = (PhysConn_Video_1394 + 1) ,
PhysConn_Video_VideoDecoder = (PhysConn_Video_USB + 1) ,
PhysConn_Video_VideoEncoder = (PhysConn_Video_VideoDecoder + 1) ,
PhysConn_Video_SCART = (PhysConn_Video_VideoEncoder + 1) ,
PhysConn_Video_Black = (PhysConn_Video_SCART + 1) ,
PhysConn_Audio_Tuner = 0x1000,
PhysConn_Audio_Line = (PhysConn_Audio_Tuner + 1) ,
PhysConn_Audio_Mic = (PhysConn_Audio_Line + 1) ,
PhysConn_Audio_AESDigital = (PhysConn_Audio_Mic + 1) ,
PhysConn_Audio_SPDIFDigital = (PhysConn_Audio_AESDigital + 1) ,
PhysConn_Audio_SCSI = (PhysConn_Audio_SPDIFDigital + 1) ,
PhysConn_Audio_AUX = (PhysConn_Audio_SCSI + 1) ,
PhysConn_Audio_1394 = (PhysConn_Audio_AUX + 1) ,
PhysConn_Audio_USB = (PhysConn_Audio_1394 + 1) ,
PhysConn_Audio_AudioDecoder = (PhysConn_Audio_USB + 1)
} PhysicalConnectorType;
DirectShowは古いマルチメディアフレームワークであり、ヘッダーが時間切れである可能性があります。 DirectShowに新しい標準を適用する方法はありますか? DirectShowの他の再配布はありますか?それとも、私はDirectShowを使ってあきらめて、代わりにMedia Foundationを使うべきですか?
はいシステムデバイスを列挙し、ドライバによって登録されたソースフィルタを取得するためにBindToObject()を呼び出すことができます。つまり、ビデオ標準のようなソースフィルタのプロパティをカスタマイズしたいのであれば、特定のDirectShowインターフェイスの代わりにIKsPropertySetを使用する必要があります。 –
ビデオ出力ピンとサポートされている出力AM_MEDIA_TYPEを見つけることができます - いくつかのデバイスは、さまざまな出力フォーマットと解像度で多くのピンをサポートしています。しかし、それはデバイスによって異なります。一部のベンダーは、出力ピンのフォーマットと解像度を選択するために独自の インターフェイスを使用しています。 –
P.S.をお読みください。 –