Compartilhar via


Modo de dispositivo

[O recurso associado a esta página, DirectShow, é um recurso herdado. Foi substituído por MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation. Esses recursos foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda fortemente que o novo código use MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation em vez de DirectShow, quando possível. A Microsoft sugere que o código existente que usa as APIs herdadas seja reescrito para usar as novas APIs, se possível.]

As câmeras IEEE 1394 e USB podem alternar entre o modo de câmera e o modo VTR (gravador de fita de vídeo). Quando um filmador IEEE 1394 alterna os modos, o dispositivo é redefinido e o aplicativo deve enumerá-lo novamente. Não há como um aplicativo alternar o modo programaticamente. As câmeras USB, por outro lado, podem alternar entre os modos de câmera e VTR sem redefinição, e o aplicativo pode alterar o modo.

MSDV Driver

Para obter o modo atual em um dispositivo IEEE 1394, chame o método IAMExtDevice::GetCapability com o valor ED_DEVCAP_DEVICE_TYPE. Se o método retornar o valor ED_DEVTYPE_VCR, o dispositivo estará no modo VTR e terá funções como pausar, parar, avançar e retroceder. Caso contrário, se o método retornar ED_DEVTYPE_CAMERA, o dispositivo estará no modo de câmera. O exemplo de código a seguir mostra como consultar o tipo de dispositivo:

if (MyDevCap.bHasDevice) 
{
    LONG lDeviceType = 0;
    MyDevCap.pDevice->GetCapability(ED_DEVCAP_DEVICE_TYPE, &lDeviceType, 0);

    if (lDeviceType == ED_DEVTYPE_VCR) 
    {
        // Device is a VTR. Enable all VTR functions.
    }
    else 
    {
        // Device is a camera. 
        // Enable record and record-pause; disable other functions.
    }
}

Se a câmera ficar offline, você deverá consultá-la novamente quando ela ficar disponível. O gerenciador de grafo de filtro posta um evento EC_DEVICE_LOST quando o dispositivo é removido.

UVC Driver

Como os dispositivos de vídeo USB podem alternar os modos sem redefinição, o código mostrado nos exemplos anteriores não é confiável para dispositivos USB. Em vez disso, use a interface ISelector para obter o modo atual. Você também pode usar essa interface para alternar os modos programaticamente se o dispositivo der suporte a ela.

Controlando uma câmera DV