BRPI0713321B1 - efficient fixed-point approximations of discrete direct and inverse cosine transforms - Google Patents

efficient fixed-point approximations of discrete direct and inverse cosine transforms Download PDF

Info

Publication number
BRPI0713321B1
BRPI0713321B1 BRPI0713321A BRPI0713321A BRPI0713321B1 BR PI0713321 B1 BRPI0713321 B1 BR PI0713321B1 BR PI0713321 A BRPI0713321 A BR PI0713321A BR PI0713321 A BRPI0713321 A BR PI0713321A BR PI0713321 B1 BRPI0713321 B1 BR PI0713321B1
Authority
BR
Brazil
Prior art keywords
matrix
module
coefficient
coefficients
factor
Prior art date
Application number
BRPI0713321A
Other languages
Portuguese (pt)
Inventor
Reznik Yuriy
Original Assignee
Qualcomm Inc
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 Qualcomm Inc filed Critical Qualcomm Inc
Publication of BRPI0713321A2 publication Critical patent/BRPI0713321A2/en
Publication of BRPI0713321B1 publication Critical patent/BRPI0713321B1/en

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; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/14Fourier, Walsh or analogous domain transformations, e.g. Laplace, Hilbert, Karhunen-Loeve, transforms
    • G06F17/147Discrete orthonormal transforms, e.g. discrete cosine transform, discrete sine transform, and variations therefrom, e.g. modified discrete cosine transform, integer transforms approximating the discrete cosine transform
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/44Decoders specially adapted therefor, e.g. video decoders which are asymmetric with respect to the encoder
    • H04N19/45Decoders specially adapted therefor, e.g. video decoders which are asymmetric with respect to the encoder performing compensation of the inverse transform mismatch, e.g. Inverse Discrete Cosine Transform [IDCT] mismatch
    • 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/625Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding using discrete cosine transform [DCT]
    • 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

Landscapes

  • Physics & Mathematics (AREA)
  • Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Pure & Applied Mathematics (AREA)
  • Signal Processing (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Multimedia (AREA)
  • Discrete Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Algebra (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)
  • Complex Calculations (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)
  • Compression Of Band Width Or Redundancy In Fax (AREA)

Abstract

aproximações eficientes para ponto fixo de transformadas de coseno discretas diretas e inversas. são descritas técnicas para aproximar computação de uma transformada coseno discreta inversa utilizando cálculos de ponto fixo. de acordo com essas técnicas, matrizes de coeficientes escalonados são gerados mediante multiplicação dos coeficientes em matrizes de coeficientes codificados por fatores de escalonamento. a seguir, as matrizes de coeficientes polarizados são geradas mediante adição de um valor de polarização de ponto médio a um coeficiente dc da matriz de coeficientes escalonados. aritmética de ponto fixo é então usada para aplicar uma transformada às matrizes de coeficientes polarizados. valores nas matrizes resultantes são então deslocados à direita para derivar matrizes de valores de componentes de pixel. matrizes de valores de componentes de pixel são então combinadas para criar matrizes de pixel. as matrizes de pixel geradas por essas técnicas lembram muito as matrizes de pixels descompactadas utilizando a transformada coseno discreta inversa ideal ("idct").Efficient fixed-point approximations of discrete direct and inverse cosine transforms. Techniques for approximating computation of an inverse discrete cosine transform using fixed point calculations are described. According to these techniques, scaled coefficient matrices are generated by multiplying the coefficients in coefficient matrices encoded by scaling factors. Next, the polarized coefficient matrices are generated by adding a midpoint bias value to a coefficient dc of the scaled coefficient matrix. Fixed-point arithmetic is then used to apply a transform to the polarized coefficient matrices. values in the resulting arrays are then shifted right to derive arrays of pixel component values. Array of pixel component values are then combined to create pixel arrays. The pixel arrays generated by these techniques closely resemble the uncompressed pixel arrays using the ideal inverse discrete cosine transform ("idct").

Description

(54) Título: APROXIMAÇÕES EFICIENTES PARA PONTO FIXO DE TRANSFORMADAS DE COSSENO DISCRETAS DIRETAS E INVERSAS (73) Titular: QUALCOMM INCORPORATED, Sociedade Norte Americana. Endereço: 5775 Morehouse Drive, San Diego, Califórnia 92121-1714, ESTADOS UNIDOS DA AMÉRICA(US), Norte Americana (72) Inventor: YURIY REZNIK.(54) Title: EFFICIENT APPROXIMATIONS FOR FIXED POINT OF DIRECT AND REVERSE DISCRETE TRANSFORMED (73) Holder: QUALCOMM INCORPORATED, Sociedade Norte Americana. Address: 5775 Morehouse Drive, San Diego, California 92121-1714, UNITED STATES OF AMERICA (US), North American (72) Inventor: YURIY REZNIK.

Prazo de Validade: 10 (dez) anos contados a partir de 04/12/2018, observadas as condições legaisValidity Term: 10 (ten) years from 12/04/2018, subject to legal conditions

Expedida em: 04/12/2018Issued on: 12/04/2018

Assinado digitalmente por:Digitally signed by:

Liane Elizabeth Caldeira LageLiane Elizabeth Caldeira Lage

Diretora de Patentes, Programas de Computador e Topografias de Circuitos IntegradosDirector of Patents, Computer Programs and Topographies of Integrated Circuits

1/691/69

APROXIMAÇÕES EFICIENTES PARA PONTO FIXO DE TRANSFORMADAS DE COSSENO DISCRETAS DIRETAS E INVERSASEFFICIENT APPROACHES FOR FIXED POINTS OF DIRECT AND REVERSE DISCRETE COSINE TRANSFORMED

Campo da Invenção [001] A revelação refere-se aos gráficos de computador e multimídia, especificamente à compactação de gráficos, imagens, e informações de vídeo.Field of Invention [001] Disclosure refers to computer and multimedia graphics, specifically the compression of graphics, images, and video information.

Descrição da Técnica Anterior [002] Muitos padrões de codificação existentes de imagem e vídeo empregam técnicas de compactação a fim de permitir que as imagens e vídeo de alta resolução sejam armazenados, ou transmitidos como arquivos ou fluxos de dados relativamente compactos. Tais padrões de codificação incluem Junta de Especialistas Fotográficos (JPEG), Grupo de Especialistas em Imagens em Movimento (MPEG)-l, MPEG-2, MPEG-4 parte 2, H.261, H.263, e outros padrões de codificação de imagem ou vídeo.Description of the Prior Art [002] Many existing image and video encoding standards employ compression techniques to allow high resolution images and video to be stored, or transmitted as relatively compact files or data streams. Such coding standards include the Photographic Experts Board (JPEG), the Moving Image Experts Group (MPEG) -1, MPEG-2, MPEG-4 part 2, H.261, H.263, and other video coding standards image or video.

[003] De acordo com muitos desses padrões, quadros de vídeo são compactados utilizando codificação espacial. Esses quadros podem ser quadros originais (isto é, quadro-i) ou podem ser quadros residuais gerados por um processo de codificação temporal que utiliza compensação de movimento. Durante codificação espacial, os quadros são fracionados em blocos de pixels de tamanhos iguais. Por exemplo, um quadro não-compactado pode ser fracionado em um conjunto de blocos de pixels 8x8. Para cada bloco de pixels, os componentes de pixel são separados em matrizes de valores de componentes de pixel. Por exemplo, cada bloco[003] According to many of these standards, video frames are compressed using spatial encoding. These frames can be original frames (ie, i-frame) or they can be residual frames generated by a time coding process that uses motion compensation. During spatial coding, frames are divided into equal sized pixel blocks. For example, an uncompressed frame can be split into a set of 8x8 pixel blocks. For each pixel block, the pixel components are separated into arrays of pixel component values. For example, each block

de pixels pode of pixels can ser dividido em uma matriz be divided into an array de in Y valores Y values de in componentes components de in pixel, pixel, uma matriz de an array of U U valores values de in componentes components de in pixel, pixel, e uma matriz de and an array of V V valores values de in componentes components de in pixel. pixel. Nesse exemplo, In this example, Y Y valores values de in componentes components de pixel indicam valores de luminância e U pixels indicate luminance and U values e V and V valores de values of componentes components de pixel representam pixel represent valores values de in

Petição 870180133578, de 24/09/2018, pág. 8/169Petition 870180133578, of 9/24/2018, p. 8/169

2/69 crominância.2/69 chrominance.

[004] Além do mais, durante codificação espacial, uma transformada de cosseno discreta direta (FDCT) é aplicada a cada matriz de valores de componentes de pixel em um quadro que está sendo codificado. Um FDCT unidimensional ideal é definido por:[004] Furthermore, during spatial coding, a direct discrete cosine transform (FDCT) is applied to each array of pixel component values in a frame being encoded. An ideal one-dimensional FDCT is defined by:

n=0 onde s é o arranjo de N valores originais, t é o arranjo de N valores transformados, e os coeficientes c são dados por c(o)=c(£)=4ΪΪΝ para 1 < k < N — 1 .n = 0 where s is the array of N original values, t is the array of N transformed values, and the coefficients c are given by c (o) = c (£) = 4ΪΪΝ for 1 <k <N - 1.

[005] Uma FDCT bidimensional ideal é definida pela fórmula:[005] An ideal two-dimensional FDCT is defined by the formula:

π(2ηι + l)z π(2η + l)y 2N C°S 2Nπ (2ηι + l) z π (2η + l) y 2N C ° S 2N

ΛΓ-1 ΛΓ-1 t(i, j) = c(i, Σ s(m’ )cos n=l m=0 onde s é o arranjo de N valores originais, t é o arranjo de N valores transformados, e c(i,j) é dado por c(i,j) = c(zjc(yj, e com c(k) definido como no caso unidimensional.ΛΓ-1 ΛΓ-1 t (i, j) = c (i, Σ s ( m ') cos n = lm = 0 where s is the array of N original values, t is the array of N transformed values, and c ( i, j) is given by c (i, j) = c (zjc (yj, and with c (k) defined as in the one-dimensional case.

[006] Uma matriz de coeficientes é produzida quando o bloco de valores de componentes de pixel é transformado utilizando a FDCT. Essa matriz de coeficientes pode ser então quantizada e codificada utilizando, por exemplo, códigos aritméticos ou de Huffman. Um fluxo de bits de vídeo representa o resultado combinado de realizar esse processo em todos os blocos de valores de componentes de cor em uma série de quadros de vídeo em uma série nãocompactada de quadros de vídeo.[006] A coefficient matrix is produced when the block of pixel component values is transformed using the FDCT. This coefficient matrix can then be quantized and coded using, for example, arithmetic or Huffman codes. A video bit stream represents the combined result of performing this process on all color component value blocks in a series of video frames in an uncompressed series of video frames.

[007] Um quadro de vídeo não-compactado pode ser derivado de um fluxo de bits de vídeo ao inverter esse processo. Especificamente, para cada matriz de coeficientes[007] An uncompressed video frame can be derived from a video bit stream by reversing this process. Specifically, for each matrix of coefficients

Petição 870180133578, de 24/09/2018, pág. 9/169Petition 870180133578, of 9/24/2018, p. 9/169

3/69 o fluxo de bits é descompactado e os valores descompactados são dequantizados a fim de derivar matrizes de coeficientes transformados. Uma transformada de cosseno discreta inversa (IDCT) é então aplicada a cada matriz de coeficientes transformados a fim de derivar matrizes de valores de componentes de pixel. Uma IDCT unidimensional ideal é definida por:3/69 the bit stream is uncompressed and the uncompressed values are de-quantized in order to derive matrices of transformed coefficients. An inverse discrete cosine transform (IDCT) is then applied to each matrix of transformed coefficients in order to derive arrays of pixel component values. An ideal one-dimensional IDCT is defined by:

k=0 onde s é o arranjo de N valores originais, t é o arranjo de N valores transformados, e os coeficientes c são dados por c(o) = ylí/N, c(k) = 4ΪΪΝ para 1 < k < N — 1 .k = 0 where s is the array of N original values, t is the array of N transformed values, and the coefficients c are given by c (o) = ylí / N, c (k) = 4ΪΪΝ for 1 <k <N - 1 .

Uma IDCT bidimensional ideal é definida pela fórmula:An ideal two-dimensional IDCT is defined by the formula:

Λ/-1IV—1 s(m,n) = /)cos í=0 7=0 π(2ηι + l)z 2NΛ / -1IV — 1 s (m, n) = /) cos í = 0 7 = 0 π (2ηι + l) z 2N

COS π·(2«+ι)/COS π · (2 «+ ι) /

2N2N

As matrizes resultantes de valores de componentes de pixel são então remontadas em blocos de pixels e esses blocos de pixels são remontados para formar um quadro decodificado. Se o quadro decodificado é um quadro-i, o quadro é agora completamente decodificado. Contudo, se o quadro nãocompactado é um quadro preditivo ou um quadro de bipreditivo, o quadro decodificado é simplesmente um quadro residual decodificado. Um quadro completo é gerado ao construir um quadro reconstruído utilizando vetores de movimento associados com o quadro decodificado e então adicionando o quadro reconstruído ao quadro residual decodificado.The arrays resulting from pixel component values are then reassembled into pixel blocks and these pixel blocks are reassembled to form a decoded frame. If the decoded frame is an i-frame, the frame is now completely decoded. However, if the uncompressed frame is a predictive frame or a bipredictive frame, the decoded frame is simply a decoded residual frame. A complete frame is generated by building a reconstructed frame using motion vectors associated with the decoded frame and then adding the reconstructed frame to the decoded residual frame.

[008] Sob circunstâncias ideais, nenhuma informação é perdida ao usar uma FDCT para codificar ou uma[008] Under ideal circumstances, no information is lost when using an FDCT to encode or an

IDCT para decodificar um bloco de valores de componentes deIDCT to decode a block of component values from

Petição 870180133578, de 24/09/2018, pág. 10/169Petition 870180133578, of 9/24/2018, p. 10/169

4/69 pixel. Consequentemente, sob essas circunstâncias ideais, uma versão decodificada de um quadro de vídeo é idêntica à versão original do quadro de vídeo. Contudo, computar uma FDCT ou uma IDCT pode ser computacionalmente difícil porque a computação das FDCTs e IDCTs envolve o uso de números reais e números significativos de operações de multiplicação. Por essa razão, números reais usados nas FDCTs e IDCTs são frequentemente aproximados utilizando números de precisão limitados. Erros de arredondamento resultam do uso de números de precisão limitada para representar valores de número real. Além do mais, a quantização e a dequantização podem contribuir com erros adicionais.4/69 pixel. Consequently, under these ideal circumstances, a decoded version of a video frame is identical to the original version of the video frame. However, computing an FDCT or an IDCT can be computationally difficult because computing the FDCTs and IDCTs involves using real numbers and significant numbers of multiplication operations. For this reason, actual numbers used in FDCTs and IDCTs are often approximated using limited precision numbers. Rounding errors result from the use of numbers of limited precision to represent real number values. Furthermore, quantization and dequantization can contribute to additional errors.

[009] Erros no processo de compactação e descompactação podem resultar em diferenças significativas entre o quadro não-compactado original e o quadro nãocompactado final. Por exemplo, cores no quadro não-compactado final podem diferir das cores no quadro não-compactado original. Além do mais, erros causados por uma não correspondência entre a implementação do codificador das IDCTs e a implementação do decodificador da IDCT podem acumular durante a codificação e a decodificação de sequências de quadros previstos. Esses erros acumulados comumente são referidos como variação de IDCT.[009] Errors in the compacting and unpacking process can result in significant differences between the original uncompressed frame and the final uncompressed frame. For example, colors in the final uncompressed frame may differ from colors in the original uncompressed frame. Furthermore, errors caused by a mismatch between the implementation of the IDCT encoder and the implementation of the IDCT decoder can accumulate during the encoding and decoding of predicted frame sequences. These accumulated errors are commonly referred to as the IDCT variation.

Resumo da Invenção [0010] Técnicas para aproximar computação de uma transformada de cosseno discreta inversa utilizando cálculos de ponto fixo. De acordo com essas técnicas, matrizes de coeficientes escalonados são geradas ao multiplicar coeficientes em matrizes de coeficientes codificados por fatores de escalonamento. A seguir, as matrizes de coeficientes polarizados são geradas ao adicionar um valor de polarização de ponto médio a um coeficiente DC da matriz de coeficientes escalonados.Summary of the Invention [0010] Techniques to approximate computation of an inverse discrete cosine transform using fixed point calculations. According to these techniques, staggered coefficient matrices are generated by multiplying coefficients in matrices of coefficients encoded by scaling factors. Next, the polarized coefficient matrices are generated by adding a midpoint polarization value to a DC coefficient of the staggered coefficient matrix.

Petição 870180133578, de 24/09/2018, pág. 11/169Petition 870180133578, of 9/24/2018, p. 11/169

5/695/69

Aritmética de ponto fixo é então usada para aplicar uma transformada às matrizes de coeficientes polarizados. Valores nas matrizes resultantes são então deslocados à direita a fim de derivar matrizes de valores de componentes de pixel. Matrizes de valores de componentes de pixel são então combinadas para criar matrizes de pixels. As matrizes de pixels geradas por essas técnicas lembram aproximadamente as matrizes de pixels descompactadas utilizando a transformada de cosseno discreta inversa (IDCT) ideal.Fixed point arithmetic is then used to apply a transform to the matrix of polarized coefficients. Values in the resulting arrays are then shifted to the right to derive arrays of pixel component values. Arrays of pixel component values are then combined to create arrays of pixels. The pixel arrays generated by these techniques closely resemble the decompressed pixel arrays using the ideal inverse discrete cosine transform (IDCT).

[0011] Em um aspecto, um método compreende escalonar cada coeficiente em uma matriz 8x8 de coeficientes codificados por um dentre um fator A, um fator B, um fator C, um fator D, um fator E, um fator F, um fator[0011] In one aspect, a method comprises scaling each coefficient into an 8x8 matrix of coefficients encoded by one of a factor A, a factor B, a factor C, a factor D, a factor E, a factor F, a factor

G, um fator H, um fator I, ou um fator J a fim de produzir uma matriz de coeficientes escalonados. Nesse método, /1 = 1024 , 5 = 1138, C = 1730 , £) = 1609 , £ = 1264 , £ = 1922 ,G, an H factor, a factor I, or a factor J in order to produce a matrix of staggered coefficients. In this method, / 1 = 1024, 5 = 1138, C = 1730, £) = 1609, £ = 1264, £ = 1922,

G= 1788 , H = 2923 , I = 2718 , e J = 2528 . 0 método também compreende utilizar aplicações repetidas de uma transformada unidirecional escalonada de ponto fixo para transformar a matriz de coeficientes escalonados em uma matriz de coeficientes transformados. Além disso, o método compreende coeficientes transformados de deslocamento à direita na matriz de coeficientes transformados a fim de produzir uma matriz de coeficientes ajustados. Cada coeficiente ajustado na matriz de coeficientes ajustados aproxima um valor correspondente em uma matriz de valores que seria produzida ao aplicar uma IDCT bidimensional ideal à matriz de coeficientes codificados. Além do mais, o método compreende exibir um bloco 8x8 de pixels. Cada pixel no bloco 8x8 de pixels inclui um valor de componente de pixel baseado em um coeficiente ajustado na matriz de coeficientes ajustados.G = 1788, H = 2923, I = 2718, and J = 2528. The method also comprises using repeated applications of a unidirectional staggered fixed-point transform to transform the staggered coefficient matrix into a transformed coefficient matrix. In addition, the method comprises transformed right shift coefficients in the transformed coefficient matrix in order to produce an adjusted coefficient matrix. Each adjusted coefficient in the adjusted coefficient matrix approximates a corresponding value in an array of values that would be produced when applying an ideal two-dimensional IDCT to the coded coefficient matrix. Furthermore, the method comprises displaying an 8x8 pixel block. Each pixel in the 8x8 pixel block includes a pixel component value based on an adjusted coefficient in the adjusted coefficient matrix.

Petição 870180133578, de 24/09/2018, pág. 12/169Petition 870180133578, of 9/24/2018, p. 12/169

6/69 [0012] Em outro aspecto, um dispositivo compreende um módulo de escalonamento que escalona cada coeficiente em uma matriz 8x8 de coeficientes codificados por um dentre um fator A, um fator B, um fator C, um fator D, um fator E, um fator F, um fator G, um fator H, um fator I, ou um fator J para produzir uma matriz de coeficientes escalonados, em que A = 1024 , 2? = 1138 , C = 1730 , £) = 1609 ,6/69 [0012] In another aspect, a device comprises a scaling module that scales each coefficient in an 8x8 matrix of coefficients encoded by one of a factor A, a factor B, a factor C, a factor D, a factor E , a F factor, a G factor, a H factor, a I factor, or a J factor to produce a staggered coefficient matrix, where A = 1024, 2? = 1138, C = 1730, £) = 1609,

E = 1264 , F = 1922 , G= 1788 , H = 2923 , I = 2718 , e J = 2528 . 0 dispositivo também compreende um módulo de transformada inversa que utiliza aplicações repetidas de uma transformada unidimensional escalonada de ponto fixo para transformar a matriz de coeficientes escalonados em uma matriz de coeficientes transformados. Além do mais, o dispositivo compreende um módulo de deslocamento à direita que desloca à direita os coeficientes transformados na matriz de coeficientes transformados a fim de produzir uma matriz de coeficientes ajustados. Cada coeficiente ajustado na matriz de coeficientes ajustados aproxima um valor correspondente em uma matriz de valores que seria produzida ao aplicar uma IDCT bidimensional ideal à matriz de coeficientes codificados. 0 dispositivo compreende também um módulo de saida que produz um bloco 8x8 de pixels. Cada pixel no bloco de pixels inclui um valor de componente de pixel baseado em um coeficiente ajustado na matriz de coeficientes ajustados.E = 1264, F = 1922, G = 1788, H = 2923, I = 2718, and J = 2528. The device also comprises an inverse transform module that uses repeated applications of a fixed point scaled one-dimensional transform to transform the matrix of scaled coefficients into a matrix of transformed coefficients. Furthermore, the device comprises a displacement module on the right which displaces the transformed coefficients in the transformed coefficient matrix to the right in order to produce an adjusted coefficient matrix. Each adjusted coefficient in the adjusted coefficient matrix approximates a corresponding value in an array of values that would be produced when applying an ideal two-dimensional IDCT to the coded coefficient matrix. The device also comprises an output module that produces an 8x8 pixel block. Each pixel in the pixel block includes a pixel component value based on an adjusted coefficient in the adjusted coefficient matrix.

[0013] Em outro aspecto, um dispositivo compreende mecanismos para escalonar coeficientes em uma matriz 8x8 de coeficientes codificados por um dentre um fator A, um fator B, um fator C, um fator D, um fator E, um fator F, um fator G, um fator H, um fator I, ou um fator J a fim de produzir uma matriz de coeficientes escalonados, em que ,4 = 1024 , 5 = 1138, C = 1730 , £) = 1609 , 5 = 1264 ,[0013] In another aspect, a device comprises mechanisms to scale coefficients in an 8x8 matrix of coefficients encoded by one among a factor A, a factor B, a factor C, a factor D, a factor E, a factor F, a factor G, an H factor, a factor I, or a factor J to produce a matrix of scaled coefficients, where, 4 = 1024, 5 = 1138, C = 1730, £) = 1609, 5 = 1264,

Petição 870180133578, de 24/09/2018, pág. 13/169Petition 870180133578, of 9/24/2018, p. 13/169

7/69 £ = 1922 , (7= 1788 , Η = 2923 , I = 271S, e J = 2528 . Além disso, o dispositivo compreende mecanismos para usar aplicações repetidas de uma transformada unidimensional escalonada de ponto fixo para transformar a matriz de coeficientes escalonados em uma matriz de coeficientes transformados. Além do mais, o dispositivo compreende mecanismos para deslocar à direita os coeficientes transformados na matriz de coeficientes transformados a fim de produzir uma matriz de coeficientes ajustados. Cada coeficiente ajustado na matriz de coeficientes ajustados aproxima um valor correspondente em uma matriz de valores que seria produzida ao aplicar uma IDCT bidimensional ideal à matriz de coeficientes codificados. Além disso, o dispositivo compreende mecanismos para emitir um bloco 8x8 de pixels. Cada pixel no bloco de pixels inclui um valor de componente de pixel com base em um coeficiente ajustado na matriz de coeficientes ajustados.£ 7/69 £ 1922, (7 = 1788, Η = 2923, I = 271S, and J = 2528. In addition, the device comprises mechanisms for using repeated applications of a one-dimensional staggered fixed-point transform to transform the coefficient matrix staggered in a transformed coefficient matrix. Furthermore, the device comprises mechanisms to shift the transformed coefficients in the transformed coefficient matrix to the right to produce an adjusted coefficient matrix. Each adjusted coefficient in the adjusted coefficient matrix approximates a corresponding value in an array of values that would be produced by applying an ideal two-dimensional IDCT to the array of encoded coefficients. In addition, the device comprises mechanisms for outputting an 8x8 pixel block. Each pixel in the pixel block includes a pixel component value based on in an adjusted coefficient in the adjusted coefficient matrix.

[0014] Em outro aspecto, a invenção é direcionada a um meio legível por computador contendo instruções. As instruções fazem com que um processador programável escalone cada coeficiente em uma matriz 8x8 de coeficientes codificados por um dentre um fator A, um fator B, um fator C, um fator D, um fator E, um fator F, um fator G, um fator H, um fator I, ou um fator J a fim de produzir uma matriz de coeficientes escalonados, em que A = 1024 , = 1138, C = 1730 , £) = 1609 , H = 2923 , I = 2718 , e J = 2528[0014] In another aspect, the invention is directed to a computer-readable medium containing instructions. The instructions cause a programmable processor to scale each coefficient into an 8x8 matrix of coefficients encoded by one of a factor A, a factor B, a factor C, a factor D, an factor E, a factor F, a factor G, a factor H, factor I, or factor J in order to produce a staggered coefficient matrix, where A = 1024, = 1138, C = 1730, £) = 1609, H = 2923, I = 2718, and J = 2528

E = 1264 , F = 1922 , G= 1788 , As instruções também fazem com que o processador programável utilize aplicações repetidas de uma transformada unidimensional escalonada de ponto fixo para transformar a matriz de coeficientes escalonados em uma matriz de coeficientes transformados. Além disso, as instruções fazem com que o processadorE = 1264, F = 1922, G = 1788, The instructions also cause the programmable processor to use repeated applications of a one-dimensional staggered fixed-point transform to transform the staggered coefficient matrix into a transformed coefficient matrix. In addition, the instructions make the processor

Petição 870180133578, de 24/09/2018, pág. 14/169Petition 870180133578, of 9/24/2018, p. 14/169

8/69 programável desloque à direita os coeficientes transformados na matriz de coeficientes transformados a fim de produzir uma matriz de coeficientes ajustados. Cada coeficiente ajustado na matriz de coeficientes ajustados aproxima um valor correspondente em uma matriz de valores que seria produzida ao aplicar uma IDCT bidimensional ideal à matriz de coeficientes codificados. As instruções também fazem com que o processador programável emita sinais que fazem com que uma unidade de exibição exiba um bloco 8x8 de pixels. Cada pixel no bloco de pixels inclui um valor de componente de pixel com base em um coeficiente ajustado na matriz de coeficientes ajustados.Programmable 8/69 shift the transformed coefficients in the transformed coefficient matrix to the right in order to produce an adjusted coefficient matrix. Each adjusted coefficient in the adjusted coefficient matrix approximates a corresponding value in an array of values that would be produced when applying an ideal two-dimensional IDCT to the coded coefficient matrix. The instructions also cause the programmable processor to emit signals that cause a display unit to display an 8x8 pixel block. Each pixel in the pixel block includes a pixel component value based on an adjusted coefficient in the adjusted coefficient matrix.

[0015] Em alguns casos, o meio legível por computador pode formar parte de um produto de programa de computador, o qual pode ser vendido aos fabricantes e/ou usado em um dispositivo de codificação de vídeo. O produto de programa de computador pode incluir o meio legível por computador, e em alguns casos, também pode incluir materiais de empacotamento.[0015] In some cases, the computer-readable medium may form part of a computer program product, which can be sold to manufacturers and / or used in a video encoding device. The computer program product may include the computer-readable medium, and in some cases, may also include packaging materials.

[0016] Os detalhes de um ou mais exemplos são apresentados nos desenhos anexos e na descrição abaixo. Outras características, objetos e vantagens da invenção serão evidentes a partir da descrição e desenhos, e a partir das reivindicações.[0016] Details of one or more examples are presented in the attached drawings and in the description below. Other features, objects and advantages of the invention will be evident from the description and drawings, and from the claims.

Breve Descrição das FigurasBrief Description of the Figures

[0017] [0017] Figura 1 Figure 1 é is um one diagrama diagram de blocos of blocks ilustrando illustrating um dispositivo a device exemplar que example that codifica e encodes and decodifica decodes arquivos files de mídia. from media. [0018] [0018] Figura 2 Figure 2 é is um one diagrama diagram de blocos of blocks ilustrando illustrating detalhes Details exemplares copies de in um one módulo de module of codificação. coding. [0019] [0019] Figura 3 Figure 3 é is um one diagrama diagram de blocos of blocks ilustrando illustrating detalhes exemplares exemplary details de um on one módulo de module of

decodificação.decoding.

Petição 870180133578, de 24/09/2018, pág. 15/169Petition 870180133578, of 9/24/2018, p. 15/169

9/69 [0020] Figura 4 é um fluxograma ilustrando uma operação exemplar do módulo de codificação.9/69 [0020] Figure 4 is a flow chart illustrating an exemplary operation of the coding module.

[0021] Figura 5 é um fluxograma ilustrando uma operação exemplar do módulo de decodificação.[0021] Figure 5 is a flow chart illustrating an exemplary operation of the decoding module.

[0022] Figura 6 é um diagrama de blocos ilustrando detalhes exemplares de um módulo de transformada de cosseno discreta inversa (IDCT).[0022] Figure 6 is a block diagram illustrating exemplary details of an inverse discrete cosine transform (IDCT) module.

[0023] Figura 7 é um fluxograma ilustrando uma operação exemplar do módulo de transformada inversa.[0023] Figure 7 is a flow chart illustrating an exemplary operation of the reverse transform module.

[0024] Figura 8 é um diagrama de blocos ilustrando detalhes exemplares de um módulo de transformada de cosseno discreta direta (FDCT).[0024] Figure 8 is a block diagram illustrating exemplary details of a direct discrete cosine transform (FDCT) module.

[0025] Figura 9 é um fluxograma ilustrando uma operação exemplar do módulo de transformada direta de vetor.[0025] Figure 9 is a flow chart illustrating an exemplary operation of the vector direct transform module.

[0026] Figura 10A é um fluxograma ilustrando uma transformada unidimensional exemplar.[0026] Figure 10A is a flow chart illustrating an exemplary one-dimensional transform.

[0027] Figura 10B é um fluxograma ilustrando uma transformada unidimensional escalonada exemplar.[0027] Figure 10B is a flow chart illustrating an exemplary scaled one-dimensional transform.

[0028] Figura 11 é um fluxograma ilustrando uma transformada unidimensional escalonada, exemplar, utilizada pelo módulo de transformada inversa.[0028] Figure 11 is a flowchart illustrating a scaled, exemplary one-dimensional transform used by the inverse transform module.

Descrição Detalhada da Invenção [0029] A Figura 1 é um diagrama de blocos ilustrando um dispositivo exemplar 2 que codifica e decodifica arquivos de mídia. O dispositivo 2 compreende um computador pessoal, um telefone via rádio móvel, um servidor, um dispositivo de rede, um dispositivo computador integrado em um veículo, uma plataforma de jogos, um dispositivo de jogos de vídeo portátil, uma estação de trabalho de computador, um quiosque de computador, sinalização digital, um computador central, um caixa conversora (set-top box) de televisão, um telefone de rede,Detailed Description of the Invention [0029] Figure 1 is a block diagram illustrating an exemplary device 2 that encodes and decodes media files. Device 2 comprises a personal computer, a telephone via mobile radio, a server, a network device, a computer device integrated into a vehicle, a gaming platform, a portable video game device, a computer workstation, a computer kiosk, digital signage, a central computer, a television set-top box, a network telephone,

Petição 870180133578, de 24/09/2018, pág. 16/169Petition 870180133578, of 9/24/2018, p. 16/169

10/69 um assistente digital pessoal, uma plataforma de jogos de vídeo, um reprodutor de mídia móvel, um reprodutor de mídia residencial, projetor de vídeo digital, reprodutor de mídia pessoal (por exemplo, um iPod), ou outro tipo de dispositivo eletrônico.10/69 a personal digital assistant, a video game platform, a mobile media player, a home media player, a digital video projector, a personal media player (for example, an iPod), or other type of electronic device .

[0030] 0 dispositivo 2 pode incluir uma fonte de mídia 4 para gerar dados de mídia. A fonte de mídia 4 pode compreender um vídeo digital ou câmera de foto estática para capturar dados de imagem. A fonte de mídia 4 pode ser integrada no dispositivo 2 ou pode ser anexada ao dispositivo 2 como um dispositivo periférico. A fonte de mídia 4 também pode compreender um microfone para gravar dados de áudio. A fonte de mídia 4 pode prover dados de mídia a um processador 6. 0 processador 6 pode compreender um processador de sinais digitais (DSP), um microprocessador, ou algum outro tipo de circuito integrado.[0030] The device 2 can include a media source 4 to generate media data. Media source 4 can comprise a digital video or still camera to capture image data. The media source 4 can be integrated into device 2 or can be attached to device 2 as a peripheral device. Media source 4 may also comprise a microphone for recording audio data. Media source 4 can provide media data to a processor 6. Processor 6 may comprise a digital signal processor (DSP), a microprocessor, or some other type of integrated circuit.

[0031] Quando o processador 6 recebe dados de mídia a partir da fonte de mídia 4, um módulo de codificação 8 pode codificar os dados de mídia. 0 módulo de codificação 8 pode compreender software executado pelo processador 6. Aiternativamente, o módulo de codificação 8 pode compreender hardware especializado dentro do processador 6 que codifica os dados de mídia. Em ainda outra alternativa, o módulo de codificação 8 pode compreender qualquer combinação de software e hardware para codificar os dados de mídia.[0031] When processor 6 receives media data from media source 4, an encoding module 8 can encode the media data. The encoding module 8 may comprise software executed by processor 6. Alternatively, the encoding module 8 may comprise specialized hardware within processor 6 that encodes the media data. In yet another alternative, the encoding module 8 can comprise any combination of software and hardware to encode the media data.

[0032] 0 módulo de codificação 8 pode armazenar os dados de mídia codificados em um repositório de mídia 10. 0 repositório de mídia 10 pode compreender memória flash, memória de acesso aleatório, uma unidade de disco rígido, ou algum outro tipo de unidade de armazenamento de dados volátil ou não-volátil.[0032] The encoding module 8 can store the encoded media data in a media repository 10. 0 media repository 10 can comprise flash memory, random access memory, a hard disk drive, or some other type of drive volatile or non-volatile data storage.

Petição 870180133578, de 24/09/2018, pág. 17/169Petition 870180133578, of 9/24/2018, p. 17/169

11/69 [0033] Um módulo de decodificação 12 pode recuperar dados codificados de mídia a partir do repositório de mídia 10. 0 módulo de decodificação 12 pode compreender software executado pelo processador 6. Alternativamente, o módulo de decodificação 12 pode compreender hardware especializado dentro do processador 6 que decodifica os dados codificados de mídia. Em ainda outra alternativa, o módulo de decodificação 12 pode compreender uma combinação de software e hardware que colaboram para decodificar os dados de mídia codificados.11/69 [0033] A decoding module 12 can retrieve encrypted media data from the media repository 10. The decoding module 12 can comprise software run by processor 6. Alternatively, the decoding module 12 can comprise specialized hardware within of processor 6 that decodes the encoded media data. In yet another alternative, the decoding module 12 may comprise a combination of software and hardware that collaborate to decode the encoded media data.

[0034] Uma unidade de apresentação de mídia 14 no dispositivo 2 pode apresentar dados de mídia decodificados pelo módulo de decodificação 12. Por exemplo, a unidade de apresentação de mídia 14 pode compreender um monitor de computador que apresenta dados de mídia de imagem ou vídeo. Em outro exemplo, a unidade de apresentação de mídia 14 pode compreender um dispositivo de saída de áudio (por exemplo, um alto-falante) que apresenta dados de mídia de áudio. A unidade de apresentação de mídia 14 pode ser integrada no dispositivo 2 ou pode ser conectada via um enlace cabeado ou sem fio ao dispositivo 2 como um dispositivo periférico.[0034] A media presentation unit 14 on device 2 can display media data decoded by decoding module 12. For example, media presentation unit 14 can comprise a computer monitor that displays image or video media data . In another example, the media presentation unit 14 may comprise an audio output device (e.g., a speaker) that presents audio media data. The media presentation unit 14 can be integrated into device 2 or can be connected via a wired or wireless link to device 2 as a peripheral device.

[0035] 0 dispositivo 2 também pode compreender uma interface de rede 16. A interface de rede 16 pode facilitar a comunicação entre o dispositivo 2 e uma rede de computador via um enlace cabeado ou sem fio. Por exemplo, a interface de rede 16 pode facilitar a comunicação entre o dispositivo 2 e uma rede de telefonia móvel. 0 dispositivo 2 pode receber arquivos de mídia via interface de rede 16. Por exemplo, o dispositivo 2 pode receber fotografias, clipes de vídeo, vídeo de fluxo contínuo (streaming) (por exemplo, televisão, conferência de vídeo, filmes), clipes de áudio (por exemplo, tons de chamada, músicas, arquivos[0035] The device 2 can also comprise a network interface 16. The network interface 16 can facilitate communication between the device 2 and a computer network via a wired or wireless link. For example, network interface 16 can facilitate communication between device 2 and a mobile phone network. Device 2 can receive media files via the network interface 16. For example, device 2 can receive photographs, video clips, streaming video (for example, television, video conferencing, movies), video clips. audio (for example, ringing tones, music, files

Petição 870180133578, de 24/09/2018, pág. 18/169Petition 870180133578, of 9/24/2018, p. 18/169

12/6912/69

ΜΡ3) , áudio de fluxo contínuo (por exemplo, estações de rádio digital, chamadas de voz, etc.) através da interface de rede 16. Quando a interface de rede 16 recebe um arquivo de mídia ou um fluxo de bits de vídeo, a interface de rede 16 pode armazenar o arquivo de mídia ou o fluxo de bits de vídeo no repositório de mídia 10.ΜΡ3), streaming audio (for example, digital radio stations, voice calls, etc.) through network interface 16. When network interface 16 receives a media file or video bit stream, the network interface 16 can store the media file or video bit stream in the media repository 10.

[0036] Um sinal de vídeo pode ser descrito em termos de uma sequência de imagens, a qual inclui quadros (uma imagem inteira), ou campos (por exemplo, uma imagem que compreende linhas ímpares ou pares de um quadro). Adicionalmente, cada quadro ou campo pode incluir duas ou mais fatias, ou subpartes do quadro ou campo. Conforme aqui usado, quer seja isoladamente ou em combinação com outras palavras, o termo quadro pode se referir a uma imagem, um quadro, um campo ou uma fatia do mesmo.[0036] A video signal can be described in terms of a sequence of images, which includes frames (an entire image), or fields (for example, an image comprising odd or even lines in a frame). In addition, each frame or field can include two or more slices, or subparts of the frame or field. As used herein, whether alone or in combination with other words, the term frame can refer to an image, a frame, a field or a slice of it.

[0037] Quando o módulo de codificação 8 codifica uma série de quadros de vídeo, o módulo de codificação 8 pode iniciar ao selecionar uns dentre os quadros de vídeo para serem quadro-i. Por exemplo, o módulo de codificação 8 pode selecionar cada oitavo quadro como um quadro-i. Os quadro-i são quadros que não referenciam outros quadros. Após selecionar os quadro-i, o módulo de codificação 8 utiliza codificação espacial para codificar os quadro-i. Além do mais, o módulo de codificação 8 pode usar codificação temporal para codificar os quadros restantes.[0037] When encoding module 8 encodes a series of video frames, encoding module 8 can start by selecting one of the video frames to be i-frame. For example, coding module 8 can select each eighth frame as an i-frame. I-frames are frames that do not reference other frames. After selecting the i-frames, the coding module 8 uses spatial coding to code the i-frames. Furthermore, the encoding module 8 can use time coding to encode the remaining frames.

[0038] Para usar codificação espacial para codificar um quadro, o módulo de codificação 8 pode fracionar os dados de quadro em blocos de pixels. Por exemplo, o módulo de codificação 8 pode fracionar os dados de quadro em blocos de pixel que são de oito pixels de largura e 8 pixels de altura (isto é, cada bloco de pixels contém 64 pixels) . O módulo de codificação 8 pode então[0038] To use spatial encoding to encode a frame, encoding module 8 can split the frame data into blocks of pixels. For example, encoding module 8 can break frame data into pixel blocks that are eight pixels wide and 8 pixels high (that is, each pixel block contains 64 pixels). The coding module 8 can then

Petição 870180133578, de 24/09/2018, pág. 19/169Petition 870180133578, of 9/24/2018, p. 19/169

13/69 separar valores de componentes de pixel dos pixels em cada bloco de pixel em matrizes separadas de valores de componentes de pixel. Os valores de componentes de pixel de um pixel são os valores que caracterizam o surgimento do pixel. Por exemplo, cada pixel pode especificar um valor de componente de pixel Y, um valor de componente de pixel Cr, e um valor de componente de pixel Cb. 0 valor de componente de pixel Y indica a luminância do pixel, o valor de componente de pixel Cr indica a crominância vermelha do pixel, e o valor de componente de pixel Cb indica a crominância azul do pixel. Nesse exemplo, quando o módulo de codificação 8 separa os valores de componentes de pixel de um bloco de pixels, o módulo de codificação 8 pode obter uma matriz de Y valores de componentes de pixel, uma matriz de valores de componentes de pixel Cr, e uma matriz de valores de componentes de pixel Cb.13/69 separate pixel component values from pixels in each pixel block in separate arrays of pixel component values. The pixel component values of a pixel are the values that characterize the appearance of the pixel. For example, each pixel can specify a pixel component value Y, a pixel component value Cr, and a pixel component value Cb. The pixel component value Y indicates the pixel luminance, the pixel component value Cr indicates the red chrominance of the pixel, and the pixel component value Cb indicates the blue chrominance of the pixel. In this example, when the encoding module 8 separates the pixel component values from a pixel block, the encoding module 8 can obtain an array of Y pixel component values, an array of pixel component values Cr, and an array of Cb pixel component values.

[0039] Após separar os valores de componentes de pixel em matrizes de valores de componentes de pixel, o módulo de codificação 8 gera matrizes de coeficientes valores de componentes de pixel de esquerda nas matrizes de valores de componentes de pixel. Para cada matriz de coeficientes ajustados, o módulo de codificação 8 utiliza aritmética de ponto fixo para aplicar repetidamente uma transformada unidimensional à matriz de coeficientes ajustados, desse modo gerando matrizes de coeficientes transformados. A seguir, o módulo de codificação 8 gera uma matriz de coeficientes escalonados ao escalonar a matriz de coeficientes transformados por um conjunto de fatores de escalonamento. Cada um desses fatores de escalonamento é um valor inteiro. Os fatores de escalonamento foram selecionados de tal forma que fatores dentro da transformada unidimensional podem ser aproximados ajustados por deslocamento à[0039] After separating the pixel component values in arrays of pixel component values, the coding module 8 generates arrays of coefficient values of left pixel components in the arrays of pixel component values. For each matrix of adjusted coefficients, the coding module 8 uses fixed point arithmetic to repeatedly apply a one-dimensional transform to the matrix of adjusted coefficients, thereby generating matrices of transformed coefficients. Then, the coding module 8 generates a matrix of scaled coefficients by scaling the matrix of coefficients transformed by a set of scaling factors. Each of these escalation factors is an integer value. The scaling factors were selected in such a way that factors within the one-dimensional transform can be approximated adjusted by displacement to

Petição 870180133578, de 24/09/2018, pág. 20/169Petition 870180133578, of 9/24/2018, p. 20/169

14/69 utilizando números racionais simples.14/69 using simple rational numbers.

[0040] Cada coeficiente escalonado na matriz de coeficientes escalonados aproxima um valor correspondente em uma matriz de valores que seria produzida ao aplicar uma transformada de cosseno discreta direta (FDCT) bidimensional ideal a uma matriz correspondente de valores de componentes de cor. Uma FDCT unidimensional ideal é definida por:[0040] Each scaled coefficient in the scaled coefficient matrix approximates a corresponding value in an array of values that would be produced by applying an ideal two-dimensional direct discrete cosine transform (FDCT) to a corresponding array of color component values. An ideal one-dimensional FDCT is defined by:

= c(k)Ys(n)cos ^ + 1^) n=0 onde s é o arranjo de N valores originais, t é o arranjo de N valores transformados, e os coeficientes c são dados por c(o) = yfl/N, c(k) = yÍ2/N para 1 < k < N — 1 .= c (k) Ys (n) cos ^ + 1 ^) n = 0 where s is the array of N original values, t is the array of N transformed values, and the coefficients c are given by c (o) = yfl / N, c (k) = y2 / N for 1 <k <N - 1.

Uma FDCT bidimensional ideal é definida pela fórmula:An ideal two-dimensional FDCT is defined by the formula:

z. z. .\χ~7 χ-* ζ \ τγ(2τ7ζ + l)z 7t(2zz + 1)/ t(i, j ) = c(i, j )2^ 2, sVn> n)cos - cos ΛΓ-1 ΛΓ-1 n=l m=0zz. \ χ ~ 7 χ - * ζ \ τγ (2τ7ζ + l) z 7t (2zz + 1) / t (i, j) = c (i, j) 2 ^ 2, s V n > n ) cos - cos ΛΓ-1 ΛΓ-1 n = lm = 0

2N2N

2N onde s é o arranjo de N valores originais, t é o arranjo de N valores transformados, e c(i,j) é dado por c(i,j) = c(zjc(yj, e com c(k) definido como no caso unidimensional.2N where s is the array of N original values, t is the array of N transformed values, and c (i, j) is given by c (i, j) = c (zjc (yj, and with c (k) defined as in the one-dimensional case.

[0041] Após derivar uma matriz de coeficientes escalonados, o módulo de codificação 8 gera uma matriz de coeficientes quantizados ao quantizar os coeficientes na matriz de coeficientes escalonados. Quantizar os coeficientes escalonados pode reduzir a quantidade de informação associada com os coeficientes de alta freqüência na matriz de coeficientes escalonados. Após gerar a matriz de coeficientes quantizados, o módulo de codificação 8 pode aplicar um esquema de codificação de entropia à matriz de coeficientes quantizados. Por exemplo, o módulo de[0041] After deriving a matrix of scaled coefficients, the coding module 8 generates a matrix of quantized coefficients when quantizing the coefficients in the matrix of scaled coefficients. Quantizing the scaled coefficients can reduce the amount of information associated with the high frequency coefficients in the scaled coefficient matrix. After generating the matrix of quantized coefficients, the coding module 8 can apply an entropy coding scheme to the matrix of quantized coefficients. For example, the

Petição 870180133578, de 24/09/2018, pág. 21/169Petition 870180133578, of 9/24/2018, p. 21/169

15/69 codificação 8 pode aplicar um esquema de codificação Huffman aos coeficientes quantizados na matriz de coeficientes. Quando o módulo de codificação 8 aplica o esquema de codificação de entropia a cada uma das matrizes de coeficientes quantizados, o módulo de codificação 8 pode emitir as matrizes codificadas como parte de um fluxo de bits de vídeo.15/69 coding 8 can apply a Huffman coding scheme to the quantized coefficients in the coefficient matrix. When the coding module 8 applies the entropy coding scheme to each of the matrices of quantized coefficients, the coding module 8 can output the coded matrices as part of a video bit stream.

[0042] Para usar codificação temporal para codificar um quadro, o módulo de codificação 8 pode dividir o quadro em macroblocos. Dependendo do padrão de codificação usado, estes macroblocos podem ser de tamanho fixo ou variável e podem ser sobrepostos ou nãosobrepostos. Por exemplo, cada macrobloco pode ser um bloco de pixels 16x16. Para cada macrobloco no quadro, o módulo de codificação 8 pode tentar identificar um macrobloco de origem em um ou mais quadros de referência. Dependendo do padrão de codificação, os quadros de referência podem ser quadro-i, quadros preditivos, ou quadros bi-preditivos. Se o módulo de codificação 8 for capaz de identificar um macrobloco de origem em um quadro de referência, o módulo de codificação 8 grava um vetor de movimento para o macrobloco. O vetor de movimento inclui um valor de x que indica o deslocamento horizontal do macrobloco relativo ao macrobloco de origem identificado e a um valor y que indica o deslocamento vertical do macrobloco relativo ao macrobloco de origem identificado. Se o módulo de codificação 8 for incapaz de identificar um macrobloco de origem para o macrobloco, o módulo de codificação 8 não pode ser requerido para gravar um vetor de movimento para o macrobloco. Em seguida, o módulo de codificação 8 gera um quadro reconstruído. O quadro reconstruído contém o quadro que resultaria do movimento dos macroblocos dos quadros de referência de acordo com os vetores de movimento[0042] To use time coding to encode a frame, encoding module 8 can divide the frame into macroblocks. Depending on the coding pattern used, these macroblocks can be of fixed or variable size and can be overlapping or non-overlapping. For example, each macroblock can be a 16x16 pixel block. For each macroblock in the frame, coding module 8 may attempt to identify a macroblock of origin in one or more reference frames. Depending on the coding standard, reference frames can be i-frames, predictive frames, or bi-predictive frames. If the coding module 8 is able to identify a source macroblock in a frame of reference, the coding module 8 records a motion vector for the macroblock. The motion vector includes a value of x that indicates the horizontal displacement of the macroblock relative to the identified macroblock of origin and a value of y that indicates the vertical displacement of the macroblock relative to the identified macroblock of origin. If coding module 8 is unable to identify a source macroblock for the macroblock, coding module 8 may not be required to record a motion vector for the macroblock. Then, the coding module 8 generates a reconstructed frame. The reconstructed frame contains the frame that would result from the movement of the macroblocks of the reference frames according to the motion vectors

Petição 870180133578, de 24/09/2018, pág. 22/169Petition 870180133578, of 9/24/2018, p. 22/169

16/69 gravados para o quadro atual. Após gerar o quadro reconstruído, o módulo de codificação 8 subtrai valores de componentes de pixel em cada pixel do quadro reconstruído dos valores de componentes de pixel correspondentes em pixels correspondentes do quadro atual, tendo por resultado um quadro residual. 0 módulo de codificação 8 pode então usar um esquema de codificação de entropia para comprimir os vetores de movimento para os macroblocos do quadro atual. Em adição, o módulo de codificação 8 usa a técnica de codificação espacial descrita acima para comprimir o quadro residual.16/69 recorded for the current frame. After generating the reconstructed frame, coding module 8 subtracts pixel component values in each pixel of the reconstructed frame from the corresponding pixel component values in corresponding pixels of the current frame, resulting in a residual frame. The coding module 8 can then use an entropy coding scheme to compress the motion vectors for the macroblocks of the current frame. In addition, the coding module 8 uses the spatial coding technique described above to compress the residual frame.

[0043][0043]

O módulo de decodificação 12 pode realizar um processo similar como o módulo de codificaçãoThe decoding module 12 can perform a similar process as the encoding module

8, mas em reverso processo espacial8, but in reverse spatial process

Por exemplo, a fim de realizar um de decodificação, o módulo de decodificação 12 pode aplicar um esquema de decodificação de entropia para cada matriz codificada de coeficientes quantizados em um fluxo de bits de vídeo codificado. O módulo de decodificação 12 pode então dequantizar coeficientes em cada matriz de coeficientes quantizados, desse modo, gerando uma matriz de coeficientes dequantizados para cada matriz de coeficientes quantizados. Para cada matriz de coeficientes quantizados, o módulo deFor example, in order to perform a decoding step, the decoding module 12 can apply an entropy decoding scheme for each coded matrix of quantized coefficients in an encoded video bit stream. The decoding module 12 can then quantize coefficients in each matrix of quantized coefficients, thereby generating a matrix of quantized coefficients for each matrix of quantized coefficients. For each matrix of quantized coefficients, the

decodificação decoding 12 gera uma 12 generates a matriz matrix de in coeficientes coefficients escalonados staggered ao escalonar a when staggering the matriz matrix de in coeficientes coefficients quantizados quantized utilizando um using a conjunto set de in fatores factors de in escalonamento staggering . Esses fatores de . These factors escalonamento staggering podem ser can be os the mesmos fatores de escalonamento usados same scheduling factors used no at the processo process de in

codificação espacial discutido acima. Após gerar uma matriz de coeficientes escalonados, o módulo de decodificação 12 utiliza aritmética de ponto fixo para repetidamente aplicar uma transformada unidimensional à matriz de coeficientes quantizados, desse modo gerando uma matriz de coeficientesspatial coding discussed above. After generating a matrix of scaled coefficients, the decoding module 12 uses fixed point arithmetic to repeatedly apply a one-dimensional transform to the matrix of quantized coefficients, thereby generating a matrix of coefficients

Petição 870180133578, de 24/09/2018, pág. 23/169Petition 870180133578, of 9/24/2018, p. 23/169

17/69 aplicar coluna a17/69 apply column to

na transformada matriz de de transformados. Por exemplo, o módulo de decodificação 12 pode gerar uma matriz de coeficientes intermediários ao aplicar a transformação unidimensional a cada vetor linha em uma matriz de coeficientes escalonados. Nesse exemplo, o módulo de decodificação 12 pode então gerar a matriz de coeficientes transformados ao unidimensional a cada vetor coeficientes intermediários. Após gerar uma matriz coeficientes transformados, o módulo de decodificação 12 gera uma matriz de coeficientes ajustados ao deslocar à direita os coeficientes transformados na matriz de coeficientes transformados.in the transformed matrix of transformed. For example, the decoding module 12 can generate a matrix of intermediate coefficients by applying the one-dimensional transformation to each line vector in a matrix of scaled coefficients. In this example, the decoding module 12 can then generate the matrix of coefficients transformed to one-dimensional at each intermediate coefficient vector. After generating a matrix of transformed coefficients, the decoding module 12 generates a matrix of adjusted coefficients by shifting the transformed coefficients in the transformed coefficient matrix on the right.

[0044] Coeficientes ajustados na matriz de coeficientes ajustados aproximam os valores que seriam produzidos ao aplicar uma transformada de cosseno discreta inversa (IDCT) bidimensional ideal à matriz de coeficientes dequantizados. A IDCT unidimensional ideal é definida pela fórmula:[0044] Adjusted coefficients in the adjusted coefficient matrix approximate the values that would be produced when applying an ideal two-dimensional inverse discrete cosine transform (IDCT) to the matrix of quantized coefficients. The ideal one-dimensional IDCT is defined by the formula:

ΛΓ-1 í(£) = c(£)Zs (zz)cos π{2η +1)£) n=0ΛΓ-1 í (£) = c (£) Zs (zz) cos π {2η +1) £) n = 0

2N onde s é o arranjo de N valores originais, t é o arranjo de N valores transformados, e os coeficientes c são dados por c(o) = JÜN, c(k) = 4ΪΪΝ para \<k<N — \. Uma IDCT bidimensional ideal é definida pela fórmula:2N where s is the array of N original values, t is the array of N transformed values, and the coefficients c are given by c (o) = JÜN, c (k) = 4ΪΪΝ for \ <k <N - \. An ideal two-dimensional IDCT is defined by the formula:

π(2ηι + l)z tt(2zz +1)7π (2ηι + l) z tt (2zz +1) 7

ΛΓ-1ΛΓ-1 s(zw, zz) = 7 Wz’’ 7‘)cos í=0 j=0 cos2NΛΓ-1ΛΓ-1 s (zw, zz) = 7 W z '' 7 ') cos í = 0 j = 0 cos2N

Esses blocos de valores de componentes de pixel podem então ser remontados em blocos de pixels e esses blocos de pixels podem ser remontados para formar o quadro de vídeo nãocompactado.These blocks of pixel component values can then be reassembled into blocks of pixels and these blocks of pixels can be reassembled to form the uncompressed video frame.

Petição 870180133578, de 24/09/2018, pág. 24/169Petition 870180133578, of 9/24/2018, p. 24/169

18/69 [0045] Após gerar a matriz de coeficientes ajustados, o módulo de decodificação 12 pode então cortar os coeficientes ajustados na matriz de coeficientes ajustados a fim de garantir que os coeficientes ajustados estejam dentro da faixa permitida para um valor de componente de pixel. O módulo de decodificação 12 pode então remontar as matrizes de coeficientes de corte (clipped) em blocos de pixels. Após remontar os blocos de valores de componentes de pixel em blocos de pixel, o módulo de decodificação 12 pode gerar uma imagem ao remontar os blocos de pixels.18/69 [0045] After generating the adjusted coefficient matrix, the decoding module 12 can then cut the adjusted coefficients in the adjusted coefficient matrix to ensure that the adjusted coefficients are within the allowed range for a pixel component value . The decoding module 12 can then reassemble the arrays of clipped coefficients into blocks of pixels. After reassembling the blocks of pixel component values into pixel blocks, the decoding module 12 can generate an image by reassembling the pixel blocks.

[0046] A fim de decodificar um quadro preditivo, o módulo de decodificação 12 pode usar a técnica de decodificação espacial descrita acima para decodificar as matrizes de coeficientes quantizados na imagem residual para o quadro preditivo. Além disso, o módulo de decodificação 12 pode usar o esquema de decodificação de entropia para decodificar os vetores de movimento do quadro preditivo. Em seguida, o módulo de decodificação 12 pode gerar um quadro reconstruído ao mover macroblocos dos quadros de referência do quadro preditivo de acordo com os vetores de movimento. Após gerar o quadro reconstruído, o módulo de decodificação 12 adiciona valores de componentes de pixel em cada pixel do quadro residual decodificado aos valores de componentes de pixel correspondentes em pixels correspondentes do quadro reconstruído. O resultado desta adição é o quadro preditivo reconstruído.[0046] In order to decode a predictive frame, the decoding module 12 can use the spatial decoding technique described above to decode the matrices of quantized coefficients in the residual image for the predictive frame. In addition, the decoding module 12 can use the entropy decoding scheme to decode the motion vectors of the predictive frame. Then, the decoding module 12 can generate a reconstructed frame by moving macroblocks from the reference frames of the predictive frame according to the motion vectors. After generating the reconstructed frame, the decoding module 12 adds pixel component values in each pixel of the decoded residual frame to the corresponding pixel component values in corresponding pixels of the reconstructed frame. The result of this addition is the reconstructed predictive framework.

[0047] As técnicas descritas nesta invenção podem prover diversas vantagens. Por exemplo, por causa destas técnicas aplicam aritmética de ponto fixo, estas técnicas podem ser aplicadas em dispositivos menores, menos complexos, tais como telefones móveis, assistentes digitais pessoais, e reprodutores de mídia pessoais. Além disso,[0047] The techniques described in this invention can provide several advantages. For example, because these techniques apply fixed-point arithmetic, these techniques can be applied to smaller, less complex devices, such as mobile phones, personal digital assistants, and personal media players. Besides that,

Petição 870180133578, de 24/09/2018, pág. 25/169Petition 870180133578, of 9/24/2018, p. 25/169

19/69 estas técnicas podem ser aplicadas a formatos que incluem as recomendações H.261, H.263, H.264, T.81 (JPEG) do Setor de Padronização de União Internacional de Telecomunicações (ITU-T), assim como os formatos de mídia Grupo de Especialistas de Imagens em Movimento (MPEG)-l, MPEG-2, e MPEG-4 parte 2 MEC/Organização Internacional para Padronização (ISO).19/69 these techniques can be applied to formats that include the recommendations H.261, H.263, H.264, T.81 (JPEG) of the International Telecommunication Union Standardization Sector (ITU-T), as well as the media formats Moving Image Experts Group (MPEG) -l, MPEG-2, and MPEG-4 part 2 MEC / International Organization for Standardization (ISO).

[0048] A Figura 2 é um diagrama em blocos ilustrando detalhes exemplares do módulo de codificação 8. O módulo de codificação 8 pode compreender um conjunto de módulos. Estes módulos podem compreender subconjuntos de instruções de software do módulo de codificação 8. Aiternativamente, estes módulos podem compreender hardware e firmware tal como um ou mais hardware de propósito especial. Em uma outra alternativa, estes módulos podem compreender instruções de software e hardware de propósito especial.[0048] Figure 2 is a block diagram illustrating exemplary details of the coding module 8. The coding module 8 can comprise a set of modules. These modules may comprise subsets of software instructions from the coding module 8. Alternatively, these modules may comprise hardware and firmware such as one or more special purpose hardware. In another alternative, these modules may comprise special-purpose software and hardware instructions.

[0049] Como ilustrado no exemplo da Figura 2, o módulo de codificação 8 inclui um módulo de controle de quadro 20 que controla se o módulo de codificação 8 processa um quadro de vídeo como um quadro-i, um quadro preditivo, ou um quadro bi-preditivo. Por exemplo, quando o módulo de codificação 8 recebe um quadro de vídeo, o módulo de controle de quadro 20 pode determinar se um indicador de fluxo de bits associado com o quadro de vídeo indica que o quadro é um quadro-i, um quadro preditivo, ou um quadro bipreditivo. Se o módulo de controle de quadro 20 determina que o indicador de fluxo de bits indica que o quadro é um quadro-i, o módulo de controle de quadro 20 pode fazer com que o quadro de vídeo seja processado por um conjunto de módulos que realizam imediatamente a codificação espacial no quadro de vídeo. Por outro lado, se o módulo de controle de quadro 20 determina que o quadro é um quadro preditivo[0049] As illustrated in the example in Figure 2, the encoding module 8 includes a frame control module 20 that controls whether the encoding module 8 processes a video frame as an i-frame, a predictive frame, or a frame bi-predictive. For example, when encoding module 8 receives a video frame, frame control module 20 can determine whether a bit rate indicator associated with the video frame indicates that the frame is an i-frame, a predictive frame , or a bipredictive picture. If the frame control module 20 determines that the bitstream indicator indicates that the frame is an i-frame, the frame control module 20 can cause the video frame to be processed by a set of modules that perform spatial encoding in the video frame. On the other hand, if the frame control module 20 determines that the frame is a predictive frame

Petição 870180133578, de 24/09/2018, pág. 26/169Petition 870180133578, of 9/24/2018, p. 26/169

20/69 ou um quadro bi-preditivo, o módulo de controle de quadro 20 pode fazer com que o quadro de vídeo seja processado por um conjunto de módulos que realizam a codificação temporal.20/69 or a bi-predictive frame, the frame control module 20 can cause the video frame to be processed by a set of modules that perform time coding.

[0050] O módulo de codificação 8 inclui uma série de módulos para aplicar a codificação espacial aos quadros de vídeo. Estes módulos incluem um módulo divisor de bloco 22, um módulo de extração de componente 24, um módulo de transformada direta 26, um módulo de quantização 28, e um módulo de codificação de entropia 30. O módulo divisor de bloco 22 pode receber quadros de vídeo nãocodificados da fonte de mídia 4, interface de rede 16, ou outra fonte. Quando o módulo divisor de bloco 22 recebe um quadro de vídeo não-codifiçado, o módulo divisor de bloco 22 pode separar o quadro em blocos de pixels. O módulo divisor de bloco 22 pode prover blocos de pixels a um módulo de extração de componente 24.[0050] The encoding module 8 includes a series of modules for applying spatial encoding to video frames. These modules include a block divider module 22, a component extraction module 24, a direct transform module 26, a quantization module 28, and an entropy coding module 30. The block divider module 22 can receive frames of non-tagged video from media source 4, network interface 16, or another source. When the block divider module 22 receives a non-encoded video frame, the block divider module 22 can separate the frame into blocks of pixels. The block divider module 22 can provide pixel blocks to a component extraction module 24.

[0051] Quando o módulo de extração de componente 24 recebe um bloco de pixels, o módulo de extração de componente 24 pode converter valores de componentes de pixel de cada pixel em um formato de cor diferente. Por exemplo, o módulo de extração de componente 24 pode converter cada pixel de um formato de cor VermelhoVerde-Azul (RGB) para o formato de cor YCrCb. Após converter os pixels no bloco para o formato de cor diferente, o módulo de extração de componente 24 pode separar os valores de componentes de pixel dos pixels no bloco em matrizes de valores de componentes de pixel. Por exemplo, o módulo de extração de componente 24 pode extrair uma matriz de valores de Y, uma matriz de valores de Cr, e uma matriz de valores de Cb de um bloco de pixels. Os valores de Y especificam o brilho de pixels, os valores de Cr especificam a crominância vermelho dos pixels, e os valores de Cb especificam a crominância azul dos pixels.[0051] When the component extraction module 24 receives a block of pixels, the component extraction module 24 can convert pixel component values of each pixel into a different color format. For example, the component extraction module 24 can convert each pixel from a Red-Green-Blue (RGB) color format to the YCrCb color format. After converting the pixels in the block to a different color format, the component extraction module 24 can separate the pixel component values from the pixels in the block into arrays of pixel component values. For example, the component extraction module 24 can extract an array of Y values, an array of Cr values, and an array of Cb values from a pixel block. The Y values specify the pixel brightness, the Cr values specify the red chrominance of the pixels, and the Cb values specify the blue chrominance of the pixels.

Petição 870180133578, de 24/09/2018, pág. 27/169Petition 870180133578, of 9/24/2018, p. 27/169

21/6921/69

Quando o módulo de extração de componente 24 extraiu as matrizes de valores de componentes de pixel, o módulo de extração de componente 24 pode prover cada uma das matrizes separadamente a um módulo de Transformada de Cosseno Discreta (DCT) 26.When the component extraction module 24 extracted the matrix of pixel component values, the component extraction module 24 can provide each matrix separately to a Discrete Cosine Transform (DCT) module 26.

[0052] Quando o módulo de transformada direta 26 recebe uma matriz de valores de componentes de pixel, o módulo de transformada direta 26 gera uma matriz de coeficientes escalados. Cada coeficiente nesta matriz de coeficientes escalonados aproxima um coeficiente que é produzido usando uma transformada de cosseno discreta direta ideal para transformar a matriz de valores de componentes de pixel.[0052] When the direct transform module 26 receives an array of pixel component values, the direct transform module 26 generates an array of scaled coefficients. Each coefficient in this matrix of scaled coefficients approximates a coefficient that is produced using an ideal direct discrete cosine transform to transform the matrix of pixel component values.

[0053] O módulo de transformada direta 26 usa aritmética de ponto fixo para aplicar uma transformada unidimensional às matrizes de valores de componentes de pixel. Usar a aritmética de ponto fixo pode ser vantajosa em algumas circunstâncias. Por exemplo, dispositivos menores, tais como telefones móveis não puderam incluir uma unidade de ponto flutuante exigida para executar a aritmética de ponto flutuante. O módulo de transformada direta 26 pode começar um processo de gerar a matriz de coeficientes escalonados ao deslocar para a esquerda cada um dos valores de componentes de pixel. Por exemplo, o módulo de transformada direta 26 pode gerar uma matriz de coeficientes ajustados ao deslocar para a esquerda cada um dos valores de componentes de pixel por um número de bits de precisão (isto é, o número de bits de mantissa) de representações de ponto fixo de números que o módulo de transformada direta 26 usa ao aplicar a transformada unidimensional mais um número de bits de precisão removidos ao escalonar os coeficientes transformados que resultam da aplicação da transformada. Após deslocamento para a[0053] The direct transform module 26 uses fixed point arithmetic to apply a one-dimensional transform to the arrays of pixel component values. Using fixed-point arithmetic can be advantageous in some circumstances. For example, smaller devices, such as mobile phones, could not include a floating point unit required to perform floating point arithmetic. The direct transform module 26 can begin a process of generating the staggered coefficient matrix by shifting each of the pixel component values to the left. For example, the direct transform module 26 can generate an array of adjusted coefficients by shifting each of the pixel component values to the left by a number of precision bits (that is, the number of mantissa bits) of representations of fixed point of numbers that the direct transform module 26 uses when applying the one-dimensional transform plus a number of precision bits removed when scaling the transformed coefficients that result from applying the transform. After moving to the

Petição 870180133578, de 24/09/2018, pág. 28/169Petition 870180133578, of 9/24/2018, p. 28/169

22/69 esquerda de cada um dos valores de componentes de pixel, o módulo de transformada direta 26 pode realizar a transformada em cada um dos vetores de linha da matriz de coeficientes ajustados. Ao realizar uma transformada de cosseno discreta em cada um dos vetores de linha da matriz de coeficientes ajustados gera uma matriz de coeficientes intermediários. Em seguida, o módulo de transformada direta 2 6 pode realizar a transformada em cada um dos vetores coluna da matriz de coeficientes intermediários. Ao realizar a transformada em cada um dos vetores coluna da matriz de coeficientes intermediários resulta em uma matriz de coeficientes transformados.22/69 left of each of the pixel component values, the direct transform module 26 can perform the transform in each of the line vectors of the adjusted coefficient matrix. When performing a discrete cosine transform on each of the line vectors of the adjusted coefficient matrix, it generates an intermediate coefficient matrix. Then, the direct transform module 26 can perform the transform in each of the column vectors of the intermediate coefficient matrix. When performing the transform in each of the column vectors of the intermediate coefficient matrix, it results in a matrix of transformed coefficients.

[0054] Após gerar a matriz de coeficientes transformados, o módulo de transformada direta 26 escalona coeficientes transformados em diferentes posições na matriz de coeficientes transformados por diferentes fatores de escala. Como descrito abaixo, o módulo de decodificação 12 pode usar os recíprocos destes fatores de escala na aplicação de uma transformada inversa. Quando o módulo de transformada direta 26 terminou o escalonamento dos coeficientes transformados pelos fatores de escala, o módulo de transformada direta 26 pode emitir a matriz resultante de coeficientes escalonados para o módulo de quantização 28.[0054] After generating the transformed coefficient matrix, the direct transform module 26 scales transformed coefficients at different positions in the coefficient matrix transformed by different scale factors. As described below, the decoding module 12 can use the reciprocal of these scale factors in the application of an inverse transform. When the direct transform module 26 has finished scaling the coefficients transformed by the scale factors, the direct transform module 26 can emit the matrix resulting from scaled coefficients for the quantization module 28.

[0055] Quando o módulo de quantização 28 recebe uma matriz de coeficientes do módulo de transformada direta 26, o módulo de quantização 28 pode quantizar os coeficientes escalonados. O módulo de quantização 28 pode quantizar os coeficientes escalonados em uma variedade de formas dependendo do padrão de codificação que está sendo empregado. Por exemplo, de acordo com o padrão MPEG-4 parte 2, o módulo de quantização 2 8 pode usar a matriz de quantização a seguir para quantizar os coeficientes em uma[0055] When the quantization module 28 receives a coefficient matrix from the direct transform module 26, the quantization module 28 can quantize the scaled coefficients. The quantization module 28 can quantize the scaled coefficients in a variety of ways depending on the coding pattern being employed. For example, according to the MPEG-4 part 2 standard, the quantization module 28 can use the following quantization matrix to quantize the coefficients in a

Petição 870180133578, de 24/09/2018, pág. 29/169Petition 870180133578, of 9/24/2018, p. 29/169

23/69 matriz de coeficientes escalonados para um quadro-i:23/69 matrix of scaled coefficients for an i-frame:

8 8 17 17 18 18 19 19 21 21 23 23 25 25 27 27 17 17 18 18 19 19 21 21 23 23 25 25 27 27 28 28 20 20 21 21 22 22 23 23 24 24 26 26 28 28 30 30 21 21 22 22 23 23 24 24 26 26 28 28 30 30 32 32 22 22 23 23 24 24 26 26 28 28 30 30 32 32 35 35 23 23 24 24 26 26 28 28 30 30 32 32 35 35 38 38 25 25 26 26 28 28 30 30 32 32 35 35 38 38 41 41 27 27 28 28 30 30 32 32 35 35 38 38 41 41 45 45

Além disso, neste exemplo, o módulo de quantização 28 pode usar a matriz de quantização a seguir para quantizar coeficientes em uma matriz de coeficientes escalonados para um quadro preditivo ou bi-preditivo:In addition, in this example, the quantization module 28 can use the following quantization matrix to quantize coefficients in a scaled coefficient matrix for a predictive or bi-predictive framework:

16 16 17 17 18 18 19 19 20 20 21 21 22 22 23 23 17 17 18 18 19 19 20 20 21 21 22 22 23 23 24 24 18 18 19 19 20 20 21 21 22 22 23 23 24 24 25 25 19 19 20 20 21 21 22 22 23 23 24 24 26 26 27 27 20 20 21 21 22 22 23 23 25 25 26 26 27 27 28 28 21 21 22 22 23 23 24 24 26 26 27 27 28 28 30 30 22 22 23 23 24 24 26 26 27 27 28 28 30 30 31 31 23 23 24 24 25 25 27 27 28 28 30 30 31 31 33 33

[0056] Após o módulo de quantização 28 gerar uma matriz de coeficientes quantizados, o módulo de codificação de entropia 30 pode comprimir a matriz de coeficientes quantizados usando um esquema de codificação de entropia. Para comprimir a matriz de coeficientes quantizados usando um esquema de codificação de entropia, o módulo de codificação de entropia 30 pode organizar os coeficientes quantizados em um vetor ao obter um padrão de ziguezague dos coeficientes. Ou seja, o módulo de[0056] After the quantization module 28 generates a matrix of quantized coefficients, the entropy coding module 30 can compress the matrix of quantized coefficients using an entropy coding scheme. To compress the matrix of quantized coefficients using an entropy coding scheme, the entropy coding module 30 can organize the quantized coefficients into a vector by obtaining a zigzag pattern of the coefficients. That is, the

Petição 870180133578, de 24/09/2018, pág. 30/169Petition 870180133578, of 9/24/2018, p. 30/169

24/69 codificação de entropia 30 pode arranjar todos os coeficientes quantizados na matriz bidimensional de coeficientes quantizados em um vetor unidimensional de coeficientes quantizados em um previsível. 0 módulo de codificação de entropia 30 pode então aplicar um esquema de codificação de entropia, tal como a codificação Huffman ou a codificação aritmética, para o vetor de coeficientes quantizados.24/69 entropy coding 30 can arrange all quantized coefficients in the two-dimensional matrix of quantized coefficients in a one-dimensional vector of quantized coefficients in a predictable one. The entropy coding module 30 can then apply an entropy coding scheme, such as Huffman coding or arithmetic coding, to the quantized coefficient vector.

[0057] 0 módulo de codificação 8 também inclui um ou mais módulos para realizar a codificação temporal dos quadros de vídeo. Como ilustrado no exemplo da Figura 2, o módulo de codificação 8 inclui um módulo de estimação de movimento 32, um módulo de geração de quadro reconstruído 34, e um módulo de geração de quadro residual 36. 0 módulo de estimação de movimento 32 tenta identificar um macrobloco de origem em uma imagem de referência para cada macrobloco em um quadro de vídeo atual. O módulo de estimação de movimento 32 pode tentar identificar um macrobloco de origem para um macrobloco no quadro atual ao procurar pelos macroblocos na imagem de referência que contêm pixels similares como o macrobloco. O módulo de estimação de movimento 32 pode procurar áreas de tamanhos diferentes de acordo com diferentes padrões de codificação de modo a identificar o macrobloco de origem para um macrobloco no quadro atual. Por exemplo, o módulo de estimação de movimento 32 pode procurar por um macrobloco de origem dentro de uma área que tem 32 pixels de largura por 32 pixels de altura, com o macrobloco atual no centro da área de busca. Quando o módulo de estimação de movimento 32 identifica um macrobloco de origem para um macrobloco no quadro atual, o módulo de estimação de movimento 32 calcula um vetor de movimento para o macrobloco no quadro atual. O vetor de movimento para o macrobloco no quadro atual[0057] The encoding module 8 also includes one or more modules to perform the temporal encoding of the video frames. As illustrated in the example in Figure 2, the coding module 8 includes a motion estimation module 32, a reconstructed frame generation module 34, and a residual frame generation module 36. Motion estimation module 32 attempts to identify a source macroblock in a reference image for each macroblock in a current video frame. The motion estimation module 32 can try to identify a source macroblock for a macroblock in the current frame by looking for macroblocks in the reference image that contain similar pixels as the macroblock. The motion estimation module 32 can search for areas of different sizes according to different coding standards in order to identify the source macroblock for a macroblock in the current frame. For example, the motion estimation module 32 can search for a source macroblock within an area that is 32 pixels wide by 32 pixels high, with the current macroblock in the center of the search area. When motion estimation module 32 identifies a source macroblock for a macroblock in the current frame, motion estimation module 32 calculates a motion vector for the macroblock in the current frame. The motion vector for the macroblock in the current frame

Petição 870180133578, de 24/09/2018, pág. 31/169Petition 870180133578, of 9/24/2018, p. 31/169

25/69 especifica um valor x que indica a diferença na posição horizontal entre o macrobloco de origem identificado e o macrobloco do quadro atual. Após o módulo de estimação de movimento 32 ter calculado um vetor de movimento ou ter sido incapaz de identificar um macrobloco de origem para cada macrobloco no quadro atual, o módulo de estimação de movimento 32 pode prover os vetores de movimento calculados para o quadro atual para o módulo de geração de quadro reconstruído 34.25/69 specifies an x value that indicates the difference in the horizontal position between the identified macroblock of origin and the macroblock of the current frame. After motion estimation module 32 has calculated a motion vector or has been unable to identify a source macroblock for each macroblock in the current frame, motion estimation module 32 can provide the calculated motion vectors for the current frame for the reconstructed board generation module 34.

[0058] O módulo de geração de quadro reconstruído 34 pode usar os vetores de movimento e os quadros de referência para gerar um quadro reconstruído. O módulo de geração de quadro reconstruído 34 pode gerar o quadro reconstruído ao aplicar os vetores de movimento para cada macrobloco no quadro atual para os macroblocos de origem nos quadros de referência. De fato, o módulo de geração de quadro reconstruído 34 cria um quadro em que os macroblocos dos quadros de referência foram movidos para as posições indicadas pelos vetores de movimento correspondentes do quadro atual.[0058] The reconstructed frame generation module 34 can use motion vectors and reference frames to generate a reconstructed frame. The reconstructed frame generation module 34 can generate the reconstructed frame by applying the motion vectors for each macroblock in the current frame to the original macroblocks in the reference frames. In fact, the reconstructed frame generation module 34 creates a frame in which the macroblocks of the reference frames have been moved to the positions indicated by the corresponding motion vectors of the current frame.

[0059] O módulo de geração de quadro residual 36 pode gerar o quadro residual ao subtrair valores de componentes de pixel no quadro reconstruído dos valores de componentes de pixel correspondentes no quadro atual. Geralmente, o quadro residual inclui menos informação do que o quadro reconstruído ou o quadro atual. Após o módulo de geração de quadro residual 36 gerar o quadro residual, o módulo de geração de quadro residual 36 provê o quadro residual ao módulo divisor de bloco 22 a fim de começar o processo de codificação espacial do quadro residual. Além disso, o módulo de estimação de movimento 32 pode prover os vetores de movimento para o quadro atual para o módulo de codificação de entropia 30 a fim de comprimir os vetores de[0059] Residual frame generation module 36 can generate the residual frame by subtracting pixel component values in the reconstructed frame from the corresponding pixel component values in the current frame. The residual picture generally includes less information than the reconstructed picture or the current picture. After the residual frame generation module 36 generates the residual frame, the residual frame generation module 36 provides the residual frame to the block divider module 22 in order to begin the spatial encoding process of the residual frame. In addition, the motion estimation module 32 can provide the motion vectors for the current frame to the entropy coding module 30 in order to compress the motion vectors.

Petição 870180133578, de 24/09/2018, pág. 32/169Petition 870180133578, of 9/24/2018, p. 32/169

26/69 movimento. Após o quadro residual ser codificado espacialmente e o módulo de codificação de entropia 30 ter codificado os vetores de movimento, o módulo de saída de fluxo 38 pode formatar o quadro residual codificado espacialmente e os vetores de movimento codificados como parte de um fluxo de bits vídeo.26/69 movement. After the residual frame is spatially encoded and the entropy encoding module 30 has encoded the motion vectors, the flow output module 38 can format the spatially encoded residual frame and the encoded motion vectors as part of a video bit stream. .

[0060] A Figura 3 é um diagrama em blocos ilustrando detalhes exemplares do módulo de decodificação 12. O módulo de decodificação 12 pode compreender um módulo de decodificação de entropia 44, um módulo de dequantização 46, um módulo de transformada inversa 48, um módulo de reconstrução de pixel 50, um buffer de quadro 51, um módulo combinador de bloco 52, um módulo de controle de quadro 53, um módulo de armazenamento de quadro de referência 54, um módulo de geração de quadro reconstruído 56, e um módulo de geração de quadro preditivo 58. Alguns ou todos estes módulos podem compreender subconjuntos das instruções de software do módulo de decodificação 12. Alternativamente, alguns ou todos estes módulos podem compreender um hardware de propósito especial ou firmware. Em outra alternativa, estes módulos podem compreender instruções de software e hardware de propósito especial ou firmware.[0060] Figure 3 is a block diagram illustrating exemplary details of the decoding module 12. The decoding module 12 may comprise an entropy decoding module 44, a quantizing module 46, an inverse transform module 48, a module pixel reconstruction module 50, a frame buffer 51, a block combiner module 52, a frame control module 53, a reference frame storage module 54, a reconstructed frame generation module 56, and a generation of predictive board 58. Some or all of these modules may comprise subsets of the software instructions of the decoding module 12. Alternatively, some or all of these modules may comprise special-purpose hardware or firmware. Alternatively, these modules may comprise special-purpose software and hardware instructions or firmware.

[0061] Quando o módulo de decodificação 12 recebe um fluxo de bits que contém um quadro de vídeo, o módulo de decodificação de entropia 44 pode aplicar um esquema de decodificação de entropia para as matrizes de coeficientes quantizados no quadro de vídeo. O fluxo de bits pode incluir um valor que indica ao módulo de decodificação de entropia 44 qual esquema de decodificação de entropia aplicar às matrizes de coeficientes quantizados no fluxo de bits. Além disso, o módulo de decodificação de entropia 44 pode aplicar os mesmos ou um esquema diferente[0061] When the decoding module 12 receives a bit stream containing a video frame, the entropy decoding module 44 can apply an entropy decoding scheme to the matrices of quantized coefficients in the video frame. The bit stream can include a value that tells entropy decoding module 44 which entropy decoding scheme to apply to the matrices of quantized coefficients in the bit stream. In addition, entropy decoding module 44 can apply the same or a different scheme

Petição 870180133578, de 24/09/2018, pág. 33/169Petition 870180133578, of 9/24/2018, p. 33/169

27/69 de decodificação de entropia para decodificar os vetores de movimento do quadro de video.27/69 entropy decoding to decode the motion vectors of the video frame.

[0062] Após o módulo de decodificação de entropia 44 aplicar o esquema de decodificação de entropia às matrizes de coeficientes quantizados no arquivo de video, um módulo de dequantização 46 pode dequantizar os coeficientes em cada uma das matrizes de coeficientes quantizados. Dependendo do padrão de codificação, o módulo de dequantização 46 pode dequantizar os coeficientes em uma variedade de formas. Por exemplo, de acordo com o padrão MPEG-4 parte 2, o módulo de dequantização 4 6 pode usar as duas matrizes de quantização listadas acima em duas maneiras diferentes. Primeiramente, o módulo de dequantização 46 pode usar estas matrizes de quantização para realizar a dequantização de estilo H.263. Na dequantização de estilo H.263, o módulo de dequantização 46 obtém coeficientes reconstruídos F[v][u] dos valores quantizados QF[v][u] como a seguir:[0062] After the entropy decoding module 44 applies the entropy decoding scheme to the matrices of quantized coefficients in the video file, a quantization module 46 can quantize the coefficients in each of the matrices of quantized coefficients. Depending on the coding standard, the quantization module 46 can quantify the coefficients in a variety of ways. For example, according to the MPEG-4 part 2 standard, the quantization module 466 can use the two quantization matrices listed above in two different ways. First, the quantization module 46 can use these quantization matrices to perform H.263-style quantization. In H.263 style dequantization, the dequantization module 46 obtains reconstructed coefficients F [v] [u] from the quantized values QF [v] [u] as follows:

|F[v][«]| • (2 x |QF[v] [m]| +1) x escala_ quantizadcr, se QF[v] [«] 0, escala_ quantizadcr é impar (2 x |QF[v] [m]| +1) x escala_ quantizadcr -1, se QF[v] [«] 0, escala_ quantizadcr é par| F [v] [«] | • (2 x | QF [v] [m] | +1) x scale_ quantized, if QF [v] [«] 0, scale_ quantized is odd (2 x | QF [v] [m] | +1) x scalar_ quantized -1, if QF [v] [«] 0, scaled_ quantized is even

F[v] [u] : F[v] [u]= Sinal(QF[v] [u])x|F[v] [u] | , que envolve apenas uma multiplicação pelo escala_quantizador, eF [v] [u]: F [v] [u] = Sign (QF [v] [u]) x | F [v] [u] | , which only involves a multiplication by the scale_quantizer, and

Segundo, o módulo de dequantização 46 pode usar estas matrizes de quantização para realizar dequantização de estilo MPEG-1/2. Na dequantização de estilo MPEG-1/2, o módulo de dequantização usa matrizes de ponderação adicionais W[w] [v] [u] onde w indica qual matriz de ponderação está sendo usada:Second, the quantization module 46 can use these quantization matrices to perform MPEG-1/2 style quantization. In MPEG-1/2 style dequantization, the dequantization module uses additional weighting matrices W [w] [v] [u] where w indicates which weighting matrix is being used:

0, se QF[v][u] = 0 ((2xQF[v][u] + k)xW[w][v][u]xescala_quantizad0) /16, se QF[v][u] Φ 0 |F[v]M| =0, if QF [v] [u] = 0 ((2xQF [v] [u] + k) xW [w] [v] [u] xescala_quantizad0) / 16, if QF [v] [u] Φ 0 | F [v] M | =

Petição 870180133578, de 24/09/2018, pág. 34/169Petition 870180133578, of 9/24/2018, p. 34/169

28/69 onde :28/69 where:

JO intra blocos [5z'na(0F[v][M]) não-intra blocos [0063] Conforme descrito em detalhe abaixo, o módulo de transformada inversa 48 escalona cada um dos coeficientes dequantizados por fatores de escalonamento específicos e adiciona um termo de polarização de ponto médio ao coeficiente DC da matriz resultante de coeficientes escalonados. O coeficiente DC é o coeficiente na posição (0,0) da matriz de coeficientes escalonados. A seguir, o módulo de transformada inversa 48 usa aplicações repetidas de uma transformada unidimensional de ponto fixo para transformar a matriz de coeficientes escalonados em uma matriz de coeficientes transformados. Após transformar a matriz de coeficientes escalonados na matriz de coeficientes transformados, o módulo de transformada inversa 48 desloca à direita cada coeficiente transformado na matriz de coeficientes transformados a fim de produzir uma matriz de coeficientes ajustados. Cada coeficiente ajustado na matriz de coeficientes ajustados aproxima um valor correspondente em uma matriz de valores que seria produzida ao aplicar uma IDCT bidimensional ideal à matriz de coeficientes codificados. Além disso, o módulo de transformada inversa 48 pode cortar cada um dos coeficientes ajustados na matriz de coeficientes ajustados a fim de produzir uma matriz de coeficientes de corte. Os coeficientes de corte têm valores compreendidos em faixas apropriadas para o formato de valor de componente de pixel resultante. Por exemplo, os coeficientes de corte podem ter valores que estão compreendidos na faixa [-256, 255]. Após o módulo de transformada inversa 48 cortar os coeficientesOJ intra blocks [5z'na (0F [v] [M]) non-intra blocks [0063] As described in detail below, the inverse transform module 48 scales each of the coefficients quantified by specific scaling factors and adds a term from midpoint polarization to the DC coefficient of the matrix resulting from staggered coefficients. The DC coefficient is the coefficient at position (0.0) of the staggered coefficient matrix. Next, the inverse transform module 48 uses repeated applications of a one-dimensional fixed-point transform to transform the staggered coefficient matrix into a transformed coefficient matrix. After transforming the staggered coefficient matrix into the transformed coefficient matrix, the inverse transform module 48 shifts each transformed coefficient to the right into the transformed coefficient matrix in order to produce an adjusted coefficient matrix. Each adjusted coefficient in the adjusted coefficient matrix approximates a corresponding value in an array of values that would be produced when applying an ideal two-dimensional IDCT to the coded coefficient matrix. In addition, the inverse transform module 48 can cut each of the adjusted coefficients in the adjusted coefficient matrix in order to produce a matrix of cut coefficients. The coefficients of cut have values comprised in ranges appropriate for the resulting pixel component value format. For example, the coefficients of cut can have values that are included in the range [-256, 255]. After the reverse transform module 48 cuts the coefficients

Petição 870180133578, de 24/09/2018, pág. 35/169Petition 870180133578, of 9/24/2018, p. 35/169

29/69 ajustados, os valores de corte resultantes são valores de componentes de pixel.29/69 adjusted, the resulting cut-off values are pixel component values.

[0064] Após o módulo de transformada inversa 48 emitir uma matriz de valores de componentes de pixel, o módulo de reconstrução de pixel 50 pode gerar uma matriz de pixels ao combinar a matriz de valores de componentes de pixel com as matrizes de valores de componentes de pixel associados com as posições equivalentes dentro de um quadro de video. Por exemplo, o módulo de reconstrução de pixel 50 pode receber uma matriz de valores de componentes de pixel Y, uma matriz de valores de componentes de pixel Cb, e uma matriz de valores de componentes de pixel Cr provenientes do módulo de transformada inversa 48. Cada uma destas três matrizes pode incluir componentes de pixel para um único bloco 8x8 de pixels. Cada um dos pixels pode incluir um valor de componente de pixel Y, um valor de componente de pixel Cb, e um valor de componente de pixel Cr. Após gerar a matriz de pixels, o módulo de reconstrução de pixel 50 pode prover o bloco de pixels ao módulo combinador de bloco 52 .[0064] After the inverse transform module 48 emits an array of pixel component values, the pixel reconstruction module 50 can generate an array of pixels by combining the array of pixel component values with the array of component values pixel values associated with equivalent positions within a video frame. For example, the pixel reconstruction module 50 may receive an array of pixel component values Y, an array of pixel component values Cb, and an array of pixel component values Cr from the reverse transform module 48. Each of these three arrays can include pixel components for a single 8x8 pixel block. Each of the pixels can include a pixel component value Y, a pixel component value Cb, and a pixel component value Cr. After generating the pixel array, the pixel reconstruction module 50 can provide the pixel block to the block combiner module 52.

[0065] Quando o módulo combinador de bloco 52 recebe um bloco de pixels, o módulo combinador de bloco 52 pode armazenar o bloco de pixels até que o módulo combinador de bloco 52 receba algum ou todos os blocos de pixels em um quadro de video. Após receber um ou mais dos blocos de pixels, o módulo combinador de bloco 52 pode combinar os blocos de pixels em um quadro de video e pode emitir o quadro de video ao buffer de quadro 51. O quadro de video pode ser armazenado no buffer de quadro 51 até que este seja exibido pela unidade de apresentação de midia 14. Além disso, o módulo combinador de bloco 52 pode emitir o quadro de video a um módulo de armazenamento de quadro 54. Os quadros de video no módulo de armazenamento de quadro 54[0065] When the block combiner module 52 receives a pixel block, the block combiner module 52 can store the pixel block until the block combiner module 52 receives some or all of the pixel blocks in a video frame. After receiving one or more of the pixel blocks, the block combiner module 52 can combine the pixel blocks in a video frame and can output the video frame to frame buffer 51. The video frame can be stored in the frame 51 until it is displayed by the media display unit 14. In addition, the block combiner module 52 can output the video frame to a frame storage module 54. The video frames in the frame storage module 54

Petição 870180133578, de 24/09/2018, pág. 36/169Petition 870180133578, of 9/24/2018, p. 36/169

30/69 podem ser usados como quadros de referência para a reconstrução de quadros preditivos e bi-preditivos. Além disso, os quadros de vídeo no módulo de armazenamento de quadro 54 podem ser quadros residuais que são usados na reconstrução de quadros preditivos e bi-preditivos.30/69 can be used as frames of reference for the reconstruction of predictive and bi-predictive frames. In addition, the video frames in the frame storage module 54 can be residual frames that are used in the reconstruction of predictive and bi-predictive frames.

[0066] A fim de reconstruir um quadro preditivo ou bi-preditivo, o módulo de decodificação 12 inclui o módulo de geração de quadro reconstruído 56. O módulo de geração de quadro reconstruído 56 recebe os vetores de movimento decodificados do módulo de decodificação de entropia 44. Além disso, o módulo de geração de quadro reconstruído 56 recupera os quadros de referência do quadro atual do módulo de armazenamento de quadro 54. O módulo de geração de quadro reconstruído 56 então move os macroblocos de suas posições nos quadros de referência nas posições indicadas pelos vetores de movimento. Um quadro reconstruído resulta do movimento dos macroblocos nesta maneira. Após o módulo de geração de quadro reconstruído 56 gerar o quadro reconstruído, o módulo de geração de quadro reconstruído 56 provê o quadro reconstruído ao módulo de geração de quadro preditivo 58.[0066] In order to reconstruct a predictive or bi-predictive frame, the decoding module 12 includes the reconstructed frame generation module 56. The reconstructed frame generation module 56 receives the decoded motion vectors from the entropy decoding module 44. In addition, the reconstructed frame generation module 56 retrieves the reference frames from the current frame of the frame storage module 54. The reconstructed frame generation module 56 then moves the macroblocks from their positions in the reference frames to the positions indicated by the motion vectors. A reconstructed picture results from the movement of the macroblocks in this way. After the reconstructed board generation module 56 generates the reconstructed board, the reconstructed board generation module 56 provides the reconstructed board to the predictive board generation module 58.

[0067] Quando o módulo de geração de quadro preditivo 58 recebe um quadro temporário, o módulo de geração de quadro preditivo 58 pode recuperar do módulo de armazenamento de quadro 54 um quadro residual para o quadro atual. Após recuperar o quadro residual, o módulo de geração de quadro preditivo 58 pode adicionar valores de componentes de cor correspondentes em cada pixel do quadro residual e do quadro reconstruído. Um quadro de vídeo reconstruído resulta desta adição. Em seguida, o módulo de geração de quadro preditivo 58 pode emitir este quadro reconstruído ao buffer de quadro 51 para eventual exibição na unidade de apresentação de mídia 14.[0067] When the predictive board generation module 58 receives a temporary frame, the predictive board generation module 58 can retrieve a residual frame for the current frame from the frame storage module 54. After recovering the residual frame, the predictive frame generation module 58 can add corresponding color component values to each pixel of the residual frame and the reconstructed frame. A reconstructed video frame results from this addition. Then, the predictive frame generation module 58 can send this reconstructed frame to frame buffer 51 for eventual display on the media presentation unit 14.

Petição 870180133578, de 24/09/2018, pág. 37/169Petition 870180133578, of 9/24/2018, p. 37/169

31/69 [0068] A Figura 4 é um fluxograma ilustrando uma operação exemplar do módulo de codificação 8. Embora a operação descrita na Figura 4 seja descrita na forma seqüencial, deve-se notar que a operação pode ser executada de forma encadeada.31/69 [0068] Figure 4 is a flowchart illustrating an exemplary operation of the coding module 8. Although the operation described in Figure 4 is described in sequential form, it should be noted that the operation can be performed in a chained manner.

[0069] Inicialmente, o módulo de codificação 8 recebe uma seqüência de quadros de vídeo não-codifiçados 60. Por exemplo, o módulo de codificação 8 pode receber uma seqüência de quadros não-codifiçados sob a forma de conjuntos de pixels da fonte de mídia 4. Quando o módulo de codificação 8 recebe a seqüência de quadros nãocodif içados, o módulo de controle de quadro 20 no módulo de codificação 8 pode determinar se um quadro atual na seqüência de quadros não-codifiçados deve ser codificado como um quadro-i ou como um quadro preditivo ou bipreditivo 62.[0069] Initially, the encoding module 8 receives a sequence of non-encoded video frames 60. For example, the encoding module 8 can receive a sequence of non-encoded frames in the form of pixel sets from the media source 4. When the encoding module 8 receives the sequence of non-encrypted frames, the frame control module 20 in the encoding module 8 can determine whether a current frame in the sequence of unencrypted frames should be encoded as an i-frame or as a predictive or bipredictive framework 62.

[0070] Se o módulo de controle de quadro 20 determina que o quadro atual deve ser codificado como um quadro-i, o módulo divisor de bloco 22 no módulo de codificação 8 pode dividir o quadro atual em blocos de pixels 64. Por exemplo, o módulo de codificação 8 pode dividir o quadro atual em blocos 2x2, 4x4, ou 8x8 de pixels.[0070] If frame control module 20 determines that the current frame should be encoded as an i-frame, block divider module 22 in encoding module 8 can divide the current frame into 64 pixel blocks. For example, the coding module 8 can divide the current frame into 2x2, 4x4, or 8x8 pixel blocks.

[0071] Após dividir o quadro atual em blocos de pixels, o módulo de extração de componente 24 pode separar os valores de componentes de pixel em cada um dos blocos de pixels 66. Em conseqüência, pode haver três blocos de valores de componentes de pixel para cada bloco de pixels: um bloco de valores Y para representar o brilho dos pixels, um bloco de valores Cb para representar a crominância azul dos pixels, e um bloco de valores Cr para representar a crominância vermelha dos pixels.[0071] After dividing the current frame into pixel blocks, the component extraction module 24 can separate the pixel component values in each of the pixel blocks 66. As a result, there may be three blocks of pixel component values for each pixel block: a block of Y values to represent the brightness of the pixels, a block of Cb values to represent the blue chrominance of the pixels, and a block of Cr values to represent the red chrominance of the pixels.

Petição 870180133578, de 24/09/2018, pág. 38/169Petition 870180133578, of 9/24/2018, p. 38/169

32/69 [0072] O módulo de transformada direta 26 no módulo de codificação 8 pode então gerar uma matriz de coeficientes escalonados para cada uma das matrizes de valores de componentes de pixel 68. Os coeficientes nestas matrizes de coeficientes escalonados são aproximações de valores que seriam produzidos ao usar uma transformada de cosseno discreta direta bidimensional ideal nas respectivas matrizes das matrizes de valores de componentes de pixel.32/69 [0072] The direct transform module 26 in the coding module 8 can then generate a matrix of scaled coefficients for each of the matrix of pixel component values 68. The coefficients in these scaled coefficient matrices are approximations of values that would be produced by using an ideal two-dimensional direct discrete cosine transform in the respective matrices of the pixel component value matrices.

[0073] Após o módulo de transformada direta 26 gerar as matrizes de coeficientes escalonados para cada uma das matrizes de componentes de pixel, o módulo de quantização 28 no módulo de codificação 8 pode quantizar os coeficientes em cada uma das matrizes de coeficientes escalonados 70. Uma vez que o módulo de quantização 2 8 quantizou os coeficientes em cada matriz de coeficientes escalonados, o módulo de codificação de entropia 30 pode realizar um processo de codificação de entropia em cada uma das matrizes de coeficientes quantizados 72. Por exemplo, o módulo de codificação 8 pode aplicar um esquema de codificação Huffman ou um esquema de codificação aritmética a cada matriz dos coeficientes quantizados. O processo de codificação de entropia também comprimiu os dados. Entretanto, os processos de codificação de entropia não conduzem à perda de informação. Após realizar o processo de codificação de entropia em cada matriz de coeficientes quantizados, o módulo de saída de fluxo 38 no módulo de codificação 8 pode adicionar as matrizes codificadas de coeficientes quantizados a um fluxo de bits para a seqüência de quadros de vídeo 74. Após o módulo de saída de fluxo 38 adicionar as matrizes codificadas ao fluxo de bits, o módulo de controle de quadro 20 pode determinar se o quadro atual era o último quadro de vídeo da seqüência de quadros 76. Se o quadro atual é o último quadro da[0073] After the direct transform module 26 generates the staggered coefficient matrices for each of the pixel component matrices, the quantization module 28 in the coding module 8 can quantize the coefficients in each of the staggered coefficient matrices 70. Since the quantization module 28 has quantized the coefficients in each staggered coefficient matrix, the entropy coding module 30 can perform an entropy coding process in each of the quantized coefficient matrices 72. For example, the coding 8 can apply a Huffman coding scheme or an arithmetic coding scheme to each matrix of the quantized coefficients. The entropy coding process also compressed the data. However, entropy coding processes do not lead to loss of information. After carrying out the entropy encoding process on each matrix of quantized coefficients, the flow output module 38 in the encoding module 8 can add the encoded matrices of quantized coefficients to a bit stream for the video frame sequence 74. After the stream output module 38 adds the encoded arrays to the bit stream, the frame control module 20 can determine whether the current frame was the last video frame in the frame sequence 76. if the current frame is the last frame of the

Petição 870180133578, de 24/09/2018, pág. 39/169Petition 870180133578, of 9/24/2018, p. 39/169

33/69 seqüência de quadros (SIM de 76), o módulo de codificação 8 terminou a codificação da seqüência de quadros 78. Por outro lado, se o quadro atual não é o último quadro da seqüência de quadros (NÃO de 76), o módulo de codificação 8 pode realizar o retorno de ciclo e determinar se um novo quadro atual deve ser codificado como um quadro-i 62.33/69 frame sequence (YES 76), encoding module 8 has finished encoding frame sequence 78. On the other hand, if the current frame is not the last frame in the frame sequence (NO 76), the coding module 8 can perform cycle feedback and determine whether a new current frame should be encoded as an i-frame 62.

[0074] Se o quadro atual não deve ser codificado como um quadro-i (NÃO de 62), o módulo de estimação de movimento 32 no módulo de codificação 8 pode dividir o quadro atual em um conjunto de macroblocos 80. Em seguida, o módulo de estimação do movimento 32 pode tentar identificar um macrobloco de origem em um ou mais quadros de referência para cada um dos macroblocos no quadro atual 82. O módulo de estimação de movimento 32 pode então calcular um vetor de movimento para cada um dos macroblocos no quadro atual para que o módulo de estimação de movimento 32 fosse capaz de identificar um macrobloco de origem 84. Após o módulo de estimação de movimento 32 calcular os vetores de movimento, o módulo de geração de quadro reconstruído 34 usa os vetores de movimento para gerar um quadro reconstruído ao mover os macroblocos identificados nos quadros de referência nas posições indicadas pelos vetores de movimento 86. O módulo de geração de quadro residual 36 pode então gerar um quadro residual para o quadro atual ao subtrair os valores de componentes de pixel no quadro reconstruído a partir de valores de componentes de pixel correspondentes no quadro atual 88. Após o módulo de geração de quadro residual 36 gerar o quadro residual, o módulo de codificação de entropia 30 pode usar um esquema de codificação de entropia para codificar os vetores de movimento para o quadro atual 90. Além disso, a codificação espacial pode ser aplicada ao quadro residual ao aplicar as etapas 66 a 74 ao quadro residual.[0074] If the current frame is not to be coded as an i-frame (NOT 62), motion estimation module 32 in coding module 8 can divide the current frame into a set of macroblocks 80. Then, the motion estimation module 32 can attempt to identify a source macroblock in one or more reference frames for each of the macroblocks in the current frame 82. motion estimation module 32 can then calculate a motion vector for each of the macroblocks in the current frame so that motion estimation module 32 would be able to identify a macroblock of origin 84. After motion estimation module 32 calculates motion vectors, the reconstructed frame generation module 34 uses motion vectors to generate a reconstructed frame by moving the macroblocks identified in the reference frames in the positions indicated by the motion vectors 86. The residual frame generation module 36 can then generate a residual frame for to the current frame by subtracting the pixel component values in the reconstructed frame from corresponding pixel component values in the current frame 88. After the residual frame generation module 36 generates the residual frame, the entropy coding module 30 can use an entropy coding scheme to encode the motion vectors for the current frame 90. In addition, spatial coding can be applied to the residual frame by applying steps 66 to 74 to the residual frame.

Petição 870180133578, de 24/09/2018, pág. 40/169Petition 870180133578, of 9/24/2018, p. 40/169

34/69 [0075] A Figura 5 é um fluxograma ilustrando um funcionamento exemplar do módulo de decodificação 12. Embora a operação descrita na Figura 5 seja descrita na forma seqüencial, deve-se notar que a operação pode ser realizada de forma encadeada.34/69 [0075] Figure 5 is a flowchart illustrating an exemplary operation of the decoding module 12. Although the operation described in Figure 5 is described in sequential form, it should be noted that the operation can be performed in a chained manner.

[0076] Inicialmente, o módulo de decodificação 12 recebe um quadro de vídeo codificado 100. Após receber o quadro de vídeo codificado, o módulo de decodificação de entropia 44 no módulo de decodificação 12 pode realizar um processo de decodificação de entropia em blocos de dados dentro do quadro codificado 102. O módulo de decodificação de entropia 44 pode realizar um processo de decodificação de entropia que é equivalente ao processo de codificação de entropia usado para codificar o quadro. Por exemplo, se o módulo de codificação 8 usa a codificação Huffman para codificar o quadro, o módulo de decodificação de entropia 44 usa decodificação Huffman para decodificar o quadro. Em conseqüência da aplicação do processo de decodificação de entropia para cada bloco de dados no quadro, o módulo de decodificação de entropia 44 produziu um conjunto de matrizes de coeficientes quantizados.[0076] Initially, the decoding module 12 receives an encoded video frame 100. After receiving the encoded video frame, the entropy decoding module 44 in the decoding module 12 can perform an entropy decoding process on data blocks within the encoded frame 102. The entropy decoding module 44 can perform an entropy decoding process that is equivalent to the entropy encoding process used to encode the frame. For example, if encoding module 8 uses Huffman encoding to encode the frame, entropy decoding module 44 uses Huffman decoding to decode the frame. As a result of the application of the entropy decoding process for each data block in the table, the entropy decoding module 44 produced a set of quantized coefficient matrices.

[0077] A seguir, o módulo de dequantização 46 no módulo de decodificação 12 pode dequantizar os coeficientes em cada uma das matrizes de coeficientes quantizados 104. Após dequantizar cada coeficiente nas matrizes de coeficientes quantizados, o módulo de transformada inversa 48 no módulo de decodificação 12 gera matrizes de valores de componentes de pixel 106. Os valores de componentes de pixel em uma matriz de valores de componentes de pixel são aproximações de valores correspondentes que seriam produzidos ao transformar uma das matrizes dos coeficientes quantizados usando uma transformada de cosseno discreta inversa bidimensional ideal.[0077] Next, the quantization module 46 in the decoding module 12 can quantize the coefficients in each of the matrices of quantized coefficients 104. After quantifying each coefficient in the matrices of quantized coefficients, the inverse transform module 48 in the decoding module 12 generates matrices of pixel component values 106. The pixel component values in a matrix of pixel component values are approximations of corresponding values that would be produced when transforming one of the matrices of the quantized coefficients using a two-dimensional inverse discrete cosine transform ideal.

Petição 870180133578, de 24/09/2018, pág. 41/169Petition 870180133578, of 9/24/2018, p. 41/169

35/69 [0078] Quando o módulo de transformada inversa 48 computou uma matriz de valores de componentes de pixel para cada uma das matrizes de coeficientes, o módulo de reconstrução de pixel 50 no módulo de decodificação 12 pode combinar matrizes apropriadas de valores de componentes de pixel a fim de criar blocos de pixels 108. Por exemplo, o módulo de decodificação 12 pode combinar um bloco de valores de Y com um bloco associado de valores de Cr e um bloco associado de valores de Cb a fim de criar um bloco de pixels de YCrCb. Após o módulo de reconstrução de pixel 50 criar os blocos de pixels, o módulo combinador de bloco 52 pode recombinar os blocos de pixels em um quadro de vídeo 110.35/69 [0078] When the inverse transform module 48 computed an array of pixel component values for each of the coefficient arrays, the pixel reconstruction module 50 in decoding module 12 can combine appropriate arrays of component values pixel to create 108 pixel blocks. For example, decoding module 12 can combine a block of Y values with an associated block of Cr values and an associated block of Cb values to create a block of Y values. YCrCb pixels. After the pixel reconstruction module 50 creates the pixel blocks, the block combiner module 52 can recombine the pixel blocks in a 110 video frame.

[0079] A seguir, o módulo de controle de quadro 53 no módulo de decodificação 12 pode determinar se o quadro atual é um quadro-i (112) . Se o quadro atual é um quadro-i (SIM de 112), o módulo combinador de bloco 52 pode emitir o quadro de vídeo ao buffer de quadro 51, no bloco 114. Por outro lado, se o quadro atual não é um quadro-i (isto é, o quadro atual é um quadro preditivo ou bi-preditivo) (NÃO de 112), o módulo de decodif icação de entropia 44 usa um esquema de decodificação de entropia para decodificar os vetores de movimento do quadro atual 116. Em seguida, o módulo de geração de quadro reconstruído 56 usa os vetores de movimento decodificados e um ou mais quadros de referência no módulo de armazenamento de quadro 54 para gerar um quadro reconstruído 118. O módulo de geração de quadro preditivo 58 pode então usar o quadro reconstruído e o quadro gerado pelo módulo combinador de bloco 52 para gerar um quadro reconstruído 120.[0079] Next, the frame control module 53 in the decoding module 12 can determine whether the current frame is an i-frame (112). If the current frame is an i-frame (SIM 112), the block combiner module 52 can send the video frame to frame buffer 51 in block 114. On the other hand, if the current frame is not a frame i (ie, the current frame is a predictive or bi-predictive frame) (NOT 112), entropy decoding module 44 uses an entropy decoding scheme to decode the motion vectors of the current frame 116. In The reconstructed frame generation module 56 then uses the decoded motion vectors and one or more reference frames in the frame storage module 54 to generate a reconstructed frame 118. The predictive frame generation module 58 can then use the frame reconstructed and the frame generated by the block combiner module 52 to generate a reconstructed frame 120.

[0080] A Figura 6 é um diagrama em blocos ilustrando detalhes exemplares do módulo de transformada inversa 48. Como ilustrado no exemplo da Figura 6, o módulo[0080] Figure 6 is a block diagram illustrating exemplary details of the reverse transform module 48. As illustrated in the example in Figure 6, the module

Petição 870180133578, de 24/09/2018, pág. 42/169Petition 870180133578, of 9/24/2018, p. 42/169

36/69 de transformada inversa 48 pode compreender um módulo de entrada 14 0. O módulo de entrada 14 0 pode receber uma matriz de coeficientes do módulo de dequantização 46. Por exemplo, o módulo de entrada 140 pode receber um ponteiro que indica uma localização em um módulo de memória de dispositivo 2 que armazena a matriz de coeficientes. Alternativamente, o módulo de entrada 140 pode incluir estruturas de dados internos que armazenam a matriz de coeficientes.36/69 of reverse transform 48 may comprise an input module 14 0. The input module 140 may receive a coefficient matrix from the quantization module 46. For example, input module 140 may receive a pointer indicating a location in a device memory module 2 that stores the coefficient matrix. Alternatively, input module 140 may include internal data structures that store the coefficient matrix.

[0081] Quando o módulo de entrada 140 recebe uma matriz de coeficientes, o módulo de entrada 140 pode prover a matriz de coeficientes a um módulo de escalonamento 142 no módulo de transformada inversa 48. O módulo de escalonamento 142 pode realizar operações que qeram valores que aproximam os coeficientes de escalonamento na matriz de coeficientes por fatores de escalonamento em posições equivalentes em uma matriz de fatores de escalonamento. Por exemplo, o módulo de escalonamento 142 pode realizar operações de multiplicação para qerar valores que aproximam os coeficientes de escalonamento na matriz de coeficientes por fatores de escalonamento em posições equivalentes em uma matriz de fatores de escalonamento. Em outro exemplo, o módulo de escalonamento 142 pode realizar uma ou mais operações de adição e deslocamento. Cada um desses fatores de escalonamento pode ser um valor de número inteiro de 8 bits. Quando cada um dos fatores de escalonamento é um número inteiro de 8 bits, a faixa dinâmica de valores produzidos durante a transformada é reduzida.[0081] When the input module 140 receives a coefficient matrix, the input module 140 can provide the coefficient matrix to a scaling module 142 in the reverse transform module 48. The scaling module 142 can perform operations that require values that approximate the scaling coefficients in the matrix of coefficients by scaling factors in equivalent positions in a matrix of scaling factors. For example, the scaling module 142 can perform multiplication operations to obtain values that approximate the scaling coefficients in the coefficient matrix by scaling factors in equivalent positions in a scaling factor matrix. In another example, the scheduling module 142 can perform one or more addition and displacement operations. Each of these scaling factors can be an 8-bit integer value. When each of the scaling factors is an 8-bit integer, the dynamic range of values produced during the transform is reduced.

[0082] Após o módulo de escalonamento 142 qerar a matriz de coeficientes escalonados, o módulo de polarização de coeficiente 144 pode qerar uma matriz de coeficientes polarizados ao adicionar um valor de polarização de ponto médio ao coeficiente DC da matriz de coeficientes[0082] After the scaling module 142 has generated the scaled coefficient matrix, the coefficient polarization module 144 can have a polarized coefficient matrix by adding a midpoint bias value to the DC coefficient of the coefficient matrix

Petição 870180133578, de 24/09/2018, pág. 43/169Petition 870180133578, of 9/24/2018, p. 43/169

37/69 escalonados. Como discutido acima, o coeficiente DC da matriz é tipicamente o coeficiente na posição esquerda superior da matriz. Geralmente, o coeficiente DC representa um valor médio dos outros coeficientes na matriz.37/69 staggered. As discussed above, the DC coefficient of the matrix is typically the coefficient in the upper left position of the matrix. Generally, the DC coefficient represents an average value of the other coefficients in the matrix.

[0083] A fim de adicionar um valor de polarização de sinal adaptativo ao coeficiente DC em um processador de 16 bits, o módulo de polarização de coeficiente 144 pode usar a fórmula a seguir:[0083] In order to add an adaptive signal bias value to the DC coefficient on a 16-bit processor, the coefficient bias module 144 can use the following formula:

coeficiente DC — coeficiente DC + (l « (P+2)).DC coefficient - DC + coefficient (l «(P + 2)).

Nesta fórmula, o termo (l«(P + 2)) é adicionado para prover a polarização de ponto médio. P é uma constante referindo ao número de bits de mantissa de ponto fixo (isto é, bits à direita do ponto base) usados em uma transformada aplicada por um módulo de transformada inversa de vetor 14 6. O número 2 é adicionado a P porque o módulo de deslocamento para a direita 148 pode deslocar para a direita todos os coeficientes por (P + 3), onde o número '3' vem dos bits de precisão adicionados ao realizar a transformada. Para elaborar este ponto, se um número x é gerado pelo deslocamento a esquerda de 1 por (P + 2) e um número z é gerado pelo deslocamento a direita de x porIn this formula, the term (l «(P + 2)) is added to provide the midpoint bias. P is a constant referring to the number of bits of the fixed point mantissa (that is, bits to the right of the base point) used in a transform applied by a 14 6 vector inverse transform module. The number 2 is added to P because the right shift module 148 can shift all coefficients by (P + 3) to the right, where the number '3' comes from the precision bits added when performing the transform. To elaborate this point, if a number x is generated by the displacement to the left of 1 by (P + 2 ) and a number z is generated by displacement to the right of x by

(P+3), a seguir z = l/2. (P + 3), then z = 1/2. (Contrário (Contrary ao indicado, to the nominee, 2p+2/2p+3 =2°/21 =1/2 ) . Assim,2 p + 2/2 p + 3 = 2 ° / 2 1 = 1/2). Like this, adicionar add (l«(P+2)) (l «(P + 2)) ao to coeficiente DC é equivalente DC coefficient is equivalent a adicionar to add (l« (P+3))/2 (l «(P + 3)) / 2 ao to coeficiente DC. DC coefficient. [0084] Após o [0084] After the módulo de module of polarização polarization de in

coeficiente 144 gerar a matriz de coeficientes polarizados, o módulo de transformada inversa de vetor 146 pode gerar uma matriz de valores intermediários mediante aplicação de uma transformada unidirecional escalonada de ponto fixo a cada vetor linha da matriz de coeficientes polarizados. Acoefficient 144 generate the matrix of polarized coefficients, the vector inverse transform module 146 can generate a matrix of intermediate values by applying a scaled one-way fixed-point transform to each line vector of the matrix of polarized coefficients. THE

Petição 870180133578, de 24/09/2018, pág. 44/169Petition 870180133578, of 9/24/2018, p. 44/169

38/69 seguir, o módulo de transformada inversa de vetor 146 pode computar uma matriz de coeficientes transformados mediante aplicação da transformada unidimensional escalonada de ponto fixo a cada vetor coluna da matriz de valores intermediários. Uma operação exemplar para aplicar a transformada unidimensional de escalonamento de ponto fixo a um vetor de coeficiente escalonado é apresentada na Figura 10B abaixo.38/69 Next, the vector inverse transform module 146 can compute a matrix of transformed coefficients by applying the fixed point scaled one-dimensional transform to each column vector of the matrix of intermediate values. An exemplary operation to apply the one-dimensional fixed point scaling transform to a scaled coefficient vector is shown in Figure 10B below.

[0085] Após o módulo de transformada inversa de vetor 146 gerar a matriz de coeficientes transformados, o módulo de deslocamento à direita 148 pode gerar uma matriz de coeficientes ajustados ao deslocar à direita de cada um dos coeficientes na matriz de coeficientes transformados por um número de posições igual ao número de bits adicionados durante aplicação da transformada e durante escalonamento. Por exemplo, se aplicar os resultados de transformada em 3 bits adicionais e escalonar os coeficientes acrescenta 10 bits adicionais, o módulo de deslocamento à direita 108 pode deslocar à direita cada um dos coeficientes em treze (3 + 10) posições.[0085] After the vector inverse transform module 146 generates the matrix of transformed coefficients, the right shift module 148 can generate an adjusted coefficient matrix by shifting to the right of each of the coefficients in the coefficient matrix transformed by a number of positions equal to the number of bits added during application of the transform and during scaling. For example, if you apply the transform results to an additional 3 bits and scale the coefficients adds 10 additional bits, the right shift module 108 can shift each of the coefficients to the right by thirteen (3 + 10) positions.

[0086] Após o módulo de deslocamento à direita 148 gerar a matriz de coeficientes ajustados, um módulo de corte 150 pode gerar uma matriz de coeficientes de corte ao cortar os coeficientes na matriz de coeficientes ajustados a fim de restringir os coeficientes a uma faixa máxima permissível de valores de componentes de pixel. Por exemplo, um valor de componente de pixel típico pode variar de -256 a 255. Se a matriz de coeficientes ajustados incluísse um coeficiente igual a 270, o módulo de corte 150 restringiría esse coeficiente à faixa máxima permissível ao reduzir o coeficiente para 255. Após o módulo de corte 150 concluir o corte dos coeficientes, esses coeficientes podem representar valores de componentes de pixel. Quando o[0086] After the right shift module 148 generates the matrix of adjusted coefficients, a cutting module 150 can generate a matrix of coefficients by cutting the coefficients in the matrix of adjusted coefficients in order to restrict the coefficients to a maximum range allowable pixel component values. For example, a typical pixel component value can range from -256 to 255. If the adjusted coefficient matrix included a coefficient equal to 270, the cutting module 150 would restrict that coefficient to the maximum allowable range by reducing the coefficient to 255. After the cutting module 150 finishes cutting the coefficients, these coefficients can represent pixel component values. When the

Petição 870180133578, de 24/09/2018, pág. 45/169Petition 870180133578, of 9/24/2018, p. 45/169

39/69 módulo de corte 150 conclui o corte dos coeficientes na matriz, o módulo de corte 150 pode prover a matriz de coeficientes de corte a um módulo de saída 152.39/69 cutting module 150 completes the cutting of the coefficients in the matrix, the cutting module 150 can provide the matrix of cutting coefficients to an output module 152.

[0087] Quando o módulo de saída 152 recebe uma matriz de coeficientes de corte (os quais são agora valores de componentes de pixel), o módulo de saída 152 pode emitir a matriz de valores de componentes de pixel para o módulo de reconstrução de pixel 50.[0087] When output module 152 receives an array of cut-off coefficients (which are now pixel component values), output module 152 can output the array of pixel component values to the pixel reconstruction module 50.

[0088] A Figura 7 é um fluxograma ilustrando uma operação exemplar do módulo de transformada inversa 48. Inicialmente, o módulo de entrada 140 recebe uma matriz de coeficientes (170) . Quando o módulo de entrada 140 recebe a matriz de coeficientes, o módulo de escalonamento 142 pode escalonar cada valor na matriz de coeficientes (172) . Por exemplo, o módulo de escalonamento 142 pode realizar operações que multiplicam cada coeficiente na matriz de coeficientes por valores equivalentemente posicionados em uma matriz de fatores de escalonamento.[0088] Figure 7 is a flowchart illustrating an exemplary operation of the reverse transform module 48. Initially, the input module 140 receives an array of coefficients (170). When input module 140 receives the coefficient matrix, the scaling module 142 can scale each value in the coefficient matrix (172). For example, the scaling module 142 can perform operations that multiply each coefficient in the coefficient matrix by values equivalently positioned in a matrix of scaling factors.

[0089] Após escalonar cada coeficiente na matriz de coeficiente, o módulo de polarização de coeficiente 144 pode adicionar um valor de polarização de ponto médio ao coeficiente DC da matriz de coeficientes (174) . Após o módulo de polarização de coeficiente 144 adicionar o valor de polarização ao coeficiente DC da matriz, o módulo de transformada inversa de vetor 146 pode determinar se um contador de linhas é inferior a um contador máximo de linhas 176. Inicialmente, o contador de linhas pode ser ajustado para zero. O contador máximo de linhas pode ser um valor estático que é igual ao número de linhas na matriz de coeficientes. Por exemplo, se a matriz de coeficientes inclui oito linhas, o contador máximo de linhas é igual a oito.[0089] After scaling each coefficient in the coefficient matrix, the coefficient polarization module 144 can add a midpoint polarization value to the coefficient DC coefficient of the coefficient matrix (174). After the coefficient bias module 144 adds the bias value to the matrix's DC coefficient, the vector reverse transform module 146 can determine whether a line counter is less than a maximum line counter 176. Initially, the line counter can be set to zero. The maximum line counter can be a static value that is equal to the number of lines in the coefficient matrix. For example, if the coefficient matrix includes eight lines, the maximum line counter is equal to eight.

Petição 870180133578, de 24/09/2018, pág. 46/169Petition 870180133578, of 9/24/2018, p. 46/169

40/69 [0090] Se o contador de linhas for menor do que o contador máximo de linhas (SIM de 176), o módulo de transformada inversa de vetor 146 pode computar uma transformada unidimensional escalonada de ponto fixo em um vetor linha da matriz de coeficientes indicada pelo contador de linhas (178). Quando o módulo de transformada inversa de vetor 146 computa a transformada em um vetor linhas da matriz de coeficientes, o módulo de transformada inversa de vetor 146 pode substituir os coeficientes originais no vetor linha de coeficientes por um vetor de coeficientes intermediários. Após o módulo de transformada inversa de vetor 146 computar a transformada em um vetor linha da matriz de coeficientes, o módulo de transformada inversa de vetor 146 pode incrementar o contador de linhas (180) . O módulo de transformada inversa de vetor 146 pode então retornar e outra vez determinar se o contador de linha é menor do que o contador máximo de linha (176).40/69 [0090] If the line counter is smaller than the maximum line counter (YES 176), the vector inverse transform module 146 can compute a one-dimensional staggered fixed point transform into a line vector of the matrix of coefficients indicated by the line counter (178). When the vector inverse transform module 146 computes the transform into a line vector of the coefficient matrix, the vector inverse transform module 146 can replace the original coefficients in the line coefficient vector with a vector of intermediate coefficients. After the vector inverse transform module 146 computes the transform into a line vector of the coefficient matrix, the vector inverse transform module 146 can increment the line counter (180). The vector inverse transform module 146 can then return and again determine whether the line counter is less than the maximum line counter (176).

[0091] Se o contador de linha não for menor do que (isto é, for maior do que ou igual a) o contador máximo de linhas (NÃO de 176), o módulo de transformada inversa de vetor 146 pode determinar se um contador de coluna é menor do que um contador máximo de coluna (182) . Inicialmente, o contador de coluna pode ser ajustado para zero. O contador máximo de coluna pode ser um valor estático que é igual ao número de colunas na matriz de coeficientes. Por exemplo, se a matriz de coeficientes inclui oito colunas, o contador máximo de colunas é igual a oito.[0091] If the line counter is not less than (that is, greater than or equal to) the maximum line counter (NOT 176), the vector reverse transform module 146 can determine whether a line counter column is less than a maximum column counter (182). Initially, the column counter can be set to zero. The maximum column counter can be a static value that is equal to the number of columns in the coefficient matrix. For example, if the coefficient matrix includes eight columns, the maximum column counter is equal to eight.

[0092] Se o contador de coluna for inferior ao contador máximo de coluna (SIM de 182), o módulo de transformada inversa de vetor 146 pode computar uma transformada unidimensional em cada vetor coluna da matriz de coeficientes intermediários indicados pelo contador de[0092] If the column counter is less than the maximum column counter (SIM 182), the vector inverse transform module 146 can compute a one-dimensional transform in each column vector of the matrix of intermediate coefficients indicated by the counter

Petição 870180133578, de 24/09/2018, pág. 47/169Petition 870180133578, of 9/24/2018, p. 47/169

41/69 coluna (184) . Quando o módulo de transformada inversa 48 computa a transformada em um vetor coluna de coeficientes intermediários, o módulo de transformada inversa 48 substitui os coeficientes intermediários no vetor coluna por um vetor de coeficientes transformados.41/69 column (184). When the inverse transform module 48 computes the transform into a column vector of intermediate coefficients, the inverse transform module 48 replaces the intermediate coefficients in the column vector with a vector of transformed coefficients.

[0093] Após o módulo de transformada inversa de vetor 146 computar a transformada em um vetor coluna da matriz de coeficientes, o módulo de transformada inversa de vetor 146 pode incrementar o contador de coluna (186) . O módulo de transformada inversa de vetor 146 pode então retornar a outra vez determinar se o contador de coluna é menor do que o contador máximo de coluna (182) .[0093] After the vector inverse transform module 146 computes the transform into a column vector of the coefficient matrix, the vector inverse transform module 146 can increment the column counter (186). The vector inverse transform module 146 can then return again to determine whether the column counter is less than the maximum column counter (182).

[0094] Se o contador de coluna não for menor do que (isto é, for maior do que ou igual a) o contador máximo de coluna (NÃO de 182), o módulo de deslocamento à direita 148 pode deslocar à direita cada um dos coeficientes transformados na matriz (188) . Quando o módulo de deslocamento à direita 148 desloca à direita um coeficiente, o módulo de deslocamento à direita 148 pode deslocar o coeficiente para a direita por certo número de posições. O resultado do deslocamento à direita de cada um dos segundos coeficientes intermediários na matriz é uma matriz de valores ajustados. Após deslocar à direita o módulo 148 deslocou à direita cada um dos coeficientes transformados, o módulo de corte 150 pode cortar os a fim de garantir que os estejam dentro de uma faixa apropriada para valores de componentes de pixel (190). Por exemplo, o módulo de corte 150 pode cortar os coeficientes ajustados a fim de garantir que os coeficientes ajustados estejam dentro da faixa de -256 a 255. Quando o módulo de corte 150 conclui o corte dos coeficientes ajustados, o coeficientes ajustados coeficientes ajustados[0094] If the column counter is not less than (that is, greater than or equal to) the maximum column counter (NOT 182), the right shift module 148 can shift each of the coefficients transformed in the matrix (188). When the right shift module 148 shifts a coefficient to the right, the right shift module 148 can shift the coefficient to the right by a number of positions. The result of the shift to the right of each of the second intermediate coefficients in the matrix is an array of adjusted values. After shifting module 148 to the right shifted each transformed coefficient to the right, cutting module 150 can cut the ones to ensure that they are within an appropriate range for pixel component values (190). For example, the cutting module 150 can cut the adjusted coefficients to ensure that the adjusted coefficients are within the range of -256 to 255. When the cutting module 150 finishes cutting the adjusted coefficients, the adjusted coefficients adjusted

Petição 870180133578, de 24/09/2018, pág. 48/169Petition 870180133578, of 9/24/2018, p. 48/169

42/69 módulo de saída 152 pode emitir a matriz resultante de valores de componentes de pixel (192) .42/69 output module 152 can output the matrix resulting from pixel component values (192).

[0095] A Figura 8 é um diagrama de blocos ilustrando detalhes exemplares do módulo de transformada direta 26. Conforme ilustrado no exemplo da Figura 8, o módulo de transformada direta 26 compreende um módulo de entrada 210 que recebe uma matriz de valores de componentes de pixel a partir do módulo de extração de componentes 24. Quando o módulo de entrada 210 recebe uma matriz de valores compostos de pixel, o módulo de entrada 210 pode prover a matriz de valores de componentes de pixel a um módulo de deslocamento à esquerda 212. O módulo de deslocamento à esquerda 212 pode deslocar todos os valores de componentes de pixel na matriz de valores de componentes de pixel para a esquerda pelo número de bits de mantissa usados em valores que um módulo de transformada direta de vetor 214 utiliza enquanto realizando a transformada direta menos o número de bits de mantissa removido ao realizar a transformada direta. Por exemplo, se dez bits de mantissa forem usados em valores enquanto realizando a transformada direta e três bits de mantissa forem removidos ao realizar a transformada direta de cosseno discreto, o módulo de deslocamento à esquerda 212 pode deslocar os valores de componentes de pixel para a esquerda em sete posições. Em outra modalidade, se três bits de mantissa forem usados em valores enquanto realizando a transformada direta e três bits de mantissa forem removidos ao realizar a transformada direta, o módulo de deslocamento à esquerda 212 pode deslocar os valores de componentes de pixel para a esquerda em zero posição.[0095] Figure 8 is a block diagram illustrating exemplary details of the direct transform module 26. As illustrated in the example in Figure 8, the direct transform module 26 comprises an input module 210 that receives an array of component values from pixel from the component extraction module 24. When the input module 210 receives an array of composite pixel values, the input module 210 can provide the array of pixel component values to a left shift module 212. The left shift module 212 can shift all pixel component values in the pixel component value array to the left by the number of mantissa bits used in values that a vector direct transform module 214 uses while performing the transform. direct minus the number of mantissa bits removed when performing the direct transform. For example, if ten bits of mantissa are used in values while performing the direct transform and three bits of mantissa are removed when performing the direct discrete cosine transform, the left shift module 212 can shift the pixel component values to the left in seven positions. In another embodiment, if three mantissa bits are used in values while performing the direct transform and three mantissa bits are removed when performing the direct transform, the left shift module 212 can shift the pixel component values to the left by zero position.

[0096] Após o módulo de deslocamento à esquerda 212 deslocar os valores de componentes de pixel, o módulo de transformada direta de vetores 214 pode aplicar[0096] After the left shift module 212 shifts the pixel component values, the vector direct transform module 214 can apply

Petição 870180133578, de 24/09/2018, pág. 49/169Petition 870180133578, of 9/24/2018, p. 49/169

43/69 uma transformada direta a cada vetor coluna na matriz de valores de componentes de pixel a fim de produzir uma matriz de valores intermediários. A seguir, o módulo de transformada direta de vetor 214 pode aplicar a transformada direta a cada vetor linha na matriz de valores intermediários a fim de produzir uma matriz de coeficientes transformados. Quando o módulo de transformada direta de vetor 214 aplica a transformada direta a um vetor, o módulo de transformada direta de vetor 214 pode aplicar a transformada direta descrita na Figura 11, abaixo. Observar que a transformada descrita na Figura 11, abaixo, é um inverso da transformada descrita na Figura 10A.43/69 a direct transform to each column vector in the matrix of pixel component values in order to produce an array of intermediate values. Then, the vector direct transform module 214 can apply the direct transform to each line vector in the matrix of intermediate values in order to produce a matrix of transformed coefficients. When the vector direct transform module 214 applies the direct transform to a vector, the vector direct transform module 214 can apply the direct transform described in Figure 11, below. Note that the transform described in Figure 11, below, is an inverse of the transform described in Figure 10A.

[0097] Após o módulo de transformada direta de vetor 214 produzir a matriz de coeficientes transformados, um módulo de escalonamento 216 pode aplicar fatores de escalonamento a cada coeficiente transformado na matriz de coeficientes transformados. O módulo de escalonamento 216 pode aplicar recíprocas dos fatores de escalonamento usados pelo módulo de escalonamento 142 no módulo de transformada inversa 48. Por exemplo, se o módulo de escalonamento 142 escalona os coeficientes por deslocamento dos coeficientes para a esquerda em três posições, o módulo de escalonamento 216 pode escalonar os valores transformados por deslocamento dos valores transformados para a direita em três posições. Em outro exemplo, se o módulo de escalonamento 142 escalona os coeficientes ao multiplicar os coeficientes por fatores de escalonamento individuais em uma matriz de fatores de escalonamento, o módulo de escalonamento 216 pode escalonar os valores transformados ao multiplicar os valores transformados por fatores de escalonamento na matriz de fatores de escalonamento e então deslocando os valores resultantes para a direita em uma magnitude. A fim de diminuir os erros de arredondamento, o[0097] After the vector direct transform module 214 produces the transformed coefficient matrix, a scaling module 216 can apply scaling factors to each transformed coefficient in the transformed coefficient matrix. The scaling module 216 can apply reciprocal of the scaling factors used by the scaling module 142 in the reverse transform module 48. For example, if the scaling module 142 scales the coefficients by shifting the coefficients to the left in three positions, the module scaling 216 can scale the transformed values by shifting the transformed values to the right in three positions. In another example, if the scaling module 142 scales the coefficients by multiplying the coefficients by individual scaling factors in a matrix of scaling factors, the scaling module 216 can scale the transformed values by multiplying the transformed values by scaling factors in the scaling factor matrix and then shifting the resulting values to the right by a magnitude. In order to reduce rounding errors, the

Petição 870180133578, de 24/09/2018, pág. 50/169Petition 870180133578, of 9/24/2018, p. 50/169

44/69 módulo de escalonamento 216 pode adicionar um valor de polarização de ponto médio a cada um dos valores transformados após multiplicação dos valores transformados pelos fatores de escalonamento. Por exemplo, o módulo de escalonamento 216 pode usar a seguinte equação para gerar uma matriz de coeficientes escalonados:44/69 scaling module 216 can add a midpoint bias value to each of the transformed values after multiplying the transformed values by the scaling factors. For example, the scaling module 216 can use the following equation to generate an array of scaled coefficients:

F[v] [m] - (F’ [v] [m] * S [ν] [w] + (1« 19) - ((F’ [ν] [μ] > = θ) ? 0 :1) ) » 20 onde v = 0..7, « = 0..7; onde S[v] [u] é uma entrada na matriz de fatores de escalonamento, F é a matriz de coeficientes escalonados, e F' é a matriz de coeficientes transformados.F [v] [m] - (F '[v] [m] * S [ν] [w] + (1 «19) - ((F' [ν] [μ]> = θ)? 0: 1 )) »20 where v = 0..7,« = 0..7; where S [v] [u] is an entry in the matrix of scaling factors, F is the matrix of scaled coefficients, and F 'is the matrix of transformed coefficients.

[0098] Após o módulo de escalonamento 216 gerar a matriz de coeficientes escalonados, um módulo de saída 218 pode emitir a matriz de coeficientes para o módulo de quantização 28.[0098] After the scaling module 216 generates the scaled coefficient matrix, an output module 218 can output the coefficient matrix for the quantization module 28.

[0099] A Figura 9 é um fluxograma ilustrando uma operação exemplar do módulo de transformada direta 26. Inicialmente, o módulo de entrada 210 recebe uma matriz de valores de componentes de pixel (230). Quando o módulo de entrada 140 recebe a matriz de valores de componentes de pixel, o módulo de deslocamento à esquerda 212 pode gerar uma matriz de coeficientes ajustados por deslocamento ascendente de cada valor componentes de pixel (232) à valores de o módulo de todos deslocamento os na matriz de Por exemplo, esquerda 212 pode deslocar coeficientes à esquerda em dez posições. Nesse exemplo, o módulo de deslocamento à esquerda 212 pode deslocar todos os coeficientes para a direita em dez posições porque o módulo de transformada direta de vetor 214 pode usar aritmética de ponto fixo na qual os números são codificados utilizando dez bits na porção fracionária. Desse modo, por deslocamento dos coeficientes para a esquerda em dez posições, o módulo de deslocamento à esquerda 212 converte[0099] Figure 9 is a flow chart illustrating an exemplary operation of the direct transform module 26. Initially, the input module 210 receives an array of pixel component values (230). When input module 140 receives the array of pixel component values, the left shift module 212 can generate an array of coefficients adjusted by upward displacement of each pixel component value (232) to the values of the all shift module those in the matrix of For example, left 212 can shift coefficients to the left in ten positions. In this example, the left shift module 212 can shift all coefficients to the right by ten positions because the vector direct transform module 214 can use fixed point arithmetic in which numbers are encoded using ten bits in the fractional portion. Thus, by shifting the coefficients to the left in ten positions, the left shift module 212 converts

Petição 870180133578, de 24/09/2018, pág. 51/169Petition 870180133578, of 9/24/2018, p. 51/169

45/69 efetivamente os valores de componentes de pixel em números de ponto fixo com dez bits de mantissa.45/69 effectively the values of pixel components in fixed point numbers with ten bits of mantissa.

[00100] Após deslocar à esquerda cada valor de componente de pixel na matriz de valores ajustados, o módulo de transformada direta de vetor 214 pode determinar se um contador de coluna é inferior a um contador máximo de coluna (234). Inicialmente, o contador de coluna pode ser ajustado para zero. O contador máximo de coluna pode ser um valor estático que é igual ao número de colunas na matriz de coeficientes ajustados. Por exemplo, se a matriz de coeficientes ajustados inclui oito colunas, o contador máximo de colunas é igual a oito.[00100] After shifting each pixel component value in the adjusted value matrix to the left, the vector direct transform module 214 can determine whether a column counter is less than a maximum column counter (234). Initially, the column counter can be set to zero. The maximum column counter can be a static value that is equal to the number of columns in the adjusted coefficient matrix. For example, if the adjusted coefficient matrix includes eight columns, the maximum column counter is equal to eight.

[00101] Se o contador de coluna for menor do que o contador máximo de coluna (SIM de 234), o módulo de transformada direta de vetor 214 pode computar uma transformada direta unidimensional em um vetor coluna indicado pelo contador de coluna (236). Quando o módulo de transformada direta de vetor 214 computa a transformada direta em um vetor coluna da matriz de coeficientes ajustados, o módulo de transformada direta de vetor 214 substitui os coeficientes ajustados originais no vetor coluna por coeficientes intermediários. Após o módulo de transformada direta de vetor 214 computar a transformada direta em um vetor coluna da matriz de coeficientes ajustados, o módulo de transformada direta de vetor 214 pode incrementar o contador de coluna (238). O módulo de transformada direta de vetor 214 pode então retornar e outra vez determinar se o contador de coluna é menor do que o contador máximo de coluna (234).[00101] If the column counter is smaller than the maximum column counter (SIM 234), the vector direct transform module 214 can compute a one-dimensional direct transform into a column vector indicated by the column counter (236). When the vector direct transform module 214 computes the direct transform into a column vector of the adjusted coefficient matrix, the vector direct transform module 214 replaces the original adjusted coefficients in the column vector with intermediate coefficients. After the vector direct transform module 214 computes the direct transform into a column vector of the adjusted coefficient matrix, the vector direct transform module 214 can increment the column counter (238). The vector direct transform module 214 can then return and again determine whether the column counter is less than the maximum column counter (234).

[00102] Se o contador de coluna não for menor do que (isto é, for maior do que ou igual a) o contador máximo de coluna (NÃO de 234), o módulo de transformada direta de vetor 214 pode determinar se um contador de linha[00102] If the column counter is not less than (that is, greater than or equal to) the maximum column counter (NOT 234), the vector direct transform module 214 can determine whether a column counter line

Petição 870180133578, de 24/09/2018, pág. 52/169Petition 870180133578, of 9/24/2018, p. 52/169

46/69 é menor do que um contador máximo de linha (240) . Inicialmente, o contador de linha pode ser ajustado para zero. O contador máximo de linha pode ser um valor estático que é igual ao número de vetores linha na matriz de coeficientes. Por exemplo, se a matriz de coeficientes inclui oito linhas, o contador máximo de linha é igual a oito.46/69 is less than a maximum line counter (240). Initially, the line counter can be set to zero. The maximum line counter can be a static value that is equal to the number of line vectors in the coefficient matrix. For example, if the coefficient matrix includes eight lines, the maximum line counter is equal to eight.

[00103] Se o contador de linha for menor do que o contador máximo de linha (SIM de 240), o módulo de transformada direta de vetor 214 pode computar uma transformada de cosseno discreta unidimensional em um vetor linha indicado pelo contador de linha (242). Como o módulo de transformada direta de vetor 214 já computou a transformada direta nos vetores linha na matriz, a matriz de coeficientes agora contém coeficientes intermediários. Quando o módulo de transformada direta de vetor 214 computa a transformada direta em um vetor linha de coeficientes intermediários, o módulo de transformada direta de vetor 214 substitui os coeficientes intermediários no vetor coluna por coeficientes transformados.[00103] If the line counter is smaller than the maximum line counter (SIM 240), the vector direct transform module 214 can compute a one-dimensional discrete cosine transform into a line vector indicated by the line counter (242 ). Since the vector direct transform module 214 has already computed the direct transform in the line vectors in the matrix, the coefficient matrix now contains intermediate coefficients. When the vector direct transform module 214 computes the direct transform into a line vector of intermediate coefficients, the vector direct transform module 214 replaces the intermediate coefficients in the column vector with transformed coefficients.

[00104] Após o módulo de transformada direta de vetor 214 computar a transformada de cosseno discreta em um vetor linha da matriz de coeficientes, o módulo de transformada direta de vetor 214 pode incrementar o contador de linha (244) . O módulo de transformada direta de vetor 214 pode então retornar e outra vez determinar se o contador de linha é menor do que o contador máximo de linha (240) .[00104] After the vector direct transform module 214 computes the discrete cosine transform into a line vector of the coefficient matrix, the vector direct transform module 214 can increment the line counter (244). The vector direct transform module 214 can then return and again determine whether the line counter is less than the maximum line counter (240).

[00105] Se o contador de linha não for menor do que (isto é, for maior do que ou igual a) o contador máximo de linha (NÃO de 240), o módulo de escalonamento 216 pode escalonar cada coeficiente transformado na matriz de coeficientes transformados (246). Quando o módulo de[00105] If the line counter is not less than (that is, greater than or equal to) the maximum line counter (NOT 240), the scaling module 216 can scale each coefficient transformed into the coefficient matrix processed (246). When the

Petição 870180133578, de 24/09/2018, pág. 53/169Petition 870180133578, of 9/24/2018, p. 53/169

47/69 escalonamento 216 escalona um coeficiente, o módulo de escalonamento 216 pode deslocar o coeficiente para a direita em certo número de posições. Após o módulo de escalonamento 216 ter escalonado cada um dos coeficientes transformados, o módulo de saída 218 pode emitir a matriz resultante de coeficientes escalonados (248) .47/69 scaling 216 scaling a coefficient, the scaling module 216 can shift the coefficient to the right in a number of positions. After the scaling module 216 has scaled each of the transformed coefficients, the output module 218 can output the matrix resulting from scaled coefficients (248).

[00106] A Figura 10A é um fluxograma ilustrando uma transformada unidimensional exemplar 260. Na Figura 10A, os valores Xo, Xi, X2, X3, X4, X5, Xe e X7 representam coeficientes de entrada e os valores xo, xi, X2, X3, X4, xs, X6 e X7 representam valores de saída da transformada 260. O valor associado a uma linha após um círculo que encerra um símbolo + é o resultado da adição dos valores associados com as setas que apontam para o círculo. O valor associado a uma linha após um círculo que abrange um símbolo x é o resultado da multiplicação do coeficiente posicionado próximo ao círculo e valores associados às linhas que passam através dos círculos. O símbolo próximo a uma seta representa uma negação do valor associado à seta. Por exemplo, se o valor 10 for associado a uma seta antes de um símbolo o valor -10 é associado a uma seta após o símbolo [00107] A transformada 260 utiliza quatorze multiplicações por sete fatores irracionais singulares. Para conveniência essa revelação se refere a esses fatores irracionais singulares como α, β, γ, δ, ε, ζ, e η. Na transformada 260, α = cos(3^ / 8), β = y/2sen(3 π/%), γ — cos (ττ/16), δ — sen(?r/16), ε = cos(3tt/16), ζ — se«(3Tz716), e η=4ϊ . Observar que α, β, γ, δ, ε, ζ, e η são todos números irracionais. Como α, β, γ, δ, ε, ζ, e η são números irracionais, de forma tolerável as representações exatas de α, β, γ, δ, ε, ζ, e η podem exigir um número relativamente grande de bits.[00106] Figure 10A is a flow chart illustrating an exemplary one-dimensional transform 260. In Figure 10A, the values Xo, Xi, X2, X3, X4, X5, Xe and X7 represent input coefficients and the values xo, xi, X2, X3, X4, xs, X6 and X7 represent output values of transform 260. The value associated with a line after a circle that encloses a + symbol is the result of adding the values associated with the arrows that point to the circle. The value associated with a line after a circle that encloses an x symbol is the result of multiplying the coefficient positioned next to the circle and values associated with the lines that pass through the circles. The symbol next to an arrow represents a negation of the value associated with the arrow. For example, if the value 10 is associated with an arrow before a symbol, the value -10 is associated with an arrow after the symbol [00107] Transform 260 uses fourteen multiplications by seven singular irrational factors. For convenience, this disclosure refers to these singular irrational factors such as α, β, γ, δ, ε, ζ, and η. In transform 260, α = cos (3 ^ / 8), β = y / 2sen (3 π /%), γ - cos (ττ / 16), δ - sen (? R / 16), ε = cos (3tt / 16), ζ - if «(3Tz716), and η = 4ϊ. Note that α, β, γ, δ, ε, ζ, and η are all irrational numbers. As α, β, γ, δ, ε, ζ, and η are irrational numbers, tolerably the exact representations of α, β, γ, δ, ε, ζ, and η may require a relatively large number of bits.

Petição 870180133578, de 24/09/2018, pág. 54/169Petition 870180133578, of 9/24/2018, p. 54/169

48/6948/69

Conseqüentemente, obediência às exigências de padrões típicos de codificação poderia não ser possível ao utilizar números de ponto fixo com números relativamente pequenos de bits de mantissa para computar a transformada 260. Além do mais, como α, β, γ, δ, ε, ζ, e η são números irracionais, poderia não ser possível reduzir as multiplicações por a, β, γ, δ, ε, ζ, e η para sequências de operações de deslocamento, operações de adição, e/ou operações de subtração.Consequently, compliance with the requirements of typical coding standards might not be possible when using fixed point numbers with relatively small numbers of mantissa bits to compute transform 260. Furthermore, such as α, β, γ, δ, ε, ζ , and η are irrational numbers, it might not be possible to reduce multiplications by a, β, γ, δ, ε, ζ, and η for sequences of displacement operations, addition operations, and / or subtraction operations.

[00108] A Figura 10B é um fluxograma ilustrando uma transformada escalonada unidimensional exemplar 270. A transformada 270 é uma versão escalonada da transformada 260. Na transformada 270, o valor η foi fatorado da transformada 260, um valor (1/Ψ) foi fatorado dos valores γ, δ, ε, e ζ da transformada 260, e um valor (l/φ) foi fatorado dos valores α e β da transformada 260. Quando (1/Ψ) e (l/φ) são decompostos desses coeficientes, o vetor seguinte representa valores através dos quais X0-X7 são multiplicados antes da transformada 260:[00108] Figure 10B is a flowchart illustrating an exemplary one-dimensional staggered transform 270. Transform 270 is a staggered version of transform 260. In transform 270, the value η was factored out of transform 260, a value (1 / Ψ) was factored values γ, δ, ε, and ζ of transform 260, and a value (l / φ) was factored out of values α and β of transform 260. When (1 / Ψ) and (l / φ) are decomposed of these coefficients, the following vector represents values by which X0-X7 are multiplied before transform 260:

< 1, (l/í/), (l/^ (V2/í/) 1, (V2/í/) (l/^ (l/í/) ><1, (l / í /), (l / ^ (V2 / í /) 1, (V2 / í /) (l / ^ (l / í /)>

Os valores α, β, γ, δ, ε, ζ, e η podem mudar quando (1/Ψ) e (l/φ) são decompostos de α, β, γ, δ, ε, e ζ. Para propósitos de conveniência, os valores α, β, γ, δ, ε, e ζ após (1/Ψ) e (l/φ) são decompostos referidos como a' , β' , γ' , δ', ε', e ζ'. Por exemplo, quando Ψ = 1,352708058 e φ = 0,959700091, α' « 133/256, β'« 321/256, γ' « 679/512, δ' « 135/512, ε' « 4605/4096, e ζ' « 1539/2048.The values α, β, γ, δ, ε, ζ, and η can change when (1 / Ψ) and (l / φ) are decomposed from α, β, γ, δ, ε, and ζ. For convenience purposes, the values α, β, γ, δ, ε, and ζ after (1 / Ψ) and (l / φ) are decomposed referred to as a ', β', γ ', δ', ε ', and ζ '. For example, when Ψ = 1.3552708058 and φ = 0.959700091, α '«133/256, β'« 321/256, γ '«679/512, δ'« 135/512, ε '«4605/4096 , and ζ '«1539/2048.

[00109] Valores α' , β' , γ' , δ', ε' , e ζ' podem ser selecionados de diversas formas de tal modo que eles aproximariam produtos de a' , β', γ' , δ', ε' , e ζ' por[00109] Values α ', β', γ ', δ', ε ', and ζ' can be selected in different ways such that they would approximate products of a ', β', γ ', δ', ε ' , and ζ 'by

Petição 870180133578, de 24/09/2018, pág. 55/169Petition 870180133578, of 9/24/2018, p. 55/169

49/69 fatores correspondentes Ψ e φ. Em geral, os valores dos fatores Ψ e φ e os valores a', β', y', δ', ε' , ζ' podem ser selecionados sem mudar o modelo global da transformada 270. Encontrar bons valores desses fatores pode representar um problema complexo de otimização que poderia produzir múltiplas soluções com diferentes equilíbrios de complexidade/precisão. Por exemplo, multiplicações por alguns valores de a' , β' , y', δ', ε' , e ζ' podem ser mais convenientes para calcular do que outros. Além do mais, os valores de Ψ e φ podem ser importantes porque eles servem como a base para fatores de escalonamento, e alguns fatores de escalonamento podem ser mais convenientes de calcular do que outros. Por exemplo, multiplicações por um primeiro conjunto de valores para a', β' , y', δ', ε' , e ζ' pode ser aproximados por uma série de operações de adição e operações de deslocamento que são mais curtas do que uma série de operações de adição e operações de deslocamento para um conjunto diferente de valores para a', β', y' , δ' , ε', e ζ' . Por exemplo, quando Ψ = 1,352708058 e φ =49/69 corresponding factors Ψ and φ. In general, the values of the factors Ψ and φ and the values a ', β', y ', δ', ε ', ζ' can be selected without changing the overall model of transform 270. Finding good values for these factors can represent a complex optimization problem that could produce multiple solutions with different balance of complexity / precision. For example, multiplications by some values of a ', β', y ', δ', ε ', and ζ' may be more convenient to calculate than others. Furthermore, the values of Ψ and φ can be important because they serve as the basis for scaling factors, and some scaling factors may be more convenient to calculate than others. For example, multiplications by a first set of values for a ', β', y ', δ', ε ', and ζ' can be approximated by a series of addition operations and displacement operations that are shorter than one series of addition operations and displacement operations for a different set of values for a ', β', y ', δ', ε ', and ζ'. For example, when Ψ = 1.3552708058 and φ =

0,959700091, y' pode ser aproximado como 679/512. Três operações de deslocamento e três operações de adição podem ser exigidas para aproximar uma multiplicação por 679/512. Além do mais, quando Ψ = 1,1810842 e φ = 0,801251953, y' pode ser aproximado como 18981/16384. Quatro operações de deslocamento e quatro operações de adição podem ser exigidas para aproximar uma multiplicação por 18981/16384.0.959700091, y 'can be approximated as 679/512. Three shift operations and three addition operations may be required to approximate a multiplication by 679/512. Furthermore, when Ψ = 1.1810842 and φ = 0.801251953, y 'can be approximated as 18981/16384. Four shift operations and four addition operations can be required to approximate a multiplication by 18981/16384.

[00110] Uma matriz de fatores de escalonamento pode ser computada ao multiplicar a transposição do vetor < 1, (l/ys), (l/φ), (fi/ys) 1, (yfè/ys) (l/φ), (l/ys) > pelo mesmo vetor. Isso resulta em uma matriz 8x8 de valores:[00110] A matrix of scaling factors can be computed by multiplying the transposition of the vector <1, (l / ys), (l / φ), (fi / ys) 1, (yfè / ys) (l / φ) , (l / ys)> by the same vector. This results in an 8x8 array of values:

Petição 870180133578, de 24/09/2018, pág. 56/169Petition 870180133578, of 9/24/2018, p. 56/169

50/6950/69

Figure BRPI0713321B1_D0001

F=(l/í/)*(l/ç?) , G=(l/í/)*(V2/í/) , /f=(l/ç?)2, I =(Υ/φ)*^2/ψ·) , eF = (l / í /) * (l / ç?), G = (l / í /) * (V2 / í /), / f = (l / ç?) 2 , I = (Υ / φ) * ^ 2 / ψ ·), and

J = (λ/2/ ψ} * {^2!ψ} .J = (λ / 2 / ψ} * {^ 2! Ψ}.

[00111] Como os fatores de escalonamento são multiplicados com os coeficientes antes da aplicação da transformada, os valores de escalonamento A, B, C, D, E, F, G, Η, I, e J podem ser deslocados à esquerda em P posições, onde P é um constante se referindo a um número de bits de mantissa de ponto fixo (isto é, bits à direita do ponto base) usado em uma transformada. Isso efetivamente converte os coeficientes originais em números de pontos fixos que têm P bits de mantissa. Em outras palavras, cada um dos coeficientes na matriz é multiplicado por 2P. Os valores resultantes podem ser então aproximados por valores de número inteiro. Desse modo, A, B, C, D, E, F, G, Η, I, e J na matriz acima podem ser substituídos por A'&2P, B'2P , C'*U<p*2p, D' «(Vw)* 2P , « (l/ç/)2 * 2P, ^'«(ΐ/ί/)*(ΐ/^)*2ρ, G'«(l/^)*(V2/^)*2P, tf'«(l/p)2*2p,[00111] As the scaling factors are multiplied with the coefficients before applying the transform, the scaling values A, B, C, D, E, F, G, Η, I, and J can be shifted to the left in P positions, where P is a constant referring to a number of bits of the fixed point mantissa (that is, bits to the right of the base point) used in a transform. This effectively converts the original coefficients into numbers of fixed points that have P bits of mantissa. In other words, each of the coefficients in the matrix is multiplied by 2 P. The resulting values can then be approximated by integer values. Thus, A, B, C, D, E, F, G, Η, I, and J in the above matrix can be replaced by A '& 2 P , B'2 P , C' * U <p * 2 p , D '«(Vw) * 2 P ,« (l / ç /) 2 * 2 P , ^' «(ΐ / ί /) * (ΐ / ^) * 2 ρ , G '« (l / ^) * (V2 / ^) * 2 P , tf '«(l / p) 2 * 2 p ,

7'«(l/^)*(V2/í/)*2p, e J'«(V2/Í/)*(V2/Í/)*2P.7 '«(l / ^) * (V2 / í /) * 2 p , and J'« (V2 / Í /) * (V2 / Í /) * 2 P.

[00112] Por exemplo, deixemos Ψ = 1,352708058 e φ = 0,959700091, e deixemos P = 10. Dados esses valores de[00112] For example, let Ψ = 1.3552708058 and φ = 0.959700091, and let P = 10. Given these values of

Ψ, φ, e P, os fatores de escalonamento yl' = 1024, 5'= 757 ,Ψ, φ, and P, the scaling factors yl '= 1024, 5' = 757,

Petição 870180133578, de 24/09/2018, pág. 57/169Petition 870180133578, of 9/24/2018, p. 57/169

51/6951/69

C = 1067 , D' = 1071 , £' = 560 , F' = 789 , <7=792, //' = 1112, /' = 1116, e ./' = 1120 podem ser selecionados. Desse modo, a matriz a seguir de fatores de escalonamento pode resultar:C = 1067, D '= 1071, £' = 560, F '= 789, <7 = 792, //' = 1112, / '= 1116, and ./' = 1120 can be selected. Thus, the following matrix of scaling factors can result:

1024 1024 757 757 1067 1067 1071 1071 1024 1024 1071 1071 1067 1067 757 757 757 757 560 560 789 789 792 792 757 757 792 792 789 789 560 560 1067 1067 789 789 1112 1112 1116 1116 1067 1067 1116 1116 1112 1112 789 789 1071 1071 792 792 1116 1116 1120 1120 1071 1071 1120 1120 1116 1116 792 792 1024 1024 757 757 1067 1067 1071 1071 1024 1024 1071 1071 1067 1067 757 757 1071 1071 792 792 1116 1116 1120 1120 1071 1071 1120 1120 1116 1116 792 792 1067 1067 789 789 1112 1112 1116 1116 1067 1067 1116 1116 1112 1112 789 789 757 757 560 560 789 789 792 792 757 757 792 792 789 789 560 560

[00113] As tabelas a seguir resumem fatores de escalonamento exemplares e valores de α', β', γ' , δ' , ε' , e ζ' que podem ser usados com a transformada 270.[00113] The following tables summarize exemplary scaling factors and values of α ', β', γ ', δ', ε ', and ζ' that can be used with transform 270.

Tabela 1: Aproximações para fatores constantes usadas noTable 1: Approximations for constant factors used in the

Algoritmo A.Algorithm A.

Fator Factor Valor Value Algoritmos: x=x*[A,...,J]»2; χ=χ* [α,γ,ε] ; y=x*[ (β,δ,ζ]; Algorithms: x = x * [A, ..., J] »2; χ = χ * [α, γ, ε]; y = x * [(β, δ, ζ]; Complexidade Complexity Tempos usados Times used Adições Additions Deslo- camentos Unlock- camentos A' THE' 2048 2048 (x * A’) = (x«9). (x * A ’) = (x« 9). 0 0 1 1 4 4 B' B' 1703 1703 x2=-x+(x«6), x3=x2+(x2«3), x4=(x+x3)«1, (x * B’) = (x3+x4)»2; x2 = -x + (x «6), x3 = x2 + (x2« 3), x4 = (x + x3) «1, (x * B ') = (x3 + x4) »2; 4 4 4 4 8 8 C Ç 2676 2676 x2=-x+(x«3), x3=-x+(x2«5), (x * C') = x3+(x3«l); x2 = -x + (x «3), x3 = -x + (x2« 5), (x * C ') = x3 + (x3 «l); 3 3 3 3 8 8 D' D ' 2408 2408 x2=x+(x«5), x3=x2«l, x4=x+x3, (x * D') = x3+(x4«3); x2 = x + (x «5), x3 = x2 «l, x4 = x + x3, (x * D ') = x3 + (x4 «3); 3 3 3 3 8 8 E' AND' 1416 1416 x2=x«4, x3=x2«3, x4=x3-x2, x5=x+x4, (x*E')=x3+(x5«l); x2 = x «4, x3 = x2« 3, x4 = x3-x2, x5 = x + x4, (x * E ') = x3 + (x5 «l); 3 3 3 3 4 4

Petição 870180133578, de 24/09/2018, pág. 58/169Petition 870180133578, of 9/24/2018, p. 58/169

52/6952/69

Fator Factor Valor Value Algoritmos: x=x*[A,...,J]»2; x=x* [α,γ,ε] ; y=x*[ (β,δ,ζ]; Algorithms: x = x * [A, ..., J] »2; x = x * [α, γ, ε]; y = x * [(β, δ, ζ]; Complexidade Complexity Tempos usados Times used Adições Additions Deslo- camentos Unlock- camentos F’ F ’ 2225 2225 x2=x«5, x3=x+(x2«2)r x4=x3«4, x5=x2+x3, (x * F’) = (x4+x5)»2;x2 = x «5, x3 = x + (x2« 2) r x4 = x3 «4, x5 = x2 + x3, (x * F ') = (x4 + x5)» 2; 3 3 4 4 8 8 G' G ' 2003 2003 x2=x«4, x3=x2-x, x4=-x3+(x2«5), (x * G’) = (x3»2) + x4; x2 = x «4, x3 = x2-x, x4 = -x3 + (x2« 5), (x * G ') = (x3 »2) + x4; 3 3 3 3 8 8 H’ H' 3496 3496 x2=x«3, x3=x2-x, x4=x3«l, x5=x2+x4, (x * H’) = -x5+(x4«6); x2 = x «3, x3 = x2-x, x4 = x3« l, x5 = x2 + x4, (x * H ') = -x5 + (x4 «6); 3 3 3 3 4 4 I' I ' 3147 3147 x2=x«9, x3=-x+(x«4), x4=x2+x3, x5=x2+x4, (x * I') = (x5»2)+x4; x2 = x «9, x3 = -x + (x« 4), x4 = x2 + x3, x5 = x2 + x4, (x * I ') = (x5 »2) + x4; 4 4 3 3 8 8 J' J ' 2832 2832 x2=x«2, x3=x2-x, x4=x3«6, x5=x2+x4, (x * J’) = x5+(x2«7); x2 = x «2, x3 = x2-x, x4 = x3« 6, x5 = x2 + x4, (x * J ') = x5 + (x2' 7); 3 3 3 3 4 4 a’ The' 53/12 8 53/12 8 (x* β’)=χ, (x * β ’) = χ, 3 3 3 3 2 2 β’ β ’ 1 1 x2 = x » 2, x3 = x + x2, x4 = x2 - x, (x * a’) = (x3 » 5) (x4 » 1) ; x2 = x »2, x3 = x + x2, x4 = x2 - x, (x * a ') = (x3 »5) (x4» 1); γ’ γ ’ 151/1 28 151/1 28 x2 = x - (x » 4), x2 = x - (x »4), 3 3 3 3 2 2 δ* δ * 15/32 15/32 x3 = x2 + (x » 7), (x * δ’) = x2 » 2; (x * γ’) = y+ x3; x3 = x2 + (x »7), (x * δ ’) = x2» 2; (x * γ ’) = y + x3; ε' ε ' 1 1 (x * ε’) = x (x * ε ’) = x 3 3 3 3 2 2 171/2 56 171/2 56 x2 = (x » 3) - x; x3 = x+(xc » 3); (x * ζ’) = x3 - (x3 » 2) ; x2 = (x »3) - x; x3 = x + (xc »3); (x * ζ ’) = x3 - (x3» 2) ; Complexidade escalonada: Staggered complexity: da transformada ID of the transformed ID 44 44 18 18

Petição 870180133578, de 24/09/2018, pág. 59/169Petition 870180133578, of 9/24/2018, p. 59/169

53/6953/69

Fator Factor Valor Value Algoritmos: x=x*[A,...,J]»2; x=x* [α,γ,ε] ; y=x*[ (β,δ,ζ]; Algorithms: x = x * [A, ..., J] »2; x = x * [α, γ, ε]; y = x * [(β, δ, ζ]; Complexidade Complexity Tempos usados Times used Adições Additions Deslo- camentos Unlock- camentos Complexidade total de escalonamento 2D: Total 2D scaling complexity: 196 196 200 200 Complexidade de uma transformada 2D completa: Complexity of a transform Full 2D: 901 901 552 552

Tabela 2: Aproximações para fatores constantes usadas no Algoritmo B.Table 2: Approximations for constant factors used in Algorithm B.

Fator Factor Valor Value Algoritmos: x=x* [ . ,J,Ot,Y,£] f Y=X* [β,δ, ζ] / Algorithms: x = x * [ . , J, Ot, Y, £] f Y = X * [β, δ, ζ] / Complexidade Complexity Tempos usados Times used Adições Additions Deslocamentos Offsets A' THE' 1024 1024 (χ* A’) = x«10; (χ * A ’) = x« 10; 0 0 1 1 4 4 B’ B' 757 757 x2=-x+(x«6), x3=(x2«2)r x4=(x3«l), (x * B’) =x+x3, x=x4+x5;x2 = -x + (x «6), x3 = (x2« 2) r x4 = (x3 «l), (x * B ') = x + x3, x = x4 + x5; 3 3 3 3 8 8 V V 1067 1067 x2=-x+ (x«6), x3=-x+(x2«2)r (x * C') = x3«2, x=x2+x4;x2 = -x + (x «6), x3 = -x + (x2« 2) r (x * C ') = x3 «2, x = x2 + x4; 3 3 3 3 8 8 D' D ' 1071 1071 x2=x«6, x3=x2-x, (x * D’) = x3+(x3«4); x2 = x «6, x3 = x2-x, (x * D ') = x3 + (x3 «4); 2 2 2 2 8 8 E’ AND' 560 560 x2=x«5, x3=x+x2, x4=x3«4, (x * E’) = x2+x4; x2 = x «5, x3 = x + x2, x4 = x3« 4, (x * E ') = x2 + x4; 2 2 2 2 4 4 F’ F ’ 789 789 x2=x«3, x3=x2-x, x4=x3+(x2«5), (x * F’) = x4+(x4«l); x2 = x «3, x3 = x2-x, x4 = x3 + (x2« 5), (x * F ') = x4 + (x4 «l); 3 3 3 3 8 8 G' G ' 792 792 x2=x+ (x«5), x3=x2«l, x4=x2+x3, (x*G') = x4«3; x2 = x + (x «5), x3 = x2 «l, x4 = x2 + x3, (x * G ') = x4 «3; 2 2 3 3 8 8

Petição 870180133578, de 24/09/2018, pág. 60/169Petition 870180133578, of 9/24/2018, p. 60/169

54/6954/69

Fator Factor Valor Value Algoritmos: x=x* [ y=x*[β,δ,ζ]/ Algorithms: x = x * [ y = x * [β, δ, ζ] / Complexidade Complexity Tempos usados Times used Adições Additions Deslocamentos Offsets H’ H' 1112 1112 x2=x«4, x3=x2-x, x4=x2+x3, x5=x3+(x4«2), (x* H’) = x5«3; x2 = x «4, x3 = x2-x, x4 = x2 + x3, x5 = x3 + (x4« 2), (x * H ') = x5 «3; 3 3 3 3 4 4 I' I ' 1116 1116 x2=-x+(x«5), x3=x2«3, x4=x2+x3, (x * I' ) = x4«2; x2 = -x + (x «5), x3 = x2 «3, x4 = x2 + x3, (x * I ') = x4 «2; 2 2 3 3 8 8 J' J ' 1120 1120 x2=-x+(x«3), x3=x2+(x2«2), (x * J’) = x3«5; x2 = -x + (x «3), x3 = x2 + (x2« 2), (x * J ') = x3' 5; 2 2 3 3 4 4 a’ The' 133/256 133/256 x2=x»2, x3=x+x2, x4=x+(x3»5), (x* a’) = x4»l; (x * β’) = x3(-x2»6); x2 = x »2, x3 = x + x2, x4 = x + (x3» 5), (x * a ') = x4 »l; (x * β ’) = x3 (-x2» 6); 3 3 4 4 2 2 β’ β ’ 321/256 321/256 γ’ γ ’ 679/512 679/512 x2=x»4, x3=x»9, x4=x+x2, (x * δ’) = x3+(x4»2); (x * γ’ ) = x4 + (x * δ’); x2 = x »4, x3 = x» 9, x4 = x + x2, (x * δ ’) = x3 + (x4» 2); (x * γ ’) = x4 + (x * δ’); 3 3 3 3 2 2 δ* δ * 135/512 135/512 ε’ ε ’ 4605/4096 4605/4096 x2=x + (x»l), x3 = x2 + (x2 » 9) , -(x * ζ’) = x3»l; (x * ε’) = x2 (y » l); x2 = x + (x »l), x3 = x2 + (x2» 9), - (x * ζ ’) = x3» l; (x * ε ’) = x2 (y» l); 3 3 4 4 2 2 ζ’ ζ ’ 1539/2048 1539/2048 Complexidade de Complexity of transformada transformed 44 44 22 22

Petição 870180133578, de 24/09/2018, pág. 61/169Petition 870180133578, of 9/24/2018, p. 61/169

55/6955/69

Fator Factor Valor Value Algoritmos: x=x* [ γ=χ*[β,δ,ζ]/ Algorithms: x = x * [ γ = χ * [β, δ, ζ] / Complexidade Complexity Tempos usados Times used Adições Additions Deslocamentos Offsets ID escalonada: Stepped ID: Complexidade total de escalonamento 2D: Total 2D scaling complexity: 148 148 172 172 Complexidade de escalonamento w/o de transformada 2D: 2D transform w / o scaling complexity: 704 704 352 352 Complexidade de uma transformada 2D completa: Complexity of a complete 2D transform: 852 + 1 852 + 1 524+64 524 + 64

Tabela 3: Aproximações para fatores constantes usados no Algoritmo C.Table 3: Approximations for constant factors used in Algorithm C.

Fator Factor Valor Value Algoritmos: x=x* [ y=x* [β,δ,ζ]/ Algorithms: x = x * [ y = x * [β, δ, ζ] / Complexidade Complexity Tempos usados Times used Adições Additions Deslocamentos Offsets A' THE' 1024 1024 (χ* A’) = x«10; (χ * A ’) = x« 10; 0 0 1 1 4 4 B’ B' 1138 1138 x2=xl«l, x3=x2«3, x4=x2+x3, x5= x3-x2, (x * B’) = (x4«6)-x5; x2 = xl «l, x3 = x2« 3, x4 = x2 + x3, x5 = x3-x2, (x * B ’) = (x4-6) -x5; 3 3 3 3 8 8 C Ç 1730 1730 x2=xl«l, x3=xl+x2, x4=x3«3, x5=x3+x4, (x * C') = x2+ (x5«6); x2 = xl «l, x3 = xl + x2, x4 = x3« 3, x5 = x3 + x4, (x * C ') = x2 + (x5 «6); 3 3 3 3 8 8 D' D ' 1609 1609 x2=xl«3, x3=x2«l, x4=xl+x2, x5=x3+x4, (x * D’) = x4+(x5«6); x2 = xl «3, x3 = x2« l, x4 = xl + x2, x5 = x3 + x4, (x * D ') = x4 + (x5 «6); 3 3 3 3 8 8 E’ AND' 1264 1264 x2=xl«2, x3=x2«2, x4=x2+x3, x5=x4«6, (x*E’) = x5-x3; x2 = xl «2, x3 = x2« 2, x4 = x2 + x3, x5 = x4 «6, (x * E ') = x5-x3; 2 2 3 3 4 4 F’ F ’ 1922 1922 x2=xl«l, x3=x2«3, x4=-xl+x3, x5=x4«7, x2 = xl «l, x3 = x2« 3, x4 = -xl + x3, x5 = x4 «7, 2 2 3 3 8 8

Petição 870180133578, de 24/09/2018, pág. 62/169Petition 870180133578, of 9/24/2018, p. 62/169

56/6956/69

Fator Factor Valor Value Algoritmos: x=x* [ y=x* [β,δ,ζ]/ Algorithms: x = x * [ y = x * [β, δ, ζ] / Complexidade Complexity Tempos usados Times used Adições Additions Deslocamentos Offsets (x * F’) = x2+x5; (x * F ') = x2 + x5; G’ G ’ 1788 1788 x2=xl«2, x3=x2«l, x4=x3-xl, x5=x4«8, (x * G’) = x5x2; x2 = xl «2, x3 = x2« l, x4 = x3-xl, x5 = x4 «8, (x * G ') = x5x2; 2 2 3 3 8 8 H’ H' 2923 2923 x2=xl«l, x3=xl+x2, x4=(x3«3)-xl, x5=x4-x2, (x * H' ) = (x4«7)-x5; x2 = xl «l, x3 = xl + x2, x4 = (x3« 3) -xl, x5 = x4-x2, (x * H ') = (x4-7) -x5; 4 4 3 3 4 4 I' I ' 2718 2718 x2=xl«l, x3=x2«l, x4=xl+x3, x5=x4+(x4«4), (x * I' ) = (x5«5)-x2; x2 = xl «l, x3 = x2« l, x4 = xl + x3, x5 = x4 + (x4 «4), (x * I ') = (x5 '5) -x2; 3 3 4 4 8 8 J' J ' 2528 2528 x2=xl«2, x3=xl+x2, x4=x3«4, x5=x4-xl, (x * J’) = x5«5; x2 = xl «2, x3 = xl + x2, x4 = x3« 4, x5 = x4-xl, (x * J ') = x5' 5; 2 2 3 3 4 4 a’ The' 41/128 41/128 x2=x+(x»5); x3=x2»2; (x * a’)=x3+(x»4); (x * β’)=x2-x3; x2 = x + (x »5); x3 = x2 »2; (x * a ’) = x3 + (x» 4); (x * β ’) = x2-x3; 3 3 3 3 2 2 β’ β ’ 99/128 99/128 γ’ γ ’ 113/128 113/128 x2=(x»3)- (x»7); x3=x2- (x»ll); (x * δ’)=x2+(x3»l); (x * γ’)=x-x2; x2 = (x »3) - (x» 7); x3 = x2- (x »ll); (x * δ ’) = x2 + (x3» l); (x * γ ’) = x-x2; 4 4 4 4 2 2 δ* δ * 719/4096 719/4096 ε’ ε ’ 1533/2048 1533/2048 x2=(x»9)-x; (x* ζ’) = x»l; (x* ε’) = (x2»2)-x2; x2 = (x »9) -x; (x * ζ ’) = x» l; (x * ε ’) = (x2 »2) -x2; 2 2 3 3 2 2 ζ’ ζ ’ 1/2 1/2 Complexidade de uma transformada 1D escalonada: Complexity of a scaled 1D transform: 44 44 20 20

Petição 870180133578, de 24/09/2018, pág. 63/169Petition 870180133578, of 9/24/2018, p. 63/169

57/6957/69

Fator Factor Valor Value Algoritmos: x=x* [ y=x* [β,δ,ζ]/ Algorithms: x = x * [ y = x * [β, δ, ζ] / Complexidade Complexity Tempos usados Times used Adições Additions Deslocamentos Offsets Complexidade total de escalonamento 2D: Total 2D scaling complexity: 160 160 192 192 Complexidade de uma transformada 2D completa: Complexity of a complete 2D transform: 865 865 576 576

[00114] Para ilustrar como o módulo IDCT 48 pode usar os fatores de escalonamento, valores constantes, e algoritmos providos nas tabelas acima, considere a Tabela 3 acima. Para aplicar uma transformada de cosseno discreta inversa utilizando os valores na Tabela 3, o módulo de entrada 140 no módulo IDCT 48 pode receber uma matriz 8x8 de coeficiente. A seguir, o módulo de escalonamento 142 escalona um coeficiente na posição [0,0] da matriz por um fator A; escalona um coeficiente na posição [0,1] da matriz por um fator B; escalona um coeficiente na posição [0,2] da matriz por um fator C; escalona um coeficiente na posição [0,3] da matriz por um fator D; escalona um coeficiente na posição [0,4] da matriz pelo fator A; escalona um coeficiente na posição [0,5] da matriz pelo fator D; escalona um coeficiente na posição [0,6] da matriz pelo fator C; escalona um coeficiente na posição [0,7] da matriz pelo fator B; escalona um coeficiente na posição [1,0] da matriz pelo fator B; escalona um coeficiente na posição [1,1] da matriz pelo fator E; escalona um coeficiente na posição [1,2] da matriz por um fator F; escalona um coeficiente na posição [1,3] da matriz por um fator G; escalona um coeficiente na posição [1,4] da matriz pelo fator B; escalona um coeficiente na posição [1,5] da matriz pelo fator G; escalona um coeficiente na posição [1,6] da matriz pelo fator F; escalona um coeficiente na posição [1,7] da matriz pelo fator E; escalona um coeficiente na posição [2,0] da matriz pelo fator C; escalona um[00114] To illustrate how the IDCT 48 module can use the scaling factors, constant values, and algorithms provided in the tables above, consider Table 3 above. To apply an inverse discrete cosine transform using the values in Table 3, input module 140 in module IDCT 48 can receive an 8x8 coefficient matrix. Then, the scaling module 142 scales a coefficient at the position [0,0] of the matrix by a factor A; scales a coefficient at position [0.1] of the matrix by a factor B; scale a coefficient at position [0,2] of the matrix by a factor C; scales a coefficient at position [0.3] of the matrix by a factor D; schedules a coefficient at position [0.4] of the matrix by factor A; scales a coefficient at position [0.5] of the matrix by factor D; escalates a coefficient at position [0.6] of the matrix by factor C; scale a coefficient at position [0.7] of the matrix by factor B; escalates a coefficient at position [1.0] of the matrix by factor B; scales a coefficient at position [1,1] of the matrix by factor E; scales a coefficient at position [1,2] of the matrix by a factor F; scales a coefficient at position [1,3] of the matrix by a G factor; scales a coefficient at position [1,4] of the matrix by factor B; scale a coefficient at position [1.5] of the matrix by the G factor; scales a coefficient at position [1,6] of the matrix by the F factor; scales a coefficient at position [1,7] of the matrix by factor E; escalates a coefficient at position [2,0] of the matrix by factor C; schedule one

Petição 870180133578, de 24/09/2018, pág. 64/169Petition 870180133578, of 9/24/2018, p. 64/169

58/69 coeficiente na posição [2,1] da matriz pelo fator F; escalona um coeficiente na posição [2,2] da matriz por um fator H; escalona um coeficiente na posição [2,3] da matriz por um fator I; escalona um coeficiente na posição [2,4] da matriz pelo fator C; escalona um coeficiente na posição [2,5] da matriz pelo fator I; escalona um coeficiente na posição [2,6] da matriz pelo fator H; escalona um coeficiente na posição [2,7] da matriz pelo fator F; escalona um coeficiente na posição [3,0] da matriz pelo fator D; escalona um coeficiente na posição [3,1] da matriz pelo fator G; escalona um coeficiente na posição [3,2] da matriz pelo fator I; escalona um coeficiente na posição [3,3] da matriz pelo fator J; escalona um coeficiente na posição [3,4] da matriz pelo fator D; escalona um coeficiente na posição [3,5] da matriz pelo fator J; escalona um coeficiente na posição [3,6] da matriz pelo fator I; escalona um coeficiente na posição [3,7] da matriz pelo fator G; escalona um coeficiente na posição [4,0] da matriz pelo fator A; escalona um coeficiente na posição [4,1] da matriz pelo fator B; escalona um coeficiente na posição [4,2] da matriz pelo fator C; escalona um coeficiente na posição [4,3] da matriz pelo fator D; escalona um coeficiente na posição [4,4] da matriz pelo fator A; escalona um coeficiente na posição [4,5] da matriz pelo fator D; escalona um coeficiente na posição [4,6] da matriz pelo fator C; escalona um coeficiente na posição [4,7] da matriz pelo fator B; escalona um coeficiente na posição [5,0] da matriz pelo fator D; escalona um coeficiente na posição [5,1] da matriz pelo fator G; escalona um coeficiente na posição [5,2] da matriz pelo fator I; escalona um coeficiente na posição [5,3] da matriz pelo fator J; escalona um coeficiente na posição [5,4] da matriz pelo fator D; escalona um coeficiente na posição58/69 coefficient in the position [2,1] of the matrix by the F factor; scales a coefficient at position [2,2] of the matrix by an H factor; scales a coefficient at position [2,3] of the matrix by a factor I; scales a coefficient at position [2,4] of the matrix by factor C; scale a coefficient at position [2,5] of the matrix by factor I; scales a coefficient at position [2,6] of the matrix by factor H; scales a coefficient at position [2,7] of the matrix by the F factor; scales a coefficient at position [3.0] of the matrix by factor D; scales a coefficient at position [3.1] of the matrix by the G factor; scales a coefficient at position [3,2] of the matrix by factor I; scales a coefficient at position [3,3] of the matrix by factor J; scales a coefficient at position [3,4] of the matrix by factor D; scales a coefficient at position [3,5] of the matrix by factor J; scales a coefficient at position [3,6] of the matrix by factor I; scales a coefficient at position [3.7] of the matrix by the G factor; scale a coefficient at position [4.0] of the matrix by factor A; scales a coefficient at position [4.1] of the matrix by factor B; scales a coefficient at position [4.2] of the matrix by factor C; scales a coefficient at position [4,3] of the matrix by factor D; scales a coefficient at position [4.4] of the matrix by factor A; scales a coefficient at position [4,5] of the matrix by factor D; scale a coefficient at position [4.6] of the matrix by factor C; scales a coefficient at position [4,7] of the matrix by factor B; scales a coefficient at position [5,0] of the matrix by factor D; scales a coefficient at position [5.1] of the matrix by the G factor; scales a coefficient at position [5.2] of the matrix by factor I; scales a coefficient at position [5.3] of the matrix by factor J; scales a coefficient at position [5.4] of the matrix by factor D; escalates a coefficient in the position

Petição 870180133578, de 24/09/2018, pág. 65/169Petition 870180133578, of 9/24/2018, p. 65/169

59/69 [5,5] da matriz pelo fator J; escalona um coeficiente na posição [5,6] da matriz pelo fator I; escalona um coeficiente na posição [5,7] da matriz pelo fator G; escalona um coeficiente na posição [6,0] da matriz pelo fator C; escalona um coeficiente na posição [6,1] da matriz pelo fator F; escalona um coeficiente na posição [6,2] da matriz por um fator H; escalona um coeficiente na posição [6,3] da matriz por um fator I; escalona um coeficiente na posição [6,4] da matriz pelo fator C; escalona um coeficiente na posição [6,5] da matriz pelo fator I; escalona um coeficiente na posição [6,6] da matriz pelo fator H; escalona um coeficiente na posição [6,7] da matriz pelo fator F; escalona um coeficiente na posição [7,0] da matriz pelo fator B; escalona um coeficiente na posição [7,1] da matriz por um fator E; escalona um coeficiente na posição [7,2] da matriz por um fator F; escalona um coeficiente na posição [7,3] da matriz por um fator G; escalona um coeficiente na posição [7,4] da matriz pelo fator B; escalona um coeficiente na posição [7,5] da matriz pelo fator G; escalona um coeficiente na posição [7,6] da matriz pelo fator F; e escalona um coeficiente na posição [7,7] da matriz pelo fator E. Quando o módulo de escalonamento 142 escalona esses coeficientes, o módulo de escalonamento 142 pode usar os valores A = 1024 , 7? = 1138 , C = 1730 , D = 1609 , E = 1264 , F = 1922 , G= 1788 , H = 2923 , / = 2718, e J = 2528 , conforme especificado na Tabela 6. Esses coeficientes escalonados constituem uma matriz de coeficientes escalonados.59/69 [5.5] of the matrix by factor J; scales a coefficient at position [5.6] of the matrix by factor I; scales a coefficient at position [5,7] of the matrix by the G factor; schedules a coefficient at position [6.0] of the matrix by factor C; scales a coefficient at position [6.1] of the matrix by the F factor; scale a coefficient at position [6.2] of the matrix by an H factor; scales a coefficient at position [6.3] of the matrix by a factor I; scale a coefficient at position [6.4] of the matrix by factor C; scales a coefficient at position [6.5] of the matrix by factor I; scales a coefficient at position [6.6] of the matrix by factor H; scales a coefficient at position [6,7] of the matrix by the F factor; scale a coefficient at position [7.0] of the matrix by factor B; scales a coefficient at position [7.1] of the matrix by an E factor; scales a coefficient at position [7,2] of the matrix by an F factor; scales a coefficient at position [7.3] of the matrix by a G factor; scales a coefficient at position [7.4] of the matrix by factor B; scales a coefficient at position [7,5] of the matrix by the G factor; scale a coefficient at position [7.6] of the matrix by the F factor; and scale a coefficient at position [7,7] of the matrix by factor E. When scaling module 142 scales these coefficients, can scaling module 142 use the values A = 1024, 7? = 1138, C = 1730, D = 1609, E = 1264, F = 1922, G = 1788, H = 2923, / = 2718, and J = 2528, as specified in Table 6. These scaled coefficients constitute a matrix of coefficients staggered.

[00115] Após o módulo de escalonamento 142 escalonar os coeficientes, o módulo de transformada inversa[00115] After the scaling module 142 scaling the coefficients, the inverse transform module

6 pode aplicar uma transformada a cada vetor linha da matriz de coeficientes escalonados para produzir uma matriz6 can apply a transform to each line vector of the scaled coefficient matrix to produce a matrix

Petição 870180133578, de 24/09/2018, pág. 66/169Petition 870180133578, of 9/24/2018, p. 66/169

60/69 de coeficientes intermediários e aplicar a transformada a cada vetor coluna da matriz de coeficientes intermediários para produzir uma matriz de coeficientes transformados. O módulo de transformada inversa 146 pode aplicar a transformada a um vetor linha ou a um vetor coluna por meio de: cálculo de um valor xo’ ao adicionar xo e X4; cálculo de um valor X4 ’ ao adicionar xo e -X4; cálculo de um valor (X2*a) ao multiplicar X2 por um valor a; cálculo de um valor (Χ6*β) ao multiplicar Xô por um valor β; cálculo de um valor (Χ2*β) ao multiplicar X2 pelo valor β; cálculo de um valor (χδ*α) ao multiplicar Χδ por um valor a; cálculo de um valor X2 ’ ao adicionar (X2*a) e - (Χ6*β) ; cálculo de um valor X6’ ao adicionar (χδ*α) e (Χ2*β) ; cálculo de um valor xo ao adicionar xo’ e xô’; calculando um valor X4 ao adicionar X4 ’ e X2 ’; calculando um valor X2 ao adicionar X4 ’ e -X2 ’; calculando um valor Χδ ao adicionar xo’ e -xô’; calculando um valor χγ' ao adicionar xi' e -X7, calculando um valor xi ’ ao adicionar xi e X7; calculando um valor X3 ’ ao multiplicar X3 e raiz quadrada de dois; calculando um valor X5 ’ ao multiplicar X5 e raiz quadrada de dois; calculando um valor X7 ao adicionar X7 ’ e X5 ’; calculando um valor X3 ao adicionar xi' e -X3 ’; calculando um valor X5 ao adicionar X7 ’ e -X5 ’; calculando um valor xi ao adicionar X3 ’ e xi' calculando um valor (Χ7’’*ε) ao multiplicar X7 e um valor ε; calculando um valor (Χ7’’*ζ) ao multiplicar X7 e um valor ζ calculando um valor (Χ3’’*γ) ao multiplicar X3 e um valor γ; calculando um valor (Χ3’’*δ) ao multiplicar X3 e um valor δ; calculando um valor (Χ5’’*δ) ao multiplicar X5 e o valor δ; calculando um valor (Χ5’’*γ) ao multiplicar X5 e o valor γ; calculando um valor (χι’’*ζ) ao multiplicar xi e o valor ζ calculando um valor (χι’’*ε)60/69 of intermediate coefficients and apply the transform to each column vector of the matrix of intermediate coefficients to produce a matrix of transformed coefficients. The inverse transform module 146 can apply the transform to a row vector or a column vector by: calculating an xo 'value by adding xo and X4; calculating an X4 'value by adding xo and -X4; calculating a value (X2 * a) by multiplying X2 by a value a; calculation of a value (Χ6 * β) by multiplying Xô by a β value; calculation of a value (Χ2 * β) by multiplying X2 by the value β; calculating a value (χδ * α) by multiplying Χδ by a value a; calculation of an X2 'value by adding (X2 * a) and - (Χ6 * β); calculation of an X6 ’value by adding (χδ * α) and (Χ2 * β); calculating an xo value by adding xo 'and xô'; calculating an X4 value by adding X4 'and X2'; calculating an X2 value by adding X4 'and -X2'; calculating a Χδ value by adding xo 'and -xô'; calculating an χγ 'value when adding xi' and -X7, calculating an xi 'value when adding xi and X7; calculating an X3 'value by multiplying X3 and square root of two; calculating an X5 'value by multiplying X5 and square root of two; calculating an X7 value by adding X7 'and X5'; calculating an X3 value by adding xi 'and -X3'; calculating an X5 value by adding X7 'and -X5'; calculating an xi value by adding X3 ’and xi 'by calculating a value (Χ7’ ’* ε) by multiplying X7 and an ε value; calculating a value (Χ7 ’’ * ζ) when multiplying X7 and a value ζ calculating a value (Χ3 ’’ * γ) when multiplying X3 and a γ value; calculating a value (Χ3 ’’ * δ) by multiplying X3 and a δ value; calculating a value (Χ5 ’’ * δ) by multiplying X5 and the value δ; calculating a value (Χ5 ’’ * γ) by multiplying X5 and the value γ; calculating a value (χι ’’ * ζ) by multiplying xi and the value ζ calculating a value (χι ’’ * ε)

Petição 870180133578, de 24/09/2018, pág. 67/169Petition 870180133578, of 9/24/2018, p. 67/169

61/69 ao multiplicar xi e o valor ε; calculando um valor x-j' ' ' ao adicionar (Χ7*ε) e -(χι*ζ); calculando um valor X3'' ' ao adicionar (Χ3*γ) e -(Χ5*δ); calculando um valor x$''' ao adicionar (Χ5π*γ) e (Χ3*δ) ; calculando um valor xi' ' ' ao adicionar (χι*ε) e (Χ7*ζ); calculando um valor Xo ao adicionar xj' ' ' e xo; calculando um valor Xi ao adicionar X4 e X5' ' ' ; calculando um valor X2 ao adicionar X2 e X3' ' ' calculando um valor X3 ao adicionar xô e x-j' ' ' ; calculando um valor X4 ao adicionar xô e -xi'' ' ; calculando um valor X5 ao adicionar X2 e -X3'' ' ; calculando um valor Xô ao adicionar X4 e -X5' ' ' ; calculando um valor X7 ao adicionar xo e -xi' ’ ’ , em que xo, xi, X2, X3, X4, X5, X6, X7 são coeficientes em um vetor linha ou em um vetor coluna e Xo, Xi, X2, X3 λ X4, X5, Χβ, e X7 são valores de saída da transformada. Ao realizar esses cálculos, o módulo de transformada inversa 146 utiliza os valores fracionários α = 41/128, β = 99/128, γ = 1522/2048, δ = 1/2, ε = 113/128, e ζ = 719/4096, produtos através dos quais são computados pelos algoritmos sem multiplicador conforme especificado na Tabela 3.61/69 when multiplying xi and the value ε; calculating an xj value '''by adding (Χ7 * ε) and - (χι * ζ); calculating an X3 value '''when adding (Χ3 * γ) and - (Χ5 * δ); calculating a value x $ '''when adding (Χ5 π * γ) and (Χ3 * δ); calculating a value xi '''when adding (χι * ε) and (Χ7 * ζ); calculating an Xo value by adding xj '''andxo; calculating an Xi value when adding X4 and X5 '''; calculating an X2 value when adding X2 and X3 '''calculating an X3 value when adding xô and xj'''; calculating an X4 value when adding xô and -xi '''; calculating an X5 value when adding X2 and -X3 '''; calculating a Xô value when adding X4 and -X5 '''; calculating an X7 value when adding xo and -xi ''', where xo, xi, X2, X3, X4, X5, X6, X7 are coefficients in a row vector or in a column vector and Xo, Xi, X2, X3 λ X4, X5, Χβ, and X7 are output values of the transform. When performing these calculations, the inverse transform module 146 uses the fractional values α = 41/128, β = 99/128, γ = 1522/2048, δ = 1/2, ε = 113/128, and ζ = 719 / 4096, products by which they are computed by the algorithms without a multiplier as specified in Table 3.

[00116] O código a seguir contém uma implementação de linguagem-C exemplar da transformada 270:[00116] The following code contains an exemplary C-language implementation of transform 270:

/* Definir os valores de fatores de escalonamento / * Set the scaling factor values #define A #define A 1024 1024 üdefine B üdefine B 1138 1138 üdefine C üdefine C 1730 1730 üdefine D üdefine D 1609 1609 üdefine E üdefine E 1264 1264 üdefine F üdefine F 1922 1922 üdefine G üdefine G 1788 1788 üdefine H üdefine H 2923 2923 #define I #define I 2718 2718 #define J #define J 2528 2528 /* Definir a matriz de / * Define the matrix of fatores de escalonamento */ escalation factors * / static int scale [8*8] static int scale [8 * 8] = { = { A, B, C, D, A B C D, A, D, A, D, c, ç, B, B,

Petição 870180133578, de 24/09/2018, pág. 68/169Petition 870180133578, of 9/24/2018, p. 68/169

62/6962/69

Β, Ε,Β, Ε,

C, F,C, F,

D, G, Α, Β, D, G, C, F, Β, Ε, };D, G, Α, Β, D, G, C, F, Β, Ε,};

F, G, Η, I, I, J, C, D, I, J, Η, I, F, G,F, G, Η, I, I, J, C, D, I, J, Η, I, F, G,

Β, G,Β, G,

C, I,C, I,

D, J, Α, D, D, J, C, I, Β, G,D, J, Α, D, D, J, C, I, Β, G,

F, Ε, Η, F, I, D, C, Β, I, D, Η, F, F, Ε, void scaled_ld_idct (int *, int *); void idct (short *P) int block[8*8], block2[8*8], i;F, Ε, Η, F, I, D, C, Β, I, D, Η, F, F, Ε, void scaled_ld_idct (int *, int *); void idct (short * P) int block [8 * 8], block2 [8 * 8], i;

/* Escalonar cada um dos coeficientes de entrada*/ for (i=0; i<64; i++) block[i] = scale[i] * P[i] ;/ * Scale each of the input coefficients * / for (i = 0; i <64; i ++) block [i] = scale [i] * P [i];

/* Adicionar polarização para o coeficiente DC */ block[0] += 1 « 12;/ * Add polarization for the DC coefficient * / block [0] + = 1 «12;

/* Aplicar a transformada de cosseno discreta de vetor inverse para cada linha e coluna do bloco */ for (i=0; i<8; i++) scaled_ld_idct (block + i*8, block2 + i); for (i=0; i<8; i++) scaled_ld_idct (block2 + i*8, block + i);/ * Apply the inverse vector discrete cosine transform for each row and column of the block * / for (i = 0; i <8; i ++) scaled_ld_idct (block + i * 8, block2 + i); for (i = 0; i <8; i ++) scaled_ld_idct (block2 + i * 8, block + i);

/* Deslocar à direita cada um dos coeficientes transformados */ for (i=0; i<64; i++)/ * Shift each transformed coefficient to the right * / for (i = 0; i <64; i ++)

P[i] = block[i] » 13;P [i] = block [i] »13;

} #define mul_l(y,z) {} #define mul_l (y, z) {

int y2, y3;int y2, y3;

y2 = (y » 3) - (y » 7); y3 = y2 - (y » 11);y2 = (y »3) - (y» 7); y3 = y2 - (y »11);

Petição 870180133578, de 24/09/2018, pág. 69/169Petition 870180133578, of 9/24/2018, p. 69/169

63/69 ζ = y2 + (y3 » 1) ; y = y - y2;63/69 ζ = y2 + (y3 »1); y = y - y2;

} #define mul_2(y,z) {} #define mul_2 (y, z) {

int y2; int y2; y2 = (y y2 = (y » » 9) 9) - y; - y; z = y » z = y » 1; 1; y = (y2 y = (y2 » » 2) 2) - y2; - y2;

} #define mul_3(y,z) {} #define mul_3 (y, z) {

int y2, y3; y2 = y + (y » 5) ; y3 = y2 » 2; y = y3 + (y » 4); z = y2 - y3;int y2, y3; y2 = y + (y »5); y3 = y2 »2; y = y3 + (y »4); z = y2 - y3;

} void scaled_ld_idct (int *in, int *out) {} void scaled_ld_idct (int * in, int * out) {

int xO, xl, x2, x3, x4, x5, x6, x7, xa, xl = in[l]; x3 = in[3]; x5 = in [5]; x7 = in[7];int xO, xl, x2, x3, x4, x5, x6, x7, xa, xl = in [l]; x3 = in [3]; x5 = in [5]; x7 = in [7];

xb;xb;

xa = xl xa = xl + x7; + x7; xb = xl xb = xl - x7; - x7;

xl = xa xl = xa + + x3; x3; x3 = xa x3 = xa - - x3; x3; x7 = xb x7 = xb + + x5; x5;

Petição 870180133578, de 24/09/2018, pág. 70/169Petition 870180133578, of 9/24/2018, p. 70/169

64/6964/69

x5 = xb - x5 = xb - x5; x5; mui 1(x3, very 1 (x3, xa) ; xa); mui 1(x5, very 1 (x5, xb) ; xb); x3 = x3 - x3 = x3 - xb; xb; x5 = x5 + x5 = x5 + xa; shah; mui 2 (xl mui 2 (xl , xa) , xa) mui 2 (x7 very 2 (x7 , xb) , xb) xl = xl + xl = xl + xb; xb; x7 = x7 - x7 = x7 - xa; shah; xO = in[ xO = in [ 0] ; 0]; x2 = in[: x2 = in [: 2] ; 2] ; x4 = in [ x4 = in [ 4] ; 4]; x6 = in[ x6 = in [ 6] ; 6]; mui 3(x2, very 3 (x2, xa) ; xa); mui 3(x6, very 3 (x6, xb) ; xb); x2 = x2 - x2 = x2 - xb; xb; x6 = x6 + x6 = x6 + xa; shah;

xa = χθ + x4; xb = xO - x4;xa = χθ + x4; xb = xO - x4;

xO = xa + x6; xO = xa + x6; x6 = xa - x6; x4 = xb + x2; x2 = xb - x2; out[0*8] = xO x6 = xa - x6; x4 = xb + x2; x2 = xb - x2; out [0 * 8] = xO + + xl; xl; out[l*8] = x4 out [l * 8] = x4 + + x5; x5; out[2*8] = x2 out [2 * 8] = x2 + + x3; x3; out[3*8] = x6 out [3 * 8] = x6 + + x7; x7;

Petição 870180133578, de 24/09/2018, pág. 71/169Petition 870180133578, of 9/24/2018, p. 71/169

65/6965/69

out[4*8] out [4 * 8] = x6 = x6 - x7; - x7; out[5*8] out [5 * 8] = x2 = x2 - - x3; x3; out[6*8] out [6 * 8] = x4 = x4 - - x5; x5; out[7*8] out [7 * 8] = xO = xO - - xl; xl;

} void scaled_ld_fdct (int *, int *); void fdct (short *P) {} void scaled_ld_fdct (int *, int *); void fdct (short * P) {

int block[8*8], block2[8*8], i;int block [8 * 8], block2 [8 * 8], i;

for (i=0; i<64; i++) block[i] = P[i] « 7;for (i = 0; i <64; i ++) block [i] = P [i] «7;

for (i=0; i<8; i++) scaled_ld_fdct (block + i, block2 + i*8);for (i = 0; i <8; i ++) scaled_ld_fdct (block + i, block2 + i * 8);

for (i=0; i<8; i++) scaled_ld_fdct (block2 + i, block + i*8); for (i=0; i<64; i++)for (i = 0; i <8; i ++) scaled_ld_fdct (block2 + i, block + i * 8); for (i = 0; i <64; i ++)

P[i]=(block[i]*scale[i]+0x7FFFF(block[i]»31)) »20;P [i] = (block [i] * scale [i] + 0x7FFFF (block [i] »31))» 20;

} void scaled_ld_fdct (int *in, int *out) {} void scaled_ld_fdct (int * in, int * out) {

int int xO, xO, xl, x2, x3, xl, x2, x3, x4, x4, x5, x6, x5, x6, xO xO = = in[0*8] in [0 * 8] + + in[7*8] in [7 * 8] xl xl = = in[0*8] in [0 * 8] - - in[7*8] in [7 * 8] x4 x4 = = in[l*8] in [l * 8] + + in[6*8] in [6 * 8] x5 x5 = = in[l*8] in [l * 8] - - in[6*8] in [6 * 8] x2 x2 = = in[2*8] in [2 * 8] + + in[5*8] in [5 * 8] x3 x3 = = in[2*8] in [2 * 8] - - in[5*8] in [5 * 8] x6 x6 = = in[3*8] in [3 * 8] + + in[4*8] in [4 * 8] x7 x7 = = in[3*8] in [3 * 8] - - in[4*8] in [4 * 8] mui very 1 (x3 1 (x3 , xa) ; , xa);

Petição 870180133578, de 24/09/2018, pág. 72/169Petition 870180133578, of 9/24/2018, p. 72/169

66/69 mul_l(x5, xb); x3 = x3 + xb; x5 = x5 - xa;66/69 mul_l (x5, xb); x3 = x3 + xb; x5 = x5 - xa;

mul mul 2 (xl, xa); 2 (xl, xa); mui very 2 (x7, xb); 2 (x7, xb); xl = xl = xl - xb; xl - xb; x7 = x7 = x7 + xa; x7 + xa; xa = xa = xl + x3; xl + x3; x3 = x3 = xl - x3; xl - x3; xb = xb = x7 + x5; x7 + x5; x5 = x5 = x7 - x5; x7 - x5; xl = xl = xa + xb; xa + xb; x7 = x7 = xa - xb; xa - xb; xa = xa = xO + x6; xO + x6; x6 = x6 = xO - x6; xO - x6; xb = xb = x4 + x2; x4 + x2; x2 = x2 = x4 - x2; x4 - x2; xO = xO = xa + xb; xa + xb; x4 = x4 = xa - xb; xa - xb; mul mul 3(x2, xa); 3 (x2, xa); mul mul 3 (x6,xb); 3 (x6, xb); x2 = x2 = xb + x2; xb + x2; x6 = x6 = x6 - xa; x6 - xa; out[0] = xO; out [0] = xO; out[l] = xl; out [l] = xl; out out [2] = x2; [2] = x2; out out [3] = x3; [3] = x3; out[4] = x4; out [4] = x4; out [5] = x5; out [5] = x5;

Petição 870180133578, de 24/09/2018, pág. 73/169Petition 870180133578, of 9/24/2018, p. 73/169

67/69 out[6] = x6;67/69 out [6] = x6;

out[7] = x7;out [7] = x7;

[00117] A Figura 11 é um fluxograma ilustrando uma transformada exemplar 280 usada pelo módulo de transformada direta 214, na Figura 11, os valores Xo, Xi, X2, X3, X4, X5, Χδ, e X7 representam coeficientes de saida e os valores xo, xi, X2, X3, X4, X5, xô, e X7 representam valores de entrada. O valor associado a uma linha após um circulo que abrange um símbolo + é o resultado da adição dos valores associados com as setas que apontam para o círculo. O valor associado com uma linha após um círculo que abrange um símbolo x é o resultado da multiplicação do coeficiente posicionado próximo ao círculo e valores associados com as linhas que passam através dos círculos. O símbolo próximo a uma seta representa uma negação do valor associado com a seta. Por exemplo, se o valor 10 for associado a uma seta antes de um símbolo o valor[00117] Figure 11 is a flowchart illustrating an exemplary transform 280 used by the direct transform module 214, in Figure 11, the values Xo, Xi, X2, X3, X4, X5, Χδ, and X7 represent output coefficients and the xo, xi, X2, X3, X4, X5, xô, and X7 values represent input values. The value associated with a line after a circle that encloses a + symbol is the result of adding the values associated with the arrows that point to the circle. The value associated with a line after a circle that encloses an x symbol is the result of multiplying the coefficient positioned next to the circle and values associated with the lines passing through the circles. The symbol next to an arrow represents a negation of the value associated with the arrow. For example, if the value 10 is associated with an arrow before a symbol, the value

-10 é associado à seta após o símbolo Além disso, deve ser observado que as técnicas descritas acima para reduzir erro de arredondamento utilizando coeficientes negativados, e subtração, podem ser usadas no algoritmo-10 is associated with the arrow after the symbol In addition, it should be noted that the techniques described above to reduce rounding error using negative coefficients, and subtraction, can be used in the algorithm

190.190.

[00118] Na transformada 280, os valores de saída Xo a X7 são multiplicados pelos fatores 1, φ, φ,ψ, 42 !ψ, 42!ψ e ψ, respectivamente. Observar que esses fatores são as recíprocas dos valores decompostos de α’, β’, γ’, δ’, ε’, e ζ’ na transformada 270.[00118] In transform 280, the output values Xo to X7 are multiplied by the factors 1, φ, φ, ψ, 42! Ψ, 42! Ψ and ψ, respectively. Note that these factors are the reciprocal of the decomposed values of α ’, β’, γ ’, δ’, ε ’, and ζ’ in transform 270.

[00119] As técnicas aqui descritas podem ser implementadas em hardware, software, firmware, ou qualquer combinação dos mesmos. Quaisquer características descritas como módulos ou componentes podem ser implementadas em[00119] The techniques described here can be implemented in hardware, software, firmware, or any combination thereof. Any features described as modules or components can be implemented in

Petição 870180133578, de 24/09/2018, pág. 74/169Petition 870180133578, of 9/24/2018, p. 74/169

68/69 conjunto em um dispositivo lógico integrado, ou separadamente como dispositivos lógicos discretos, porém interoperáveis. Se implementadas em software, as técnicas podem ser realizadas ao menos em parte por um meio legível por computador compreendendo instruções que, quando executadas, realizam um ou mais dos métodos descritos acima. 0 meio legível por computador pode formar parte de um produto de programa de computador, o qual pode incluir materiais de embalagem. 0 meio legível por computador pode compreender memória de acesso aleatório (RAM) tal como memória de acesso aleatório, dinâmica, síncrona (SDRAM), memória de leitura (ROM), memória de acesso aleatório nãovolátil (NVRAM), memória de leitura programável eletricamente apagável (EEPROM), memória flash, meios de armazenamento de dados magnéticos ou óticos, e semelhantes. As técnicas adicionalmente ou alternativamente podem ser realizadas ao menos em parte por um meio de comunicação legível por computador que transporta ou comunica código na forma de instruções ou estruturas de dados e que pode ser acessado, lido, e/ou executado por um computador.68/69 together in an integrated logic device, or separately as discrete but interoperable logic devices. If implemented in software, the techniques can be performed at least in part by a computer-readable medium comprising instructions that, when executed, perform one or more of the methods described above. The computer-readable medium may form part of a computer program product, which may include packaging materials. The computer-readable medium may comprise random access memory (RAM) such as dynamic, synchronous, random access memory (SDRAM), read memory (ROM), non-volatile random access memory (NVRAM), electrically erasable programmable read memory (EEPROM), flash memory, magnetic or optical data storage media, and the like. The techniques can additionally or alternatively be performed at least in part by a computer-readable communication medium that carries or communicates code in the form of instructions or data structures and that can be accessed, read, and / or executed by a computer.

[00120] O código pode ser executado por um ou mais processadores, tal como um ou mais processadores de sinal digital (DSPs), microprocessadores de uso geral, circuitos integrados de aplicação específica (ASICs), arranjos de portas programáveis em campo (FPGAs), ou outros conjuntos de circuitos lógicos integrados ou discretos equivalentes. Conseqüentemente, o termo processador, conforme aqui usado pode se referir a qualquer uma entre estrutura anteriormente mencionada ou qualquer outra estrutura adequada para implementação das técnicas aqui descritas. Além disso, em alguns aspectos, a funcionalidade aqui descrita pode ser provida dentro de módulos de software ou módulos de hardware dedicados configurados para[00120] The code can be executed by one or more processors, such as one or more digital signal processors (DSPs), general purpose microprocessors, application specific integrated circuits (ASICs), field programmable port arrangements (FPGAs) , or other sets of equivalent integrated or discrete logic circuits. Consequently, the term processor, as used herein, can refer to any of the aforementioned structure or any other structure suitable for implementing the techniques described herein. In addition, in some respects, the functionality described here can be provided within software modules or dedicated hardware modules configured for

Petição 870180133578, de 24/09/2018, pág. 75/169Petition 870180133578, of 9/24/2018, p. 75/169

69/69 codificar e decodificar, ou incorporados em um codificadordecodificador (CODEC) de vídeo combinado.69/69 encode and decode, or incorporated into a combined video encoder (CODEC).

[00121] Várias modalidades da invenção foram descritas. Essas e outras modalidades estão dentro do escopo das reivindicações a seguir.[00121] Various embodiments of the invention have been described. These and other modalities are within the scope of the following claims.

Petição 870180133578, de 24/09/2018, pág. 76/169Petition 870180133578, of 9/24/2018, p. 76/169

1/41/4

Claims (13)

REIVINDICAÇÕES 1. Método de descompactação compreendendo: escalonar (172) cada coeficiente em uma matriz1. Unpacking method comprising: stagger (172) each coefficient in a matrix 8x8 de coeficientes codificados por um de um fator A, um fator B, um fator C, um fator D, um fator E, um fator F, um fator G, um fator H, um fator I, ou um fator J a fim de produzir uma matriz de coeficientes escalonados, em que /1 = 1024 , 5 = 1138, C = 1730 , £) = 1609 , £ = 1264 , £ = 1922 ,8x8 of coefficients encoded by one of a factor A, a factor B, a factor C, a factor D, a factor E, a factor F, a factor G, a factor H, a factor I, or a factor J in order to produce a staggered coefficient matrix, where / 1 = 1024, 5 = 1138, C = 1730, £) = 1609, £ = 1264, £ = 1922, G= 1788 , H = 2923 , I = 2718 , e J = 2528 ;G = 1788, H = 2923, I = 2718, and J = 2528; utilizar (176 a 186) aplicações repetidas de uma transformada unidimensional escalonada de ponto fixo para transformar a matriz de coeficientes escalonados em uma matriz de coeficientes transformados;use (176 to 186) repeated applications of a one-dimensional staggered fixed-point transform to transform the staggered coefficient matrix into a transformed coefficient matrix; deslocar à direita (188) os coeficientes transformados na matriz de coeficientes transformados a fim de produzir uma matriz de coeficientes ajustados;moving the transformed coefficients to the right (188) in the transformed coefficient matrix in order to produce an adjusted coefficient matrix; exibir um bloco 8x8 de pixels, em que cada pixel no bloco 8x8 de pixels inclui um valor de componente de pixel baseado em um coeficiente ajustado na matriz de coeficientes ajustados;display an 8x8 pixel block, where each pixel in the 8x8 pixel block includes a pixel component value based on an adjusted coefficient in the adjusted coefficient matrix; o método caracterizado pelo fato de que compreende adicionalmente:the method characterized by the fact that it additionally comprises: adicionar um termo de polarização de ponto médio a um coeficiente DC da matriz, em que o termo de valor de polarização de ponto médio é igual a 2 para a potência de 12; e deslocar à direita cada coeficiente na matriz de coeficientes transformados em treze posições para gerar uma matriz de valores de componentes de pixel.adding a midpoint bias term to a DC coefficient of the matrix, where the midpoint bias value term is equal to 2 for the power of 12; and shift each coefficient in the matrix of transformed coefficients to thirteen positions to the right to generate a matrix of pixel component values. 2. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que aplicar repetidamente a transformada unidimensional escalonada de ponto fixo compreende:2. Method, according to claim 1, characterized by the fact that repeatedly applying the one-dimensional staggered fixed-point transform comprises: de 24/09/2018, pág. 146/169of 09/24/2018, p. 146/169 2/4 aplicar (178) a transformada unidimensional escalonada de ponto fixo a cada vetor linha da matriz de coeficientes escalonados para produzir uma matriz de coeficientes intermediários; e aplicar (184) a transformada unidimensional escalonada de ponto fixo a cada vetor coluna da matriz de coeficientes intermediários para produzir uma matriz de coeficientes transformados.2/4 apply (178) the one-dimensional staggered fixed point transform to each line vector of the staggered coefficient matrix to produce an intermediate coefficient matrix; and applying (184) the one-dimensional staggered fixed point transform to each column vector of the matrix of intermediate coefficients to produce a matrix of transformed coefficients. 3. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que exibir o bloco 8x8 de pixels compreende exibir o bloco 8x8 de pixels como parte de um quadro de video em uma seqüência de video.3. Method, according to claim 1, characterized by the fact that displaying the 8x8 pixel block comprises displaying the 8x8 pixel block as part of a video frame in a video sequence. 4. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que exibir o bloco 8x8 de pixels compreende exibir o bloco 8x8 de pixels como parte de uma imagem estática.4. Method, according to claim 1, characterized by the fact that displaying the 8x8 pixel block comprises displaying the 8x8 pixel block as part of a static image. 5. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que o método compreende adicionalmente receber um fluxo de bits que inclui a matriz de coeficiente.5. Method, according to claim 1, characterized by the fact that the method additionally comprises receiving a bit stream that includes the coefficient matrix. 6. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que o método compreende adicionalmente:6. Method, according to claim 1, characterized by the fact that the method additionally comprises: construir o bloco de pixels ao incorporar valores de componentes de pixel na matriz de valores de componentes de pixel em pixels no bloco de pixels.build the pixel block by incorporating pixel component values into the pixel component value matrix in pixels in the pixel block. 7. Método, de acordo com a reivindicação 1, caracterizado pelo fato de que escalonar cada coeficiente na matriz 8x8 de coeficientes codificados compreende escalonar os coeficientes na matriz de coeficientes codificados sem utilizar operações de multiplicação ou divisão.7. Method, according to claim 1, characterized by the fact that scaling each coefficient in the 8x8 coded coefficient matrix comprises scaling the coefficients in the coded coefficient matrix without using multiplication or division operations. 8. Dispositivo para descompactar compreendendo:8. Unzip device comprising: de 24/09/2018, pág. 147/169of 09/24/2018, p. 147/169 3/4 mecanismos (142) para escalonar coeficientes em uma matriz 8x8 de coeficientes codificados por um de um fator A, um fator B, um fator C, um fator D, um fator E, um fator F, um fator G, um fator H, um fator I, ou um fator J a fim de produzir uma matriz de coeficientes escalonados, em que ,4 = 1024 , 5 = 1138, C = 1730 , £) = 1609 , £ = 1264 ,3/4 mechanisms (142) for scaling coefficients in an 8x8 matrix of coefficients encoded by one of a factor A, a factor B, a factor C, a factor D, a factor E, a factor F, a factor G, a factor H, a factor I, or a factor J to produce a staggered coefficient matrix, where, 4 = 1024, 5 = 1138, C = 1730, £) = 1609, £ = 1264, F = 1922 , G= 1788 , H = 2923 , I = 2718 , e J = 2528 ;F = 1922, G = 1788, H = 2923, I = 2718, and J = 2528; mecanismos (146) para usar aplicações repetidas de uma transformada unidimensional escalonada de ponto fixo para transformar a matriz de coeficientes escalonados em uma matriz de coeficientes transformados;mechanisms (146) for using repeated applications of a one-dimensional staggered fixed-point transform to transform the staggered coefficient matrix into a transformed coefficient matrix; mecanismos (148) para deslocar coeficientes transformados na matriz de à direita coeficientes transformados para produzir uma matriz de coeficientes ajustados;mechanisms (148) for displacing transformed coefficients in the matrix on the right transformed coefficients to produce an adjusted coefficient matrix; mecanismos (152) para emitir um bloco 8x8 de pixels, em que cada pixel no bloco de pixels inclui um valor de componentes de pixel com base em um coeficiente ajustado na matriz de coeficientes ajustados;mechanisms (152) for outputting an 8x8 pixel block, where each pixel in the pixel block includes a pixel component value based on an adjusted coefficient in the adjusted coefficient matrix; o dispositivo caracterizado pelo fato de que compreende adicionalmente:the device characterized by the fact that it additionally comprises: mecanismos para adicionar um termo de polarização de ponto médio a um coeficiente DC, em que o termo de polarização de ponto médio é igual a 2 para a potência de 12; e mecanismos para deslocar à direita cada coeficiente na matriz de coeficientes transformados em treze posições para gerar uma matriz de valores de componentes de pixel.mechanisms for adding a midpoint bias term to a DC coefficient, where the midpoint bias term is equal to 2 for the power of 12; and mechanisms for shifting each coefficient in the matrix of coefficients transformed into thirteen positions to generate a matrix of pixel component values. 9. Dispositivo, de acordo com a reivindicação 8, caracterizado pelo fato de que o dispositivo compreende mecanismos para receber um arquivo de midia que inclui dados a partir dos quais a matriz dos coeficientes de 24/09/2018, pág. 148/1699. Device, according to claim 8, characterized by the fact that the device comprises mechanisms to receive a media file that includes data from which the matrix of the coefficients of 09/24/2018, p. 148/169 4/4 codificados é derivada.4/4 encoded is derived. 10. Dispositivo, de acordo com a reivindicação 8,10. Device according to claim 8, caracterizado pelo fato de que o dispositivo adicionalmente: characterized by the fact that the device additionally: compreende understands 5 5 mecanismos para construir o bloco de mechanisms to build the block of pixels ao pixels to incorporar valores de componentes de pixel na incorporate pixel component values in the matriz de matrix of valores de componentes de pixel em pixels no pixel component values in pixels in the bloco de block of
pixels.pixels.
11. Dispositivo, de acordo com a reivindicação 8,11. Device according to claim 8, 10 caracterizado pelo fato de que o dispositivo compreende adicionalmente mecanismos para exibir o bloco de pixels.10 characterized by the fact that the device additionally comprises mechanisms for displaying the pixel block. 12. Dispositivo, de acordo com a reivindicação 8, caracterizado pelo fato de que os mecanismos para escalonar os coeficientes codificados escalonam os coeficientes12. Device, according to claim 8, characterized by the fact that the mechanisms to scale the coded coefficients scale the coefficients 15 codificados sem usar operações de multiplicação ou divisão.15 encoded without using multiplication or division operations. 13. Meio legivel por computador caracterizado pelo fato de que contém gravado o método de qualquer uma das reivindicações de 1 a 7.13. Computer-readable medium characterized by the fact that it contains the method of any one of claims 1 to 7. Petição 870180133578, de 24/09/2018, pág. 149/169Petition 870180133578, of 9/24/2018, p. 149/169 1/121/12 DISPOSITIVODEVICE FIGURA 1FIGURE 1 Petição 870180133578, de 24/09/2018, pág. 157/169Petition 870180133578, of 9/24/2018, p. 157/169 2/1212/2 DIPOSITIVO DE COMPUTAÇÃO 2COMPUTING DIPOSITIVE 2 FIGURÃFIGURE Petição 870180133578, de 24/09/2018, pág. 158/169Petition 870180133578, of 9/24/2018, p. 158/169 3/1212/3 FIGURA 3FIGURE 3 Petição 870180133578, de 24/09/2018, pág. 159/169Petition 870180133578, of 9/24/2018, p. 159/169 4/124/12 FIGURA 4FIGURE 4 Petição 870180133578, de 24/09/2018, pág. 160/169Petition 870180133578, of 9/24/2018, p. 160/169 5/125/12 FIGURA 5FIGURE 5 Petição 870180133578, de 24/09/2018, pág. 161/169Petition 870180133578, of 9/24/2018, p. 161/169 6/126/12 FIGURA 6FIGURE 6 Petição 870180133578, de 24/09/2018, pág. 162/169Petition 870180133578, of 9/24/2018, p. 162/169 7/127/12 FIGURA 7FIGURE 7 Petição 870180133578, de 24/09/2018, pág. 163/169Petition 870180133578, of 9/24/2018, p. 163/169 8/1212/8 FIGURA 8FIGURE 8 Petição 870180133578, de 24/09/2018, pág. 164/169Petition 870180133578, of 9/24/2018, p. 164/169 9/129/12 FIGURA 9FIGURE 9 Petição 870180133578, de 24/09/2018, pág. 165/169Petition 870180133578, of 9/24/2018, p. 165/169 10/1212/10 260260 FIGURA 10AFIGURE 10A Petição 870180133578, de 24/09/2018, pág. 166/169Petition 870180133578, of 9/24/2018, p. 166/169 11/1212/11 270270 FIGURA 10BFIGURE 10B Petição 870180133578, de 24/09/2018, pág. 167/169Petition 870180133578, of 9/24/2018, p. 167/169 12/1212/12 280280 FIGURA 11FIGURE 11 Petição 870180133578, de 24/09/2018, pág. 168/169Petition 870180133578, of 9/24/2018, p. 168/169
BRPI0713321A 2006-06-26 2007-06-26 efficient fixed-point approximations of discrete direct and inverse cosine transforms BRPI0713321B1 (en)

Applications Claiming Priority (13)

Application Number Priority Date Filing Date Title
US81669706P 2006-06-26 2006-06-26
US60/816,697 2006-06-26
US84136206P 2006-08-30 2006-08-30
US60/841,362 2006-08-30
US84719406P 2006-09-25 2006-09-25
US60/847,194 2006-09-25
US82966906P 2006-10-16 2006-10-16
US60/829,669 2006-10-16
US86953006P 2006-12-11 2006-12-11
US60/869,530 2006-12-11
US88393207P 2007-01-08 2007-01-08
US60/883,932 2007-01-08
PCT/US2007/072169 WO2008005757A2 (en) 2006-06-26 2007-06-26 Efficient fixed-point approximations of forward and inverse discrete cosine transforms

Publications (2)

Publication Number Publication Date
BRPI0713321A2 BRPI0713321A2 (en) 2012-03-13
BRPI0713321B1 true BRPI0713321B1 (en) 2018-12-04

Family

ID=38828732

Family Applications (1)

Application Number Title Priority Date Filing Date
BRPI0713321A BRPI0713321B1 (en) 2006-06-26 2007-06-26 efficient fixed-point approximations of discrete direct and inverse cosine transforms

Country Status (8)

Country Link
EP (1) EP2089812A2 (en)
JP (1) JP5129248B2 (en)
KR (1) KR100963459B1 (en)
CN (1) CN102037729B (en)
BR (1) BRPI0713321B1 (en)
CA (1) CA2654116C (en)
TW (1) TWI336444B (en)
WO (1) WO2008005757A2 (en)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103959780B (en) * 2011-12-15 2017-10-13 寰发股份有限公司 Quantization level capture device and method
KR101395143B1 (en) 2013-06-13 2014-05-21 이노뎁 주식회사 Integer transform method for image processing and device threof
US10432952B2 (en) * 2015-11-19 2019-10-01 Qualcomm Incorporated System and methods for fixed-point approximations in display stream compression (DSC)
US9870341B2 (en) * 2016-03-18 2018-01-16 Qualcomm Incorporated Memory reduction method for fixed point matrix multiply

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5754456A (en) * 1996-03-05 1998-05-19 Intel Corporation Computer system performing an inverse cosine transfer function for use with multimedia information
KR20000013653A (en) * 1998-08-12 2000-03-06 이종하 Forward/reverse optimum integer cosine transform apparatus and method
DE10116204A1 (en) * 2000-08-12 2002-02-21 Bosch Gmbh Robert Method for integer approximation of transformation coefficients as well as coders and decoders
WO2005032117A2 (en) * 2003-09-24 2005-04-07 Texas Instruments Incorporated 8x8 transform and quantization

Also Published As

Publication number Publication date
TWI336444B (en) 2011-01-21
CN102037729A (en) 2011-04-27
CA2654116C (en) 2013-04-02
JP5129248B2 (en) 2013-01-30
TW200823694A (en) 2008-06-01
CN102037729B (en) 2013-02-27
EP2089812A2 (en) 2009-08-19
KR100963459B1 (en) 2010-06-17
WO2008005757A3 (en) 2011-03-10
CA2654116A1 (en) 2008-01-10
JP2010505287A (en) 2010-02-18
WO2008005757A2 (en) 2008-01-10
KR20090028736A (en) 2009-03-19
BRPI0713321A2 (en) 2012-03-13

Similar Documents

Publication Publication Date Title
US8571340B2 (en) Efficient fixed-point approximations of forward and inverse discrete cosine transforms
US8606023B2 (en) Reduction of errors during computation of inverse discrete cosine transform
RU2439682C2 (en) Reduction of errors during calculation of reverse discrete cosine conversion
BRPI0713321B1 (en) efficient fixed-point approximations of discrete direct and inverse cosine transforms
RU2417423C2 (en) Efficient fixed-point approximation for direct and inverse discrete cosine transforms
BRPI0712996A2 (en) Efficient fixed-point approximations of discrete, direct, and inverse cosine transforms

Legal Events

Date Code Title Description
B15K Others concerning applications: alteration of classification

Ipc: G06F 17/14 (2006.01), H04N 19/44 (2014.01), H04N 1

B07A Application suspended after technical examination (opinion) [chapter 7.1 patent gazette]
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 04/12/2018, OBSERVADAS AS CONDICOES LEGAIS.