ES2983276T3 - Recorte de filtro de interpolación para vectores de movimiento de subimagen - Google Patents
Recorte de filtro de interpolación para vectores de movimiento de subimagen Download PDFInfo
- Publication number
- ES2983276T3 ES2983276T3 ES20770767T ES20770767T ES2983276T3 ES 2983276 T3 ES2983276 T3 ES 2983276T3 ES 20770767 T ES20770767 T ES 20770767T ES 20770767 T ES20770767 T ES 20770767T ES 2983276 T3 ES2983276 T3 ES 2983276T3
- Authority
- ES
- Spain
- Prior art keywords
- sub
- image
- block
- subimage
- sample
- Prior art date
- Legal status (The legal status 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 status listed.)
- Active
Links
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/70—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by syntax aspects related to video coding, e.g. related to compression standards
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/102—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
- H04N19/103—Selection of coding mode or of prediction mode
- H04N19/105—Selection of the reference unit for prediction within a chosen coding or prediction mode, e.g. adaptive choice of position and number of pixels used for prediction
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06V—IMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
- G06V10/00—Arrangements for image or video recognition or understanding
- G06V10/40—Extraction of image or video features
- G06V10/62—Extraction of image or video features relating to a temporal dimension, e.g. time-based feature extraction; Pattern tracking
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06V—IMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
- G06V20/00—Scenes; Scene-specific elements
- G06V20/40—Scenes; Scene-specific elements in video content
- G06V20/49—Segmenting video sequences, i.e. computational techniques such as parsing or cutting the sequence, low-level clustering or determining units such as shots or scenes
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/102—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
- H04N19/117—Filters, e.g. for pre-processing or post-processing
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/102—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
- H04N19/119—Adaptive subdivision aspects, e.g. subdivision of a picture into rectangular or non-rectangular coding blocks
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/102—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
- H04N19/12—Selection from among a plurality of transforms or standards, e.g. selection between discrete cosine transform [DCT] and sub-band transform or selection between H.263 and H.264
- H04N19/122—Selection of transform size, e.g. 8x8 or 2x4x8 DCT; Selection of sub-band transforms of varying structure or type
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/102—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
- H04N19/132—Sampling, masking or truncation of coding units, e.g. adaptive resampling, frame skipping, frame interpolation or high-frequency transform coefficient masking
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/134—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or criterion affecting or controlling the adaptive coding
- H04N19/136—Incoming video signal characteristics or properties
- H04N19/137—Motion inside a coding unit, e.g. average field, frame or block difference
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/134—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or criterion affecting or controlling the adaptive coding
- H04N19/157—Assigned coding mode, i.e. the coding mode being predefined or preselected to be further used for selection of another element or parameter
- H04N19/159—Prediction type, e.g. intra-frame, inter-frame or bidirectional frame prediction
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/169—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/169—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
- H04N19/17—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object
- H04N19/172—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object the region being a picture, frame or field
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/169—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
- H04N19/17—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object
- H04N19/174—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object the region being a slice, e.g. a line of blocks or a group of blocks
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/169—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
- H04N19/17—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object
- H04N19/176—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object the region being a block, e.g. a macroblock
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/169—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
- H04N19/184—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being bits, e.g. of the compressed video stream
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/169—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
- H04N19/186—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being a colour or a chrominance component
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/46—Embedding additional information in the video signal during the compression process
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/50—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
- H04N19/503—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving temporal prediction
- H04N19/51—Motion estimation or motion compensation
- H04N19/513—Processing of motion vectors
- H04N19/517—Processing of motion vectors by encoding
- H04N19/52—Processing of motion vectors by encoding by predictive encoding
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/50—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
- H04N19/593—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving spatial prediction techniques
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/80—Details of filtering operations specially adapted for video compression, e.g. for pixel interpolation
- H04N19/82—Details of filtering operations specially adapted for video compression, e.g. for pixel interpolation involving filtering within a prediction loop
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/85—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using pre-processing or post-processing specially adapted for video compression
- H04N19/86—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using pre-processing or post-processing specially adapted for video compression involving reduction of coding artifacts, e.g. of blockiness
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/90—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using coding techniques not provided for in groups H04N19/10-H04N19/85, e.g. fractals
- H04N19/96—Tree coding, e.g. quad-tree coding
Landscapes
- Engineering & Computer Science (AREA)
- Multimedia (AREA)
- Signal Processing (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Discrete Mathematics (AREA)
- Compression Or Coding Systems Of Tv Signals (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
Se describe un mecanismo de codificación de vídeo. El mecanismo incluye recibir un flujo de bits que comprende una imagen actual que incluye una subimagen codificada según una predicción mutua. Se determina un vector de movimiento para un bloque de la subimagen. Se aplica una función de recorte a las ubicaciones de muestra en un bloque de referencia para soportar la aplicación de un filtro de interpolación cuando el vector de movimiento apunta fuera de la subimagen y cuando se establece un indicador para indicar que la subimagen se trata como una imagen. El filtro de interpolación se aplica a los resultados de la función de recorte para obtener un valor de muestra previsto. El bloque se decodifica en función del valor de muestra previsto. El bloque se reenvía para su visualización como parte de una secuencia de vídeo decodificada. (Traducción automática con Google Translate, sin valor legal)
Description
DESCRIPCIÓN
Recorte de filtro de interpolación para vectores de movimiento de subimagen
CAMPO DE LA INVENCIÓN
La presente descripción se refiere en general a codificación de video, y se refiere específicamente a codificación de subimágenes de imágenes en codificación de video.
ANTECEDENTES DE LA INVENCIÓN
La cantidad de datos de video necesarios para representar incluso un video relativamente corto puede ser sustancial, que puede dar por resultado dificultades cuando los datos se van a transmitir o comunicarse de otro modo a través de una red de comunicaciones con capacidad de ancho de banda limitada. Por lo tanto, los datos de video en general se comprimen antes de que se comuniquen a través de las redes de telecomunicaciones actuales con módem. El tamaño de un video también puede ser un problema cuando el video se almacena en un dispositivo de almacenamiento debido a que se pueden limitar los recursos de memoria. Los dispositivos de compresión de video frecuentemente usan software y/o hardware en la fuente para codificar los datos de video antes de la transmisión o almacenamiento, disminuyendo de este modo la cantidad de datos necesarios para representar imágenes de video digitales. Los datos comprimidos entonces se reciben en el destino por un dispositivo de descompresión de video que decodifica los datos de video. Con recursos de red limitados y demandas cada vez mayores de mayor calidad de video, son deseables técnicas de compresión y descompresión mejoradas que mejoren la relación de compresión con poco o ningún sacrificio en la calidad de imagen.
El documento EP 2728876 A1 (LG ELECTRONICS INC [KR]) 7 de mayo de 2014 (07-05-2014) describe un método para realizar interpolación para predicción entre pantallas usando una muestra de píxeles de una imagen actual y una muestra de píxeles de una imagen de referencia.
El documento de HANNUKSELA MISKA M ET AL: "Sub-picture video coding for unequal error protection", 2010 18a CONFERENCIA EUROPEA DE PROCESAMIENTO DE SEÑALES, IEEE, 3 de septiembre de 2002 (03 09-2002), páginas 1-4, XP032754192. ISSN: 2219-5491 describe dos modos de codificación asociados a subimágenes: modo de predicción normal y modo de decodificación de subimágenes independientes.
El documento WO 2015/007946 A1 (NOKIA CORP [FI]) 22 de enero de 2015 (22-01-2015) describe que cada subimagen se procesaría como una imagen independiente, excepto que todas las subimágenes que constituyen una imagen compartan la misma información global, tal como SPS, PPS y conjuntos de imágenes de referencia.
BREVE DESCRIPCIÓN DE LA INVENCIÓN
Las modalidades de la presente invención se definen en las reivindicaciones independientes. Las características adicionales de las modalidades de la invención se presentan en las reivindicaciones dependientes. A continuación, las partes de la descripción y los dibujos que se refieren a modalidades anteriores que no comprenden necesariamente todas las características para implementar las modalidades de la invención reivindicada no se representan como modalidades de la invención, sino como ejemplos útiles para comprender las modalidades de la invención. En una modalidad, la descripción incluye un método implementado en un decodificador, el método que comprende: recibir, por un receptor del decodificador, un flujo de bits que comprende una imagen actual que incluye una subimagen codificada de acuerdo con interpredicción; determinar, por un procesador del decodificador, un vector de movimiento para un bloque de la subimagen; aplicar, por el procesador, una función de recorte a partes enteras de ubicaciones de muestra en el bloque de referencia para restringir que las partes enteras están dentro de la subimagen, cuando una bandera indica que la subimagen se trata como una imagen, y cuando un vector de movimiento para el bloque apunta fuera de la subimagen, en donde las ubicaciones de muestra se usan para un filtro de interpolación, el filtro de interpolación incluye un proceso de interpolación bilineal de muestras de luma, en donde el bloque incluye un bloque de muestras de luma, y en donde el valor de muestra predicho incluye un valor de muestra de luma predicha; aplicar, por el procesador, el filtro de interpolación a los resultados de la función de recorte para obtener un valor de muestra predicha; y decodificar, por el procesador, el bloque con base en el valor de muestra predicha. La interpredicción se puede realizar de acuerdo con uno de varios modos de interpredicción. Ciertos modos de interpredicción generan listas de candidatos de predictores de vector de movimiento tanto en el codificador como en el decodificador. Esto permite que el codificador señalice un vector de movimiento al señalizar el índice desde la lista de candidatos en lugar de señalizar el vector de movimiento completo. Además, algunos sistemas codifican subimágenes para extracción independiente. Esto permite que una subimagen actual se decodifique y se muestre sin decodificar información de otras subimágenes. Esto puede provocar errores cuando se emplea un vector de movimiento que apunta fuera de la subimagen debido a que los datos apuntados por el vector de movimiento pueden no estar decodificados y por lo tanto, pueden no estar disponibles. La presente descripción incluye una bandera que indica que una subimagen se debe tratar como una imagen. Cuando una subimagen actual se trata como una imagen, la subimagen actual se debe extraer sin referencia a otras subimágenes. Específicamente, el presente ejemplo emplea una función de recorte que se aplica cuando se aplican filtros de interpolación. Esta función de recorte garantiza que el filtro de interpolación no se base en datos de subimágenes adyacentes a fin de mantener la separación entre las subimágenes para soportar la extracción separada. Como tal, la función de recorte se aplica cuando se establece la bandera y un vector de movimiento apunta fuera de la subimagen actual. El filtro de interpolación entonces se aplica a los resultados de la función de recorte. Por consiguiente, el presente ejemplo proporciona funcionalidad adicional a un códec de video al impedir errores cuando se realiza la extracción de subimágenes. El filtro de interpolación incluye un proceso de interpolación bilineal de muestra de luma, en donde el bloque incluye un bloque de muestras de luma, y en donde el valor de muestra predicha incluye un valor de muestra de luma predicha.
Opcionalmente, en cualquiera de los aspectos anteriores, se proporciona otra implementación del aspecto, en donde el proceso de interpolación bilineal de muestra de luma recibe entradas que incluyen una ubicación de luma en unidades de muestra completas (xIntL, yIntL), en donde el proceso de interpolación bilineal de muestra de luma genera un valor de muestra de luma predicha (predSampleLXL), y en donde la función de recorte se aplica a las ubicaciones de muestra de acuerdo con: cuando subpic_treated_as_pic_flag[SubPicIdx] es igual a uno, aplica lo siguiente:
xInti = Clip3( SubPicLeftBoundaryPos, SubPicRightBoundaryPos, xIntL i ), y
yInti = Clip3( SubPicTopBoundaryPos, SubPicBotBoundaryPos, yIntL i ),
donde subpic_treated_as_pic_flag es el conjunto de banderas para indicar que la subimagen se trata como una imagen, SubPicIdx es un índice de la subimagen, xInti e yInti son una ubicación de muestra recortada en el índice i, SubPicRightBoundaryPos es una posición de un límite derecho de la subimagen, SubPicLeftBoundaryPos es una posición de un límite izquierdo de la subimagen, SubPicTopBoundaryPos es una posición de un límite superior de la subimagen, SubPicBotBoundaryPos es una posición de un límite inferior de la subimagen y Clip3 es la función de recorte de acuerdo con:
Í Xz < X
Clip3( x, y, z ) = y z > y
tz de otro modo
donde x, y, y z son valores de entrada numéricos.
Opcionalmente, en cualquiera de los aspectos anteriores, se proporciona otra implementación del aspecto, en donde el filtro de interpolación incluye un proceso de filtrado de interpolación de ocho derivaciones de muestra de luma, en donde el bloque incluye un bloque de muestras de luma, y en donde el valor de muestra predicha incluye un valor de muestra de luma predicha.
Opcionalmente, en cualquiera de los aspectos anteriores, se proporciona otra implementación del aspecto, en donde el proceso de filtrado de interpolación de ocho derivaciones de muestra de luma recibe entradas que incluyen una ubicación de luma en unidades de muestra completas (xIntL, yIntL), en donde el proceso de interpolación bilineal de muestra de luma genera un valor de muestra de luma predicha (predSampleLXL), y en donde la función de recorte se aplica a las ubicaciones de muestra de acuerdo con: cuando subpic_treated_as_pic_flag[SubPicIdx] es igual a uno, aplica lo siguiente:
xInti = Clip3( SubPicLeftBoundaryPos, SubPicRightBoundaryPos, xIntL i -3), y
yInti = Clip3( SubPicTopBoundaryPos, SubPicBotBoundaryPos, yIntL i -3),
donde subpic_treated_as_pic_flag es el conjunto de banderas para indicar que la subimagen se trata como una imagen, SubPicIdx es un índice de la subimagen, xInti e yInti son una ubicación de muestra recortada en el índice i, SubPicRightBoundaryPos es una posición de un límite derecho de la subimagen, SubPicLeftBoundaryPos es una posición de un límite izquierdo de la subimagen, SubPicTopBoundaryPos es una posición de un límite superior de la subimagen, SubPicBotBoundaryPos es una posición de un límite inferior de la subimagen y Clip3 es la función de recorte de acuerdo con:
Í Xz < X
Clip3( x, y, z ) = y z > y
z de otro modo
donde x, y, y z son valores de entrada numéricos.
Opcionalmente, en cualquiera de los aspectos anteriores, se proporciona otra implementación del aspecto, en donde el filtro de interpolación incluye un proceso de interpolación de muestra de croma, en donde el bloque incluye un bloque de muestras de croma, y en donde el valor de muestra predicha incluye un valor de muestra de croma predicha.
Opcionalmente, en cualquiera de los aspectos anteriores, se proporciona otra implementación del aspecto, en donde el proceso de interpolación de muestra de croma recibe entradas que incluyen una ubicación de croma en unidades de muestra completas (xIntC, yIntC), en donde el proceso de interpolación de muestra de croma genera un valor de muestra de croma predicha (predSampleLXC), y en donde la función de recorte se aplica a las ubicaciones de muestra de acuerdo con: cuando subpic_treated_as_pic_flag[SubPicIdx] es igual a uno, aplica lo siguiente:
xInti = Clip3( SubPicLeftBoundaryPos/SubWidthC, SubPicRightBoundaryPos/SubWidthC, xIntC i), y
yInti = Clip3( SubPicTopBoundaryPos/SubHeightC, SubPicBotBoundaryPos/SubHeightC, yIntC i),
donde subpic_treated_as_pic_flag es el conjunto de banderas para indicar que la subimagen se trata como una imagen, SubPicIdx es un índice de la subimagen, xInti e yInti son una ubicación de muestra recortada en el índice i, SubPicRightBoundaryPos es una posición de un límite derecho de la subimagen, SubPicLeftBoundaryPos es una posición de un límite izquierdo de la subimagen, SubPicTopBoundaryPos es una posición de un límite superior de la subimagen, SubPicBotBoundaryPos es una posición de un límite inferior de la subimagen, SubWidthC y SubHeightC indican una relación de velocidad de muestreo horizontal y vertical entre muestras de luma y croma y Clip3 es la función de recorte de acuerdo con:
( Xz < X
Clip3( x, y, z ) = y z > y
tz de otro modo
donde x, y, y z son valores de entrada numéricos.
En una modalidad, la descripción incluye un método implementado en un codificador, el método que comprende: particionar, por un procesador del codificador, una imagen actual en una subimagen y la subimagen en un bloque; determinar, por el procesador, codificar el bloque de acuerdo con interpredicción; seleccionar, por el procesador, un vector de movimiento para codificar el bloque; aplicar, por el procesador, una función de recorte a partes enteras de ubicaciones de muestra en el bloque de referencia para restringir que las partes enteras están dentro de la subimagen, cuando una bandera indica que la subimagen se trata como una imagen, y cuando un vector de movimiento para el bloque apunta fuera de la subimagen, en donde las ubicaciones de muestra se usan para un filtro de interpolación, el filtro de interpolación incluye un proceso de interpolación bilineal de muestras de luma, en donde el bloque incluye un bloque de muestras de luma, y en donde el valor de muestra predicho incluya un valor de muestra de luma predicha; aplicar, por el procesador, el filtro de interpolación a resultados de la función de recorte para obtener un valor de muestra predicha; codificar, por el procesador, el bloque en un flujo de bits con base en el valor de muestra predicha y el vector de movimiento; y almacenar, por una memoria acoplada al procesador, el flujo de bits para comunicación hacia un decodificador. La interpredicción se puede realizar de acuerdo con uno de varios modos de interpredicción. Ciertos modos de interpredicción generan listas de candidatos de predictores de vector de movimiento tanto en el codificador como en el decodificador. Esto permite que el codificador señalice un vector de movimiento al señalizar el índice desde la lista de candidatos en lugar de señalizar el vector de movimiento completo. Además, algunos sistemas codifican subimágenes para extracción independiente. Esto permite que una subimagen actual se decodifique y se muestre sin decodificar información de otras subimágenes. Esto puede provocar errores cuando se emplea un vector de movimiento que apunta fuera de la subimagen debido a que los datos apuntados por el vector de movimiento pueden no estar decodificados y por lo tanto, pueden no estar disponibles. La presente descripción incluye una bandera que indica que una subimagen se debe tratar como una imagen. Cuando una subimagen actual se trata como una imagen, la subimagen actual se debe extraer sin referencia a otras subimágenes. Específicamente, el presente ejemplo emplea una función de recorte que se aplica cuando se aplican filtros de interpolación. Esta función de recorte garantiza que el filtro de interpolación no se base en datos de subimágenes adyacentes a fin de mantener la separación entre las subimágenes para soportar la extracción separada. Como tal, la función de recorte se aplica cuando se establece la bandera y un vector de movimiento apunta fuera de la subimagen actual. El filtro de interpolación entonces se aplica a los resultados de la función de recorte. Por consiguiente, el presente ejemplo proporciona funcionalidad adicional a un códec de video al impedir errores cuando se realiza la extracción de subimágenes.
El filtro de interpolación incluye un proceso de interpolación bilineal de muestras de luma, en donde el bloque incluye un bloque de muestras de luma, y en donde el valor de muestra predicho incluye un valor de muestra de luma predicha.
Opcionalmente, en cualquiera de los aspectos anteriores, se proporciona otra implementación del aspecto, en donde el proceso de interpolación bilineal de muestra de luma recibe entradas que incluyen una ubicación de luma en unidades de muestra completas (xIntL, yIntL), en donde el proceso de interpolación bilineal de muestra de luma genera un valor de muestra de luma predicha (predSampleLXL), y en donde la función de recorte se aplica a las ubicaciones de muestra de acuerdo con: cuando subpic_treated_as_pic_flag[SubPicIdx] es igual a uno, aplica lo siguiente:
xInti = Clip3( SubPicLeftBoundaryPos, SubPicRightBoundaryPos, xIntL i ), y
yInti = Clip3( SubPicTopBoundaryPos, SubPicBotBoundaryPos, yIntL i ),
donde subpic_treated_as_pic_flag es el conjunto de banderas para indicar que la subimagen se trata como una imagen, SubPicIdx es un índice de la subimagen, xInti e yInti son una ubicación de muestra recortada en el índice i, SubPicRightBoundaryPos es una posición de un límite derecho de la subimagen, SubPicLeftBoundaryPos es una posición de un límite izquierdo de la subimagen, SubPicTopBoundaryPos es una posición de un límite superior de la subimagen, SubPicBotBoundaryPos es una posición de un límite inferior de la subimagen y Clip3 es la función de recorte de acuerdo con:
( Xz < X
Clip3( x, y, z ) = y z > y
tz de otro modo
donde x, y, y z son valores de entrada numéricos.
Opcionalmente, en cualquiera de los aspectos anteriores, se proporciona otra implementación del aspecto, en donde el filtro de interpolación incluye un proceso de filtrado de interpolación de ocho derivaciones de muestra de luma, en donde el bloque incluye un bloque de muestras de luma, y en donde el valor de muestra predicha incluye un valor de muestra de luma predicha.
Opcionalmente, en cualquiera de los aspectos anteriores, se proporciona otra implementación del aspecto, en donde el proceso de filtrado de interpolación de ocho derivaciones de muestra de luma recibe entradas que incluyen una ubicación de luma en unidades de muestra completas (xIntL, yIntL), en donde el proceso de interpolación bilineal de muestra de luma genera un valor de muestra de luma predicha (predSampleLXL), y en donde la función de recorte se aplica a las ubicaciones de muestra de acuerdo con: cuando subpic_treated_as_pic_flag[SubPicIdx] es igual a uno, aplica lo siguiente:
xInti = Clip3( SubPicLeftBoundaryPos, SubPicRightBoundaryPos, xIntL i -3), y
yInti = Clip3( SubPicTopBoundaryPos, SubPicBotBoundaryPos, yIntL i -3),
donde subpic_treated_as_pic_flag es el conjunto de banderas para indicar que la subimagen se trata como una imagen, SubPicIdx es un índice de la subimagen, xInti e yInti son una ubicación de muestra recortada en el índice i, SubPicRightBoundaryPos es una posición de un límite derecho de la subimagen, SubPicLeftBoundaryPos es una posición de un límite izquierdo de la subimagen, SubPicTopBoundaryPos es una posición de un límite superior de la subimagen, SubPicBotBoundaryPos es una posición de un límite inferior de la subimagen y Clip3 es la función de recorte de acuerdo con:
( Xz < X
Clip3( x, y, z ) = y z > y
z de otro modo
donde x, y, y z son valores de entrada numéricos.
Opcionalmente, en cualquiera de los aspectos anteriores, se proporciona otra implementación del aspecto, en donde el filtro de interpolación incluye un proceso de interpolación de muestra de croma, en donde el bloque incluye un bloque de muestras de croma, y en donde el valor de muestra predicha incluye un valor de muestra de croma predicha.
Opcionalmente, en cualquiera de los aspectos anteriores, se proporciona otra implementación del aspecto, en donde el proceso de interpolación de muestra de croma recibe entradas que incluyen una ubicación de croma en unidades de muestra completas (xIntC, yIntC), en donde el proceso de interpolación de muestra de croma genera un valor de muestra de croma predicha (predSampleLXC), y en donde la función de recorte se aplica a las ubicaciones de muestra de acuerdo con: cuando subpic_treated_as_pic_flag[SubPicIdx] es igual a uno, aplica lo siguiente:
xInti = Clip3( SubPicLeftBoundaryPos/SubWidthC, SubPicRightBoundaryPos/SubWidthC, xIntC i), y yInti = Clip3( SubPicTopBoundaryPos/SubHeightC, SubPicBotBoundaryPos/SubHeightC, yIntC i),
donde subpic_treated_as_pic_flag es el conjunto de banderas para indicar que la subimagen se trata como una imagen, SubPicIdx es un índice de la subimagen, xInti e yInti son una ubicación de muestra recortada en el índice i, SubPicRightBoundaryPos es una posición de un límite derecho de la subimagen, SubPicLeftBoundaryPos es una posición de un límite izquierdo de la subimagen, SubPicTopBoundaryPos es una posición de un límite superior de la subimagen, SubPicBotBoundaryPos es una posición de un límite inferior de la subimagen, SubWidthC y SubHeightC indican una relación de velocidad de muestreo horizontal y vertical entre muestras de luma y croma y Clip3 es la función de recorte de acuerdo con:
z < X
z > y
de otro modo
donde x, y, y z son valores de entrada numéricos.
En una modalidad, la descripción incluye un dispositivo de codificación de video que comprende: un procesador, un receptor acoplado al procesador, una memoria acoplada al procesador y un transmisor acoplado al procesador, en donde el procesador, receptor, memoria y transmisor se configuran para realizar el método de cualquiera de los aspectos anteriores.
En una modalidad, la descripción incluye un medio leíble por computadora no transitorio que comprende un producto de programa de computadora para su uso por un dispositivo de codificación de video, el producto de programa de computadora que comprende instrucciones ejecutables por computadora almacenadas en el medio leíble por computadora no transitorio de modo que cuando se ejecutan por un procesador provocan que el dispositivo de codificación de video realice el método de cualquiera de los aspectos anteriores.
En una modalidad, la descripción incluye un decodificador que comprende: un medio de recepción para recibir un flujo de bits que comprende una imagen actual que incluye una subimagen codificada de acuerdo con interpredicción; un medio de determinación para determinar un vector de movimiento para un bloque de la subimagen; un medio de aplicación para: aplicar una función de recorte a partes enteras de las ubicaciones de las muestras en el bloque de referencia para restringir que las partes enteras están dentro de la subimagen, cuando una bandera indica que la subimagen se trata como una imagen, y cuando un vector de movimiento para el bloque apunta fuera de la subimagen, en donde las ubicaciones de las muestras se usan para un filtro de interpolación, en donde el filtro de interpolación incluye un proceso de interpolación bilineal de muestras de luma, en donde el bloque incluye un bloque de muestras de luma, y en donde el valor predicho de la muestra incluye un valor predicho de la muestra de luma; y aplicar el filtro de interpolación a los resultados de la función de recorte para obtener un valor de muestra predicha; un medio de decodificación para decodificar el bloque con base en el valor de muestra predicha; y un medio de reenvío para reenviar el bloque para visualización como parte de una secuencia de video decodificada.
Opcionalmente, en cualquiera de los aspectos anteriores, se proporciona otra implementación del aspecto, en donde el decodificador se configura además para realizar el método de cualquiera de los aspectos anteriores.
En una modalidad, la descripción incluye un codificador que comprende: un medio de partición para particionar una imagen actual en una subimagen y la subimagen en un bloque; un medio de determinación para determinación para codificar el bloque de acuerdo con interpredicción; un medio de selección para seleccionar un vector de movimiento para codificar el bloque; un medio de aplicación para: aplicar una función de recorte a partes enteras de las ubicaciones de las muestras en el bloque de referencia para restringir que las partes enteras están dentro de la subimagen, cuando una bandera indica que la subimagen se trata como una imagen, y cuando un vector de movimiento para el bloque apunta fuera de la subimagen, en donde las ubicaciones de las muestras se usan para un filtro de interpolación, en donde el filtro de interpolación incluye un proceso de interpolación bilineal de muestras de luma, en donde el bloque incluye un bloque de muestras de luma, y en donde el valor predicho de la muestra incluye un valor predicho de la muestra de luma; y aplicar el filtro de interpolación a los resultados de la función de recorte para obtener un valor de muestra predicha; un medio de codificación para codificar el bloque en un flujo de bits con base en el valor de muestra predicha y el vector de movimiento; y un medio de almacenamiento para almacenar el flujo de bits para comunicación hacia un decodificador.
Opcionalmente, en cualquiera de los aspectos anteriores, se proporciona otra implementación del aspecto, en donde el codificador se configura además para realizar el método de cualquiera de los aspectos anteriores.
Para el propósito de claridad, cualquiera de las modalidades anteriores se puede combinar con cualquiera de una o más de las otras modalidades anteriores para crear una nueva modalidad dentro del alcance de la presente descripción de acuerdo con las reivindicaciones anexas.
Estas y otras características se entenderán más claramente a partir de la siguiente descripción detallada tomada en conjunto con las reivindicaciones y dibujos anexos.
BREVE DESCRIPCIÓN DE LAS FIGURAS
Para un entendimiento más completo de esta descripción, ahora se hace referencia a la siguiente breve descripción, tomada en relación con los dibujos anexos y descripción detallada, en donde los números de referencia similares representan partes similares.
La figura 1 es un diagrama de flujo de un método de ejemplo para codificar una señal de video.
La figura 2 es un diagrama esquemático de un sistema de codificación y decodificación (códec) de ejemplo para codificación de video.
La figura 3 es un diagrama esquemático que ilustra un codificador de video de ejemplo.
La figura 4 es un diagrama esquemático que ilustra un decodificador de video de ejemplo.
La figura 5A es un diagrama esquemático que ilustra una imagen de ejemplo particionada en subimágenes. La figura 5B es un diagrama esquemático que ilustra una subimagen de ejemplo particionada en segmentos. La figura 5C es un diagrama esquemático que ilustra un segmento de ejemplo particionado en mosaicos. La figura 5D es un diagrama esquemático que ilustra un segmento de ejemplo particionado en unidades de árbol de codificación (CTU).
La figura 6 es un diagrama esquemático que ilustra un ejemplo de interpredicción unidireccional.
La figura 7 es un diagrama esquemático que ilustra un ejemplo de interpredicción bidireccional.
La figura 8 es un diagrama esquemático que ilustra un ejemplo de codificación de un bloque actual con base en vectores de movimiento candidatos de bloques codificados adyacentes.
La figura 9 es un diagrama esquemático que ilustra un patrón de ejemplo para determinar una lista de candidatos de vectores de movimiento.
La figura 10 es un diagrama de bloques que ilustra un filtro en bucle de ejemplo.
La figura 11 es un diagrama esquemático que ilustra un flujo de bits de ejemplo que contiene parámetros de herramienta de codificación para soportar la decodificación de una subimagen de una imagen.
La figura 12 es un diagrama esquemático de un dispositivo de codificación de video de ejemplo.
La figura 13 es un diagrama de flujo de un método de ejemplo para codificar una secuencia de video en un flujo de bits en tanto que se aplica una función de recorte en un filtro de interpolación cuando una subimagen se trata como una imagen.
La figura 14 es un diagrama de flujo de un método de ejemplo para decodificar una secuencia de video de un flujo de bits en tanto que se aplica una función de recorte en un filtro de interpolación cuando una subimagen se trata como una imagen.
La figura 15 es un diagrama esquemático de un sistema de ejemplo para codificar una secuencia de video de imágenes en un flujo de bits en tanto que se aplica una función de recorte en un filtro de interpolación cuando una subimagen se trata como una imagen.
DESCRIPCIÓN DETALLADA
Se debe entender desde el principio que aunque más adelante se proporciona una implementación ilustrativa de una o más modalidades, los sistemas y/o métodos descritos se pueden implementar usando cualquier cantidad de técnicas, ya sean conocidas actualmente o existentes. La descripción no se debe limitar de ninguna manera a las implementaciones, dibujos y técnicas ilustrativas ilustradas más adelante, incluidos los diseños e implementaciones de ejemplo ilustrados y descritos en la presente, sino que se pueden modificar dentro del alcance de las reivindicaciones anexas.
Los siguientes acrónimos se usan en la presente, filtro de bucle adaptativo (ALF), bloque de árbol de codificación (CTB), unidad de árbol de codificación (CTU), unidad de codificación (CU), secuencia de video codificada (CVS), equipo conjunto de expertos en video (JVET), conjunto de mosaicos restringidos en movimiento (MCTS), unidad de transferencia máxima (MTU), capa de abstracción de red (NAL), conteo de orden de imagen (POC), carga útil de secuencia de bytes sin procesar (RBSP), desplazamiento adaptativo de muestra (SAO), conjunto de parámetros de secuencia (SPS), predicción de vector de movimiento temporal (TMVP), codificación de video versátil (VVC) y borrador de trabajo (WD).
Muchas técnicas de compresión de video se pueden emplear para reducir el tamaño de los archivos de video con pérdida mínima de datos. Por ejemplo, las técnicas de compresión de video pueden incluir realizar predicción espacial (por ejemplo, intra-imagen) y/o predicción temporal (por ejemplo, inter-imagen) para reducir o remover redundancia de datos en secuencias de video. Para codificación de video basada en bloques, un segmento de video (por ejemplo, una imagen de video o una porción de una imagen de video) se puede particionar en bloques de video, que también se pueden referir como bloques de árbol, bloques de árbol de codificación (CTB), unidades de árbol de codificación (CTU), unidades de codificación (CU) y/o nodos de codificación. Los bloques de video en un segmento intracodificado (I) de una imagen se decodifican usando predicción espacial con respecto a muestras de referencia en bloques vecinos en la misma imagen. Los bloques de video en un segmento de predicción unidireccional (P) o predicción bidireccional (B) intercodificado de una imagen se pueden codificar al emplear predicción espacial con respecto a muestras de referencia en bloques vecinos en la misma imagen o predicción temporal con respecto a muestras de referencia en otras imágenes de referencia. Las imágenes se pueden referir como cuadros y/o imágenes, y las imágenes de referencia se pueden referir como cuadros de referencia y/o imágenes de referencia. La predicción espacial o temporal da por resultado un bloque predictivo que representa un bloque de imagen. Los datos residuales representan diferencias de píxeles entre el bloque de imagen original y el bloque predictivo. Por consiguiente, un bloque intercodificado se codifica de acuerdo con un vector de movimiento que apunta a un bloque de muestras de referencia que forma el bloque predictivo, y los datos residuales indican la diferencia entre el bloque codificado y el bloque predictivo. Un bloque intracodificado se codifica de acuerdo con un modo de intracodificación y los datos residuales. Para compresión adicional, los datos residuales se pueden transformar del dominio de pixel a un dominio de transformada. Estos dan por resultado coeficientes de transformada residuales, que se pueden cuantificar. Los coeficientes de transformada cuantificados se pueden arreglar inicialmente en un arreglo bidimensional. Los coeficientes de transformada cuantificados se pueden escanear para producir un vector unidimensional de coeficientes de transformada. La codificación entrópica se puede aplicar para lograr aún más compresión. Estas técnicas de compresión de video se analizan en mayor detalle más adelante.
Para garantizar que un video codificado se pueda decodificar con de manera precisa, el video se codifica y decodifica de acuerdo con las correspondientes normas de codificación de video. Las normas de codificación de video incluyen sector de normalización (ITU-T) H.261 de unión internacional de telecomunicaciones (ITU), grupo de expertos en imágenes en movimiento (MPEG)-1 parte 2 de organización internacional para normalización/comisión electrotécnica internacional (ISO/I<e>C),<i>T<u>-T H.262 o ISO/IEC MPEG-2 parte 2,<i>T<u>-T H.263, ISO/IEC MPEG-4 parte 2, codificación de video avanzada (AVC), también conocida como ITU-T H.264 o ISO/IEC MPEG-4 parte 10, y codificación de video de alta eficiencia (HEVC), también conocida como ITU-T H.265 o MPEG-H parte 2. AVC incluye extensiones tal como codificación de video escalable (SVC), codificación de video multivista (MVC) y codificación de video multivista más profundidad (MVC+D), y AVC tridimensional (3D) (3D-AVC). HEVC incluye extensiones tal como HEVC escalable (SHVC), HEVC multivista (MV-HEVC) y HEVC 3D (3D-HEVC). El equipo conjunto de expertos en video (JVeT) de ITU-T e ISO/IEC ha comenzado a desarrollar una norma de codificación de video referida como codificación de video versátil (VVC). VVC se incluye en un borrador de trabajo (WD), que incluye JVET-M1001-v6 que proporciona una descripción de algoritmo, una descripción de lado de codificador del WD de VVC y software de referencia.
A fin de codificar una imagen de video, la imagen se particiona primero y las particiones se codifican en un flujo de bits. Están disponibles diferentes esquemas de partición de imágenes. Por ejemplo, una imagen se puede particionar en segmentos regulares, segmentos dependientes, mosaicos y/o de acuerdo con el procesamiento paralelo de frente de onda (WPP). Para simplicidad, HEVC restringe los codificadores de tal forma que solo se puedan usar segmentos regulares, segmentos dependientes, mosaicos, WPP y combinaciones de los mismos cuando se particiona un segmento en grupos de los CTB para codificación de video. Esta partición se puede aplicar para soportar coincidencia de tamaño de unidad de transferencia máxima (MTU), procesamiento paralelo y retardo de extremo a extremo reducido. MTU denota la cantidad máxima de datos que se pueden transmitir en un paquete individual. Si una carga útil de paquete está en exceso de la MTU, esa carga útil se divide en dos paquetes a través de un proceso llamado fragmentación.
Un segmento regular, también referido simplemente como un segmento, es una porción particionada de una imagen que se puede reconstruir independientemente de otros segmentos regulares dentro de la misma imagen, a pesar de algunas interdependencias debido a las operaciones de filtrado de bucle. Cada segmento regular se encapsula en su propia unidad de capa de abstracción de red (NAL) para transmisión. Además, la predicción en imagen (predicción de intra muestra, predicción de información de movimiento, predicción de modo de codificación) y dependencia de codificación entrópica a través de los límites de segmento se pueden deshabilitar para soportar la reconstrucción independiente. Esta reconstrucción independiente soporta la paralelización. Por ejemplo, la paralelización basada en segmentos regulares emplea una comunicación mínima entre procesadores o entre núcleos. Sin embargo, como cada segmento regular es independiente, cada segmento se asocia con un encabezado de segmento separado. El uso de segmentos regulares puede incurrir en una sobrecarga de codificación sustancial debido al costo de bits del encabezado de segmento para cada segmento y debido a la falta de predicción a través de los límites de segmentos. Además, se pueden emplear segmentos regulares para soportar la coincidencia para requerimientos de tamaño de MTU. Específicamente, como un segmento regular se encapsula en una unidad de NAL separada y se puede codificar independientemente, cada segmento regular debe ser menor que la MTU en los esquemas de MTU para evitar romper el segmento en múltiples paquetes. Como tal, el objetivo de paralelización y el objetivo de coincidencia de tamaño de MTU pueden colocar demandas contradictorias a un diseño de segmento en una imagen.
Los segmentos dependientes son similares a los segmentos regulares, pero han acortado los encabezados de segmentos y permiten la partición de los límites de bloque de árbol de imágenes sin romper la predicción en imagen. Por consiguiente, los segmentos dependientes permiten que un segmento regular se fragmente en múltiples unidades de NAL, que proporciona un retardo de extremo a extremo reducido al permitir que una parte de un segmento regular se envíe antes de que se complete la codificación de todo el segmento regular.
Un mosaico es una porción particionada de una imagen creada por límites horizontales y verticales que crean columnas y filas de mosaicos. Los mosaicos se pueden codificar en orden de escaneo de trama (de derecha a izquierda y de arriba a abajo). El orden de escaneo de los CTB es local dentro de un mosaico. Por consiguiente, los CTB en un primer mosaico se codifican en orden de escaneo de trama, antes de proceder a los CTB en el siguiente mosaico. Similar a los segmentos regulares, los mosaicos rompen las dependencias de predicción en imagen, así como las dependencias de decodificación entrópica. Sin embargo, los mosaicos no se pueden incluir en unidades de NAL individuales y por lo tanto, los mosaicos no se pueden usar para coincidencia de tamaño de MTU. Cada mosaico se puede procesar por un procesador/núcleo, y la comunicación entre procesadores/entre núcleos empleada para la predicción en imagen entre unidades de procesamiento que decodifican mosaicos vecinos se puede limitar a transmitir un encabezado de segmento compartido (cuando los mosaicos adyacentes están en el mismo segmento) y realizar la compartición relacionada con filtrado de bucle de muestras y metadatos reconstruidos. Cuando se incluye más de un mosaico en un segmento, el desplazamiento de bytes de punto de entrada para cada mosaico diferente del primer desplazamiento de punto de entrada en el segmento se puede señalizar en el encabezado de segmento. Para cada segmento y mosaico, se debe cumplir al menos una de las siguientes condiciones: 1) todos los bloques de árbol codificados en un segmento pertenecen al mismo mosaico; y 2) todos los bloques de árbol codificados en un mosaico pertenecen al mismo segmento.
En WPP, la imagen se particiona en filas individuales de los CTB. Los mecanismos de predicción y decodificación entrópica pueden usar datos de los CTB en otras filas. El procesamiento paralelo es posible a través de decodificación paralela de filas de CTB. Por ejemplo, una fila actual se puede decodificar en paralelo con una fila anterior. Sin embargo, la decodificación de la fila actual se retrasa del proceso de decodificación de las filas anteriores por dos CTB. Este retardo garantiza que los datos relacionados con el CTB anterior y el CTB anterior y a la derecha del CTB actual en la fila actual estén disponibles antes de que se codifique el CTB actual. Este planteamiento aparece como un frente de onda cuando se representa gráficamente. Este inicio escalonado permite la paralelización con hasta tantos procesadores/núcleos como la imagen contenga filas de CTB. Debido a que se permite predicción en imagen entre filas de bloques de árboles vecinos dentro de una imagen, puede ser sustancial la comunicación entre procesadores/entre núcleos para permitir la predicción en imagen. La partición de WPP considera el tamaño de unidad de NAL. Por lo tanto, WPP no soporta la coincidencia de tamaño de MTU. Sin embargo, se pueden usar segmentos regulares en conjunto con WPP, con cierta sobrecarga de codificación, para implementar la coincidencia de tamaño de MTU como se desee.
Los mosaicos también pueden incluir conjuntos de mosaicos de movimiento restringido. Un conjunto de mosaicos de movimiento restringido (MCTS) es un conjunto de mosaicos diseñado de modo que los vectores de movimiento asociados se restringen para apuntar a ubicaciones de muestra completa dentro del MCTS y a ubicaciones de muestra fraccionada que requieren solo ubicaciones de muestra completa dentro del MCTS para interpolación. Además, no se permite el uso de candidatos de vector de movimiento para predicción de vector de movimiento temporal derivados de bloques fuera del MCTS. De esta manera, cada MCTS se puede decodificar de independientemente sin la existencia de mosaicos no incluidos en el MCTS. Se pueden usar mensajes de información de mejora complementaria (SEI) de MCTS temporales para indicar la existencia de los MCTS en el flujo de bits y señalizar los MCTS. El mensaje de SEI de MCTS proporciona información complementaria que se puede usar en la extracción de sub-flujo de bits de MCTS (especificada como parte de la semántica del mensaje de SEI) para generar un flujo de bits de conformidad para un conjunto MCTS. La información incluye un número de conjuntos de información de extracción, cada uno que define un número de conjuntos MCTS y que contiene bytes sin procesar de carga útil de secuencia de bytes (RBSP) del conjunto de parámetros de video de reemplazo (VPS), conjuntos de parámetros de secuencia (SPS) y conjuntos de parámetros de imagen (PPS) que se van a usar durante el proceso de extracción de sub-flujo de bits de MCTS. Cuando se extrae un sub-flujo de bits de acuerdo con el proceso de extracción de sub-flujo de bits de MCTS, los conjuntos de parámetros (VPS, SPS y PPS) se pueden reescribir o reemplazar, y los encabezados de segmento pueden actualizarse debido a que uno o todos los elementos de sintaxis relacionados con dirección de segmento (incluidos first_slice_segment_in_pic_flag y slice_segment_address) pueden emplear valores diferentes en el sub-flujo de bits extraído.
Las imágenes también se pueden particionar en una o más subimágenes. La partición de una imagen en una subimagen puede permitir que diferentes porciones de una imagen se traten de manera diferente desde un punto de vista de codificación. Por ejemplo, una subimagen se puede extraer y mostrar sin extraer las otras subimágenes. Como otro ejemplo, se pueden mostrar diferentes subimágenes a diferentes resoluciones, recolocar entre sí (por ejemplo, en aplicaciones de teleconferencia) o codificar de otro modo como imágenes separadas a pesar de que las subimágenes contienen colectivamente datos de una imagen común.
Una implementación de ejemplo de subimágenes es como sigue. Una imagen se puede particionar en una o más subimágenes. Una subimagen es un conjunto rectangular o cuadrado de grupos de segmentos/mosaicos que comienzan con un grupo de segmentos/mosaicos que tiene una dirección igual a cero. Cada subimagen puede referirse a un PPS diferente, y por lo tanto cada subimagen puede emplear un mecanismo de partición diferente. Las subimágenes se pueden tratar como imágenes en el proceso de decodificación. Una imagen de referencia actual usada para decodificar una subimagen actual se puede generar al extraer de un área que se ubica junto con la subimagen actual de las imágenes de referencia en el búfer de imagen decodificada. El área extraída puede ser una subimagen decodificada y por lo tanto, la interpredicción puede tomar lugar entre subimágenes del mismo tamaño y la misma ubicación dentro de la imagen. Un grupo de mosaicos puede ser una secuencia de mosaicos en el escaneo de trama de mosaico de una subimagen. Lo siguiente se puede derivar para determinar la ubicación de una subimagen en una imagen. Cada subimagen se puede incluir en la siguiente ubicación no ocupada en el orden de escaneo de trama de CTU dentro de una imagen que es suficientemente grande para ajustarse a la subimagen dentro de los límites de imagen.
Los esquemas de subimagen empleados por diferentes sistemas de codificación de video incluyen diferentes problemas que reducen la eficiencia y/o funcionalidad de codificación. La presente descripción incluye diferentes soluciones a estos problemas. En un primer problema de ejemplo, la interpredicción se puede realizar de acuerdo con uno de varios modos de interpredicción. Ciertos modos de interpredicción generan listas de candidatos de predictores de vector de movimiento tanto en el codificador como en el decodificador. Esto permite que el codificador señalice un vector de movimiento al señalizar el índice desde la lista de candidatos en lugar de señalizar el vector de movimiento completo. Además, algunos sistemas codifican subimágenes para extracción independiente. Esto permite que una subimagen actual se decodifique y se muestre sin decodificar información de otras subimágenes. Esto puede provocar errores cuando se emplea un vector de movimiento que apunta fuera de la subimagen debido a que los datos apuntados por el vector de movimiento pueden no estar decodificados y por lo tanto, pueden no estar disponibles.
Por consiguiente, en un primer ejemplo, en la presente se describe una bandera que indica que una subimagen se debe tratar como una imagen. Esta bandera se establece para soportar la extracción separada de la subimagen. Cuando se establece la bandera, los predictores de vector de movimiento obtenidos de un bloque colocado incluyen solo vectores de movimiento que apuntan dentro de la subimagen. Se excluye cualquier predictor de vector de movimiento que apunte fuera de la subimagen. Esto garantiza que los vectores de movimiento que apuntan fuera de la subimagen no se seleccionen y se eviten los errores asociados. Un bloque colocado es un bloque de una imagen diferente de la imagen actual. Los predictores de vector de movimiento de bloques en la imagen actual (bloques no colocados) pueden apuntar fuera de la subimagen debido a que otros procesos, tal como filtros de interpolación, pueden impedir errores para estos predictores de vector de movimiento. Por consiguiente, el presente ejemplo proporciona funcionalidad adicional a un codificador/decodificador (códec) de video al impedir errores cuando se realiza la extracción de subimágenes.
En un segundo ejemplo, en la presente se describe una bandera que indica que una subimagen se debe tratar como una imagen. Cuando una subimagen actual se trata como una imagen, la subimagen actual se debe extraer sin referencia a otras subimágenes. Específicamente, el presente ejemplo emplea una función de recorte que se aplica cuando se aplican filtros de interpolación. Esta función de recorte garantiza que el filtro de interpolación no se base en datos de subimágenes adyacentes a fin de mantener la separación entre las subimágenes para soportar la extracción separada. Como tal, la función de recorte se aplica cuando se establece la bandera y un vector de movimiento apunta fuera de la subimagen actual. El filtro de interpolación entonces se aplica a los resultados de la función de recorte. Por consiguiente, el presente ejemplo proporciona funcionalidad adicional a un códec de video al impedir errores cuando se realiza la extracción de subimágenes. Como tal, el primer ejemplo y el segundo ejemplo abordan el primer problema de ejemplo.
En un segundo problema de ejemplo, los sistemas de codificación de video particionan imágenes en subimágenes, segmentos, mosaicos y/o unidades de árbol de codificación, que entonces se particionan en bloques. Estos bloques entonces se codifican para transmisión hacia un decodificador. La decodificación de estos bloques puede dar por resultado una imagen decodificada que contiene diferentes tipos de ruido. Para corregir estos problemas, los sistemas de codificación de video pueden aplicar diferentes filtros a través de límites de bloque. Estos filtros pueden remover el bloqueo, ruido de cuantificación y otros artefactos de codificación no deseados. Como se señaló anteriormente, algunos sistemas codifican subimágenes para extracción independiente. Esto permite que una subimagen actual se decodifique y se muestre sin decodificar información de otras subimágenes. En estos sistemas, la subimagen se puede particionar en bloques para codificación. Como tal, los límites de bloque a lo largo del borde de subimagen pueden alinearse con los límites de subimagen. En algunos casos, los límites de bloque también se pueden alinear con límites de mosaico. Los filtros se pueden aplicar a través de estos límites de bloque y por lo tanto, se aplican a través de límites de subimagen y/o límites de mosaico. Esto puede provocar errores cuando una subimagen actual se extrae de forma independiente, puesto que el proceso de filtrado puede operar de manera inesperada cuando los datos de una subimagen adyacente no están disponibles.
En un tercer ejemplo, en la presente se describe una bandera que controla el filtrado a nivel de subimagen. Cuando se establece la bandera para una subimagen, se pueden aplicar filtros a través del límite de subimagen. Cuando no se establece la bandera, los filtros no se aplican a través del límite de subimagen. De esta manera, los filtros se pueden desactivar para subimágenes que se codifican para extracción separada o se pueden activar para subimágenes que se codifican para visualización como un grupo. Como tal, el presente ejemplo proporciona funcionalidad adicional a un códec de video al impedir errores relacionados con el filtro cuando se realiza la extracción de subimágenes.
En un cuarto ejemplo, en la presente se describe una bandera que se puede establecer para controlar el filtrado a nivel de mosaico. Cuando se establece la bandera para un mosaico, se pueden aplicar filtros a través del límite de mosaico. Cuando no se establece la bandera, los filtros no se aplican a través del límite de mosaico. De esta manera, los filtros se pueden desactivar o activar para su uso en los límites de mosaico (por ejemplo, en tanto que se continúan filtrando las partes internas del mosaico). Por consiguiente, el presente ejemplo proporciona funcionalidad adicional a un códec de video al soportar el filtrado selectivo a través de límites de mosaico. Como tal, el tercer ejemplo y el cuarto ejemplo abordan el segundo problema de ejemplo.
En un tercer problema de ejemplo, los sistemas de codificación de video pueden particionar una imagen en subimágenes. Esto permite que diferentes subimágenes se traten de manera diferente cuando se codifica el video. Por ejemplo, las subimágenes se pueden extraer y mostrar por separado, redimensionar independientemente con base en los cambios de nivel de aplicación, etc. En algunos casos, las subimágenes se pueden crear al particionar una imagen en mosaicos y al asignar los mosaicos a las subimágenes. Algunos sistemas de codificación de video describen los límites de subimagen en términos de los mosaicos incluidos en la subimagen. Sin embargo, los esquemas de mosaico no se pueden emplear en algunas imágenes. Por consiguiente, estas descripciones de límites pueden limitar el uso de subimágenes a imágenes que emplean mosaicos.
En un quinto ejemplo, en la presente se describe un mecanismo para señalizar límites de subimagen en términos de los CTB y/o las CTU. Específicamente, el ancho y altura de una subimagen se pueden señalizar en unidades de los c Tb . Además, la posición de la CTU superior izquierda de la subimagen se puede señalizar como un desplazamiento desde la c Tu superior izquierda de la imagen como se mide en los CTB. Los tamaños CTU y CTB se pueden establecer a un valor predeterminado. Por consiguiente, la señalización de la posición y dimensiones de subimagen en términos de CTB y CTU proporciona información suficiente para que un decodificador coloque la subimagen para visualización. Esto permite que se empleen subimágenes incluso cuando no se emplean mosaicos. Además, este mecanismo de señalización tanto evita la complejidad como se puede codificar usando relativamente pocos bits. Como tal, el presente ejemplo proporciona funcionalidad adicional a un códec de video al permitir que se empleen subimágenes independientemente de mosaicos. Además, el presente ejemplo incrementa la eficiencia de codificación y por lo tanto, reduce el uso de procesador, memoria y/o recursos de red en el codificador y/o decodificador. Como tal, el quinto ejemplo aborda el tercer problema de ejemplo.
En un cuarto problema de ejemplo, una imagen se puede particionar en una pluralidad de segmentos para codificación. En algunos sistemas de codificación de video, los segmentos se direccionan con base en su posición con respecto a la imagen. Otros sistemas de codificación de video emplean el concepto de subimágenes. Como se señaló anteriormente, una subimagen se puede tratar de manera diferente a partir de otras subimágenes desde una perspectiva de codificación. Por ejemplo, una subimagen se puede extraer y mostrar independientemente de otras subimágenes. En este caso, las direcciones de segmento que se generan con base en la posición de imagen pueden dejar de operar de manera apropiada conforme se omite un número significativo de las direcciones de segmento esperadas. Algunos sistemas de codificación de video abordan este problema al reescribir dinámicamente los encabezados de segmentos cuando se solicita cambiar las direcciones de segmentos para soportar la extracción de subimágenes. Este proceso puede ser intensivo en recursos, puesto que este proceso puede presentarse cada vez que un usuario solicita ver la subimagen.
En un sexto ejemplo, en la presente se describen segmentos que se direccionan con respecto a la subimagen que contiene el segmento. Por ejemplo, el encabezado de segmento puede incluir un identificador de subimagen (ID) y una dirección de cada segmento incluido en la subimagen. Además, un conjunto de parámetros de secuencia (SPS) puede contener dimensiones de la subimagen que se pueden referir por el ID de subimagen. Por consiguiente, no es necesario que se reescriba el encabezado de segmento cuando se solicita la extracción separada de la subimagen. El encabezado de segmento y SPS contienen información suficiente para soportar el posicionamiento de los segmentos en la subimagen para visualización. Como tal, el presente ejemplo incrementa la eficiencia de codificación y/o evita la reescritura redundante del encabezado de segmento y por lo tanto, reduce el uso de procesador, memoria y/o recursos de red en el codificador y/o decodificador. Por consiguiente, el sexto ejemplo aborda el cuarto problema de ejemplo.
La figura 1 es un diagrama de flujo de un método operativo de ejemplo 100 para codificar una señal de video. Específicamente, una señal de video se codifica en un codificador. El proceso de codificación comprime la señal de video al emplear diferentes mecanismos para reducir el tamaño de archivo de video. Un tamaño de archivo más pequeño permite que el archivo de vídeo comprimido se transmita hacia un usuario, en tanto que reduce la sobrecarga de ancho de banda asociada. El decodificador entonces decodifica el archivo de vídeo comprimido para reconstruir la señal de vídeo original para visualización a un usuario final. El proceso de decodificación en general refleja el proceso de codificación para permitir que el decodificador reconstruya consistentemente la señal de video.
En el paso 101, la señal de video se ingresa en el codificador. Por ejemplo, la señal de video puede ser un archivo de video no comprimido almacenado en la memoria. Como otro ejemplo, el archivo de video se puede capturar por un dispositivo de captura de video, tal como una cámara de video, y se codifica para soportar la transmisión en vivo del video. El archivo de video puede incluir tanto un componente de audio como un componente de video. El componente de video contiene una serie de cuadros de imagen que, cuando se ven en una secuencia, dan la impresión visual de movimiento. Los cuadros contienen píxeles que se expresan en términos de luz, referidos en la presente como componentes de luma (o muestras de luma) y color, que se refieren como componentes de croma (o muestras de color). En algunos ejemplos, los cuadros también pueden contener valores de profundidad para soportar la visualización tridimensional.
En el paso 103, el video se particiona en bloques. La partición incluye subdividir los píxeles en cada cuadro en bloques cuadrados y/o rectangulares para compresión. Por ejemplo, en codificación de video de alta eficiencia (HEVC) (también conocida como H.265 y MPEG-H parte 2) el cuadro se puede dividir primero en unidades de árbol de codificación (CTU), que son bloques de un tamaño predefinido (por ejemplo, sesenta y cuatro píxeles por sesenta y cuatro píxeles). Las CTU contienen tanto muestras de luma como de croma. Los árboles de codificación se pueden emplear para dividir las CTU en bloques y entonces subdividir recursivamente los bloques hasta que se logren configuraciones que soportan codificación adicional. Por ejemplo, los componentes de luma de un cuadro se pueden subdividir hasta que los bloques individuales contengan valores de iluminación relativamente homogéneos. Además, los componentes de croma de un cuadro se pueden subdividir hasta que los bloques individuales contengan valores de color relativamente homogéneos. Por consiguiente, los mecanismos de partición varían dependiendo del contenido de los cuadros de video.
En el paso 105, se emplean diferentes mecanismos de compresión para comprimir los bloques de imagen particionados en el paso 103. Por ejemplo, se puede emplear interpredicción y/o intrapredicción. La interpredicción se diseña para tomar ventaja del hecho de que los objetos en una escena común tienden a aparecer en cuadros sucesivos. Por consiguiente, no es necesario describir repetidamente un bloque que representa un objeto en un cuadro de referencia en cuadros adyacentes. Específicamente, un objeto, tal como una tabla, puede permanecer en una posición constante sobre múltiples cuadros. Por lo tanto, la tabla se describe una vez y los cuadros adyacentes pueden referirse de nuevo al cuadro de referencia. Los mecanismos de coincidencia de patrón se pueden emplear para emparejar objetos sobre múltiples cuadros. Además, los objetos movibles se pueden representar a través de múltiples cuadros, por ejemplo, debido al movimiento de objetos o movimiento de cámara. Como un ejemplo particular, un video puede mostrar un automóvil que se mueve a través de la pantalla sobre múltiples cuadros. Los vectores de movimiento se pueden emplear para describir este movimiento. Un vector de movimiento es un vector bidimensional que proporciona un desplazamiento desde las coordenadas de un objeto en un cuadro a las coordenadas del objeto en un cuadro de referencia. Como tal, la interpredicción puede codificar un bloque de imagen en un cuadro actual como un conjunto de vectores de movimiento que indican un desplazamiento de un correspondiente bloque en un cuadro de referencia.
La intrapredicción codifica bloques en un cuadro común. La intrapredicción toma ventaja del hecho de que los componentes de luma y croma tienden a agruparse en un cuadro. Por ejemplo, un parche de verde en una porción de un árbol tiende a colocarse adyacente a parches similares de verde. La intrapredicción emplea múltiples modos de predicción direccional (por ejemplo, treinta y tres en HEVC), un modo planar y un modo de corriente continua (DC). Los modos direccionales indican que un bloque actual es similar/el mismo que las muestras de un bloque vecino en una correspondiente dirección. El modo planar indica que una serie de bloques a lo largo de una fila/columna (por ejemplo, un plano) se puede interpolar con base en bloques vecinos en los bordes de la fila. El modo planar, en efecto, indica una transición suave de luz/color a través de una fila/columna al emplear una pendiente relativamente constante en los valores de cambio. El modo DC se emplea para suavizar los límites e indica que un bloque es similar/el mismo que un valor promedio asociado con las muestras de todos los bloques vecinos asociados con las direcciones angulares de los modos de predicción direccional. Por consiguiente, los bloques de intrapredicción pueden representar bloques de imagen como diferentes valores de modo de predicción relacional en lugar de los valores reales. Además, los bloques de interpredicción pueden representar bloques de imagen como valores de vector de movimiento en lugar de los valores reales. En cualquier caso, los bloques de predicción pueden no representar exactamente los bloques de imagen en algunos casos. Cualquier diferencia se almacena en bloques residuales. Las transformadas se pueden aplicar a los bloques residuales para comprimir además el archivo.
En el paso 107, se pueden aplicar diferentes técnicas de filtrado. En HEVC, los filtros se aplican de acuerdo con un esquema de filtrado en bucle. La predicción basada en bloques analizada anteriormente puede dar por resultado la creación de imágenes en bloque en el decodificador. Además, el esquema de predicción basado en bloques puede codificar un bloque y entonces reconstruir el bloque codificado para su uso posterior como un bloque de referencia. El esquema de filtrado en bucle aplica iterativamente filtros de supresión de ruido, filtros de desbloqueo, filtros de bucle adaptativo y filtros de desplazamiento adaptativo de muestra (SAO) a los bloques/cuadros. Estos filtros mitigan estos artefactos de bloqueo de tal forma que el archivo codificado se pueda reconstruir de manera precisa. Además, estos filtros mitigan los artefactos en los bloques de referencia reconstruidos de tal forma que es menos probable que los artefactos creen artefactos adicionales en los bloques posteriores que se codifican con base en los bloques de referencia reconstruidos.
Una vez que la señal de video se ha particionado, comprimido y filtrado, los datos resultantes se codifican en un flujo de bits en el paso 109. El flujo de bits incluye los datos analizados anteriormente, así como cualquier dato de señalización deseado para soportar la reconstrucción de señal de video apropiada en el decodificador. Por ejemplo, estos datos pueden incluir datos de partición, datos de predicción, bloques residuales y diferentes banderas que proporcionan instrucciones de codificación al decodificador. El flujo de bits se puede almacenar en la memoria para transmisión hacia un decodificador en la solicitud. El flujo de bits también se puede transmitir y/o multitransmitir hacia una pluralidad de decodificadores. La creación del flujo de bits es un proceso iterativo. Por consiguiente, los pasos 101, 103, 105, 107 y 109 pueden presentarse de manera continua y/o simultáneamente sobre muchos cuadros y bloques. El orden mostrado en la figura 1 se presenta para claridad y facilidad de análisis, y no se propone que limite el proceso de codificación de video a un orden particular.
El decodificador recibe el flujo de bits y comienza el proceso de decodificación en el paso 111. Específicamente, el decodificador emplea un esquema de decodificación entrópica para convertir el flujo de bits en correspondientes datos de video y sintaxis. El decodificador emplea los datos de sintaxis del flujo de bits para determinar las particiones para los cuadros en el paso 111. La partición debe coincidir con los resultados de la partición de bloques en el paso 103. Ahora se describe la codificación/decodificación entrópica como se empleó en el paso 111. El codificador hace muchas elecciones durante el proceso de compresión, tal como seleccionar esquemas de partición de bloques de varias opciones posibles con base en el posicionamiento espacial de los valores en la o las imágenes de entrada. La señalización de las elecciones exactas puede emplear un gran número de contenedores. Como se usa en la presente, un contenedor es un valor binario que se trata como una variable (por ejemplo, un valor de bit que puede variar dependiendo del contexto). La codificación entrópica permite que el codificador descarte cualquier opción que claramente no sea viable para un caso particular, dejando un conjunto de opciones permitidas. A cada opción permitida entonces se asigna una palabra clave. La longitud de las palabras de código se basa en el número de opciones permitidas (por ejemplo, un contenedor para dos opciones, dos contenedores para tres a cuatro opciones, etc.). El codificador codifica entonces la palabra de código para la opción seleccionada. Este esquema reduce el tamaño de las palabras de código puesto que las palabras de código son tan grandes como se desee para indicar únicamente una selección de un pequeño subconjunto de opciones permitidas, en lugar de indicar únicamente la selección de un conjunto potencialmente grande de todas las opciones posibles. El decodificador entonces decodifica la selección al determinar el conjunto de opciones permitidas de una manera similar al codificador. Al determinar el conjunto de opciones permitidas, el decodificador puede leer la palabra clave y determinar la selección realizada por el codificador.
En el paso 113, el decodificador realiza la decodificación de bloques. Específicamente, el decodificador emplea transformadas inversas para generar bloques residuales. Entonces, el decodificador emplea los bloques residuales y los correspondientes bloques de predicción para reconstruir los bloques de imagen de acuerdo con la partición. Los bloques de predicción pueden incluir tanto bloques de intrapredicción como bloques de interpredicción como se generan en el codificador en el paso 105. Los bloques de imágenes reconstruidos entonces se colocan en cuadros de una señal de video reconstruida de acuerdo con los datos de partición determinados en el paso 111. La sintaxis para el paso 113 también se puede señalizar en el flujo de bits mediante codificación entrópica como se analizó anteriormente.
En el paso 115, el filtrado se realiza en los cuadros de la señal de video reconstruida de una manera similar al paso 107 en el codificador. Por ejemplo, se pueden aplicar filtros de supresión de ruido, filtros de desbloqueo, filtros de bucle adaptativo y filtros SAO a los cuadros para remover artefactos de bloqueo. Una vez que los cuadros se filtran, la señal de video se puede enviar a una pantalla en el paso 117 para visualización por un usuario final.
La figura 2 es un diagrama esquemático de un sistema de codificación y decodificación (códec) de ejemplo 200 para codificación de video. Específicamente, el sistema de códec 200 proporciona funcionalidad para soportar la implementación del método operativo 100. El sistema de códec 200 se generaliza para representar componentes empleados tanto en un codificador como en un decodificador. El sistema de códec 200 recibe y divide una señal de video como se analiza con respecto a los pasos 101 y 103 en el método operativo 100, que da por resultado una señal de video particionada 201. El sistema de códec 200 entonces comprime la señal de video particionada 201 en un flujo de bits codificado cuando actúa como un codificador como se analiza con respecto a los pasos 105, 107 y 109 en el método 100. Cuando actúa como un decodificador, el sistema de códec 200 genera una señal de video de salida a partir del flujo de bits como se analiza con respecto a los pasos 111, 113, 115 y 117 en el método operativo 100. El sistema de códec 200 incluye un componente de control de codificador general 211, un componente de cuantificación y modificación de escala de transformada 213, un componente de estimación de intra-imagen 215, un componente de predicción de intraimagen 217, un componente de compensación de movimiento 219, un componente de estimación de movimiento 221, un componente de transformada inversa y modificación de escala 229, un componente de análisis de control de filtro 227, un componente de filtros en bucle 225, un componente de búfer de imagen decodificada 223 y un componente de codificación aritmética binaria adaptativa al contexto (CABAC) y formato de encabezado 231. Estos componentes se acoplan como se muestra. En la figura 2, las líneas negras indican el movimiento de los datos que se van a codificar/decodificar, en tanto que las líneas punteadas indican el movimiento de los datos de control que controlan la operación de otros componentes. Todos los componentes del sistema de códec 200 pueden estar presentes en el codificador. El decodificador puede incluir un subconjunto de los componentes del sistema de códec 200. Por ejemplo, el decodificador puede incluir el componente de predicción de intra-imagen 217, el componente de compensación de movimiento 219, el componente de transformada inversa y modificación de escala 229, el componente de filtros en bucle 225 y el componente de búfer de imagen decodificada 223. Ahora se describen estos componentes.
La señal de video particionada 201 es una secuencia de video capturada que se ha particionado en bloques de píxeles por un árbol de codificación. Un árbol de codificación emplea diferentes modos de división para subdividir un bloque de píxeles en bloques más pequeños de píxeles. Estos bloques entonces se pueden subdividir en bloques más pequeños. Los bloques se pueden referir como nodos en el árbol de codificación. Los nodos principales más grandes se dividen en nodos secundarios más pequeños. El número de veces que un nodo se subdivide se refiere como la profundidad del nodo/árbol de codificación. Los bloques divididos se pueden incluir en unidades de codificación (CU) en algunos casos. Por ejemplo, una CU puede ser una subporción de una CTU que contiene un bloque de luma, bloques de croma (Cr) de diferencia roja y bloques de croma (Cb) de diferencia azul junto con las correspondientes instrucciones de sintaxis para la CU. Los modos de división pueden incluir un árbol binario (BT), árbol triple (TT) y un árbol cuaternario (QT) empleados para particionar un nodo en dos, tres o cuatro nodos secundarios, respectivamente, de formas variables dependiendo de los modos de división empleados. La señal de video particionada 201 se reenvía al componente de control de codificador general 211, el componente de cuantificación y modificación de escala de transformada 213, el componente de estimación de intra-imagen 215, el componente de análisis de control de filtro 227 y el componente de estimación de movimiento 221 para compresión.
El componente de control de codificador general 211 se configura para tomar decisiones relacionadas con la codificación de las imágenes de la secuencia de video en el flujo de bits de acuerdo con las restricciones de aplicación. Por ejemplo, el componente de control de codificador general 211 gestiona la optimización del tamaño de flujo de bits/velocidad de bits versus la calidad de reconstrucción. Estas decisiones se pueden tomar con base en la disponibilidad de ancho de banda/espacio de almacenamiento y las solicitudes de resolución de imágenes. El componente de control de codificador general 211 también gestiona la utilización del búfer a la luz de la velocidad de transmisión para mitigar los problemas de desbordamiento e insuficiencia de búfer. Para gestionar estos problemas, el componente de control de codificador general 211 gestiona la partición, predicción y filtrado por los otros componentes. Por ejemplo, el componente de control de codificador general 211 puede incrementar dinámicamente la complejidad de compresión para incrementar la resolución e incrementar el uso de ancho de banda o disminuir la complejidad de compresión para disminuir la resolución y uso de ancho de banda. Por lo tanto, el componente de control de codificador general 211 controla los otros componentes del sistema de códec 200 para equilibrar la calidad de reconstrucción de señal de video con consideraciones de velocidad de bits. El componente de control de codificador general 211 crea datos de control, que controlan la operación de los otros componentes. Los datos de control también se reenvían al formato de encabezado y componente CABAC 231 que se van a codificar en el flujo de bits a parámetros de señal para decodificación en el decodificador.
La señal de video particionada 201 también se envía al componente de estimación de movimiento 221 y el componente de compensación de movimiento 219 para interpredicción. Un cuadro o segmento de la señal de video particionada 201 se puede dividir en múltiples bloques de video. El componente de estimación de movimiento 221 y el componente de compensación de movimiento 219 realizan codificación interpredictiva del bloque de video recibido con respecto a uno o más bloques en uno o más cuadros de referencia para proporcionar predicción temporal. El sistema de códec 200 puede realizar múltiples pasadas de codificación, por ejemplo, para seleccionar un modo de codificación adecuado para cada bloque de datos de video.
El componente de estimación de movimiento 221 y el componente de compensación de movimiento 219 pueden estar altamente integrados, pero se ilustran por separado para propósitos conceptuales. La estimación de movimiento, realizada por el componente de estimación de movimiento 221, es el proceso para generar vectores de movimiento, que estiman el movimiento para bloques de video. Un vector de movimiento, por ejemplo, puede indicar el desplazamiento de un objeto codificado con respecto a un bloque predictivo. Un bloque predictivo es un bloque que se encuentra en estrecha coincidencia con el bloque que se va a codificar, en términos de diferencia de píxeles. Un bloque predictivo también se puede referir como un bloque de referencia. Esta diferencia de píxeles se puede determinar por suma de diferencia absoluta (SAD), suma de diferencia cuadrática (SSD) u otras métricas de diferencia. HEVC emplea varios objetos codificados que incluyen una CTU, bloques de árbol de codificación (CTB) y las CU. Por ejemplo, una<c>T<u>se puede dividir en los CTB, que entonces se pueden dividir en los CB para inclusión en las CU. Una CU se puede codificar como una unidad de predicción (PU) que contiene datos de predicción y/o una unidad de transformada (TU) que contiene datos residuales transformados para la CU. El componente de estimación de movimiento 221 genera vectores de movimiento, PU y TU al usar un análisis de velocidad-distorsión como parte de un proceso de optimización de distorsión de velocidad. Por ejemplo, el componente de estimación de movimiento 221 puede determinar múltiples bloques de referencia, múltiples vectores de movimiento, etc. para un bloque/cuadro actual, y puede seleccionar los bloques de referencia, vectores de movimiento, etc. que tienen las mejores características de velocidad-distorsión. Las mejores características de velocidad-distorsión equilibran tanto la calidad de la reconstrucción de video (por ejemplo, cantidad de pérdida de datos por compresión) como la eficiencia de codificación (por ejemplo, tamaño de la codificación final).
En algunos ejemplos, el sistema de códec 200 puede calcular valores para posiciones de píxeles sub-enteros de imágenes de referencia almacenadas en el componente de búfer de imagen decodificada 223. Por ejemplo, el sistema de códec de video 200 puede interpolar valores de posiciones de un cuarto de píxel, posiciones de un octavo píxel u otras posiciones de píxeles fraccionarios de la imagen de referencia. Por lo tanto, el componente de estimación de movimiento 221 puede realizar una búsqueda de movimiento con respecto a las posiciones de píxeles completos y posiciones de píxeles fraccionarios y generar un vector de movimiento con precisión de píxeles fraccionarios. El componente de estimación de movimiento 221 calcula un vector de movimiento para una PU de un bloque de video en un segmento intercodificado al comparar la posición de la PU con la posición de un bloque predictivo de una imagen de referencia. El componente de estimación de movimiento 221 envía el vector de movimiento calculado como datos de movimiento al formato de encabezado y componente CABAC 231 para codificación y movimiento al componente de compensación de movimiento 219.
La compensación de movimiento, realizada por el componente de compensación de movimiento 219, puede implicar recuperar o generar el bloque predictivo con base en el vector de movimiento determinado por el componente de estimación de movimiento 221. Nuevamente, el componente de estimación de movimiento 221 y el componente de compensación de movimiento 219 se pueden integrar funcionalmente, en algunos ejemplos. En la recepción del vector de movimiento para la PU del bloque de video actual, el componente de compensación de movimiento 219 puede ubicar el bloque predictivo al cual apunta el vector de movimiento. Entonces se forma un bloque de video residual al restar valores de píxeles del bloque predictivo de los valores de píxeles del bloque de video actual que se codifica, formando valores de diferencia de píxeles. En general, el componente de estimación de movimiento 221 realiza estimación de movimiento con respecto a los componentes de luma, y el componente de compensación de movimiento 219 usa vectores de movimiento calculados con base en los componentes de luma para tanto los componentes de croma como los componentes de luma. El bloque predictivo y bloque residual se reenvían al componente de cuantificación y modificación de escala de transformada 213.
La señal de video particionada 201 también se envía al componente de estimación de intra-imagen 215 y el componente de predicción de intra-imagen 217. Como con el componente de estimación de movimiento 221 y componente de compensación de movimiento 219, el componente de estimación de intra-imagen 215 y el componente de predicción de intra-imagen 217 se pueden integrar altamente, pero se ilustran por separado para propósitos conceptuales. El componente de estimación de intra-imagen 215 y el componente de predicción de intra-imagen 217 intrapredice un bloque actual con respecto a bloques en un cuadro actual, como una alternativa a la interpredicción realizada por el componente de estimación de movimiento 221 y el componente de compensación de movimiento 219 entre cuadros, como se describió anteriormente. En particular, el componente de estimación de intra-imagen 215 determina un modo de intrapredicción para su uso para codificar un bloque actual. En algunos ejemplos, el componente de estimación de intra-imagen 215 selecciona un modo de intrapredicción apropiado para codificar un bloque actual a partir de múltiples modos de intrapredicción probados. Los modos de intrapredicción seleccionados entonces se reenvían al formato de encabezado y componente CABAC 231 para codificación.
Por ejemplo, el componente de estimación de intra-imagen 215 calcula valores de velocidad-distorsión usando un análisis de velocidad-distorsión para los diversos modos de intrapredicción probados y selecciona el modo de intrapredicción que tiene las mejores características de velocidad-distorsión entre los modos probados. El análisis de velocidad-distorsión en general determina una cantidad de distorsión (o error) entre un bloque codificado y un bloque no codificado original que se codificó para producir el bloque codificado, así como una velocidad de bits (por ejemplo, un número de bits) usada para producir el bloque codificado. El componente de estimación de intra-imagen 215 calcula relaciones a partir de las distorsiones y velocidades para los diferentes bloques codificados para determinar qué modo de intrapredicción exhibe el mejor valor de velocidad-distorsión para el bloque. Además, se puede configurar el componente de estimación de intra-imagen 215 para codificar bloques de profundidad de un mapa de profundidad usando un modo de modelado de profundidad (DMM) con base en optimización de velocidad-distorsión (RDO).
El componente de predicción de intra-imagen 217 puede generar un bloque residual del bloque predictivo con base en los modos de intrapredicción seleccionados determinados por el componente de estimación de intraimagen 215 cuando se implementa en un codificador o leer el bloque residual del flujo de bits cuando se implementa en un decodificador. El bloque residual incluye la diferencia de valores entre el bloque predictivo y el bloque original, representada como una matriz. El bloque residual entonces se reenvía al componente de cuantificación y modificación de escala de transformada 213. El componente de estimación de intra-imagen 215 y el componente de predicción de intra-imagen 217 pueden operar tanto en componentes de luma como de croma.
El componente de cuantificación y modificación de escala de transformada 213 se configura para comprimir además el bloque residual. El componente de cuantificación y modificación de escala de transformada 213 aplica una transformada, tal como una transformada de coseno discreta (DCT), una transformada de seno discreta (DST), o una transformada conceptualmente similar, al bloque residual, produciendo un bloque de video que comprende valores de coeficiente de transformada residuales. También se pueden usar transformadas ondículas, transformadas enteras, transformadas de sub-banda u otros tipos de transformadas. La transformada puede convertir la información residual de un dominio de valor de pixel a un dominio de transformada tal como un dominio de frecuencia. El componente de cuantificación y modificación de escala de transformada 213 también se configura para modificar la escalar de la información residual transformada, por ejemplo, con base en la frecuencia. Esta modificación de escala implica aplicar un factor de escala a la información residual de tal forma que la información de frecuencia diferente se cuantifica en diferentes granularidades, que puede afectar la calidad visual final del video reconstruido. El componente de cuantificación y modificación de escala de transformada 213 también se configura para cuantificar los coeficientes de transformada para reducir además la velocidad de bits. El proceso de cuantificación puede reducir la profundidad de bits asociada con algunos o todos los coeficientes. El grado de cuantificación se puede modificar al ajustar un parámetro de cuantificación. En algunos ejemplos, el componente de cuantificación y modificación de escala de transformada 213 entonces puede realizar un escaneo de la matriz que incluye los coeficientes de transformada cuantificados. Los coeficientes de transformada cuantificados se reenvían al formato de encabezado y componente CABAC 231 que se van a codificar en el flujo de bits.
El componente de transformada inversa y modificación de escala 229 aplica una operación inversa del componente de cuantificación y modificación de escala de transformada 213 para soportar la estimación de movimiento. El componente de transformada inversa y modificación de escala 229 aplica modificación de escala, transformación y/o cuantificación inversa para reconstruir el bloque residual en el dominio de píxeles, por ejemplo, para su uso posterior como un bloque de referencia que puede convertirse en un bloque predictivo para otro bloque actual. El componente de estimación de movimiento 221 y/o componente de compensación de movimiento 219 pueden calcular un bloque de referencia al sumar el bloque residual nuevamente a un correspondiente bloque predictivo para su uso en la estimación de movimiento de un bloque/cuadro posterior. Los filtros se aplican a los bloques de referencia reconstruidos para mitigar los artefactos creados durante la modificación de escala, cuantificación y transformación. De otro modo, estos artefactos pueden provocar predicción inexacta (y crear artefactos adicionales) cuando se predicen los bloques posteriores.
El componente de análisis de control de filtro 227 y el componente de filtros en bucle 225 aplican los filtros a los bloques residuales y/o a los bloques de imagen reconstruidos. Por ejemplo, el bloque residual transformado del componente de transformada inversa y modificación de escala 229 se puede combinar con un correspondiente bloque de predicción del componente de predicción de intra-imagen 217 y/o componente de compensación de movimiento 219 para reconstruir el bloque de imagen original. Los filtros entonces se pueden aplicar al bloque de imagen reconstruido. En algunos ejemplos, los filtros se pueden aplicar en cambio a los bloques residuales. Como con otros componentes en la figura 2, el componente de análisis de control de filtro 227 y el componente de filtros en bucle 225 se integran altamente y se pueden implementar conjuntamente, pero se representan por separado para propósitos conceptuales. Los filtros aplicados a los bloques de referencia reconstruidos se aplican a regiones espaciales particulares e incluyen múltiples parámetros para ajustar cómo se aplican estos filtros. El componente de análisis de control de filtro 227 analiza los bloques de referencia reconstruidos para determinar dónde se deben aplicar estos filtros y establece los correspondientes parámetros. Estos datos se reenvían al formato de encabezado y componente CABAC 231 como datos de control de filtro para codificación. El componente de filtros en bucle 225 aplica estos filtros con base en los datos de control de filtro. Los filtros pueden incluir un filtro de desbloqueo, un filtro de supresión de ruido, un filtro SAO y un filtro de bucle adaptativo. Estos filtros se pueden aplicar en el dominio espacial/de píxeles (por ejemplo, en un bloque de píxeles reconstruido) o en el dominio de frecuencia, dependiendo del ejemplo.
Cuando se opera como un codificador, el bloque de imagen reconstruida filtrada, bloque residual y/o bloque de predicción se almacenan en el componente de búfer de imagen decodificada 223 para su uso posterior en la estimación de movimiento como se analizó anteriormente. Cuando se opera como un decodificador, el componente de búfer de imagen decodificada 223 almacena y reenvía los bloques reconstruidos y filtrados hacia una pantalla como parte de una señal de video de salida. El componente de búfer de imagen decodificada 223 puede ser cualquier dispositivo de memoria capaz de almacenar bloques de predicción, bloques residuales y/o bloques de imagen reconstruidos.
El formato de encabezado y componente CABAC 231 recibe los datos de los diferentes componentes del sistema de códec 200 y codifica estos datos en un flujo de bits codificado para transmisión hacia un decodificador. Específicamente, el formato de encabezado y componente CABAC 231 genera diferentes encabezados para codificar datos de control, tal como datos de control general y datos de control de filtro. Además, los datos de predicción, incluidos los datos de movimiento e intrapredicción, así como los datos residuales en forma de datos de coeficiente de transformada cuantificados se codifican todos en el flujo de bits. El flujo de bits final incluye toda la información deseada por el decodificador para reconstruir la señal de video particionada original 201. Esta información también puede incluir tablas de índice de modo de intrapredicción (también referidas como tablas de mapeo de palabras de código), definiciones de contextos de codificación para diferentes bloques, indicaciones de los modos de intrapredicción más probables, una indicación de información de partición, etc. Estos datos se pueden codificar al emplear codificación entrópica. Por ejemplo, la información se puede codificar al emplear codificación de longitud variable adaptativa al contexto (CAVLC), CABAC, codificación aritmética binaria adaptativa al contexto basada en sintaxis (SBAC), codificación entrópica de partición de intervalo de probabilidad (PIPE) u otra técnica de codificación entrópica. Después de la codificación entrópica, el flujo de bits codificado se puede transmitir a otro dispositivo (por ejemplo, un decodificador de video) o archivarse para transmisión o recuperación posterior.
La figura 3 es un diagrama de bloques que ilustra un codificador de video de ejemplo 300. El codificador de video 300 se puede emplear para implementar las funciones de codificación del sistema de códec 200 y/o implementar los pasos 101, 103, 105, 107 y/o 109 del método operativo 100. El codificador 300 particiona una señal de video de entrada, que da por resultado una señal de video particionada 301, que es sustancialmente similar a la señal de video particionada 201. La señal de video particionada 301 entonces se comprime y codifica en un flujo de bits por componentes del codificador 300.
Específicamente, la señal de video particionada 301 se reenvía a un componente de predicción de intra-imagen 317 para la intrapredicción. El componente de predicción de intra-imagen 317 puede ser sustancialmente similar al componente de estimación de intra-imagen 215 y el componente de predicción de intra-imagen 217. La señal de video particionada 301 también se reenvía a un componente de compensación de movimiento 321 para interpredicción con base en bloques de referencia en un componente de búfer de imagen decodificada 323. El componente de compensación de movimiento 321 puede ser sustancialmente similar al componente de estimación de movimiento 221 y componente de compensación de movimiento 219. Los bloques de predicción y bloques residuales del componente de predicción de intra-imagen 317 y el componente de compensación de movimiento 321 se reenvían a un componente de cuantificación y transformada 313 para transformada y cuantificación de los bloques residuales. El componente de cuantificación y transformada 313 puede ser sustancialmente similar al componente de cuantificación y modificación de escala de transformada 213. Los bloques residuales transformados y cuantificados y los correspondientes bloques de predicción (junto con los datos de control asociados) se reenvían a un componente de codificación entrópica 331 para codificación en un flujo de bits. El componente de codificación entrópica 331 puede ser sustancialmente similar al formato de encabezado y componente CABAC 231.
Los bloques residuales transformados y cuantificados y/o los correspondientes bloques de predicción también se reenvían desde el componente de cuantificación y transformada 313 a un componente de cuantificación y transformada inversa 329 para reconstrucción en bloques de referencia para su uso por el componente de compensación de movimiento 321. El componente de cuantificación y transformada inversa 329 puede ser sustancialmente similar al componente de transformada inversa y modificación de escala 229. Los filtros en bucle en un componente de filtros en bucle 325 también se aplican a los bloques residuales y/o bloques de referencia reconstruidos, dependiendo del ejemplo. El componente de filtros en bucle 325 puede ser sustancialmente similar al componente de análisis de control de filtro 227 y el componente de filtros en bucle 225. El componente de filtros en bucle 325 puede incluir múltiples filtros como se analiza con respecto al componente de filtros en bucle 225. Los bloques filtrados entonces se almacenan en un componente de búfer de imagen decodificada 323 para su uso como bloques de referencia por el componente de compensación de movimiento 321. El componente de búfer de imagen decodificada 323 puede ser sustancialmente similar al componente de búfer de imagen decodificada 223.
La figura 4 es un diagrama de bloques que ilustra un decodificador de video de ejemplo 400. El decodificador de video 400 se puede emplear para implementar las funciones de decodificación del sistema de códec 200 y/o implementar los pasos 111, 113, 115 y/o 117 del método operativo 100. El decodificador 400 recibe un flujo de bits, por ejemplo, de un codificador 300, y genera una señal de vídeo de salida reconstruida con base en el flujo de bits para visualización a un usuario final.
El flujo de bits se recibe por un componente de decodificación entrópica 433. El componente de decodificación entrópica 433 se configura para implementar un esquema de decodificación entrópica, tal como CAVLC, CABAC, SBAC, codificación PIPE u otras técnicas de codificación entrópica. Por ejemplo, el componente de decodificación entrópica 433 puede emplear información de encabezado para proporcionar un contexto para interpretar datos adicionales codificados como palabras de código en el flujo de bits. La información decodificada incluye cualquier información deseada para decodificar la señal de video, tal como datos de control general, datos de control de filtro, información de partición, datos de movimiento, datos de predicción y coeficientes de transformada cuantificados de bloques residuales. Los coeficientes de transformada cuantificados se reenvían a un componente de cuantificación y transformada inversa 429 para reconstrucción en bloques residuales. El componente de cuantificación y transformada inversa 429 puede ser similar al componente de cuantificación y transformada inversa 329.
Los bloques residuales reconstruidos y/o bloques de predicción se reenvían al componente de predicción de intra-imagen 417 para reconstrucción en bloques de imagen con base en las operaciones de intrapredicción. El componente de predicción de intra-imagen 417 puede ser similar al componente de estimación de intraimagen 215 y un componente de predicción de intra-imagen 217. Específicamente, el componente de predicción de intra-imagen 417 emplea modos de predicción para ubicar un bloque de referencia en el cuadro y aplica un bloque residual al resultado para reconstruir bloques de imagen intrapredichos. Los bloques de imagen intrapredichos reconstruidos y/o los bloques residuales y los correspondientes datos de interpredicción se reenvían a un componente de búfer de imagen decodificada 423 mediante un componente de filtros en bucle 425, que puede ser sustancialmente similar al componente de búfer de imagen decodificada 223 y el componente de filtros en bucle 225, respectivamente. El componente de filtros en bucle 425 filtra los bloques de imagen reconstruidos, bloques residuales y/o bloques de predicción, y esta información se almacena en el componente de búfer de imagen decodificada 423. Los bloques de imagen reconstruidos a partir del componente de búfer de imagen decodificada 423 se reenvían a un componente de compensación de movimiento 421 para interpredicción. El componente de compensación de movimiento 421 puede ser sustancialmente similar al componente de estimación de movimiento 221 y/o componente de compensación de movimiento 219. Específicamente, el componente de compensación de movimiento 421 emplea vectores de movimiento de un bloque de referencia para generar un bloque de predicción y aplica un bloque residual al resultado para reconstruir un bloque de imagen. Los bloques reconstruidos resultantes también se pueden reenviar mediante el componente de filtros en bucle 425 al componente de búfer de imagen decodificada 423. El componente de búfer de imagen decodificada 423 continúa almacenando bloques de imagen reconstruidos adicionales, que se pueden reconstruir en cuadros mediante la información de partición. Estos cuadros también se pueden colocar en una secuencia. La secuencia se envía hacia una pantalla como una señal de vídeo de salida reconstruida.
La figura 5A es un diagrama esquemático que ilustra una imagen de ejemplo 500 particionada en subimágenes 510. Por ejemplo, la imagen 500 se puede particionar para codificación por un sistema de códec 200 y/o un codificador 300 y se particiona para decodificación por un sistema de códec 200 y/o un decodificador 400. Como otro ejemplo, la imagen 500 se puede particionar por un codificador en el paso 103 del método 100 para su uso por un decodificador en el paso 111.
Una imagen 500 es una imagen que representa la porción visual completa de una secuencia de video en una ubicación temporal especificada. La imagen 500 también se puede referir como una imagen y/o un cuadro. Una imagen 500 se puede especificar por un conteo de orden de imágenes (POC). El POC es un índice que indica el orden de salida/visualización de las imágenes 500 en una secuencia de video. La imagen 500 se puede particionar en subimágenes 510. Una subimagen 510 es una región rectangular o cuadrada de uno o más grupos de mosaicos/segmentos dentro de una imagen 500. Las subimágenes 510 son opcionales y por lo tanto, algunas secuencias de video contienen subimágenes 510 en tanto que otras no. En tanto que se representan cuatro subimágenes 510, la imagen 500 se puede particionar en cualquier número de subimágenes 510. La partición de la subimagen 510 puede ser consistente en una secuencia de video codificada completa (CVS).
Las subimágenes 510 se pueden emplear para permitir que diferentes regiones de una imagen 500 se traten de manera diferente. Por ejemplo, una subimagen especificada 510 se puede extraer independientemente y transmitir a un decodificador. Como un ejemplo específico, un usuario que emplea un auricular de realidad virtual (VR) puede ver un subconjunto de la imagen 500, que puede proporcionar al usuario la impresión de estar físicamente presente en un espacio como se representa en la imagen 500. En este caso, transmitir solo las subimágenes 510 que es probable que se muestren al usuario puede incrementar la eficiencia de codificación. Como otro ejemplo, las diferentes subimágenes 510 se pueden tratar de manera diferente en determinadas aplicaciones. Como un ejemplo específico, una aplicación de teleconferencia puede mostrar un interlocutor activo a mayor resolución en una posición más prominente que los usuarios que no hablan actualmente. El posicionamiento de diferentes usuarios en diferentes subimágenes 510 soporta la reconfiguración en tiempo real de la imagen mostrada para soportar esta funcionalidad.
Cada subimagen 510 se puede identificar por un ID de subimagen único, que puede ser consistente para toda la CVS. Por ejemplo, la subimagen 510 en la parte superior izquierda de la imagen 500 puede tener un ID de subimagen de cero. En este caso, se puede hacer referencia a la subimagen 510 superior izquierda de cualquier imagen 500 en la secuencia por el ID de subimagen de cero. Además, cada subimagen 510 puede incluir una configuración definida, que puede ser consistente para toda la CVS. Por ejemplo, una subimagen 510 puede contener una altura, un ancho y/o un desplazamiento. La altura y ancho describen el tamaño de la subimagen 510 y el desplazamiento describe la ubicación de la subimagen 510. Por ejemplo, la suma de los anchos de todas las subimágenes 510 en una fila es el ancho de la imagen 500. Además, la suma de las alturas de todas las subimágenes 510 en una columna es la altura de la imagen 500. Además, el desplazamiento indica la posición de la esquina superior izquierda de la subimagen 510 con respecto a la esquina superior izquierda de la imagen 500. La altura, ancho y desplazamiento de una subimagen 510 proporcionan información suficiente para colocar la correspondiente subimagen 510 en la imagen 500. Puesto que la partición de las subimágenes 510 puede ser consistente en toda la CVS, los parámetros relacionados con las subimágenes se pueden contener en un conjunto de parámetros de secuencia (SPS).
La figura 5B es un diagrama esquemático que ilustra una subimagen de ejemplo 510 particionada en segmentos 515. Como se muestra, la subimagen 510 de una imagen 500 puede contener uno o más segmentos 515. Un segmento 515 es un número entero de mosaicos completos o un número entero de filas de CTU completas consecutivas dentro de un mosaico de una imagen que se contienen exclusivamente en una unidad de capa de abstracción de red (NAL) individual. En tanto que se representan cuatro segmentos 515, la subimagen 510 puede incluir cualquier número de segmentos 515. Los segmentos 515 contienen datos visuales que son específicos de una imagen 500 de un POC especificado. Por consiguiente, los parámetros relacionados con los segmentos 515 se pueden contener en un conjunto de parámetros de imagen (PPS) y/o un encabezado de segmento.
La figura 5C es un diagrama esquemático que ilustra un segmento de ejemplo 515 particionado en mosaicos 517. Como se muestra, el segmento 515 de una imagen 500 puede contener uno o más mosaicos 517. Los mosaicos 517 se pueden crear al particionar la imagen 500 en filas y columnas de rectángulos. Por consiguiente, un mosaico 517 es una región rectangular o cuadrada de las CTU dentro de una columna de mosaicos particular y una fila de mosaicos particular en una imagen. El mosaico es opcional y por lo tanto, algunas secuencias de video contienen mosaicos 517 en tanto que otras no. En tanto que se representan cuatro mosaicos 517, el segmento 515 puede incluir cualquier número de mosaicos 517. Los mosaicos 517 pueden contener datos visuales que son específicos de un segmento 515 de una imagen 500 de un POC especificado. En algunos casos, los segmentos 515 también se pueden contener en mosaicos 517. Por consiguiente, los parámetros relacionados con los mosaicos 517 se pueden contener en un PPS y/o un encabezado de segmento.
La figura 5D es un diagrama esquemático que ilustra un segmento de ejemplo 515 particionado en las CTU 519. Como se muestra, el segmento 515 (o un mosaico 517 de un segmento 515) de una imagen 500 puede contener una o más CTU 519. Una CTU 519 es una región de la imagen 500 que se subdivide por un árbol de codificación para crear bloques de codificación, que se codifican/decodifican. Una CTU 519 puede contener muestras de luma para una imagen monocromática 500 o una combinación de muestras de luma y croma para una imagen de color 500. Un agrupamiento de muestras de luma o muestras de croma que se pueden particionar por un árbol de codificación se refiere como un bloque de árbol de codificación (<c>T<b>) 518. Como tal, una CTU 519 contiene un CTB 518 de muestras de luma y dos correspondientes CTB 518 de muestras de croma de una imagen 500 que tiene tres arreglos de muestras, o contiene un CTB 518 de muestras de una imagen monocromática o una imagen que se codifica usando tres planos de color y estructuras de sintaxis separadas usadas para codificar las muestras.
Como se muestra anteriormente, una imagen 500 se puede particionar en subimágenes 510, segmentos 515, mosaicos 517, CTU 519 y/o CTB 518, que entonces se particionan en bloques. Estos bloques entonces se codifican para transmisión hacia un decodificador. La decodificación de estos bloques puede dar por resultado una imagen decodificada que contiene diferentes tipos de ruido. Para corregir estos problemas, los sistemas de codificación de video pueden aplicar diferentes filtros a través de límites de bloque. Estos filtros pueden remover el bloqueo, ruido de cuantificación y otros artefactos de codificación no deseados. Como se señaló anteriormente, las subimágenes 510 se pueden emplear cuando se realiza extracción independiente. En este caso, una subimagen actual 510 se puede decodificar y mostrar sin decodificar información de otras subimágenes 510. Como tal, los límites de bloque a lo largo del borde de subimagen 510 pueden alinearse con los límites de subimagen. En algunos casos, los límites de bloque también se pueden alinear con límites de mosaico. Los filtros se pueden aplicar a través de estos límites de bloque y por lo tanto, se aplican a través de límites de subimagen y/o límites de mosaico. Esto puede provocar errores cuando una subimagen actual 510 se extrae de forma independiente, puesto que el proceso de filtrado puede operar de manera inesperada cuando los datos de una subimagen adyacente 510 no está disponible.
A fin de abordar estos problemas, se puede emplear una bandera que controla el filtrado a nivel de subimagen 510. Por ejemplo, la bandera se puede denotar como loop_filter_across_subpic_enabled_flag. Cuando se establece la bandera para una subimagen 510, se pueden aplicar filtros a través del correspondiente límite de subimagen. Cuando no se establece la bandera, los filtros no se aplican a través del correspondiente límite de subimagen. De esta manera, los filtros se pueden desactivar para subimágenes 510 que se codifican para extracción separada o se pueden activar para subimágenes 510 que se codifican para visualización como un grupo. Se puede establecer otra bandera para controlar el filtrado a nivel de mosaico 517. La bandera se puede denotar como loop_filter_across_tiles_enabled_flag. Cuando se establece la bandera para un mosaico 517, se pueden aplicar filtros a través del límite de mosaico. Cuando no se establece la bandera, los filtros no se aplican a través del límite de mosaico. De esta manera, los filtros se pueden desactivar o activar para su uso en los límites de mosaico (por ejemplo, en tanto que se continúa filtrando las partes internas del mosaico). Como se usa en la presente, un filtro se aplica a través de una subimagen 510 o un límite de mosaico 517 cuando el filtro se aplica a muestras en ambos lados del límite.
También como se señaló anteriormente, el mosaico es opcional. Sin embargo, algunos sistemas de codificación de video describen los límites de subimagen en términos de los mosaicos 517 incluidos en la subimagen 510. En estos sistemas, las descripciones de límites de subimagen en términos de mosaicos 517 limitan el uso de subimágenes 510 a imágenes 500 que emplean mosaicos 517. A fin de ampliar la aplicabilidad de las subimágenes 510, las subimágenes 510 se pueden describir en términos de límites, en términos de CTB 518 y/o CTU 519. Específicamente, el ancho y altura de una subimagen 510 se pueden señalizar en unidades de los CTB 518. Además, la posición de la CTU 519 superior izquierda de la subimagen 510 se puede señalizar como un desplazamiento desde la CTU 519 superior izquierda de la imagen 500 como se mide en los CTB 518. Los tamaños de CTU 519 y CTB 518 se pueden establecer a un valor predeterminado. Por consiguiente, la señalización de la posición y dimensiones de subimagen en términos de CTB 518 y CTU 519 proporciona información suficiente para que un decodificador coloque la subimagen 510 para visualización. Esto permite que se empleen subimágenes 510 incluso cuando no se emplean mosaicos 517.
Además, algunos sistemas de codificación de video direccionan los segmentos 515 con base en su posición con respecto a la imagen 500. Esto crea un problema cuando las subimágenes 510 se codifican para visualización y extracción independiente. En este caso, también se omiten los segmentos 515 y las correspondientes direcciones asociadas con las subimágenes 510 omitidas. La omisión de las direcciones de los segmentos 515 puede impedir que el decodificador coloque de manera apropiada los segmentos 515. Algunos sistemas de codificación de video abordan este problema al reescribir dinámicamente las direcciones en los encabezados de segmentos asociados con los segmentos 515. Puesto que el usuario puede solicitar cualquier subimagen, esta reescritura se presenta cada vez que un usuario solicita el video, que es extremadamente intensivo en recursos. A fin de superar este problema, los segmentos 515 se direccionan con respecto a la subimagen 510 que contiene el segmento 515 cuando se emplean las subimágenes 510. Por ejemplo, el segmento 515 se puede identificar por un índice u otro valor que es específico de la subimagen 510 que contiene el segmento 515. La dirección de segmento se puede codificar en el encabezado de segmento asociado con el segmento 515. El ID de subimagen de la subimagen 510 que contiene el segmento 515 también se puede codificar en un encabezado de segmento. Además, las dimensiones/configuración de la subimagen 510 se pueden codificar en el SPS junto con el ID de subimagen. Como tal, el decodificador puede obtener la configuración de subimagen 510 del SPS con base en el ID de subimagen y colocar el segmento 515 en la subimagen 510 sin hacer referencia a la imagen completa 500. Como tal, la reescritura de encabezado de segmento se puede omitir cuando se extrae una subimagen 510, que reduce significativamente el uso de recursos en el codificador, el decodificador y/o un correspondiente segmento.
Una vez que una imagen 500 se particiona en CTB 518 y/o CTU 519, los CTB 518 y/o las CTU 519 se pueden dividir adicionalmente en bloques de codificación. Los bloques de codificación entonces se pueden codificar de acuerdo con intrapredicción y/o interpredicción. La presente descripción también incluye mejoras relacionadas con los mecanismos de interpredicción. La interpredicción se puede realizar en varios modos diferentes que pueden operar de acuerdo con la interpredicción unidireccional y/o interpredicción bidireccional.
La figura 6 es un diagrama esquemático que ilustra un ejemplo de interpredicción unidireccional 600, por ejemplo, como se realiza para determinar vectores de movimiento (MV) en el paso de compresión de bloque 105, paso de decodificación de bloque 113, componente de estimación de movimiento 221, componente de compensación de movimiento 219, componente de compensación de movimiento 321 y/o componente de compensación de movimiento 421. Por ejemplo, se puede emplear interpredicción unidireccional 600 para determinar vectores de movimiento para los bloques codificados y/o de decodificación creados cuando se particiona una imagen, tal como la imagen 500.
La interpredicción unidireccional 600 emplea un cuadro de referencia 630 con un bloque de referencia 631 para predecir un bloque actual 611 en un cuadro actual 610. El cuadro de referencia 630 se puede colocar temporalmente después del cuadro actual 610 como se muestra (por ejemplo, como un cuadro de referencia posterior), pero también se puede colocar temporalmente antes del cuadro actual 610 (por ejemplo, como un cuadro de referencia anterior) en algunos ejemplos. El cuadro actual 610 es un cuadro/imagen de ejemplo que se codifica/decodifica en un momento particular. El cuadro actual 610 contiene un objeto en el bloque actual 611 que coincide con un objeto en el bloque de referencia 631 del cuadro de referencia 630. El cuadro de referencia 630 es un cuadro que se emplea como referencia para codificar un cuadro actual 610, y un bloque de referencia 631 es un bloque en el cuadro de referencia 630 que contiene un objeto también contenido en el bloque actual 611 del cuadro actual 610.
El bloque actual 611 es cualquier unidad de codificación que se codifica/decodifica en un punto especificado en el proceso de codificación. El bloque actual 611 puede ser un bloque particionado completo, o puede ser un sub-bloque cuando se emplea el modo de interpredicción afín. El cuadro actual 610 se separa del cuadro de referencia 630 por alguna distancia temporal (TD) 633. La TD 633 indica una cantidad de tiempo entre el cuadro actual 610 y el cuadro de referencia 630 en una secuencia de video, y se puede medir en unidades de cuadros. La información de predicción para el bloque actual 611 puede hacer referencia al cuadro de referencia 630 y/o bloque de referencia 631 por un índice de referencia que indica la dirección y distancia temporal entre los cuadros. Durante el período de tiempo representado por la TD 633, el objeto en el bloque actual 611 se mueve de una posición en el cuadro actual 610 a otra posición en el cuadro de referencia 630 (por ejemplo, la posición del bloque de referencia 631). Por ejemplo, el objeto puede moverse a lo largo de una trayectoria de movimiento 613, que es una dirección de movimiento de un objeto con el paso del tiempo. Un vector de movimiento 635 describe la dirección y magnitud del movimiento del objeto a lo largo de la trayectoria de movimiento 613 sobre la TD 633. Por consiguiente, un vector de movimiento codificado 635, un bloque de referencia 631 y un residuo que incluye la diferencia entre el bloque actual 611 y el bloque de referencia 631 proporcionan información suficiente para reconstruir un bloque actual 611 y colocar el bloque actual 611 en el cuadro actual 610.
La figura 7 es un diagrama esquemático que ilustra un ejemplo de interpredicción bidireccional 700, por ejemplo, como se realiza para determinar los MV en el paso de compresión de bloque 105, paso de decodificación de bloque 113, componente de estimación de movimiento 221, componente de compensación de movimiento 219, componente de compensación de movimiento 321 y/o componente de compensación de movimiento 421. Por ejemplo, se puede emplear interpredicción bidireccional 700 para determinar vectores de movimiento para los bloques codificados y/o de decodificación creados cuando se particiona una imagen, tal como la imagen 500.
La interpredicción bidireccional 700 es similar a la interpredicción unidireccional 600, pero emplea un par de cuadros de referencia para predecir un bloque actual 711 en un cuadro actual 710. Por lo tanto, el cuadro actual 710 y bloque actual 711 son sustancialmente similares al cuadro actual 610 y bloque actual 611, respectivamente. El cuadro actual 710 se coloca temporalmente entre un cuadro de referencia anterior 720, que se presenta antes del cuadro actual 710 en la secuencia de video, y un cuadro de referencia posterior 730, que se presenta después del cuadro actual 710 en la secuencia de video. El cuadro de referencia anterior 720 y cuadro de referencia posterior 730 son de otro modo sustancialmente similares al cuadro de referencia 630.
El bloque actual 711 se empareja con un bloque de referencia anterior 721 en el cuadro de referencia anterior 720 y con un bloque de referencia posterior 731 en el cuadro de referencia posterior 730. Esta coincidencia indica que, durante el transcurso de la secuencia de video, un objeto se mueve de una posición en el bloque de referencia anterior 721 a una posición en el bloque de referencia posterior 731 a lo largo de una trayectoria de movimiento 713 y mediante el bloque actual 711. El cuadro actual 710 se separa del cuadro de referencia anterior 720 por alguna distancia temporal anterior (TD0) 723 y se separa del cuadro de referencia posterior 730 por alguna distancia temporal posterior (TD 1) 733. La t D0 723 indica una cantidad de tiempo entre el cuadro de referencia anterior 720 y el cuadro actual 710 en la secuencia de video en unidades de cuadros. La TD 1733 indica una cantidad de tiempo entre el cuadro actual 710 y el cuadro de referencia posterior 730 en la secuencia de video en unidades de cuadro. Por lo tanto, el objeto se mueve del bloque de referencia anterior 721 al bloque actual 711 a lo largo de la trayectoria de movimiento 713 durante un período de tiempo indicado por TD0723. El objeto también se mueve del bloque actual 711 al bloque de referencia posterior 731 a lo largo de la trayectoria de movimiento 713 durante un período de tiempo indicado por TD1 733. La información de predicción para el bloque actual 711 puede hacer referencia al cuadro de referencia anterior 720 y/o bloque de referencia anterior 721 y el cuadro de referencia posterior 730 y/o bloque de referencia posterior 731 por un par de índices de referencia que indican la dirección y distancia temporal entre los cuadros.
Un vector de movimiento anterior (MV0) 725 describe la dirección y magnitud del movimiento del objeto a lo largo de la trayectoria de movimiento 713 sobre la TD0723 (por ejemplo, entre el cuadro de referencia anterior 720 y el cuadro actual 710). Un vector de movimiento posterior (MV1) 735 describe la dirección y magnitud del movimiento del objeto a lo largo de la trayectoria de movimiento 713 sobre la TD1 733 (por ejemplo, entre el cuadro actual 710 y el cuadro de referencia posterior 730). Como tal, en la interpredicción bidireccional 700, el bloque actual 711 se puede codificar y reconstruir al emplear el bloque de referencia anterior 721 y/o el bloque de referencia posterior 731, MV0725 y MV1 735.
Tanto en el modo de fusión como en el modo de predicción de vector de movimiento avanzado (AMVP), se genera una lista de candidatos al agregar vectores de movimiento candidatos a una lista de candidatos en un orden definido por un patrón de determinación de lista de candidatos. Estos vectores de movimiento candidatos pueden incluir vectores de movimiento de acuerdo con la interpredicción unidireccional 600, interpredicción bidireccional 700 o combinaciones de las mismas. Específicamente, los vectores de movimiento se generan para bloques vecinos cuando estos bloques se codifican. Estos vectores de movimiento se agregan a una lista de candidatos para el bloque actual, y el vector de movimiento para el bloque actual se selecciona de la lista de candidatos. El vector de movimiento entonces se puede señalizar como el índice del vector de movimiento seleccionado en la lista de candidatos. El decodificador puede construir la lista de candidatos usando el mismo proceso que el codificador, y puede determinar el vector de movimiento seleccionado de la lista de candidatos con base en el índice señalizado. Por lo tanto, los vectores de movimiento candidatos incluyen vectores de movimiento generados de acuerdo con la interpredicción unidireccional 600 y/o interpredicción bidireccional 700, dependiendo de qué planteamiento se usa cuando se codifican estos bloques vecinos.
La figura 8 es un diagrama esquemático que ilustra un ejemplo 800 para codificar un bloque actual 801 con base en vectores de movimiento candidatos de bloques codificados adyacentes 802. Un método operativo 100 de codificador 300 y/o de decodificador 400 y/o que emplea la funcionalidad del sistema de códec 200 puede emplear los bloques adyacentes 802 para generar una lista de candidatos. Esta lista de candidatos se puede emplear en la interpredicción de acuerdo con la interpredicción unidireccional 600 y/o interpredicción bidireccional 700. La lista de candidatos se puede emplear entonces para codificar/decodificar el bloque actual 801, que se puede generar al particionar una imagen, tal como la imagen 500.
El bloque actual 801 es un bloque que se codifica en un codificador o se decodifica en un decodificador, dependiendo del ejemplo, en un momento especificado. Los bloques codificados 802 son bloques que ya están codificados en el momento especificado. Por lo tanto, los bloques codificados 802 están potencialmente disponibles para su uso cuando se genera una lista de candidatos. El bloque actual 801 y los bloques codificados 802 se pueden incluir en un cuadro común y/o se pueden incluir en un cuadro temporalmente adyacente. Cuando los bloques codificados 802 se incluyen en un cuadro común con el bloque actual 801, los bloques codificados 802 contienen un límite que es inmediatamente adyacente a (por ejemplo, colinda con) un límite del bloque actual 801. Cuando se incluye un bloque codificado 802 en un cuadro temporalmente adyacente, el bloque codificado 802 se ubica en la misma posición en el cuadro temporalmente adyacente que la posición del bloque actual 801 en el cuadro actual. La lista de candidatos se puede generar al agregar los vectores de movimiento de los bloques codificados 802 como vectores de movimiento candidatos. El bloque actual 801 entonces se puede codificar al seleccionar un vector de movimiento candidato de la lista de candidatos y al señalizar el índice del vector de movimiento candidato seleccionado.
La figura 9 es un diagrama esquemático que ilustra un patrón de ejemplo 900 para determinar una lista de candidatos de vectores de movimiento. Específicamente, un método operativo 100 de codificador 300 y/o de decodificador 400 y/o que emplea la funcionalidad del sistema de códec 200 puede emplear el patrón de determinación de lista de candidatos 900 para su uso al generar una lista de candidatos 911 para codificar un bloque actual 801 particionado a partir de una imagen 500. La lista de candidatos resultante 911 puede ser una lista de candidatos de fusión o una lista de candidatos de AMVP, que se puede emplear en la interpredicción de acuerdo con la interpredicción unidireccional 600 y/o interpredicción bidireccional 700.
Cuando se codifica un bloque actual 901, el patrón de determinación de lista de candidatos 900 busca las posiciones 905, denotadas como A0, A1, B0, B1 y/o B2, en la misma imagen/cuadro que el bloque actual 901 para vectores de movimiento candidatos válidos. El patrón de determinación de lista de candidatos 900 también puede buscar el bloque colocado 909 para vectores de movimiento candidatos válidos. El bloque colocado 909 es un bloque en la misma posición que el bloque actual 901, pero se incluye en una imagen/cuadro temporalmente adyacente. Los vectores de movimiento candidatos se pueden colocar entonces en una lista de candidatos 911 en un orden de verificación predeterminado. Por consiguiente, la lista de candidatos 911 es una lista generada de manera procedimental de vectores de movimiento candidatos indexados.
La lista de candidatos 911 se puede emplear para seleccionar un vector de movimiento para realizar interpredicción para el bloque actual 901. Por ejemplo, el codificador puede obtener las muestras de los bloques de referencia apuntados por los vectores de movimiento candidatos de la lista de candidatos 911. Entonces, el codificador puede seleccionar el vector de movimiento candidato que apunta al bloque de referencia que coincide más estrechamente con el bloque actual 901. El índice del vector de movimiento candidato seleccionado entonces se puede codificar para representar el bloque actual 901. En algunos casos, el o los vectores de movimiento candidatos apuntan a un bloque de referencia que contiene muestras de referencia parciales 915. En este caso, se puede emplear un filtro de interpolación 913 para reconstruir las muestras de referencia completas 915 para soportar la selección de vector de movimiento. Un filtro de interpolación 913 es un filtro capaz de muestreo ascendente de una señal. Específicamente, el filtro de interpolación 913 es un filtro capaz de aceptar una señal de calidad parcial/inferior como una entrada y determinar una aproximación de una señal de calidad más completa/superior. Como tal, el filtro de interpolación 913 se puede emplear en ciertos casos para obtener un conjunto completo de muestras de referencia 915 para su uso al seleccionar el bloque de referencia para el bloque actual 901 y por lo tanto, al seleccionar el vector de movimiento para codificar el bloque actual 901.
Los mecanismos anteriores para codificar un bloque con base en la interpredicción al usar una lista de candidatos pueden provocar ciertos errores cuando se emplean subimágenes, tal como las subimágenes 510. Específicamente, los problemas pueden presentarse cuando un bloque actual 901 está contenido en una subimagen actual, pero un vector de movimiento apunta a un bloque de referencia colocado al menos parcialmente en una subimagen adyacente. En este caso, la subimagen actual se puede extraer para presentación sin la subimagen adyacente. Cuando esto se presenta, las porciones del bloque de referencia en la subimagen adyacente no se pueden transmitir al decodificador y por lo tanto, el bloque de referencia puede no estar disponible para decodificar el bloque actual 901. Cuando esto se presenta, el decodificador no tiene acceso a datos suficientes para decodificar el bloque actual 901.
La presente descripción proporciona mecanismos para abordar este problema. En un ejemplo, se emplea una bandera que indica que la subimagen actual se debe tratar como una imagen. Esta bandera se puede establecer para soportar la extracción separada de la subimagen. Específicamente, cuando se establece la bandera, la subimagen actual se debe codificar sin hacer referencia a los datos en otras subimágenes. En este caso, la subimagen actual se trata como una imagen en la que la subimagen actual se codifica por separado de otras subimágenes y se puede mostrar como una imagen separada. Por lo tanto, esta bandera se puede denotar como un subpic_treated_as_pic_flag[ i ] donde i es un índice de la subimagen actual. Cuando se establece la bandera, los candidatos de vector de movimiento (también conocidos como predictores de vector de movimiento) obtenidos de un bloque colocado 909 incluyen solo vectores de movimiento que apuntan dentro de la subimagen actual. Cualquier predictor de vector de movimiento que apunte fuera de la subimagen actual se excluye de la lista de candidatos 911. Esto garantiza que los vectores de movimiento que apuntan fuera de la subimagen actual no se seleccionen y se eviten los errores asociados. Este ejemplo aplica específicamente a vectores de movimiento del bloque colocado 909. Los vectores de movimiento de las posiciones de búsqueda 905 en la misma imagen/cuadro se pueden corregir por mecanismos separados como se describe más adelante.
Se puede emplear otro ejemplo para direccionar las posiciones de búsqueda 905 cuando la subimagen actual se trata como una imagen (por ejemplo, cuando se establece subpic_treated_as_pic_flag[ i ]). Cuando la subimagen actual se trata como una imagen, la subimagen actual se debe extraer sin referencia a otras subimágenes. El mecanismo de ejemplo se refiere a filtros de interpolación 913. Un filtro de interpolación 913 se puede aplicar a muestras en una ubicación para interpolar (por ejemplo, predecir) muestras relacionadas en otra ubicación. En el presente ejemplo, los vectores de movimiento de los bloques codificados en las posiciones de búsqueda 905 pueden apuntar a muestras de referencia 915 fuera de la subimagen actual siempre que los filtros de interpolación 913 puedan interpolar estas muestras de referencia 915 con base solo en muestras de referencia 915 de la subimagen actual. Por consiguiente, el presente ejemplo emplea una función de recorte que se aplica cuando se aplican filtros de interpolación 913 a candidatos de vector de movimiento desde las posiciones de búsqueda 905 de la misma imagen. Esta función de recorte recorta los datos de las subimágenes adyacentes y por lo tanto, remueve estos datos como entrada al filtro de interpolación 913 cuando se determinan las muestras de referencia 915 apuntadas por los candidatos de vector de movimiento. Este planteamiento mantiene la separación entre las subimágenes durante la codificación para soportar la extracción separada y decodificación cuando la subimagen se trata como una imagen. La función de recorte se puede aplicar a un proceso de interpolación bilineal de muestra de luma, un proceso de filtrado de interpolación de ocho derivaciones de muestra de luma y/o un proceso de interpolación de muestra de croma.
La figura 10 es un diagrama de bloques que ilustra un filtro en bucle 1000 de ejemplo. El filtro en bucle 1000 se puede emplear para implementar filtros en bucle 225, 325 y/o 425. Además, el filtro en bucle 1000 se puede aplicar en el codificador y el decodificador cuando se realiza el método 100. Además, el filtro en bucle 1000 se puede aplicar para filtrar un bloque actual 801 particionado a partir de una imagen 500, que se puede codificar de acuerdo con la interpredicción unidireccional 600 y/o interpredicción bidireccional 700 con base en una lista de candidatos generada de acuerdo con el patrón 900. El filtro en bucle 1000 incluye un filtro de desbloqueo 1043, un filtro SAO 1045 y un filtro de bucle adaptativo (ALF) 1047. Los filtros del filtro en bucle 1000 se aplican en secuencia a los bloques de imagen reconstruidos en un codificador (por ejemplo, antes del uso como bloques de referencia) y en el decodificador antes de la visualización.
El filtro de desbloqueo 1043 se configura para remover los bordes en forma de bloque creados por la inter e intrapredicción basada en bloques. El filtro de desbloqueo 1043 escanea una porción de imagen (por ejemplo, un segmento de imagen) para discontinuidades en los valores de croma y/o luma que se presentan en los límites de partición. El filtro de desbloqueo 1043 entonces aplica una función de suavizado a los límites de bloque para remover estas discontinuidades. La resistencia del filtro de desbloqueo 1043 puede variar dependiendo de la actividad espacial (por ejemplo, varianza de componentes de luma/croma) que se presenta en un área adyacente a los límites de bloque.
El filtro SAO 1045 se configura para remover artefactos relacionados con la distorsión de muestra provocada por el proceso de codificación. El filtro SAO 1045 en un codificador clasifica las muestras desbloqueadas de una imagen reconstruida en varias categorías con base en la dirección y/o forma relativa de borde de desbloqueo. Entonces se determina un desplazamiento y se agrega a las muestras con base en las categorías. Entonces, los desplazamientos se codifican en el flujo de bits y se emplean por el filtro SAO 1045 en el decodificador. El filtro SAO 1045 remueve artefactos de bandas (bandas de valores en lugar de transiciones suaves) y artefactos vibrantes (señales espurias cerca de bordes afilados).
El ALF 1047, en el codificador, se configura para comparar una imagen reconstruida con una imagen original. El ALF 1047 determina los coeficientes que describen las diferencias entre la imagen reconstruida y la imagen original, por ejemplo, mediante un filtro adaptativo basado en Wiener. Estos coeficientes se codifican en el flujo de bits y se emplean por el ALF 1047 en el decodificador para remover las diferencias entre la imagen reconstruida y la imagen original.
Los datos de imagen filtrados por el filtro en bucle 1000 se envían a un búfer de imagen 1023, que es sustancialmente similar al búfer de imagen decodificada 223, 323 y/o 423. Como se señaló anteriormente, el filtro de desbloqueo 1043, el filtro SAO 1045 y/o el ALF 1047 se puede desactivar en los límites de subimagen y/o límites de mosaico por banderas, tal como una bandera loop_filter_across_subpic_enabled y/o loop_filter_across_tiles_enabled_flag, respectivamente.
La figura 11 es un diagrama esquemático que ilustra un flujo de bits 1100 de ejemplo que contiene parámetros de herramienta de codificación para soportar la decodificación de una subimagen de una imagen. Por ejemplo, el flujo de bits 1100 se puede generar por un sistema de códec 200 y/o un codificador 300 para decodificación por un sistema de códec 200 y/o un decodificador 400. Como otro ejemplo, el flujo de bits 1100 se puede generar por un codificador en el paso 109 del método 100 para su uso por un decodificador en el paso 111. Además, el flujo de bits 1100 puede contener una imagen codificada 500, correspondientes subimágenes 510 y/o bloques codificados asociados, tal como los bloques actuales 801 y/o 901, que se pueden codificar de acuerdo con la interpredicción unidireccional 600 y/o interpredicción bidireccional 700 con base en una lista de candidatos generada de acuerdo con el patrón 900. El flujo de bits 1100 también puede contener parámetros para configurar el filtro en bucle 1000.
El flujo de bits 1100 incluye un conjunto de parámetros de secuencia (SPS) 1110, una pluralidad de conjuntos de parámetros de imagen (PPS) 1111, una pluralidad de encabezados de segmento 1115 y datos de imagen 1120. Un SPS 1110 contiene datos de secuencia comunes a todas las imágenes en la secuencia de video contenida en el flujo de bits 1100. Estos datos pueden incluir tamaño de imagen, profundidad de bits, parámetros de herramienta de codificación, restricciones de velocidad de bits, etc. El PPS 1111 contiene parámetros que aplican a una imagen completa. Por lo tanto, cada imagen en la secuencia de video puede referirse a un PPS 1111. Se debe señalar que, en tanto que cada imagen se refiere a un PPS 1111, un PPS 1111 individual puede contener datos para múltiples imágenes en algunos ejemplos. Por ejemplo, se pueden codificar múltiples imágenes similares de acuerdo con parámetros similares. En este caso, un PPS 1111 individual puede contener datos para estas imágenes similares. El PPS 1111 puede indicar herramientas de codificación disponibles para segmentos en correspondientes imágenes, parámetros de cuantificación, desplazamientos, etc. El encabezado de segmento 1115 contiene parámetros que son específicos para cada segmento en una imagen. Por lo tanto, puede haber un encabezado de segmento 1115 por segmento en la secuencia de video. El encabezado de segmento 1115 puede contener información de tipo de segmento, conteos de orden de imagen (POC), listas de imágenes de referencia, pesos de predicción, puntos de entrada de mosaico, parámetros de desbloqueo, etc. Se debe señalar que un encabezado de segmento 1115 también se puede referir como un encabezado de grupo de mosaicos en algunos contextos.
Los datos de imagen 1120 contienen datos de video codificados de acuerdo con la interpredicción y/o intrapredicción, así como los correspondientes datos residuales transformados y cuantificados. Por ejemplo, una secuencia de video incluye una pluralidad de imágenes codificadas como datos de imagen. Una imagen es un cuadro individual de una secuencia de video y por lo tanto se muestra en general como una unidad individual cuando se muestra la secuencia de video. Sin embargo, las subimágenes se pueden mostrar para implementar ciertas tecnologías tal como realidad virtual, imagen en imagen, etc. Cada una de las imágenes hace referencia a un PPS 1111. Las imágenes se dividen en subimágenes, mosaicos y/o segmentos como se analizó anteriormente. En algunos sistemas, los segmentos se refieren como grupos de mosaicos que contienen mosaicos. Los segmentos y/o grupos de mosaicos de mosaicos hacen referencia a un encabezado de segmento 1115. Los segmentos se dividen además en CTU y/o CTB. Las CTU/CTB se dividen además en bloques de codificación con base en árboles de codificación. Los bloques de codificación entonces se pueden codificar/decodificar de acuerdo con los mecanismos de predicción.
Los conjuntos de parámetros en el flujo de bits 1100 contienen diferentes datos que se pueden emplear para implementar los ejemplos descritos en la presente. Para soportar una primera implementación de ejemplo, el SPS 1110 del flujo de bits 1100 contiene una subimagen tratada como una bandera de imagen 1131 relacionada con una subimagen especificada. En algunos ejemplos, la subimagen tratada como una bandera de imagen 1131 se denota como subpic_treated_as_pic _flag[ i ] donde i es un índice de la subimagen asociada con la bandera. Por ejemplo, la subimagen tratada como una bandera de imagen 1131 se puede establecer igual a uno para especificar que una i-ésima subimagen de cada imagen codificada en una secuencia de video codificada (en los datos de imagen 1120) se trata como una imagen en un proceso de decodificación exclusivo de las operaciones de filtrado en bucle. La subimagen tratada como una bandera de imagen 1131 se puede emplear cuando una subimagen actual en una imagen actual se ha codificado de acuerdo con interpredicción. Cuando la subimagen tratada como una bandera de imagen 1131 se establece para indicar que la subimagen actual se trata como una imagen, se puede determinar una lista de candidatos de vectores de movimiento para un bloque actual al excluir vectores de movimiento colocados de la lista de candidatos que se incluyen en un bloque colocado y que apunta fuera de la subimagen actual. Esto garantiza que los vectores de movimiento que apuntan fuera de la subimagen actual no se seleccionen y se eviten los errores asociados cuando la subimagen actual se extrae por separado de otras subimágenes.
En algunos ejemplos, la lista de candidatos de vectores de movimiento para el bloque actual se determina de acuerdo con la predicción de vector de movimiento de luma temporal. Por ejemplo, la predicción del vector de movimiento de luma temporal se puede emplear cuando el bloque actual es un bloque de luma de muestras de luma, un vector de movimiento actual seleccionado para el bloque actual es un vector de movimiento de luma temporal que apunta a muestras de luma de referencia en un bloque de referencia, y el bloque actual se codifica con base en las muestras de luma de referencia. En este caso, la predicción de vector de movimiento de luma temporal se realiza de acuerdo con:
xColBr = xCb cbWidth;
yColBr = yCb cbHeight;
rightBoundaryPos = subpic_treated_as_pic_flag[ SubPicIdx ] ?
SubPicRightBoundaryPos : pic_width_in_luma_samples - 1; y
botBoundaryPos = subpic_treated_as_pic_flag[ SubPicIdx ] ?
SubPicBotBoundaryPos : pic_height_in_luma_samples - 1,
donde xColBr e yColBR especifican una ubicación del bloque colocado, xCb e yCb especifican una muestra superior izquierda del bloque actual en relación con una muestra superior izquierda de la imagen actual, cbWidth es un ancho del bloque actual, cbHeight es una altura del bloque actual, SubPicRightBoundaryPos es una posición de un límite derecho de la subimagen, SubPicBotBoundaryPos es una posición de un límite inferior de la subimagen, pic_width_in_luma_samples es un ancho de la imagen actual medido en muestras de luma, pic_height_in_luma_samples es una altura de la imagen actual medida en muestras de luma, botBoundaryPos es una posición calculada del límite inferior de la subimagen, rightBoundaryPos es una posición calculada del límite derecho de la subimagen, SubPicIdx es un índice de la subimagen, y en donde los vectores de movimiento colocados se excluyen cuando yCb >> CtbLog2SizeY no es igual a yColBr >> CtbLog2SizeY, donde CtbLog2SizeY indica un tamaño de bloque de árbol de codificación.
La subimagen tratada como una bandera de imagen 1131 también se puede emplear para una segunda implementación de ejemplo. Como en el primer ejemplo, la subimagen tratada como una bandera de imagen 1131 se puede emplear cuando una subimagen actual en una imagen actual se ha codificado de acuerdo con interpredicción. En este ejemplo, se puede determinar un vector de movimiento para un bloque actual de la subimagen (por ejemplo, de una lista de candidatos). Cuando se establece la subimagen tratada como una bandera de imagen 1131, se puede aplicar una función de recorte a ubicaciones de muestra en un bloque de referencia. Una ubicación de muestra es una posición en una imagen que puede contener una muestra individual que incluye un valor de luma y/o un par de valores de croma. Entonces se puede aplicar un filtro de interpolación cuando el vector de movimiento apunta fuera de la subimagen actual. Esta función de recorte garantiza que el filtro de interpolación no se base en datos de subimágenes adyacentes a fin de mantener la separación entre las subimágenes para soportar la extracción separada.
La función de recorte se puede aplicar en un proceso de interpolación bilineal de muestra de luma. El proceso de interpolación bilineal de muestra de luma puede recibir entradas que incluyen una ubicación de luma en unidades de muestra completas (xIntL, yIntL). El proceso de interpolación bilineal de muestra de luma genera un valor de muestra de luma predicha (predSampleLXL). La función de recorte se aplica a las ubicaciones de muestra como sigue. Cuando subpic_treated_as_pic_flag[ SubPicIdx ] es igual a uno, se aplica lo siguiente: xInti = Clip3( SubPicLeftBoundaryPos, SubPicRightBoundaryPos, xIntL i ),
y
yInti = Clip3( SubPicTopBoundaryPos, SubPicBotBoundaryPos, yIntL i ),
donde subpic_treated_as_pic_flag es el conjunto de banderas para indicar que la subimagen se trata como una imagen, SubPicIdx es un índice de la subimagen, xInti e yInti son una ubicación de muestra recortada en el índice i, SubPicRightBoundaryPos es una posición de un límite derecho de la subimagen, SubPicLeftBoundaryPos es una posición de un límite izquierdo de la subimagen, SubPicTopBoundaryPos es una posición de un límite superior de la subimagen, SubPicBotBoundaryPos es una posición de un límite inferior de la subimagen y Clip3 es la función de recorte de acuerdo con:
z < X
z > y
de otro modo
donde x, y, y z son valores de entrada numéricos.
La función de recorte también se puede aplicar en un proceso de filtrado de interpolación de ocho derivaciones de muestra de luma. El proceso de filtrado de interpolación de ocho derivaciones de muestra de luma recibe entradas que incluyen una ubicación de luma en unidades de muestra completas (xIntL, yIntL). El proceso de interpolación bilineal de muestra de luma genera un valor de muestra de luma predicha (predSampleLXL). La función de recorte se aplica a las ubicaciones de muestra como sigue. Cuando subpic_treated_as_pic_flag[ SubPicIdx ] es igual a uno, se aplica lo siguiente:
xInti = Clip3( SubPicLeftBoundaryPos, SubPicRightBoundaryPos, xIntL i -3), y
yInti = Clip3( SubPicTopBoundaryPos, SubPicBotBoundaryPos, yIntL i -3),
donde subpic_treated_as_pic_flag es el conjunto de banderas para indicar que la subimagen se trata como una imagen, SubPicIdx es un índice de la subimagen, xInti e yInti son una ubicación de muestra recortada en el índice i, SubPicRightBoundaryPos es una posición de un límite derecho de la subimagen, SubPicLeftBoundaryPos es una posición de un límite izquierdo de la subimagen, SubPicTopBoundaryPos es una posición de un límite superior de la subimagen, SubPicBotBoundaryPos es una posición de un límite inferior de la subimagen y Clip3 es como se describió anteriormente.
La función de recorte también se puede aplicar en un proceso de interpolación de muestra de croma. El proceso de interpolación de muestra de croma recibe entradas que incluyen una ubicación de croma en unidades de muestra completas (xIntC, yIntC). El proceso de interpolación de muestra de croma genera un valor de muestra de croma predicha (predSampleLXC). La función de recorte se aplica a las ubicaciones de muestra como sigue. Cuando subpic_treated_as_pic_flag[ SubPicIdx ] es igual a uno, se aplica lo siguiente:
xInti = Clip3( SubPicLeftBoundaryPos/SubWidthC, SubPicRightBoundaryPos/SubWidthC, xIntC i), y
yInti = Clip3( SubPicTopBoundaryPos/SubHeightC, SubPicBotBoundaryPos/SubHeightC, yIntC i),
donde subpic_treated_as_pic_flag es el conjunto de banderas para indicar que la subimagen se trata como una imagen, SubPicIdx es un índice de la subimagen, xInti e yInti son una ubicación de muestra recortada en el índice i, SubPicRightBoundaryPos es una posición de un límite derecho de la subimagen, SubPicLeftBoundaryPos es una posición de un límite izquierdo de la subimagen, SubPicTopBoundaryPos es una posición de un límite superior de la subimagen, SubPicBotBoundaryPos es una posición de un límite inferior de la subimagen, SubWidthC y SubHeightC indican una relación de velocidad de muestreo horizontal y vertical entre muestras de luma y croma y Clip3 es como se describió anteriormente.
Se puede emplear una bandera activada de filtro de bucle a través de subimagen 1132 en el SPS 1110 para una tercera implementación de ejemplo. La bandera activada de filtro de bucle a través de subimagen 1132 se puede establecer para controlar si el filtrado se emplea a través de límites de subimágenes especificadas. Por ejemplo, la bandera activada de filtro de bucle a través de subimagen 1132 se puede denotar como loop_filter_across_ subpic_enabled_flag. La bandera activada de filtro de bucle a través de subimagen 1132 se puede establecer a uno cuando se especifica que las operaciones de filtrado en bucle se pueden realizar a través de los límites de la subimagen o establecer a cero cuando se especifica que las operaciones de filtrado en bucle no se realizan a través de los límites de la subimagen. Por lo tanto, las operaciones de filtrado se pueden realizar o no a través del límite de subimagen con base en el valor de la bandera activada de filtro de bucle a través de subimagen 1132. Las operaciones de filtrado pueden incluir aplicar un filtro de desbloqueo 1043, un ALF 1047 y/o un filtro SAO 1045. De esta manera, los filtros se pueden desactivar para subimágenes que se codifican para extracción separada o se pueden activar para subimágenes que se codifican para visualización como un grupo.
Se puede emplear una bandera activada de filtro de bucle a través de mosaicos 1134 en el PPS 1111 para una cuarta implementación de ejemplo. La bandera activada de filtro de bucle a través de mosaicos 1134 se puede establecer para controlar si el filtrado se emplea a través de límites de mosaicos especificados. Por ejemplo, la bandera activada de filtro de bucle a través de mosaicos 1134 se puede denotar como bandera activada de filtro de bucle a través de mosaicos. La bandera activada de filtro de bucle a través de mosaicos 1134 se puede establecer a uno cuando se especifica que las operaciones de filtrado en bucle se pueden realizar a través de los límites del mosaico o establecer a cero cuando se especifica que las operaciones de filtrado en bucle no se realizan a través de los límites del mosaico. Por lo tanto, las operaciones de filtrado se pueden realizar o no a través de límites del mosaico especificados con base en el valor de la bandera activada de filtro de bucle a través de mosaicos 1134. Las operaciones de filtrado pueden incluir aplicar un filtro de desbloqueo 1043, un ALF 1047 y/o un filtro SAO 1045.
Se pueden emplear datos de subimagen 1133 en el SPS 1110 para una quinta implementación de ejemplo. Los datos de subimagen 1133 pueden incluir un ancho, altura y desplazamiento para cada subimagen en los datos de imagen 1120. Por ejemplo, el ancho y altura de cada subimagen se pueden describir en los datos de subimagen 1133 en unidades de los CTB. En algunos ejemplos, el ancho y altura de la subimagen se almacenan en los datos de subimagen 1133 como subpic_width_minus1 y subpic_height_minus1, respectivamente. Además, se puede describir un desplazamiento de cada subimagen en los datos de subimagen 1133 en unidades de las CTU. Por ejemplo, el desplazamiento de cada subimagen se puede especificar como una posición vertical y una posición horizontal de la CTU superior izquierda de la subimagen. Específicamente, el desplazamiento de la subimagen se puede especificar como una diferencia entre la CTU superior izquierda de la imagen y la CTU superior izquierda de la subimagen. En algunos ejemplos, la posición vertical y la posición horizontal de la CTU superior izquierda de la subimagen se almacena en los datos de subimagen 1133 como subpic_ctu_top_left_y y subpic_ctu_top_left_x, respectivamente. Esta implementación de ejemplo describe las subimágenes en los datos de subimagen 1133 en términos de CTB/CTU en lugar de en términos de mosaicos. Esto permite que se empleen subimágenes incluso cuando no se emplean mosaicos en la correspondiente imagen/subimagen.
Se pueden emplear los datos de subimagen 1133 en el SPS 1110, una dirección de segmento 1136 en el encabezado de segmento 1115 y un ID de subimagen de segmento 1135 en el encabezado de segmento 1115 para una sexta implementación de ejemplo. Los datos de subimagen 1133 se pueden implementar como se describe en la quinta implementación de ejemplo. La dirección de segmento 1136 puede incluir un índice de segmento de nivel de subimagen de un segmento (por ejemplo, en datos de imagen 1120) asociado con el encabezado de segmento 1115. Por ejemplo, el segmento se indexa con base en la posición del segmento en la subimagen en lugar de con base en la posición del segmento en la imagen. La dirección de segmento 1136 se puede almacenar en una variable slice_address. El ID de subimagen de segmento 1135 incluye un ID de la subimagen que contiene el segmento asociado con el encabezado de segmento 1115. Específicamente, el ID de subimagen de segmento 1135 puede hacer referencia a la descripción (por ejemplo, ancho, altura y desplazamiento) de la correspondiente subimagen en los datos de subimagen 1133. El ID de subimagen de segmento 1135 se puede almacenar en una variable slice_subpic_id. Por consiguiente, la dirección de segmento 1136 se señaliza como un índice con base en la posición del segmento en la subimagen denotada por el ID de subimagen de segmento 1135 como se describe en los datos de subimagen 1133. De esta manera, la posición del segmento en la subimagen se puede determinar incluso cuando la subimagen se extrae por separado y otras subimágenes se omiten del flujo de bits 1100. Esto es debido a que este esquema de direccionamiento segrega las direcciones de cada subimagen de otras subimágenes. Por consiguiente, no es necesario que se reescriba el encabezado de segmento 1115 cuando se extrae la subimagen como se requeriría en un esquema de direccionamiento donde el segmento se direcciona con base en la posición del segmento en la imagen. Se debe señalar que este planteamiento se puede emplear cuando el segmento es un segmento rectangular/cuadrado (como lo opuesto a un segmento de escaneo de trama). Por ejemplo, un rect_slice_flag en el PPS 1111 se puede establecer igual a uno para indicar que el segmento es un segmento rectangular.
Una implementación de ejemplo de las subimágenes usadas en algunos sistemas de codificación de video es como sigue. La información relacionada con las subimágenes que pueden estar presentes en una CVS se puede señalizar en un SPS. Esta señalización puede incluir la siguiente información. El número de subimágenes que están presentes en cada imagen de la CVS se puede incluir en el SPS. En el contexto del SPS o una c Vs , las subimágenes colocadas para todas las unidades de acceso (AU) se pueden referir colectivamente como una secuencia de subimágenes. También se puede incluir un bucle para especificar además información relacionada con las propiedades de cada subimagen en el SPS. Esta información puede incluir la identificación de subimagen, la ubicación de subimagen (por ejemplo, la distancia de desplazamiento entre la muestra de luma de la esquina superior izquierda de la subimagen y la muestra de luma de la esquina superior izquierda de la imagen) y el tamaño de la subimagen. Además, el SPS también se puede emplear para indicar si cada una de las subimágenes es una subimagen restringida en movimiento, donde una subimagen restringida en movimiento es una subimagen que contiene un MCTS. La información de perfil, capa y nivel para cada subimagen se puede incluir en un flujo de bits a menos que esta información se pueda derivar de otro modo. Esta información se puede emplear para información de perfil, capa y nivel para un flujo de bits extraído creado a partir de la extracción de la subimagen del flujo de bits original que incluye la imagen completa.
El perfil y capa de cada subimagen se pueden derivar para ser el mismo que el perfil y capa del original. El nivel para cada subimagen se puede señalizar explícitamente. Esta señalización puede estar presente en el bucle descrito anteriormente. Los parámetros de decodificador de referencia hipotético de nivel de secuencia (HRD) se pueden señalizar en una porción de información de usabilidad de video (VUI) del SPS para cada subimagen (o de manera equivalente, cada secuencia de subimagen).
Cuando una imagen no se particiona en dos o más subimágenes, las propiedades de la subimagen (por ejemplo, ubicación, tamaño, etc.), excepto el ID de subimagen, no se pueden señalizar en el flujo de bits. Cuando se extrae una subimagen en imágenes en una CVS, cada unidad de acceso en el nuevo flujo de bits puede no contener subimágenes, debido a que los datos de imagen resultantes en cada AU en el nuevo flujo de bits no se particionan en múltiples subimágenes. Por lo tanto, las propiedades de subimagen, tal como ubicación y tamaño, se pueden omitir del SPS, puesto que esta información se puede derivar de las propiedades de imagen. Sin embargo, la identificación de subimagen todavía se señaliza puesto que este ID se puede referir por unidades de NAL de capa de codificación de video (VCL)/grupos de mosaicos incluidos en la subimagen extraída. Se debe evitar cambiar el ID de subimagen cuando se extrae la subimagen para reducir el uso de recursos.
La ubicación de una subimagen en la imagen (desplazamiento x y desplazamiento y) se puede señalizar en unidades de muestras de luma y puede representar la distancia entre la muestra de luma de la esquina superior izquierda de la subimagen y la muestra de luma de la esquina superior izquierda de la imagen. En otro ejemplo, la ubicación de una subimagen en la imagen se puede señalizar en unidades del tamaño de bloque de luma de codificación mínimo (MinCbSizeY) y puede representar la distancia entre la muestra de luma de la esquina superior izquierda de la subimagen y la muestra de luma de la esquina superior izquierda de la imagen. En otro ejemplo, la unidad de desplazamientos de ubicación de subimagen se puede indicar explícitamente por un elemento de sintaxis en un conjunto de parámetros, y la unidad puede ser CtbSizeY, MinCbSizeY, muestra de luma u otros valores. El códec puede requerir que cuando el borde derecho de una subimagen no coincide con el borde derecho de la imagen, el ancho de la subimagen debe ser un múltiplo entero del tamaño de CTU de luma (CtbSizeY). Del mismo modo, el códec puede requerir además que cuando el borde inferior de una subimagen no coincide con el borde inferior de la imagen, la altura de la subimagen debe ser un múltiplo entero de CtbSizeY. El códec también puede requerir que cuando el ancho de una subimagen no es un múltiplo entero del tamaño de CTU de luma, la subimagen se ubica en la posición más a la derecha en la imagen. Del mismo modo, el códec también puede requerir que la subimagen se ubique en la posición más inferior en la imagen cuando la altura de la subimagen no es un múltiplo entero del tamaño de CTU de luma. Cuando el ancho de una subimagen se señaliza en unidades de tamaño de CTU de luma y el ancho de la subimagen no es un múltiplo entero del tamaño de CTU de luma, el ancho real en muestras de luma se puede derivar con base en la ubicación de desplazamiento de la subimagen, el ancho de la subimagen en el tamaño de CTU de luma y el ancho de la imagen en muestras de luma. Del mismo modo, cuando la altura de una subimagen se señaliza en unidades de tamaño de CTU de luma y la altura de la subimagen no es un múltiplo entero del tamaño de CTU de luma, la altura real en las muestras de luma se puede derivar con base en la ubicación de desplazamiento de la subimagen, la altura de la subimagen en el tamaño de CTU de luma y la altura de la imagen en las muestras de luma.
Para cualquier subimagen, el ID de subimagen puede ser diferente del índice de subimagen. El índice de subimagen puede ser el índice de la subimagen como se señaliza en el bucle de subimágenes en el SPS. De manera alternativa, el índice de subimagen puede ser un índice asignado en orden de escaneo de trama de subimagen con respecto a la imagen. Cuando el valor del ID de subimagen de cada subimagen es el mismo que su índice de subimagen, el ID de subimagen se puede señalizar o derivar. Cuando el ID de subimagen de cada subimagen es diferente de su índice de subimagen, se señaliza explícitamente el ID de subimagen. EL número de bits para señalizar los ID de subimagen se puede señalizar en el mismo conjunto de parámetros que contiene propiedades de subimágenes (por ejemplo, en el SPS). Algunos valores para el ID de subimagen se pueden reservar para ciertos propósitos. Esta reserva de valor puede ser como sigue. Cuando los encabezados de segmento/grupo de mosaicos contienen un ID de subimagen para especificar qué subimagen incluye el grupo de mosaicos, el valor cero se puede reservar y no se puede usar para subimágenes para garantizar que los primeros pocos bits en el comienzo de un encabezado de segmento/grupo de mosaico no sean todos ceros para evitar generar un código de prevención de emulación. Cuando las subimágenes de una imagen no cubren toda el área de la imagen sin superposición y separación, se puede reservar un valor (por ejemplo, valor uno) para grupos de mosaicos que no son parte de ninguna de las subimágenes. De manera alternativa, se puede señalizar explícitamente el ID de subimagen del área restante. El número de bits para señalizar el ID de subimagen se puede limitar como sigue. El intervalo de valores debe ser suficiente para identificar de manera única todas las subimágenes de una imagen, incluidos los valores reservados del ID de subimagen. Por ejemplo, el número mínimo de bits para un ID de subimagen puede ser el valor de Ceil( Log2( número de subimágenes en una imagen número de ID de subimagen reservado ).
La unión de subimágenes en un bucle se puede requerir para cubrir toda la imagen sin separación y sin superposición. Cuando se aplica esta restricción, está presente una bandera para cada subimagen para especificar si la subimagen es una subimagen restringida en movimiento, que significa que la subimagen se puede extraer. De manera alternativa, la unión de subimágenes puede no cubrir toda la imagen. Sin embargo, puede no haber superposición entre las subimágenes de una imagen.
Los ID de subimágenes pueden estar presentes inmediatamente después de un encabezado de unidad de NAL para ayudar al proceso de extracción de subimágenes de tal forma que el extractor no necesite entender el resto de los bits de unidad de NAL. Para las unidades NAL de VCL, el ID de subimagen puede estar presente en los primeros bits de encabezados de grupo de mosaicos. Para unidades NAL no de VCL, puede aplicar lo siguiente. Puede que no se requiera que el ID de subimagen esté presente inmediatamente después del encabezado de unidad de NAL para el SPS. Con respecto al PPS, cuando todos los grupos de mosaicos de la misma imagen se restringen para referirse al mismo PPS, no hay necesidad de que el ID de subimagen esté presente inmediatamente después del encabezado de unidad de NAL. Por otra parte, si se permite que los grupos de mosaicos de la misma imagen se refieran a PPS diferentes, el ID de subimagen puede estar presente en los primeros bits de PPS (por ejemplo, inmediatamente después del encabezado de unidad de NAL de PPS). En este caso, no se permite que dos grupos de mosaicos diferentes de una imagen compartan el mismo PPS. De manera alternativa, cuando se permite que los grupos de mosaicos de la misma imagen se refieran a diferentes PPS, y también se permite que diferentes grupos de mosaicos de la misma imagen compartan el mismo PPS, no hay ningún ID de subimagen presente en la sintaxis de PPS. De manera alternativa, cuando se permite que los grupos de mosaicos de la misma imagen se refieran a diferentes PPS, y también se permite que diferentes grupos de mosaicos de la misma imagen compartan el mismo PPS, está presente una lista de los ID de subimágenes en la sintaxis de PPS. La lista indica las subimágenes a las cuales aplica el PPS. Para otras unidades NAL no de VCL, si la unidad no de VCL aplica al nivel de imagen (por ejemplo, delimitador de unidad de acceso, final de secuencia, final de flujo de bits, etc.) o superior, entonces no hay necesidad de que el ID de subimagen esté presente inmediatamente después de su encabezado de unidad NAL. De otro modo, el ID de subimagen puede estar presente inmediatamente después del encabezado de unidad de NAL.
La partición de mosaicos dentro de subimágenes individuales se puede señalizar en el PPS, pero se permite que los grupos de mosaicos dentro de la misma imagen se refieran a diferentes PPS. En este caso, los mosaicos se agrupan dentro de cada subimagen en lugar de a través de la imagen. Por consiguiente, el concepto de agrupación de mosaicos en este caso incluye una partición de una subimagen en mosaicos. De manera alternativa, se puede emplear un conjunto de parámetros de subimagen (SPPS) para describir la partición de mosaicos dentro de subimágenes individuales. Un SPPS se refiere a un SPS al emplear un elemento de sintaxis que se refiere al ID de SPS. Un SPPS puede contener ID de subimagen. Para propósitos de extracción de subimagen, el elemento de sintaxis que se refiere al ID de subimagen es el primer elemento de sintaxis en SPPS. El SPPS contiene una estructura de mosaico que indica un número de columnas, un número de filas, un espaciamiento de mosaico uniforme, etc. El SPPS puede contener un indicador para indicar si el filtro de bucle se activa o no a través de los límites de subimagen asociada. De manera alternativa, las propiedades de subimagen para cada subimagen se pueden señalizar en el SPPS en lugar de en el SPS. La partición de mosaicos dentro de subimágenes individuales se puede señalizar en el PPS, pero se permite que los grupos de mosaicos dentro de la misma imagen se refieran a diferentes PPS. Una vez activado, un SPPS puede durar para una secuencia de AU consecutivos en orden de decodificación, pero se puede desactivar/activar en una AU que no es el inicio de una CVS. Múltiples SPPS pueden estar activos en cualquier momento durante el proceso de decodificación de un flujo de bits de capa individual con múltiples subimágenes, y un SPP se puede compartir por diferentes subimágenes de una AU. De manera alternativa, SPPS y PPS se pueden fusionar en un conjunto de parámetros. Para que esto se presente, todos los grupos de mosaicos que se incluyen en la misma subimagen se pueden restringir para referirse al mismo conjunto de parámetros que resulta de la fusión entre SPPS y PPS.
El número de bits usados para señalizar el ID de subimagen se puede señalizar en el encabezado de unidad de NAL. Esta información, cuando está presente, ayuda al proceso de extracción de subimagen al analizar valores de ID de subimagen para el comienzo de la carga útil de una unidad de NAL (por ejemplo, los primeros pocos bits inmediatamente después del encabezado de unidad de NAL). Para esta señalización, algunos de los bits reservados en un encabezado de unidad de NAL se pueden usar para evitar incrementar la longitud del encabezado de unidad de NAL. El número de bits para esta señalización debe cubrir el valor de sub-picture-ID-bit-len. Por ejemplo, cuatro bits de los siete bits reservados en el encabezado de la unidad NAL de VVC se pueden usar para este propósito.
Cuando se decodifica una subimagen, la ubicación de cada bloque de árbol de codificación, denotado como posición de CTB vertical (xCtb) y posición de CTB horizontal (yCtb), se ajustan a una ubicación de muestra de luma real en la imagen en lugar de una ubicación de muestra de luma en la subimagen. De esta manera, se puede evitar la extracción de la subimagen co-ubicada de cada imagen de referencia, puesto que todo se decodifica como si se ubicara en la imagen en lugar de en la subimagen. Para ajustar la ubicación del bloque de árbol de codificación, las variables SubpictureXOffset y SubpictureYOffset se derivan con base en la posición de subimagen (subpic_x_offset y subpic_y_offset). Los valores de las variables se suman a los valores de las coordenadas x e y de la ubicación de la muestra de luma, respectivamente, de cada bloque de árbol de codificación en la subimagen. El proceso de extracción de subimagen se puede definir como sigue. La entrada al proceso incluye la subimagen objetivo que se va a extraer. Esto se puede ingresar en la forma de un ID de subimagen o una ubicación de subimagen. Cuando la entrada es la ubicación de la subimagen, el ID de subimagen asociado se puede resolver al analizar la información de subimagen en el SPS. Para unidades NAL no de VCL, aplica lo siguiente. Los elementos de sintaxis en el SPS relacionados con el tamaño y nivel de imagen se actualizan con la información de tamaño y nivel de la subimagen. Las siguientes unidades de NAL no de VCL no se alteran por extracción: PPS, delimitador de unidad de acceso (AUD), final de secuencia (EOS), final de flujo de bits (EOB) y cualquier otra unidad de NAL no de VCL que sea aplicable al nivel de imagen o superior. Se remueven las unidades de NAL no de VCL restantes con ID de subimagen no igual al ID de subimagen objetivo. También se remueven las unidades de NAL no de VCL con ID de subimagen no igual al ID de subimagen objetivo.
Un mensaje de SEI de anidamiento de subimagen se puede usar para anidar mensajes de SEI de nivel AU o de nivel subimagen para un conjunto de subimágenes. Los datos llevados en el mensaje de SEI de anidación de subimagen pueden incluir el período de almacenamiento en búfer, sincronización de imagen y los mensajes de SEI no de HRD. La sintaxis y semántica de este mensaje de SEI puede ser como sigue. Para operaciones de sistema, tal como entornos de formato de medios omnidireccionales (OMAF), se puede solicitar y decodificar un conjunto de secuencias de subimagen que cubren una ventana de visualización por el reproductor de OMAF. Por lo tanto, un mensaje de SEI de nivel de secuencia puede transportar información de un conjunto de secuencias de subimagen que incluyen colectivamente una región de imagen rectangular o cuadrada. La información se puede usar por los sistemas, y la información es indicativa de la capacidad mínima de decodificación, así como la velocidad de bits del conjunto de secuencias de subimagen. La información incluye el nivel del flujo de bits que incluye solo el conjunto de secuencias de subimagen, la velocidad de bits del flujo de bits y opcionalmente un proceso de extracción de flujo de bits especificado para el conjunto de secuencias de subimagen.
La implementación anterior incluye varios problemas. La señalización del ancho y altura de la imagen y/o los anchos/alturas/desplazamientos de las subimágenes no es eficiente. Se pueden guardar más bits para señalización de esta información. Cuando se señaliza la información de tamaño y posición de subimagen en el SPS, el PPS incluye la configuración de mosaico. Además, se permite que un p Ps se comparta por múltiples subimágenes de la misma imagen. Por lo tanto, los intervalos de valores para num_tile_columns_minus1 y num_tile_rows_minus1 se deben especificar más claramente. Además, la semántica de la bandera que indica si una subimagen se restringe en movimiento no se especifica claramente. El nivel se señaliza obligatoriamente para cada secuencia de subimagen. Sin embargo, cuando una secuencia de subimagen no se puede decodificar de manera independiente, la señalización del nivel de la subimagen no es útil. Además, en algunas aplicaciones algunas secuencias de subimagen se deben decodificar y representar junto con al menos otra secuencia de subimagen. Por lo tanto, la señalización de un nivel para una sola de estas secuencias de subimagen puede no ser útil. Además, determinar un valor de nivel para cada subimagen puede ser una carga para el codificador.
Con la introducción de secuencias de subimagen independientemente decodificables, los escenarios que requieren la decodificación y extracción independiente de ciertas regiones de las imágenes pueden no funcionar con base en los grupos de mosaicos. Por lo tanto, la señalización explícita de los ID de grupos de mosaicos puede no ser útil. Además, cuando está presente, el valor de cada uno de los elementos de sintaxis de PPS pps_seq_parameter_set_id y loop_filter_across_tiles_enabled_flag debe ser el mismo en todos los PPS referidos por los encabezados de grupo de mosaicos de una imagen codificada. Esto es debido a que el SPS activo no debe cambiar dentro de una CVS, y el valor de loop_filter_across_enabled_flag debe ser el mismo para todos los mosaicos dentro de una imagen para el procesamiento paralelo con base en mosaicos. Se debe especificar claramente si se debe permitir la mezcla de grupos de mosaicos rectangulares y de escaneo de trama dentro de una imagen. También se debe especificar si se debe permitir que las subimágenes que son parte de diferentes imágenes y emplean el mismo ID de subimagen en una CVS usen diferentes modos de grupo de mosaicos. El proceso de derivación para predicción de vector de movimiento de luma temporal puede no permitir tratar los límites de subimagen como límites de imagen en predicción de vector de movimiento temporal (TMVP). Además, el proceso de interpolación bilineal de muestra de luma, el proceso de filtrado de interpolación de 8 derivaciones de muestra de luma y el proceso de interpolación de muestra de croma no se pueden configurar para tratar límites de subimagen como límites de imagen en compensación de movimiento. Además, también se debe especificar un mecanismo para el control de las operaciones de desbloqueo, SAO y filtrado de ALF en los límites de subimagen.
Con la introducción de secuencias de subimagen independientemente decodificables, la loop_filter_across_tile_groups_enabled_flag puede ser menos útil. Esto es debido a que desactivar las operaciones de filtrado en bucle para propósitos de procesamiento paralelo también se puede satisfacer al establecer loop_filter_across_tile_groups_enabled_flag igual a cero. Además, desactivar las operaciones de filtrado en bucle para permitir la decodificación y extracción independiente de ciertas regiones de las imágenes también se puede satisfacer al establecer loop_filter_across_sub_pic_enabled_flag igual a cero. Por lo tanto, especificar adicionalmente los procesos para desactivar las operaciones de filtrado en bucle a través de los límites de grupo de mosaico con base en loop_filter_across_tile_groups_enabled_flag sería una carga innecesaria para el decodificador y bits residuales. Además, el proceso de decodificación como se especificó anteriormente puede no permitir desactivar las operaciones de filtrado de ALF a través de límites de mosaico.
Como tal, la presente descripción incluye diseños para soportar la codificación de video basada en subimágenes. Una subimagen es un área rectangular o cuadrada dentro de una imagen que se puede o no decodificar de manera independiente usando el mismo proceso de decodificación que una imagen. Las descripciones de las técnicas se basan en la norma de codificación de vídeo versátil (VVC). Sin embargo, las técnicas también se pueden aplicar a otras especificaciones de códec de video.
En algunos ejemplos, se señaliza una unidad de tamaño para los elementos de sintaxis de ancho y altura de imagen y la lista de elementos de sintaxis de ancho/alto/offset_x/offset_y de subimagen. Todos los elementos de sintaxis se señalizan en la forma de xxx_minus1. Por ejemplo, cuando la unidad de tamaño es de sesenta y cuatro muestras de luma, un valor de ancho de noventa y nueve especifica un ancho de imagen de seis mil cuatrocientas muestras de luma. El mismo ejemplo se aplica a otros de estos elementos de sintaxis. En otro ejemplo, se aplica uno o más de lo siguiente. Se puede indicar una unidad de tamaño para los elementos de sintaxis de ancho y altura de imagen en la forma de xxx_minus1. Esta unidad de tamaño señalizada para la lista de elementos de sintaxis de ancho/alto/offset_x/offset_y de subimagen puede estar en la forma de xxx_minus1. En otro ejemplo, se aplica uno o más de lo siguiente. Se puede señalizar una unidad de tamaño para el ancho de imagen y la lista de elementos de sintaxis de ancho/offset_x de subimagen en la forma de xxx_minus1. Se puede señalizar una unidad de tamaño para la altura de imagen y la lista de elementos de sintaxis de altura/offset_y de subimagen en la forma de xxx_minus1. En otro ejemplo, se aplica uno o más de lo siguiente. Los elementos de sintaxis de ancho y altura de imagen en la forma de xxx_minus1 se pueden señalizar en unidades de unidades de codificación mínimas. Los elementos de sintaxis de ancho/altura/offset_x/offset_y de subimagen en la forma de xxx_minus1 se pueden señalizar en unidades de las CTU o los CTB. El ancho de subimagen para cada subimagen en el límite de imagen derecho se puede derivar. La altura de subimagen para cada subimagen en el límite de imagen inferior se puede derivar. Otros valores del ancho/alto/offset_x/offset_y de subimagen se pueden señalizar en el flujo de bits. En otros ejemplos, se puede agregar un modo para señalización de los anchos y alturas de las subimágenes, así como sus posiciones dentro de la imagen, para los casos cuando las subimágenes tienen un tamaño uniforme. Las subimágenes tienen un tamaño uniforme cuando incluyen las mismas filas de subimágenes y columnas de subimágenes. En este modo, se pueden señalizar el número de filas de subimagen, el número de columnas de subimagen, el ancho de cada columna de subimagen y la altura de cada fila de subimagen.
En otro ejemplo, la señalización del ancho y altura de subimagen no se puede incluir en el PPS. El num_tile_columns_minus1 y num_tile_rows_minus1 deben estar en el intervalo de cero a un valor entero como mil veinticuatro, inclusive. En otro ejemplo, cuando las subimágenes que se refieren al PPS tienen más de un mosaico, se pueden señalizar dos elementos de sintaxis condicionados por una bandera de presencia en el PPS. Estos elementos de sintaxis se emplean para señalizar el ancho y altura de subimagen en unidades de los CTB y especifican el tamaño de todas las subimágenes que se refieren al PPS.
En otro ejemplo, también se puede señalar información adicional que describe subimágenes individuales. Una bandera, tal como un sub_pic_treated_as_pic_flag[ i ], se puede señalizar para cada secuencia de subimagen para indicar si las subimágenes de la secuencia de subimagen se tratan como imágenes en el proceso de decodificación para propósitos diferentes de las operaciones de filtrado en bucle. El nivel al cual se ajusta una secuencia de subimagen solo se puede señalizar cuando sub_pic_treated_as_pic_flag[ i ] es igual a uno. Una secuencia de subimagen es una CVS de subimágenes con el mismo ID de subimagen. Cuando sub_pic_treated_as_pic_flag[ i ] es igual a uno, también se puede señalizar el nivel de la secuencia de subimagen. Esto se puede controlar por una bandera para todas las secuencias de subimagen o por una bandera por cada secuencia de subimagen. En otro ejemplo, la extracción de sub-flujo de bits se puede activar sin cambiar las unidades de NAL de VCL. Esto se puede lograr al remover la señalización explícita de ID de grupo de mosaicos del PPS. La semántica de tile_group_address se especifica cuando rect_tile_group_flag es igual a uno que indica grupos de mosaicos rectangulares. El tile_group_address puede incluir el índice de grupo de mosaicos del grupo de mosaicos entre los grupos de mosaicos dentro de la subimagen.
En otro ejemplo, el valor de cada uno de los elementos de sintaxis de PPS pps_seq_parameter_set_id y loop_filter_across_tiles_enabled_flag debe ser el mismo en todos los PPS referidos por los encabezados de grupo de mosaicos de una imagen codificada. Otros elementos de sintaxis de PPS pueden ser diferentes para diferentes PPS referidos a los encabezados de grupo de mosaico de una imagen codificada. El valor de single_tile_in_pic_flag puede ser diferente para diferentes PPS referidos a los encabezados de grupo de mosaicos de una imagen codificada. De esta manera, algunas imágenes en una CVS pueden tener solo un mosaico, en tanto que otras imágenes en una CVS pueden tener varios mosaicos. Esto también permite que algunas subimágenes de una imagen (por ejemplo, aquellas que son muy grandes) tengan múltiples mosaicos en tanto que otras subimágenes de la misma imagen (por ejemplo, aquellas que son muy pequeñas) tienen solo un mosaico.
En otro ejemplo, una imagen puede incluir una mezcla de grupos de mosaicos rectangulares y de escaneo de trama. Por consiguiente, algunas subimágenes de la imagen usan el modo de grupo de mosaicos rectangulares, en tanto que otras subimágenes usan el modo de grupo de mosaicos de escaneo de trama. Esta flexibilidad es beneficiosa para escenarios de fusión de flujo de bits. De manera alternativa, una restricción puede requerir que todas las subimágenes de una imagen deban usar el mismo modo de grupo de mosaicos. Las subimágenes de diferentes imágenes con el mismo ID de subimagen en una CVS pueden no usar diferentes modos de grupo de mosaicos. Las subimágenes de diferentes imágenes con el mismo ID de subimagen en una CVS pueden usar diferentes modos de grupo de mosaicos.
En otro ejemplo, cuando sub_pic_treated_as_pic_flag[ i ] para una subimagen es igual a uno, los vectores de movimiento colocados para la predicción de vector de movimiento temporal para la subimagen se limitan a venir de dentro de los límites de la subimagen. Por consiguiente, la predicción del vector de movimiento temporal para la subimagen se trata como si los límites de subimagen fueran límites de imagen. Además, las operaciones de recorte se especifican como parte del proceso de interpolación bilineal de muestra de luma, el proceso de filtrado de interpolación de 8 derivaciones de muestra de luma y el proceso de interpolación de muestra de croma, para permitir el tratamiento de límites de subimagen como límites de imagen en compensación de movimiento para subimágenes para las cuales el sub_pic_treated_as_pic_flag[ i ] es igual a uno.
En otro ejemplo, cada subimagen se asocia con una bandera señalizada, tal como loop_filter_across_sub_pic_enabled_flag. La bandera se emplea para control de operaciones de filtrado en bucle en los límites de la subimagen y para control de las operaciones de filtrado en los correspondientes procesos de decodificación. El proceso de filtro de desbloqueo no se puede aplicar a codificación de bordes de sub-bloque y bordes de bloque de transformada que coinciden con los límites de las subimágenes para las cuales loop_filter_across_sub_pic_enabled_flag es igual a cero. De manera alternativa, el proceso de filtro de desbloqueo no se aplica a la codificación de bordes de sub-bloque y bordes de bloque de transformada que coinciden con los límites superior o izquierdo de las subimágenes para las cuales loop_filter_across_sub_pic_enabled_flag es igual a cero. De manera alternativa, el proceso de filtro de desbloqueo no se aplica a la codificación de bordes de sub-bloque y bordes de bloque de transformada que coinciden con los límites de subimágenes para las cuales sub_pic_treated_as_pic_flag[ i ] es igual a uno o cero. De manera alternativa, el proceso de filtro de desbloqueo no se aplica a codificación de bordes de sub-bloque y bordes de bloque de transformada que coinciden con los límites superior o izquierdo de las subimágenes. Se puede especificar una operación de recorte para desactivar la operación de filtrado de SAO a través de los límites de una subimagen cuando loop_filter_across_sub_pic_enabled_flag para la subimagen es igual a cero. Se puede especificar una operación de recorte para desactivar la operación de filtrado de ALF a través de los límites de la subimagen cuando loop_filter_across_sub_pic_enabled_flag es igual a cero para una subimagen. La loop_filter_across_tile_group_senabled_flag también se puede remover del PPS. Por consiguiente, cuando loop_filter_across_tiles_enabled_flag es igual a cero, las operaciones de filtrado en bucle a través de los límites de grupo de mosaicos que no son límites de subimagen no se desactivan. Las operaciones de filtro de bucle pueden incluir desbloqueo, SAO y ALF. En otro ejemplo, se especifica una operación de recorte para desactivar la operación de filtrado de ALF a través de los límites de un mosaico cuando loop_filter_across_tiles_enabled_flag para el mosaico es igual a cero.
Uno o más de los ejemplos anteriores se pueden implementar como sigue. Una subimagen se puede definir como una región rectangular o cuadrada de uno o más segmentos o grupos de mosaicos dentro de una imagen. Las siguientes divisiones de elementos de procesamiento pueden formar partición espacial o por componentes: la división de cada imagen en componentes, la división de cada componente en CTB, la división de cada imagen en subimágenes, la división de cada subimagen en columnas de mosaico dentro de una subimagen, la división de cada subimagen en filas de mosaico dentro de una subimagen, la división de cada columna de mosaico dentro de una subimagen en mosaicos, la división de cada fila de mosaico dentro de una subimagen en mosaicos y la división de cada subimagen en grupos de mosaicos.
El proceso para el proceso de escaneo de mosaico y trama de CTB dentro de una subimagen puede ser como sigue. La lista ColWidth[ i ] para i que varía de cero a num_tile_columns_minus1, inclusive, especificando el ancho de la i-ésima columna de mosaico en unidades de los CTB, se puede derivar como sigue:
if( uniform_tile_spacing_flag )
for( i = 0; i <= num_tile_columns_minus1; i++ )
ColWidth[ i ] = ( ( i 1 ) * SubPicWidthInCtbsY ) / ( num_tile_columns_minus1 1 ) -
( i * SubPicWidthInCtbsY ) / ( num_tile_columns_minus1 1 )
else {
ColWidth[ num_tile_columns_minus1 ] = SubPicWidthInCtbsY (6-1)
for( i = 0; i < num_tile_columns_minus1; i++ ) {
ColWidth[ i ] = tile_column_width_minus1[ i ] 1
ColWidth[ num_tile_columns_minus1 ] -= ColWidth[ i ]
}
}
La lista RowHeight[ j ] para j que varía de cero a num_tile_rows_minus1, inclusive, especificando la altura de la j-ésima fila de mosaico en unidades de los CTB, se deriva como sigue:
if( uniform_tile_spacing_flag )
for( j = 0; j <= num_tile_rows_minus1; j++ )
RowHeight[ j ] = ( ( j 1 ) * SubPicHeightInCtbsY ) / ( num_tile_rows_minus1 1 ) -( j * SubPicHeightInCtbsY ) / ( num_tile_rows_minus1 1 )
else {
RowHeight[ num_tile_rows_minus1 ] = SubPicHeightInCtbsY (6-2) for( j = 0; j < num_tile_rows_minus1; j++ ) {
RowHeight[ j ] = tile_row_height_minus1[ j ] 1
RowHeight[ num_tile_rows_minus1 ] -= RowHeight[ j ]
}
}
La lista ColBd[ i ] para i que varía de cero a num_tile_columns_minus1 1, inclusive, especificando la ubicación del límite de i-ésima columna de mosaico en unidades de los CTB, se deriva como sigue:
for( ColBd[ 0 ] = 0, i = 0; i <= num_tile_columns_minus1; i++ )
ColBd[ i 1 ] = ColBd[ i ] ColWidth[ i ] (6-3)
La lista RowBd[ j ] para j que varía de cero a num_tile_rows_minus1 1, inclusive, especificando la ubicación del límite de j-ésima fila de mosaico en unidades de los CTB, se deriva como sigue:
for( RowBd[ 0 ] = 0, j = 0; j <= num_tile_rows_minus1; j++ )
RowBd[ j 1 ] = RowBd[ j ] RowHeight[ j ] (6-4)
La lista CtbAddrRsToTs[ ctbAddrRs ] para ctbAddrRs que varía de cero a SubPicSizeInCtbsY - 1, inclusive, especificando la conversión de una dirección de CTB en el escaneo de trama de CTB de una subimagen a una dirección de CTB en el escaneo de mosaico de la subimagen, se deriva como sigue:
for( ctbAddrRs = 0; ctbAddrRs < SubPicSizeInCtbsY; ctbAddrRs++ ) {
tbX = ctbAddrRs % SubPicWidthInCtbsY
tbY = ctbAddrRs / SubPicWidthInCtbsY
for( i = 0; i <= num_tile_columns_minus1; i++ )
if( tbX >= ColBd[ i ] )
tileX = i
for( j = 0; j <= num_tile_rows_minus1; j++ ) (6-5)
if( tbY >= RowBd[ j ] )
tileY = j
CtbAddrRsToTs[ ctbAddrRs ] = 0
for( i = 0; i < tileX; i++ )
CtbAddrRsToTs[ ctbAddrRs ] = RowHeight[ tileY ] * ColWidth[ i ]
for( j = 0; j < tileY; j++ )
CtbAddrRsToTs[ ctbAddrRs ] = SubPicWidthInCtbsY * RowHeight[ j ]
CtbAddrRsToTs[ ctbAddrRs ] = ( tbY - RowBd[ tileY ] ) * ColWidth[ tileX ] tbX - ColBd[ tileX ]
}
La lista CtbAddrTsToRs[ ctbAddrTs ] para ctbAddrTs que varía de cero a SubPicSizeInCtbsY - 1, inclusive, especificando la conversión de una dirección de CTB en el escaneo de mosaico a una dirección de CTB en el escaneo de trama de CTB de una subimagen, se deriva como sigue:
for( ctbAddrRs = 0; ctbAddrRs < SubPicSizeInCtbsY; ctbAddrRs++ ) (6-6) CtbAddrTsToRs[ CtbAddrRsToTs[ ctbAddrRs ] ] = ctbAddrRs
La lista TileId[ ctbAddrTs ] para ctbAddrTs que varía de 0 a SubPicSizeInCtbsY - 1, inclusive, especificando la conversión de una dirección de CTB en el escaneo de mosaico de una subimagen a un ID de mosaico, se deriva como sigue:
for( j = 0, tileIdx = 0; j <= num_tile_rows_minus1; j++ )
for( i = 0; i <= num_tile_columns_minus1; i++, tileIdx++ )
for( y = RowBd[ j ]; y < RowBd[ j 1 ]; y++ ) (6-7) for( x = ColBd[ i ]; x < ColBd[ i 1 ]; x++ )
TileId[ CtbAddrRsToTs[ y * SubPicWidthInCtbsY+ x ] ] = tileIdx
La lista NumCtusInTile[ tileIdx ] para tileIdx que varía de 0 a NumTilesInSubPic - 1, inclusive, especificando la conversión de un índice de mosaico al número de las CTU en el mosaico, se deriva como sigue:
for( j = 0, tileIdx = 0; j <= num_tile_rows_minus1; j++ )
for( i = 0; i <= num_tile_columns_minus1; i++, tileIdx++ ) (6-8) NumCtusInTile[ tileIdx ] = ColWidth[ i ] * RowHeight[ j ]
La lista FirstCtbAddrTs[ tileIdx ] para tileIdx que varía de cero a NumTilesInSubPic - 1, inclusive, especificando la conversión de un ID de mosaico a la dirección de CTB en el escaneo de mosaico del primer CTB en el mosaico se deriva como sigue:
for( ctbAddrTs = 0, tileIdx = 0, tileStartFlag = 1; ctbAddrTs < SubPicSizeInCtbsY; ctbAddrTs++ ) { if( tileStartFlag ) {
FirstCtbAddrTs[ tileIdx ] = ctbAddrTs (6-9) tileStartFlag = 0
}
tileEndFlag = ctbAddrTs = = SubPicSizeInCtbsY - 1 | | TileId[ ctbAddrTs 1 ] != TileId[ ctbAddrTs ] if( tileEndFlag ) {
tileIdx++
tileStartFIag = 1
}
}
Los valores de ColumnWidthInLumaSamples[ i ], especificando el ancho de la i-ésima columna de mosaico en unidades de muestras de luma, se establecen igual a ColWidth[ i ] << CtbLog2SizeY para i que varía de 0 a num_tile_columns_minus1, inclusive. Los valores de RowHeightInLumaSamples[ j ], especificando la altura de la j-ésima fila de mosaico en unidades de muestras de luma, se establecen como RowHeight[ j ] << CtbLog2SizeY para j que varía de 0 a num_tile_rows_minus1, inclusive. n r m r n i m l l l in xi RB P m i .
n r m r im n m l l l in xi RB P m i .
n in xi n z r m i n r l m l m i .
n in xi ni r l ifi i n m l m i .
Un parámetro de secuencia de ejemplo establece la semántica de RBSP como sigue.
El bit_depth_chroma_minus8 especifica la profundidad de bits de las muestras de los arreglos de croma BitDepthC y el valor del desplazamiento de intervalo de parámetros de cuantificación de croma QpBdOffsetC es como sigue:
BitDepthC = 8 bit_depth_chroma_minus8 (7-4) QpBdOffsetC = 6 * bit_depth_chroma_minus8 (7-5)
El bit_depth_chroma_minus8 debe estar en el intervalo de cero a ocho, inclusive.
El num_sub_pics_minus1 más uno especifica el número de subimágenes en cada imagen codificada en la CVS. El valor de num_sub_pics_minus1 debe estar en el intervalo de cero a mil veinticuatro, inclusive. El sub_pic_id_len_minus1 más uno especifica el número de bits usados para representar el elemento de sintaxis sub_pic_id[ i ] en el SPS y el elemento de sintaxis tile_group_sub_pic_id en los encabezados de grupo de mosaicos. El valor de sub_pic_id_len_minus1 debe estar en el intervalo de Ceil( Log2( num_sub_pic_minus1 1 ) - 1 a nueve, inclusive. El sub_pic_level_present_flag se establece en uno para especificar que el elemento de sintaxis sub_pic_level_idc[ i ] puede estar presente. El sub_pic_level_present_flag se establece en cero para especificar que el elemento de sintaxis sub_pic_level_idc[ i ] no está presente. El sub_pic_id[ i ] especifica el ID de subimagen de la i-ésima subimagen de cada imagen codificada en la CVS. La longitud de sub_pic_id[ i ] es sub_pic_id_len_minus1 1 bits.
El sub_pic_treated_as_pic_flag[ i ] se establece igual a uno para especificar que la i-ésima subimagen de cada imagen codificada en la CVS se trata como una imagen en el proceso de decodificación, excluyendo las operaciones de filtrado en bucle. El sub_pic_treated_as_pic_flag[ i ] se establece igual a cero para especificar que la i-ésima subimagen de cada imagen codificada en la CVS no se trata como una imagen en el proceso de decodificación, excluyendo las operaciones de filtrado en bucle. El sub_pic_level_idc[ i ] indica el nivel al cual se ajusta la i-ésima secuencia de subimagen, donde la i-ésima secuencia de subimagen consta de solo las unidades de NAL de VCL de las subimágenes con ID de subimagen igual a sub_pic_id[ i ] en la CVS y sus unidades de NAL no de VCL asociadas. El sub_pic_x_offset[ i ] especifica el desplazamiento horizontal, en unidades de muestras de luma, de la muestra de luma de la esquina superior izquierda de la i-ésima subimagen con respecto a la muestra de luma de la esquina superior izquierda de cada imagen en la CVS. Cuando no está presente, se infiere que el valor de sub_pic_x_offset[ i ] es igual a cero. El sub_pic_y_offset[ i ] especifica el desplazamiento vertical, en unidades de muestras de luma, de la muestra de luma de la esquina superior izquierda de la i-ésima subimagen con respecto a la muestra de luma de la esquina superior izquierda de cada imagen en la CVS. Cuando no está presente, se infiere que el valor de sub_pic_y_offset[ i ] es igual a cero. El sub_pic_width_in_luma_samples[ i ] especifica el ancho, en unidades de muestras de luma, de la i-ésima subimagen de cada imagen en la CVS. Cuando la suma de sub_pic_x_offset[ i ] y sub_pic_width_in_luma_samples[ i ] es menor que pic_width_in_luma_samples, el valor de sub_pic_width_in_luma_samples[ i ] debe ser un múltiplo entero de CtbSizeY. Cuando no está presente, se infiere que el valor de sub_pic_width_in_luma_samples[ i ] es igual a pic_width_in_luma_samples. El sub_pic_height_in_luma_samples[ i ] especifica la altura, en unidades de muestras de luma, de la i-ésima subimagen para cada imagen en la CVS. Cuando la suma de sub_pic_y_offset[ i ] y sub_pic_height_in_luma_samples[ i ] es menor que pic_height_in_luma_samples, el valor de sub_pic_height_in_luma_samples[ i ] debe ser un múltiplo entero de CtbSizeY. Cuando no está presente, se infiere que el valor de sub_pic_height_in_luma_samples[ i ] es igual a pic_ height_in_luma_samples.
Para conformidad de flujo de bits, aplican las siguientes restricciones. Para cualquier valor entero de i y j, cuando i es igual a j, los valores de sub_pic_id[ i ] y sub_pic_id[ j ] no deben ser los mismos. Para cualquier subpicA y subpicB de dos subimágenes, cuando el ID de subimagen de subpicA es menor que el ID de subimagen de subpicB, cualquier unidad de NAL de grupo de mosaicos codificada de subPicA debe suceder a cualquier unidad de NAL de grupo de mosaicos codificada de subPicB en orden de decodificación. Las formas de las subimágenes deben ser de modo que cada subimagen, cuando se decodifique, debe tener todo su límite izquierdo y todo el límite superior que consta de un límite de imagen o que consta de límites de subimagen o subimágenes previamente decodificada(s).
La lista SubPicIdx[ spId ] para valores de spId iguales a sub_pic_id[ i ] con i que varía de 0 a num_sub_pics_minus1, inclusive, especificando la conversión de un ID de subimagen al índice de subimagen, se deriva como sigue:
for( i = 0; i <= num_sub_pics_minus1; i++ )
SubPicIdx[ sub_pic_id[ i ] ] = i (7-5)
El log2_max_pic_order_cnt_lsb_minus4 especifica el valor de la variable MaxPicOrderCntLsb que se usa en el proceso de decodificación para el conteo de orden de imagen como sigue:
MaxPicOrderCntLsb = 2( log2_max_pic_order_cnt_lsb_minus4 4 ) (7-5)
El valor de log2_max_pic_order_cnt_lsb_minus4 debe estar en el intervalo de cero a doce, inclusive.
Un parámetro de imagen de ejemplo establece la semántica de RBSP como sigue.
Cuando está presente, el valor de cada uno de los elementos de sintaxis de PPS pps_seq_parameter_set_id y loop_filter_across_tiles_enabled_flag debe ser el mismo en todos los PPS referidos por los encabezados de grupo de mosaicos de una imagen codificada. El pps_pic_parameter_set_id identifica el PPS para referencia por otros elementos de sintaxis. El valor de pps_pic_parameter_set_id debe estar en el intervalo de cero a sesenta y tres, inclusive. El pps_seq_parameter_set_id especifica el valor de sps_seq_parameter_set_id para el SPS activo. El valor de pps_seq_parameter_set_id debe estar en el intervalo de cero a quince, inclusive. El loop_filter_across_sub_pic_enabled_flag se establece igual a uno para especificar que las operaciones de filtrado en bucle se pueden realizar a través de los límites de la subimagen con referencia al PPS. El loop_filter_across_sub_pic_enabled_flag se establece igual a cero para especificar que las operaciones de filtrado en bucle no se realizan a través de los límites de la subimagen que se refiere al PPS.
El single_tile_in_sub_pic_flag se establece igual a uno para especificar que solo hay un mosaico en cada subimagen que se refiere al PPS. El single_tile_in_sub_pic_flag se establece igual a cero para especificar que hay más de un mosaico en cada subimagen que se refiere al PPS. El num_tile_columns_minus1 más 1 especifica el número de columnas de mosaico que particionan la subimagen. El num_tile_columns_minus1 debe estar en el intervalo de cero a mil veinticuatro, inclusive. Cuando no está presente, se infiere que el valor de num_tile_columns_minus1 es igual a cero. El num_tile_rows_minus1 más 1 especifica el número de filas de mosaico que particionan la subimagen. El num_tile_rows_minus1 debe estar en el intervalo de cero a mil veinticuatro. Cuando no está presente, se infiere que el valor de num_tile_rows_minus1 es igual a cero. La variable NumTilesInSubPic se establece igual a (num_tile_columns_minus1 1)*(num_tile_rows_minus1 1). Cuando single_tile_in_sub_pic_flag es igual a cero, NumTilesInSubPic debe ser mayor que uno.
El uniform_tile_spacing_flag se establece igual a uno para especificar que los límites de columna de mosaico y los límites de fila de mosaico se distribuyen uniformemente a través de la subimagen. El uniform_tile_spacing_flag se establece igual a cero para especificar que los límites de columna de mosaico y del mismo modo los límites de fila de mosaico no se distribuyen uniformemente a través de la subimagen, sino que se señalizan explícitamente usando los elementos de sintaxis tile_column_width_minus1[ i ] y tile_row_height_minus1[ i ]. Cuando no está presente, se infiere que el valor de uniform_tile_spacing_flag es igual a uno. El tile_column_width_minus1[ i ] más 1 especifica el ancho de la i-ésima columna de mosaico en unidades de los CTB. El tile_row_height_minus1[ i ] más 1 especifica la altura de la i-ésima fila de mosaico en unidades de los CTB. El single_tile_per_tile_group se establece igual a uno para especificar que cada grupo de mosaicos que se refiere a este PPS incluye un mosaico. El single_tile_per_tile_group se establece igual a cero para especificar que un grupo de mosaicos que se refiere a este PPS puede incluir más de un mosaico.
El rect_tile_group_flag se establece igual a cero para especificar que los mosaicos dentro de cada grupo de mosaicos de la subimagen están en orden de análisis de trama y la información de grupo de mosaicos no se señaliza en PPS. El rect_tile_group_flag se establece igual a uno para especificar que los mosaicos dentro de cada grupo de mosaicos cubren una región rectangular o cuadrada de la subimagen y la información de grupo de mosaicos se señaliza en el PPS. Cuando single_tile_per_tile_group_flag se establece a un rect_tile_group_flag se infiere que es igual a uno. El num_tile_groups_in_sub_pic_minus1 más 1 especifica el número de grupos de mosaicos en cada subimagen que se refiere al PPS. El valor de num_tile_groups_in_sub_pic_minus1 debe estar en el intervalo de cero a NumTilesInSubPic - 1, inclusive. Cuando no está presente y single_tile_per_tile_group_flag es igual a uno, se infiere que el valor de num_tile_groups_in_sub_pic_minus1 es igual a NumTilesInSubPic - 1.
El top_left_tile_idx[ i ] especifica el índice de mosaico del mosaico ubicado en la esquina superior izquierda del i-ésimo grupo de mosaicos de la subimagen. El valor de top_left_tile_idx[ i ] no debe ser igual al valor de top_left_tile_idx[ j ] para cualquier i no igual a j. Cuando no está presente, se infiere que el valor de top_left_tile_idx[ i ] es igual a i. La longitud del elemento de sintaxis top_left_tile_idx[ i ] es Ceil( Log2( NumTilesInSubPic ) bits. El bottom_right_tile_idx[ i ] especifica el índice de mosaico del mosaico ubicado en la esquina inferior derecha del i-ésimo grupo de mosaicos de la subimagen. Cuando single_tile_per_tile_group_flag se establece a uno, se infiere que bottom_right_tile_idx[ i ] es igual a top_left_tile_idx[ i ]. La longitud del elemento de sintaxis bottom_right_tile_idx[ i ] es Ceil( Log2( NumTilesInSubPic) ) bits.
Es un requerimiento de conformidad de flujo de bits que cualquier mosaico particular solo se debe incluir en un grupo de mosaicos. La variable NumTilesInTileGroup[ i ], que especifica el número de mosaicos en el i-ésimo grupo de mosaicos de la subimagen, y las variables relacionadas, se derivan como sigue:
deltaTileIdx = bottom_right_tile_idx[ i ] - top_left_tile_idx[ i ]
NumTileRowsInTileGroupMinus1[ i ] = deltaTileIdx / ( num_tile_columns_minus1 1 )
NumTileColumnsInTileGroupMinus1[ i ] = deltaTileIdx % ( num_tile_columns_minus1 1 ) (7-33) NumTilesInTileGroup[ i ] = ( NumTileRowsInTileGroupMinus1[ i ] 1 ) *
( NumTileColumnsInTileGroupMinus1[ i ] 1 )
El loop_filter_across_tiles_enabled_flag se establece igual a uno para especificar que las operaciones de filtrado en bucle se pueden realizar a través de límites de mosaico en las subimágenes que se refiere al PPS. El loop_filter_across_tiles_enabled_flag se establece igual a cero para especificar que las operaciones de filtrado en bucle no se realizan a través de los límites de mosaico en las subimágenes que se refiere al PPS. Las operaciones de filtrado en bucle incluyen el filtro de desbloqueo, filtro de desplazamiento adaptativo de muestra y operaciones de filtro de bucle adaptativo. Cuando no está presente, se infiere que el valor de loop_filter_across_tiles_enabled_flag es igual a uno. El num_ref_idx_default_active_minus1[ i ] más 1, cuando i es igual a cero, especifica el valor inferido de la variable NumRefIdxActive [ 0 ] para los grupos de mosaico P 0 B con num_ref_idx_active_override_flag igual a 0, y cuando i es igual a uno, especifica el valor inferido de NumRefIdxActive[ 1 ] para los grupos de mosaico B con num_ref_idx_active_override_flag igual a cero. El valor de num_ref_idx_default_active_minus1[ i ] debe estar en el intervalo de cero a catorce, inclusive.
Una semántica de encabezado de grupo de mosaicos general de ejemplo es como sigue. Cuando está presente, el valor de cada uno de los elementos de sintaxis de encabezado de grupo de mosaicos tile_group_pic_order_cnt_lsb y tile_group_temporal_mvp_enabled_flag debe ser el mismo en todos los encabezados de grupo de mosaicos de una imagen codificada. Cuando está presente, el valor de tile_group_pic_parameter_set_id debe ser el mismo en todos los encabezados de grupo de mosaicos de una subimagen codificada. El tile_group_pic_parameter_set_id especifica el valor de pps_pic_parameter_set_id para el PPS en uso. El valor de tile_group_pic_parameter_set_id debe estar en el intervalo de cero a sesenta y tres, inclusive. Es un requerimiento de conformidad de flujo de bits que el valor de TemporalId de la imagen actual debe ser mayor que o igual al valor de TemporalId de cada PPS referido por un grupo de mosaico de la imagen actual. El tile_group_sub_pic_id identifica la subimagen a la cual pertenece el grupo de mosaicos. La longitud de tile_group_sub_pic_id es sub_pic_id_len_minus1 1 bits. El valor de tile_group_sub_pic_id debe ser el mismo para todos los encabezados de grupo de mosaicos de una subimagen codificada.
Las variables SubPicWidthInCtbsY, SubPicHeightInCtbsY, y SubPicSizeInCtbsY se derivan como sigue: 1 = SubPicIdx[ tile_group_subpic_id ]
SubPicWidthInCtbsY =
Ceil( sub_pic_width_in_luma_samples[ i ] CtbSizeY ) (7-34) SubPicHeightInCtbsY = Ceil( sub_pic_height_in_luma_samples[ i ] CtbSizeY )
SubPicSizeInCtbsY = SubPicWidthInCtbsY * SubPicHeightInCtbsY
Las siguientes variables se derivan al invocar el proceso de conversión de escaneo de mosaico y trama de CTB: la lista ColWidth[ i ] para i que varía de cero a num_tile_columns_minus1, inclusive, especificando el ancho de la i-ésima columna de mosaico en unidades de los CTB; la lista RowHeight[ j ] para j que varía de cero a num_tile_rows_minus1, inclusive, especificando la altura de la j-ésima fila de mosaico en unidades de los CTB; la lista ColBd[ i ] para i que varía de cero a num_tile_columns_minus1 1, inclusive, especificando la ubicación del límite de i-ésima columna de mosaico en unidades de los CTB; la lista RowBd[ j ] para j que varía de cero a num_tile_rows_minus1 1, inclusive, especificando la ubicación del límite de j-ésima fila de mosaico en unidades de los CTB; la lista CtbAddrRsToTs [ctbAddrRs ] para ctbAddrRs que varía de cero a SubPicSizeInCtbsY - 1, inclusive, especificando la conversión de una dirección de CTB en el escaneo de trama de CTB de una subimagen a una dirección de CTB en el escaneo de mosaico de la subimagen; la lista CtbAddrTsToRs[ctbAddrTs] para ctbAddrTs que varía de cero a SubPicSizeInCtbsY - 1, inclusive, especificando la conversión de una dirección de CTB en el escaneo de mosaico de una subimagen a una dirección de CTB en el escaneo de trama de CTB de la subimagen; la lista TileId[ ctbAddrTs ] para ctbAddrTs que varía de cero a SubPicSizeInCtbsY - 1, inclusive, especificando la conversión de una dirección de CTB en el escaneo de mosaico de una subimagen a un ID de mosaico; la lista NumCtusInTile[ tileIdx ] para tileIdx que varía de cero a NumTilesInSubPic - 1, inclusive, especificando la conversión de un índice de mosaico al número de las CTU en el mosaico; la lista FirstCtbAddrTs[ tileIdx ] para tileIdx que varía de cero a NumTilesInSubPic - 1, inclusive, especificando la conversión de un ID de mosaico a la dirección de CTB en el escaneo de mosaico del primer CTB en el mosaico; la lista ColumnWidthInLumaSamples[ i ] para i que varía de cero a num_tile_columns_minus1, inclusive, especificando el ancho de la i-ésima columna de mosaico en unidades de muestras de luma; y la lista RowHeightInLumaSamples[ j ] para j que varía de cero a num_tile_rows_minus1, inclusive, especificando la altura de la j-ésima fila de mosaico en unidades de muestras de luma.
Los valores de ColumnWidthInLumaSamples[ i ] para i que varía de cero a num_tile_columns_minus1, inclusive, y RowHeightInLumaSamples[ j ] para j que varía de cero a num_tile_rows_minus1, inclusive, deben ser todos mayores que cero. Las variables SubPicLeftBoundaryPos, SubPicTopBoundaryPos, SubPicRightBoundaryPos y SubPicBotBoundaryPos se derivan como sigue:
i = SubPicIdx[ tile_group_subpic_id ]
if( sub_pic_treated_as_pic_flag[ i ] ) {
SubPicLeftBoundaryPos = sub_pic_x_offset[ i ]
SubPicRightBoundaryPos = SubPicLeftBoundaryPos sub_pic_width_in_luma_samples[ i ] - 1 SubPicTopBoundaryPos = sub_pic_y_offset[ i ]
SubPicBotBoundaryPos = SubPicTopBoundaryPos sub_pic_height_in_luma_samples[ i ] - 1 (7-34) }
Para cada mosaico, con índice i = 0. NumTilesInSubPic - 1 en la subimagen actual, las variables TileLeftBoundaryPos[ i ], TileTopBoundaryPos[ i ], TileRightBoundaryPos[ i ], y TileBotBoundaryPos[ i ] se derivan como sigue:
tileColIdx = i % ( num_tile_columns_minus1 1 )
tileRowIdx = i / ( num_tile_columns_minus1 1 )
TileLeftBoundaryPos[ i ] = SubPicLeftBoundaryPos ( ColBd[ tileColIdx ] << CtbLog2SizeY ) ) TileRightBoundaryPos[ i ] = SubPicLeftBoundaryPos
( ( ColBd[ tileColIdx ] ColWidth[ tileColIdx ] ) << CtbLog2SizeY ) - 1
if( TileRightBoundaryPos[ i ] > pic_width_in_luma_samples - 1) (7-41) TileRightBoundaryPos[ i ] = pic_width_in_luma_samples - 1
TileTopBoundaryPos[ i ] = SubPicTopBoundaryPos ( RowBd[ tileRowIdx ] << CtbLog2SizeY ) TileBotBoundaryPos[ i ] = SubPicTopBoundaryPos
( ( RowBd[ tileRowIdx ] RowHeight[ tileRowIdx ] ) << CtbLog2SizeY ) - 1
if( TileBotBoundaryPos[ i ] > pic_height_in_luma_samples - 1 )
TileBotBoundaryPos[ i ] = pic_height_in_luma_samples - 1
El tile_group_address especifica la dirección de mosaico del primer mosaico en el grupo de mosaico. Cuando no está presente, se infiere que el valor de tile_group_address es igual a cero. Si rect_tile_group_flag es igual a 0, aplica lo siguiente: la dirección de mosaico es el ID de mosaico; la longitud de tile_group_address es Ceil( Log2( NumTilesInSubPic ) ) bits; y el valor de tile_group_address debe estar en el intervalo de cero a NumTilesInSubPic - 1, inclusive. De otro modo (rect_tile_group_flag es igual a uno), aplica lo siguiente: la dirección de mosaico es el índice de grupo de mosaicos del grupo de mosaicos entre los grupos de mosaicos en la subimagen; la longitud de tile_group_address es Ceil( Log2( num_tile_groups_in_sub_pic_minus1 1 ) ) bits; y el valor de tile_group_address debe estar en el intervalo de 0 a num_tile_groups_in_sub_pic_minus1, inclusive.
Es un requerimiento de conformidad de flujo de bits que se apliquen las siguientes restricciones. El valor de tile_group_address no debe ser igual al valor de tile_group_address de cualquier otra unidad de NAL de grupo de mosaicos codificada de la misma subimagen codificada. Los grupos de mosaicos de una subimagen deben estar en orden creciente de sus valores de tile_group_address. Las formas de los grupos de mosaicos de una subimagen deben ser de modo que cada mosaico, cuando se decodifique, debe tener todo su límite izquierdo y todo el límite superior que conste de un límite de subimagen o que conste de límite(s) de mosaico(s) previamente decodificado(s).
El num_tiles_in_tile_group_minus1, cuando está presente, especifica el número de mosaicos en el grupo de mosaicos menos uno. El valor de num_tiles_in_tile_group_minus1 debe estar en el intervalo de cero a NumTilesInSubPic - 1, inclusive. Cuando no está presente, se infiere que el valor de num_tiles_in_tile_group_minus1 es igual a cero. La variable NumTilesInCurrTileGroup, que especifica el número de mosaicos en el grupo de mosaico actual, y TgTileIdx[ i ], que especifica el índice de mosaico del iésimo mosaico en el grupo de mosaicos actual, se derivan como sigue:
if( rect_tile_group_flag ) {
NumTilesInCurrTileGroup = NumTilesInTileGroup[ tile_group_address ]
tileIdx = top_left_tile_idx[ tile_group_address ]
for( j = 0, tIdx = 0; j <
NumTileRowsInTileGroupMinus1[ tile_group_address ] 1; (7-35) j++, tileIdx = num_tile_columns_minus1 1 )
for( i = 0, currTileIdx = tileIdx; i < NumTileColumnsInTileGroupMinus1[ tile_group_address ] 1;
i++, currTileIdx++, tIdx++ )
TgTileIdx[ tIdx ] = currTileIdx
} else {
NumTilesInCurrTileGroup = num_tiles_in_tile_group_minus1 1
TgTileIdx[ 0 ] = tile_group_address
for( i = 1; i < NumTilesInCurrTileGroup; i++ )
TgTileIdx[ i ] = TgTileIdx[ i - 1 ] 1
}
El tile_group_type especifica el tipo de codificación del grupo de mosaicos.
Un proceso de derivación de ejemplo para predicción de vector de movimiento de luma temporal es como sigue. Las variables mvLXCol y availableFlagLXCol se derivan como sigue: Si tile_group_temporal_mvp_enabled_flag es igual a cero, ambos componentes de mvLXCol se establecen igual a cero y availableFlagLXCol se establece igual a cero. De otro modo (tile_group_temporal_mvp_enabled_flag es igual a uno), aplican los siguientes pasos ordenados: El vector de movimiento colocado inferior derecho, y las ubicaciones de muestra de límite inferior y derecho se derivan como sigue:
xColBr = xCb cbWidth (8-414) yColBr = yCb cbHeight (8-415) rightBoundaryPos = sub_pic_treated_as_pic_flag[ SubPicIdx[ tile_group_subpic_id ] ] ? SubPicRightBoundaryPos : pic_width_in_luma_samples - 1 (8-415) botBoundaryPos = sub_pic_treated_as_pic_flag[ SubPicIdx[ tile_group_subpic_id ] ] ? SubPicBotBoundaryPos : pic_height_in_luma_samples - 1 (8-415) Si yCb >> CtbLog2SizeY es igual a yColBr >> CtbLog2SizeY, yColBr es menor que o igual a botBoundaryPos y xColBr es menor que o igual a rightBoundaryPos, aplica lo siguiente: La variable colCb especifica el bloque de codificación de luma que cubre la ubicación modificada dada por ( (xColBr >> 3) << 3, (yColBr >> 3) << 3) dentro de la imagen colocada especificada por ColPic. La ubicación de luma ( xColCb, yColCb ) se establece igual a la muestra superior izquierda del bloque de codificación de luma colocado especificado por colCb con respecto a la muestra de luma superior izquierda de la imagen colocada especificada por ColPic. El proceso de derivación para vectores de movimiento colocados se invoca con currCb, colCb, ( xColCb, yColCb ), refIdxLX y sbFlag igual a cero como entradas y la salida se asigna a mvLXCol y availableFlagLXCol. De otro modo, ambos componentes de mvLXCol se establecen igual a cero y availableFlagLXCol se establece igual a cero.
Un ejemplo de proceso de interpolación bilineal de muestra de luma es como sigue. Las ubicaciones de luma en unidades de muestra completa (xInti, yInti) se derivan como sigue para i = 0..1. Si sub_pic_treated_as_pic_flag[ SubPicIdx[ tile_group_subpic_id ] ] es igual a 1, se aplica lo siguiente: xInti = Clip3( SubPicLeftBoundaryPos, SubPicRightBoundaryPos, xIntL i ) (8-458) yInti = Clip3( SubPicTopBoundaryPos, SubPicBotBoundaryPos, yIntL i ) (8-458) De otro modo (sub_pic_treated_as_pic_flag[ SubPicIdx[ tile_group_subpic_id ] ] es igual a 0), se aplica lo siguiente:
xInti = sps_ref_wraparound_enabled_flag ?
ClipH( ( sps_ref_wraparound_offset_minus1 1 ) * MinCbSizeY, picW, ( xIntL i ) ) : (8-459) Clip3( 0, picW - 1, xIntL i )
yInti = Clip3( 0, picH - 1, yIntL i ) (8-460) Un proceso de filtrado de interpolación de 8 derivaciones de muestra de luma de ejemplo es como sigue. Las ubicaciones de luma en unidades de muestra completa (xInti, yInti) se derivan como sigue para i = 0..7. Si sub_pic_treated_as_pic_flag[ SubPicIdx[ tile_group_subpic_id ] ] es igual a uno, se aplica lo siguiente: xInti = Clip3( SubPicLeftBoundaryPos, SubPicRightBoundaryPos, xIntL i - 3 ) (8-830) yInti = Clip3( SubPicTopBoundaryPos, SubPicBotBoundaryPos, yIntL i - 3 ) (8-830)
De otro modo (sub_pic_treated_as_pic_flag[ SubPicIdx[ tile_group_subpic_id ] ] es igual a 0), se aplica lo siguiente:
xInti = sps_ref_wraparound_enabled_flag ?
ClipH( ( sps_ref_wraparound_offset_minus1 1 ) * MinCbSizeY, picW, xIntL i - 3 ) : (8-831) Clip3( 0, picW - 1, xIntL i - 3 )
yInti = Clip3( 0, picH - 1, yIntL i - 3 ) (8-832)
Un proceso de interpolación de muestras de croma de ejemplo es como sigue. La variable xOffset se establece igual a ( sps_ref_wraparound_offset_minus1 1 ) * MinCbSizeY ) / SubWidthC. Las ubicaciones de croma en unidades de muestra completa (xInti, yInti) se derivan como sigue para i = 0..3.
Si sub_pic_treated_as_pic_flag[ SubPicIdx[ tile_group_subpic_id ] ] es igual a uno, se aplica lo siguiente: xInti = Clip3( SubPicLeftBoundaryPos / SubWidthC, SubPicRightBoundaryPos / SubWidthC, xIntL i ) (8-844) yInti = Clip3( SubPicTopBoundaryPos / SubHeightC, SubPicBotBoundaryPos / SubHeightC, yIntL i ) (8-844) De otro modo (sub_pic_treated_as_pic_flag[ SubPicIdx[ tile_group_subpic_id ] ] es igual a 0), se aplica lo siguiente:
xInti = sps_ref_wraparound_enabled_flag ? ClipH( xOffset, picWC, xIntC i - 1 ) : (8-845) Clip3( 0, picWC - 1, xIntC i - 1 )
yInti = Clip3( 0, picHC - 1, yIntC i - 1 ) (8-846)
Un proceso de filtro de desbloqueo de ejemplo es como sigue. El proceso de filtro de desbloqueo se aplica a todos los bordes de sub-bloque de codificación y bordes de bloque de transformada de una imagen, excepto los siguientes tipos de bordes: bordes que están en el límite de la imagen; bordes que coinciden con límites de subimágenes para los cuales loop_filter_across_sub_pic_enabled_flag es igual a cero; bordes que coinciden con límites de mosaicos para los cuales loop_filter_across_tiles_enabled_flag es igual a cero; bordes que coinciden con los límites superior o izquierdo de o dentro de grupos de mosaicos con tile_group_deblocking_filter_disabled_flag es igual a uno; bordes que no corresponden a los límites de cuadrícula de muestra de 8x8 del componente considerado; bordes dentro de componentes de croma para los cuales ambos lados del borde usan interpredicción; bordes de bloques de transformada de croma que no son bordes de la unidad de transformada asociada; y bordes a través de los bloques de transformada de luma de una unidad de codificación que tiene un valor de IntraSubPartitionsSplit no igual a ISP_NO_SPLIT.
Un proceso de filtro de desbloqueo de ejemplo para una dirección es como sigue. Para cada unidad de codificación con ancho de bloque de codificación log2CbW, altura de bloque de codificación log2CbH y ubicación de la muestra superior izquierda del bloque de codificación ( xCb, yCb ), cuando edgeType es igual a EDGE_VER y xCb % 8 es igual a cero o cuando edgeType es igual a EDGE_HOR e yCb % 8 es igual a cero, los bordes se filtran por los siguientes pasos ordenados. El ancho de bloque de codificación nCbW se establece igual a 1 << log2CbW y la altura de bloque de codificación nCbH se establece igual a 1 << log2CbH. La variable filterEdgeFlag se deriva como sigue. Si edgeType es igual a EDGE_VER y una o más de las siguientes condiciones son verdaderas, filterEdgeFlag se establece igual a cero. El límite izquierdo del bloque de codificación actual es el límite izquierdo de la imagen. El límite izquierdo del bloque de codificación actual es el límite izquierdo o derecho de la subimagen y loop_filter_across_sub_pic_enabled_flag es igual a cero. El límite izquierdo del bloque de codificación actual es el límite izquierdo del mosaico y loop_filter_across_tiles_enabled_flag es igual a cero. De otro modo, si edgeType es igual a EDGE_HOR y una o más de las siguientes condiciones son verdaderas, la variable filterEdgeFlag se establece igual a 0. El límite superior del bloque de codificación de luma actual es el límite superior de la imagen. El límite superior del bloque de codificación actual es el límite superior o inferior de la subimagen y loop_filter_ across_sub_pic_enabled_flag es igual a cero. El límite superior del bloque de codificación actual es el límite superior del mosaico y loop_filter_across_tiles_enabled_flag es igual a cero. De otro modo, filterEdgeFlag se establece igual a uno.
Un proceso de modificación de CTB de ejemplo es como sigue. Para todas las ubicaciones de muestra ( xSi, ySj ) y ( xYi, yYj ) con i = 0..nCtbSw - 1 y j = 0..nCtbSh - 1, dependiendo de los valores de pcm_loop_filter_disabled_flag, pcm_flag[ xYi ][ yYj ] y cu_transquant_bypass_flag de la unidad de codificación que incluye el bloque de codificación que cubre recPicture [ xSi ][ ySj ], aplica lo siguiente. Si una o más de las siguientes condiciones para todas las ubicaciones de muestra ( xSik', ySjk' ) y ( xYik', yYjk' )con k = 0..1 son verdaderas, edgeIdx se establece igual a 0. La muestra en la ubicación ( xSik', ySjk' ) está fuera de los límites de imagen. La muestra en la ubicación ( xSik', ySjk' ) pertenece a una subimagen diferente y loop_filter_across_sub_pic_enabled_flag en el grupo de mosaicos al que pertenece la muestra recPicture[ xSi ] [ ySj ] es igual a 0. El loop_filter_across_tiles_enabled_flag es igual a cero y la muestra en la ubicación ( xSik', ySjk' ) pertenece a un mosaico diferente.
Un proceso de filtrado de bloques de árbol de codificación de ejemplo para muestras de luma es como sigue. Para la derivación de las muestras de luma reconstruidas filtradas alfPictureL[ x ][ y ], cada muestra de luma reconstruida dentro del bloque de árbol de codificación de luma actual recPictureL [ x ][ y ] se filtra como sigue con x, y = 0..CtbSizeY - 1. Las ubicaciones ( hx, vy ) para cada una de las muestras de luma correspondientes ( x, y ) dentro del arreglo dado recPicture de muestras de luma se derivan como sigue. Si loop_filter_across_tiles_enabled_flag para el mosaico tileA que contiene la muestra de luma en la ubicación ( hx, vy ) es igual a cero, se deja que la variable tileIdx sea el índice de mosaico de tileA, se aplica lo siguiente: hx = Clip3( TileLeftBoundaryPos[ tileIdx ], TileRightBoundaryPos[ tileIdx ], xCtb x ) (8-1140) vy = Clip3( TileTopBoundaryPos[ tileIdx ], TileBotBoundaryPos[ tileIdx ], yCtb y ) (8-1141)
De otro modo, si loop_filter_across_sub_pic_enabled_flag en la subimagen que contiene la muestra de luma en la ubicación ( hx, vy ) es igual a cero, se aplica lo siguiente:
hx = Clip3( SubPicLeftBoundaryPos, SubPicRightBoundaryPos, xCtb x ) (8-1140) vy = Clip3( SubPicTopBoundaryPos, SubPicBotBoundaryPos, yCtb y ) (8-1141)
De otro modo, aplica lo siguiente:
hx = Clip3( 0, pic_width_in_luma_samples - 1, xCtb x ) (8-1140) vy = Clip3( 0, pic_height_in_luma_samples - 1, yCtb y ) (8-1141)
Un proceso de derivación de ejemplo para transposición de ALF e índice de filtro para muestras de luma es como sigue. Las ubicaciones ( hx, vy ) para cada una de las muestras de luma correspondientes ( x, y ) dentro del arreglo dado recPicture de muestras de luma se derivan como sigue. Si loop_filter_across _tiles_enabled_flag para el mosaico tileA que contiene la muestra de luma en la ubicación ( hx, vy ) es igual a cero, se deja que tileIdx sea el índice de mosaico de tileA, se aplica lo siguiente:
hx = Clip3( TileLeftBoundaryPos[ tileIdx ], TileRightBoundaryPos[ tileIdx ], x ) (8-1140)
vy = Clip3( TileTopBoundaryPos[ tileldx ], TileBotBoundaryPos[ tileldx ], y ) (8-1141)
De otro modo, si loop_filter_across_sub_pic_enabled_flag para la subimagen que contiene la muestra de luma en la ubicación ( hx, vy ) es igual a cero, se aplica lo siguiente:
hx = Clip3( SubPicLeftBoundaryPos, SubPicRightBoundaryPos, x ) (8-1140) vy = Clip3( SubPicTopBoundaryPos, SubPicBotBoundaryPos, y ) (8-1141)
De otro modo, aplica lo siguiente:
hx = Clip3( 0, pic_width_in_luma_samples - 1, x ) (8-1145) vy = Clip3( 0, pic_height_in_luma_samples - 1, y ) (8-1146)
Un proceso de filtrado de bloques de árbol de codificación de ejemplo para muestras de croma es como sigue. Para la derivación de las muestras de croma reconstruidas filtradas alfPicture[ x ][ y ], cada muestra de croma reconstruida dentro del bloque de árbol de codificación de croma actual recPicture[ x ][ y ] se filtra como sigue con x, y = 0..ctbSizeC - 1. Las ubicaciones ( hx, vy ) para cada una de las muestras de croma correspondientes ( x, y ) dentro del arreglo dado recPicture de muestras de croma se derivan como sigue. Si loop_filter_across_tiles_enabled_flag para el mosaico tileA que contiene la muestra de croma en la ubicación ( hx, vy ) es igual a cero, se deja que tileIdx sea el índice de mosaico de tileA, se aplica lo siguiente:
hx = Clip3( TileLeftBoundaryPos[ tileIdx ] / SubWidthC,
TileRightBoundaryPos[ tileIdx ] / SubWidthC, xCtb x ) (8-1140) vy = Clip3( TileTopBoundaryPos[ tileIdx ] / SubWidthC,
TileBotBoundaryPos[ tileIdx ] / SubWidthC, yCtb y ) (8-1141)
De otro modo, si loop_filter_across_sub_pic_enabled_flag para la subimagen que contiene la muestra de croma en la ubicación ( hx, vy ) es igual a cero, se aplica lo siguiente:
hx = Clip3( SubPicLeftBoundaryPos / SubWidthC,
SubPicRightBoundaryPos / SubWidthC, xCtb x ) (8-1140) vy = Clip3( SubPicTopBoundaryPos / SubWidthC,
SubPicBotBoundaryPos / SubWidthC, yCtb y ) (8-1141)
De otro modo, aplica lo siguiente:
hx = Clip3( 0, pic_width_in_luma_samples / SubWidthC - 1, xCtbC x ) (8-1177) vy = Clip3( 0, pic_height_in_luma_samples / SubHeightC - 1, yCtbC y ) (8-1178)
La variable sum se deriva como sigue:
sum = AlfCoeffC[ 0 ] * ( recPicture[ hx, vy 2 ] recPicture[ hx, vy - 2 ] )
AlfCoeffC[ 1 ] * ( recPicture[ hx 1, vy 1 ] recPicture[ hx - 1, vy - 1 ] )
AlfCoeffC[ 2 ] * ( recPicture[ hx, vy 1 ] recPicture[ hx, vy - 1 ] ) (8-1179) AlfCoeffC[ 3 ] * ( recPicture[ hx - 1, vy 1 ] recPicture[ hx 1, vy - 1 ] )
AlfCoeffC[ 4 ] * ( recPicture[ hx 2, vy ] recPicture[ hx - 2, vy ] )
AlfCoeffC[ 5 ] * ( recPicture[ hx 1, vy ] recPicture[ hx - 1, vy ] )
AlfCoeffC[ 6 ] * recPicture[ hx, vy ]
sum = ( sum 64 ) >> 7 (8-1180)
La muestra de imagen de croma reconstruida filtrada modificada alfPicture[ xCtbC x ][ yCtbC y ] se deriva como sigue:
alfPicture[ xCtbC x ][ yCtbC y ] = Clip3( 0, ( 1 << BitDepthC ) - 1, sum ) (8-1181)
La figura 12 es un diagrama esquemático de un dispositivo de codificación de video 1200 de ejemplo. El dispositivo de codificación de video 1200 es adecuado para implementar las modalidades/ejemplos descritos como se describe en la presente. El dispositivo de codificación de video 1200 comprende puertos corriente abajo 1220, puertos corriente arriba 1250 y/o unidades transceptoras (Tx/Rx) 1210, que incluyen transmisores y/o receptores para comunicar datos corriente arriba y/o corriente abajo a través de una red. El dispositivo de codificación de video 1200 también incluye un procesador 1230 que incluye una unidad lógica y/o unidad de procesamiento central (CPU) para procesar los datos y una memoria 1232 para almacenar los datos. El dispositivo de codificación de video 1200 también puede comprender componentes eléctricos, ópticos a eléctricos (OE), componentes eléctricos a ópticos (EO) y/o componentes de comunicación inalámbrica acoplados a los puertos corriente arriba 1250 y/o puertos corriente abajo 1220 para comunicación de datos mediante redes de comunicación eléctricas, ópticas o inalámbricas. El dispositivo de codificación de video 1200 también puede incluir dispositivos de entrada y/o salida (E/S) 1260 para comunicar datos hacia y desde un usuario. Los dispositivos de E/S 1260 pueden incluir dispositivos de salida tal como una pantalla para mostrar datos de video, altavoces para producir datos de audio, etc. Los dispositivos de E/S 1260 también pueden incluir dispositivos de entrada, tal como un teclado, ratón, bola de seguimiento, etc., y/o correspondientes interfaces para interactuar con estos dispositivos de salida.
El procesador 1230 se implementa por hardware y software. El procesador 1230 se puede implementar como uno o más chips de CPU, núcleos (por ejemplo, como un procesador de múltiples núcleos), arreglos de compuertas programables en campo (f Pg A), circuitos integrados de aplicación específica (ASIC) y procesadores de señales digitales (DSP). El procesador 1230 está en comunicación con los puertos corriente abajo 1220, Tx/Rx 1210, puertos corriente arriba 1250 y memoria 1232. El procesador 1230 comprende un módulo de codificación 1214. El módulo de codificación 1214 implementa las modalidades descritas en la presente, tal como los métodos 100, 1300 y 1400, que pueden emplear un filtro en bucle 1000, un flujo de bits 1100, una imagen 500 y/o bloques actuales 801 y/o 901 que se pueden codificar de acuerdo con la interpredicción unidireccional 600 y/o interpredicción bidireccional 700 con base en una lista de candidatos generada de acuerdo con el patrón 900. El módulo de codificación 1214 también puede implementar cualquier otro método/mecanismo descrito en la presente. Además, el módulo de codificación 1214 puede implementar un sistema de códec 200, un codificador 300 y/o un decodificador 400. Por ejemplo, el módulo de codificación 1214 puede implementar la primera, segunda, tercera, cuarta, quinta y/o sexta implementación de ejemplo como se describió anteriormente. Por lo tanto, el módulo de codificación 1214 provoca que el dispositivo de codificación de video 1200 proporcione funcionalidad y/o eficiencia de codificación adicional cuando se codifican datos de video. Como tal, el módulo de codificación 1214 mejora la funcionalidad del dispositivo de codificación de video 1200, así como también aborda problemas que son específicos de las técnicas de codificación de video. Además, el módulo de codificación 1214 efectúa una transformación del dispositivo de codificación de video 1200 a un estado diferente. De manera alternativa, el módulo de codificación 1214 se puede implementar como instrucciones almacenadas en la memoria 1232 y ejecutadas por el procesador 1230 (por ejemplo, como un producto de programa de computadora almacenado en un medio no transitorio).
La memoria 1232 comprende uno o más tipos de memoria tal como discos, unidades de cinta, unidades de estado sólido, memoria de solo lectura (ROM), memoria de acceso aleatorio (RAM), memoria flash, memoria ternaria direccionable por contenido (TCAM), memoria estática de acceso aleatorio (SRAM), etc. La memoria 1232 se puede usar como un dispositivo de almacenamiento de datos de desbordamiento, para almacenar programas cuando estos programas se seleccionan para ejecución y para almacenar instrucciones y datos que se leen durante la ejecución de programa.
La figura 13 es un diagrama de flujo de un método de ejemplo 1300 para codificar una secuencia de video en un flujo de bits, tal como el flujo de bits 1100, en tanto que se aplica una función de recorte en un filtro de interpolación, tal como el filtro de interpolación 913, cuando una subimagen, tal como la subimagen 510, se trata como una imagen, tal como la imagen 500. El método 1300 se puede emplear por un codificador, tal como un sistema de códec 200, un codificador 300 y/o un dispositivo de codificación de video 1200 cuando se realiza el método 100 para codificar un bloque actual 801 y/o 901 de acuerdo con la interpredicción unidireccional 600 y/o interpredicción bidireccional 700 al emplear el filtro en bucle 1000 y/o en una lista de candidatos generada de acuerdo con el patrón 900.
El método 1300 puede comenzar cuando un codificador recibe una secuencia de video que incluye una pluralidad de imágenes y determina codificar esa secuencia de video en un flujo de bits, por ejemplo, con base en la entrada de usuario. En el paso 1301, el codificador particiona una imagen actual en una subimagen. El codificador también particiona la subimagen en un bloque. En el paso 1303, el codificador determina codificar el bloque de acuerdo con interpredicción. Por consiguiente, el codificador selecciona un vector de movimiento para codificar el bloque.
En el paso 1305, el codificador aplica una función de recorte a ubicaciones de muestra en un bloque de referencia apuntado por el vector de movimiento. La función de recorte se aplica a fin de soportar la aplicación de un filtro de interpolación cuando el vector de movimiento apunta fuera de la subimagen. Este proceso se presenta cuando se establece una bandera para indicar que la subimagen se trata como una imagen y por lo tanto, se debe codificar para soportar la extracción que es independiente de las otras subimágenes en la imagen. En este contexto, una subimagen se trata como una imagen cuando la subimagen se codifica sin referencia a datos en otras subimágenes y por lo tanto, se puede extraer por separado.
En el paso 1307, el codificador aplica el filtro de interpolación a los resultados de la función de recorte para obtener un valor de muestra predicha. En un ejemplo, el filtro de interpolación incluye un proceso de interpolación bilineal de muestra de luma. En este caso, el bloque incluye un bloque de muestras de luma. Además, el valor de muestra predicha incluye un valor de muestra de luma predicha. En este caso, el proceso de interpolación bilineal de muestra de luma recibe entradas que incluyen una ubicación de luma en unidades de muestra completas (xIntL, yIntL). El proceso de interpolación bilineal de muestra de luma genera un valor de muestra de luma predicha (predSampleLXL). En este caso, la función de recorte del paso 1305 se aplica a las ubicaciones de muestra como sigue. Cuando subpic_treated_as_pic_flag[ SubPicIdx ] es igual a uno, se aplica lo siguiente:
xInti = Clip3( SubPicLeftBoundaryPos, SubPicRightBoundaryPos, xIntL i ), y
yInti = Clip3( SubPicTopBoundaryPos, SubPicBotBoundaryPos, yIntL i ),
donde subpic_treated_as_pic_flag es el conjunto de banderas para indicar que la subimagen se trata como una imagen, SubPicIdx es un índice de la subimagen, xInti e yInti son una ubicación de muestra recortada en el índice i, SubPicRightBoundaryPos es una posición de un límite derecho de la subimagen, SubPicLeftBoundaryPos es una posición de un límite izquierdo de la subimagen, SubPicTopBoundaryPos es una posición de un límite superior de la subimagen, SubPicBotBoundaryPos es una posición de un límite inferior de la subimagen y Clip3 es la función de recorte de acuerdo con:
Í Xz < X
Clip3( x, y, z ) = y z > y
z de otro modo
donde x, y, y z son valores de entrada numéricos.
En otro ejemplo, el filtro de interpolación incluye un proceso de filtrado de interpolación de ocho derivaciones de muestra de luma. En este caso, el bloque incluye un bloque de muestras de luma, y el valor de muestra predicha incluye un valor de muestra de luma predicha. Además, el proceso de filtrado de interpolación de ocho derivaciones de muestra de luma recibe entradas que incluyen una ubicación de luma en unidades de muestra completas (xIntL, yIntL). El proceso de interpolación bilineal de muestra de luma genera un valor de muestra de luma predicha (predSampleLXL). Además, la función de recorte del paso 1305 se aplica a las ubicaciones de muestra como sigue. Cuando subpic_treated_as_pic_flag[ SubPicIdx ] es igual a uno, se aplica lo siguiente: xInti = Clip3( SubPicLeftBoundaryPos, SubPicRightBoundaryPos, xIntL i -3), y
yInti = Clip3( SubPicTopBoundaryPos, SubPicBotBoundaryPos, yIntL i -3),
donde subpic_treated_as_pic_flag es el conjunto de banderas para indicar que la subimagen se trata como una imagen, SubPicIdx es un índice de la subimagen, xInti e yInti son una ubicación de muestra recortada en el índice i, SubPicRightBoundaryPos es una posición de un límite derecho de la subimagen, SubPicLeftBoundaryPos es una posición de un límite izquierdo de la subimagen, SubPicTopBoundaryPos es una posición de un límite superior de la subimagen, SubPicBotBoundaryPos es una posición de un límite inferior de la subimagen y Clip3 es la función de recorte de acuerdo con:
( Xz < X
Clip3( x, y, z ) = y z > y
z de otro modo
donde x, y, y z son valores de entrada numéricos.
En otro ejemplo, el filtro de interpolación incluye un proceso de interpolación de muestra de croma. En este caso, el bloque incluye un bloque de muestras de croma, y el valor de muestra predicha incluye un valor de muestra de croma predicha. En este caso, el proceso de interpolación de muestra de croma recibe entradas que incluyen una ubicación de croma en unidades de muestra completas (xIntC, yIntC). Además, el proceso de interpolación de muestra de croma genera un valor de muestra de croma predicha (predSampleLXC). En este caso, la función de recorte del paso 1305 se aplica a las ubicaciones de muestra como sigue. Cuando subpic_treated_as_pic_flag[ SubPicIdx ] es igual a uno, se aplica lo siguiente:
xInti = Clip3( SubPicLeftBoundaryPos/SubWidthC, SubPicRightBoundaryPos/SubWidthC, xIntC i), y yInti = Clip3( SubPicTopBoundaryPos/SubHeightC, SubPicBotBoundaryPos/SubHeightC, yIntC i), donde subpic_treated_as_pic_flag es el conjunto de banderas para indicar que la subimagen se trata como una imagen, SubPicIdx es un índice de la subimagen, xInti e yInti son una ubicación de muestra recortada en el índice i, SubPicRightBoundaryPos es una posición de un límite derecho de la subimagen, SubPicLeftBoundaryPos es una posición de un límite izquierdo de la subimagen, SubPicTopBoundaryPos es una posición de un límite superior de la subimagen, SubPicBotBoundaryPos es una posición de un límite inferior de la subimagen, SubWidthC y SubHeightC indican una relación de velocidad de muestreo horizontal y vertical entre muestras de luma y croma y Clip3 es la función de recorte de acuerdo con:
Í Xz < X
Clip3( x, y, z ) = y z > y
z de otro modo
donde x, y, y z son valores de entrada numéricos.
En el paso 1309, el codificador codifica el bloque en un flujo de bits con base en el valor de muestra predicha y el vector de movimiento. El flujo de bits entonces se puede almacenar para comunicación hacia un decodificador.
La figura 14 es un diagrama de flujo de un método de ejemplo 1400 para decodificar una secuencia de video de un flujo de bits, tal como el flujo de bits 1100, en tanto que se aplica una función de recorte en un filtro de interpolación, tal como el filtro de interpolación 913, cuando una subimagen, tal como la subimagen 510, se trata como una imagen, tal como la imagen 500. El método 1400 se puede emplear por un decodificador, tal como un sistema de códec 200, un decodificador 400 y/o un dispositivo de codificación de video 1200 cuando se realiza el método 100 para decodificar un bloque actual 801 y/o 901 de acuerdo con la interpredicción unidireccional 600 y/o interpredicción bidireccional 700 al emplear el filtro en bucle 1000 y/o en una lista de candidatos generada de acuerdo con el patrón 900.
El método 1400 puede comenzar cuando un decodificador comienza a recibir un flujo de bits de datos codificados que representan una secuencia de video, por ejemplo como resultado del método 1300. En el paso 1401, el decodificador recibe un flujo de bits que comprende una imagen actual que incluye una subimagen. La imagen, subimagen, segmentos, mosaicos, CTU y/u otras subregiones de los mismos se codifican de acuerdo con interpredicción. En el paso 1402, el decodificador determina un vector de movimiento para un bloque de la subimagen.
En el paso 1403, el decodificador aplica una función de recorte a ubicaciones de muestra en un bloque de referencia apuntado por el vector de movimiento. La función de recorte se aplica a fin de soportar la aplicación de un filtro de interpolación cuando el vector de movimiento apunta fuera de la subimagen. Este proceso se presenta cuando se establece una bandera para indicar que la subimagen se trata como una imagen y por lo tanto, se debe codificar para soportar la extracción que es independiente de las otras subimágenes en la imagen.
En el paso 1405, el decodificador aplica el filtro de interpolación a los resultados de la función de recorte para obtener un valor de muestra predicha. En un ejemplo, el filtro de interpolación incluye un proceso de interpolación bilineal de muestra de luma. En este caso, el bloque incluye un bloque de muestras de luma. Además, el valor de muestra predicha incluye un valor de muestra de luma predicha. En este caso, el proceso de interpolación bilineal de muestra de luma recibe entradas que incluyen una ubicación de luma en unidades de muestra completas (xIntL, yIntL). El proceso de interpolación bilineal de muestra de luma genera un valor de muestra de luma predicha (predSampleLXL). En este caso, la función de recorte del paso 1403 se aplica a las ubicaciones de muestra como sigue. Cuando subpic_treated_as_pic_flag[ SubPicIdx ] es igual a uno, se aplica lo siguiente:
xInti = Clip3( SubPicLeftBoundaryPos, SubPicRightBoundaryPos, xIntL i ), y
yInti = Clip3( SubPicTopBoundaryPos, SubPicBotBoundaryPos, yIntL i ),
donde subpic_treated_as_pic_flag es el conjunto de banderas para indicar que la subimagen se trata como una imagen, SubPicIdx es un índice de la subimagen, xInti e yInti son una ubicación de muestra recortada en el índice i, SubPicRightBoundaryPos es una posición de un límite derecho de la subimagen, SubPicLeftBoundaryPos es una posición de un límite izquierdo de la subimagen, SubPicTopBoundaryPos es una posición de un límite superior de la subimagen, SubPicBotBoundaryPos es una posición de un límite inferior de la subimagen y Clip3 es la función de recorte de acuerdo con:
( Xz < X
Clip3( x, y, z ) = y z > y
z de otro modo
donde x, y, y z son valores de entrada numéricos.
En otro ejemplo, el filtro de interpolación incluye un proceso de filtrado de interpolación de ocho derivaciones de muestra de luma. En este caso, el bloque incluye un bloque de muestras de luma, y el valor de muestra predicha incluye un valor de muestra de luma predicha. Además, el proceso de filtrado de interpolación de ocho derivaciones de muestra de luma recibe entradas que incluyen una ubicación de luma en unidades de muestra completas (xIntL, yIntL). El proceso de interpolación bilineal de muestra de luma genera un valor de muestra de luma predicha (predSampleLXL). Además, la función de recorte del paso 1403 se aplica a las ubicaciones de muestra como sigue. Cuando subpic_treated_as_pic_flag[ SubPicIdx ] es igual a uno, se aplica lo siguiente: xInti = Clip3( SubPicLeftBoundaryPos, SubPicRightBoundaryPos, xIntL i -3), y
yInti = Clip3( SubPicTopBoundaryPos, SubPicBotBoundaryPos, yIntL i -3),
donde subpic_treated_as_pic_flag es el conjunto de banderas para indicar que la subimagen se trata como una imagen, SubPicIdx es un índice de la subimagen, xInti e yInti son una ubicación de muestra recortada en el índice i, SubPicRightBoundaryPos es una posición de un límite derecho de la subimagen, SubPicLeftBoundaryPos es una posición de un límite izquierdo de la subimagen, SubPicTopBoundaryPos es una posición de un límite superior de la subimagen, SubPicBotBoundaryPos es una posición de un límite inferior de la subimagen y Clip3 es la función de recorte de acuerdo con:
( Xz < X
Clip3( x, y, z ) = y z > y
z de otro modo
donde x, y, y z son valores de entrada numéricos.
En otro ejemplo, el filtro de interpolación incluye un proceso de interpolación de muestra de croma. En este caso, el bloque incluye un bloque de muestras de croma, y el valor de muestra predicha incluye un valor de muestra de croma predicha. En este caso, el proceso de interpolación de muestra de croma recibe entradas que incluyen una ubicación de croma en unidades de muestra completas (xIntC, yIntC). Además, el proceso de interpolación de muestra de croma genera un valor de muestra de croma predicha (predSampleLXC). En este caso, la función de recorte del paso 1403 se aplica a las ubicaciones de muestra como sigue. Cuando subpic_treated_as_pic_flag[ SubPicIdx ] es igual a uno, se aplica lo siguiente:
xInti = Clip3( SubPicLeftBoundaryPos/SubWidthC, SubPicRightBoundaryPos/SubWidthC, xIntC i), y yInti = Clip3( SubPicTopBoundaryPos/SubHeightC, SubPicBotBoundaryPos/SubHeightC, yIntC i), donde subpic_treated_as_pic_flag es el conjunto de banderas para indicar que la subimagen se trata como una imagen, SubPicIdx es un índice de la subimagen, xInti e yInti son una ubicación de muestra recortada en el índice i, SubPicRightBoundaryPos es una posición de un límite derecho de la subimagen, SubPicLeftBoundaryPos es una posición de un límite izquierdo de la subimagen, SubPicTopBoundaryPos es una posición de un límite superior de la subimagen, SubPicBotBoundaryPos es una posición de un límite inferior de la subimagen, SubWidthC y SubHeightC indican una relación de velocidad de muestreo horizontal y vertical entre muestras de luma y croma y Clip3 es la función de recorte de acuerdo con:
X z < X
Clip3( x, y, z ) = y z > y
z de otro modo
donde x, y, y z son valores de entrada numéricos.
En el paso 1407, el decodificador decodifica el bloque con base en el valor de muestra predicha. El decodificador entonces puede reenviar el bloque para visualización como parte de una secuencia de video decodificada.
La figura 15 es un diagrama esquemático de un sistema de ejemplo 1500 para codificar una secuencia de video de imágenes en un flujo de bits, tal como el flujo de bits 1100, en tanto que se aplica una función de recorte en un filtro de interpolación, tal como la interpolación 913, cuando una subimagen, tal como la subimagen 510, se trata como una imagen, tal como la imagen 500. El sistema 1500 se puede implementar por un codificador y un decodificador tal como un sistema de códec 200, un codificador 300, un decodificador 400 y/o un dispositivo de codificación de video 1200. Además, el sistema 1500 se puede emplear cuando se implementa el método 100, 1300 y/o 1400 para codificar un bloque actual 801 y/o 901 de acuerdo con la interpredicción unidireccional 600 y/o interpredicción bidireccional 700 al emplear el filtro en bucle 1000 y/o en una lista de candidatos generada de acuerdo con el patrón 900.
El sistema 1500 incluye un codificador de video 1502. El codificador de video 1502 comprende un módulo de partición 1503 para particionar una imagen actual en una subimagen y la subimagen en un bloque. El codificador de video 1502 comprende además un módulo de determinación 1504 para determinación para codificar el bloque de acuerdo con interpredicción. El codificador de video 1502 comprende además un módulo de selección 1505 para seleccionar un vector de movimiento para codificar el bloque. El codificador de video 1502 comprende además un módulo de aplicación 1506 para aplicar una función de recorte a ubicaciones de muestra en un bloque de referencia para soportar la aplicación de un filtro de interpolación cuando el vector de movimiento apunta fuera de la subimagen y cuando se establece una bandera para indicar que la subimagen se trata como una imagen. El módulo de aplicación 1506 también es para aplicar el filtro de interpolación a los resultados de la función de recorte para obtener un valor de muestra predicha. El codificador de video 1502 comprende además un módulo de codificación 1507 para codificar el bloque en un flujo de bits con base en el valor de muestra predicha y el vector de movimiento. El codificador de video 1502 comprende además un módulo de almacenamiento 1508 para almacenar el flujo de bits para comunicación hacia un decodificador. El codificador de video 1502 comprende además un módulo de transmisión 1509 para transmitir el flujo de bits hacia el decodificador de video 1510. El codificador de video 1502 se puede configurar además para realizar cualquiera de los pasos del método 1300.
El sistema 1500 también incluye un decodificador de video 1510. El decodificador de video 1510 comprende un módulo de recepción 1511 para recibir un flujo de bits que comprende una imagen actual que incluye una subimagen codificada de acuerdo con la interpredicción. El decodificador de video 1510 comprende además un módulo de determinación 1512 para determinar un vector de movimiento para un bloque de la subimagen. El decodificador de video 1510 comprende además un módulo de aplicación 1513 para aplicar una función de recorte a ubicaciones de muestra en un bloque de referencia para soportar la aplicación de un filtro de interpolación cuando el vector de movimiento apunta fuera de la subimagen y cuando se establece una bandera para indicar que la subimagen se trata como una imagen. El módulo de aplicación 1513 también es para aplicar el filtro de interpolación a los resultados de la función de recorte para obtener un valor de muestra predicha. El decodificador de video 1510 comprende además un módulo de decodificación 1514 para decodificar el bloque con base en el valor de muestra predicha. El decodificador de video 1510 comprende además un módulo de reenvío 1515 para reenviar el bloque para visualización como parte de una secuencia de video decodificada. El decodificador de video 1510 se puede configurar además para realizar cualquiera de los pasos del método 1400.
Un primer componente se acopla directamente a un segundo componente cuando no hay componentes intermedios, excepto por una línea, una traza u otro medio entre el primer componente y el segundo componente. El primer componente se acopla indirectamente al segundo componente donde hay componentes intermedios diferentes de una línea, una traza u otro medio entre el primer componente y el segundo componente. El término “acoplado” y sus variantes incluyen tanto acoplado directamente como acoplado indirectamente. El uso del término “aproximadamente” significa un intervalo que incluye ±10% del número posterior a menos que se señale de otro modo.
También se debe entender que no se requiere necesariamente que los pasos de los métodos de ejemplo expuestos en la presente se realicen en el orden descrito y se debe entender que el orden de los pasos de estos métodos es solamente de ejemplo. Del mismo modo, se pueden incluir pasos adicionales en estos métodos, y se pueden omitir o combinar ciertos pasos, en métodos consistentes con diferentes modalidades de la presente descripción.
En tanto que se han proporcionado varias modalidades en la presente descripción, se puede entender que los sistemas y métodos descritos se pueden incorporar en muchas otras formas específicas dentro del alcance de las reivindicaciones anexas. Los presentes ejemplos se van a considerar como ilustrativos y no restrictivos. Por ejemplo, se pueden combinar o integrar los diferentes elementos o componentes en otro sistema o se pueden omitir o no implementar ciertas características.
Además, las técnicas, sistemas, subsistemas y métodos descritos e ilustrados en las diferentes modalidades como discretos o separados se pueden combinar o integrar con otros sistemas, componentes, técnicas o métodos sin apartarse del alcance de la presente descripción de acuerdo con las reivindicaciones anexas.
Claims (19)
1. Un método implementado en un decodificador, el método que comprende:
recibir, por un receptor del decodificador, un flujo de bits que comprende una imagen actual que incluye una subimagen codificada de acuerdo con la interpredicción;
determinar, por un procesador del decodificador, un bloque de referencia para un bloque de la subimagen; aplicar, por el procesador, una función de recorte a partes enteras de ubicaciones de muestra en el bloque de referencia para restringir las partes enteras que están dentro de la submuestra, cuando una bandera indica que la subimagen se trata como una imagen, y cuando un vector de movimiento para el bloque apunta fuera de la subimagen, en donde las ubicaciones de muestra se usan por un filtro de interpolación, el filtro de interpolación incluye un proceso de interpolación bilineal de muestras de luma, en donde el bloque incluye un bloque de muestras de luma, y en donde el valor de muestra predicho incluye un valor de muestra de luma predicha;
aplicar, por el procesador, el filtro de interpolación a los resultados de la función de recorte para obtener un valor de muestra predicha; y
decodificar, por el procesador, el bloque con base en el valor de muestra predicha.
2. El método de la reivindicación 1, en donde el proceso de interpolación bilineal de muestra de luma recibe entradas que incluyen una ubicación de luma en unidades de muestra completas (xIntL, yIntL), en donde el proceso de interpolación bilineal de muestra de luma genera un valor de muestra de luma predicha (predSampleLXL), y en donde la función de recorte se aplica a las partes enteras de acuerdo con: cuando subpic_treated_as_pic_flag[ SubPicIdx ] es igual a uno, se aplica lo siguiente:
xInti = Clip3( SubPicLeftBoundaryPos, SubPicRightBoundaryPos, xIntL i ), y
yInti = Clip3( SubPicTopBoundaryPos, SubPicBotBoundaryPos, yIntL i ),
donde subpic_treated_as_pic_flag es el conjunto de banderas para indicar que la subimagen se trata como una imagen, SubPicIdx es un índice de la subimagen, xInti e yInti son una ubicación de muestra recortada en el índice i, SubPicRightBoundaryPos es una posición de un límite derecho de la subimagen, SubPicLeftBoundaryPos es una posición de un límite izquierdo de la subimagen, SubPicTopBoundaryPos es una posición de un límite superior de la subimagen, SubPicBotBoundaryPos es una posición de un límite inferior de la subimagen, y Clip3 es la función de recorte de acuerdo con:
( xz < x
Clip3( x, y, z ) = y z > y
z de otro modo
donde x, y, y z son valores de entrada numéricos.
3. El método de cualquiera de las reivindicaciones 1-2, en donde el filtro de interpolación incluye un proceso de filtrado de interpolación de ocho derivaciones de muestra de luma, en donde el bloque incluye un bloque de muestras de luma, y en donde el valor de muestra predicha incluye un valor de muestra de luma predicha.
4. El método de cualquiera de las reivindicaciones 1-3, en donde el proceso de filtrado de interpolación de ocho derivaciones de muestra de luma recibe entradas que incluyen una ubicación de luma en unidades de muestra completas (xIntL, yIntL), en donde el proceso de interpolación bilineal de muestra de luma genera un valor de muestra de luma predicha (predSampleLXL), y en donde la función de recorte se aplica a las partes enteras de acuerdo con:
cuando subpic_treated_as_pic_flag[ SubPicIdx] es igual a uno, aplica lo siguiente:
xInti = Clip3( SubPicLeftBoundaryPos, SubPicRightBoundaryPos, xIntL i -3), y
yInti = Clip3( SubPicTopBoundaryPos, SubPicBotBoundaryPos, yIntL i -3),
donde subpic_treated_as_pic_flag es el conjunto de banderas para indicar que la subimagen se trata como una imagen, SubPicIdx es un índice de la subimagen, xInti e yInti son una ubicación de muestra recortada en el índice i, SubPicRightBoundaryPos es una posición de un límite derecho de la subimagen, SubPicLeftBoundaryPos es una posición de un límite izquierdo de la subimagen, SubPicTopBoundaryPos es una posición de un límite superior de la subimagen, SubPicBotBoundaryPos es una posición de un límite inferior de la subimagen y Clip3 es la función de recorte de acuerdo con:
( Xz < X
Clip3( x, y, z ) = y z > y
z de otro modo
donde x, y, y z son valores de entrada numéricos.
5. El método de cualquiera de las reivindicaciones 1-4, en donde el filtro de interpolación incluye un proceso de interpolación de muestra de croma, en donde el bloque incluye un bloque de muestras de croma, y en donde el valor de muestra predicha incluye un valor de muestra de croma predicha.
6. El método de cualquiera de las reivindicaciones 1-5, en donde el proceso de interpolación de muestra de croma recibe entradas que incluyen una ubicación de croma en unidades de muestra completas (xIntC, yIntC), en donde el proceso de interpolación de muestra de croma genera un valor de muestra de corma predicha (predSampleLXC), y en donde la función de recorte se aplica a las partes enteras de acuerdo con: cuando subpic_treated_as_pic_flag[ SubPicIdx ] es igual a uno, se aplica lo siguiente:
xInti = Clip3( SubPicLeftBoundaryPos/SubWidthC, SubPicRightBoundaryPos/SubWidthC, xIntC i), y yInti = Clip3( SubPicTopBoundaryPos/SubHeightC, SubPicBotBoundaryPos/ SubHeightC, yIntC i), donde subpic_treated_as_pic_flag es el conjunto de banderas para indicar que la subimagen se trata como una imagen, SubPicIdx es un índice de la subimagen, xInti e yInti son una ubicación de muestra recortada en el índice i, SubPicRightBoundaryPos es una posición de un límite derecho de la subimagen, SubPicLeftBoundaryPos es una posición de un límite izquierdo de la subimagen, SubPicTopBoundaryPos es una posición de un límite superior de la subimagen, SubPicBotBoundaryPos es una posición de un límite inferior de la subimagen, SubWidthC y SubHeightC indican un relación de velocidad de muestreo horizontal y vertical y Clip3 es la función de recorte de acuerdo con:
( Xz < X
Clip3( x, y, z ) = y z > y
z de otro modo
donde x, y, y z son valores de entrada numéricos.
7. Un método implementado en un codificador, el método que comprende:
particionar, por un procesador del codificador, una imagen actual en una subimagen y la subimagen en un bloque;
obtener, por el procesador, un bloque de referencia para codificar el bloque;
aplicar, por el procesador, una función de recorte a partes enteras de ubicaciones de muestra en el bloque de referencia, para restringir las partes enteras que están dentro de la subimagen, cuando una bandera indica que la subimagen se trata como una imagen, y cuando un vector de movimiento para el bloque apunta fuera de la subimagen, en donde las ubicaciones de muestra se usan para un filtro de interpolación, el filtro de interpolación incluye un proceso de interpolación bilineal de muestras de luma, en donde el bloque incluye un bloque de muestras de luma, y en donde el valor de muestra predicha incluye un valor de muestra de luma predicha; aplicar, por el procesador, el filtro de interpolación a los resultados de la función de recorte para obtener un valor de muestra predicha;
codificar, por el procesador, el bloque en un flujo de bits con base en el valor de muestra predicha y el vector de movimiento.
8. El método de la reivindicación 7, en donde el proceso de interpolación bilineal de muestra de luma recibe entradas que incluyen una ubicación de luma en unidades de muestra completas (xIntL, yIntL), en donde el proceso de interpolación bilineal de muestra de luma genera un valor de muestra de luma predicha (predSampleLXL), y en donde la función de recorte se aplica a las partes enteras de acuerdo con: cuando subpic_treated_as_pic_flag[ SubPicIdx ] es igual a uno, se aplica lo siguiente:
xInti = Clip3( SubPicLeftBoundaryPos, SubPicRightBoundaryPos, xIntL i ), y
yInti = Clip3( SubPicTopBoundaryPos, SubPicBotBoundaryPos, yIntL i ),
donde subpic_treated_as_pic_flag es el conjunto de banderas para indicar que la subimagen se trata como una imagen, SubPicIdx es un índice de la subimagen, xInti e yInti son una ubicación de muestra recortada en el índice i, SubPicRightBoundaryPos es una posición de un límite derecho de la subimagen, SubPicLeftBoundaryPos es una posición de un límite izquierdo de la subimagen, SubPicTopBoundaryPos es una posición de un límite superior de la subimagen, SubPicBotBoundaryPos es una posición de un límite inferior de la subimagen y Clip3 es la función de recorte de acuerdo con:
z < X
z > y
de otro modo
donde x, y, y z son valores de entrada numéricos.
9. El método de cualquiera de las reivindicaciones 7-8, en donde el filtro de interpolación incluye un proceso de filtrado de interpolación de ocho derivaciones de muestra de luma, en donde el bloque incluye un bloque de muestras de luma, y en donde el valor de muestra predicha incluye un valor de muestra de luma predicha.
10. El método de cualquiera de las reivindicaciones 7-9, en donde el proceso de filtrado de interpolación de ocho derivaciones de muestra de luma recibe entradas que incluyen una ubicación de luma en unidades de muestra completas (xIntL, yIntL), en donde el proceso de interpolación bilineal de muestra de luma genera un valor de muestra de luma predicha (predSampleLXL), y en donde la función de recorte se aplica a las partes enteras de acuerdo con:
cuando subpic_treated_as_pic_flag[ SubPicIdx ] es igual a uno, se aplica lo siguiente:
xInti = Clip3( SubPicLeftBoundaryPos, SubPicRightBoundaryPos, xIntL i -3), y
yInti = Clip3( SubPicTopBoundaryPos, SubPicBotBoundaryPos, yIntL i -3),
donde subpic_treated_as_pic_flag es el conjunto de banderas para indicar que la subimagen se trata como una imagen, SubPicIdx es un índice de la subimagen, xInti e yInti son una ubicación de muestra recortada en el índice i, SubPicRightBoundaryPos es una posición de un límite derecho de la subimagen, SubPicLeftBoundaryPos es una posición de un límite izquierdo de la subimagen, SubPicTopBoundaryPos es una posición de un límite superior de la subimagen, SubPicBotBoundaryPos es una posición de un límite inferior de la subimagen, y Clip3 es la función de recorte de acuerdo con:
( Xz < X
Clip3( x, y, z ) = y z > y
z de otro modo
donde x, y, y z son valores de entrada numéricos.
11. El método de cualquiera de las reivindicaciones 7-10, en donde el filtro de interpolación incluye un proceso de interpolación de muestra de croma, en donde el bloque incluye un bloque de muestras de croma, y en donde el valor de muestra predicha incluye un valor de muestra de croma predicha.
12. El método de cualquiera de las reivindicaciones 7-11, en donde el proceso de interpolación de muestra de croma recibe entradas que incluyen una ubicación de croma en unidades de muestra completas (xIntC, yIntC), en donde el proceso de interpolación de muestra de croma genera un valor de muestra de luma predicha (predSampleLX<c>), y en donde la función de recorte se aplica a las partes enteras de acuerdo con: cuando subpic_treated_as_pic_flag[ SubPicIdx ] es igual a uno, se aplica lo siguiente:
xInti = Clip3( SubPicLeftBoundaryPos/SubWidthC, SubPicRightBoundaryPos/SubWidthC, xIntC i), y yInti = Clip3( SubPicTopBoundaryPos/SubHeightC, SubPicBotBoundaryPos/SubHeightC, yIntC i), donde subpic_treated_as_pic_flag es el conjunto de banderas para indicar que la subimagen se trata como una imagen, SubPicIdx es un índice de la subimagen, xInti e yInti son una ubicación de muestra recortada en el índice i, SubPicRightBoundaryPos es una posición de un límite derecho de la subimagen, SubPicLeftBoundaryPos es una posición de un límite izquierdo de la subimagen, SubPicTopBoundaryPos es una posición de un límite superior de la subimagen, SubPicBotBoundaryPos es una posición de un límite inferior de la subimagen, y SubWidthC y SubHeightC indican una relación de velocidad de muestreo vertical y horizontal entre muestras de luma y croma, y Clip3 es la función de recorte de acuerdo con:
x z < x
Clip3( x, y, z ) : y z > y
,z de otro modo
donde x, y, y z son valores de entrada numéricos.
13. Un dispositivo de codificación de video que comprende:
un procesador, un receptor acoplado al procesador, una memoria acoplada al procesador y un transmisor acoplado al procesador, en donde el procesador, receptor, memoria y transmisor se configuran para realizar el método de cualquiera de las reivindicaciones 1-12.
14. Un medio leíble por computadora no transitorio que comprende un producto de programa de computadora para su uso por un dispositivo de codificación de video, el producto de programa de computadora que comprende instrucciones ejecutables por computadora almacenadas en el medio leíble por computadora no transitorio de modo que cuando se ejecutan por un procesador provocan que el dispositivo de codificación de video realice el método de cualquiera de las reivindicaciones 1-12.
15. Un decodificador que comprende:
una unidad de recepción, configurada para recibir un flujo de bits que comprende una imagen actual que incluye una subimagen codificada de acuerdo con la interpredicción;
una unidad de determinación, configurada para determinar un bloque de referencia para un bloque de la subimagen;
una unidad de aplicación, configurada para:
aplicar una función de recorte a partes enteras de ubicaciones de muestra en el bloque de referencia, para restringir las partes enteras que están dentro de la subimagen, cuando una bandera indica que la subimagen se trata como una imagen, y cuando un vector de movimiento para el bloque apunta fuera de la subimagen, en donde las ubicaciones de muestra se usan por un filtro de interpolación, el filtro de interpolación incluye un proceso de interpolación bilineal de muestras de luma, en donde el bloque incluye un bloque de muestras de luma, y en donde el valor de muestra predicha incluye un valor de muestra de luma predicha; y
aplicar el filtro de interpolación a los resultados de la función de recorte para obtener un valor de muestra predicha;
una unidad de decodificación, configurada para decodificar el bloque con base en el valor de muestra predicha.
16. El decodificador de la reivindicación 15, en donde el decodificador se configura además para realizar el método de cualquiera de las reivindicaciones 2-6.
17. Un codificador que comprende:
una unidad de partición, configurada para particionar una imagen actual en una subimagen y la subimagen en un bloque;
una unidad de obtención, configurada para obtener un bloque de referencia para codificar el bloque; una unidad de aplicación, configurada para:
aplicar una función de recorte a partes enteras de ubicaciones de muestra en el bloque de referencia para restringir las partes enteras que están dentro de la submuestra, cuando una bandera indica que la subimagen se trata como una imagen, y cuando un vector de movimiento para el bloque apunta fuera de la subimagen, en donde las ubicaciones de muestra se usan para un filtro de interpolación, el filtro de interpolación incluye un proceso de interpolación bilineal de muestras de luma, en donde el bloque incluye un bloque de muestras de luma, y en donde el valor de muestra predicha incluye un valor de muestra de luma predicha; y
aplicar el filtro de interpolación a los resultados de la función de recorte para obtener un valor de muestra predicha;
una unidad de codificación, configurada para codificar el bloque en un flujo de bits con base en el valor de muestra predicha y el vector de movimiento.
18. El codificador de la reivindicación 17, en donde el codificador se configura además para realizar el método de cualquiera de las reivindicaciones 7-12.
19. Un producto de programa de computadora que comprende código de programa para realizar el método de acuerdo con cualquiera de las reivindicaciones 1 a 12 cuando se ejecuta en una computadora o un procesador.
Applications Claiming Priority (3)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US201962816751P | 2019-03-11 | 2019-03-11 | |
| US201962826659P | 2019-03-29 | 2019-03-29 | |
| PCT/US2020/022083 WO2020185885A1 (en) | 2019-03-11 | 2020-03-11 | Interpolation filter clipping for sub-picture motion vectors |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| ES2983276T3 true ES2983276T3 (es) | 2024-10-22 |
Family
ID=72426045
Family Applications (2)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| ES20770767T Active ES2983276T3 (es) | 2019-03-11 | 2020-03-11 | Recorte de filtro de interpolación para vectores de movimiento de subimagen |
| ES20769625T Active ES2980868T3 (es) | 2019-03-11 | 2020-03-11 | Direcciones de segmento basadas en sub-imagen en codificación de vídeo |
Family Applications After (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| ES20769625T Active ES2980868T3 (es) | 2019-03-11 | 2020-03-11 | Direcciones de segmento basadas en sub-imagen en codificación de vídeo |
Country Status (14)
| Country | Link |
|---|---|
| US (11) | US20210409730A1 (es) |
| EP (5) | EP4358036A3 (es) |
| JP (11) | JP7485689B2 (es) |
| KR (8) | KR102793065B1 (es) |
| CN (7) | CN118631988B (es) |
| DK (1) | DK3931748T3 (es) |
| ES (2) | ES2983276T3 (es) |
| FI (1) | FI3931748T3 (es) |
| HU (2) | HUE066652T2 (es) |
| MX (8) | MX2021011016A (es) |
| PL (2) | PL3931748T3 (es) |
| PT (1) | PT3931748T (es) |
| SG (1) | SG11202109980WA (es) |
| WO (6) | WO2020185883A1 (es) |
Families Citing this family (74)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| WO2020011796A1 (en) * | 2018-07-09 | 2020-01-16 | Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. | Encoder and decoder, encoding method and decoding method for versatile spatial partitioning of coded pictures |
| GB2577056B (en) * | 2018-09-11 | 2022-12-14 | British Broadcasting Corp | Bitstream decoder |
| WO2020163319A1 (en) | 2019-02-07 | 2020-08-13 | Vid Scale, Inc. | Systems, apparatus and methods for inter prediction refinement with optical flow |
| ES2983276T3 (es) * | 2019-03-11 | 2024-10-22 | Huawei Tech Co Ltd | Recorte de filtro de interpolación para vectores de movimiento de subimagen |
| KR20210130764A (ko) * | 2019-03-21 | 2021-11-01 | 가온미디어 주식회사 | 픽쳐 분할을 처리하는 영상 부호화 방법, 영상 복호화 방법 및 그 장치 |
| WO2020197236A1 (ko) * | 2019-03-24 | 2020-10-01 | 엘지전자 주식회사 | 서브 픽처 핸들링 구조 기반 영상 또는 비디오 코딩 |
| WO2020200236A1 (en) | 2019-04-01 | 2020-10-08 | Beijing Bytedance Network Technology Co., Ltd. | Using interpolation filters for history based motion vector prediction |
| US12120334B2 (en) * | 2019-05-15 | 2024-10-15 | Hyundai Motor Company | Video encoding and decoding method and device |
| JP7377894B2 (ja) | 2019-05-21 | 2023-11-10 | 北京字節跳動網絡技術有限公司 | サブブロックマージモードでのシンタックスシグナリング |
| KR102627821B1 (ko) | 2019-06-04 | 2024-01-23 | 베이징 바이트댄스 네트워크 테크놀로지 컴퍼니, 리미티드 | 이웃 블록 정보를 사용한 모션 후보 리스트 구성 |
| WO2020244568A1 (en) | 2019-06-04 | 2020-12-10 | Beijing Bytedance Network Technology Co., Ltd. | Motion candidate list with geometric partition mode coding |
| CN117354507A (zh) | 2019-06-06 | 2024-01-05 | 北京字节跳动网络技术有限公司 | 视频编解码的运动候选列表构建 |
| WO2020244659A1 (en) | 2019-06-06 | 2020-12-10 | Beijing Bytedance Network Technology Co., Ltd. | Interactions between sub-block based intra block copy and different coding tools |
| EP3970366B1 (en) | 2019-06-14 | 2025-12-10 | Beijing Bytedance Network Technology Co., Ltd. | Handling video unit boundaries and virtual boundaries |
| CN113994671B (zh) | 2019-06-14 | 2024-05-10 | 北京字节跳动网络技术有限公司 | 基于颜色格式处理视频单元边界和虚拟边界 |
| WO2020256522A1 (ko) * | 2019-06-20 | 2020-12-24 | 한국전자통신연구원 | 영역 분할을 사용하는 영상 부호화 및 영상 복호화를 위한 방법 및 장치 |
| US12160582B2 (en) * | 2019-06-21 | 2024-12-03 | Interdigital Vc Holdings, Inc. | Precision refinement for motion compensation with optical flow |
| CN114175636B (zh) | 2019-07-14 | 2024-01-12 | 北京字节跳动网络技术有限公司 | 自适应参数集中的自适应环路滤波的指示 |
| KR102707854B1 (ko) | 2019-07-15 | 2024-09-23 | 베이징 바이트댄스 네트워크 테크놀로지 컴퍼니, 리미티드 | 적응적 루프 필터링에서의 분류 |
| US11095916B2 (en) * | 2019-07-23 | 2021-08-17 | Qualcomm Incorporated | Wraparound motion compensation in video coding |
| EP4307665A3 (en) | 2019-08-10 | 2024-07-10 | Beijing Bytedance Network Technology Co., Ltd. | Buffer management in subpicture decoding |
| CN112970251B (zh) | 2019-08-20 | 2025-03-14 | 苹果公司 | 用于对图像信号进行编码/解码的方法及其装置 |
| KR102635319B1 (ko) | 2019-08-20 | 2024-02-07 | 베이징 바이트댄스 네트워크 테크놀로지 컴퍼니, 리미티드 | 비디오 프로세싱에서 대안적 보간 필터들의 선택적 사용 |
| CN117319645A (zh) | 2019-08-23 | 2023-12-29 | 北京字节跳动网络技术有限公司 | 用于处理视频数据的方法、装置以及计算机可读存储介质 |
| CN120378611A (zh) * | 2019-09-03 | 2025-07-25 | Lg电子株式会社 | 图像编码/解码设备和比特流发送设备 |
| JP7734584B2 (ja) * | 2019-09-06 | 2025-09-05 | パナソニック インテレクチュアル プロパティ コーポレーション オブ アメリカ | 符号化装置、復号装置、符号化方法及び復号方法 |
| CN114521331B (zh) * | 2019-09-13 | 2025-06-13 | 松下电器(美国)知识产权公司 | 编码装置、解码装置、编码方法、解码方法和存储介质 |
| ES3030107T3 (en) | 2019-09-18 | 2025-06-26 | Beijing Bytedance Network Tech Co Ltd | Two-part signaling of adaptive loop filters in video coding |
| US12395680B2 (en) * | 2019-09-19 | 2025-08-19 | Interdigital Madison Patent Holdings, Sas | Systems and methods for versatile video coding |
| US11716488B2 (en) | 2019-09-20 | 2023-08-01 | Qualcomm Incorporated | Subpicture signaling in high-level syntax for video coding |
| CN114430902B (zh) | 2019-09-22 | 2023-11-10 | 北京字节跳动网络技术有限公司 | 自适应环路滤波中的填充过程 |
| MX2021014687A (es) * | 2019-09-23 | 2022-01-11 | Electronics & Telecommunications Res Inst | Metodo y dispositivo de codificacion/decodificacion de imagenes y medio de grabacion que almacena flujo de bits. |
| CN114586361B (zh) * | 2019-09-23 | 2025-05-23 | 瑞典爱立信有限公司 | 具有子图片片位置导出的片段位置信令 |
| CN114503568A (zh) * | 2019-09-24 | 2022-05-13 | 华为技术有限公司 | 子图像的去块效应滤波标志 |
| WO2021060834A1 (ko) * | 2019-09-24 | 2021-04-01 | 엘지전자 주식회사 | 서브픽처 기반 영상 부호화/복호화 방법, 장치 및 비트스트림을 전송하는 방법 |
| EP4022910A4 (en) | 2019-09-27 | 2022-11-16 | Beijing Bytedance Network Technology Co., Ltd. | ADAPTIVE LOOP FILTERING BETWEEN DIFFERENT VIDEO UNITS |
| CN114450959B (zh) | 2019-09-28 | 2024-08-02 | 北京字节跳动网络技术有限公司 | 视频编解码中的几何分割模式 |
| JP7322290B2 (ja) | 2019-10-02 | 2023-08-07 | 北京字節跳動網絡技術有限公司 | ビデオビットストリームにおけるサブピクチャシグナリングのための構文 |
| CN117376573A (zh) * | 2019-10-07 | 2024-01-09 | Lg电子株式会社 | 解码装置、编码装置以及发送用于图像的数据的装置 |
| CN117956146A (zh) | 2019-10-10 | 2024-04-30 | 北京字节跳动网络技术有限公司 | 自适应环路滤波中不可用样点位置处的填充处理 |
| CN117676135A (zh) | 2019-10-18 | 2024-03-08 | 北京字节跳动网络技术有限公司 | 子图片与环路滤波之间的相互影响 |
| JP7394985B2 (ja) * | 2019-10-23 | 2023-12-08 | 北京字節跳動網絡技術有限公司 | ビデオ・データを処理する方法、装置及び記憶方法 |
| EP4601297A3 (en) | 2019-10-23 | 2025-11-12 | Beijing Bytedance Network Technology Co., Ltd. | Calculation for multiple coding tools |
| WO2021083257A1 (en) | 2019-10-29 | 2021-05-06 | Beijing Bytedance Network Technology Co., Ltd. | Cross-component adaptive loop filter |
| US11509938B2 (en) * | 2019-11-05 | 2022-11-22 | Hfi Innovation Inc. | Method and apparatus of signaling subpicture information in video coding |
| WO2021104409A1 (en) | 2019-11-30 | 2021-06-03 | Beijing Bytedance Network Technology Co., Ltd. | Cross-component adaptive filtering and subblock coding |
| WO2021110017A1 (en) | 2019-12-02 | 2021-06-10 | Beijing Bytedance Network Technology Co., Ltd. | Merge with motion vector differencing in affine mode |
| US12143601B2 (en) * | 2019-12-05 | 2024-11-12 | Hfi Innovation Inc. | Specifying layout in video pictures |
| CN115104302B (zh) | 2019-12-11 | 2025-12-02 | 抖音视界有限公司 | 跨分量适应性回路滤波的样点填充 |
| WO2021123101A1 (en) * | 2019-12-20 | 2021-06-24 | Fraunhofer-Gesellschaft zur Förderung der angewandten Forschung e.V. | Video coding in relation to subpictures |
| GB2590632B (en) * | 2019-12-20 | 2023-07-26 | Canon Kk | Video coding and decoding |
| EP4082198A4 (en) * | 2019-12-27 | 2023-08-16 | Alibaba Group Holding Limited | METHOD AND DEVICE FOR SIGNALING SUBPICTURE PARTITIONING INFORMATION |
| CN115299063B (zh) | 2020-02-27 | 2025-11-21 | 抖音视界有限公司 | 变换跳过残差编解码 |
| WO2021180020A1 (en) | 2020-03-07 | 2021-09-16 | Beijing Bytedance Network Technology Co., Ltd. | Implicit multiple transform set signaling in video coding |
| CN115299066A (zh) * | 2020-03-19 | 2022-11-04 | 松下电器(美国)知识产权公司 | 图像处理装置、图像处理方法、比特流发送装置及非暂时性存储介质 |
| JP7488353B2 (ja) * | 2020-03-20 | 2024-05-21 | バイトダンス インコーポレイテッド | サブピクチャの順序関係 |
| KR20220157950A (ko) | 2020-03-23 | 2022-11-29 | 베이징 바이트댄스 네트워크 테크놀로지 컴퍼니, 리미티드 | 어파인 머지 및 어파인 모션 벡터 예측 모드에 대한 예측 리파인먼트 |
| EP4102841A4 (en) * | 2020-03-27 | 2023-07-12 | Sony Group Corporation | INFORMATION PROCESSING DEVICE AND INFORMATION PROCESSING METHOD |
| US11470358B2 (en) | 2020-04-02 | 2022-10-11 | Sharp Kabushiki Kaisha | Systems and methods for signaling scaling window information in video coding |
| CN115668926A (zh) * | 2020-05-27 | 2023-01-31 | 字节跳动有限公司 | 在视频编解码中使用子图片和片 |
| JP7522237B2 (ja) | 2020-06-30 | 2024-07-24 | 北京字節跳動網絡技術有限公司 | 適応ループフィルタリングのための境界位置 |
| US12425608B2 (en) * | 2021-02-02 | 2025-09-23 | Sony Group Corporation | Information processing device and information processing method |
| CN117121481A (zh) | 2021-03-17 | 2023-11-24 | 抖音视界有限公司 | 单独树编解码限制 |
| US11785239B2 (en) * | 2021-06-29 | 2023-10-10 | Tencent America LLC | Independent coded region output supplementary enhancement information message |
| CN117999788A (zh) * | 2021-09-27 | 2024-05-07 | 字节跳动有限公司 | 用于视频处理的方法、装置和介质 |
| US11954775B2 (en) * | 2022-02-23 | 2024-04-09 | International Business Machines Corporation | Artboard element positioning in a series of computer-based artboards |
| EP4254950A1 (en) * | 2022-03-31 | 2023-10-04 | Beijing Xiaomi Mobile Software Co., Ltd. | Encoding/decoding video picture partitionned in ctu grids |
| US12225207B2 (en) * | 2022-07-07 | 2025-02-11 | Tencent America LLC | Subblock intra and inter coding |
| US12518417B2 (en) * | 2022-09-23 | 2026-01-06 | Apple Inc. | Method and device for generating metadata estimations based on metadata subdivisions |
| CN118042163A (zh) * | 2022-11-14 | 2024-05-14 | 杭州海康威视数字技术股份有限公司 | 一种图像处理方法、装置、电子设备及存储介质 |
| US12483615B2 (en) | 2023-01-31 | 2025-11-25 | Zoom Communications, Inc. | Dynamic determination of video stream quality discrepancies in a communication session |
| US12381928B2 (en) * | 2023-01-31 | 2025-08-05 | Zoom Communications, Inc. | Dynamic video stream quality adjustments in a communication session |
| CN117372933B (zh) * | 2023-12-06 | 2024-02-20 | 南京智绘星图信息科技有限公司 | 图像去冗方法、装置及电子设备 |
| US12531811B2 (en) * | 2024-01-02 | 2026-01-20 | Verizon Patent And Licensing Inc. | Systems and methods for Quality of Service treatment of network traffic for different user interface elements |
Family Cites Families (76)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| GB2382940A (en) * | 2001-11-27 | 2003-06-11 | Nokia Corp | Encoding objects and background blocks |
| EP2424240A4 (en) * | 2009-04-22 | 2013-04-10 | Lg Electronics Inc | METHOD FOR MODIFYING REFERENCE COPY LISTS FOR A MORE VIEWED VIDEO |
| HUE045823T2 (hu) | 2010-10-14 | 2020-01-28 | Interdigital Vc Holdings Inc | Eljárás és berendezés javított entrópia kódolásra és dekódolásra |
| US10244239B2 (en) * | 2010-12-28 | 2019-03-26 | Dolby Laboratories Licensing Corporation | Parameter set for picture segmentation |
| KR101956284B1 (ko) * | 2011-06-30 | 2019-03-08 | 엘지전자 주식회사 | 보간 방법 및 이를 이용한 예측 방법 |
| US9462298B2 (en) * | 2011-10-21 | 2016-10-04 | Qualcomm Incorporated | Loop filtering around slice boundaries or tile boundaries in video coding |
| US20130107973A1 (en) * | 2011-10-28 | 2013-05-02 | Qualcomm Incorporated | Loop filtering control over tile boundaries |
| US9749661B2 (en) * | 2012-01-18 | 2017-08-29 | Qualcomm Incorporated | Sub-streams for wavefront parallel processing in video coding |
| CN104094604B (zh) * | 2012-01-20 | 2017-07-14 | 太阳专利托管公司 | 使用时间运动矢量预测对视频进行编码和解码的方法和装置 |
| US10244246B2 (en) * | 2012-02-02 | 2019-03-26 | Texas Instruments Incorporated | Sub-pictures for pixel rate balancing on multi-core platforms |
| CN107197259B (zh) * | 2012-02-03 | 2019-11-19 | 寰发股份有限公司 | 贯穿图块或条带边界的环路滤波方法及其装置 |
| US20130208808A1 (en) | 2012-02-08 | 2013-08-15 | Panasonic Corporation | Image coding method and image decoding method |
| EP2839652B1 (en) | 2012-04-16 | 2016-03-09 | Telefonaktiebolaget LM Ericsson (publ) | Fixed tile structure flag indicating parallel processing possibility for a sequence of compressed video |
| CN104272743B (zh) * | 2012-05-09 | 2019-01-01 | 太阳专利托管公司 | 执行运动矢量预测的方法、编码和解码方法及其装置 |
| CA2877045C (en) * | 2012-06-29 | 2020-12-08 | Fraunhofer-Gesellschaft Zur Foerderung Der Angewandten Forschung E.V. | Video data stream concept |
| US9716892B2 (en) * | 2012-07-02 | 2017-07-25 | Qualcomm Incorporated | Video parameter set including session negotiation information |
| US20140003504A1 (en) * | 2012-07-02 | 2014-01-02 | Nokia Corporation | Apparatus, a Method and a Computer Program for Video Coding and Decoding |
| JP2015533051A (ja) | 2012-09-18 | 2015-11-16 | ヴィド スケール インコーポレイテッド | タイルおよびタイル群を使用した関心領域ビデオ符号化 |
| EP2898689B1 (en) * | 2012-09-21 | 2020-05-06 | Nokia Technologies Oy | Method and apparatus for video coding |
| US9554146B2 (en) * | 2012-09-21 | 2017-01-24 | Qualcomm Incorporated | Indication and activation of parameter sets for video coding |
| US9161039B2 (en) * | 2012-09-24 | 2015-10-13 | Qualcomm Incorporated | Bitstream properties in video coding |
| US20140085415A1 (en) * | 2012-09-27 | 2014-03-27 | Nokia Corporation | Method and apparatus for video coding |
| US9491457B2 (en) * | 2012-09-28 | 2016-11-08 | Qualcomm Incorporated | Signaling of regions of interest and gradual decoding refresh in video coding |
| WO2014072571A1 (en) * | 2012-10-01 | 2014-05-15 | Nokia Corporation | Method and apparatus for scalable video coding |
| US9596461B2 (en) * | 2012-11-26 | 2017-03-14 | Qualcomm Incorporated | Loop filtering across constrained intra block boundaries in video coding |
| US10334259B2 (en) * | 2012-12-07 | 2019-06-25 | Qualcomm Incorporated | Advanced residual prediction in scalable and multi-view video coding |
| US9374585B2 (en) * | 2012-12-19 | 2016-06-21 | Qualcomm Incorporated | Low-delay buffering model in video coding |
| JP6290924B2 (ja) * | 2013-01-07 | 2018-03-07 | ノキア テクノロジーズ オサケユイチア | ビデオ・コーディングおよびデコーディングのための方法と装置 |
| US20140218473A1 (en) * | 2013-01-07 | 2014-08-07 | Nokia Corporation | Method and apparatus for video coding and decoding |
| US9294776B2 (en) * | 2013-03-05 | 2016-03-22 | Qualcomm Incorporated | Parallel processing for video coding |
| SG11201508300TA (en) * | 2013-04-07 | 2015-11-27 | Sharp Kk | Signaling change in output layer sets |
| US20140301477A1 (en) * | 2013-04-07 | 2014-10-09 | Sharp Laboratories Of America, Inc. | Signaling dpb parameters in vps extension and dpb operation |
| US9591321B2 (en) * | 2013-04-07 | 2017-03-07 | Dolby International Ab | Signaling change in output layer sets |
| CA2909601A1 (en) | 2013-07-07 | 2015-01-15 | Wilus Institute Of Standards And Technology Inc. | Method and apparatus for processing video signal |
| WO2015004924A1 (en) * | 2013-07-10 | 2015-01-15 | Sharp Kabushiki Kaisha | Scaling list signaling and parameter sets activation |
| GB2516224A (en) * | 2013-07-11 | 2015-01-21 | Nokia Corp | An apparatus, a method and a computer program for video coding and decoding |
| WO2015008477A1 (en) * | 2013-07-14 | 2015-01-22 | Sharp Kabushiki Kaisha | Tile alignment signaling and conformance constraints |
| CN105379273B (zh) * | 2013-07-14 | 2019-03-15 | 夏普株式会社 | 对来自比特流的视频进行解码的方法和设备 |
| GB2516424A (en) * | 2013-07-15 | 2015-01-28 | Nokia Corp | A method, an apparatus and a computer program product for video coding and decoding |
| GB2516824A (en) * | 2013-07-23 | 2015-02-11 | Nokia Corp | An apparatus, a method and a computer program for video coding and decoding |
| GB2516826B (en) * | 2013-07-23 | 2016-06-22 | Canon Kk | Method, device and computer program for encapsulating partitioned timed media data by creating tracks to be independently encapsulated in at least one media f |
| US20150103895A1 (en) * | 2013-10-13 | 2015-04-16 | Sharp Laboratories Of America, Inc. | Electronic devices for signaling multiple initial buffering parameters |
| US20150103924A1 (en) * | 2013-10-13 | 2015-04-16 | Sharp Laboratories Of America, Inc. | On operation of decoded picture buffer for interlayer pictures |
| WO2015052943A1 (en) * | 2013-10-13 | 2015-04-16 | Sharp Kabushiki Kaisha | Signaling parameters in vps extension and dpb operation |
| US10257519B2 (en) * | 2014-01-02 | 2019-04-09 | Sharp Kabushiki Kaisha | Signaling and derivation of decoded picture buffer parameters |
| US20150195554A1 (en) * | 2014-01-03 | 2015-07-09 | Sharp Laboratories Of America, Inc. | Constraints and enhancements for a scalable video coding system |
| US10250895B2 (en) * | 2014-03-14 | 2019-04-02 | Sharp Kabushiki Kaisha | DPB capacity limits |
| US9699480B2 (en) * | 2014-06-13 | 2017-07-04 | Sharp Laboratories Of America, Inc. | Level limits |
| US20160212423A1 (en) * | 2015-01-16 | 2016-07-21 | Microsoft Technology Licensing, Llc | Filtering to mitigate artifacts when changing chroma sampling rates |
| US9854201B2 (en) * | 2015-01-16 | 2017-12-26 | Microsoft Technology Licensing, Llc | Dynamically updating quality to higher chroma sampling rate |
| US9749646B2 (en) * | 2015-01-16 | 2017-08-29 | Microsoft Technology Licensing, Llc | Encoding/decoding of high chroma resolution details |
| CN108293136B (zh) * | 2015-09-23 | 2022-12-30 | 诺基亚技术有限公司 | 编码360度全景视频的方法、装置和计算机可读存储介质 |
| CN114786009B (zh) * | 2016-03-16 | 2025-07-08 | 寰发股份有限公司 | 视频编码中限制块尺寸的视频数据处理方法与装置 |
| CN116546208A (zh) * | 2016-04-08 | 2023-08-04 | 韩国电子通信研究院 | 用于导出运动预测信息的方法和装置 |
| JP2018056685A (ja) * | 2016-09-27 | 2018-04-05 | 株式会社ドワンゴ | 画像符号化装置、画像符号化方法、及び画像符号化プログラム、並びに、画像復号装置、画像復号方法、及び画像復号プログラム |
| US10382781B2 (en) * | 2016-09-28 | 2019-08-13 | Qualcomm Incorporated | Interpolation filters for intra prediction in video coding |
| US11140417B2 (en) * | 2016-11-01 | 2021-10-05 | Nokia Technologies Oy | Apparatus, a method and a computer program for video coding and decoding |
| GB2555788A (en) * | 2016-11-08 | 2018-05-16 | Nokia Technologies Oy | An apparatus, a method and a computer program for video coding and decoding |
| JP2018107500A (ja) | 2016-12-22 | 2018-07-05 | キヤノン株式会社 | 符号化装置、符号化方法及びプログラム、復号装置、復号方法及びプログラム |
| WO2018155939A1 (ko) | 2017-02-22 | 2018-08-30 | 에스케이텔레콤 주식회사 | 영상 복호화 방법 및 장치 |
| WO2018169139A1 (ko) * | 2017-03-17 | 2018-09-20 | 엘지전자 주식회사 | 360도 비디오의 영역 정보 전달 방법 및 장치 |
| US11212497B2 (en) * | 2017-03-30 | 2021-12-28 | Samsung Electronics Co., Ltd. | Method and apparatus for producing 360 degree image content on rectangular projection by selectively applying in-loop filter |
| KR20230117492A (ko) | 2017-04-11 | 2023-08-08 | 브이아이디 스케일, 인크. | 면 연속성을 사용하는 360 도 비디오 코딩 |
| WO2018221368A1 (ja) * | 2017-05-31 | 2018-12-06 | シャープ株式会社 | 動画像復号装置、及び動画像符号化装置 |
| CN116248864B (zh) * | 2017-07-03 | 2025-06-10 | 汉阳大学校产学协力团 | 利用包含追加区域的分割单位的影像解码方法以及装置 |
| WO2019009590A1 (ko) | 2017-07-03 | 2019-01-10 | 김기백 | 추가 영역을 포함하는 분할 단위를 이용한 영상 복호화 방법 및 장치 |
| KR102336987B1 (ko) * | 2017-07-04 | 2021-12-08 | 엘지전자 주식회사 | 360도 비디오의 영역 기반 처리 방법 및 장치 |
| KR102411337B1 (ko) * | 2017-10-09 | 2022-06-22 | 노키아 테크놀로지스 오와이 | 비디오 코딩 및 디코딩을 위한 장치, 방법 및 컴퓨터 프로그램 |
| JP2021016016A (ja) * | 2017-10-20 | 2021-02-12 | シャープ株式会社 | 動画像符号化装置及び動画像復号装置 |
| KR20250026397A (ko) * | 2018-01-25 | 2025-02-25 | 프라운호퍼 게젤샤프트 쭈르 푀르데룽 데어 안겐반텐 포르슝 에. 베. | 효율적인 서브 픽처 추출 |
| CN118555392A (zh) * | 2018-09-21 | 2024-08-27 | 韩国电子通信研究院 | 图像编码/解码方法和用于发送压缩视频数据的装置 |
| EP4325849A3 (en) * | 2018-11-22 | 2024-04-17 | Beijing Bytedance Network Technology Co., Ltd. | Coordination method for sub-block based inter prediction |
| JP2022511489A (ja) * | 2018-12-04 | 2022-01-31 | ヴィド スケール インコーポレイテッド | タイルグループ区画化 |
| WO2020139060A1 (ko) * | 2018-12-28 | 2020-07-02 | 김기백 | 인트라 예측 기반의 영상 부호화/복호화 방법 및 장치 |
| WO2020141248A1 (en) | 2019-01-02 | 2020-07-09 | Nokia Technologies Oy | An apparatus, a method and a computer program for video coding and decoding |
| ES2983276T3 (es) * | 2019-03-11 | 2024-10-22 | Huawei Tech Co Ltd | Recorte de filtro de interpolación para vectores de movimiento de subimagen |
-
2020
- 2020-03-11 ES ES20770767T patent/ES2983276T3/es active Active
- 2020-03-11 MX MX2021011016A patent/MX2021011016A/es unknown
- 2020-03-11 CN CN202410744572.4A patent/CN118631988B/zh active Active
- 2020-03-11 JP JP2021555031A patent/JP7485689B2/ja active Active
- 2020-03-11 WO PCT/US2020/022080 patent/WO2020185883A1/en not_active Ceased
- 2020-03-11 WO PCT/US2020/022083 patent/WO2020185885A1/en not_active Ceased
- 2020-03-11 CN CN202080020604.6A patent/CN113557736A/zh active Pending
- 2020-03-11 PL PL20769625.3T patent/PL3931748T3/pl unknown
- 2020-03-11 KR KR1020217032480A patent/KR102793065B1/ko active Active
- 2020-03-11 EP EP24162837.9A patent/EP4358036A3/en active Pending
- 2020-03-11 KR KR1020217032479A patent/KR102808464B1/ko active Active
- 2020-03-11 KR KR1020217032481A patent/KR102775341B1/ko active Active
- 2020-03-11 CN CN202080020459.1A patent/CN113557737A/zh active Pending
- 2020-03-11 FI FIEP20769625.3T patent/FI3931748T3/fi active
- 2020-03-11 SG SG11202109980W patent/SG11202109980WA/en unknown
- 2020-03-11 JP JP2021555026A patent/JP7430197B2/ja active Active
- 2020-03-11 WO PCT/US2020/022089 patent/WO2020185890A1/en not_active Ceased
- 2020-03-11 EP EP20770255.6A patent/EP3932072A4/en active Pending
- 2020-03-11 KR KR1020257015507A patent/KR20250076660A/ko active Pending
- 2020-03-11 KR KR1020217032477A patent/KR102825177B1/ko active Active
- 2020-03-11 PT PT207696253T patent/PT3931748T/pt unknown
- 2020-03-11 ES ES20769625T patent/ES2980868T3/es active Active
- 2020-03-11 WO PCT/US2020/022091 patent/WO2020185892A1/en not_active Ceased
- 2020-03-11 EP EP24158779.9A patent/EP4350640A3/en active Pending
- 2020-03-11 PL PL20770767.0T patent/PL3932074T3/pl unknown
- 2020-03-11 MX MX2021011023A patent/MX2021011023A/es unknown
- 2020-03-11 JP JP2021555029A patent/JP7401554B2/ja active Active
- 2020-03-11 KR KR1020217032475A patent/KR20210135308A/ko not_active Ceased
- 2020-03-11 WO PCT/US2020/022087 patent/WO2020185889A1/en not_active Ceased
- 2020-03-11 JP JP2021555037A patent/JP7704491B2/ja active Active
- 2020-03-11 MX MX2021011032A patent/MX2021011032A/es unknown
- 2020-03-11 KR KR1020217032446A patent/KR102776040B1/ko active Active
- 2020-03-11 CN CN202080020590.8A patent/CN113615203A/zh active Pending
- 2020-03-11 KR KR1020257020744A patent/KR20250099273A/ko active Pending
- 2020-03-11 DK DK20769625.3T patent/DK3931748T3/da active
- 2020-03-11 EP EP20770767.0A patent/EP3932074B9/en active Active
- 2020-03-11 MX MX2021011025A patent/MX2021011025A/es unknown
- 2020-03-11 CN CN202080020571.5A patent/CN113574892A/zh active Pending
- 2020-03-11 JP JP2021555043A patent/JP7519373B2/ja active Active
- 2020-03-11 CN CN202080020562.6A patent/CN113574541A/zh active Pending
- 2020-03-11 HU HUE20769625A patent/HUE066652T2/hu unknown
- 2020-03-11 MX MX2021011027A patent/MX2021011027A/es unknown
- 2020-03-11 MX MX2021011029A patent/MX2021011029A/es unknown
- 2020-03-11 HU HUE20770767A patent/HUE067063T2/hu unknown
- 2020-03-11 WO PCT/US2020/022082 patent/WO2020185884A1/en not_active Ceased
- 2020-03-11 JP JP2021555038A patent/JP7661669B2/ja active Active
- 2020-03-11 CN CN202080020606.5A patent/CN113557744A/zh active Pending
- 2020-03-11 EP EP20769625.3A patent/EP3931748B1/en active Active
-
2021
- 2021-09-09 US US17/470,354 patent/US20210409730A1/en active Pending
- 2021-09-09 US US17/470,387 patent/US12425582B2/en active Active
- 2021-09-09 US US17/470,407 patent/US12267490B2/en active Active
- 2021-09-09 US US17/470,448 patent/US20210409785A1/en active Pending
- 2021-09-09 US US17/470,376 patent/US12028517B2/en active Active
- 2021-09-09 US US17/470,363 patent/US11831816B2/en active Active
- 2021-09-10 MX MX2025004020A patent/MX2025004020A/es unknown
- 2021-09-10 MX MX2024002770A patent/MX2024002770A/es unknown
-
2023
- 2023-11-02 JP JP2023188632A patent/JP7608567B2/ja active Active
- 2023-11-17 JP JP2023195849A patent/JP7593542B2/ja active Active
- 2023-11-24 JP JP2023199455A patent/JP2024019407A/ja active Pending
- 2023-11-24 JP JP2023199453A patent/JP2024028754A/ja active Pending
- 2023-11-27 US US18/519,875 patent/US12294699B2/en active Active
-
2024
- 2024-06-13 US US18/742,363 patent/US12531986B2/en active Active
- 2024-12-18 JP JP2024221340A patent/JP2025060718A/ja active Pending
-
2025
- 2025-02-21 US US19/060,280 patent/US20250193391A1/en active Pending
- 2025-05-05 US US19/199,112 patent/US20250337894A1/en active Pending
- 2025-09-19 US US19/334,176 patent/US20260019576A1/en active Pending
Also Published As
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| ES2983276T3 (es) | Recorte de filtro de interpolación para vectores de movimiento de subimagen | |
| ES2988213T3 (es) | Señalización de subimágenes restringidas en movimiento temporal en codificado de vídeo | |
| ES3021282T3 (en) | Tile group assignment for raster scan and rectangular tile groups in video coding | |
| ES2992052T3 (es) | Señalización de grupos de mosaicos en codificación de video |