次の方法で共有


UVC 拡張ユニットのサンプル アプリケーション

重要

このトピックのコンテンツとサンプル コードは古く、現在はサポートされていません。 現在のドライバー開発ツールチェーンでは動作しない場合があります。

このトピックには、拡張ユニットをサポートするために使用できるサンプル アプリケーション コードが含まれています。

アプリケーションは、IKsTopologyInfo::CreateNodeInstance を使用してインターフェイスにアクセスし、その後にノード オブジェクトのQueryInterface を呼び出して、必要な COM API を取得します。 詳細については、「IKsTopologyInfo」を参照してください。

TestApp.cpp という任意の名前のアプリケーション ソースに次のコードを含めます。

また、TestApp.cpp には、拡張ユニットによる自動更新イベントのサポートに示されているコードも含含めます。

  // pUnkOuter is the unknown associated with the base filter
  hr = pUnkOuter->QueryInterface(__uuidof(IKsTopologyInfo),
                               (void **) &pKsTopologyInfo);
  if (!SUCCEEDED(hr))
  {
        printf("Unable to obtain IKsTopologyInfo %x\n", hr);
 goto errExit;
  }

  hr = FindExtensionNode(pKsTopologyInfo,
     GUID_EXTENSION_UNIT_DESCRIPTOR,
     &dwExtensionNode);
  if (FAILED(hr))
  {
        printf("Unable to find extension node : %x\n", hr);
 goto errExit;
  }

  hr = pKsTopologyInfo->CreateNodeInstance(
        dwExtensionNode,
   __uuidof(IExtensionUnit),
 (void **) &pExtensionUnit);
 if (FAILED(hr))
  {
        printf("Unable to create extension node instance : %x\n", hr);
 goto errExit;
  }

  hr = pExtensionUnit->get_PropertySize(1, &ulSize);
  if (FAILED(hr))
  {
        printf("Unable to find property size : %x\n", hr);
 goto errExit;
  }

  pbPropertyValue = new BYTE[ulSize];
  if (!pbPropertyValue)
  {
      printf("Unable to allocate memory for property value\n");
      goto errExit;
  }

  hr = pExtensionUnit->get_Property(1,ulSize, pbPropertyValue);
  if (FAILED(hr))
  {
      printf("Unable to get property value\n");
      goto errExit;
  }

  // assume the property value is an integer
  ASSERT(ulSize == 4);
  printf("The value of property 1 = %d\n", *((int *)
     pbPropertyValue));

この場合、 pUnkOuter は USB ビデオ クラス (UVC) デバイスを表すキャプチャ フィルターへのポインターである必要があります。 キャプチャ フィルターをフィルター グラフに追加した後、このサンプル コードに示すように、IKsTopologyInfo インターフェイスのフィルターに対してクエリを実行できます。

FindExtensionNode 関数のコードを記述して、必要な拡張ユニット ノードを見つけ、その ID を dwExtensionNode に返します。 この ID は、このサンプル コードの後続の IKsTopologyInfo::CreateNodeInstance メソッドの呼び出しで使用されます。