다음을 통해 공유


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 함수에 대한 코드를 작성하여 필요한 확장 단위 노드를 찾고 dwExtensionNode에서 해당 ID를 반환합니다. 이 ID는 IKsTopologyInfo::CreateNodeInstance 메서드에 대한 이 샘플 코드의 후속 호출에 사용됩니다.