次の方法で共有


ストリームの開始と終了

Stream クラス インターフェイスは、 SRB_OPEN_STREAM 要求を Stream クラス ミニドライバーに送信して、選択したビデオ形式でストリームを開きます。 SRB_OPEN_STREAMで渡される情報には、開こうとするストリームのインデックスと、KS_VIDEOINFOHEADER 構造体に対するポインターへのポインターが含まれます。 ストリームインデックスは、先のSRB_GET_STREAM_INFO リクエストに応答してミニドライバーから返された KS_DATARANGE_VIDEO 構造体の配列内のストリームのインデックスに対応します。 SRB_GET_STREAM_INFOの処理の詳細については、ストリーム カテゴリを参照してください。

次のコード例では、ストリーム インデックス、カーネル ストリーミング データ形式、カーネル ストリーミング ビデオ情報のヘッダーを取得します。

int StreamNumber = pSrb->StreamObject->StreamNumber;
PKS_DATAFORMAT_VIDEOINFOHEADER  pKSDataFormat = 
    (PKS_DATAFORMAT_VIDEOINFOHEADER) pSrb->CommandData.OpenFormat;
PKS_VIDEOINFOHEADER pVideoInfoHdrRequested = 
    &pKSDataFormat->VideoInfoHeader;

ミニドライバーは、要求されたストリーム形式をサポートできることを確認する必要があります。 特に、 KS_BITMAPINFOHEADER 構造体の内容は、rcSourcercTargetメンバによって指定されたクロッピングとスケーリング情報と共に検証さ れる必要があります。

デバイスのハードウェアがKS_VIDEOINFOHEADERの AvgTimePerFrame メンバで要求されたキャプチャフレームレートをサポートできない場合、常に次に利用可能な低いフレームレートを選択する必要があります。 たとえば、カメラが 7 フレーム/秒 (fps) と 15 fps のキャプチャ フレーム レートをサポートでき、クライアント アプリケーションがキャプチャ フレーム レート 10 fps でストリームを開こうとした場合、カメラは 7 fps の物理ストリームを作成する必要があります。

使用可能な 70 個の物理フレームがすべてキャプチャされる 10 秒のキャプチャの場合、ミニドライバーはキャプチャされた 100 フレームを報告する必要があります。そのうちの 30 フレームは、KSPROPERTY_DROPPEDFRAMES_CURRENTプロパティによってドロップされます。

出力バッファーが DirectDraw サーフェスの場合は、特別な規則が適用されます。 この場合、 KS_BITMAPINFOHEADER構造体の biWidth メンバーは、実際には宛先 DirectDraw サーフェスのストライドを表します。これは通常、ビデオ イメージの幅よりも大きくなります。 サーフェスのストライドは、通常、サーフェスの幅にバイト深度を乗算したものです。 たとえば、幅が 640 ピクセルで、色深度が 32 ビット/ピクセルのサーフェスの場合、ストライドは 2560 バイトになります。

要求されたイメージの幅を確認するには、次のコード例を使用します。

if (IsRectEmpty(&pVideoInfoHdrRequested->rcTarget) {
    Width =  pVideoInfoHdrRequested->bmiHeader.biWidth;
    Height = pVideoInfoHdrRequested->bmiHeader.biHeight;
} 
else {
    Width = pVideoInfoHdrRequested->rcTarget.right − 
            pVideoInfoHdrRequested->rcTarget.left;
    Height = pVideoInfoHdrRequested->rcTarget.bottom − 
             pVideoInfoHdrRequested->rcTarget.top;
}

Stream クラス インターフェースは、ストリームを閉じるために SRB_CLOSE_STREAM リクエストをミニドライバーに送ります。 その後、ミニドライバーは、未処理のすべてのストリーム SRB を Stream クラス インターフェイスに返す必要があります。