API do codificador

[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.]

A API do Codificador fornece uma interface uniforme para configurar codificadores de software e hardware. Os aplicativos podem usar a API do Codificador para definir um codificador e armazenar as definições de configuração. Os fornecedores de codificador podem usar a API do Codificador para expor os recursos de um codificador. Embora a API do Codificador seja projetada principalmente para codificadores, é geral o suficiente que os decodificadores também possam dar suporte a ela.

A API do Codificador é exposta a aplicativos por meio da interface ICodecAPI , que é exposta pelo filtro do codificador. O filtro do codificador pode ser um filtro DirectShow nativo, um codificador de hardware ou um DMO (Objeto de Mídia) DirectX.

  • Filtros de software: um codificador implementado como um filtro nativo do DirectShow deve expor o ICodecAPI diretamente.
  • Codificadores de hardware: o dispositivo de codificação é exposto por meio de um ou mais minidrivers AVStream, que são representados no modo de usuário pelo KSProxy. O KSProxy converte chamadas de método ICodecAPI em conjuntos de propriedades KS. Para obter mais informações, consulte a documentação do DDK.
  • DMOs: o DMO deve expor a interface ICodecAPI . Os aplicativos DirectShow podem consultar o filtro Wrapper DMO, que expõe a interface agregando o DMO. Aplicativos não baseados no DirectShow podem consultar o DMO diretamente.

Capacidades do codificador

Um codificador pode registrar uma lista de recursos de alto nível armazenando-os no registro do sistema. Cada funcionalidade é identificada por um GUID. Para enumerar os recursos de um codificador específico, faça o seguinte:

  1. Crie o moniker que representa o filtro do codificador. (Consulte Usando o enumerador de dispositivo do sistema.)
  2. Consulte o moniker de filtro para a interface IGetCapabilitiesKey .
  3. Chame IGetCapabilitiesKey::GetCapabilitiesKey. O método retorna um identificador para a chave do Registro que contém a lista de recursos do filtro.
  4. Chame a função RegEnumValue para enumerar os valores da chave retornada.

Se você estiver desativando um codificador, crie as entradas do Registro para os recursos quando o filtro for registrado. Para filtros de software, crie uma chave chamada Funcionalidades adjacente às chaves FilterData e FriendlyName . Normalmente, você adicionaria essas informações depois de chamar AMovieDllRegisterServer2 para registrar os dados de filtro padrão. Para obter mais informações, consulte Como registrar filtros do DirectShow. Como alternativa, você pode criar uma chave CapabilitiesLocation que contém uma cadeia de caracteres que fornece o local da chave Funcionalidades no Registro. A cadeia de caracteres deve começar com "HKLM\", "HKCR\" ou "HKCU\" para indicar a subárvore do Registro. Para dispositivos Plug and Play, os arquivos de instalação do driver devem criar uma chave Capabilities adjacente à chave FriendlyName do filtro ou usar uma chave CapabilitiesLocation , conforme descrito para filtros de software.

Depois de criar a chave Funcionalidades , crie um valor para cada GUID de funcionalidade. O nome do valor deve ser a forma de cadeia de caracteres do GUID, no formato {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}. Cada tipo de valor deve ser um dos seguintes:

  • Valor numérico único. Use um valor DWORD .
  • GUID. Use a forma de cadeia de caracteres do GUID.
  • Pares numéricos. Use uma cadeia de caracteres com o formato "a,b" para representar pares de valores, como largura e altura, ou numerador e denominador para frações.
  • Matrizes de valores. Use várias cadeias de caracteres (REG_SZ_MULTI) para representar mais de um valor.

O exemplo a seguir mostra o layout do Registro para um filtro de software:

\HKCR\CLSID\Filter Category\Instance\Filter CLSID\Capabilities\
    
Values: 
    
    guid1: 1234 (REG_DWORD)   
    
    guid2: "{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}" (REG_SZ)
    
    guid3: "2","4","6" (REG_SZ_MULTI)
    
    guid4: "720,480" (REG_SZ) 

Perfis do Codificador

Um perfil de codificador é uma lista fixa de definições de configuração que podem ser aplicadas a um codificador em tempo de execução. Os perfis são independentes do codificador; um aplicativo pode selecionar um codificador e, em seguida, selecionar um perfil e aplicar as configurações de perfil ao codificador. Os perfis são identificados pelo GUID e devem ser armazenados no seguinte local no registro:

\HKLM\Software\Microsoft\EncoderProfiles\Profile GUID\

em que GUID de Perfil

é a forma de cadeia de caracteres do GUID que identifica o perfil. Crie valores para cada configuração. Crie também um valor de cadeia de caracteres chamado "FriendlyName" cujos dados identificam o perfil (como "LowBandwidthVideo").

Desenvolvimento de codificador e decodificador