Condividi tramite


Applicazione di esempio per le unità di estensione UVC

Importante

Il contenuto e il codice di esempio in questo argomento sono obsoleti e attualmente non supportati. Potrebbe non funzionare con lo strumento di sviluppo driver corrente.

Questo argomento contiene il codice dell'applicazione di esempio che è possibile usare per supportare le unità di estensione.

Un'applicazione accede all'interfaccia usando IKsTopologyInfo::CreateNodeInstance seguita da una chiamata a QueryInterface nell'oggetto node per ottenere l'API COM richiesta. Per altre informazioni, vedere IKsTopologyInfo.

Includere il codice seguente nell'origine dell'applicazione, denominato arbitrariamente TestApp.cpp.

Includere anche in TestApp.cpp il codice illustrato in Supporto degli eventi di aggiornamento automatico con unità di estensione.

  // 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));

In questo caso, pUnkOuter deve essere un puntatore al filtro di acquisizione che rappresenta il dispositivo USB Video Class (UVC). Dopo aver aggiunto il filtro di acquisizione al grafico del filtro, è possibile eseguire query sul filtro per l'interfaccia IKsTopologyInfo , come illustrato in questo codice di esempio.

Scrivere il codice per la funzione FindExtensionNode per individuare il nodo unità di estensione necessario e restituire il relativo ID in dwExtensionNode. Questo ID viene usato nella chiamata successiva del codice di esempio al metodo IKsTopologyInfo::CreateNodeInstance .