BRPI0708265A2 - codificação de vìdeo acelerada - Google Patents

codificação de vìdeo acelerada Download PDF

Info

Publication number
BRPI0708265A2
BRPI0708265A2 BRPI0708265-7A BRPI0708265A BRPI0708265A2 BR PI0708265 A2 BRPI0708265 A2 BR PI0708265A2 BR PI0708265 A BRPI0708265 A BR PI0708265A BR PI0708265 A2 BRPI0708265 A2 BR PI0708265A2
Authority
BR
Brazil
Prior art keywords
video
encoding
encode
acceleration
data
Prior art date
Application number
BRPI0708265-7A
Other languages
English (en)
Inventor
Ganesh Anand
J. Munsil Donald
J. Sullivan Gary
F. Evans Glenn
Sadhwani Shyam
J. Estrop Stephen
Original Assignee
Microsoft Corporation
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Microsoft Corporation filed Critical Microsoft Corporation
Publication of BRPI0708265A2 publication Critical patent/BRPI0708265A2/pt
Publication of BRPI0708265B1 publication Critical patent/BRPI0708265B1/pt

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/42Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/5044Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering hardware capabilities
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/12Selection from among a plurality of transforms or standards, e.g. selection between discrete cosine transform [DCT] and sub-band transform or selection between H.263 and H.264
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/124Quantisation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/127Prioritisation of hardware or computational resources
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/134Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or criterion affecting or controlling the adaptive coding
    • H04N19/154Measured or subjectively estimated visual quality after decoding, e.g. measurement of distortion
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/134Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or criterion affecting or controlling the adaptive coding
    • H04N19/156Availability of hardware or computational resources, e.g. encoding based on power-saving criteria
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/60Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding
    • H04N19/61Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding in combination with predictive coding
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/20Servers specifically adapted for the distribution of content, e.g. VOD servers; Operations thereof
    • H04N21/23Processing of content or additional data; Elementary server operations; Server middleware
    • H04N21/242Synchronisation processes, e.g. processing of PCR [Programme Clock References]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/40Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
    • H04N21/43Processing of content or additional data, e.g. demultiplexing additional data from a digital video stream; Elementary client operations, e.g. monitoring of home network or synchronising decoder's clock; Client middleware
    • H04N21/4302Content synchronisation processes, e.g. decoder synchronisation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/60Network structure or processes for video distribution between server and client or between remote clients; Control signalling between clients, server and network components; Transmission of management data between server and client, e.g. sending from server to client commands for recording incoming content stream; Communication details between server and client 
    • H04N21/63Control signaling related to video distribution between client, server and network components; Network processes for video distribution between server and clients or between remote clients, e.g. transmitting basic layer and enhancement layers over different transmission paths, setting up a peer-to-peer communication via Internet between remote STB's; Communication protocols; Addressing
    • H04N21/647Control signaling between network components and server or clients; Network processes for video distribution between server and clients, e.g. controlling the quality of the video stream, by dropping packets, protecting content from unauthorised alteration within the network, monitoring of network load, bridging between two different networks, e.g. between IP and wireless
    • H04N21/64784Data processing by the network

Landscapes

  • Engineering & Computer Science (AREA)
  • Signal Processing (AREA)
  • Multimedia (AREA)
  • Theoretical Computer Science (AREA)
  • Computing Systems (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Computer Security & Cryptography (AREA)
  • Discrete Mathematics (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)

Abstract

CODIFICAçãO DE ViDEO ACELERADA. Um serviço de aceleração de codificação de vídeo para aumentar uma ou mais da velocidade e qualidade da codificação de vídeo é descrito. O serviço age como um intermediário entre uma aplicação de programa de computador de codificador de vídeo arbitrária e hardware de aceleração de vídeo arbitrário. O serviço recebe uma ou mais consultas do codificador de vídeo para identificar condições específicas de implementação do hardware de aceleração de vídeo. O serviço faz interface com o hardware de aceleração de vídeo para obter as condições específicas de implementação. O serviço comunica as condições específicas de implementação para o codificador de vídeo. As condições especificas de implementação possibilitam que o codificador de vídeo: (a) determine se uma ou mais da velocidade e qualidade das operações de configuração de codificação de software associadas com o codificador de vídeo podem ser aumentadas com implementação de uma canalização de uma ou mais configurações e capacidades de canalização de codificação suportadas e (b) implemente a canalização pela interface com o serviço.

Description

"CODIFICAÇÃO DE VÍDEO ACELERADA"
PEDIDOS RELACIONADOS
Esse pedido é uma continuação em parte do Pedido de Patente U.S. co-pendente11/276.336 depositado em 24 de fevereiro de 2006, intitulado "Accelerated Video Encoding",e aqui incorporado por referência.
ANTECEDENTES
As operações de produção e distribuição de conteúdo de multimídia tipicamente in-cluem codificação de vídeo. Processos de codificação de vídeo têm tipicamente muitos da-dos e são intensivos no sentido computacional. Como um resultado, os processos de codifi-cação de vídeo podem ser muito consumidores de tempo. Por exemplo, pode levar váriasdezenas de horas para um codificador de software codificar um filme de alta definição emalta qualidade. Desde que a qualidade e a velocidade dos processos de codificação de ví-deo são fatores significativos para canalizações de produção e distribuição de conteúdo demultimídia bem-sucedidas, sistemas e técnicas para aumentar a velocidade na qual o con-teúdo de vídeo em alta qualidade pode ser codificado seriam úteis.
SUMÁRIO
Esse sumário é provido para apresentar uma seleção de conceitos em uma formasimplificada que são também descritos abaixo na descrição detalhada. Esse sumário não éplanejado para identificar aspectos chaves ou aspectos essenciais da matéria exposta rei-vindicada, nem ele é planejado para ser usado como um auxílio na determinação do escopoda matéria exposta reivindicada.
Em vista do acima, um serviço de aceleração de codificação de vídeo para aumen-tar um ou mais da velocidade e qualidade da codificação de vídeo é descrito. O serviço agecomo um intermediário entre uma aplicação de programa de computador de codificador devídeo arbitrário e hardware de aceleração de vídeo arbitrário. O serviço recebe uma ou maisconsultas do codificador de vídeo para identificar condições específicas de implementaçãodo hardware de aceleração de vídeo. O serviço faz interface com o hardware de aceleraçãode vídeo para obter as condições específicas da implementação. O serviço comunica ascondições específicas da implementação para o codificador de vídeo. As condições especí-ficas da implementação possibilitam que o codificador de vídeo: (a) determine se um oumais de velocidade e qualidade das operações de codificação de software associadas como codificador de vídeo podem ser aumentadas com a implementação de uma canalização deuma ou mais configurações e capacidades de canalização de codificação suportadas e (b)implemente a canalização pela interface com o serviço.
BREVE DESCRIÇÃO DOS DESENHOS
Nas figuras, o dígito mais a esquerda de um número de referência de componenteidentifica a figura particular na qual o componente aparece em primeiro lugar.A figura 1 ilustra um sistema exemplar para codificação de vídeo acelerada, de a-cordo com uma modalidade.
A figura 2 mostra uma modalidade exemplar de uma configuração de canalizaçãode codificação de vídeo, onde alguns dos processos de codificação são acelerados emhardware.
A figura 3 mostra um procedimento exemplar para codificação de vídeo acelerada,de acordo com uma modalidade.
A figura 4 no apêndice mostra uma aplicação de codificador de vídeo exemplar parailustrar a maneira na qual as interfaces de programação da aplicação de aceleração de codi-ficação de vídeo podem ser utilizadas, de acordo com uma modalidade.
A figura 5 no apêndice mostra uma configuração de canalização de codificação devídeo exemplar, onde o hardware de aceleração acelera a estimativa do movimento, trans-formação, quantização e o processo inverso para produzir imagens codificadas, de acordocom uma modalidade.
A figura 6 no apêndice mostra uma configuração de canalização de codificação devídeo exemplar na qual o hardware acelera somente a estimativa do movimento, de acordocom uma modalidade.
A figura 7 no apêndice mostra vários parâmetros de estimativa de movimento e-xemplar, de acordo com uma modalidade.
A figura 8 no apêndice mostra dados do vetor de movimento exemplar armazenadoem uma superfície 3-Dimensional (D3D) de exibição, de acordo com uma modalidade.
A figura 9 no apêndice mostra um diagrama exemplar indicando que a largura deuma superfície iguala uma imagem YCbCr original, de acordo com uma modalidade.
A figura 10 no apêndice mostra um diagrama exemplar indicando que o número devalor de resíduo por linha de vídeo é Vz da largura da imagem de vídeo original, de acordocom uma modalidade.
A figura 11 no apêndice mostra um diagrama exemplar indicando que a largura dasuperfície de resíduo é Vi da largura do quadro progressivo original, de acordo com umamodalidade.
DESCRIÇÃO DETALHADA
Visão geral
Sistemas e métodos para codificação de vídeo acelerada provêem um serviço deaceleração da codificação de vídeo. Esse serviço permite que uma aplicação de codificadorde vídeo arbitrária faça interface, em uma maneira independente do dispositivo, com ohardware de aceleração de vídeo arbitrário para definir e implementar uma canalização decodificação de vídeo substancialmente ótima. Para realizar isso, o serviço expõe as interfa-ces do programa de aplicação (APIs) de aceleração de vídeo (VA). Essas APIs encapsulamum modelo do processo de codificação de vídeo. Para definir uma canalização de codifica-ção, a aplicação do codificador de vídeo usa as APIs de VA para consultar condições espe-cíficas da implementação (por exemplo, capacidades, etc.) do hardware de aceleração devídeo (gráficos) disponível. O codificador de vídeo avalia essas condições específicas emvista da arquitetura de codificação de vídeo particular da aplicação (implementada em soft-ware) para identificar quaisquer operações de codificação que poderiam se beneficiar (porexemplo, benefícios de velocidade e/ou qualidade) por serem aceleradas em hardware. Taisoperações incluem, por exemplo, estimativa do movimento, transformação e operações dequantização e operações inversas tal como compensação de movimento, transformaçõesinversas e quantização inversa. A API também permite que o codificador de vídeo projeteuma canalização de codificação que minimiza substancialmente as transições de fluxo dedados através dos barramentos e processadores associados com o dispositivo de computa-ção hospedeiro e o hardware de aceleração, e dessa maneira, aumente mais as velocidadesde codificação. A API também permite que o hardware de aceleração influencie a Iocaliza-ção dos dados para melhorar o caching local (por exemplo, o hardware de aceleração devídeo pode funcionar mais eficientemente na memória local para o hardware de vídeo).
Com base nessas avaliações, o codificador de vídeo projeta uma canalização decodificação de vídeo personalizada que executa algum número de operações de codificaçãoem software e algum número de operações de codificação usando o hardware de acelera-ção (isto é, pelo menos um subconjunto das operações que poderiam se beneficiar de se-rem aceleradas pelo hardware). A aplicação do codificador então usa a API para criar a ca-nalização e codificar o conteúdo de vídeo. Essa canalização personalizada é substancial-mente otimizada quando comparada com uma canalização completamente implementadaem software porque certas operações de codificação são aceleradas e as transições de da-dos entre o hospedeiro e o hardware de aceleração são minimizadas. Adicionalmente, otempo de processamento liberado pela aceleração de certos aspectos do processo de codi-ficação e minimização das transições de dados permite que o(s) processador(es) hospedei-ro(s) execute(m) operações de codificação de qualidade superior com ciclos de processa-mento liberados. A API é também projetada para permitir que os componentes operem emparalelo, de modo que o uso do recurso computacional pode ser maximizado.
Esses e outros aspectos dos sistemas e métodos para codificação de vídeo acele-rada são agora descritos em mais detalhes.
Um Sistema Exemplar
Embora não requerido, os sistemas e métodos para codificação de vídeo aceleradasão descritos no contexto geral de instruções (módulos de programa) executáveis por com-putador sendo executadas por um dispositivo de computação tal como um computador pes-soal e hardware de aceleração de codificação gráfica (vídeo). Módulos de programa geral-mente incluem rotinas, programas, objetos, componentes, estruturas de dados, etc., queexecutam tarefas particulares ou implementam tipos de dados abstratos particulares.
A figura 1 mostra um sistema exemplar 100 para codificação de vídeo acelerada, deacordo com uma modalidade. O sistema 100 inclui dispositivo de computação hospedeiro102. O dispositivo de computação hospedeiro 102 representa qualquer tipo de dispositivo decomputação tais como um computador pessoal, um laptop, um servidor, dispositivo de com-putação portátil ou móvel, etc. O dispositivo de computação hospedeiro 102 inclui uma oumais unidades de processamento 104 acopladas através de um barramento 103 na memó-ria do sistema 106. A memória do sistema 106 inclui módulos ("módulos de programa") deprograma do computador 108 e dados do programa 110. Um processador 104 recupera eexecuta instruções do programa de computador dos módulos respectivos dos módulos deprograma 108. Módulos do programa 108 incluem módulos de processamento de vídeo 112para processar o conteúdo de vídeo, e outros módulos do programa 114 tais como um sis-tema operacional, acionadores de dispositivo (por exemplo, para fazer interface com ohardware de aceleração de codificação de vídeo, etc.) e/ou assim por diante. Módulos deprocessamento de vídeo 112 incluem, por exemplo, codificador de vídeo 116, serviço deaceleração de codificação de vídeo 118 e outros módulos de processamento 120, por e-xemplo, um decodificador de vídeo, filtro(s) de vídeo, um renderizador de vídeo, etc.
Nessa implementação, o codificador de vídeo 116 é um codificador de vídeo arbitrá-rio. Isso significa que a arquitetura particular, operação, formatos de dados, etc., implemen-tados e/ou utilizados pelo codificador de vídeo 116 são arbitrários. Por exemplo, o codifica-dor de vídeo 116 pode ser distribuído por uma terceira parte, um OEM, etc. Adicionalmente,embora a figura 1 mostre o serviço de aceleração de codificação de vídeo 118 independenteda porção do sistema operacional de "outros módulos do programa" 114, em uma implemen-tação, o serviço de aceleração de codificação de vídeo 118 é parte do sistema operacional.
Os módulos de processamento de vídeo 112 recebem dados de vídeo de entradacompactados ou descompactados 122. Quando os dados de vídeo de entrada 122 estãocompactados (já codificados), os módulos de processamento do vídeo 112 decodificam osdados do vídeo de entrada 122 para produzir dados de vídeo de origem decodificados. Taisoperações de decodificação são executadas por um módulo de decodificador. Em uma outraimplementação, dados parcialmente decodificados poderiam também ser retidos para auxili-ar mais no processo de codificação. Para as finalidades de ilustração exemplar, um tal mó-dulo de decodificador é mostrado como uma porção respectiva dos "outros módulos de pro-cessamento de vídeo" 120. Assim, os dados de vídeo de origem decodificados são repre-sentados por dados de vídeo de entrada 122 que foram recebidos em um estado decodifi-cado ou representados com resultados da decodificação dos dados de vídeo de entrada 122que foram recebidos em um estado codificado. Os dados de vídeo de origem decodificadossão mostrados como uma porção respectiva de "outros dados do programa" 124.
Para projetar e implementar uma canalização de codificação de vídeo personaliza-da que pode ser usada para codificar dados de vídeo de origem decodificados em dados devídeo codificados 126, o codificador de vídeo 116 faz interface com o serviço de aceleraçãode codificação de vídeo 118 via as APIs de aceleração de vídeo (VA) 128. Uma implemen-tação exemplar de múltiplas implementações possíveis das APIs de VA 128 é descrita noapêndice. Para definir uma canalização de codificação, a aplicação do codificador de vídeousa respectivas da API de VA 128 (por exemplo, favor ver o apêndice, §3.4, IVideoEncoder-Service) para obter condições específicas da implementação de hardware de aceleraçãodisponível 130. Tais condições específicas da implementação incluem, por exemplo:
•um arranjo enumerado identificando configurações de canalização de codificaçãode vídeo suportadas do hardware de aceleração 130 (por exemplo, obtido via a interfaceGetCapabiIities descrita no apêndice, § 3.4.1),
•uma indicação dos formatos de vídeo suportados (por exemplo, MPEG, WMV1 etc.:favor ver o apêndice, GetSupportedFormats, §3.4.2),
•métricas de pesquisa suportadas para operações de estimativa do movimento(ME) (favor ver o apêndice, GetDistanceMetrics1 §3.4.3),
•perfis de pesquisa suportados para tempo de processamento versus decisões depermuta de qualidade (favor ver o apêndice, GetSearchProfiIes, §3.4.4) e/ou«capacidades de ME suportadas, por exemplo, informação do tamanho da imagem,tamanho da janela de pesquisa máxima, indicação de suporte de macrobloco variável, etc.(favor, ver o apêndice, GetMECapabiIities1 §3.4.5).
Responsivo ao recebimento de tais solicitações do codificador de vídeo 116, o ser-viço de aceleração de codificação de vídeo 118 consulta o hardware de aceleração de vídeo130 pelas condições específicas da implementação solicitada e retorna informação associa-da com as respostas correspondentes do hardware de aceleração 130 para o codificador devídeo 116. O serviço de aceleração de codificação de vídeo 118 faz interface com o hardwa-re de aceleração de vídeo 130 usando um acionador de dispositivo correspondente. Um talacionador de dispositivo é mostrado como a porção respectiva de "outros módulos do pro-grama" 114.
O codificador de vídeo 116 avalia as condições específicas da implementação su-portadas pelo hardware de aceleração 130 em vista da arquitetura de codificação de vídeoparticular da aplicação (implementada em software) para identificar quaisquer operações decodificação que poderiam se beneficiar (por exemplo, benefícios de velocidade e/ou quali-dade) por serem aceleradas em hardware, selecionar um perfil de pesquisa para encapsularuma permuta entre qualidade e velocidade de codificação de vídeo, minimizar transições dedados através de barramentos e entre processadores, etc. Operações exemplares que po-dem se beneficiar da aceleração do hardware incluem, por exemplo, estimativa de movimen-to, transformação e quantização. Por exemplo, uma razão para executar a quantização emhardware é minimizar o fluxo de dados entre estágios da canalização.
A figura 2 mostra uma modalidade exemplar de uma configuração de canalizaçãode codificação de vídeo, onde alguns dos processos de codificação são acelerados emhardware. Por finalidades de ilustração exemplar e descrição, as operações e o fluxo dedados associados com a figura 2 são descritos com relação aos particulares dos componen-tes da figura 1. Na descrição, o número mais a esquerda de um numerai de referência indicaa figura particular onde o componente/trajetória de dados/item referenciado foi apresentadoprimeiro. Por exemplo, o número mais a esquerda da canalização 200 é, por exemplo, "2",indicando que ele é primeiro apresentado na figura 2. Nesse exemplo, a canalização de co-dificação 200 foi configurada/personalizada pelo codificador de vídeo 116 (figura 1) fazendointerface com o serviço de codificação de vídeo 118, tal que respectivas das operações deprocessamento implementadas no hospedeiro 102 são aceleradas em hardware 130. Porfinalidades de ilustração, as operações de processamento ilustradas no lado direito da linhapontilhada em negrito na figura 2 são aceleradas por hardware (por exemplo, hardware deaceleração 130 da figura 1) e as operações de processamento ilustradas no lado esquerdoda figura são executadas pelo dispositivo de computação hospedeiro 102 (figura 1). Na ca-nalização de codificação 200, trajetos de acesso de dados configurados opcionais são mos-trados com linhas pontilhadas sem negrito. Os ovais 204 e 212 representam armazenamen-tos de memória de imagem original e codificada respectivos.
Nessa implementação exemplar, o codificador de vídeo 116 (figura 1) toma comoentrada alguma forma de dados de vídeo compactados ou descompactados 202 (favor tam-bém ver os dados do vídeo de entrada 122 da figura 1). Favor observar que a configuraçãode canalização exemplar da figura 2 não copia o vídeo da origem de entrada 202 ("origemde vídeo bruto") para o dispositivo de computação hospedeiro 102 se a origem 202 não estáse originando do hospedeiro 102 e se o mecanismo de tomada de decisão do hospedeiro(por exemplo, codificador de vídeo 116) não usa o vídeo de origem. Por exemplo, se deci-sões de quantização não exigem que o hospedeiro toque nos dados de vídeo, os dados nãoserão transferidos. Nesse exemplo, a canalização 200 é configurada para converter os da-dos de entrada 202 para uma outra forma compactada usando as operações respectivasdos blocos 206,208 e 214 até 218.
Tais operações podem incluir converter dados de vídeo descompactados (YUV) pa-ra MPEG-2 compactados, ou elas podem incluir transcodificar os dados de vídeo do formatode dados MPEG-2 para o formato de dados WMV. Por finalidades de ilustração exemplar,assuma que as operações de transcodificação incluem um estágio de descompactação totalou parcial seguido por um estágio de codificação (existem modelos mais eficientes que sedesviam da descompactação e trabalham puramente no espaço de transformação (DCT)).Um número de formatos de compactação de vídeo faz uso da estimativa do movimento,transformação e quantização para realizar a compactação. Dos estágios de compactação, aestimativa do movimento é tipicamente a etapa mais lenta, incluindo uma operação de pes-quisa massiva onde um codificador (por exemplo, codificador de vídeo 116) tenta encontraro macrobloco de referência correspondente mais próximo para os macroblocos em uma da-da imagem.
Depois que os vetores de movimento ótimos são determinados (por exemplo, via obloco 206) para cada um dos macroblocos, o codificador 116 calcula os resíduos diferenci-ais (por exemplo, via o bloco 208) com base na imagem previamente codificada e no vetorde movimento ótimo. O vetor de movimento, junto com o resíduo diferencial é uma represen-tação compacta da imagem atual. Os dados do vetor de movimento são também represen-tados diferencialmente. O codificador hospedeiro pode opcionalmente solicitar a reavaliaçãodos vetores de movimento pelo hardware de aceleração de vídeo para encontrar um ma-crobloco com um vetor de movimento combinado e/ou residual menor. Os dados do vetor demovimento diferencial resultantes, e os dados residuais são compactados (por exemplo, viao bloco 218), por exemplo, usando técnicas como a codificação run-length (RLE) e a codifi-cação diferencial (por exemplo, codificação Huffman e aritmética) para gerar o fluxo de bitscodificado final (dados de vídeo codificados 126) para comunicar para um destino (bloco218) para apresentação para um usuário. Nesse exemplo, as operações dos blocos 206,208 e 214 até 218 (por exemplo, operações tais como estimativa de movimento (206), deci-são de modo, seleção do vetor de movimento (MV) e controle de taxa (208), formação depredição (210), operações de transformação e quantização (214), inversão e transformaçãodo quantizador e versão (216) e codificação por entropia (218)) são bem conhecidos na téc-nica e não são assim descritos mais aqui.
Com referência novamente à figura 1, em uma implementação, o codificador de ví-deo 116 é uma aplicação de múltiplos encadeamentos provendo utilização completa dohardware de aceleração 130. Nessa implementação, quando determinando quais operaçõesde codificação de vídeo devem ser aceleradas em hardware, o codificador de vídeo 116 po-de estruturar a configuração da canalização particular tal que ambos o processador 104 e ohardware de aceleração 113 são totalmente utilizados. Por exemplo, quando as operaçõesde estimativa de movimento da canalização de codificação de vídeo estão sendo executa-das pelo hardware para um quadro particular de dados de vídeo, a canalização pode serconfigurada para executar as operações de codificação por entropia (ou aritmética ou deHuffman) no software pelo hospedeiro em um quadro diferente dos dados de vídeo. Umacanalização de vetor de movimento única exemplar representando a configuração de canali-zação particular selecionada/estruturada é descrita abaixo no apêndice na seção 5.1.1. Ca-nalizações de vetor de movimento múltiplo exemplar (relativamente complexas) onde o codi-ficador de vídeo 116 solicita vetores de movimento múltiplos do hardware de aceleração 130e seleciona uma canalização de vetor de movimento com base em vários parâmetros sãodescritas abaixo no apêndice na seção 5.1.2.
Com relação à seleção de um perfil de pesquisa, a qualidade dos vetores de movi-mento se refere a uma taxa de transferência de um fluxo gerado pelo uso dos vetores demovimento. Vetores de movimento de alta qualidade são associados com fluxos de taxa detransferência baixa. A qualidade é determinada pela integralidade da pesquisa do bloco, aqualidade do algoritmo, a distância métrica usada, etc. Vetores de movimento de alta quali-dade devem ser usados para executar operações de codificação de vídeo de alta qualidade.Para tratar disso, o serviço de aceleração de codificação de vídeo 116 provê uma constru-ção genérica chamada um perfil de pesquisa para encapsular uma permuta entre qualidadee tempo. O perfil de pesquisa também inclui metadados para identificar o algoritmo de pes-quisa usado pelo hardware de aceleração 130, etc. O codificador de vídeo 116 escolhe umperfil de pesquisa particular com base nas exigências particulares da implementação do co-dificador.
Com relação à minimização das transições de dados através de barramentos e en-tre processadores, um processo de codificação implementado por uma configuração de ca-nalização de codificação de vídeo tipicamente incluirá vários estágios de processamento,cada um dos quais pode ou não ser acelerado via o hardware de aceleração 130. Nos casosonde o codificador de vídeo 116 determina utilizar a aceleração do hardware em estágiossucessivos da canalização de codificação, pode não ser necessário mover os dados damemória 132 baseada no hardware de aceleração 130 para a memória do sistema 106 as-sociada com o dispositivo de computação hospedeiro 102 e a seguir de volta para a memó-ria baseada no hardware de aceleração 132 para o próximo estágio e assim por diante.
Mais particularmente, embora ponteiros para vários tipos de dados de vetor de mo-vimento e vídeo possam ser transferidos de um lado para outro entre o dispositivo de com-putação hospedeiro 102 e o hardware de aceleração 130, em uma implementação, os dadosreais são copiados para a memória do sistema 106 somente quando o ponteiro de dados(um ponteiro de superfície D3D9) é explicitamente bloqueado usando, por exemplo, IDi-rect3DSurface9::LockRect. Interfaces exemplares para bloquear uma superfície são conhe-cidas (por exemplo, a IDirect3DSurface9::LockRect.interface bem conhecida). Assim, noscasos onde dois estágios de canalização de codificação se seguem, e o dispositivo de com-putação hospedeiro 102 não precisa executar qualquer processamento intermediário, o dis-positivo de computação hospedeiro 102 pode decidir não "bloquear" o armazenamento tem-porário alocado entre os estágios de processamento. Isso impedirá uma cópia de memóriaredundante dos dados, e dessa maneira, evitará movimentos/transferências de dados des-necessários. Dessa maneira, o codificador de vídeo 116 projeta uma canalização de codifi-cação de vídeo que substancialmente minimiza as transferências de dados através dos bar-ramentos e entre processadores, e por meio disso, também aumenta as velocidades de co-dificação de vídeo.
Nesse ponto, o codificador de vídeo 116 evoluiu as condições específicas da im-plementação suportadas pelo hardware de aceleração 130 em vista da arquitetura de codifi-cação de vídeo particular da aplicação (implementada em software) para identificar quais-quer operações de codificação que poderiam se beneficiar de serem aceleradas em hardwa-re, selecionou um perfil de pesquisa, minimizou as transições de dados através dos barra-mentos e entre processadores e/ou assim por diante. Com base nessas determinações, ocodificador de vídeo 116 seleciona uma configuração de canalização particular para codifi-car os dados de vídeo de origem decodificados, e dessa forma, gera dados de vídeo codifi-cados 126. A seguir, o codificador de vídeo 116 faz interface com o serviço de aceleraçãode codificação de vídeo 118 para criar um objeto de codificador para implementar a canali-zação selecionada (favor ver o apêndice, CreateVideoEncoder API, §3.4.6). Nessa imple-mentação, um objeto de codificador (por exemplo, um objeto COM regular) é criado pelaidentificação da configuração de canalização selecionada e um ou mais dos seguintes: umformato para o fluxo de bits codificado de saída, o número de fluxos de dados de entrada esaída associados com a configuração da canalização, propriedades da configuração estáti-ca, um número sugerido de armazenamentos temporários (superfícies) para associaçãocom os fluxos de l/O diferentes com base na configuração de canalização selecionada e umtamanho de fila de alocador especificada pelo acionador com base em recursos que um a-cionador de dispositivo gráfico é capaz de reunir, e outros parâmetros. (O tamanho da fila eo número de armazenamentos temporários de dados estão essencialmente se referindo amesma coisa: um é "sugerido", o outro é "real").
A seguir, o codificador de vídeo 116 usa o objeto do codificador criado para fazer in-terface com o serviço de aceleração de codificação de vídeo 118 para codificar os dados devídeo de origem decodificados. Para esse fim, o objeto do codificador submete solicitaçõesde execução para o hardware de aceleração 130 (favor ver o apêndice, IVideoEnco-de:Execute API, §3.2.1).
Em vista do acima, o sistema 100 permite implementações arbitrárias de aplicaçõesde codificador de vídeo 116 para definir e criar configurações de canalização de codificaçãode vídeo durante o tempo de execução para tirar vantagem completa do hardware de acele-ração de codificação de vídeo disponível para aumentar a velocidade e a qualidade da codi-ficação. Como parte dessas operações de configuração do tempo de execução, o codifica-dor de vídeo 116 pode usar APIs de VA 128 para especificar que a canalização de codifica-ção é para implementar a pesquisa direcionada iterativa (múltiplas passagens de pesquisade refinamento crescente), definir e usar estratégias de pesquisa genericamente selecioná-veis (por exemplo, selecionar um algoritmo de pesquisa com base nas métricas de qualida-de independente de qualquer conhecimento dos detalhes sobre o algoritmo real utilizado),utilizar metodologias independentes do formato (por exemplo, onde um codificador de vídeo116 não está consciente do formato de imagem particular dos dados do vídeo de entrada122 e o hardware de aceleração 130 não está ciente do formato de saída compactado paraos dados de vídeo codificados 126) para controlar a pesquisa, adaptar tamanhos de dados(por exemplo, onde o codificador de vídeo 116 seleciona um tamanho de macrobloco combase em um algoritmo de pesquisa) e assim por diante.
Um Procedimento Exemplar
A figura 3 mostra um procedimento exemplar 300 para codificação de vídeo acele-rada, de acordo com uma modalidade. Por finalidades de descrição exemplar, as operaçõesdo procedimento são descritas com relação aos componentes do sistema 100 da figura 1. Onumerai mais a esquerda de um número de referência do componente indica a figura parti-cular onde o componente é descrito em primeiro lugar.
No bloco 302, o codificador de vídeo 116 (figura 1) recebe dados de vídeo de en-trada 122. Se os dados de vídeo de entrada 122 não estão compactados, os dados de vídeode entrada representam dados de vídeo de origem decodificados. No bloco 304, se os da-dos de vídeo de entrada 122 estão compactados, o codificador de vídeo 116 descompactaos dados de vídeo de entrada para gerar dados de vídeo de origem decodificados. No bloco306, o codificador de vídeo 116 faz interface com a API de VA 128 para consultar o hardwa-re de aceleração 130 com relação às capacidades e condições específicas de implementa-ção da configuração da canalização de codificação de vídeo. No bloco 308, o codificador devídeo 116 avalia as capacidade suportadas e as condições específicas de implementaçãodentro do contexto da implementação do codificador de vídeo 116, para identificar as opera-ções de codificação de vídeo associadas com a implementação particular do codificador devídeo 116 que podem se beneficiar da aceleração de hardware, tomar decisões de qualida-de e/ou velocidade de decodificação, minimizar transições de dados através dos barramen-tos e entre processadores e/ou assim por diante.
No bloco 310, o codificador de vídeo 116 cria um objeto de codificação que imple-menta uma canalização de codificação configurada para executar as operações de codifica-ção de vídeo identificadas que podem se beneficiar da aceleração de hardware no hardwarede aceleração 130, implementar as permutas de velocidade/qualidade (por exemplo, via umperfil de pesquisa selecionado) e minimizar as transições de fluxo de dados. No bloco 312, ocodificador de vídeo usa o objeto do codificador criado para codificar os dados de vídeo deorigem decodificados de acordo com a seqüência das operações e arquitetura de codifica-ção delineada pela canalização de codificação de vídeo personalizada no bloco 310. Essasoperações de codificação do bloco 312 geram dados de vídeo codificados 126 (figura 1).
Conclusão
Embora os sistemas e métodos para codificação de vídeo acelerada tenham sidodescritos em linguagem específica para aspectos estruturais e/ou operações ou ações me-todológicas, é entendido que as implementações definidas nas reivindicações anexas nãosão necessariamente limitadas aos aspectos ou ações específicas descritos.
Por exemplo, embora as API's 128 da figura 1 tenham sido descritas dentro do con-texto da codificação de dados de vídeo, as APIs 128 podem ser usadas fora do contexto decodificação para aceleração de hardware de outras funções tais como detecção de borda,redução de ruído baseada no vetor de movimento, estabilização da imagem, nitidez, conver-são da velocidade de projeção, computação da velocidade para aplicações de visão decomputador, etc. Por exemplo com referência à redução do ruído, em uma implementação,o codificador de vídeo 116 (figura 1) computa vetores de movimento para todos os macrob-locos dos dados da imagem de origem decodificados. A seguir, o codificador de vídeo 116utiliza a magnitude do movimento, direção e correlação com vetores de movimento de ma-croblocos circundantes para determinar se existe um movimento de objeto local na imagemde entrada. Nessa implementação, o codificador de vídeo 116 então utiliza a magnitude dovetor para direcionar o acompanhamento do objeto / agressividade da filtragem ou mudan-ças médias de um objeto particular para reduzir o ruído estaticamente aleatório.
Em um outro exemplo com relação à estabilização da imagem, em uma implemen-tação, o codificador de vídeo 116 calcula vetores de movimento para todos os macroblocose dados de origem decodificados. O codificador de vídeo 116 então determina se existe mo-vimento global na imagem. Isso é realizado correlacionando todos os valores do vetor demovimento e determinando se os valores correlacionados são similares. Se afirmativo, entãoo codificador de vídeo 116 conclui que existe movimento global. Alternativamente, o codifi-cador de vídeo 116 utiliza um tamanho de macrobloco grande e determina se existe movi-mento geral do macrobloco grande. Depois de determinar se o movimento global está pre-sente, se o codificador de vídeo 116 também verifica que o vetor de movimento global tendea ser convulsivo através dos quadros, o codificador de vídeo 116 conclui que existe contra-ção de câmera e compensa isso antes de começar a filtragem do ruído e as operações decodificação.
Dessa maneira, os aspectos específicos e as operações do sistema 100 são reve-lados como formas exemplares de implementação da matéria exposta reivindicada.
Apêndice A
"API de Aceleração de Codificação de Vídeo Exemplar"
Codificação de Vídeo
Esse apêndice descreve aspectos de uma implementação exemplar das APIs deaceleração de codificação de vídeo 128 (figura 1) para a codificação de vídeo acelerada,também citada como codificação VA. Nessa implementação, APIs 128 são projetadas parapossibilitar que as aplicações de processamento de vídeo e codificação (por exemplo, ummódulo do codificador de vídeo 116) alavanquem o suporte do hardware de aceleração 130(por exemplo, um GPU) para aceleração estimativa de movimento, computação de resíduo,compensação e transformação do movimento.
1 Tabela de Conteúdos
Codificação de vídeo
1 Tabela de conteúdos
2 Projeto exemplar
2.1 Leiautedocodificador
2.2 Configurações de canalização ou modo
2.2.1 VA2_EncodePipeFull
2.2.2 VA2_EncodePipe_MotionEstimation
3 API exemplar
3.1 Definição de interface
3.1.1 IVideoEncoderI 8 -
3.1.2 IVideoEncoderService
3.2 Métodos: IVideoEncoder
3.2.1 GetBuffer
3.2.2 ReIeaseBuffer
3.2.3 Execute
3.3 Estruturas de dados: executar
3.3.1 VA2_Encode ExecuteDataParameter
3.3.2 VA2 Encode_ExecuteConfigurationParameter
3.3.3 DataParameter_MotionVectors
3.3.4 DataParameterResidues
3.3.5 DataParameterJnputImage
3.3.6 DataParameter Referencelmages
3.3.7 DataParameter Decodedlmage
3.3.8 VA2_Encode_lmagelnfo
3.3.9 ConfigurationParameter_MotionEstimation
3.3.10 VA2_Encode_SearchResolution
3.3.11 VA2_Encode SearchProfiIe
3.3.12 VA2_Encode_MBDescription
3.3.13 VA2_Encode SearchBounds
3.3.14 VA2 Encode_ModeType3.3.15 ConfigurationParameterQuantization
3.4 Métodos: IVideoEncoderService
3.4.1 GetPipelineConfigurations
3.4.2 GetFormats
3.4.3 GetDistanceMetrics
3.4.4 GetSearchProfiIes
3.4.5 GetMECapabiIities
3.4.6 CreateVideoEneoder
3.5 Estruturas de dados: IVideoEncoderService
3.5.1 VA2_Encode_MECaps
3.5.2 VA2_Encode_StaticConfiguration
3.5.3 VA2_Encode_Allocator
3.5.4 VA2_Encode_StreamDescription
3.5.5 VA2_Encode_StreamType
3.5.6 VA2_Encode_StreamDescription_Video
3.5.7 VA2_Encode_StreamDescription MV
3.5.8 VA2_Encode_StreamDescription_Residues
3.6 Estruturas de dados: vetores de movimento
3.6.1 Leiaute do vetor de movimento
3.6.2 Novos formatos D3D
3.6.3 VA2_Encode_MVSurface
3.6.4 VA2_ EncodeJVIVType
3.6.5 VA2_Encode_MVLayout
3.6.6 VA2_Encode_MotionVector8
3.6.7 VA2 Encode MotionVectorl6
3.6.8 VA2_Encode_MotionVectorEx8
3.6.9 VA2_Encode_MotionVectorExl6
3.7 Estruturas de dados: resíduos
3.7.1 Plano de brilho
3.7.2 Saturação 4:2:2
3.7.3 Saturação 4:2:0
4 Documentação DDI exemplar
4.1 Enumeração e capacidades
4.1.1 FND3DDDI GETCAPS
4.1.2 VADDI_QUERYEXTENSIONCAPSINPUT
4.1.3 D3DDDIARG_CREATEEXTENSI0NDEVICE
4.2 Funcionalidade da codificação4.2.1 VADDI Encode_Function_Execute_lnput
4.2.2 VADDI Encode_Function_Execute_Output
4.3 Estruturas do dispositivo de extensão
4.3.1 VADDI_PRIVATEBUFFER
4.3.2 D3DDDIARG_EXTENSIONEXECUTE
4.3.3 FND3DDDI_DESTROYEXTENSIONDEVICE
4.3.4 FND3DDDI_EXTENSIONEXECUTE
4.3.5 D3DDDI_DEVICEFUNCS
4.4 Estruturas e funções D3D9
Modelo de programação exemplar
5.1 Eficiência da canalização
5.1.1 Exemplo: vetor de movimento único (canalização completa)
5.1.2 Exemplo: vetores de movimento múltiplos
2 Projeto exemplar
2.1 Leiautedocodificador
A figura 5 mostra uma aplicação do codificador de vídeo exemplar para ilustrar amaneira na qual as APIs de aceleração de codificação de vídeo podem ser utilizadas, deacordo com uma modalidade. Nesse exemplo, o codificador de vídeo 116 é implementadona forma de um DMO ou MFT. A figura 5 mostra os dados de entrada (correspondendo comuma "recepção") e os dados de saída depois de vários estágios do processamento. As cai-xas representam dados enquanto os círculos representam funções da API invocadas pelaaplicação do codificador. Os círculos assim representam o núcleo da API como visto pelaaplicação do codificador.
2.2 Configurações da canalização ou modo
O hardware de aceleração é visto como uma canalização, e o GUID da canalizaçãoé usado para descrever os elementos de configuração mais básicos da canalização. A metada aceleração da codificação pode ser imaginada como intimamente ligada à meta da efici-ência da canalização.
O projeto permite canalizações divididas (ou de múltiplos estágios) onde os dadospassam de um lado para o outro entre o PC hospedeiro e o hardware, antes da saída finalser obtida. Nenhuma configuração de canalização de múltiplos estágios foi projetada ainda,as configurações abaixo descrevem canalizações de estágio único não divididas.
2.2.1 VA2 EncodePipe FuLL
// (BFC87EA2-63B6-4378-A619-5B451EDC8940)cpp_quote{"DEFINE_GUID(VA2_EncodePipe_Full, Oxbfc87ea2, Ox63b6, 0x4378, Oxa6,0x19, OxSb, 0x45, Oxie1 Oxdc, Oxb9, 0x40);"}
A figura 6 mostra uma configuração de canalização de codificação de vídeo exem-plar, onde o hardware de aceleração acelera a estimativa do movimento, transformação,quantização e o processo inverso para produzir imagens decodificadas, de acordo com umamodalidade. O hardware produz como saída vetores de movimento, resíduos (brilho e satu-ração) e uma imagem decodificada. A imagem decodificada não precisa ser transferida paraa memória do sistema já que a sua única finalidade é calcular os vetores de movimento parao próximo quadro.
A documentação posterior se referirá a um parâmetro chamado NumStreams. Paraessa configuração de canalização, o NumStreams é cinco. Os Streamlds reais são mostra-dos no diagrama em parênteses.
Essa é uma canalização de estágio única, não dividida e, portanto o parâmetro deestágio da execução não se aplica.
Descrições de fluxo
Observe que StreamTypeJ" é uma abreviação para VA2_Encode_StreamType_*.
Imagem de entrada
O ID do fluxo é um, e o tipo de fluxo é StreamType_Video. Esse fluxo representa aimagem para a qual os dados de movimento são buscados. O alocador para esse fluxo énegociável - ou a interface atual pode fornecer um ou um alocador externo pode ser usado.
A escolha do alocador é feita no momento da criação, e se um alocador externo é escolhido,um ID do fluxo de um será considerado um valor de entrada ilegal para GetBuffer.
Imagens de referência
O ID do fluxo é dois, e o tipo do fluxo é StreamType. Esse fluxo representa uma lis-ta de imagens de referência usadas para calcular vetores de movimento. A interface atualnão supre um alocador separado para esse fluxo. As superfícies de entrada são recicladas apartir do fluxo de imagem decodificada (ID = 5) ou obtidas de outro lugar.
Vetores de movimento
O ID do fluxo é três, e o tipo do fluxo é StreamType_MV. Esse fluxo representa umparâmetro de saída contendo dados do vetor de movimento. Armazenamentos temporáriospara esse fluxo são obtidos através de GetBuffer somente.
Resíduos
O ID do fluxo é quatro, e o tipo do fluxo é StreamType_Residues. Esse fluxo repre-senta um parâmetro de saída contendo valores de resíduo para todos os três planos. Arma-zenamentos temporários para esse fluxo são obtidos através de GetBuffer somente.
Imagem decodificada
O ID do fluxo é cinco, e o tipo do fluxo é StreamType_Video. Esse fluxo representaum parâmetro de saída contendo a imagem decodificada obtida dos resíduos quantizados evalores do vetor de movimento. Armazenamentos temporários para esse fluxo são obtidosatravés de GetBuffer somente.2.2.2 VA2 EncodePipe MotionEstimation
// {F18B3D19-CA3E-4a6b-AC10-53F86D509E04}
cpp_quote("DEFINE_GUID {VA2_EncodePipe_MotionEstimation, Oxfl8b3d19 Ox-ca3e, Ox4a6b, Oxac1 0x10, 0x53, 0xf8, Ox6d, 0x50, 0x9e, 0x4);"}
A figura 7 mostra uma configuração de canalização de codificação de vídeo exem-plar na qual o hardware acelera somente a estimativa do movimento, de acordo com umamodalidade. Essa configuração de canalização adota um conjunto de imagens de referênciacomo entrada, e descarrega vetores de movimento como saída. A imagem decodificadanesse caso tem que ser gerada e suprida pelo software do hospedeiro.
NumStreams para essa configuração de canalização é três. Os Streamlds para osvários fluxos são mostrados no diagrama em parênteses.
Essa é uma canalização de estágio único não dividida e o parâmetro de estágio deexecução não se aplica.
3 API Exemplar
3.1 Definição de interface
3.1.1 IVideoEncoderinterface IVideoEncoder: IUnknown {
HRESULT GetBuffer(
[in] UINT8 StreamId1
[in] UINT32 StreamType,
[in] BOOL Blocking,
[out] PVOID pBuffer,
HRESULT ReleaseBuffer(
[in] UINT8 StreamId,
[in] UINT32 StreamType1
[in] PVOID pBuffer
};
HRESULT Execute(
[in] UINT8 Stage,
[in] UINT32 NuminputDataParameters,
[in, size_is(NuminputDataParameters)]VA2_EnCode_ExecuteDataParameter** plnputData,[in] UINT32 NumOutputDataParametere,[out, size_is(NumOutputDataParameters]VA2_Encode_ExecuteDataParameter** pOutputData,
[in] UINT32 NumConfigurationParameters,[in, size is(NumConfigurationParameters]VA2_Encode_ExecuteConfigurationParameter** pConfiguration, [in] HANDLE hE-vent,
[out] HRESULT* pStatus};
}
3.1.2 IVideoEncoderService
interface IVideoEncoderService : IVideoAccelerationService {HRESULT GetPipelineConfigurations([out] UINT32* pCount,
[out, unique, size_is(*pCount)] QUID** pGuids
};
HRESULT GetFormats([out] UINT32* pCount,
[out, unique, size_is(*pCount)] GUID** pGuids};
HRESULT GetDistanceMetrics([out] UINT32* pCount,
[out, unique, size_is(*pCount)] GUID** pGuids};
HRESULT GetSearchProfiles(
[out] UINT32* pCount,
[out, unique, size_is(*pCount)] VA2_Encode_Search Profile**pSearchProfiles};
HRESULT GetMECapabilities(
[out] VA2_Encode_MECaps* pMECaps
};
HRESULT CreateVideoEncoder([in] REFGUID PipeIineGuid, [in] REFGUID FormatGuid,
[in] UINT32 NumStreams,
[in] VA2_Encode_StaticConfiguration* pConfiguration,
pn, size_is(NumStreams)] VA2_Encode_DataDescription *pDataDescription,
[in, sizeJs(NumStreams)] VA2_Encode Allocator* SuggestedAllocatorProperties,
[out, sizeJs(NumStreams)] VA2_Encode_Allocator* pActualAllocatorProperties,
[out] IVideoEncoder** ppEncode
);
};
3.2 Métodos: IvideoEncoder3.2.1 GetBuffer
Essa função retorna armazenamentos temporários (superfícies de codificação) parauso na chamada de execução. Os armazenamentos temporários são liberados prontamentedepois do uso chamando ReIeaseBuffer1 para evitar o bloqueio da canalização.
HRESULT GetBuffer(
[in] UINT8 Streamld,[in] UINT32 StreamType1[in] BOOL Blocking1[out] PVOID pBuffer};
#define E_NOTAVAILABLE HRESULT_FROM_WIN32 (ERRORJNSUFFICIENTBUFFER)
#define EJNVALIDPARAMETER HRESULT_FROM_WIN32 (ERROR INVALIDPARAMETER)
Parâmetros
Streamld
Refere-se ao fluxo particular para o qual os armazenamentos temporários são de-sejados. Dependendo do fluxo particular, tipos diferentes de armazenamentos temporárioscomo armazenamentos temporários da imagem de entrada, armazenamentos temporáriosdo vetor de movimento, etc. serão retornados. Nem todos os IDs do fluxo para uma dadaconfiguração são entradas válidas para essa função. Valores permitidos para Streamld sãoespecificados como parte da configuração da canalização.
StreamType
Especifica o tipo de armazenamento temporário a ser retornado. Tipicamente, o tipode fluxo será indicado por Streamld, e negociado no momento da criação. Se StreamTypenão é consistente com Streamld, a função retorna um valor de erro. O armazenamento tem-porário dos dados é interpretado (estereotipado) com base no valor de StreamType comodescrito pela tabela na seção de Observações.Blocking
Especifica o comportamento da função quando existe inanição ou alguma outra ne-cessidade para o estrangulamento. Um valor de verdadeiro indica que a função deve blo-quear, enquanto falso indica que a função deve retornar E_NOTAVAILABLE.pBuffer
O ponteiro para um armazenamento temporário de dados a ser liberado através deReIeaseBuffer. O ponteiro é remodelado (interpretado) com base no parâmetro StreamType1e isso é descrito na tabela na seção de Observações abaixo.Valores de retornoS_OK
Função bem-sucedida.
E_NOTAVAILABLE
Esse é retornado quando o acionador precisa de armazenamentos temporários, e oindicador de bloqueio foi ajustado para falso.
E_l NVALIDPARAMETER
Os parâmetros de entrada estavam incorretos. Isso pode ser usado, por exemplo,quando StreamType não iguala o valor esperado para o dado Streamld.
E JJNSUPPORTED _ STREAM
Streamld é inválido. GetBuffer não supre armazenamentos temporários para o IDdo fluxo especificado. Valores permitidos para Streamld são descritos como parte da confi-guração da canalização. Para o ID do fluxo especificado, o alocador pode ser externo oupode não existir alocador absolutamente.
E_FAIL
Função falha.
Observações
Normalmente essa função retorna o controle muito rápido quando os armazena-mentos temporários já estão presentes na fila do alocador. As únicas condições sob asquais essa função deve bloquear (ou retornar E_NOTAVAILABLE) são quando todos osarmazenamentos temporários da fila do alocador foram submetidos ao dispositivo, ou foramconsumidos pela aplicação e, portanto não liberados.
Tipos de fluxo e formatos do armazenamento temporário
StreamType_Video IDirect3DSurface9** pBuffer.StreamType_MV IDirect3DSurface9** pBufferStreamType_Residues IDirect3DSurface9* pBuffer[3]., isto é, pBuffer é um ponteiro para três ponteiros de superfí- cie D3D. pBuffer[0] é um ponteiro para a superfície de brilho. pBuffer[1] é um ponteiro para a superfície Cb, ou NULL se não aplicável. pBuffer[2] é um ponteiro para a superfície Cr, ou NULL se não aplicável.
3.2.2 ReIeaseBuffer
Essa função é usada para liberar uma superfície de volta para a fila do alocador pa-ra reutilização via GetBuffer.
HRESULT ReleaseBuffer([in] UINT8 Streamld,(in] UINT8 StreamType1
[in] PVOID pBuffer};
ParâmetrosStreamld
ID do fluxo associado com o armazenamento temporário.StreamType
Tipo do fluxo para o armazenamento temporário.pBuffer
Armazenamento temporário a ser liberado de volta para a fila do alocador.Valores de retornoS OK
Função bem sucedida.
E FAIL
Função falha.3.2.3 Execute
Essa função é usada para submeter solicitações para o hardware. Ela contém ar-mazenamentos temporários de dados de entrada e saída obtidos através de GetBuffer1 bemcomo alguma informação de configuração. A função é assíncrona e sua conclusão é indica-da pelo evento sendo sinalizado. O estado de conclusão é indicado usando o parâmetropStatus que é alocado no monte e verificado somente depois que o evento foi sinalizado.
Os armazenamentos temporários supridos como parâmetros para essa função nãosão lidos de (por exemplo, através de LockRect), ou escritos pela aplicação até que a fun-ção tenha verdadeiramente concluído. A conclusão verdadeira é implicada por um valor deerro sendo retornado pela função ou se essa função retorna sucesso, então pela sinalizaçãode hEvent (parâmetro para essa função). Quando o mesmo armazenamento temporário éinserido em várias instâncias da chamada Execute, ele não será acessado até que todas aschamadas Execute associadas tenham concluído. O ponteiro para uma superfície em uso por Execute pode ainda ser suprido como um parâmetro para as funções VA como Executedesde que isso não requer que os dados fiquem bloqueados. Essa última regra explica co-mo a mesma imagem de entrada pode ser usada em múltiplas chamadas Execute ao mes-mo tempo.
tica do alocador negociada no tempo da criação. Se um alocador externo é usado quandoGetBuffer é esperado de ser usado, essa função retornará E_FAIL.
Os armazenamentos temporários supridos para essa chamada obedecem à semân-
HRESULT Execute([in] UINTB Stage1
[in] UINT32 NumInputDataParameters,
[in, size_is(NumlnputDataParameters)] VA2_Encode_ ExecuteDataParameter'plnputData,
[in) UINT32 NumOutputDataParameters,[out, size_ is(NumOutputDataParameters)]VA2_Encode ExecuteDataParameter** pOutputData,[in] UINT32 NumConfigurationParameters,
pn, size is(NumConfigurationParameters] VA2_Encode_ ExecuteConfigurationParame-ter** pConfiguration,
[in] HANDLE hEvent,
[out] H RESU LT* pStatus};
ParâmetrosStage
Para configurações de canalização dividida, esse parâmetro identifica o estágio es-pecífico da canalização dividida. A numeração é baseada em um e para canalizações nãodivididas esse parâmetro é ignorado.
NumInputDataParameters
plnputData
Formação de ponteiros para valores dos dados de entrada. Ponteiros de dados in-dividuais são remodelados apropriadamente com base no valor Streamld que tem um Stre-amDescription associado especificado na criação. Os armazenamentos temporários de da-dos são alocados na criação e obtidos durante o processo de transferência contínua cha-mando GetBuffer.
NumOutputDataParameters
Tamanho da formação dos dados de saída (próximo parâmetro).
pOutputData
Formação de ponteiros para valores dos dados de saída. Os ponteiros de dados in-dividuais são remodelados apropriadamente com base no valor Streamld que tem um Stre-amDescription associado especificado na criação. Os armazenamentos temporários de da-dos são alocados na criação e obtidos durante o processo de transferência contínua cha-mando GetBuffer.
NumConfigurationParameters
Tamanho da formação dos dados de entrada (próximo parâmetro).
Tamanho da formação de configuração (próximo parâmetro).pConfigurationFormação de parâmetros de configuração controlando a execução da canalização.A configuração geral é a união dessa estrutura junto com parâmetros de configuração está-ticos supridos quando o codificador foi criado.hEvent
Alça de evento sinalizando que os dados de saída estão prontos.pStatus
Estado indicando se a operação solicitada completou com sucesso. Valores permi-tidos incluem S_OK (conclusão bem-sucedida), E_TIMEOUT (se o limite de tempo foi exce-dido) e E_SCENECHANGE (se a detecção de mudança de cena foi habilitada e detectada).
Em ambos os casos de erro, nenhuma das superfícies de saída contém quaisquer dadosúteis. Esse parâmetro é alocado no monte, e o valor de retorno é verificado somente depoisque hEvent foi sinalizado.
Valores de retornoS_OK
Função bem-sucedida.
E_FAILFunção falha.Observações
Se a alça do evento foi sinalizada, isso significa que LockRect deve completar ins-tantaneamente quando chamado em qualquer uma das superfícies de saída desde que elasestão prontas. Em particular, espera-se que a chamada LockRect não bloqueie qualquerduração de tempo aguardando quaisquer alças de evento. Nem ela pode desperdiçar tempode CPU através de voltas ocupadas.
3.3 Estruturas de dados: Execute
A chamada Execute tem parâmetros de dados e parâmetros de configuração. Pa-râmetros de dados específicos podem ser imaginados como derivando da classe de base(ou estrutura) VA2_Encode_ExecuteDataParameter e parâmetros de configuração específi-cos podem ser imaginados como derivando da classe de base (ou estrutura)VA2_Encode_ExecuteConfi-gurationParameter.
3.3.1 VA2 Encode ExecuteDataParameter
typedef struct _VA2_Encode_ExecuteDataParameter {
UINT32Length;
UINT32Streamld;
} VA2_Encode_ExecuteDataParameter;
Elementos
Length
Número de bytes nessa estrutura. Provido por extensibilidade.Streamld
O ID do fluxo de dados como definido na configuração da canalização. Os formatosdo armazenamento temporário são negociados no tempo de criação usando o parâmetroStreamDescription.
3.3.2 VA2 Encode ExecuteConfiqurationParameter
typedef struct _VA2_Encode_ExecuteConfiguration-Parameter {
UINT32Length;
UINT32Streamid;
UINT32ConfigurationType;
} VA2 Encode_ ExecuteConfigurationParameter;
#define VA2_Encode_ConfigurationType_ MotionEstimationOxI
#define VA2_Encode_ConfigurationType_ Quantization 0x2
Elementos
Length
Número de bytes nessa estrutura. Provido por extensibilidade.Streamld
O ID do fluxo de dados como definido na configuração da canalização. Esse podeser usado para deduzir se os dados são de entrada ou de saída.
ConfigurationType
Esse parâmetro descreve o parâmetro de configuração e é usado para estereotipara estrutura atual apropriadamente.
Observações
Essa estrutura age como um tipo de base para informação de configuração maisespecializada. O tipo de base é estereotipado para um tipo mais especializado com base noparâmetro ConfigurationType. O mapeamento entre ConfigurationType e as estruturas es-pecializadas é descrito na tabela abaixo.
Tipos de configuração
ConfigurationTypeMotion_Estimation ConfigurationTypeMoti- on_EstimationConfigurationType_Quantization ConfigurationParame- ter_Quantization
3.3.3 DataParameter MotionVectors
typedef struct_VA2_Encode_ExecuteDataParameter_ MotionVectors {UINT32Length;
UINT32Streamld; VA2_Encode_MVSurfaCe* pMVSurface;} VA2_Encode_ExecuteDataParameter_MotionVectors;Elementos
Length
Número de bytes nessa estrutura. Provido por extensibilidade.
Streamld
O ID do fluxo de dados como definido na configuração da canalização. Isso podeser usado para deduzir se os dados são de entrada ou de saída.pMVSurface
Ponteiro para uma estrutura contendo a superfície D3D do vetor de movimento.
3.3.4 DataParameter Residues
typedef struct _VA2_Encode_ExecuteDataParameter_ Residues {UINT32Length;
UINT32Streamld;
VA2_Encode_ResidueSurface*pResidueSurfaceY;
VA2_Encode_ResidueSurface*pResidueSurfaceCb;
VA2_Encode_ResidueSurface*pResiduesurfaceCr;
} VA2_Encode_ExecuteDataParameter_Residues;
Elementos
Length
Número de bytes nessa estrutura. Provido por extensibilidade.
Streamld
O ID do fluxo de dados como definido na configuração da canalização. Isso podeser usado para deduzir se os dados são de entrada ou de saída.
pResidueSurfaceY
Superfície do resíduo contendo valores de brilho.
pResidueSurfaceCb
Superfície do resíduo contendo valores Cb de saturação.
pResidueSurfaceCr
Superfície do resíduo contendo valores Cr de saturação.
3.3.5 DataParameter inputimaqetypedef struct _VA2_Encode_ExecuteDataParameter_ Inputlmage {UINT32Length;
UINT32Streamld;
VA2_Encode_lmagelnfo* plmageData;
} VA2_Encode_ExecuteDataParameter_lnputlmage;
Elementos
Length
Número de bytes nessa estrutura. Provido por extensibilidade.Streamld
O ID do fluxo de dados como definido na configuração da canalização. Isso podeser usado para deduzir se os dados são de entrada ou de saída,ρ ImageData
Ponteiro para uma estrutura contendo a superfície D3D de imagem de entrada. Es-sa é a superfície para a qual os vetores de movimento são buscados.
3.3.6 DataParameter Referencelmaqes
typedef struct _VA2_Encode_ExecuteDataParameter_ Referencelmages {UINT32Length;UINT32Streamld;UINT32NumReferencelmages; VA2_Encode_lmagelnfo* pReferencelmages} VA2_Encode_ExecuteDataParameter_Referencelmages;
Elementos
Length
Número de bytes nessa estrutura. Provido por extensibilidade.
Streamld
O ID do fluxo de dados como definido na configuração da canalização. Isso podeser usado para deduzir se os dados são de entrada ou de saída.DataTypeNumReferenceImages
Tamanho da formação das imagens de referência (próximo parâmetro).pReferencelmages
Formação das imagens de referência na qual basear os vetores de movimento. Pa-ra formatos simples como MPEG-2 somente um quadro progressivo (ou dois campos) po-dem ser usados. Por outro lado, formatos como H.264 e VC-1 suportam vetores de movi-mento atravessando vários quadros. Um P-quadro no MPEG-2 usa somente uma imagemde referência enquanto um B-quadro com vídeo entrelaçado, e movimento do tipo de campopoderiam usar 4 imagens, cada uma das quais pode se referir a um quadro ou um campo.
3.3.7 DataParameter Decodedlmaqe
typedef struct _VA2_Encode_ExecuteDataParameter_ Decodedlmage {
UINT32Length;UINT32Streamld;
VA2_Encode_lmagelnfo* pYCbCrlmage;} VA2_Encode_ExecuteDataParameter_Decodedlmage;
Elementos
Length
Número de bytes nessa estrutura. Provido por extensibilidade.Streamld
O ID do fluxo de dados como definido na configuração da canalização. Isso podeser usado para deduzir se os dados são de entrada ou de saída.
DataType
pYCBCrlmage
Imagem decodificada de saída obtida depois da quantização inversa, transformaçãoinversa e compensação de movimento. Para boa canalização, a superfície D3D associadanão deve ser bloqueada ou os dados transferidos para a memória do sistema desnecessari-amente. Os ponteiros de superfície podem ainda ser usados como uma imagem de referên-cia.
3.3.8 VA2 Encode Imaaelnfo
typedef struct VA2_Encode_lmagelnfo{IDirect3 DSurface9* pSurface;
BOOLField;
BOOLInterlaced;
RECTWindow;
} VA2_Encode_lmagelnfo;
Elementos
pSurface
Ponteiro para uma superfície D3D contendo a imagem no formato YCbCr.
Field
Um valor de um indica que a superfície contém um campo de dados de vídeo, e osdados são assumidos como sendo entrelaçados. Zero indica um quadro progressivo total.Interlaced
Um valor de um indica que os dados da imagem são entrelaçados. Esse indicadordeve ser usado somente quando Field (parâmetro acima) é ajustado para um. Se Field estáajustado para um, é assumido que os dados estão entrelaçados.
Windows
Um retângulo dentro da imagem. Isso poderia ser usado para restringir a chamadade estimativa do movimento para retornar vetores de movimento para apenas um retângulodentro de toda a imagem.
3.3.9 ConfiqurationParameter MotionEstimation
typedef struct _VA2_Encode_ExecuteConfiguration Parameter_MotionEstimation
{
UINT32Length;
UINT32Streamld;
UINT32ConfigurationType;
VA2_Encode_MEParameters* pMEParams;} VA2_Encode_ExecuteConfigurationParameter_Motion Estimation;
Elementos
Length
Número de bytes nessa estrutura. Provido por extensibilidade.
Streamld
O ID do fluxo de dados como definido na configuração da canalização. Isso podeser usado para deduzir se os dados são de entrada ou de saída.
ConfigurationTypepMEParams
Ponteiro para uma estrutura definindo vários parâmetros governando a pesquisa demovimento incluindo a janela de pesquisa, etc.
Observações
A figura 8 mostra vários parâmetros exemplares de estimativa do movimento, deacordo com uma modalidade. Esses parâmetros são para uso nas estruturas abaixo.
3.3.10 VA2 Encode SearchResoIution
typedef enum {
VA2_Encode_SearchResolution_FullPixel,VA2_Encode_SearchResolution_HalfPixel,VA2_Encode_SearchResolution_QuarterPixel} VA2_Encode_SearchResolution;
Descrição
FuIIPixeI
Vetores de movimento são calculados em unidades de pixel completas.HaIfPixeI
Vetores de movimento são calculados em unidades de meio pixel. Assim um valordo vetor de movimento de (5,5) se refere a um macrobloco de dados que está (2,5, 2,5) pi-xels distante.
QuarterPixeI
Vetores de movimento são calculados em unidades de quarto de pixel. Assim, umvalor do vetor de movimento de (10, 10) se refere a um macrobloco de dados que está (2,5,2,5) pixels distante.
Na computação dos valores do vetor de movimento de sub-pixel, o codificador es-tima os valores de brilho e saturação usando interpolação. O esquema de interpolação es-pecífico é dependente do formato e os seguintes GUIDs (parte da configuração estática)controlam o esquema de interpolação.
// {E9AF78CB-7A8A-4d62-887F-86A418364C79}
cpp_quote ("DEFINE_GUID(VA2_Encode_lnterpolation_MPEG2Bilinear, Oxe9af78cb,Ox7a8a, 0x4d62, 0x88, 0x7f, 0xb6, 0xa4, 0x18, 0x36, 0x4c, 0x79);")// {A94BBFCB-1BF1-475C-92DE-67298AF56BB0}
ορρ_ςυοΐΘ('ΌΕΡΙΝΕ_3υΐϋ(νΑ2_Εη(Χ)άΘ_ίηΐΘφθΐ3ΐϊοη_ΜΡΕΘ213ΐουόίο, Oxa94bbfcb,Oxlbfl1 0x475c, 0x92, Oxde, 0x67, 0x29, Ox8a, OxfS, Ox6b, OxbO};")
3.3.11 VA2 Encode SearchProfiIe
typedef struct_VA2_Encode_SearchProfile{
UINT8 QuaIityLeveI;
UINT8 TimeTaken;
GUIDSearchTechnique;
GUID Subpixellnterpolation;
} VA2_Encode_SearchProfileElementos
QuaIityLeveI
Um número na faixa [0-100] que indica a qualidade relativa dos vetores de movi-mento entre os perfis diferentes suportados pelo dispositivo.
TimeTaken
Um número na faixa [0-100] que indica o tempo relativo consumido para perfis depesquisa diferentes. Isso possibilita que a aplicação faça uma troca de qualidade-tempo ra-zoável.
SearchTechnique
Um GUID indicando o algoritmo de pesquisa usado.
Subpixel I nterpolation
Um GUID indicando o esquema de interpolação de subpixel usado.
Observações
Não existe definição universalmente aceita de qualidade absoluta, então nós esta-mos estabelecendo uma medida relativa. Os valores indicados contra TimeTaken devemseguir uma regra de proporção restrita. Se perfil 1 consome 10ms e perfil 2 consome 20ms,os valores de TimeTaken devem estar na relação de 20/10 = 2.
3.3.12 VA2 Encode MBDescription
typedef struct_VA2_Encode_MBDescription {BOOL ConstantMSSize;
UINT32 MBWidth;
UINT32 MBHeight;
UINT32 MBCOUnt;
RECT* pMBRectangles;
} VA2_Encode_MBDescription;ElementosConstantMBSize
Um valor de um indica que todos os macroblocos na imagem atual têm o mesmotamanho. Isso pode não ser verdadeiro para formatos como H.264.
MBWidth
Largura de um macrobloco. Válido somente se bConstantMBSize é um.
MBHeight
Altura de um macrobloco. Válido somente se bConstantMBSize é um.
MBCount
Se bConstantMBSize é zero, então os macroblocos (ou segmentos) na imagem sãodescritos usando uma formação de retângulos. Esse parâmetro descreve o tamanho noselementos do parâmetro pMBRectangles seguinte.
pMBRectangles
Uma formação de retângulos descrevendo como a imagem é para ser cortada.3.3.13 VA2 Encode SearchBounds
typedef struct_VA2_Encode_SearchBounds {BOOL DetectSceneChange;
UINT32 MaxDistanceInMetric;
UINT32 TimeLimit;
UINT32 MaxSearchWindowX;
UINT32 MaxSearchWindowY;
} VA2_Encode_SearchBounds;
Elementos
DetectSceneChange
Se esse valor é um, então a detecção da mudança da cena está sendo solicitada.
Em um tal caso, se a mudança da cena é detectada, nenhum vetor de movimento será cal-culado pela chamada Execute e, portanto, nenhum resíduo ou imagens decodificadas serácalculado também. Isso é indicado através do parâmetro pStatus da chamada Execute quedeve ser ajustada para E_SCENECHANGE nesse caso.
MaxDistanceInMetric
Refere-se à diferença entre macroblocos quando comparações são feitas usando amétrica de distância de escolha atual. Se essa distância excede esse valor de MaxDistance-InMetric, então um tal vetor de movimento é rejeitado.TimeLimit
Tempo máximo que o hardware pode gastar no estágio da estimativa do movimen-to. Se ele é mais longo do que esse tempo, o parâmetro pStatus da chamada Execute éajustado para E_TIMEOUT.E_TIMEOUT.
Valor máximo do componente χ do vetor de movimento retornado. Em outras pala-vras, o tamanho (ao longo da dimensão x) da janela de pesquisa.SearchWindowY
Valor máximo do componente y do vetor de movimento. Em outras palavras, o ta-manho (ao longo da dimensão y) da janela de pesquisa.Observações
3.3.14 VA2 Encode ModeTypetypedef struct_VA2_Encode_ModeType {UINT32 SearchProfiIeindex;GUID DistanceMetric;INT16 HintX;INT16 HintY;
} VA2_Encode_ModeType;ElementosSearehProfiIeindex
índice na lista de perfis de pesquisa como retornado pela chamada da API GetSe-archProfiles.
DistanceMetric
Métrica a usar quando comparando dois macroblocos. Métricas geralmente usadasincluem SAD (soma de diferenças absolutas) e SSE (soma de erros quadrados).HintX
Palpite sobre a direção esperada de movimento para guiar a pesquisa do movimen-to. Isso se refere ao movimento geral na imagem e pode não ser aplicável em uma base porMB.
HintY
Palpite sobre a direção esperada de movimento para guiar a pesquisa do movimen-to. Isso se refere ao movimento geral na imagem e pode não ser aplicável em uma base porMB.
3.3.15 ConfiqurationParameter Quantizationtypedef struct_VA2_Encode_ExecuteConfiguration Parameter_ Quantization {UINT32 Length;UINT32 Stream id;UINT32 ConfigurationType;UINT32 StepSize;} VA2_Encode_ExecuteConfigurationParameter_Quantization;ElementosLength
Número de bytes nessa estrutura. Provido por extensibilidade.Streamld
O ID do fluxo de dados como definido na configuração da canalização. Isso podeser usado para deduzir se os dados são de entrada ou de saída.ConfigurationTypeStepSize
Tamanho da etapa a ser usada quando executando a quantização. Esse projetopermite que somente um tamanho de etapa seja usado para toda a porção da imagem paraa qual vetores de movimento e resíduos foram solicitados nessa chamada.3.4 Métodos: IVideoEncoderService
Os métodos nessa interface permitem que uma aplicação consulte o hardware porsuas capacidades e crie um objeto de codificador com uma dada configuração.3.4.1 GetPipelineConfiqurations
HRESULT GetPipelineConfigurations(
[out] UINT32* pCount,
(out, unique, size_is(*pCount)] GUID** pGuids};
Parâmetros
pCount
Valor de retorno descreve o tamanho da formação pGuids (próximo parâmetro) re-tornado pela função.pGuids
Uma formação de GUIDs descrevendo as várias configurações de canalização su-portadas pelo dispositivo. A memória é alocada pelo chamado, e deve ser liberada pelochamador usando CoTaskMemFree.Valores de retornoS_OK
Função foi bem-sucedida
E_OUTOFMEMORY
Função foi incapaz de alocar memória para retornar a lista de GUIDsE_FAIL
Incapaz de determinar as configurações de canalização suportadas por causa dealgum erro de dispositivo.
3.4.2 GetFormats
HRESULT GetFormats([out] UINT32* pCount,(out, unique, size_is(*pCount)] GUID** pGuids};
Parâmetros
pCount
Valor de retorno descreve o tamanho da formação de pGuids (próximo parâmetro)retornado pela função.
pGuids
Uma formação de GUIDs descrevendo os vários formatos suportados pelo disposi-tivo (por exemplo, WMV9, MPEG-2, etc.). A memória é alocada pelo chamado, e deve serliberada pelo chamador usando CoTaskMemFree.
3.4.3 GetDistanceMetricsHRESULT GetDistanceMetrics([out] UINT32* pCount,
(out, unique, size_is(*pCount)] GUID** pGuids);
ParâmetrospCount
Valor de retorno descreve o tamanho da formação de pGuids (próximo parâmetro)retornado pela função.
pGuids
Uma formação de GUIDs descrevendo as várias métricas de pesquisa suportadaspelo dispositivo para estimativa do movimento. A memória é alocada pelo chamado e é libe-rada pelo chamador usando CoTaskMemFree.
Valores de retorno
S_OK
Função foi bem-sucedidaE_OUTOFMEMORY
Função foi incapaz de alocar memória para retornar a lista de GUIDsEJ=AIL
Incapaz de determinar a métrica suportada por causa de algum erro de dispositivo.
3.4.4 GetSearchProfiIes
HRESULT GetSearchProfiles([out] UINT32* pCount,
(out, unique, size_is(*pCount)] VA2_Encode_Search-Profile** pSearchProfiles);
ParâmetrospCountValor de retorno descreve o tamanho da formação de pGuids (próximo parâmetro)retornado pela função.
pSearchProfiles
Uma formação de GUIDs representando os perfis de pesquisa suportados pelo dis-positivo. Os perfis de pesquisa permitem trocas de qualidade-tempo de aplicação do codecmais efetivamente. A memória é alocada pelo chamado e é liberada pelo chamador usandoCoTaskMemFree.
Valores de retorno
S_OK
Função foi bem-sucedida
E_OUTOFMEMORY
Função foi incapaz de alocar memória para retornar a lista de GUIDs
E_FAIL
Incapaz de determinar os perfis de pesquisa suportados por causa de algum errode dispositivo.
3.4.5 GetMECapabiIitiesHRESULT GetMECapabilities(
[out] VA2_Encode_MECaps* pMECaps);
Parâmetros
pMECaps
Um ponteiro para as capacidades de estimativa do movimento do dispositivo. Issoinclui informação sobre o tamanho da imagem que o dispositivo pode manipular, o máximotamanho de janela de pesquisa e se o dispositivo suporta tamanhos de macrobloco variá-veis. A memória para isso é alocada pelo chamador.Valores de retornoS_OK
Função foi bem-sucedidaE_FAIL
Função falhou devido a algum erro de dispositivo.
3.4.6 CreateVideoEncoder
Essa função cria uma instância de IVideoEncoder.HRESULT CreateVideoEncoder([in] REFGUID PipeIineGuid1
[in] REFGUID FormatGuid1
[in] UINT32 NumStreams1
[in] VA2_Encode_StaticConfiguration* pConfiguration,[in, sizeJs(NumStreams)] VA2_Encode_StreamDescrip-tion* pStreamDescription,[in, size_is(NumStreams)] VA2_Encode_Allocator* SuggestedAllocatorProper-ties,
[out, size_is(NumStreams)] VA2_Encode_Allocator* pActualAllocatorProperties,[out] IVideoEncoder** ppEncode);
ParâmetrosPipeIineGuid
Um GUID representando a configuração de canalização desejada. A lista de confi-gurações é obtida através de GetCapabiIities1 e cada um dos GUIDs é associado com a do-cumentação pública que descreve detalhes necessários sobre a configuração.FormatGuid
Um GUID representando o formato do fluxo de bits codificado eventual. Muitas dasoperações de codificação como transformação e quantização têm elementos de formatoespecífico para elas. Embora esses elementos de formato específico possam ser manipula-dos pela CPU com velocidade suficiente, a troca de informação precisará do uso de estágiosextras de canalização e tornará mais difícil obter alta eficiência da canalização.NumStreams
Número de fluxos de dados de entrada e saída associados com a configuração dacanalização. Isso é implicado pelo GUID da canalização em muitos casos.pConfiguration
Um ponteiro para as propriedades de configuração estática.pStreamDescription
Uma formação de estruturas, uma por fluxo, que descreve os dados fluindo atravésdesse fluxo.
SuggestedAllocatorProperties
O chamador (aplicação do codec) sugere um certo número de armazenamentostemporários (superfícies) a serem associados com os fluxos diferentes com base no seuprojeto de canalização.pActualAllocatorProperties
O acionador especifica o tamanho de fila do alocador atual com base nos recursosque ele é capaz de reunir e outras considerações. A suposição é que a aplicação abortará ouso dessa interface se ela não pode construir uma canalização eficiente com o armazena-mento temporário (tamanho de fila do alocador) disponível.ppEncode
Objeto do codificador de saída. O chamador deve considerar isso para ser um obje-to COM regular a ser liberado através de IUnknown::Release.Valores de retornoS_OK
Função bem-sucedida.E_FAIL
Função falha (provavelmente por carência de recursos)
3.5 Estruturas de dados: Data Structures: IVideoEncoderService
3.5.1 VA2 Encode MECaps
typedef struct_VA2_Encode_MECapsBOOB VariabIeMI 3SizeSupportedrBOOL MotionvectorHintSupported;
UINT16 MaxSearchWindowX;UINT16 MaxSearchWindowY;UINT32 MaxImageWidth;UINT32 MaxImageHeight;UINT32 MaxMBSizeX;
UINT32 MaxMBSizeY;1 VA2_Encode_MECaps;Elementos
Yana bleMBSizeSupported
Um valor de um indica que o hardware suporta tamanhos de macrobloco variáveisquando executando estimativa de movimento. Em particular, se tamanhos de macroblocovariáveis são suportados, é legal que o chamador dessa API ajuste ConstantMBSize para zerona estrutura VA2_Encode_MBDescription, e use o parâmetro pMBRectangles para descrever apartição da imagem.
Motion VectorHintSupported
Um valor de um indica que o hardware é capaz de usar alguns palpites do chama-dor no seu algoritmo de pesquisa de movimento. Em particular, o chamador pode ajustar oselementos HintX e HintY de VA2_Encode_ModeType que é um parâmetro de configuraçãodo Execute.
MaxSearch WindowX
Valor legal máximo de SearchWindowX, um elemento deVA2_Encode_SearchBounds, que é um parâmetro de configuração de estimativa de movi-mento.
MaxSearch Window Γ
Valor legal máximo de SearchWindowY1 um elemento deVA2_Encode_SearchBounds, que é um parâmetro de configuração de estimativa de movi-mento.MaximageWidth
Largura máxima permitida da imagem de entrada.MaximageHeigh t
Altura máxima permitida da imagem de entrada.MaxMBSizeX
Largura máxima permitida do macrobloco.MaxMBSizeY
Altura máxima permitida do macrobloco.
3.5.2 VA2 Encode StaticConfiaurationtypedef struct_VA2_Encode_StaticConfiguration (
GUID TransformOperator;
GUID Pixellnterpolation;
GUID Quantization;
UINTB NumMotionVectorsPerMB;
VA2_Encode MVLayout MVLayoutVA2_Encode_ResidueLayout ResLayout;
} VA2_Encode_StaticConfiguration;
Elementos
Transform Operator
Um GUID representando o operador da transformação - um de MPEG-2 DCT1transformação WMV9, etc.
Pixellnterpolation
Um GUID representando o esquema de interpolação de sub-pixel a ser usado. Ossistemas de interpolação bicúbico e bilinear têm um número de coeficientes que são especí-ficos do formato.
Quantization
Um GUID representando o esquema de quantização a ser usado.
NumMotion VectorsPerMB
O número de vetores de movimento a ser calculado por macrobloco. As configura-ções de canalização simples suportadas por versões anteriores dessa interface podem exi-gir que esse valor seja um.MVLayout
O Ieiaute da superfície do vetor de movimento.
ResidueLayout
O Ieiaute da superfície de resíduo.
3.5.3 VA2 Encode Allocatortypedef struct_VA2_Encode_Allocator {BOOL ExternaIAIIocator;
UINT32 NumSurfaces;
> VA2 Encode Allocator;
Elementos
ExtemaIAIIocator
Falso indica que armazenamentos temporários são obtidos através de GetBufferenquanto verdadeiro indica que os armazenamentos temporários são obtidos via um aloca-dor externo, ou que não existe alocador associado com o fluxo em questão. A configuraçãoda canalização força o valor desse campo em muitos casos (freqüentemente para zero).Uma exceção notável está no fluxo da imagem de entrada que pode vir de um alocador ex-terno.
NumSurfaces
Número de superfícies a serem associadas com a fila do alocador.
3.5.4 VA2 Encode StreamDescription
typedef struct_VA2_Encode_StreamDescription {
UINT32 Length;
UINT32 StreamType;
} VA2_Encode_StreamDescription;
Elementos
Length
Comprimento de toda a estrutura usada para validar estereótipos e permitir a ex-tensibilidade.
StreamType
Descreve o tipo de dados associados com esse fluxo. Usado para estereotipar.
Observações
Essa estrutura de base é estereotipada para um tipo derivado no campo StreamTy-pe. Os estereótipos são descritos na documentação para VA2_Encode_StreamType.
3.5.5 VA2 Encode StreamType
#define VA2_Encode_StreamType VideoOxI
#define VA2_Encode_StreamType_MV0x2
#define VA2_Encode_StreamType_Residues0x3Descrições de tipoVA 2Encode StreamType_Video
A estrutura de descrição de fluxo associada pode ser modelada paraVA2_Encode_StreamType MV
A estrutura de descrição de fluxo associada pode ser modelada paraVA2_Encode_Stream_Type_ResiduesA estrutura de descrição de fluxo associada pode ser modelada paraVA2_Encode_Stream_Type_Residues.
3.5.6 VA2 Encode StreamDescription Videotypedef struct_VA2_Encode_StreamDescription {
UINT32 Length;UINT32 StreamType;VA2_VideoDesc_VideoDescription;} VA2_Encode_StreamDescription;ElementosLength
Comprimento de toda a estrutura usada para validar estereótipos e permitir a ex-tensibilidade.
StreamType
Descreve o tipo de dados associados com esse fluxo. Usado para estereotipar.
VideoDescription
Descreve várias propriedades do fluxo de vídeo incluindo as dimensões, velocidadede projeção, primários de cor, etc.
3.5.7 VA2 Encode StreamDescription MVtypedef struct_VA2_Encode_StreamDescription {
UINT32 Length;
UINT32 StreamType;VA2_Encode_MVType_MVType;VA2_Encode_MVLayout_MVLayout;} VA2_Encode_StreamDescription;Elementos
Length
Comprimento de toda a estrutura usada para validar estereótipos e permitir a ex-tensibilidade.
StreamType
Descreve o tipo de dados associados com esse fluxo. Usado para estereotipar.MVType
Descreve o tipo de estrutura do vetor de movimento usado para retornar dados demovimento. Usado na interpretação dos conteúdos da superfície do vetor de movimento.MVLayout
Descreve como as estruturas do vetor de movimento para uma dada imagem de
entrada são dispostas na memória.
3.5.8 VA2 Encode StreamDescriptionResiduestypedef struct_VA2_Encode_StreamDescription {UINT32 Length;UINT32 StreamType;
VA2_Encode_SamplingType_SamplingType;
UINT32 LumaWidth;
UINT32 LumaHeight;UINT32 ChromaCbWidth;UINT32 ChromaCbHeight;UINT32 ChromaCrWidth;UINT32 ChromaCrHeight;
} VA2_Encode_Stream Description;
Elementos
Length
Comprimento de toda a estrutura usada para validar estereótipos e permitir a ex-tensibilidade.
StreamType
Descreve o tipo de dados associados com esse fluxo. Usado para estereotipar.SampIingType
Especifica se os dados de resíduos são 4:4:4, 4:2:2, etc.LumaWidth
Largura da superfície de brilho.LumaHeight
Altura da superfície de brilho.ChromaCbWidth
Largura da superfície contendo os valores de resíduo Cb.
ChromaCbHeight
Altura da superfície contendo os valores de resíduo Cb.ChromaCrWidth
Largura da superfície contendo os valores de resíduo Cr.ChromaCbHeight
Altura da superfície contendo os valores de resíduo Cr.
3.6 Estruturas de dados: Vetores de movimento
3.6.1 Leiaute do vetor de movimento
A figura 9 mostra dados do vetor de movimento exemplar armazenados em umasuperfície D3D, de acordo com uma modalidade. Cada uma das células descritas como"MV" é uma estrutura do vetor de movimento. Representações diferentes são usadas de-pendendo dos valores de VA2_Encode_MVType e VA2_Encode_MVLayout. As estruturasreais e os Ieiautes são descritos abaixo.3.6.2 Novos formatos D3D
typedef enum_D30FORMAT{
D3DFMT_MOTIONVECTOR16 = 105,
D3DFMT_MOTIONVECTOR32 = 106,
D3DFMT_RESIDUE1 =107,
} D3DFORMAT;
Superfícies dos vetores de movimento e superfícies de resíduo são associadas comos novos tipos de formato D3D acima que indicam o tamanho dos vetores de movimentoindividuais e resíduos. Essa informação de tamanho é usada pelo acionador quando a apli-cação cria superfícies usando uma das APIs de superfície ou de criação de recurso providapor. O indicador de recurso associado com as superfícies de codificação éVA2_EncodeBuffer.
//HufferType
enum{
VA2_EncodeBuffer = 7,
typedef struct_D3DDDI_RESOURCEFLAGS
{
union {
struct{
UINTTextApiI;// 0x20000000
UINTEncodeBufferI;// 0x40000000
DINTReservedI;// 0x80000000};
UINTValue;};
} D3DDDI_RESOURCEFLAGS;
3.6.3 VA2 Encode MVSurface
Essa estrutura é efetivamente derivada de IDirect3DSurface9 e transporta informa-ção de estado que permite que alguém interprete os conteúdos da superfície D3D embutida,typedef struct_VA2_Encode_MVSurface {IDirect3DSurface9*pMVSurface;
VA2_Encode_MVTypeMVType;
VA2_Encode_MVLayout MVLayout;
GUID DistanceMetric;} VA2_Encode_MVSurface;ElementospMVSurface
Ponteiro para uma superfície D3D contendo vetores de movimento.MVType
Esse valor é usado para identificar a estrutura (VA2_Encode_MotionVector8, etc.)com a qual interpretar os vetores de movimento individuais.
MVLayout
Esse valor identifica como as estruturas individuais do vetor de movimento são dis-postas na superfície D3D.
DistanceMetric
Um GUID representando a métrica de distância usada para medir a distância entredois macroblocos. A métrica de distância é usada para identificar o macrobloco mais próxi-mo e, portanto, o vetor de movimento ótimo.3.6.4 VA2 Encode MVType
Esse valor de enumeração é usado para decodificar os conteúdos da superfícieD3D9 do vetor de movimento. Dependendo do tipo do vetor de movimento, uma de váriasestruturas de vetor de movimento diferentes é usada para interpretar os conteúdos da su-perfície.typedef enum {VA2_Encode MVType_Simple8,VA2_Encode_MVType_Simplel6,VA2_Encode_MVType_Extended8,VA2_Encode_MVType_Extended 16} VA2_Encode_MVType;
Descrição
VA2_Encode_MVType_Sirnple8
A estrutura do vetor de movimento é VA2_Encode_ MotionVectorô.VA2 Encode_MVType_Sirnplel6
A estrutura do vetor de movimento é VA2_Encode_ MotionVectorI 6.VA2_Encode_MVType_Extended8
A estrutura do vetor de movimento é VA2_Encode_ MotionVectorEx8.VA2_Encode_MVType_Extendedl6
A estrutura do vetor de movimento é VA2_Encode_ MotionVectorExI 6.3.6.5 VA2 Encode MVLavouttypedef enum {VA2_Encode_MVLayout_A,VA2_Encode_MVLayout_B,VA2_Encode_MVLayout_C} VA2_Encode_MVLayout;
Descrição
Tipo A
A superfície D3D real é uma formação de estruturas do vetor de movimento indexa-das pelo índice do macrobloco e índice da linha.
Tipo B
Esse é um Ieiaute acondicionado onde o número de vetores de movimento por ma-crobloco não é constante. Detalha TBD.
Tipo C
3.6.6 VA2 Encode MotionVector8
typedef struct_VA2_Encode_MotionVector8 {INTOx;
INTOy;
} VA2_Encode_MotionVector8;
Elementos
χ
coordenada χ do vetor de movimento.
y
coordenada y do vetor de movimento.
3.6.7 VA2 Encode MotionVectorl6typedef struct VA2_Encode_MotionVectorl6 {INT16 x;
INT16Y;
} VA2_Encode_MotionVectorl6;
Elementos
χ
coordenada χ do vetor de movimento.
y
coordenada y do vetor de movimento.
3.6.8 VA2 Encode MotionVectorEx8
typedef struct_VA2_Encode_MotionVectorEx8 {INT8x;
INTBY;
UINT8 Imagelndex;UINT8 Distance;} VA2_Encode_MotionVectorEx8;
Elementos
χ
coordenada χ do vetor de movimento.
y
coordenada y do vetor de movimento.
Imagelndex
Um índice com base em zero na lista das imagens de referência que foi provido nachamada para os vetores ComputeMotion
Distance
a unidade de medição é especificada pelo campo DistanceMetric deVA_Encode_MVSurface. Ela mede a distância do macrobloco atual com o macrobloco dereferência citado pelo vetor de movimento real (x, y).
3.6.9 VA2 Encode MotionVectorExl6
typedef struct_VA2-Encode_MotionVectorExl6 {
INT16x;
INT16y;
UINT16 Imagelndex;
UINT16 Distance;
} VA2_Encode_MotionVectorExl6;
Elementos
χ
coordenada χ do vetor de movimento.
y
coordenada y do vetor de movimento.
Imagelndex
um índice com base em zero na lista das imagens de referência que foi provido nachamada para os vetores ComputeMotion
Distance
a unidade de medição é especificada pelo campo DistanceMetric deVA_Encode_MVSurface. Ela mede a distância do macrobloco atual com o macrobloco dereferência citado pelo vetor de movimento real (x, y).
3.7 Estruturas de dados: resíduos
A superfície do resíduo é uma formação de valores de número inteiro assinadosque são de dois bytes de comprimento - em outras palavras, eles são do tipo INT16. Esseesquema parece ser adequado em todos os casos de importância prática. Por exemplo,MPEG-2 lida com 9 valores de resíduo de bit e H.264 lida com 12 resíduos de bit. Também,se os dados originais eram YUY2, os valores de brilho ocupam um byte cada, e, portanto, osresíduos usam 9 bits (O — 255 —255). Além do que, a aplicação de uma transformação dotipo DCT aumenta a exigência de dados para 11 bits por valor de resíduo. Todos esses ca-sos são manipulados adequadamente usando valores de resíduo assinados de 2 bytes decomprimento.
A largura de uma superfície de resíduo é o número de valores de resíduo em umalinha. Por exemplo, uma imagem progressiva de 640x480 com amostragem 4:2:2 tem 640valores de brilho e 320 valores de saturação por linha. O tamanho da superfície de brilhoassociada é 640x480x2 e essa da superfície de saturação é 320x480x2 bytes.
As superfícies do resíduo são criadas usando o indicador de formatoD3DFMT_RESIDUE16 e o tipo de recurso VA2_EncodeBuffer.
3.7.1 Plano de brilho
A figura 10 mostra um diagrama exemplar indicando que a largura da superfície debrilho iguala a imagem YCbCr original. Por exemplo, uma imagem de 640x480 tem 480 valo-res de brilho por linha e assim a largura da superfície de brilho é 480. Então, o tamanho dasuperfície de brilho é 640x480x2 bytes.
Plano = VA2_Encode_Residue_Y
Amostragem = VA2_Encode_SamplingType_*
3.7.2 Saturação 4:2:2
A figura 11 mostra um diagrama exemplar indicando que o número do valor de re-síduo por linha de vídeo é metade com a largura da imagem de vídeo original, de acordocom uma modalidade. Assim, para uma imagem de 640x480, o número de valores de resí-duo por linha e, portanto a largura da superfície é 320.
Plano = VA2_Encode_Residue_U ou VA_Encode_Residue_V
Amostragem = VA2_Encode_SamplingType 422
3.7.3 Saturação 4:2:0
Nesse cenário, a largura da superfície do resíduo é metade da largura do quadroprogressivo original, e a altura é metade também. Assim, para uma imagem de 640x480, aprópria superfície de saturação seria de 320 de largura e 240 de comprimento.
Plano = VA2_Encode_Residue_U ou VA_Encode_Residue_V
Amostragem = VA2_Encode_SamplingType 420
4 Documentação DDI exemplar
Dispositivos de extensão são um mecanismo de passagem provido pelas interfacesVA a fim de adicionar nova funcionalidade além das funções existentes de decodificador devídeo e processador de vídeo. Por exemplo, eles serão usados para suportar uma nova fun-ção do codificador de vídeo.
Dispositivos de extensão agem como um funil não tipificado através do qual a apli-cação pode enviar/receber dados para/do acionador. O significado dos dados é desconheci-do para a pilha VA, e é interpretado pelo acionador com base no parâmetro pGuid da cha-mada CreateExtensionDevice e o parâmetro da função de ExtensionExecute.
A codificação VA usa o valor de GUID seguinte (o mesmo que o uuid de IVideoEn-coder):
{7AC3D93D-41 FC-4c6c-A1 CS-A875E4F57CA4}
DEFINE_GUID(VA_Encoder_Extension, Ox7ac3d93d, Ox4lfc, Ox4c6c, Oxal1 Oxcb1 O-xaB, 0x75, Oxe4, OxfS1 Ox7c, Oxa4);
4.1 Enumeração e capacidades
Dispositivos de extensão são enumerados usando FND3DDDIGETCAPS com o pa-râmetro de tipo sendo ajustado para GETEXTENSIONGUIDCOUNT ouGETEXTENSIONGUIDS. A aplicação do codec busca VA_Encoder_Extension na lista deguids de extensão retornada por GETEXTENSIONGUIDS para determinar se o suporte dacodificação VA está disponível.
4.1.1 FND3DDDLGETCAPStypedef H RES U LT
(APIENTRY *PFND3DDDI_GETCAPS)(
HANDLE hAdapter,CONST DIDDDIARG GETCAPS*
);
Quando consultando capacidades do dispositivo de extensão (o dispositivo do codi-ficador), o GETEXTENSIONCAPS é usado com a estrutura seguinte como plnfo na estrutu-ra D3DDDIARG GETCAPS.
4.1.2 VADDI QUERYEXTENSIONCAPSINPUTtypedef etruct_VADDI_QUERYEXTENSIONCAPSINPUT {
CONST GUID*pGuid;
UINTCapType;
VADDI_PRIVATEDATA*pPrivate;
} VADDI_QUERYEXTENSIONCAPSINPUT;
O parâmetro pGuid de VADDI_QUERYEXTENSIONCAPSINPUT é ajustado paraVA_Encoder_Extension.
#define VADDI_Encode_Captype_GuidsVADDI_EXTENSION CAPTYPE MIN#define VADDI_Encode_Captype_DietanceMetricsVADDI_EXTENSION_ CAPTYPE_MIN +1
#define VADDI_Encode_Captype_SearchProfilesVADDI_EXTENSIONCAPTYPE MIN+ 2#define VADDI_Encode_Captype_MECapsVADDI_EXTENSION _CAPTYPE_MIN
+ 3
A saída de GETEXTENSIONCAPS é encapsulada no parâmetro pData deD3DDDIARG_GETCAPS. O parâmetro pData é interpretado como segue:Captype_Guids: Type = (GUID *). DataSize = Sizeof(GUID) * guid_countCaptype_DistanceMetrics: Type = (GUID *). DataSize = Sizeof(GUID) * quid count.Captype_SearchProfiles: Type = (VADDI_Encode_ SearchProfiIe *). DataSize = si-zeof(VADDI_Encode_ SearchProftIe).
Captype_MECaps: Type = (VADDI_Encode_MECaps). DataSize = sizeof(VADDIEncode MECaps).
4.1.3 D3DDDIARG CREATEEXTENSIONDEVICE
A criação real acontece através de uma chamada D3DDDICREATEEXTENSIONDEVICE, cujo argumento primário é mostrado abaixo:typedef struct_D3DDDIARG_CREATEEXTENSI0NDEVICE{CONST GUID**pGuid;
VADDI_PRIVATEDATA*pPrivate;
HANDLEhExtension;
} D3DDDIARG_CREATEEXTENSIONDEVICE;
4.2 Funcionalidade de codificação
As funções da unidade de extensão reais são invocadas através de uma chamadaD3DDDI EXTENSIONEXECUTE. A instância da unidade de extensão já está associada comum GUID, então o tipo da unidade de extensão já é conhecido quando a chamada de exe-cução é feita. O único parâmetro adicional é Function que indica a operação particular a e-xecutar. Por exemplo, um dispositivo de extensão do tipo codificador pode suportar Motio-nEstimation como uma de suas funções. Tipicamente, o dispositivo de extensão terá umafunção GetCaps sua própria que enumera as capacidades do dispositivo de extensão.typedef struct_D3DDDIARG_EXTENSI0NEXECUTE{
HANDLEhExtension;UINTFunction;VADDI_PRIVATEDATA*pPrivatelnput;VADDI_PRIVATEDATA*pPrivateOutput;UINTNumBuffers;VADDI_PRIVATEBUFFER*pBuffers;} D3DDDIARG_EXTENSI0NEXECUTE;
O parâmetro pBuffers não é usado pela codificação VA e deve ser considerado umparâmetro reservado. O parâmetro Function adota os seguintes valores para codificação VA:#define VADDI_ Encode_Function_Execute 1
Os parâmetros pPrivatelnput e pPrivateOutput deD3DDDIARG_EXTENSI0NEXECUTE são usados para encapsular os parâmetros da cha-mada da API de execução. Os parâmetros específicos da codificação embutidos nos parâ-metros de entrada e saída abaixo ainda não foram mapeados da região da API para a regi-ão da DDI - mas isso é apenas uma questão de renome, e nós poderíamos ser capazes degerenciar com uma única definição.
4.2.1 VADDI Encode Function Execute Input
Esse parâmetro contém os parâmetros de entrada para a chamada da API de execução.
typedefstruct_VADDI_Encode_Function_Execute_lnput{
UINT32 NumDataParameters;
VA2_Encode_ExecuteDataParameter** pData;
UINT32 NumConfigurationParameters;
VA2_Encode_ExecuteConfigurationParameter** pConfiguration;} VADDI_Encode_Function_Execute_lnput;
4.2.2 VADDI Encode Function Execute Output
Essa estrutura encapsula os dados de saída da chamada de execute.
typedef struct_VADDI_Encode_Function_Execute_Output{
UINT32 NumDataParameters;VA2_Encode_ ExecuteDataParameter** pData;} VADDI_Encode_Function_Execute_Output;
4.3 Estruturas do dispositivo de extensão
As seções seguintes descrevem várias estruturas e as chamadas de autenticaçãode função associadas com o mecanismo de extensão VA.
4.3.1 VADDI PRIVATEBUFFERtypedef struct -VADDI_PRIVATEBUFFER {
HANDLEhResource;UINTSubResourcelndex;UINTDataOffset;UINTDataSize;} VADDI_PRIVATEBUFFER;
typedef struct _VADDI_PRIVATEDATA {VOID*pData;UINTDataSize;} VADDI_PRIVATEDATA;4.3.2 D3DDDIARG EXTENSIONEXECUTEtypedef struct _D3DDDIARG_EXTENSIONEXECUTE {HANDLEhExtension;
UINTFunction;
VADDI_PRIVATEDATA*pPrivate2nput;VADDI_PRIVATEDATA*pPrivateOUtpUt;UINTNumBuffers;VADDI_PRIVATEBUFFER*pBuffers;
} D3DDDIARG_EXTENSI0NEXECUTE;typedef H RESULT
(APIENTRY *PFND3DDDI-CREATEEXTENSI0NDEVICE){HANDLEhDevice1
D3DDDIARG_CREATEEXTENSI0NDEVICE*};
O parâmetro hDevice se refere a um dispositivo D3D9, e ele é criado usando umachamada para D3DDDI_CREATEDEVICE.4.3.3 FND3DDDI DESTROYEXTENSIONDEVICEtypedef HRESULT
(APIENTRY *PFND3DDDI_DESTROYEXTENSIONDEVICE)(
HANDLE hDevice,HANDLE hExtension
);
4.3.4 FND3DDDI EXTENSIONEXECUTEtypedef HRESULT
(
(APIENTRY *PFND3DDDI_EXTENSIONEXECUTE)HANDLE hDevice,CONST D3DDDIARG_EXTENSIONEXECUTE*);
4.3.5 D3DDDI DEVICEFUNCStypedef struct _D3DDDI DEVICEFUNCS{PFND3DDDI_CREATEEXTENSIONDEVICEpfnCreateExtensionDevice;PFND3DDDI_DESTROYEXTENSIONDEVICEpfnDestroyExtensionDevice;PFND3DDDI_EXTENSIONEXECUTEpfnExtensionExecute;} D3DDDI_DEVICEFUNCS;
4.4 Estruturas e funções D3D9
As estruturas D3D seguintes e a chamada de autenticação representam um meca-
nismo D3D genérico para obter as capacidades de um dispositivo de extensão.
typedef enum_D3DDDICAPS_TYPE{
D3DDDICAPS_GETEXTENSIONGUIDCOUNT=31,D3DDDICAPS_GETEXTENSIONGUIDS=32,
D3DDDICAPS_GETEXTENSIONCAPS=33,} D3DDDICAPS_TYPE;
typedef struct _D3 D D DI ARG_G ETCAPS{
D3DDDICAPS_TYPEType;
VOID*plnfo;VOID*pData;UINTDataSize;} D3DDDIARG_GETCAPS;
5 Modelo de programação exemplar
5.1 Eficiência da canalização
A fim de obter máxima eficiência, a aplicação do codificador é estruturada em umatal maneira que ambos a CPU, bem como o hardware gráfico são totalmente utilizados. As-sim, enquanto a estimativa do movimento está em progresso para um certo quadro, poderiaser benéfico executar a etapa de quantização em um quadro diferente.
A obtenção da utilização completa do hardware é facilitada com um codificador demúltiplos encadeamentos.
5.1.1 Exemplo: vetor de movimento único (canalização completa)
A seguinte aplicação encadeada em 2 (em pseudocódigo) ilustra uma maneira parao codificador implementar uma canalização de software de 2 estágios, e oferece algumasorientações sobre como usar as interfaces de codificação VA efetivamente. Em particular,ela força um armazenamento temporário de k = AlIocatorSize como observado no encadea-mento do software. Isso responde pelo fato que existe assincronismo na submissão de umasolicitação de hardware: o encadeamento do hardware submete solicitações enquanto oencadeamento do software escolhe os resultados depois de um tempo e os processa.
HardwareThread(){while (Streaming){
LoadFrame(pplnputBuffer[n));
Codec->Processlnput(pplnputBuffer[n]); If blocking GetBuffer + Execute }
SoftwareThread() {k = AllocatorSize();
while (Streaming){
// k represents the buffer between pipeline stages Codec-
>ProcessOutput(ppOutputBuffer(n-k]); // Wait1 ReIeaseBuffar VLE();Bitstream();}
Processlnput acima pode ser considerado um envoltório ao redor de Execute eGetBuffer1 enquanto ProcessOutput pode ser considerado um envoltório ao redor de umevento de Esperar na execução, seguido com chamadas de ReIeaseBuffer apropriadas.
Não é evidente como determinar o parâmetro k que representa o armazenamentotemporário entre os estágios da canalização. Ele representa o tamanho do alocador, e comoum ponto de partida, nós podemos usar o mesmo valor usado na negociação do alocadorentre o Codec e o objeto do codificador VA (o comprimento da fila). Se k é maior do que otamanho do alocador, então a chamada Processlnput é provável de bloquear de qualquerforma mesmo antes que os armazenamentos temporários k sejam usados.
A meta da aplicação deve ser maximizar o tempo gasto no SoftwareThread sembloquear no ProcessOutput. Em outras palavras, a aplicação deve estar funcionando nasfunções VLE() e Bitstream() na maior parte do tempo. Se o hardware é muito lento, entãoProcessOutput() bloqueará a despeito do tamanho do alocador de "k". O software sempreestará "à frente". A canalização acima é eficiente somente até a extensão que o hardwareleva aproximadamente tanto tempo para processar um armazenamento temporário quanto osoftware leva para executar VLE e o fluxo de bits. Tudo o que o armazenamento temporáriode "k" consegue é preencher as instabilidades.
O fragmento de código seguinte mostra uma implementação esboçada de GetBuf-fer e ReIeaseBuffer.
IVideoEncoder::GetBUffer(Type, ppBuffer, Blocking){
if (Empty)
{
if (Blocking) Wait(NotEmptyEvent);else return STATUS_EMPTY;}
*ppBuffer = pQueue(Type)[Head];Head++;
if (Head == Tail){
Empty -1;
ResetEvent( NotEm ptyEvent);}
return S_0K;}
IVideoEncoder:: ReleaseBuffer(Type, pBuffer){
if ((Tail == Head) && :Empty) return STATUS FULL;pQueue[Type][Tail]pBuffer; Tail++;
if (Empty){
Empty = false;
SetEvent(NotEmptyEvent);}
return S_0K;}
0 seguinte esboça a implementação do codec de Processlnput e ProcessOutput:// essa implementação está bloqueando contrária à semântica normalGetBuffer(TypeUncompressed, pYUVBuffer, true);GetBuffer(TypeMotionVector, pMVBuffer, true);GetBuffer(TypeResidues, pResidueBuffer, true);memory(pYUVBuffer, plnput.lmage);Execute(pYUVBuffer, pMVBuffer, pResidueBuffer, pEvent);CodecQueue.Enqueue(pYUVBuffer, pMVBuffer, pResidueBuffer, pEvent);
Codec::ProceseOutput(IMediaBuffer pOutput){
if (CodecQueue.Empty()){
pOutput.dwFlags = DMO_OUTPUT_DATABUFFERF_ INCOMPLETE;
return S1FALSE;}CodecQueue.Dequeue(pYUVBuffer, pMVBuffer, pResidueBuffer, pEvent);Wait(pEvent);
memory(pOutput.MVBuffer, pMVBUffar);
memory(pOutput.ResidueBuffer, pResidueBuffer);
Release8uffer(TypeUncompressed, pYUVBuffer);
ReleaseBuffer(TypeMotionvector, pMVBuffer);
ReleaseBuffer(TypeResidues, pResidueBuffer);
return S _OK;
}
Aqui é uma implementação alternada de Codec:: Processlnput que é não bloquea-dora como é a norma.
Codec:: Processlnput(IMediaBuffEr plnput){
if (GetBuffer(TypeUncompreesed, pYUVBuffer, false) _= STATUS_EMPTY)
{
return DMO_E_NOTACCEPTING;}
if (GetBuffer(TypeMotionVector, pMVBuffer, false) _= STATUS_EMPTY){
return DMO_E_NOTACCEPTING;
}
if (GetBuffer(TypeResidues, pResidueBuffer, false) == STATUS_EMPTY){
return DMO_E_NOTACCEPTING;
}
memory (pYUVBuffer, plnput.Image);
Execute(pYUVBuffer, pMVBuffer, pResidueBuffer, pEvent);
CodecQueue.Enqueue(pYUVBuffer, pMVBuffer, pResidueBuffer, pEvent);
5.1.2 Exemplo: vetores de movimento múltiplos
Nessa seção, nós observamos uma canalização mais complexa onde o codificadorsolicita múltiplos vetores de movimento do hardware e escolhe um baseado nos vários pa-râmetros e os submete novamente para processamento. O código seguinte simplesmentecontinua a usar uma canalização de 2 estágios como antes, solicita múltiplos vetores demovimento e submete novamente o melhor. Existe seriação inerente envolvida nisso.
HardwareThread()
{
while (Streaming){LoadFrame(pplnputBuffEr[n]);
Processlnput(pplnputBuffer[n]);}}
ProcessOutput(ppOutputBuffer[n));
SelectMV(ppOutputBuffer[n], ppOutputBuffer2[n]);
Processlnput2(ppOutputBuffer2[n]);
n++;}}
SoftwareThread()
{
while (Streaming)
{
ProcessOutput2(ppOutputBuffer2[n - k]);
VLE(ppOutputBuffer2[n - k]);
Bitstream(ppOutputBuffer2[n - k]);
}
}
No exemplo acima, o software será bloqueado em ProcessOutput e ProcessOut-put2 metade do tempo, claramente ruim para a eficiência da canalização. Por outro lado, autilização da CPU será muito baixa e a velocidade geral é ainda maior do que a codificaçãonão acelerada. Uma canalização de 3 estágios com base em 3 encadeamentos resolverá oproblema de seriação como segue:
HardwareThread 1 (){
while (Streaming){
LoadFrame(pplnputBuffer[n]);
Process lnput(pplnputBuffer[n]);}
}
HardwareThread2(){
while (Streaming){ProcessOutput(ppOutputBuffer[n - ki]);SelectMV(ppOutputBuffer[n - kl]; ppOutputBuffer2[n - kl]);
Processlnput2(ppOutputBuffer2[n - kl]);}
}
SoftwareThread(){
while (Streaming){
Processoutput2(ppoutputBuffer2[n - kl - k2]);VLE(ppOutputBuffer2[n - kl - k2]);
Bitstream(ppOutputBuffer2[n - kl - k2]);}
}
Desde que existem 3 estágios de canalização, armazenamento temporário adicional é adicionado para enchimento entre os dois estágios do hardware. Portanto, os dois valores k1 e k2.

Claims (20)

1. Método pelo menos parcialmente implementado por um dispositivo de computa-ção para um serviço de aceleração de codificação de vídeo, o método CARACTERIZADOpelo fato de que compreende:receber, pelo serviço de aceleração de codificação de vídeo, uma ou mais consul-tas de um codificador de vídeo para identificar condições específicas de implementação dohardware de aceleração,responsivo à recepção de uma ou mais consultas, o serviço de aceleração de codi-ficação de vídeo:faz interface com o hardware de aceleração para obter as condições específicas deimplementação,responsivo à recepção das condições específicas de implementação, comunicar ascondições específicas de implementação para o codificador de vídeo eonde as condições específicas de implementação possibilitam que o codificador devídeo durante o tempo de execução:(a) determine se uma ou mais de velocidade e qualidade das operações de codifi-cação de software associadas com o codificador de vídeo podem ser aumentadas com aimplementação de uma canalização de codificação particular de uma ou mais configuraçõese capacidades de canalização de codificação suportadas e(b) implemente a canalização de codificação particular pela interface com o serviçode aceleração de codificação de vídeo.
2. Método, de acordo com a reivindicação 1, CARACTERIZADO pelo fato de queas operações de codificação de software compreendem uma ou mais de estimativa do mo-vimento, computação de resíduo, compensação de movimento e operações de transforma-ção.
3. Método, de acordo com a reivindicação 1, CARACTERIZADO pelo fato de queas operações de codificação de software compreendem uma ou mais de redução do ruído,estabilização da imagem, detecção de borda, nitidez e operações de conversão de veloci-dade de projeção.
4. Método, de acordo com a reivindicação 1, CARACTERIZADO pelo fato de que auma ou mais consultas compreendem uma consulta de obter capacidades, e onde as condi-ções específicas de implementação recebidas incluem informação associada com a uma oumais configurações de canalização de codificação suportadas.
5. Método, de acordo com a reivindicação 1, CARACTERIZADO pelo fato de que auma ou mais consultas compreendem uma consulta de obter métricas de distância, e ondeas condições específicas de implementação recebidas incluem uma descrição de uma oumais métricas de pesquisa suportadas pelo hardware de aceleração de codificação de vídeopara operações de estimativa de movimento.
6. Método, de acordo com a reivindicação 1, CARACTERIZADO pelo fato de que auma ou mais consultas compreendem uma consulta de obter perfis de pesquisa, e onde ascondições específicas de implementação recebidas incluem uma descrição de um ou maisperfis de pesquisa suportados pelo hardware de aceleração de codificação de vídeo, o umou mais perfis de pesquisa permitindo que o codificador de vídeo avalie as permutas especí-ficas da implementação entre os tempos de processamento de codificação de vídeo e asmétricas de qualidade de codificação de vídeo.
7. Método, de acordo com a reivindicação 1, CARACTERIZADO pelo fato de que auma ou mais consultas compreendem uma consulta de obter capacidades de estimativa demovimento, e onde as condições específicas de implementação recebidas incluem dadosindicando um ou mais de tamanho máximo de imagem suportada, tamanho máximo de jane-la de pesquisa suportada e uma indicação de se o hardware de aceleração suporta tama-nhos de macrobloco variáveis.
8. Método, de acordo com a reivindicação 1, CARACTERIZADO pelo fato de quetambém compreende:receber, pelo serviço de aceleração de codificação de vídeo, uma solicitação inclu-indo um conjunto de parâmetros de configuração para criar um objeto que implementa acanalização de codificação particular eresponsivo à recepção da solicitação, criar o objeto com base nos parâmetros deconfiguração, o objeto do codificador para codificar dados de vídeo de origem decodificadosusando a canalização de codificação particular.
9. Método, de acordo com a reivindicação 8, CARACTERIZADO pelo fato de queos parâmetros de configuração especificam um ou mais da canalização de codificação parti-cular, um formato de saída para o vídeo codificado, um número de fluxos de dados de l/Opara associação com a canalização de codificação particular, propriedades de configuraçãoestática para interpolação de valores de brilho e saturação, um número sugerido de arma-zenamentos temporários de dados para os fluxos de dados de l/O e um tamanho de fila es-pecificada pelo acionador de dispositivo com base nos recursos disponíveis.
10. Método, de acordo com a reivindicação 1, CARACTERIZADO pelo fato de quetambém compreende:receber, pelo serviço de aceleração de codificação de vídeo, solicitações de execu-ção e um conjunto de parâmetros do codificador de vídeo, as solicitações de execução cor-respondendo com operações associadas com a canalização de codificação particular paracodificar os dados de vídeo de origem decodificados,responsivo à recepção das solicitações de execução, o serviço de aceleração decodificação de vídeo:comunicar as solicitações de execução e os parâmetros para o hardware de acele-ração,receber respostas associadas com as solicitações de execução comunicadas dohardware de aceleração eenviar as respostas para o codificador de vídeo.
11. Meio de armazenamento legível por computador CARACTERIZADO pelo fatode que compreende instruções de programa de computador executáveis por um processa-dor para:comunicar, por um módulo de programa de codificador de vídeo, uma ou mais soli-citações para um serviço de aceleração de codificação de vídeo para identificar capacidadesde ums ou mais das configurações de canalização de codificação de vídeo e capacidadessuportadas pelo hardware de aceleração,responsivo à recepção das capacidades do serviço de aceleração de codificação devídeo, o codificador de vídeo:identifica, com base nas capacidades, uma ou mais operações de codificação devídeo associadas com o codificador de vídeo que se beneficiará de uma ou mais de veloci-dade e qualidade se implementadas pelo hardware de aceleração,solicita, pelo codificador de vídeo, o serviço de aceleração de codificação de vídeopara criar uma canalização de codificação de vídeo personalizada para implementar a umaou mais operações de codificação de vídeo via o hardware de aceleração tal que quaisqueroperações de codificação de vídeo restantes são implementadas em software.
12. Meio de armazenamento legível por computador, de acordo com a reivindicação-11, CARACTERIZADO pelo fato de que a uma ou mais operações de codificação de vídeocompreendem uma ou mais de estimativa do movimento, computação de resíduo, compen-sação de movimento e operações de transformação.
13. Meio de armazenamento legível por computador, de acordo com a reivindicação-11, CARACTERIZADO pelo fato de que a uma ou mais operações de codificação de vídeocompreendem uma ou mais de redução de ruído, estabilização da imagem, detecção deborda, nitidez e operações de conversão de velocidade de projeção.
14. Meio de armazenamento legível por computador, de acordo com a reivindicação-11, CARACTERIZADO pelo fato de que as instruções do programa de computador parasolicitação também compreendem instruções para direcionar o serviço de aceleração decodificação de vídeo para criar a canalização de codificação de vídeo personalizada tal queo fluxo de dados entre a memória do sistema e a memória do dispositivo gráfico é minimizado.
15. Meio de armazenamento legível por computador, de acordo com a reivindicação-11, CARACTERIZADO pelo fato de que também compreende instruções de programa decomputador executáveis pelo processador para:receber, pelo codificador de vídeo, dados de vídeo de origem codificados ou deco-dificados ese os dados de vídeo de origem recebidos estão codificados, pelo menos parcial-mente decodificar, pelo codificador de vídeo, os dados de vídeo de origem para gerar dadosde vídeo de origem decodificados para a codificação por um objeto de codificação criadopelo serviço de aceleração de codificação de vídeo, o objeto de codificação implementandoa canalização de codificação de vídeo personalizada.
16. Meio de armazenamento legível por computador, de acordo com a reivindicação-11, CARACTERIZADO pelo fato de que as instruções do programa de computador tambémcompreendem instruções para codificar dados de vídeo de origem decodificados usando acanalização de codificação de vídeo personalizada.
17. Dispositivo de computação, CARACTERIZADO pelo fato de que compreende:dispositivo de interface para um serviço de aceleração de codificação de vídeo pa-ra:receber uma ou mais consultas de um codificador de vídeo, a uma ou mais consul-tas solicitando que o serviço de aceleração de codificação de vídeo identifique condiçõesespecíficas de implementação do hardware de aceleração, as condições específicas de im-plementação para possibilitar que o codificador de vídeo: (a) determine se uma ou mais davelocidade e qualidade das operações de codificação de software associadas com o codifi-cador de vídeo podem ser aumentadas com implementação de uma canalização de codifi-cação particular de uma ou mais configurações e capacidades de canalização de codifica-ção suportadas e (b) implemente a canalização de codificação particular via o serviço deaceleração de codificação de vídeo para codificar dados de vídeo de origem decodificados,consultar o hardware de aceleração para obter as condições específicas de imple-mentação ecomunicar as condições específicas de implementação recebidas do hardware deaceleração para o codificador de vídeo.
18. Dispositivo de computação, de acordo com a reivindicação 17,CARACTERIZADO pelo fato de que as operações de codificação de software compreen-dem uma ou mais de estimativa de movimento, computação de resíduo, compensação demovimento e operações de transformação.
19. Dispositivo de computação, de acordo com a reivindicação 17,CARACTERIZADO pelo fato de que as operações de codificação de software compreen-dem uma ou mais de redução de ruído, estabilização de imagem, detecção de borda, nitideze operações de conversão de velocidade de projeção.
20. Dispositivo de computação, de acordo com a reivindicação 17,CARACTERIZADO pelo fato de que o dispositivo de interface também compreende disposi-tivo para o serviço de aceleração de codificação de vídeo para:receber uma solicitação de criar objeto de codificador do codificador de vídeo paracriar um objeto de codificador que implementa a canalização de codificação particular,receber uma ou mais solicitações de execução do codificador de vídeo para imple-mentar operações associadas com a canalização de codificação particular no hardware deaceleração eenviar a informação associada com a uma ou mais solicitações de execução para ohardware de aceleração para codificar os dados de vídeo de origem decodificados.
BRPI0708265-7A 2006-02-24 2007-02-21 Dispositivo de computação e método implementado pelo mesmo BRPI0708265B1 (pt)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US11/276,336 US7929599B2 (en) 2006-02-24 2006-02-24 Accelerated video encoding
US11/276.336 2006-02-24
US11/673.423 2007-02-09
US11/673,423 US8654842B2 (en) 2006-02-24 2007-02-09 Accelerated video encoding
PCT/US2007/004638 WO2007100616A1 (en) 2006-02-24 2007-02-21 Accelerated video encoding

Publications (2)

Publication Number Publication Date
BRPI0708265A2 true BRPI0708265A2 (pt) 2011-05-24
BRPI0708265B1 BRPI0708265B1 (pt) 2020-03-03

Family

ID=38443961

Family Applications (1)

Application Number Title Priority Date Filing Date
BRPI0708265-7A BRPI0708265B1 (pt) 2006-02-24 2007-02-21 Dispositivo de computação e método implementado pelo mesmo

Country Status (7)

Country Link
US (2) US7929599B2 (pt)
EP (1) EP1987674A4 (pt)
JP (1) JP5420254B2 (pt)
KR (1) KR101183429B1 (pt)
CN (1) CN101390397B (pt)
BR (1) BRPI0708265B1 (pt)
WO (1) WO2007100616A1 (pt)

Families Citing this family (62)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7725745B2 (en) * 2006-12-19 2010-05-25 Intel Corporation Power aware software pipelining for hardware accelerators
US8411734B2 (en) 2007-02-06 2013-04-02 Microsoft Corporation Scalable multi-thread video decoding
US20130101023A9 (en) * 2007-03-12 2013-04-25 Vixs Systems, Inc. Video encoder with video decoder reuse and method for use therewith
US8233527B2 (en) * 2007-05-11 2012-07-31 Advanced Micro Devices, Inc. Software video transcoder with GPU acceleration
US9648325B2 (en) 2007-06-30 2017-05-09 Microsoft Technology Licensing, Llc Video decoding implementations for a graphics processing unit
US8311058B2 (en) * 2008-05-10 2012-11-13 Vantrix Corporation Modular transcoding pipeline
US8677241B2 (en) 2007-09-10 2014-03-18 Vantrix Corporation Method and system for multimedia messaging service (MMS) to video adaptation
US8220051B2 (en) 2007-09-28 2012-07-10 Vantrix Corporation Generation and delivery of multimedia content-adaptation notifications
US7908632B2 (en) 2008-01-08 2011-03-15 At&T Intellectual Property I, L.P. Method and system of diagnosing a video condition experienced at a customer premises
US8570441B2 (en) 2008-06-11 2013-10-29 Microsoft Corporation One pass video processing and composition for high-definition video
US8320448B2 (en) * 2008-11-28 2012-11-27 Microsoft Corporation Encoder with multiple re-entry and exit points
US8594467B2 (en) * 2008-12-19 2013-11-26 Microsoft Corporation Interactive virtual display system for ubiquitous devices
US8180165B2 (en) * 2008-12-19 2012-05-15 Microsoft Corp. Accelerated screen codec
US8069446B2 (en) * 2009-04-03 2011-11-29 Microsoft Corporation Parallel programming and execution systems and techniques
US9756468B2 (en) 2009-07-08 2017-09-05 Dejero Labs Inc. System and method for providing data services on vehicles
US10117055B2 (en) 2009-07-08 2018-10-30 Dejero Labs Inc. System and method for providing data services on vehicles
US8942215B2 (en) 2010-07-15 2015-01-27 Dejero Labs Inc. System and method for transmission of data from a wireless mobile device over a multipath wireless router
US9042444B2 (en) * 2010-07-15 2015-05-26 Dejero Labs Inc. System and method for transmission of data signals over a wireless network
US10165286B2 (en) 2009-07-08 2018-12-25 Dejero Labs Inc. System and method for automatic encoder adjustment based on transport data
US8718145B1 (en) * 2009-08-24 2014-05-06 Google Inc. Relative quality score for video transcoding
KR101657196B1 (ko) 2009-12-01 2016-09-19 밴트릭스 코오퍼레이션 캐시를 이용한 효율적인 미디어 배송 시스템 및 방법
US8896715B2 (en) * 2010-02-11 2014-11-25 Microsoft Corporation Generic platform video image stabilization
US20110317762A1 (en) * 2010-06-29 2011-12-29 Texas Instruments Incorporated Video encoder and packetizer with improved bandwidth utilization
WO2012018786A1 (en) * 2010-08-02 2012-02-09 Ncomputing Inc. System and method for efficiently streaming digital video
US8700796B2 (en) 2010-09-22 2014-04-15 Qualcomm Incorporated MAC data service enhancements
US9706214B2 (en) 2010-12-24 2017-07-11 Microsoft Technology Licensing, Llc Image and video decoding implementations
US9824426B2 (en) 2011-08-01 2017-11-21 Microsoft Technology Licensing, Llc Reduced latency video stabilization
US8731067B2 (en) 2011-08-31 2014-05-20 Microsoft Corporation Memory management for video decoding
US9819949B2 (en) 2011-12-16 2017-11-14 Microsoft Technology Licensing, Llc Hardware-accelerated decoding of scalable video bitstreams
US20150022536A1 (en) * 2012-01-05 2015-01-22 Google Inc. Heirarchy and hint based rendering pipeline selection
US20130208786A1 (en) * 2012-02-15 2013-08-15 Wei Xiong Content Adaptive Video Processing
US9002122B2 (en) 2012-07-19 2015-04-07 Omnivision Technologies, Inc. System and method for improving decoder performance using quantization control
US9721036B2 (en) 2012-08-14 2017-08-01 Microsoft Technology Licensing, Llc Cooperative web browsing using multiple devices
US9112922B2 (en) 2012-08-28 2015-08-18 Vantrix Corporation Method and system for self-tuning cache management
US10699361B2 (en) * 2012-11-21 2020-06-30 Ati Technologies Ulc Method and apparatus for enhanced processing of three dimensional (3D) graphics data
CN103283250B (zh) * 2012-12-13 2015-01-21 华为技术有限公司 一种视频重定向的方法、装置、系统
US20140205012A1 (en) * 2013-01-21 2014-07-24 Mediatek Inc. Method and apparatus using software engine and hardware engine collaborated with each other to achieve hybrid video encoding
WO2014121477A1 (zh) * 2013-02-07 2014-08-14 华为技术有限公司 一种视频重定向的方法、装置、系统及计算机可读介质
US9292899B2 (en) * 2013-09-25 2016-03-22 Apple Inc. Reference frame data prefetching in block processing pipelines
US9299122B2 (en) 2013-09-25 2016-03-29 Apple Inc. Neighbor context processing in block processing pipelines
US9305325B2 (en) 2013-09-25 2016-04-05 Apple Inc. Neighbor context caching in block processing pipelines
US9270999B2 (en) 2013-09-25 2016-02-23 Apple Inc. Delayed chroma processing in block processing pipelines
US9215472B2 (en) * 2013-09-27 2015-12-15 Apple Inc. Parallel hardware and software block processing pipelines
US9218639B2 (en) 2013-09-27 2015-12-22 Apple Inc. Processing order in block processing pipelines
US9571846B2 (en) 2013-09-27 2017-02-14 Apple Inc. Data storage and access in block processing pipelines
KR102250088B1 (ko) 2013-10-24 2021-05-10 삼성전자주식회사 비디오 스트림을 복호화하는 방법 및 장치
US9749642B2 (en) 2014-01-08 2017-08-29 Microsoft Technology Licensing, Llc Selection of motion vector precision
US9942560B2 (en) 2014-01-08 2018-04-10 Microsoft Technology Licensing, Llc Encoding screen capture data
US9774881B2 (en) 2014-01-08 2017-09-26 Microsoft Technology Licensing, Llc Representing motion vectors in an encoded bitstream
US10057590B2 (en) 2014-01-13 2018-08-21 Mediatek Inc. Method and apparatus using software engine and hardware engine collaborated with each other to achieve hybrid video encoding
CN104159113B (zh) * 2014-06-30 2018-08-10 北京奇艺世纪科技有限公司 安卓系统中视频编码方式的选择方法和装置
US9807410B2 (en) 2014-07-02 2017-10-31 Apple Inc. Late-stage mode conversions in pipelined video encoders
US10582259B2 (en) 2015-06-30 2020-03-03 Gopro, Inc. Pipelined video interface for remote controlled aerial vehicle with camera
TWI546779B (zh) 2015-11-06 2016-08-21 財團法人工業技術研究院 串流資料的編碼排程方法、裝置與電腦可讀取媒體
CN109217980B (zh) * 2017-07-03 2020-11-06 腾讯科技(深圳)有限公司 一种编解码能力配置方法、设备和计算机存储介质
CN107948683A (zh) * 2017-11-28 2018-04-20 北京潘达互娱科技有限公司 网络直播多媒体流兼容方法、网络主播端和客户端
CN111819546B (zh) * 2018-01-11 2024-11-22 诺基亚技术有限公司 无线网络中的频率域调度器的硬件加速
CN113039780B (zh) * 2018-11-17 2023-07-28 北京字节跳动网络技术有限公司 视频处理中用运动矢量差的Merge
CN113196773B (zh) 2018-12-21 2024-03-08 北京字节跳动网络技术有限公司 具有运动矢量差的Merge模式中的运动矢量精度
US12401818B2 (en) * 2021-02-26 2025-08-26 Qualcomm Incorporated Efficient video encoder architecture
US11729395B2 (en) * 2021-11-26 2023-08-15 Huawei Technologies Co., Ltd. Methods and devices for extracting motion vector data from compressed video data
US12328456B2 (en) * 2023-01-23 2025-06-10 Nvidia Corporation Dynamic assignment of data stream processing in multi-codec systems

Family Cites Families (31)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4740073A (en) * 1982-12-27 1988-04-26 Meacham G B Kirby System for projecting three-dimensional images
US6044408A (en) 1996-04-25 2000-03-28 Microsoft Corporation Multimedia device interface for retrieving and exploiting software and hardware capabilities
US6101276A (en) 1996-06-21 2000-08-08 Compaq Computer Corporation Method and apparatus for performing two pass quality video compression through pipelining and buffer management
US5805228A (en) * 1996-08-09 1998-09-08 U.S. Robotics Access Corp. Video encoder/decoder system
US5926226A (en) 1996-08-09 1999-07-20 U.S. Robotics Access Corp. Method for adjusting the quality of a video coder
US5990958A (en) 1997-06-17 1999-11-23 National Semiconductor Corporation Apparatus and method for MPEG video decompression
US6188381B1 (en) * 1997-09-08 2001-02-13 Sarnoff Corporation Modular parallel-pipelined vision system for real-time video processing
US6275527B1 (en) 1998-01-14 2001-08-14 Conexant Systems, Inc. Pre-quantization in motion compensated video coding
US6252905B1 (en) 1998-02-05 2001-06-26 International Business Machines Corporation Real-time evaluation of compressed picture quality within a digital video encoder
US6434196B1 (en) * 1998-04-03 2002-08-13 Sarnoff Corporation Method and apparatus for encoding video information
US6128026A (en) 1998-05-04 2000-10-03 S3 Incorporated Double buffered graphics and video accelerator having a write blocking memory interface and method of doing the same
SG82613A1 (en) 1999-05-21 2001-08-21 Inst Of Microelectronics Dynamic load-balancing between two processing means for real-time video encoding
US7072398B2 (en) * 2000-12-06 2006-07-04 Kai-Kuang Ma System and method for motion vector generation and analysis of digital video clips
US6891893B2 (en) 2000-04-21 2005-05-10 Microsoft Corp. Extensible multimedia application program interface and related methods
TW540248B (en) 2000-07-19 2003-07-01 Koninkl Philips Electronics Nv Method and device for generating a multiplexed MPEG signal
KR20020064893A (ko) 2000-08-29 2002-08-10 코닌클리케 필립스 일렉트로닉스 엔.브이. 알고리즘을 실행하는 방법 및 스케일 가능한 프로그램가능 처리 장치
US20030052909A1 (en) 2001-06-25 2003-03-20 Arcsoft, Inc. Real-time rendering of edited video stream
FI110909B (fi) * 2001-09-06 2003-04-15 Nokia Corp Menetelmä liike-estimoinnin suorittamiseksi videokoodauksessa, videokoodausjärjestelmä sekä videokoodauslaite
KR100846769B1 (ko) 2002-02-19 2008-07-16 삼성전자주식회사 고정 연산량을 갖는 동영상 부호화 방법 및 그 장치
EP1347650A1 (en) 2002-03-18 2003-09-24 STMicroelectronics Limited Compression circuitry for generating an encoded bitstream from a plurality of video frames
US8284844B2 (en) * 2002-04-01 2012-10-09 Broadcom Corporation Video decoding system supporting multiple standards
US7451457B2 (en) 2002-04-15 2008-11-11 Microsoft Corporation Facilitating interaction between video renderers and graphics device drivers
KR20050118224A (ko) * 2003-04-03 2005-12-15 코닌클리즈케 필립스 일렉트로닉스 엔.브이. 프로세싱 시스템 및 집적 회로
KR100512140B1 (ko) 2003-05-12 2005-09-02 엘지전자 주식회사 동영상 코딩 방법
US7792806B2 (en) * 2003-06-27 2010-09-07 Microsoft Corporation Rate change
US7139002B2 (en) 2003-08-01 2006-11-21 Microsoft Corporation Bandwidth-efficient processing of video images
KR100594056B1 (ko) 2003-09-01 2006-07-03 삼성전자주식회사 효율적인 비트율 제어를 위한 h.263/mpeg 비디오인코더 및 그 제어 방법
FR2859591A1 (fr) 2003-09-08 2005-03-11 St Microelectronics Sa Dispositif et procede de traitement de donnees video et graphiques
US20050094730A1 (en) * 2003-10-20 2005-05-05 Chang Li F. Wireless device having a distinct hardware video accelerator to support video compression and decompression
US7634776B2 (en) * 2004-05-13 2009-12-15 Ittiam Systems (P) Ltd. Multi-threaded processing design in architecture with multiple co-processors
US7558428B2 (en) * 2004-09-13 2009-07-07 Microsoft Corporation Accelerated video encoding using a graphics processing unit

Also Published As

Publication number Publication date
KR20080106182A (ko) 2008-12-04
KR101183429B1 (ko) 2012-09-14
EP1987674A4 (en) 2012-08-08
CN101390397B (zh) 2010-09-15
EP1987674A1 (en) 2008-11-05
JP2009527991A (ja) 2009-07-30
US20070201562A1 (en) 2007-08-30
BRPI0708265B1 (pt) 2020-03-03
JP5420254B2 (ja) 2014-02-19
US8654842B2 (en) 2014-02-18
US20070204318A1 (en) 2007-08-30
US7929599B2 (en) 2011-04-19
WO2007100616A1 (en) 2007-09-07
CN101390397A (zh) 2009-03-18

Similar Documents

Publication Publication Date Title
BRPI0708265A2 (pt) codificação de vìdeo acelerada
USRE48845E1 (en) Video decoding system supporting multiple standards
US7079147B2 (en) System and method for cooperative operation of a processor and coprocessor
US8213515B2 (en) Interpolated skip mode decision in video compression
CN100397905C (zh) 视频编码系统
US8615039B2 (en) Optimized allocation of multi-core computation for video encoding
Akramullah et al. Optimization of H. 263 video encoding using a single processor computer: performance tradeoffs and benchmarking
JP2003204556A (ja) マルチメディア信号処理のための映像復元プロセッサ
CN101115205A (zh) 视频流处理装置与方法
WO2014207439A1 (en) Efficient encoding of display data
US5903674A (en) Picture coding apparatus
US20120070076A1 (en) Methods and apparatuses for pixel transformations
Chang et al. Performance analysis and architecture evaluation of MPEG-4 video codec system
JP2022525998A5 (ja) 適応動きベクトル解像度シグナリング
TW484327B (en) Control method for video motion estimation with reduced computation and the device thereof
US8908777B2 (en) Memory request ordering for a motion compensation process, implemented by a picture processing apparatus, a picture processing method, and a picture processing program
JP5236386B2 (ja) 画像復号装置及び画像復号方法
Llopis et al. HW-SW co-design and verification of a multi-standard video and image codec
Roy et al. Implementation of an algorithm for fast down-scale transcoding of compressed video on the itanium
Chiu et al. Tightly-coupled MPEG-4 video encoder framework on asymmetric dual-core platforms
CN115474045B (zh) 图像编解码
CN102257530B (zh) 视频压缩/解压缩系统
JP2005157783A (ja) 実行予約可能なアクセラレータを備えたプロセッサシステム
JP2004537079A (ja) クライアント−サーバ間映像通信のためのクライアント支援動き予測
CN119520908A (zh) 视频转码方法、装置、电子设备、存储介质及程序产品

Legal Events

Date Code Title Description
B25A Requested transfer of rights approved

Owner name: MICROSOFT TECHNOLOGY LICENSING, LLC (US)

B06F Objections, documents and/or translations needed after an examination request according [chapter 6.6 patent gazette]
B06T Formal requirements before examination [chapter 6.20 patent gazette]
B15K Others concerning applications: alteration of classification

Free format text: AS CLASSIFICACOES ANTERIORES ERAM: H04N 7/24 , G06T 1/00

Ipc: H04N 19/42 (2014.01), H04N 19/127 (2014.01), H04N

B09A Decision: intention to grant [chapter 9.1 patent gazette]
B16A Patent or certificate of addition of invention granted [chapter 16.1 patent gazette]

Free format text: PRAZO DE VALIDADE: 10 (DEZ) ANOS CONTADOS A PARTIR DE 03/03/2020, OBSERVADAS AS CONDICOES LEGAIS.

B21F Lapse acc. art. 78, item iv - on non-payment of the annual fees in time

Free format text: REFERENTE A 19A ANUIDADE.

B24J Lapse because of non-payment of annual fees (definitively: art 78 iv lpi, resolution 113/2013 art. 12)

Free format text: EM VIRTUDE DA EXTINCAO PUBLICADA NA RPI 2867 DE 16-12-2025 E CONSIDERANDO AUSENCIA DE MANIFESTACAO DENTRO DOS PRAZOS LEGAIS, INFORMO QUE CABE SER MANTIDA A EXTINCAO DA PATENTE E SEUS CERTIFICADOS, CONFORME O DISPOSTO NO ARTIGO 12, DA RESOLUCAO 113/2013.