デバイス形式の機能の検出

アプリケーションは、ファイルを送信する前に、デバイスの再生機能を判断しようとする場合があります。 デバイスが送信するファイルの形式を処理できない場合、アプリケーションは、デバイスで使用できる形式にファイルをトランスコードしようとしたり、デバイスが要求されたファイルをサポートできないことをユーザーに通知したりする可能性があります。

大容量記憶装置クラス デバイスなどの一部のデバイスは、再生機能のないリムーバブル 記憶域メディアとしてのみ機能する場合があることに注意してください。 この場合、アプリケーションがデバイスに送信する前にファイルをトランスコードすることは不適切です。

IWMDMDevice::GetType メソッドを使用すると、デバイスでその機能を報告できますが、一部のデバイスでは、このメソッドの正しくない値が返されます。 デバイスにファイルをコピーする前に、再生が意図されているかどうかをユーザーに確認し、その場合は、デバイスの報告された形式のいずれかにファイルをトランスコードします (または、デバイスが任意の形式をサポートしている場合は妥当な形式)。 もう 1 つの方法は、デバイスでサポートされている形式として特に記載されているすべての形式が再生用であり、他のすべてのファイルを変更しないで転送する必要があることを前提とすることです。

転送するファイルの形式とデバイスでサポートされている形式を検出したら、トランスコードに最適なターゲット形式を決定できます。

以前は、アプリケーションがプロパティの 0 を返して、そのプロパティの値のサポートを示すのが一般的でした。 たとえば、_WAVEFORMATEX.nSamplesPerSec の値 0 は、任意のビット レートのサポートを示します。 ここで、任意の値のサポートを示す推奨される方法は、WMDM_PROP_DESCでWMDM_ENUM_PROP_VALID_VALUES_ANYを指定 する方法です。ValidValuesForm。 ただし、一部のプロパティは、特定のサポートを示すために正当に 0 を返すことができます。 たとえば、_BITMAPINFOHEADER.biSizeImage が 0 に設定されている場合、これはBI_RGBビットマップを示します。 0 個の値の例外は、関連する構造体のドキュメントに記載されています。

ただし、多くの場合、デバイスはフォーマット機能を適切に報告しないか、標準的な方法で報告しないことに注意することが重要です。 たとえば、デバイスでは、実際には特定の形式、または形式の種類内の特定のビット レートのみを処理できる場合に、任意の形式をサポートしていると報告されることがよくあります。 アプリケーションでこのようなレポートを受け入れる必要があるかどうか、またはデバイスの再生機能に対して何らかの上限 (192 kbps など) を想定する必要があるかどうかは、ユーザーが決定する必要があります。

デバイスの形式のサポートを要求するために推奨される方法は、 IWMDMDevice3::GetFormatCapability です。 このメソッドがサポートされていない場合、アプリケーションは IWMDMDevice::GetFormatSupport にフォールバックする必要があります。 GetFormatSupport は、 GetFormatSupport2 とは異なり、ビデオ情報を返しません。

アプリケーションがデバイスのフォーマット機能を要求する方法は、アプリケーションがサポートするインターフェイスによって異なります。 詳しくは、次のトピックをご覧ください。

デバイスへのファイルの書き込み