ALF APS constraints in video coding

By constraining ALF APS signaling to ensure at least one filter set is present, the inefficiencies in video coding systems are addressed, leading to simplified decoders and reduced resource usage.

JP2025163101APending Publication Date: 2025-10-28HUAWEI TECH CO LTD
View PDF 0 Cites 0 Cited by

Patent Information

Application Number
JP2025126783
Authority / Receiving Office
JP · JP
Patent Type
Applications
Current Assignee / Owner
Priority Date
2019-08-16
Filing Date
2025-07-30
Publication Date
2025-10-28

AI Technical Summary

Technical Problem

Existing video coding systems face inefficiencies in adaptive loop filter (ALF) adaptation parameter set (APS) signaling, leading to unnecessary complexity and resource usage due to unsupported flag configurations, which can result in inefficient codec designs.

Method used

Implement constraints ensuring that at least one of the ALF luma or chroma filter signal flags in the ALF APS is set to 1, ensuring the APS is non-empty and contains necessary data, checked by a hypothetical reference decoder to prevent unsupported configurations.

Benefits of technology

This approach reduces unnecessary signaling, simplifies the decoder, and decreases resource usage in both encoder and decoder, enhancing coding efficiency and reducing complexity.

✦ Generated by Eureka AI based on patent content.

Smart Images

  • Figure 2025163101000001_ABST
    Figure 2025163101000001_ABST
Patent Text Reader

Abstract

To provide a video coding mechanism that applies constraints to increase an efficiency of adaptive loop filter (ALF) adaptive parameter set (APS) signaling and resulting codec design.SOLUTION: A video coding mechanism receives a bitstream that includes an adaptive loop filter (ALF) adaptation parameter set (APS) that includes an ALF luminance filter signal flag (alf_luma_filter_signal_flag) and an ALF chroma filter signal flag (alf_chroma_filter_signal_flag). At least one of alf_luma_filter_signal_flag or alf_chroma_filter_signal_flag is equal to 1. A slice is decoded based on an ALF parameter in the ALF APS and forwarded for display as part of the decoded video sequence.SELECTED DRAWING: Figure 5
Need to check novelty before this filing date? Find Prior Art

Description

[Technical Field]

[0001] FIELD This disclosure relates generally to video coding, and more particularly to efficient signaling for coding tool parameters used to compress video data in video coding. [Background technology]

[0002] The amount of video data required to render even a relatively short video can be significant, resulting in difficulties when streaming or otherwise communicating the data over communication networks with limited bandwidth capacity. Therefore, video data is generally compressed before being communicated over today's telecommunications networks. Video size can also be an issue when the video is stored on a storage device, where memory resources may be limited. Video compression devices often use software and / or hardware at the source to code the video data before transmission or storage, thereby reducing the amount of data needed to represent a digital video image. The compressed data is then received at the destination by a video decompression device, which decodes the video data. With limited network resources and an ever-increasing demand for higher video quality, improved compression and decompression techniques that improve compression ratios with little or no sacrifice in image quality are desirable. Summary of the Invention

[0003] In an embodiment, the disclosure includes a method implemented in a decoder, comprising: receiving, by a receiver of the decoder, a bitstream including an adaptive loop filter (ALF) adaptation parameter set (APS) including an ALF luma filter signal flag (alf_luma_filter_signal_flag) and an ALF chroma filter signal flag (alf_chroma_filter_signal_flag), where at least one of alf_luma_filter_signal_flag or alf_chroma_filter_signal_flag is equal to 1; and decoding, by a processor of the decoder, a slice based on the ALF parameters in the ALF APS.

[0004] An APS may be used to maintain data related to multiple slices but not the entire picture. An APS may include ALF parameters. The ALF parameters may control the application of ALF processing to only the luma component of a slice, only the chroma component of a slice, or both the luma and chroma components of a slice. An ALF APS may include a flag indicating the type of data contained in the APS. However, flag-based signaling related to an ALF APS is inefficient in some video coding systems. For example, a flag may be set to indicate that the ALF APS includes only the luma filter set, only the chroma filter set, both the luma and chroma filter sets, or neither the luma nor chroma filter set. An ALF APS that includes neither the luma nor chroma filter set is not useful. However, a standardized codec should be built to support any option allowed by the standard. Therefore, allowing an ALF APS that includes neither the luma nor chroma filter set would result in an inefficient codec design that must support options that should not occur. This example applies constraints to increase the efficiency of ALF APS signaling and the resulting codec design. For example, an ALF APS is constrained such that one or both of the ALF luma filter signal flag and the ALF chroma filter signal flag in the ALF APS are set to 1. This ensures that the ALF APS contains at least a luma filter set or a chroma filter set and is therefore non-empty. As another example, a slice header associated with a slice may include a luma component ALF APS ID that indicates an ALF APS containing a valid luma filter set. When this occurs, the constraint that the ALF luma filter signal flag in the ALF APS is set to 1 may be utilized. This ensures that the ALF APS contains luma data when the slice header references an ALF APS associated with luma data.As another example, a slice header associated with a slice may include a chroma component ALF APS ID that indicates an ALF APS containing a valid chroma filter set. When this occurs, a constraint that the ALF chroma filter signal flag in the ALF APS is set to 1 may be utilized. This ensures that when a slice header references an ALF APS associated with chroma data, the ALF APS contains chroma data. These constraints may ensure that unnecessary ALF APS signaling is avoided and that the ALF APS contains the data necessary to filter the decoded slice. Such constraints may be checked by a hypothetical reference decoder (HRD) at the encoder. The HRD may check the encoded bitstream for standards compliance to ensure that these problem cases do not occur. These constraints therefore allow the decoder to assume that such problem cases do not occur in the bitstream. Thus, the decoder may be simplified to avoid supporting such problem cases. This constraint therefore prevents errors, increases coding efficiency, and / or reduces the complexity of the encoder and / or decoder. Thus, the present examples may increase video coding system functionality while reducing usage of network, memory, and / or processing resources in the encoder and / or decoder.

[0005] Optionally, in any of the preceding aspects, another implementation of the aspect is provided, wherein alf_luma_filter_signal_flag specifies whether the luma filter set is signaled in the ALF APS.

[0006] Optionally, in any of the preceding aspects, another implementation of the aspect is provided, wherein when the luma component ALF APS identifier (ID) (slice_alf_aps_id_luma[i]) in the slice header associated with the slice is equal to the APS ID of the ALF APS, the value of alf_luma_filter_signal_flag of the ALF APS is constrained to be equal to 1.

[0007] Optionally, in any of the preceding aspects, another implementation of the aspect is provided, wherein slice_alf_aps_id_luma[i] specifies the APS ID (adaptation_parameter_set_id) of the i-th ALF APS referenced by the luma component of the slice.

[0008] Optionally, in any of the preceding aspects, another implementation of the aspect is provided, wherein alf_chroma_filter_signal_flag specifies whether the chroma filter set is signaled in the ALF APS.

[0009] Optionally, in any of the preceding aspects, another implementation of the aspect is provided, wherein when the chroma component ALF APS ID (slice_alf_aps_id_chroma) in the slice header associated with the slice is equal to the APS ID of the ALF APS, the value of alf_chroma_filter_signal_flag of the ALF APS is constrained to be equal to 1.

[0010] Optionally, in any of the preceding aspects, another implementation of the aspect is provided, wherein slice_alf_aps_id_chroma specifies the adaptation_parameter_set_id of the ALF APS referenced by the chroma component of the slice.

[0011] In an embodiment, the disclosure includes a method implemented in an encoder comprising: encoding, by a processor of the encoder, a slice as part of an encoded video sequence into a bitstream; determining, by the processor, ALF parameters for application to the slice; encoding, by the processor, the ALF parameters into an ALF adaptation parameter set (APS) in the bitstream, the ALF APS including an ALF luma filter signal flag (alf_luma_filter_signal_flag) and an ALF chroma filter signal flag (alf_chroma_filter_signal_flag), where at least one of alf_luma_filter_signal_flag or alf_chroma_filter_signal_flag is equal to 1; and storing, by a memory coupled to the processor, the bitstream for communication to a decoder.

[0012] An APS may be used to maintain data related to multiple slices but not the entire picture. An APS may include ALF parameters. The ALF parameters may control the application of ALF processing to only the luma component of a slice, only the chroma component of a slice, or both the luma and chroma components of a slice. An ALF APS may include a flag indicating the type of data contained in the APS. However, flag-based signaling related to an ALF APS is inefficient in some video coding systems. For example, a flag may be set to indicate that the ALF APS includes only the luma filter set, only the chroma filter set, both the luma and chroma filter sets, or neither the luma nor chroma filter set. An ALF APS that includes neither the luma nor chroma filter set is not useful. However, a standardized codec should be built to support any option allowed by the standard. Therefore, allowing an ALF APS that includes neither the luma nor chroma filter set would result in an inefficient codec design that must support options that should not occur. This example applies constraints to increase the efficiency of ALF APS signaling and the resulting codec design. For example, an ALF APS is constrained such that one or both of the ALF luma filter signal flag and the ALF chroma filter signal flag in the ALF APS are set to 1. This ensures that the ALF APS contains at least a luma filter set or a chroma filter set and is therefore non-empty. As another example, a slice header associated with a slice may include a luma component ALF APS ID that indicates an ALF APS containing a valid luma filter set. When this occurs, the constraint that the ALF luma filter signal flag in the ALF APS is set to 1 may be utilized. This ensures that the ALF APS contains luma data when the slice header references an ALF APS associated with luma data.As another example, a slice header associated with a slice may include a chroma component ALF APS ID that indicates an ALF APS containing a valid chroma filter set. When this occurs, a constraint that the ALF chroma filter signal flag in the ALF APS is set to 1 may be utilized. This ensures that when a slice header references an ALF APS associated with chroma data, the ALF APS contains chroma data. These constraints may ensure that unnecessary ALF APS signaling is avoided and that the ALF APS contains the data necessary to filter the decoded slice. Such constraints may be checked by a hypothetical reference decoder (HRD) at the encoder. The HRD may check the encoded bitstream for standards compliance to ensure that these problem cases do not occur. These constraints therefore allow the decoder to assume that such problem cases do not occur in the bitstream. Thus, the decoder may be simplified to avoid supporting such problem cases. This constraint therefore prevents errors, increases coding efficiency, and / or reduces the complexity of the encoder and / or decoder. Thus, the present examples may increase video coding system functionality while reducing usage of network, memory, and / or processing resources in the encoder and / or decoder.

[0013] Optionally, in any of the preceding aspects, another implementation of the aspect is provided, wherein alf_luma_filter_signal_flag specifies whether the luma filter set is signaled in the ALF APS.

[0014] Optionally, in any of the preceding aspects, another implementation of the aspect is provided, wherein when the luma component ALF APS(ID)(slice_alf_aps_id_luma[i]) in the slice header associated with the slice is equal to the APS ID of the ALF APS, the value of alf_luma_filter_signal_flag of the ALF APS is constrained to be equal to 1.

[0015] Optionally, in any of the preceding aspects, another implementation of the aspect is provided, wherein slice_alf_aps_id_luma[i] specifies the adaptation_parameter_set_id of the i-th ALF APS referenced by the luma component of the slice.

[0016] Optionally, in any of the preceding aspects, another implementation of the aspect is provided, wherein alf_chroma_filter_signal_flag specifies whether the chroma filter set is signaled in the ALF APS.

[0017] Optionally, in any of the preceding aspects, another implementation of the aspect is provided, wherein when the chroma component ALF APS ID in the slice header associated with the slice (slice_alf_aps_id_chroma) is equal to the APS ID of the ALF APS, the value of the alf_chroma_filter_signal_flag of the ALF APS is constrained to be equal to 1.

[0018] Optionally, in any of the preceding aspects, another implementation of the aspect is provided, wherein slice_alf_aps_id_chroma specifies the adaptation_parameter_set_id of the ALF APS referenced by the chroma component of the slice.

[0019] In an embodiment, the disclosure comprises a video coding device including a processor, a receiver coupled to the processor, a memory coupled to the processor, and a transmitter coupled to the processor, wherein the processor, receiver, memory, and transmitter are configured to perform the method of any of the preceding aspects.

[0020] In one embodiment, the present disclosure includes a non-transitory computer-readable medium including a computer program product for use by a video coding device, the computer program product comprising computer-implementable instructions stored on the non-transitory computer-readable medium that, when executed by a processor, causes the video coding device to perform a method according to any of the preceding aspects.

[0021] In an embodiment, the disclosure includes a decoder comprising: receiving means for receiving a bitstream including an adaptive loop filter (ALF) adaptation parameter set (APS) including an ALF luma filter signal flag (alf_luma_filter_signal_flag) and an ALF chroma filter signal flag (alf_chroma_filter_signal_flag), where at least one of alf_luma_filter_signal_flag or alf_chroma_filter_signal_flag is equal to 1; decoding means for decoding slices based on the ALF parameters in the ALF APS; and forwarding means for forwarding the slices for display as part of a decoded video sequence.

[0022] Optionally, in any of the preceding aspects, another implementation of the aspect provides that the decoder is further configured to perform a method according to any of the preceding aspects.

[0023] In an embodiment, the disclosure includes an encoder comprising slice encoding means for encoding a slice into a bitstream as part of an encoded video sequence; determining means for determining ALF parameters for application to the slice; ALF encoding means for encoding the ALF parameters into an ALF adaptation parameter set (APS) in the bitstream, the ALF APS including an ALF luma filter signal flag (alf_luma_filter_signal_flag) and an ALF chroma filter signal flag (alf_chroma_filter_signal_flag), where at least one of alf_luma_filter_signal_flag or alf_chroma_filter_signal_flag is equal to 1; and storing means for storing the bitstream for communication to a decoder.

[0024] Optionally, in any of the preceding aspects, another implementation of the aspect further provides an encoder configured to perform the method of any of the preceding aspects.

[0025] For purposes of clarity, any one of the above-described embodiments may be combined with any one or more of the other above-described embodiments to create new embodiments within the scope of the present disclosure.

[0026] These and other features will be more clearly understood from the following detailed description taken in conjunction with the accompanying drawings and claims. [Brief explanation of the drawings]

[0027] For a more complete understanding of the present disclosure, reference is now made to the following brief description taken in conjunction with the accompanying drawings and detailed description, wherein like reference numerals represent like parts.

[0028] [Figure 1] 1 is a flowchart of an exemplary method for coding a video signal.

[0029] [Figure 2] 1 is a schematic diagram of an example coding and decoding (codec) system for video coding.

[0030] [Figure 3] FIG. 1 is a schematic diagram illustrating an exemplary video encoder.

[0031] [Figure 4] FIG. 1 is a schematic diagram illustrating an exemplary video decoder.

[0032] [Figure 5] FIG. 1 is a schematic diagram illustrating an example bitstream including an adaptive loop filter (ALF) adaptation parameter set (APS) with parameter constraints.

[0033] [Figure 6] 1 is a schematic diagram of an exemplary video coding device.

[0034] [Figure 7] 1 is a flowchart of an exemplary method for encoding a video sequence into a bitstream by utilizing ALF APS with constraints.

[0035] [Figure 8] 1 is a flowchart of an exemplary method for decoding a video sequence from a bitstream by utilizing ALF APS with constraints.

[0036] [Figure 9] 1 is a schematic diagram of an example system for coding a video sequence of images in a bitstream by utilizing ALF APS with constraints. DETAILED DESCRIPTION OF THE INVENTION

[0037] While example implementations according to one or more embodiments are provided below, it should be understood at the outset that the disclosed systems and / or methods may be implemented using any number of techniques, whether currently known or in existence. The present disclosure should in no way be limited to the example implementations, drawings, and techniques shown below, including the example designs and implementations shown and described herein, but may be modified within the scope of the appended claims, along with their full range of equivalents.

[0038] The terms listed below are defined as follows, unless used in a contrary context herein. Specifically, the following definitions are intended to provide additional clarity to the present disclosure. However, terms may be explained differently in different contexts. Accordingly, the following definitions should be considered supplemental and not limiting of any other definitions provided for such terms herein.

[0039] A bitstream is a sequence of bits containing compressed video data for transmission between an encoder and a decoder. An encoder is a device configured to use an encoding process to compress video data into a bitstream. An encoded video sequence is a sequence of coded access units (AUs) and supporting syntax / parameters. An AU is a data unit containing a complete set of video data (e.g., a single picture) associated with a single point in time in a video sequence. A decoder is a device configured to use a decoding process to reconstruct a bitstream into video data for display. A decoded video sequence is a sequence of pictures reconstructed by a decoder ready for display to a user. A picture is an array of luma samples and / or chroma samples that make up a frame or a field thereof. For clarity, the picture being coded or decoded may be referred to as the current picture. A slice is an integer number of complete tiles or an integer number of consecutive complete coding tree unit (CTU) rows within a tile of a picture that are exclusively contained in a single network abstraction layer (NAL) unit. The luma component, sometimes denoted Y, is the part of the video data that describes light. The chroma component is part of the video data that describes color and may be denoted as blue-difference chroma (Cb) and red-difference chroma (Cr). An adaptive parameter set (APS) is a syntax structure that contains syntax elements / parameters to apply to one or more slices in one or more pictures. An APS identifier (ID) is a value (e.g., an integer) that uniquely identifies the APS. An adaptive loop filter (ALF) is a filtering process applied as part of decoding. For example, an ALF may utilize a linear filter with a transfer function controlled by variable parameters and an optimization algorithm configured to adjust the variable parameters. An ALF APS is an APS that contains ALF parameters and controls the application of the ALF process to the corresponding slice. An ALF parameter is a syntax element that contains data related to controlling the ALF process.The ALF luma filter signal flag is an ALF parameter indicating that the corresponding ALF APS includes a luma filter set. The ALF chroma filter signal flag is an ALF parameter indicating that the corresponding ALF APS includes a chroma filter set. The luma filter set is a set of filter parameters for controlling the application of the ALF to the luma component in a slice. The chroma filter set is a set of filter parameters for controlling the application of the ALF to the chroma component in a slice. A slice header is a part of a coded slice that contains data elements for all video data in the slice. The luma component ALF APS ID is a syntax element in a slice header that identifies the ALF APS that includes the luma filter set associated with the slice associated with the slice header. The chroma component ALF APS ID is a syntax element in a slice header that identifies the ALF APS that includes the chroma filter set associated with the slice associated with the slice header.

[0040] The following acronyms are used herein: Adaptive Loop Filter (ALF), Adaptive Parameter Set (APS), Coding Tree Block (CTB), Coding Tree Unit (CTU), Coding Unit (CU), Coding Video Sequence (CVS), Decoded Picture Buffer (DPB), External Decoding Refresh (EDR), Group of Pictures (GOP), Joint Video Experts Team (JVET), Motion Constrained Tile Set (MCTS), Maximum Transmission Unit (MTU), Network Abstraction Layer (NAL), Picture Order Count (POC), Random Access Point (RAP), Raw Byte Sequence Payload (RBSP), Sample Adaptive Offset (SAO), Supplementary Enhancement Information (SEI), Sequence Parameter Set (SPS), Temporal Motion Vector Prediction (TMVP), Versatile Video Coding (VVC), and Working Draft (WD).

[0041] Many video compression techniques may be utilized to reduce the size of video files with minimal loss of data. For example, video compression techniques may include performing spatial (e.g., intra-picture) prediction and / or temporal (e.g., inter-picture) prediction to reduce or remove data redundancy in a video sequence. For block-based video coding, video slices (e.g., video pictures or portions of video pictures) may be divided into video blocks, which may also be referred to as tree blocks, coding tree blocks (CTBs), coding tree units (CTUs), coding units (CUs), and / or coding nodes. Video blocks in intra-coded (I) slices of a picture are coded using spatial prediction with respect to reference samples in neighboring blocks in the same picture. Video blocks in inter-coded unidirectionally predictive (P) or bidirectionally predictive (B) slices of a picture may be coded utilizing spatial prediction with respect to reference samples in neighboring blocks in the same picture or temporal prediction with respect to reference samples in other reference pictures. Pictures may be referred to as frames and / or images, and reference pictures may be referred to as reference frames and / or reference images. Spatial or temporal prediction results in a prediction block representing an image block. Residual data represents pixel differences between the original image block and the prediction block. Thus, inter-coded blocks are coded according to a motion vector pointing to a block of reference samples forming the prediction block, and residual data indicating the difference between the coding block and the prediction block. Intra-coded blocks are coded according to an intra-coding mode and residual data. For further compression, the residual data may be transformed from the pixel domain to a transform domain. These result in residual transform coefficients, which may be quantized. The quantized transform coefficients may initially be arranged in a two-dimensional array. The quantized transform coefficients may be scanned to produce a one-dimensional vector of transform coefficients. Entropy coding may be applied to achieve even more compression.Such video compression techniques are discussed in more detail below.

[0042] Ensuring the encoded video is accurately decoded can be the video is encoded and decoded according to a corresponding video coding standard, including International Telecommunication Union (ITU) Standardization Sector (ITU-T) H.261, International Organization for Standardization / International Electrotechnical Commission (ISO / IEC) Motion Picture Experts Group (MPEG)-1 Part 2, Advanced Video Coding (AVC), also known as ITU-T H.262 or ISO / IEC MPEG-2 Part 2, ITU-T H.263, ISO / IEC MPEG-4 Part 2, ITU-T H.264 or ISO / IEC MPEG-4 Part 10, and High Efficiency Video Coding (HEVC), also known as ITU-T H.265 or MPEG-H Part 2. AVC includes extensions such as Scalable Video Coding (SVC), Multiview Video Coding (MVC), and Multiview Video Coding + Depth (MVC+D), as well as three-dimensional (3D) AVC (3D-AVC). HEVC includes extensions such as Scalable HEVC (SHVC), Multiview HEVC (MV-HEVC), and 3D HEVC (3D-HEVC). The ITU-T and ISO / IEC Joint Video Experts Team (JVET) has begun development of a video coding standard called Versatile Video Coding (VVC). VVC is included in working drafts (WDs) including JVET-O2001-v14.

[0043] An APS may be used to maintain data related to multiple slices rather than data related to an entire picture. In some examples, the same APS may include data related to slices that span multiple pictures (e.g., portions of multiple pictures). An APS may include ALF parameters. The ALF parameters may control the application of ALF processing to only the luma component of a slice, only the chroma component of a slice, or both the luma and chroma components of a slice. An ALF APS may include a flag indicating the type of data included in the APS. However, flag-based signaling related to an ALF APS may be inefficient in some video coding systems. For example, a flag may be set to indicate that the ALF APS includes only a luma filter set, only a chroma filter set, both a luma filter set and a chroma filter set, or neither a luma filter set nor a chroma filter set. An ALF APS that includes neither a luma filter set nor a chroma filter set is not useful. However, a standardized codec should be built to support any option allowed by the standard. Therefore, allowing an ALF APS that does not include either a luma or chroma filter set would result in an inefficient codec design that would have to support options that should not occur.

[0044] Various mechanisms for applying constraints to increase the efficiency of ALF APS signaling and the resulting codec design are disclosed herein. For example, an ALF APS may be constrained such that one or both of the ALF luma filter signal flag and the ALF chroma filter signal flag in the ALF APS are set to 1. This ensures that the ALF APS contains at least a luma filter set or a chroma filter set and is therefore non-empty. As another example, a slice header associated with a slice may include a luma component ALF APS ID indicating an ALF APS containing a valid luma filter set. When this occurs, a constraint that the ALF luma filter signal flag in the ALF APS is set to 1 may be utilized. This ensures that the ALF APS contains luma data when the slice header references an ALF APS associated with luma data. As another example, a slice header associated with a slice may include a chroma component ALF APS ID indicating an ALF APS containing a valid chroma filter set. When this occurs, a constraint that the ALF chroma filter signal flag in the ALF APS is set to 1 may be utilized. This ensures that when a slice header references an ALF APS associated with chroma data, the ALF APS contains chroma data. These constraints may ensure that unnecessary ALF APS signaling is avoided and that the ALF APS contains the data necessary for filtering the decoded slice. Such constraints may be included in a hypothetical reference decoder (HRD) at the encoder. The HRD may check the encoded bitstream for compliance to ensure that these problem cases do not occur. These constraints therefore allow the decoder to assume that such problem cases do not occur in the bitstream. Thus, the decoder may be simplified to avoid supporting such problem cases. This constraint therefore prevents errors, increases coding efficiency, and / or reduces the complexity of the encoder and / or decoder.Thus, the present examples may increase video coding system functionality while reducing usage of network, memory, and / or processing resources in the encoder and / or decoder.

[0045] 1 is a flowchart of an exemplary operational method 100 for coding a video signal. Specifically, a video signal is encoded in an encoder. The encoding process compresses the video signal by utilizing various mechanisms to reduce the video file size. The smaller file size allows the compressed video file to be transmitted to a user while reducing the associated bandwidth overhead. A decoder then decodes the compressed video file to reconstruct the original video signal for display to the end user. The decoding process generally mirrors the encoding process so that the decoder can consistently reconstruct the video signal.

[0046] In step 101, a video signal is input to an encoder. For example, the video signal may be an uncompressed video file stored in memory. As another example, the video file may be captured by a video capture device such as a video camera and encoded to support live streaming of the video. The video file may include both an audio component and a video component. The video component includes a series of image frames that, when viewed in sequence, present a visual impression of movement. The frames include pixels represented in terms of light, referred to herein as luma components (or luma samples), and color, referred to herein as chroma components (or color samples). In some examples, the frames may also include depth values ​​to support three-dimensional viewing.

[0047] In step 103, the video is divided into blocks. Partitioning involves subdividing pixels in each frame into square and / or rectangular blocks for compression. For example, in High Efficiency Video Coding (HEVC) (also known as H.265 and MPEG-H Part 2), a frame may first be divided into coding tree units (CTUs), which are blocks of a predefined size (e.g., 64 pixels by 64 pixels). CTUs contain both luma and chroma samples. A coding tree may be utilized to divide the CTUs into blocks, which may then be recursively subdivided until a configuration that supports further encoding is achieved. For example, the luma component of a frame may be subdivided until each block contains relatively homogeneous illumination values. Furthermore, the chroma component of a frame may be subdivided until each block contains relatively homogeneous color values. Accordingly, the partitioning scheme varies depending on the content of the video frame.

[0048] In step 105, various compression mechanisms are utilized to compress the image blocks partitioned in step 103. For example, inter-prediction and / or intra-prediction may be utilized. Inter-prediction is designed to utilize the fact that objects in a common scene tend to appear in consecutive frames. Accordingly, blocks depicting an object in a reference frame need not be repeatedly represented in adjacent frames. Specifically, an object such as a table may remain in a constant position across multiple frames. Thus, once the table is represented once, adjacent frames may be referenced back to the reference frame. A pattern matching mechanism may be utilized to match objects across multiple frames. Furthermore, a moving object may be represented across multiple frames, e.g., due to object motion or camera motion. As a specific example, a video may show a car moving across the screen across multiple frames. A motion vector may be utilized to represent such motion. A motion vector is a two-dimensional vector that provides the offset of the object's coordinates in the reference frame from the object's coordinates in the frame. Thus, inter prediction may encode an image block in a current frame as a set of motion vectors that indicate its offset from a corresponding block in a reference frame.

[0049] Intra prediction encodes blocks within a common frame. Intra prediction exploits the fact that luma and chroma components tend to cluster within a frame. For example, a green patch in a tree tends to be positioned adjacent to a similar patch of green. Intra prediction utilizes multiple directional prediction modes (e.g., 33 in HEVC), planar mode, and direct current (DC) mode. Directional mode indicates that the current block is similar / the same as samples of neighboring blocks in the corresponding direction. Planar mode indicates that a series of blocks along a row / column (e.g., a plane) can be interpolated based on neighboring blocks at the row edges. Planar mode essentially indicates a smooth transition of light / color across a row / column by utilizing a relatively constant slope in changing values. DC mode is used for boundary smoothing and indicates that the block is similar / the same as the average value associated with samples of all neighboring blocks associated with the angular direction of the directional prediction mode. Accordingly, intra prediction blocks may represent image blocks as various correlated prediction mode values ​​instead of their actual values. Furthermore, inter-predicted blocks may represent image blocks as motion vector values ​​instead of actual values. In either case, the predicted blocks may not accurately represent the image blocks in some cases. Any differences are stored in residual blocks. To further compress the file, a transform may be applied to the residual blocks.

[0050] Various filtering techniques may be applied in stage 107. In HEVC, filters are applied according to an in-loop filtering scheme. The block-based prediction discussed above may result in a blocky image at the decoder. Furthermore, the block-based prediction scheme may encode a block and then reconstruct the encoded block for later use as a reference block. The in-loop filtering scheme iteratively applies a noise suppression filter, a deblocking filter, an adaptive loop filter, and a sample adaptive offset (SAO) filter to a block / frame. These filters mitigate such blocking artifacts so that the encoded file can be accurately reconstructed. Furthermore, these filters mitigate artifacts on the reconstructed reference block so that the artifacts are less likely to create additional artifacts in subsequent blocks coded based on the reconstructed reference block.

[0051] Once the video signal has been segmented, compressed, and filtered, the resulting data is encoded into a bitstream at step 109. The bitstream includes the data discussed above as well as any signaling data desired to support correct video signal reconstruction at the decoder. For example, such data may include segmentation data, prediction data, residual blocks, and various flags that provide coding instructions to the decoder. The bitstream may be stored in memory for transmission to the decoder upon request. The bitstream may also be broadcast and / or multicast to multiple decoders. Generating the bitstream is an iterative process. Accordingly, steps 101, 103, 105, 107, and 109 may occur sequentially and / or simultaneously across many frames and blocks. The order shown in FIG. 1 is for clarity and ease of discussion and is not intended to limit the video coding process to any particular order.

[0052] The decoder receives the bitstream and begins the decoding process at step 111. Specifically, the decoder utilizes an entropy decoding scheme to convert the bitstream into corresponding syntax and video data. In step 111, the decoder utilizes syntax data from the bitstream to determine a frame-wise partitioning. The partitioning should match the results of the block partitioning in step 103. Entropy encoding / decoding as utilized in step 111 is now described. During the compression process, the encoder makes many choices from several possible choices based on the spatial location of values ​​in the input image, such as selecting a block partitioning scheme. Signaling the exact selection may utilize multiple bins. As used herein, a bin is a binary value treated as a variable (e.g., a bit value that can change depending on the context). Entropy coding allows the encoder to discard any options that are clearly not feasible in a particular case, leaving a set of acceptable options. Each acceptable option is then assigned a codeword. The length of the codeword is based on the number of allowable choices (e.g., one bin for two choices, two bins for three to four choices, etc.). The encoder then encodes a codeword for the selected choice. This scheme reduces the size of the codeword because the codeword is only as large as desired to uniquely indicate a choice from a small subset of allowable choices, as opposed to uniquely indicating a choice from a large possible set of all possible choices. The decoder then decodes the choices by determining the set of allowable choices in a similar manner as the encoder. By determining the set of allowable choices, the decoder can read the codeword and determine the choices made by the encoder.

[0053] In step 113, the decoder performs block decoding. Specifically, the decoder uses an inverse transform to generate a residual block. Then, the decoder uses the residual block and a corresponding predictive block to reconstruct an image block according to the partitioning. The predictive block may include both intra-predicted blocks and inter-predicted blocks as generated in the encoder in step 105. The reconstructed image block is then positioned in a frame of the reconstructed video signal according to the partitioning data determined in step 111. The syntax for step 113 may also be signaled in the bitstream via entropy coding as discussed above.

[0054] In step 115, filters are performed on the frames of the reconstructed video signal in a manner similar to step 107 in the encoder. For example, noise suppression filters, deblocking filters, adaptive loop filters, and SAO filters may be applied to the frames to remove block artifacts. Once the frames have been filtered, the video signal may be output to a display in step 117 for viewing by an end user.

[0055] 2 is a schematic diagram of an exemplary coding and decoding (codec) system 200 for video coding. Specifically, codec system 200 provides functionality supporting implementation of operational method 100. Codec system 200 is generalized to depict components utilized in both an encoder and a decoder. Codec system 200 receives and splits a video signal, as discussed with reference to steps 101 and 103 in operational method 100, which results in split video signal 201. When acting as an encoder, codec system 200 then compresses split video signal 201 into a coded bitstream, as discussed with reference to steps 105, 107, and 109 in method 100. When acting as a decoder, codec system 200 generates an output video signal from the bitstream, as discussed with reference to steps 111, 113, 115, and 117 in operational method 100. Codec system 200 includes a general coder control component 211, a transform scaling and quantization component 213, an intra-picture estimation component 215, an intra-picture prediction component 217, a motion compensation component 219, a motion estimation component 221, a scaling and inverse transform component 229, a filter control analysis component 227, an in-loop filter component 225, a decoded picture buffer component 223, and a header format and context-adaptive binary arithmetic coding (CABAC) component 231. Such components are coupled as shown. In FIG. 2, black lines indicate the movement of data to be coded / decoded, and dashed lines indicate the movement of control data that controls the operation of other components. The components of codec system 200 may all be present in an encoder. A decoder may include a subset of the components of codec system 200.For example, the decoder may include an intra-picture prediction component 217, a motion compensation component 219, a scaling and inverse transform component 229, an in-loop filter component 225, and a decoded picture buffer component 223. These components are now described.

[0056] The segmented video signal 201 is a captured video sequence that has been segmented into blocks of pixels by a coding tree. The coding tree utilizes various split modes to subdivide the blocks of pixels into smaller blocks of pixels. These blocks may then be further subdivided into smaller blocks. The blocks may be referred to as nodes on the coding tree. Larger parent nodes are segmented into smaller child nodes. The number of times a node is segmented is referred to as the depth of the node / coding tree. The segmented blocks may, in some cases, be included in a coding unit (CU). For example, a CU may be a subpart of a CTU that includes a luma block, a red-difference chroma (Cr) block, and a blue-difference chroma (Cb) block, following the corresponding syntax instructions for the CU. Split modes may include a binary tree (BT), a ternary tree (TT), and a quad tree (QT), which are utilized to segment a node into two, three, or four child nodes, respectively, and they take various shapes depending on the split mode utilized. The segmented video signal 201 is forwarded to a general coder control component 211, a transform scaling and quantization component 213, an intra-picture estimation component 215, a filter control analysis component 227, and a motion estimation component 221 for compression.

[0057] The generic coder control component 211 is configured to make decisions regarding coding images of a video sequence into a bitstream according to application constraints. For example, the generic coder control component 211 manages the optimization of bitrate / bitstream size versus reconstruction quality. Such decisions can be made based on storage space / bandwidth availability and image resolution requirements. The generic coder control component 211 also manages buffer utilization in light of transmission rate to mitigate buffer underrun and overrun issues. To manage these issues, the generic coder control component 211 manages segmentation, prediction, and filtering by other components. For example, the generic coder control component 211 may dynamically increase compression complexity to increase resolution and bandwidth usage, or decrease compression complexity to decrease resolution and bandwidth usage. Thus, the generic coder control component 211 controls other components of the codec system 200 to balance video signal reconstruction quality and bitrate related considerations. The generic coder control component 211 generates control data, which controls the operation of other components. Control data is also forwarded to the CABAC component 231 in a header format that is encoded into the bitstream to signal parameters for decoding at the decoder.

[0058] The segmented video signal 201 is also transmitted to a motion estimation component 221 and a motion compensation component 219 for inter-prediction. A frame or slice of the segmented video signal 201 may be divided into multiple video blocks. The motion estimation component 221 and the motion compensation component 219 perform inter-predictive coding of the received video blocks by comparing them to one or more blocks in one or more reference frames to provide temporal prediction. The codec system 200 may perform multiple coding passes to, for example, select an appropriate coding mode for each block of video data.

[0059] The motion estimation component 221 and the motion compensation component 219 may be highly integrated but are shown separately for conceptual illustration purposes. Motion estimation, performed by the motion estimation component 221, is a process that generates motion vectors that estimate the movement of video blocks. A motion vector may indicate, for example, the displacement of a coded object compared to a predictive block. A predictive block is a block that is found to be a close match to a coded block in terms of pixel differences. A predictive block may also be referred to as a reference block. Such pixel differences may be determined by sum of absolute differences (SAD), sum of squared differences (SSD), or other difference metrics. HEVC utilizes several coded objects, including CTUs, coding tree blocks (CTBs), and CUs. For example, a CTU may be divided into CTBs, which may then be divided into CBs for inclusion in a CU. A CU may be coded as a prediction unit (PU), which contains prediction data, and / or a transform unit (TU), which contains transformed residual data for the CU. The motion estimation component 221 uses rate-distortion analysis as part of a rate-distortion optimization process to generate motion vectors, PUs, and TUs. For example, motion estimation component 221 may determine multiple reference blocks, multiple motion vectors, etc. for the current block / frame and may select the reference block, motion vector, etc. with the best rate-distortion performance, which balances both the quality of the video reconstruction (e.g., the amount of data lost due to compression) and the coding efficiency (e.g., the size of the final encoding).

[0060] In some examples, the codec system 200 may calculate values ​​for sub-integer pixel positions of reference pictures stored in the decoded picture buffer component 223. For example, the video codec system 200 may interpolate values ​​for quarter-pixel positions, eighth-pixel positions, or other fractional pixel positions of the reference pictures. Accordingly, the motion estimation component 221 may perform motion searches for full-pixel and fractional pixel positions and output motion vectors with fractional pixel precision. The motion estimation component 221 calculates motion vectors for PUs of video blocks in inter-coding slices by comparing the positions of the PUs with the positions of predictive blocks in the reference pictures. The motion estimation component 221 outputs the calculated motion vectors as motion data to the header format and CABAC component 231 for motion encoding and motion compensation component 219.

[0061] The motion compensation performed by motion compensation component 219 may require fetching or generating a predictive block based on a motion vector determined by motion estimation component 221. Again, motion estimation component 221 and motion compensation component 219 may be functionally integrated in some examples. Upon receiving the motion vector for the PU of the current video block, motion compensation component 219 may locate the predictive block indicated by the motion vector. A residual video block is then formed by subtracting pixel values ​​of the predictive block from pixel values ​​of the coded current video block to form pixel difference values. Typically, motion estimation component 221 performs motion estimation on the luma component, and motion compensation component 219 uses the motion vector calculated based on the luma component for both the chroma and luma components. The predictive block and residual block are forwarded to transform scaling and quantization component 213.

[0062] The split video signal 201 is also sent to an intra-picture estimation component 215 and an intra-picture prediction component 217. Like the motion estimation component 221 and the motion compensation component 219, the intra-picture estimation component 215 and the intra-picture prediction component 217 may be highly integrated but are shown separately for conceptual purposes. As described above, as an alternative to inter-prediction performed by the inter-frame motion estimation component 221 and the motion compensation component 219, the intra-picture estimation component 215 and the intra-picture prediction component 217 intra-predict the current block relative to blocks in the current frame. In particular, the intra-picture estimation component 215 determines an intra-prediction mode to use to encode the current block. In some examples, the intra-picture estimation component 215 selects an appropriate intra-prediction mode from multiple tested intra-prediction modes to encode the current block. The selected intra-prediction mode is then forwarded to the header format and CABAC component 231 for encoding.

[0063] For example, the intra picture estimation component 215 may use a rate-distortion analysis to calculate rate-distortion values ​​for various tested intra prediction modes and select the intra prediction mode with the best rate-distortion characteristics among the tested modes. The rate-distortion analysis generally determines the amount of distortion (or error) between an encoded block and the original pre-encoded block that was encoded to produce the encoded block, and the bit rate (e.g., number of bits) used to produce the encoded block. The intra picture estimation component 215 may calculate a ratio from the distortion and rate of the various encoded blocks and determine which intra prediction mode exhibits the best rate-distortion value for the block. Furthermore, the intra picture estimation component 215 may be configured to code depth blocks of a depth map using a depth modeling mode (DMM) based on rate-distortion optimization (RDO).

[0064] The intra-picture prediction component 217, when implemented on an encoder, may generate a residual block from the prediction block based on a selected intra-prediction mode determined by the intra-picture estimation component 215, or, when implemented on a decoder, may read the residual block from the bitstream. The residual block contains the value differences between the prediction block and the original block, represented as a matrix. The residual block is then forwarded to the transform scaling and quantization component 213. The intra-picture estimation component 215 and the intra-picture prediction component 217 may operate on both the luma and chroma components.

[0065] The transform scaling and quantization component 213 is configured to further compress the residual block. The transform scaling and quantization component 213 applies a transform, such as a discrete cosine transform (DCT), a discrete sine transform (DST), or a conceptually similar transform, to the residual block to produce a video block containing residual transform coefficient values. A wavelet transform, an integer transform, a subband transform, or other types of transforms may also be used. This transform may convert the residual information from the pixel value domain to a transform domain, such as the frequency domain. The transform scaling and quantization component 213 is also configured to scale the transformed residual information, for example, based on frequency. Such scaling may include applying a scale factor to the residual information so as to quantize different frequency information with different granularity, which may affect the final visual quality of the reconstructed video. The transform scaling and quantization component 213 is also configured to quantize the transform coefficients to further reduce the bit rate. The quantization process may reduce the bit depth associated with some or all of the coefficients. The degree of quantization may be modified by adjusting a quantization parameter. In some examples, the transform scaling and quantization component 213 may then perform a scan of a matrix containing the quantized transform coefficients, which are forwarded to the header format and CABAC component 231 to be encoded in the bitstream.

[0066] The scaling and inverse transform component 229 applies the inverse operations of the transform scaling and quantization component 213 to support motion estimation. The scaling and inverse transform component 229 applies, for example, inverse scaling, transform, and / or quantization to reconstruct a residual block in the pixel domain for later use as a reference block that can become a predictive block for another current block. The motion estimation component 221 and / or motion compensation component 219 may calculate a reference block by adding the residual block back to the corresponding predictive block to use motion estimation of a later block / frame. A filter is applied to the reconstructed reference block to mitigate artifacts generated during scaling, quantization, and transform. Otherwise, such artifacts would cause inaccurate predictions (and generate additional artifacts) when subsequent blocks are predicted.

[0067] The filter control analysis component 227 and the in-loop filter component 225 apply filters to residual blocks and / or reconstructed image blocks. For example, a transformed residual block from the scaling and inverse transform component 229 may be combined with a corresponding prediction block from the intra-picture prediction component 217 and / or the motion compensation component 219 to reconstruct the original image block. The filter may then be applied to the reconstructed image block. In some examples, the filter may instead be applied to the residual block. Like the other components in FIG. 2, the filter control analysis component 227 and the in-loop filter component 225 are highly integrated and may be implemented together, but are depicted separately for conceptual purposes. The filter applied to the reconstructed reference block is applied to a specific spatial region and includes multiple parameters to adjust how such a filter is applied. The filter control analysis component 227 analyzes the reconstructed reference block to determine where such a filter should be applied and sets the corresponding parameters. Such data is forwarded as filter control data to the header format and CABAC component 231 for encoding. The in-loop filter component 225 applies such filters based on the filter control data. The filters may include deblocking filters, noise suppression filters, SAO filters, and adaptive loop filters. Such filters may be applied in the spatial / pixel domain (e.g., on reconstructed pixel blocks) or in the frequency domain, depending on the example.

[0068] When operating as an encoder, the filtered reconstructed image blocks, residual blocks, and / or predictive blocks are stored in the decoded picture buffer component 223 for later use in motion estimation, as discussed above. When operating as a decoder, the decoded picture buffer component 223 stores the reconstructed and filtered blocks and forwards them to a display as part of an output video signal. The decoded picture buffer component 223 may be any memory device capable of storing predictive blocks, residual blocks, and / or reconstructed image blocks.

[0069] The header format and CABAC component 231 receives data from various components of the codec system 200 and encodes such data into a coded bitstream for transmission to a decoder. Specifically, the header format and CABAC component 231 generates various headers to encode control data, such as global control data and filter control data. Additionally, prediction data, including intra-prediction and motion data, and residual data in the form of quantized transform coefficient data are all encoded in the bitstream. The final bitstream contains all information required by a decoder to reconstruct the original segmented video signal 201. Such information may also include an intra-prediction mode index table (also called a codeword mapping table), definitions of coding contexts for various blocks, an indication of the most likely intra-prediction mode, an indication of segmentation information, etc. Such data may be encoded using entropy coding. For example, the information may be coded using context-adaptive variable length coding (CAVLC), CABAC, syntax-based context-adaptive binary arithmetic coding (SBAC), probability interval partitioning entropy (PIPE) coding, or another entropy coding technique. Following entropy coding, the coded bitstream may be transmitted to another device (e.g., a video decoder) or archived for later transmission or retrieval.

[0070] 3 is a block diagram illustrating an example video encoder 300. Video encoder 300 may be utilized to implement the encoding functionality of codec system 200 and / or to implement steps 101, 103, 105, 107, and / or 109 of method of operation 100. Encoder 300 segments an input video signal, resulting in segmented video signal 301, which is substantially similar to segmented video signal 201. Segmented video signal 301 is then compressed and encoded into a bitstream by components of encoder 300.

[0071] Specifically, the segmented video signal 301 is forwarded to an intra-picture prediction component 317 for intra prediction. The intra-picture prediction component 317 may be substantially similar to the intra-picture estimation component 215 and the intra-picture prediction component 217. The segmented video signal 301 is also forwarded to a motion compensation component 321 for inter prediction based on reference blocks in a decoded picture buffer component 323. The motion compensation component 321 may be substantially similar to the motion estimation component 221 and the motion compensation component 219. The prediction blocks and residual blocks from the intra-picture prediction component 317 and the motion compensation component 321 are forwarded to a transform and quantization component 313 for transforming and quantizing the residual blocks. The transform and quantization component 313 may be substantially similar to the transform scaling and quantization component 213. The transformed and quantized residual blocks and the corresponding prediction blocks (together with associated control data) are forwarded to an entropy coding component 331 for coding into a bitstream. The entropy coding component 331 may be substantially similar to the header format and CABAC component 231 .

[0072] The transformed and quantized residual block, and / or the corresponding prediction block, are also transferred from the transform and quantization component 313 to the inverse transform and quantization component 329 for reconstruction into a reference block for use by the motion compensation component 321. The inverse transform and quantization component 329 may be substantially similar to the scaling and inverse transform component 229. An in-loop filter in the in-loop filter component 325 is also applied to the residual block and / or the reconstructed reference block, depending on the example. The in-loop filter component 325 may be substantially similar to the filter control analysis component 227 and the in-loop filter component 225. The in-loop filter component 325 may include multiple filters, as discussed with respect to the in-loop filter component 225. The filtered block is then stored in the decoded picture buffer component 323 for use as a reference block by the motion compensation component 321. The decoded picture buffer component 323 may be substantially similar to the decoded picture buffer component 223.

[0073] 4 is a block diagram illustrating an exemplary video decoder 400. Video decoder 400 may be utilized to implement the decoding functionality of codec system 200 and / or to implement stages 111, 113, 115, and / or 117 of method of operation 100. Decoder 400 receives a bitstream, for example, from encoder 300, and generates a reconstructed output video signal based on the bitstream for display to an end user.

[0074] The bitstream is received by the entropy decoding component 433. The entropy decoding component 433 is configured to implement an entropy decoding scheme, such as CAVLC, CABAC, SBAC, PIPE coding, or other entropy coding techniques. For example, the entropy decoding component 433 may utilize header information to provide context for interpreting additional encoded data as codewords in the bitstream. The decoded information includes any desired information for decoding the video signal, such as global control data, filter control data, partitioning information, motion data, prediction data, and quantized transform coefficients from residual blocks. The quantized transform coefficients are forwarded to the inverse transform and quantization component 429 to be reconstructed into residual blocks. The inverse transform and quantization component 429 may be similar to the inverse transform and quantization component 329.

[0075] The reconstructed residual block and / or predictive block are forwarded to the intra-picture prediction component 417 for reconstruction into an image block based on an intra-prediction operation. The intra-picture prediction component 417 may be similar to the intra-picture estimation component 215 and the intra-picture prediction component 217. Specifically, the intra-picture prediction component 417 uses a prediction mode to locate a reference block in a frame and applies the result to the residual block to reconstruct an intra-predicted image block. The reconstructed intra-predicted image block and / or residual block, and the corresponding inter-prediction data, are forwarded to the decoded picture buffer component 423 via an in-loop filter component 425, which may be substantially similar to the decoded picture buffer component 223 and the in-loop filter component 225, respectively. The in-loop filter component 425 filters the reconstructed image block, residual block, and / or predictive block, and such information is stored in the decoded picture buffer component 423. The reconstructed image blocks from the decoded picture buffer component 423 are forwarded to the motion compensation component 421 for inter-prediction. The motion compensation component 421 may be substantially similar to the motion estimation component 221 and / or the motion compensation component 219. Specifically, the motion compensation component 421 utilizes motion vectors from reference blocks to generate prediction blocks and applies a residual block to the result to reconstruct image blocks. The resulting reconstructed blocks may also be forwarded to the decoded picture buffer component 423 via an in-loop filter component 425. The decoded picture buffer component 423 continues to store additional reconstructed image blocks, which may be reconstructed into frames according to the partitioning information. Such frames may also be arranged in a sequence. The sequence is output to a display as a reconstructed output video signal.

[0076] 5 is a schematic diagram illustrating an example bitstream 500 including an ALF APS with parameter constraints. For example, bitstream 500 may be generated by codec system 200 and / or encoder 300 for decoding by codec system 200 and / or decoder 400. As another example, bitstream 500 may be generated by an encoder at stage 109 of method 100 for use by a decoder at stage 111.

[0077] The bitstream 500 includes a sequence parameter set (SPS) 510, an ALF APS 513, multiple picture parameter sets (PPSs) 511, multiple slice headers 515, and image data 520. The SPS 510 includes sequence data common to all pictures 521 in a video sequence included in the bitstream 500. Such data may include picture size, bit depth, coding tool parameters, bit rate limits, etc. The PPS 511 includes parameters that apply to the entire picture 521. Thus, each picture 521 in the video sequence may reference the PPS 511. Note that while each picture 521 references the PPS 511, a single PPS 511 may include data for multiple pictures 521 in some instances. For example, multiple similar pictures 521 may be coded according to similar parameters. In such a case, a single PPS 511 may include data for such similar pictures 521. The PPS 511 may indicate coding tools, quantization parameters, offsets, etc. available for a slice 523 in the corresponding picture 521. The slice header 515 includes parameters specific to each slice 523 in the picture 521. Thus, there may be one slice header 515 per slice 523 in a video sequence. The slice header 515 may include slice type information, a picture order count (POC), a reference picture list, prediction weights, tile entry points, deblocking parameters, etc. Note that the slice header 515 may also be referred to as a tile group header in some contexts. Additionally, the slice header 515 may reference the SPS 510, the PPS 511, and / or the ALF APS 513 for parameters used to code the corresponding slice 523.

[0078] The image data 520 includes video data coded according to inter-prediction and / or intra-prediction, as well as corresponding transformed and quantized residual data. For example, a video sequence includes multiple pictures 521 coded as image data. A picture 521 may be defined as an array of luma samples and / or chroma samples that make up a frame or a field thereof. A picture 521 is generally a single frame of a video sequence and, therefore, is generally displayed as a single unit when displaying a video sequence. However, partial pictures 521 may be displayed to implement certain technologies, such as virtual reality and picture-in-picture. Furthermore, some technologies may utilize multiple layers of the coded picture 521. In this case, a single picture 521 selected from one of the multiple layers is displayed at a given time. The pictures 521 may be identified by a corresponding POC. Furthermore, each picture 521 references a PPS 511.

[0079] A picture 521 is divided into slices 523. In some systems, slices 523 are further divided into tiles. In other systems, slices 523 are referred to as tile groups, which contain tiles. Slices 523 and / or tiles are further divided into coding tree units (CTUs). CTUs are further divided into coding blocks based on a coding tree. The coding blocks may then be encoded / decoded according to a prediction mechanism. A slice 523 may be a raster slice or a rectangular slice. For example, a picture 521 may be divided into columns and rows of CTUs. A raster slice 523 includes a group of CTUs from the picture 521, while the CTUs increase in raster scan order. The raster scan order increases from left to right along rows of CTUs and from top to bottom along columns of CTUs. A rectangular slice 523 may include any rectangular group of CTUs from the picture 521. Thus, a slice 523 may be defined as an integer number of complete tiles or an integer number of consecutive complete CTU rows within a tile of a picture that are contained exclusively in a single NAL unit. A NAL unit is a data unit of a size transmitted in a packet that contains data of a type and an indicated type. A slice 523 and / or a tile group of tiles references a slice header 515.

[0080] An APS is a syntax structure that includes syntax elements / parameters to apply to one or more slices 523 in one or more pictures 521. For example, an APS may apply to at least one but less than all slices 523 in a first picture 521, at least one but less than all slices 523 in a second picture 521, etc. An APS may be divided into multiple types based on the parameters included in the APS. An ALF APS 513 is an APS of type ALF that includes ALF parameters. An ALF is an adaptive block-based filter that includes a transfer function controlled by variable parameters and utilizes feedback from a feedback loop to refine the transfer function. Furthermore, an ALF is utilized to correct coding artifacts (e.g., errors) that occur as a result of block-based coding. The feedback loop may include an optimization algorithm, such as PDO processing, that operates in the encoder. Thus, the ALF parameters included in an ALF APS 513 may include variable parameters selected by the encoder to cause the filter to remove block-based coding artifacts during decoding in the decoder.

[0081] Each APS, such as the ALF APS 513, includes an APS ID 542. The APS ID 542 is an arbitrary value, such as an integer, that uniquely identifies the corresponding APS. In some examples, the APS ID 542 may be denoted as adaptation_parameter_set_id. As described above, the ALF APS 513 also includes ALF parameters. The ALF parameters are syntax elements that include data related to controlling ALF processing. The ALF parameters may include an ALF luma filter signal flag 541, an ALF chroma filter signal flag 543, a luma filter set 545, and / or a chroma filter set 547.

[0082] Specifically, slice 523 includes luma samples, which are represented as intensity values, and saturation samples, which are represented as color values. Luma filter set 545 is a set of filter parameters for controlling the application of ALF to the luma component in slice 523. Chroma filter set 547 is a set of filter parameters for controlling the application of ALF to the chroma component in slice 523. ALF APS 513 may include luma filter set 545, chroma filter set 547, or both. For example, first ALF APS 513 may include both luma filter set 545 and chroma filter set 547. The luma component in the video may change. In this case, second ALF APS 513 may include only updated luma filter set 545. The chroma component in the video may then change. In this case, third ALF APS 513 may include only updated chroma filter set 547. Flags may be used to indicate the type of filter components included in ALF APS 513. The ALF luma filter signal flag 541 is an ALF parameter that indicates that the corresponding ALF APS 513 includes a luma filter set 545. The ALF luma filter signal flag 541 may be denoted as alf_luma_filter_signal_flag in some examples. The ALF chroma filter signal flag 543 is an ALF parameter that indicates that the corresponding ALF APS 513 includes a chroma filter set 547. The ALF chroma filter signal flag 543 may be denoted as alf_chroma_filter_signal_flag in some examples.

[0083] The slice header 515 may reference an ALF APS 513 that includes ALF parameters for the corresponding slice 523. For example, the slice header 515 may include a luma component ALF APS ID 549 and a chroma component ALF APS ID 548. The luma component ALF APS ID 549 is a syntax element in the slice header 515 that identifies the ALF APS 513 that includes the luma filter set 545 associated with the slice 523 associated with the slice header 515. The luma component ALF APS ID 549 may be denoted as slice_alf_aps_id_luma[i] in some examples, where i indicates the ith ALF APS 513, and i is any positive integer. The chroma component ALF APS ID 548 is a syntax element in the slice header 515 that identifies the ALF APS 513 that includes the chroma filter set 547 associated with the slice 523 associated with the slice header 515. The chroma component ALF APS ID 548 may be denoted as slice_alf_aps_id_chroma in some examples. For example, the luma component ALF APS ID 549 and the chroma component ALF APS ID 548 may reference the ALF APS 513 by utilizing the APS ID 542.

[0084] Bitstream 500 includes specific constraints to increase coding efficiency, reduce errors, and / or support device simplification. For example, ALF APS 513 may include luma filter set 545, chroma filter set 547, or both. However, ALF APS 513 should include at least one filter set. Thus, bitstream 500 includes a constraint that at least one of ALF luma filter signal flag 541 and ALF chroma filter signal flag 543 in a single ALF APS 513 be set to 1. This constraint ensures that an ALF APS 513 is not sent to a decoder without at least one filter set. This further allows the decoder to ignore the possibility that an ALF APS 513 does not include a filter set. This can simplify decoder design and instead allocate hardware resources to other tasks.

[0085] As another example, ALF APS 513 may be constrained such that when luma component ALF APS ID 549 indicates APS ID 542, the corresponding ALF APS 513 includes luma filter set 545. Furthermore, when this occurs, ALF luma filter signal flag 541 in the indicated ALF APS 513 is set to 1. This ensures that ALF APS 513 includes luma filter parameters used to decode slice 523 associated with slice header 515. Thus, the decoder may be simplified by ignoring the possibility that luma filter parameters may be improperly referenced by slice header 515.

[0086] As another example, ALF APS 513 may be constrained such that when chroma component ALF APS ID 548 indicates APS ID 542, the corresponding ALF APS 513 includes chroma filter set 547. Furthermore, when this occurs, ALF chroma filter signal flag 543 in the indicated ALF APS 513 is set to 1. This ensures that ALF APS 513 includes chroma filter parameters used to decode slice 523 associated with slice header 515. Thus, the decoder may be simplified by ignoring the possibility that chroma filter parameters may be improperly referenced by slice header 515.

[0087] These constraints may ensure that unnecessary ALF APS 513 signaling is avoided and that the ALF APS 513 includes the data necessary to filter the decoded slice 523. Such constraints may be implemented in an HRD at the encoder. The HRD may check the bitstream 500 for compliance to ensure that the ALF APS 513 includes at least one filter set and does not include an incorrect filter set to decode the corresponding slice 523. These constraints therefore allow the decoder to assume that such issues have not occurred in the bitstream 500. The decoder may therefore be simplified to avoid the need to check for and intelligently respond to such issues. The constraints thus prevent errors, increase coding efficiency, and / or reduce the complexity of the encoder and / or decoder. This example may therefore increase video coding system functionality while reducing the usage of network, memory, and / or processing resources in the encoder and / or decoder.

[0088]

[0033] Here, the aforementioned information will be explained in more detail later in this specification. In HEVC, Instantaneous Decoding Refresh (IDR), Broken Link Access (BLA), and Clean Random Access (CRA) pictures are Intra Random Access Point (IRAP) pictures. VVC utilizes IDR and CRA pictures as IRAP pictures. IRAP pictures are coded according to intra prediction and therefore are not coded with reference to another picture. IRAP pictures provide the following functions / advantages: The presence of an IRAP picture indicates that the decoding process can start from that picture. This function supports a random access function that allows the decoding process to start at a position in the bitstream as long as an IRAP picture exists at that position. The position may not be the start of the bitstream. The presence of an IRAP picture may also refresh the decoding process. Thereby, coded pictures after the IRAP picture, except for Random Access Skip Leading (RASL) pictures, are coded without any reference to any picture preceding the IRAP picture. Thus, an IRAP picture prevents errors that occur before the IRAP picture from propagating to pictures that follow the IRAP picture in decoding order.

[0089] While IRAP pictures provide the above functionality, they incur a penalty to compression efficiency. The presence of IRAP pictures also results in a sudden increase in bitrate. This penalty to compression efficiency has two causes. First, IRAP pictures are intra-predicted pictures, and therefore, IRAP pictures are represented by more bits than inter-predicted pictures. Second, the presence of IRAP pictures can disrupt temporal prediction by refreshing the decoding process when reference pictures are removed from the DPB. This can result in less efficient coding of pictures following the IRAP picture, as fewer reference pictures are available for inter-prediction.

[0090] IDR pictures in HEVC may be derived and signaled differently from other picture types. Some of the differences are as follows: When signaling and deriving the POC value for an IDR picture, the most significant bit (MSB) of the POC may be set equal to 0 instead of being derived from the previous key picture. Furthermore, the slice header of an IDR picture may not contain information that aids reference picture management. For other picture types, such as CRA and trailing, a reference picture set (RPS) or reference picture list may be used in the reference picture marking process. This process is used to determine the status of a reference picture in the DPB as either used for reference or unused for reference. For IDR pictures, such information may not be signaled because the presence of IDR indicates that the decoding process needs to mark all reference pictures in the DPB as unused for reference.

[0091] A leading picture, when present, is associated with an IRAP picture. A leading picture is a picture that follows the associated IRAP picture in decoding order but precedes the IRAP picture in presentation / output order. Depending on the coding configuration and picture reference structure, leading pictures are further distinguished into two types. The first type is a leading picture that may not be correctly decoded when the decoding process starts at the associated IRAP picture. Such a picture is known as a RASL picture. The RASL picture may not be decodable in this case because it is coded with reference to a picture preceding the IRAP picture in decoding order. The second type is a leading picture that can be correctly decoded even when the decoding process starts at the associated IRAP picture. These pictures are known as random-access decodable leading (RADL) pictures. RADL pictures can be decoded because they are coded without directly or indirectly referencing a picture preceding the IRAP picture in decoding order. The HEVC system utilizes a constraint such that when a RASL and a RADL picture are associated with the same IRAP picture, the RASL picture must precede the RADL picture in output order.

[0092] IRAP pictures and leading pictures are assigned different NAL unit types to support identification by system-level applications. For example, a video splicer may be configured to determine the coded picture type without examining detailed syntax elements in the coded bitstream. For example, the video splicer may identify IRAP pictures from non-IRAP pictures and leading pictures from trailing pictures (including determining RASL and RADL pictures). A trailing picture is a picture associated with an IRAP picture that follows the IRAP picture in output order. A picture is associated with a particular IRAP picture when it follows the IRAP picture in decoding order and precedes any other IRAP picture in decoding order. Therefore, assigning different NAL unit types to IRAP and leading pictures supports such applications.

[0093] A VVC system may utilize APS, which is a syntax element containing parameters and / or data that may be referenced by one or more slices. Parameters included in an APS may be shared between slices in one or more pictures. APS parameters may be updated more frequently than PPS and / or SPS parameters.

[0094] The following table describes an example APS syntax. An APS may include parameters for ALF, luma mapping with chroma scaling (LMCS), and a scaling list. Each APS may include only one type of parameter, specified by aps_params_type. An APS that includes one or more ALF parameters, LMCS parameters, or scaling list parameters may be referred to as an ALF APS, an LMCS APS, or a scaling APS, respectively. [Table 1]

[0095] The following table describes an example ALF parameter syntax as alf_data(). The ALF parameters can be parameters used for only the luma component, only the chroma component, or both the luma and chroma components, depending on the example. The presence of parameters for the luma and chroma components is specified by alf_luma_filter_signal_flag and alf_chroma_filter_signal_flag. [Table 2] [Table 3]

[0096] When ALF is enabled for a slice, the slice references one or more APSs that contain the ALF parameters used to apply ALF to the slice. A slice may reference one or more ALF APSs for luma components and up to one ALF APS for chroma components. The following table contains example slice header syntax that describes signaling references to ALF APSs. [Table 4]

[0097] In an example, slice_alf_enabled_flag may be set equal to 1 to specify that the adaptive loop filter is enabled and may be applied to the luma (Y), blue-difference chroma (Cb), or red-difference chroma (Cr) color component in the slice. To specify that the adaptive loop filter is disabled for all color components in the slice, slice_alf_enabled_flag may be set equal to 0. slice_num_alf_aps_ids_luma may specify the number of ALF APSs that the slice references. The value of slice_num_alf_aps_ids_luma may range from 0 to 7 (inclusive). slice_alf_aps_id_luma[i] may specify the adaptation_parameter_set_id of the i-th ALF APS that the luma component of the slice references. The TemporalId of an APS NAL unit with aps_params_type equal to ALF_APS and adaptation_parameter_set_id equal to slice_alf_aps_id_luma[i] MUST be less than or equal to the TemporalId of the coded slice NAL unit. For intra slices and slices in an IRAP picture, slice_alf_aps_id_luma[i] may not refer to an ALF APS associated with a picture containing an intra slice or with another picture other than the IRAP picture. slice_alf_chroma_idc may be set equal to 0 to specify that an adaptive loop filter is not applied to the Cb and Cr color components. slice_alf_chroma_idc may be set equal to 1 to indicate that an adaptive loop filter is applied to the Cb color component. slice_alf_chroma_idc may be set equal to 2 to indicate that an adaptive loop filter is applied to the Cr color component. slice_alf_chroma_idc may be set equal to 3 to indicate that an adaptive loop filter is applied to the Cb and Cr color components. slice_alf_chroma_idc may be inferred to be equal to 0 when not present.slice_alf_aps_id_chroma specifies the adaptation_parameter_set_id of the ALF APS to which the chroma component of the slice refers. The TemporalId of an APS NAL unit with aps_params_type equal to ALF_APS and adaptation_parameter_set_id equal to slice_alf_aps_id_chroma MUST be less than or equal to the TemporalId of the coded slice NAL unit. For intra slices and slices in an IRAP picture, slice_alf_aps_id_chroma should not reference an ALF APS associated with a picture containing an intra slice or with a picture other than the IRAP picture.

[0098] The preceding exemplary implementation has certain problems. For example, the type of ALF parameters signaled in an APS is specified by two flags, denoted as alf_luma_filter_signal_flag and alf_chroma_filter_signal_flag. The values ​​of these two flags can result in the following four possibilities: both flags have a value of 0; alf_luma_filter_signal_flag is equal to 1 and alf_chroma_filter_signal_flag is equal to 0; alf_luma_filter_signal_flag is equal to 0 and alf_chroma_filter_signal_flag is equal to 1; and both flags have a value of 1. Among these four possibilities, when the values ​​of both flags are equal to 0, the signaling of the ALF APS is redundant. Furthermore, the ALF APS can be referenced by slice for parameters related to the luma component, for example, by using the syntax element slice_alf_aps_id_luma[i]. However, the ALF APS is not required to include ALF parameters for the luma component, for example, when the value of alf_luma_filter_signal_flag is equal to 0. The same issue can arise for the chroma component.

[0099] In general, this disclosure describes several constraints on how to signal ALF parameters in an APS. The ALF parameters may include parameters for luma and / or chroma components. The description of techniques used herein is based on the VVC standard but may also apply to other video codec specifications. An example mechanism for addressing the above-listed problems is as follows: A constraint may be utilized such that an ALF APS includes ALF parameters for at least one type of color component (e.g., luma or chroma). Furthermore, when an ALF APS is referenced by a slice for ALF parameters related to the luma component, a constraint may be applied such that the ALF APS includes ALF parameters for the luma component. In addition, when an ALF APS is referenced by a slice for ALF parameters related to the chroma component, a constraint may be applied such that the ALF APS includes ALF parameters for the chroma component.

[0100] Below is an example implementation. Example ALF data semantics are as follows: alf_luma_filter_signal_flag may be set equal to 1 to specify that the luma filter set is signaled. alf_luma_filter_signal_flag may be set equal to 0 to specify that the luma filter set is not signaled. alf_chroma_filter_signal_flag may be set equal to 1 to specify that the chroma filter is signaled. alf_chroma_filter_signal_flag may be set equal to 0 to specify that the chroma filter is not signaled. When ChromaArrayType is equal to 0, alf_chroma_filter_signal_flag should also be equal to 0. Bitstream conformance may require that the values ​​of alf_luma_filter_signal_flag and alf_chroma_filter_signal_flag should not both be equal to 0. The variable NumAlfFilters, which specifies the number of different adaptive loop filters, may be set equal to 25.

[0101] Exemplary slice header semantics are as follows: slice_alf_enabled_flag may be set equal to 1 to specify that the adaptive loop filter is enabled and may be applied to the Y, Cb, or Cr color components in the slice. slice_alf_enabled_flag may be set equal to 0 to specify that the adaptive loop filter is disabled for all color components in the slice. slice_num_alf_aps_ids_luma may specify the number of ALF APS referenced by the slice. The value of slice_num_alf_aps_ids_luma may range from 0 to 7 (inclusive). slice_alf_aps_id_luma[i] may specify the adaptation_parameter_set_id of the i-th ALF APS referenced by the luma component of the slice. The TemporalId of an APS NAL unit with aps_params_type equal to ALF_APS and adaptation_parameter_set_id equal to slice_alf_aps_id_luma[i] MUST be less than or equal to the TemporalId of the coded slice NAL unit. For intra slices and slices in an IRAP picture, slice_alf_aps_id_luma[i] MUST NOT reference any other picture that is not a picture containing an intra slice or an ALF APS associated with the IRAP picture. The value of alf_luma_filter_signal_flag of an APS NAL unit with aps_params_type equal to ALF_APS and adaptation_parameter_set_id equal to slice_alf_aps_id_luma[i] MUST be equal to 1.

[0102] slice_alf_chroma_idc may be set equal to 0 to specify that an adaptive loop filter is not applied to the Cb and Cr color components. slice_alf_chroma_idc may be set equal to 1 to indicate that an adaptive loop filter is applied to the Cb color component. slice_alf_chroma_idc may be set equal to 2 to indicate that an adaptive loop filter is applied to the Cr color component. slice_alf_chroma_idc may be set equal to 3 to indicate that an adaptive loop filter is applied to the Cb and Cr color components. slice_alf_chroma_idc may be inferred to be equal to 0 when not present. slice_alf_aps_id_chroma specifies the adaptation_parameter_set_id of the ALF APS to which the chroma component of the slice refers. The TemporalId of an APS NAL unit with aps_params_type equal to ALF_APS and adaptation_parameter_set_id equal to slice_alf_aps_id_chroma MUST be less than or equal to the TemporalId of the coded slice NAL unit. For intra slices and slices in an IRAP picture, slice_alf_aps_id_chroma MUST NOT reference an ALF APS associated with a picture containing an intra slice or any other picture that is not an IRAP picture. The values ​​of alf_chroma_filter_signal_flag of an APS NAL unit with aps_params_type equal to ALF_APS and adaptation_parameter_set_id equal to slice_alf_aps_id_chroma MUST be equal to 1.

[0103] FIG. 6 is a schematic diagram of an exemplary video coding device 600. The video coding device 600 is suitable for implementing the disclosed examples / embodiments as described herein. The video coding device 600 includes a downstream port 620, an upstream port 650, and / or a transceiver unit (Tx / Rx) 610 including a transmitter and / or a receiver to communicate data upstream and / or downstream over a network. The video coding device 600 also includes a processor 630 including a logic unit and / or a central processing unit (CPU) for processing data and a memory 632 for storing data. The video coding device 600 may also include electrical, optical / electrical (OE) components, electrical / optical (EO) components, and / or wireless communication components coupled to the upstream port 650 and / or the downstream port 620 for communication of data via an electrical, optical, or wireless communication network. The video coding device 600 may also include input and / or output (I / O) devices 660 for communicating data to and from a user. The I / O devices 660 may include output devices such as a display for displaying video data, speakers for outputting audio data, etc. The I / O devices 660 may also include input devices such as a keyboard, mouse, trackball, etc., and / or corresponding interfaces for interacting with such output devices.

[0104] The processor 630 is implemented by hardware and software. The processor 630 may be implemented as one or more CPU chips, cores (e.g., as a multi-core processor), field programmable gate arrays (FPGAs), application specific integrated circuits (ASICs), and digital signal processors (DSPs). The processor 630 may communicate with the downstream port 620, the Tx / Rx 610, the upstream port 650, and the memory 632. The processor 630 includes a coding module 614. The coding module 614 implements embodiments of the disclosure described herein, such as methods 100, 700, and 800, which may utilize the bitstream 500. The coding module 614 may also implement any other method / mechanism described herein. Furthermore, the coding module 614 may implement the codec system 200, the encoder 300, and / or the decoder 400. For example, the coding module 614 may encode slices of a picture into a bitstream. Further, the coding module 614 may determine ALF parameters to apply when filtering the slice. The coding module 614 may encode the ALF parameters into one or more ALF APSs. The coding module 614 may apply constraints to the ALF APSs. For example, the coding module 614 may ensure that each ALF APS includes a luma filter set, a chroma filter set, or both. Further, the coding module 614 may set an ALF luma filter signal flag and an ALF chroma filter signal flag for each ALF APS. Specifically, to ensure that each ALF APS includes at least one luma or chroma filter set, the coding module 614 may ensure that at least one of the ALF luma filter signal flag and the ALF chroma filter signal flag is equal to 1.Furthermore, coding module 614 can ensure that the ALF APS sets the ALF luma filter signal flag and / or the ALF chroma filter signal flag when the corresponding slice header points to an ALF APS for the luma filter set and / or the chroma filter set, respectively. Thus, coding module 614 allows video coding device 600 to provide additional functionality and / or coding efficiency when coding video data. Thus, coding module 614 improves the functionality of video coding device 600 and addresses problems specific to video coding techniques. Furthermore, coding module 614 has the effect of transforming video coding device 600 into a different state. Alternatively, coding module 614 may be implemented as instructions stored in memory 632 and executed by processor 630 (e.g., as a computer program product stored on a non-transitory medium).

[0105] Memory 632 includes one or more memory types such as a disk, a tape drive, a solid-state drive, a read-only memory (ROM), a random access memory (RAM), a flash memory, a ternary content addressable memory (TCAM), and a static random access memory (SRAM), etc. Memory 632 may be used as an overflow data storage device to store programs when such programs are selected for execution and to store instructions or data read during program execution.

[0106] 7 is a flowchart of an example method 700 for encoding a video sequence, such as bitstream 500, into a bitstream by utilizing ALF APS with constraints. Method 700 may be utilized by an encoder, such as codec system 200, encoder 300, and / or video coding device 600, when performing method 100.

[0107] Method 700 may begin when an encoder receives a video sequence including multiple pictures and determines, for example, based on user input, to encode the video sequence into a bitstream. At step 701, slices of pictures are encoded into the bitstream as part of the encoded video sequence. A slice may include a coded luma component, a coded chroma component, or a combination thereof.

[0108] In step 703, the decoder determines ALF parameters for application to the slice. For example, the decoder may decode an encoded slice and apply ALF parameters to the decoded slice. The encoder may then iteratively adjust the ALF parameters to produce the highest quality decoded slice while balancing coding efficiency constraints. This may be performed as part of PDO processing. The ALF parameters that result in the highest quality decoded slice may then be stored in the bitstream for encoding. The ALF parameters may include a luma filter set for application to the decoded luma samples, a chroma filter set for application to the decoded chroma samples, or both.

[0109] In step 705, the ALF parameters are encoded into an ALF APS in the bitstream. The ALF APS is encoded to include an ALF luma filter signal flag and an ALF chroma filter signal flag. In some examples, the ALF luma filter signal flag is indicated as alf_luma_filter_signal_flag. Furthermore, the alf_luma_filter_signal_flag specifies whether a luma filter set is signaled in the ALF APS. In some examples, the ALF chroma filter signal flag is indicated as alf_chroma_filter_signal_flag. Furthermore, the alf_chroma_filter_signal_flag specifies whether a chroma filter set is signaled in the ALF APS. The ALF APS is constrained so that at least one of the ALF luma filter signal flag and the ALF chroma filter signal flag is set equal to 1. This ensures that the ALF APS includes at least one filter set.

[0110] In step 707, a luma component ALF APS ID may be coded in a slice header associated with the slice. The luma component ALF APS ID indicates that the APS ID of the ALF APS includes a luma filter set for the slice corresponding to the slice header. Thus, when the luma component ALF APS ID in the slice header is equal to the APS ID of the ALF APS, the value of the ALF luma filter signal flag in the ALF APS in step 705 is constrained to be equal to 1. In some examples, the luma component ALF APS ID is denoted as slice_alf_aps_id_luma[i]. For example, slice_alf_aps_id_luma[i] may specify the APS ID (adaptation_parameter_set_id) of the i-th ALF APS referenced by the luma component of the slice.

[0111] In step 709, a chroma component ALF APS ID may be coded in a slice header associated with the slice. The chroma component ALF APS ID indicates that the APS ID of the ALF APS includes a chroma filter set for the slice corresponding to the slice header. Thus, when the chroma component ALF APS ID in the slice header is equal to the APS ID of the ALF APS, the value of the ALF chroma filter signal flag in the ALF APS of step 705 is constrained to be equal to 1. In some examples, the chroma component ALF APS ID is indicated as slice_alf_aps_id_chroma. For example, slice_alf_aps_id_chroma may specify the adaptation_parameter_set_id of the ALF APS referenced by the chroma component of the slice.

[0112] In step 711, the bitstream may be stored at the encoder for communication to a decoder.

[0113] 8 is a flowchart of an example method 800 for decoding a video sequence from a bitstream, such as bitstream 500, by utilizing ALF APS with constraints. Method 800 may be utilized by a decoder, such as codec system 200, decoder 400, and / or video coding device 600, when performing method 100.

[0114] Method 800 may begin when a decoder begins receiving a bitstream of coded data representing a video sequence, for example, as a result of method 700. At step 801, the decoder may receive the bitstream. The bitstream includes coded slices and associated slice headers. The slices may include coded luma components, coded chroma components, or a combination thereof. The bitstream also includes an ALF APS. The ALF APS includes ALF parameters. The ALF parameters may include a luma filter set for application to decoded luma samples, a chroma filter set for application to decoded chroma samples, or both. The ALF APS includes an ALF luma filter signal flag and an ALF chroma filter signal flag. In some examples, the ALF luma filter signal flag is indicated as alf_luma_filter_signal_flag. Furthermore, the alf_luma_filter_signal_flag specifies whether the luma filter set is signaled in the ALF APS. In some examples, the ALF chroma filter signal flag is indicated as alf_chroma_filter_signal_flag. Additionally, alf_chroma_filter_signal_flag specifies whether a chroma filter set is signaled in the ALF APS. The ALF APS is constrained such that at least one of the ALF luma filter signal flag or the ALF chroma filter signal flag is set equal to 1. This ensures that the ALF APS contains at least one filter set.

[0115] In step 803, the decoder may obtain a luma component ALF APS ID from a slice header associated with the slice. The luma component ALF APS ID indicates that the APS ID of the ALF APS includes a luma filter set for the slice corresponding to the slice header. Thus, when the luma component ALF APS ID in the slice header is equal to the APS ID of the ALF APS, the value of the ALF luma filter signal flag in the ALF APS of step 801 is constrained to be equal to 1. In some examples, the luma component ALF APS ID is denoted as slice_alf_aps_id_luma[i]. For example, slice_alf_aps_id_luma[i] may specify the adaptation_parameter_set_id of the i-th ALF APS referenced by the luma component of the slice. Thus, the decoder may obtain a luma filter set for the slice from the ALF APS based on the luma component ALF APS ID in the slice header.

[0116] In step 805, the decoder may obtain a chroma component ALF APS ID from a slice header associated with the slice. The chroma component ALF APS ID indicates that the APS ID of the ALF APS includes a chroma filter set for the slice corresponding to the slice header. Thus, when the chroma component ALF APS ID in the slice header is equal to the APS ID of the ALF APS, the value of the ALF chroma filter signal flag in the ALF APS of step 801 is constrained to be equal to 1. In some examples, the chroma component ALF APS ID is indicated as slice_alf_aps_id_chroma. For example, slice_alf_aps_id_chroma may specify the adaptation_parameter_set_id of the ALF APS referenced by the chroma component of the slice.

[0117] In stage 807, the decoder may decode the slice based on the ALF parameters in the ALF APS. For example, the decoder may obtain a luma filter set and / or a chroma filter set based on a flag in the slice header and / or the ALF APS. The decoder may then configure the ALF based on the luma filter set and / or the chroma filter set. Further, the decoder may decode the slice and apply the ALF parameters to the decoded slice to create a reconstructed slice as part of a reconstructed picture.

[0118] At step 809, the decoder may forward the slice for display as part of a decoded video sequence. For example, the decoder may include the slice with other slices to reconstruct a picture. The picture may then be ordered with other pictures to create the decoded video sequence. The picture may be forwarded for display to display the decoded video sequence to a user.

[0119] 9 is a schematic diagram of an example system 900 for coding a video sequence of images in a bitstream, such as bitstream 500, by utilizing ALF APS with constraints. System 900 may be implemented by an encoder and a decoder, such as codec system 200, encoder 300, decoder 400, and / or video coding device 600. Furthermore, system 900 may be utilized when implementing methods 100, 700, and / or 800.

[0120] The system 900 includes a video encoder 902. The video encoder 902 includes a slice encoding module 901 for encoding a slice into a bitstream as part of a coded video sequence. The video encoder 902 further includes a determination module 903 for determining ALF parameters for application to the slice. The video encoder 902 further includes an ALF encoding module 905 for encoding the ALF parameters in an ALF APS in the bitstream, the ALF APS including an ALF luma filter signal flag and an ALF chroma filter signal flag, where at least one of the ALF luma filter signal flag and the ALF chroma filter signal flag is constrained to be equal to 1. The video encoder 902 further includes a storage module 907 for storing the bitstream for communication to a decoder. The video encoder 902 further includes a transmission module 909 for transmitting the bitstream to support decoding of the slice at a decoder as part of a decoded video sequence. The video encoder 902 may be further configured to perform any of the steps of the method 700.

[0121] The system 900 also includes a video decoder 910. The video decoder 910 includes a receiving module 911 for receiving a bitstream including an ALF APS that includes an ALF luma filter signal flag and an ALF chroma filter signal flag, and in which at least one of the ALF luma filter signal flag and the ALF chroma filter signal flag is constrained to be equal to 1. The video decoder 910 further includes a decoding module 913 for decoding slices based on the ALF parameters in the ALF APS. The video decoder 910 further includes a transport module 915 for transporting the slices for display as part of the decoded video sequence. The video decoder 910 may be further configured to perform any of the steps of the method 800.

[0122] A first component is directly coupled to a second component when there are no intervening components, other than a line, trace, or other medium, between the first and second components. A first component is indirectly coupled to a second component when there are intervening components, other than a line, trace, or other medium, between the first and second components. The term "coupled" and variations thereof include both direct and indirect coupling. The use of the term "about" means covering a range that includes ±10% of the subsequent number, unless otherwise stated.

[0123] It should also be understood that the steps of the exemplary methods described herein do not necessarily have to be performed in the order described, and the order of steps of such methods should be understood as merely exemplary. Similarly, additional steps may be included in such methods, and certain steps may be omitted or combined in a manner consistent with various embodiments of the present disclosure.

[0124] While several embodiments have been provided in this disclosure, it will be understood that the disclosed systems and methods may be embodied in many other specific forms without departing from the spirit or scope of the disclosure. The examples should be considered illustrative rather than restrictive, and are not intended to be limiting to the details presented herein. For example, various elements or components may be combined or integrated in another system. Or, certain features may be omitted or not implemented.

[0125] Furthermore, techniques, systems, subsystems, and methods described or shown as separate or distinct in various embodiments may be combined or integrated with other systems, components, techniques, or methods without departing from the scope of the present disclosure. Other examples of changes, substitutions, and modifications may be ascertainable by those skilled in the art, and may be made without departing from the spirit and scope of the present disclosure. [Item 1] 1. A method implemented in a decoder, comprising: receiving, by a receiver of the decoder, a bitstream including an adaptive loop filter (ALF) adaptation parameter set (APS) including an ALF luma filter signal flag (alf_luma_filter_signal_flag) and an ALF chroma filter signal flag (alf_chroma_filter_signal_flag), wherein at least one of the alf_luma_filter_signal_flag or the alf_chroma_filter_signal_flag is equal to 1; decoding, by a processor of the decoder, the slice based on ALF parameters in the ALF APS; A method for providing the above. [Item 2] Item 2. The method according to item 1, wherein the alf_luma_filter_signal_flag specifies whether a luma filter set is signaled in the ALF APS. [Item 3] 3. The method of claim 1, wherein the value of the alf_luma_filter_signal_flag of an ALF APS is constrained to be equal to 1 when the luma component ALF APS identifier (ID) (slice_alf_aps_id_luma[i]) in the slice header associated with the slice is equal to the APS ID of the ALF APS. [Item 4] Item 4. The method according to item 3, wherein slice_alf_aps_id_luma[i] specifies the APS ID (adaptation_parameter_set_id) of the i-th ALF APS referenced by the luminance component of the slice. [Item 5] 5. The method of any one of items 1 to 4, wherein the alf_chroma_filter_signal_flag specifies whether a chroma filter set is signaled in the ALF APS. [Item 6] 6. A method according to any one of items 1 to 5, wherein when the chroma component ALF APS ID (slice_alf_aps_id_chroma) in the slice header associated with the slice is equal to the APS ID of the ALF APS, the value of the alf_chroma_filter_signal_flag of the ALF APS is constrained to be equal to 1. [Item 7] 7. The method of claim 6, wherein the slice_alf_aps_id_chroma specifies the adaptation_parameter_set_id of the ALF APS referenced by the chroma component of the slice. [Item 8] 1. A method implemented in an encoder, comprising: encoding, by a processor of the encoder, the slice into a bitstream as part of an encoded video sequence; determining, by the processor, adaptive loop filter (ALF) parameters for application to the slice; encoding, by the processor, the ALF parameters into an ALF adaptation parameter set (APS) in the bitstream, the ALF APS including an ALF luma filter signal flag (alf_luma_filter_signal_flag) and an ALF chroma filter signal flag (alf_chroma_filter_signal_flag), and at least one of the alf_luma_filter_signal_flag or the alf_chroma_filter_signal_flag is equal to 1; storing, by a memory coupled to the processor, the bitstream for communication to a decoder; A method for providing the above. [Item 9] Item 9. The method of item 8, wherein the alf_luma_filter_signal_flag specifies whether a luma filter set is signaled in the ALF APS. [Item 10] 10. The method of claim 8 or 9, wherein the value of the alf_luma_filter_signal_flag of the ALF APS is constrained to be equal to 1 when the luma component ALF APS identifier (ID) (slice_alf_aps_id_luma[i]) in the slice header associated with the slice is equal to the APS ID of the ALF APS. [Item 11] Item 11. The method according to item 10, wherein slice_alf_aps_id_luma[i] specifies the APS ID (adaptation_parameter_set_id) of the i-th ALF APS referenced by the luminance component of the slice. [Item 12] 12. The method of any one of items 8 to 11, wherein the alf_chroma_filter_signal_flag specifies whether a chroma filter set is signaled in the ALF APS. [Item 13] 13. A method according to any one of items 8 to 12, wherein the value of the alf_chroma_filter_signal_flag of the ALF APS is constrained to be equal to 1 when the chroma component ALF APS ID (slice_alf_aps_id_chroma) in the slice header associated with the slice is equal to the APS ID of the ALF APS. [Item 14] Item 14. The method of item 13, wherein the slice_alf_aps_id_chroma specifies the adaptation_parameter_set_id of the ALF APS referenced by the chroma component of the slice. [Item 15] 15. A video coding device comprising: a processor; a receiver coupled to the processor; a memory coupled to the processor; and a transmitter coupled to the processor, wherein the processor, the receiver, the memory, and the transmitter are configured to perform the method of any one of items 1 to 14. [Item 16] 15. A computer program for use by a video coding device, the computer program comprising computer-implementable instructions that, when executed by a processor, cause the video coding device to perform the method of any one of items 1 to 14. [Item 17] A decoder comprising: receiving means for receiving a bitstream including an adaptive loop filter (ALF) adaptation parameter set (APS) including an ALF luma filter signal flag (alf_luma_filter_signal_flag) and an ALF chroma filter signal flag (alf_chroma_filter_signal_flag), wherein at least one of the alf_luma_filter_signal_flag or the alf_chroma_filter_signal_flag is equal to 1; decoding means for decoding slices based on ALF parameters in the ALF APS; transfer means for transferring said slice for display as part of a decoded video sequence; A decoder comprising: [Item 18] Item 18. The decoder of item 17, wherein the decoder is further configured to perform the method of any one of items 1 to 7. [Item 19] 1. An encoder comprising: slice encoding means for encoding the slices into a bitstream as part of an encoded video sequence; determining means for determining adaptive loop filter (ALF) parameters for application to said slice; - ALF encoding means for encoding the ALF parameters into an ALF adaptation parameter set (APS) in the bitstream, the ALF APS including an ALF luma filter signal flag (alf_luma_filter_signal_flag) and an ALF chroma filter signal flag (alf_chroma_filter_signal_flag), and at least one of the alf_luma_filter_signal_flag or the alf_chroma_filter_signal_flag is equal to 1; storage means for storing said bitstream for communication to a decoder; An encoder comprising: [Item 20] 20. The encoder of claim 19, further configured to perform the method of any one of claims 8 to 14.

Claims

1. 1. A method implemented in a decoder, the method comprising: receiving a bitstream having an adaptive loop filter (ALF) adaptation parameter set (APS) including an ALF luma filter signal flag (alf_luma_filter_signal_flag) and an ALF chroma filter signal flag (alf_chroma_filter_signal_flag), wherein the alf_luma_filter_signal_flag specifies whether a luma filter set is signaled in the ALF APS, and the alf_chroma_filter_signal_flag specifies whether a chroma filter set is signaled in the ALF APS; The value of the alf_luma_filter_signal_flag of an APS Network Abstraction Layer (NAL) unit having aps_params_type equal to ALF_APS and adaptation_parameter_set_id equal to the adaptation_parameter_set_id of the i-th ALF APS referenced by the luma component of the slice is constrained to be equal to 1, and the alf_luma_filter_signal_flag of the APS Network Abstraction Layer (NAL) unit having aps_params_type equal to ALF_APS and adaptation_parameter_set_id equal to the adaptation_parameter_set_id of the ALF APS referenced by the luma component of the slice is constrained to be equal to 1. the value of the alf_chroma_filter_signal_flag of a NAL unit is constrained to be equal to 1; the bitstream further comprises a slice header corresponding to the slice; the slice header has a slice_alf_enabled_flag, where the slice_alf_enabled_flag equal to 1 specifies that the ALF is enabled for luma (Y), blue-difference chroma (Cb), or red-difference chroma (Cr) color component in the slice, and the slice_alf_enabled_flag equal to 0 specifies that the ALF is disabled for all color components in the slice; decoding the slice based on the ALF parameters in the ALF APS and the slice header; A method comprising:

2. 2. The method of claim 1, wherein the alf_luma_filter_signal_flag equal to 1 specifies that the luma filter set is signaled in the ALF APS, and the alf_luma_filter_signal_flag equal to 0 specifies that the luma filter set is not signaled in the ALF APS.

3. 3. The method of claim 1, wherein the alf_chroma_filter_signal_flag equal to 1 specifies that a chroma filter set is signaled in the ALF APS, and the alf_chroma_filter_signal_flag equal to 0 specifies that a chroma filter set is not signaled in the ALF APS.

4. The method of claim 1 , wherein the adaptation_parameter_set_id of the i ALF APS referenced by the luma component of the slice is represented by slice_alf_aps_id_luma[i].

5. The method of claim 1 , wherein the adaptation_parameter_set_id of the ALF APS referenced by the chroma component of the slice is represented by slice_alf_aps_id_chroma.

6. 1. A method implemented in an encoder, the method comprising: encoding the slice into a bitstream as part of an encoded video sequence; encoding an adaptive loop filter (ALF) adaptation parameter set (APS) into the bitstream, the ALF APS including an ALF luma filter signal flag (alf_luma_filter_signal_flag) and an ALF chroma filter signal flag (alf_chroma_filter_signal_flag), the alf_luma_filter_signal_flag specifying whether a luma filter set is signaled in the ALF APS, and the alf_chroma_filter_signal_flag specifying whether a chroma filter set is signaled in the ALF APS; The value of the alf_luma_filter_signal_flag of an APS Network Abstraction Layer (NAL) unit having aps_params_type equal to ALF_APS and adaptation_parameter_set_id equal to the adaptation_parameter_set_id of the i-th ALF APS referenced by the luma component of the slice is constrained to be equal to 1, and the value of the alf_luma_filter_signal_flag of an APS Network Abstraction Layer (NAL) unit having aps_params_type equal to ALF_APS and adaptation_parameter_set_id equal to the adaptation_parameter_set_id of the ALF APS referenced by the luma component of the slice is constrained to be equal to 1. the value of said alf_chroma_filter_signal_flag of a NAL unit is constrained to be equal to 1; encoding a slice header corresponding to the slice into the bitstream; Equipped with A method in which the slice header has a slice_alf_enabled_flag, where a slice_alf_enabled_flag equal to 1 specifies that the ALF is enabled for luma (Y), blue-difference chroma (Cb), or red-difference chroma (Cr) color component in the slice, and a slice_alf_enabled_flag equal to 0 specifies that the ALF is disabled for all color components in the slice.

7. 7. The method of claim 6, wherein the alf_luma_filter_signal_flag equal to 1 specifies that the luma filter set is signaled in the ALF APS, and the alf_luma_filter_signal_flag equal to 0 specifies that the luma filter set is not signaled in the ALF APS.

8. 8. The method of claim 6, wherein the alf_chroma_filter_signal_flag equal to 1 specifies that a chroma filter set is signaled in the ALF APS, and the alf_chroma_filter_signal_flag equal to 0 specifies that a chroma filter set is not signaled in the ALF APS.

9. The method of claim 6 , wherein the adaptation_parameter_set_id of the i ALF APS referenced by the luma component of the slice is represented by slice_alf_aps_id_luma[i].

10. The method of claim 6 , wherein the adaptation_parameter_set_id of the ALF APS referenced by the chroma component of the slice is represented by slice_alf_aps_id_chroma.

11. A video decoding device comprising a processor and a memory coupled to the processor, the processor configured to perform the method of any one of claims 1 to 5.

12. A video encoding device comprising a processor and a memory coupled to the processor, the processor configured to perform the method of any one of claims 6 to 10.

13. A computer program product for causing a processor to carry out the method of any one of claims 1 to 5 or any one of claims 6 to 10.

14. A decoder comprising: a receiving means for receiving a bitstream having an adaptive loop filter (ALF) adaptation parameter set (APS) including an ALF luma filter signal flag (alf_luma_filter_signal_flag) and an ALF chroma filter signal flag (alf_chroma_filter_signal_flag), wherein the alf_luma_filter_signal_flag specifies whether a luma filter set is signaled in the ALF APS, and the alf_chroma_filter_signal_flag specifies whether a chroma filter set is signaled in the ALF APS; The value of the alf_luma_filter_signal_flag of an APS Network Abstraction Layer (NAL) unit having aps_params_type equal to ALF_APS and adaptation_parameter_set_id equal to the adaptation_parameter_set_id of the i-th ALF APS referenced by the luma component of the slice is constrained to be equal to 1, and the alf_luma_filter_signal_flag of the APS Network Abstraction Layer (NAL) unit having aps_params_type equal to ALF_APS and adaptation_parameter_set_id equal to the adaptation_parameter_set_id of the ALF APS referenced by the luma component of the slice is constrained to be equal to 1. the value of the alf_chroma_filter_signal_flag of a NAL unit is constrained to be equal to 1; the bitstream further comprises a slice header corresponding to the slice; a receiving means, wherein the slice header has a slice_alf_enabled_flag, wherein the slice_alf_enabled_flag equal to 1 specifies that the ALF is enabled for luma (Y), blue-difference chroma (Cb), or red-difference chroma (Cr) color component in the slice, and the slice_alf_enabled_flag equal to 0 specifies that the ALF is disabled for all color components in the slice; decoding means for decoding the slice based on the ALF parameters in the ALF APS and the slice header; A decoder comprising:

15. The decoder of claim 14, wherein the decoder is further configured to perform the method of any one of claims 2 to 5.

16. 1. An encoder comprising: encoding means for encoding the slice into a bitstream as part of an encoded video sequence; the encoding means is further configured to encode an adaptive loop filter (ALF) adaptation parameter set (APS) into the bitstream, the ALF APS including an ALF luma filter signal flag (alf_luma_filter_signal_flag) and an ALF chroma filter signal flag (alf_chroma_filter_signal_flag), wherein the alf_luma_filter_signal_flag specifies whether a luma filter set is signaled in the ALF APS, and the alf_chroma_filter_signal_flag specifies whether a chroma filter set is signaled in the ALF APS; The value of the alf_luma_filter_signal_flag of an APS Network Abstraction Layer (NAL) unit having aps_params_type equal to ALF_APS and adaptation_parameter_set_id equal to the adaptation_parameter_set_id of the i-th ALF APS referenced by the luma component of the slice is constrained to be equal to 1, and the value of the alf_luma_filter_signal_flag of an APS Network Abstraction Layer (NAL) unit having aps_params_type equal to ALF_APS and adaptation_parameter_set_id equal to the adaptation_parameter_set_id of the ALF APS referenced by the luma component of the slice is constrained to be equal to 1. the value of the alf_chroma_filter_signal_flag of a NAL unit is constrained to be equal to 1; the encoding means is further configured to encode a slice header corresponding to the slice into the bitstream; An encoder in which the slice header has a slice_alf_enabled_flag, where the slice_alf_enabled_flag equal to 1 specifies that the ALF is enabled for luma (Y), blue-difference chroma (Cb), or red-difference chroma (Cr) color components in the slice, and the slice_alf_enabled_flag equal to 0 specifies that the ALF is disabled for all color components in the slice.

17. The encoder of claim 16, wherein the encoder is further configured to perform the method of any one of claims 7 to 10.

18. A device for storing a bitstream, comprising: at least one memory; and at least one receiver, the at least one receiver configured to receive the bitstream; the at least one memory is configured to store the bitstream; the bitstream has an adaptive loop filter (ALF) adaptation parameter set (APS) including an ALF luma filter signal flag (alf_luma_filter_signal_flag) and an ALF chroma filter signal flag (alf_chroma_filter_signal_flag), wherein the alf_luma_filter_signal_flag specifies whether a luma filter set is signaled in the ALF APS, and the alf_chroma_filter_signal_flag specifies whether a chroma filter set is signaled in the ALF APS; The value of the alf_luma_filter_signal_flag of an APS Network Abstraction Layer (NAL) unit having aps_params_type equal to ALF_APS and adaptation_parameter_set_id equal to the adaptation_parameter_set_id of the i-th ALF APS referenced by the luma component of the slice is constrained to be equal to 1, and the alf_luma_filter_signal_flag of the APS Network Abstraction Layer (NAL) unit having aps_params_type equal to ALF_APS and adaptation_parameter_set_id equal to the adaptation_parameter_set_id of the ALF APS referenced by the luma component of the slice is constrained to be equal to 1. the value of the alf_chroma_filter_signal_flag of a NAL unit is constrained to be equal to 1; the bitstream further comprises a slice header corresponding to the slice; A device, wherein the slice header has a slice_alf_enabled_flag, where a slice_alf_enabled_flag equal to 1 specifies that the ALF is enabled for luma (Y), blue-difference chroma (Cb), or red-difference chroma (Cr) color component in the slice, and a slice_alf_enabled_flag equal to 0 specifies that the ALF is disabled for all color components in the slice.

19. 1. A method for storing a bitstream, comprising: receiving the bitstream through at least one receiver; storing the bitstream in one or more memories; Equipped with the bitstream has an adaptive loop filter (ALF) adaptation parameter set (APS) including an ALF luma filter signal flag (alf_luma_filter_signal_flag) and an ALF chroma filter signal flag (alf_chroma_filter_signal_flag), wherein the alf_luma_filter_signal_flag specifies whether a luma filter set is signaled in the ALF APS, and the alf_chroma_filter_signal_flag specifies whether a chroma filter set is signaled in the ALF APS; The value of the alf_luma_filter_signal_flag of an APS Network Abstraction Layer (NAL) unit having aps_params_type equal to ALF_APS and adaptation_parameter_set_id equal to the adaptation_parameter_set_id of the i-th ALF APS referenced by the luma component of the slice is constrained to be equal to 1, and the alf_luma_filter_signal_flag of the APS Network Abstraction Layer (NAL) unit having aps_params_type equal to ALF_APS and adaptation_parameter_set_id equal to the adaptation_parameter_set_id of the ALF APS referenced by the luma component of the slice is constrained to be equal to 1. the value of the alf_chroma_filter_signal_flag of a NAL unit is constrained to be equal to 1; the bitstream further comprises a slice header corresponding to the slice; A method in which the slice header has a slice_alf_enabled_flag, where a slice_alf_enabled_flag equal to 1 specifies that the ALF is enabled for luma (Y), blue-difference chroma (Cb), or red-difference chroma (Cr) color component in the slice, and a slice_alf_enabled_flag equal to 0 specifies that the ALF is disabled for all color components in the slice.

20. A device for transmitting a bitstream, comprising at least one memory and at least one transmitter, the at least one memory is configured to store the bitstream; the at least one transmitter configured to transmit the bitstream; the bitstream has an adaptive loop filter (ALF) adaptation parameter set (APS) including an ALF luma filter signal flag (alf_luma_filter_signal_flag) and an ALF chroma filter signal flag (alf_chroma_filter_signal_flag), wherein the alf_luma_filter_signal_flag specifies whether a luma filter set is signaled in the ALF APS, and the alf_chroma_filter_signal_flag specifies whether a chroma filter set is signaled in the ALF APS; The value of the alf_luma_filter_signal_flag of an APS Network Abstraction Layer (NAL) unit having aps_params_type equal to ALF_APS and adaptation_parameter_set_id equal to the adaptation_parameter_set_id of the i-th ALF APS referenced by the luma component of the slice is constrained to be equal to 1, and the alf_luma_filter_signal_flag of the APS Network Abstraction Layer (NAL) unit having aps_params_type equal to ALF_APS and adaptation_parameter_set_id equal to the adaptation_parameter_set_id of the ALF APS referenced by the luma component of the slice is constrained to be equal to 1. the value of the alf_chroma_filter_signal_flag of a NAL unit is constrained to be equal to 1; the bitstream further comprises a slice header corresponding to the slice; A device, wherein the slice header has a slice_alf_enabled_flag, where a slice_alf_enabled_flag equal to 1 specifies that the ALF is enabled for luma (Y), blue-difference chroma (Cb), or red-difference chroma (Cr) color component in the slice, and a slice_alf_enabled_flag equal to 0 specifies that the ALF is disabled for all color components in the slice.

21. 1. A method for transmitting a bitstream, comprising: receiving the bitstream from one or more memories; transmitting the bitstream to another device; Equipped with the bitstream has an adaptive loop filter (ALF) adaptation parameter set (APS) including an ALF luma filter signal flag (alf_luma_filter_signal_flag) and an ALF chroma filter signal flag (alf_chroma_filter_signal_flag), wherein the alf_luma_filter_signal_flag specifies whether a luma filter set is signaled in the ALF APS, and the alf_chroma_filter_signal_flag specifies whether a chroma filter set is signaled in the ALF APS; The value of the alf_luma_filter_signal_flag of an APS Network Abstraction Layer (NAL) unit having aps_params_type equal to ALF_APS and adaptation_parameter_set_id equal to the adaptation_parameter_set_id of the i-th ALF APS referenced by the luma component of the slice is constrained to be equal to 1, and the alf_luma_filter_signal_flag of the APS Network Abstraction Layer (NAL) unit having aps_params_type equal to ALF_APS and adaptation_parameter_set_id equal to the adaptation_parameter_set_id of the ALF APS referenced by the luma component of the slice is constrained to be equal to 1. the value of the alf_chroma_filter_signal_flag of a NAL unit is constrained to be equal to 1; the bitstream further comprises a slice header corresponding to the slice; A method in which the slice header has a slice_alf_enabled_flag, where a slice_alf_enabled_flag equal to 1 specifies that the ALF is enabled for luma (Y), blue-difference chroma (Cb), or red-difference chroma (Cr) color component in the slice, and a slice_alf_enabled_flag equal to 0 specifies that the ALF is disabled for all color components in the slice.