デバイス モード
[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayer、IMFMediaEngine、および Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayer、IMFMediaEngine、Audio/Video Capture を使用することを強くお勧めします。 Microsoft は、従来の API を使用する既存のコードを、可能であれば新しい API を使用するように書き直すよう提案しています。]
IEEE 1394 および USB ビデオカメラでは、カメラ モードとビデオ テープ レコーダー (VTR) モードを切り替えることができます。 IEEE 1394ビデオカメラがモードを切り替えると、デバイスがリセットされ、アプリケーションはそれを再び列挙する必要があります。 アプリケーションがプログラムでモードを切り替える方法はありません。 一方、USBビデオカメラはリセットせずにカメラとVTRモードを切り替えることができるので、アプリケーションはモードを変更することができます。
MSDV ドライバー
IEEE 1394 デバイスで現在のモードを取得するには、値が ED_DEVCAP_DEVICE_TYPE の IAMExtDevice::GetCapability メソッドを呼び出します。 メソッドがED_DEVTYPE_VCR値を返す場合、デバイスは VTR モードであり、一時停止、停止、fast-forward、巻き戻しなどの機能があります。 それ以外の場合、メソッドが ED_DEVTYPE_CAMERAを返す場合、デバイスはカメラ モードになります。 次のコード例は、デバイスの種類を照会する方法を示しています。
if (MyDevCap.bHasDevice)
{
LONG lDeviceType = 0;
MyDevCap.pDevice->GetCapability(ED_DEVCAP_DEVICE_TYPE, &lDeviceType, 0);
if (lDeviceType == ED_DEVTYPE_VCR)
{
// Device is a VTR. Enable all VTR functions.
}
else
{
// Device is a camera.
// Enable record and record-pause; disable other functions.
}
}
ビデオカメラがオフラインになった場合は、次に使用可能になったときにもう一度クエリを実行する必要があります。 フィルター グラフ マネージャーは、デバイスが削除されたときに EC_DEVICE_LOST イベントを投稿します。
UVC ドライバー
USB ビデオ デバイスはリセットせずにモードを切り替えることができるため、前の例で示したコードは USB デバイスでは信頼できません。 代わりに、 ISelector インターフェイスを使用して現在のモードを取得します。 デバイスでサポートされている場合は、このインターフェイスを使用してプログラムでモードを切り替えることもできます。
関連トピック