Simplifying SEI message dependencies in video coding
Patent Information
- Application Number
- JP2024187576
- Authority / Receiving Office
- JP · JP
- Patent Type
- Applications
- Current Assignee / Owner
- Priority Date
- 2019-09-24
- Filing Date
- 2024-10-24
- Publication Date
- 2025-02-14
Smart Images

Figure 2025022883000001_ABST
Abstract
Description
[Technical field]
[0001] CROSS-REFERENCE TO RELATED APPLICATIONS This patent application claims the benefit of U.S. Provisional Patent Application No. 62 / 905,236, entitled “Video Coding Improvements,” filed Sep. 24, 2019 by Ye-Kui Wang, which is incorporated by reference into this patent application.
[0002] FIELD This disclosure relates generally to video coding, and more particularly to improvements in signaling parameters to support coding of multi-layer bitstreams. [Background technology]
[0003] The amount of video data required to represent even a relatively short video can be substantial, which can present challenges when streaming data or transmitting data across communication networks that have limited bandwidth capacity. For this reason, video data is typically compressed before being transmitted over today's communication networks. The size of the video can also be an issue when the video is stored on a storage device, where memory resources may be scarce. Video compression devices often use software and / or hardware to encode the video data at the source prior to transmission or storage, thereby reducing the amount of data required to represent a digital video image. The compressed data is then received by a video decompression device, which decodes the video data at the destination. Due to limited network resources and an increasing demand for higher video quality, improved compression and decompression techniques that increase compression ratios with little or no sacrifice in image quality are desirable. Summary of the Invention [Means for solving the problem]
[0004] In one embodiment, the present disclosure includes a method implemented by a decoder, the method including receiving, by a receiver of the decoder, a bitstream including an encoded picture and a current supplemental enhancement information (SEI) message including a decoding unit (DU) hypothetical reference decoder (HRD) parameters present flag (du_hrd_params_present_flag) specifying whether DU level HRD parameters are present in the bitstream, and decoding, by a processor of the decoder, the encoded picture to generate a decoded picture.
[0005] A video coding system may encode a video sequence as a series of coded pictures into a bitstream. To support the decoding of the video sequence, various parameters may also be coded. For example, a video parameter set (VPS) may include parameters related to the configuration of layers, sublayers, and / or output layer sets (OLS) in the video sequence. In addition, the video sequence may be checked by an HRD for conformance to a standard. To support such conformance testing, the VPS and / or SPS may include HRD parameters. HRD-related parameters may also be included in the SEI message. The SEI message includes information that is not required by the decoding process to determine the values of samples in the decoded picture. For example, the SEI message may include HRD parameters that further describe the HRD process in light of the HRD parameters included in the VPS. In some video coding systems, the SEI message may include parameters that directly reference the VPS. This dependency poses certain difficulties. For example, the VPS may be removed from the bitstream when transmitting an OLS that includes a single layer. This approach may be beneficial in some cases, since the VPS does not include useful information when the decoder receives only one layer. However, omitting a VPS may prevent an SEI message from being properly parsed due to a dependency on the VPS. Specifically, omitting a VPS may cause an SEI message to return an error because data on which the SEI message depends in the VPS is not received by the decoder.
[0006] This example includes a mechanism for removing the dependency between the VPS and the SEI message. For example, du_hrd_params_present_flag can be encoded in the current SEI message. du_hrd_params_present_flag specifies whether the HRD operates at the access unit (AU) level or at the DU level. In addition, the current SEI message can include a DU coded picture buffer (CPB) parameter-in-picture timing (PT) SEI flag (du_cpb_params_in_pic_timing_sei_flag) that specifies whether the DU-level CPB removal delay parameter is present in the PT SEI message or in the decoding unit information (DUI) SEI message. By including these flags in the current SEI message, the current SEI message does not depend on the VPS. Therefore, the current SEI message can be parsed even if the VPS is omitted from the bitstream. Thus, various errors can be avoided. As a result, the functionality of the encoder and decoder is improved. Furthermore, removing the dependency between the SEI message and the VPS supports the removal of the VPS in certain cases, which improves coding efficiency and thus reduces processor, memory, and / or network signaling resource usage in both the encoder and decoder.
[0007] Optionally, in any of the above-mentioned aspects, in another implementation form of the aspect, du_hrd_params_present_flag further specifies whether the HRD operates at the access unit (AU) level or the DU level.
[0008] Optionally, in any of the above-mentioned aspects, in another implementation of the aspect, du_hrd_params_present_flag is set to 1 when a DU level HRD parameter is present specifying that the HRD may operate at the AU level or the DU level, and is set to 0 when a DU level HRD parameter is not present specifying that the HRD operates at the AU level.
[0009] Optionally, in any of the above-mentioned aspects, in another implementation of the aspect, the current SEI message further includes a DU coded picture buffer (CPB) parameters-in-picture timing (PT) SEI flag (du_cpb_params_in_pic_timing_sei_flag) that specifies whether a DU-level CPB removal delay parameter is present in the PT SEI message.
[0010] Optionally, in any of the above-mentioned aspects, in another implementation form of the aspect, du_cpb_params_in_pic_timing_sei_flag further specifies whether a DU-level CPB removal delay parameter is present in a decoding unit information (DUI) SEI message.
[0011] Optionally, in any of the above-mentioned aspects, in another implementation form of the aspect, du_cpb_params_in_pic_timing_sei_flag is set to 1 when a DU-level CPB removal delay parameter is present in the PT SEI message specifying that the DUI SEI message is not available, and du_cpb_params_in_pic_timing_sei_flag is set to 0 when a DU-level CPB removal delay parameter is present in the DUI SEI message specifying that the PT SEI message does not include a DU-level CPB removal delay parameter.
[0012] Optionally, in any of the aforementioned aspects, in another implementation of the aspect, the current SEI message is a buffering period (BP) SEI message, a PT SEI message, or a DUI SEI message.
[0013] In one embodiment, the present disclosure includes a method implemented by an encoder, the method including the steps of: encoding, by a processor of the encoder, an encoded picture into a bitstream; encoding, by the processor, a current SEI message including du_hrd_params_present_flag specifying whether DU level HRD parameters are present in the bitstream; performing, by the processor, a set of bitstream conformance tests on the bitstream based on the current SEI message; and storing, by a memory coupled to the processor, the bitstream for communication to a decoder.
[0014] A video coding system may encode a video sequence as a series of coded pictures into a bitstream. Various parameters may also be coded to support the decoding of the video sequence. For example, the VPS may include parameters related to the configuration of layers, sublayers, and / or OLS in the video sequence. In addition, the video sequence may be checked by an HRD for conformance to the standard. To support such conformance testing, the VPS and / or SPS may include HRD parameters. HRD-related parameters may also be included in the SEI message. The SEI message includes information that is not required by the decoding process to determine the values of samples in the decoded picture. For example, the SEI message may include HRD parameters that further describe the HRD process in light of the HRD parameters included in the VPS. In some video coding systems, the SEI message may include parameters that directly reference the VPS. This dependency poses certain difficulties. For example, the VPS may be removed from the bitstream when transmitting an OLS that includes a single layer. This approach may be beneficial in some cases, since the VPS does not include useful information when the decoder receives only one layer. However, omitting a VPS may prevent an SEI message from being properly parsed due to a dependency on the VPS. Specifically, omitting a VPS may cause an SEI message to return an error because data on which the SEI message depends in the VPS is not received by the decoder.
[0015] This example includes a mechanism for removing the dependency between the VPS and the SEI message. For example, du_hrd_params_present_flag can be encoded in the current SEI message. du_hrd_params_present_flag specifies whether the HRD operates at the AU level or the DU level. Furthermore, the current SEI message can include du_cpb_params_in_pic_timing_sei_flag, which specifies whether the DU level CPB removal delay parameter is present in the PT SEI message or in the DUI SEI message. By including these flags in the current SEI message, the current SEI message does not depend on the VPS. Therefore, the current SEI message can be parsed even if the VPS is omitted from the bitstream. Thus, various errors can be avoided. As a result, the functionality of the encoder and the decoder is improved. Furthermore, removing the dependency between the SEI message and the VPS supports the removal of the VPS in certain cases, which improves the coding efficiency and thus reduces the processor, memory, and / or network signaling resource usage in both the encoder and the decoder.
[0016] Optionally, in any of the above-mentioned aspects, in another implementation form of the aspect, du_hrd_params_present_flag further specifies whether the HRD operates at the AU level or the DU level.
[0017] Optionally, in any of the above-mentioned aspects, in another implementation of the aspect, du_hrd_params_present_flag is set to 1 when a DU level HRD parameter is present specifying that the HRD may operate at the AU level or the DU level, and is set to 0 when a DU level HRD parameter is not present specifying that the HRD operates at the AU level.
[0018] Optionally, in any of the above-mentioned aspects, in another implementation form of the aspect, the current SEI message further includes du_cpb_params_in_pic_timing_sei_flag that specifies whether a DU-level CPB removal delay parameter is present in the PT SEI message.
[0019] Optionally, in any of the above-mentioned aspects, in another implementation form of the aspect, du_cpb_params_in_pic_timing_sei_flag further specifies whether a DU level CPB removal delay parameter is present in the DUI SEI message.
[0020] Optionally, in any of the above-mentioned aspects, in another implementation form of the aspect, du_cpb_params_in_pic_timing_sei_flag is set to 1 when a DU-level CPB removal delay parameter is present in the PT SEI message specifying that the DUI SEI message is not available, and du_cpb_params_in_pic_timing_sei_flag is set to 0 when a DU-level CPB removal delay parameter is present in the DUI SEI message specifying that the PT SEI message does not include a DU-level CPB removal delay parameter.
[0021] Optionally, in any of the aforementioned aspects, in another implementation of the aspect, the current SEI message is a BP SEI message, a PT SEI message, or a DUI SEI message.
[0022] In one embodiment, the present disclosure includes a video encoding apparatus 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, receiver, memory, and transmitter are configured to perform the method of any of the aforementioned aspects.
[0023] In one embodiment, the present disclosure includes a non-transitory computer-readable medium including a computer program product for use by a video encoding device, the computer program product including computer-executable instructions stored on the non-transitory computer-readable medium, the computer-executable instructions, when executed by a processor, causing the video encoding device to perform a method of any of the aforementioned aspects.
[0024] In one embodiment, the present disclosure includes a decoder comprising receiving means for receiving a bitstream including an encoded picture and a current SEI message including du_hrd_params_present_flag specifying whether DU level HRD parameters are present in the bitstream, decoding means for decoding the encoded picture to generate a decoded picture, and forwarding means for forwarding the decoded picture for display as part of a decoded video sequence.
[0025] A video coding system may encode a video sequence as a series of coded pictures into a bitstream. Various parameters may also be coded to support the decoding of the video sequence. For example, the VPS may include parameters related to the configuration of layers, sublayers, and / or OLS in the video sequence. In addition, the video sequence may be checked by an HRD for conformance to the standard. To support such conformance testing, the VPS and / or SPS may include HRD parameters. HRD-related parameters may also be included in the SEI message. The SEI message includes information that is not required by the decoding process to determine the values of samples in the decoded picture. For example, the SEI message may include HRD parameters that further describe the HRD process in light of the HRD parameters included in the VPS. In some video coding systems, the SEI message may include parameters that directly reference the VPS. This dependency poses certain difficulties. For example, the VPS may be removed from the bitstream when transmitting an OLS that includes a single layer. This approach may be beneficial in some cases, since the VPS does not include useful information when the decoder receives only one layer. However, omitting a VPS may prevent an SEI message from being properly parsed due to a dependency on the VPS. Specifically, omitting a VPS may cause an SEI message to return an error because data on which the SEI message depends in the VPS is not received by the decoder.
[0026] This example includes a mechanism for removing the dependency between the VPS and the SEI message. For example, du_hrd_params_present_flag can be encoded in the current SEI message. du_hrd_params_present_flag specifies whether the HRD operates at the AU level or the DU level. Furthermore, the current SEI message can include du_cpb_params_in_pic_timing_sei_flag, which specifies whether the DU level CPB removal delay parameter is present in the PT SEI message or in the DUI SEI message. By including these flags in the current SEI message, the current SEI message does not depend on the VPS. Therefore, the current SEI message can be parsed even if the VPS is omitted from the bitstream. Thus, various errors can be avoided. As a result, the functionality of the encoder and the decoder is improved. Furthermore, removing the dependency between the SEI message and the VPS supports the removal of the VPS in certain cases, which improves the coding efficiency and thus reduces the processor, memory, and / or network signaling resource usage in both the encoder and the decoder.
[0027] Optionally, in any of the aforementioned aspects, in another implementation of the aspect, the decoder is further configured to perform the method of any of the aforementioned aspects.
[0028] In one embodiment, the present disclosure includes an encoder comprising: encoding means for encoding an encoded picture into a bitstream and encoding into the bitstream a current SEI message including du_hrd_params_present_flag specifying whether DU level HRD parameters are present in the bitstream; HRD means for performing a set of bitstream conformance tests on the bitstream based on the current SEI message; and storage means for storing the bitstream for communication to a decoder.
[0029] A video coding system may encode a video sequence as a series of coded pictures into a bitstream. Various parameters may also be coded to support the decoding of the video sequence. For example, the VPS may include parameters related to the configuration of layers, sublayers, and / or OLS in the video sequence. In addition, the video sequence may be checked by an HRD for conformance to the standard. To support such conformance testing, the VPS and / or SPS may include HRD parameters. HRD-related parameters may also be included in the SEI message. The SEI message includes information that is not required by the decoding process to determine the values of samples in the decoded picture. For example, the SEI message may include HRD parameters that further describe the HRD process in light of the HRD parameters included in the VPS. In some video coding systems, the SEI message may include parameters that directly reference the VPS. This dependency poses certain difficulties. For example, the VPS may be removed from the bitstream when transmitting an OLS that includes a single layer. This approach may be beneficial in some cases, since the VPS does not include useful information when the decoder receives only one layer. However, omitting a VPS may prevent an SEI message from being properly parsed due to a dependency on the VPS. Specifically, omitting a VPS may cause an SEI message to return an error because data on which the SEI message depends in the VPS is not received by the decoder.
[0030] This example includes a mechanism for removing the dependency between the VPS and the SEI message. For example, du_hrd_params_present_flag can be encoded in the current SEI message. du_hrd_params_present_flag specifies whether the HRD operates at the AU level or the DU level. Furthermore, the current SEI message can include du_cpb_params_in_pic_timing_sei_flag, which specifies whether the DU level CPB removal delay parameter is present in the PT SEI message or in the DUI SEI message. By including these flags in the current SEI message, the current SEI message does not depend on the VPS. Therefore, the current SEI message can be parsed even if the VPS is omitted from the bitstream. Thus, various errors can be avoided. As a result, the functionality of the encoder and the decoder is improved. Furthermore, removing the dependency between the SEI message and the VPS supports the removal of the VPS in certain cases, which improves the coding efficiency and thus reduces the processor, memory, and / or network signaling resource usage in both the encoder and the decoder.
[0031] Optionally, in any of the aforementioned aspects, the encoder is further configured to perform the method of any of the aforementioned aspects.
[0032] For 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.
[0033] These and other features will be more clearly understood from the following detailed description taken in conjunction with the accompanying drawings and claims.
[0034] For a more complete understanding of this disclosure, reference is now made to the following brief description taken in conjunction with the accompanying drawings and detailed description, in which like reference numerals represent like parts. [Brief description of the drawings]
[0035] [Figure 1] 1 is a flowchart of an exemplary method for encoding a video signal. [Diagram 2] 1 is a schematic diagram of an exemplary encoding-decoding (codec) system for video encoding. [Diagram 3] FIG. 1 is a schematic diagram illustrating an exemplary video encoder. [Figure 4] FIG. 2 is a schematic diagram illustrating an exemplary video decoder. [Diagram 5] 1 is a schematic diagram illustrating an exemplary hypothetical reference decoder (HRD). [Figure 6] FIG. 2 is a schematic diagram illustrating an exemplary multi-layer video sequence. [Figure 7] FIG. 2 is a schematic diagram illustrating an exemplary bitstream. [Figure 8] 1 is a schematic diagram of an exemplary video encoding device; [Figure 9] 1 is a flowchart of an example method for encoding a video sequence into a bitstream by using a supplemental enhancement information (SEI) message that may be independent of a video parameter set (VPS). [Figure 10] 1 is a flowchart of an example method for decoding a video sequence from a bitstream using SEI messages that may not rely on a VPS. [Figure 11] 1 is a schematic diagram of an example system for encoding a video sequence using a bitstream that uses SEI messages that may not rely on a VPS. DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENTS
[0036] First, while exemplary implementations of one or more embodiments are provided below, it should be understood that the disclosed systems and / or methods may be implemented using any number of technologies, whether currently known or in existence. The present disclosure should in no way be limited to the exemplary implementations, drawings, and techniques shown below, including the exemplary designs and implementations shown or described herein, but may be modified within the scope of the appended claims along with their full scope of equivalents.
[0037] The following terms are defined as follows, unless used in the present specification in a contrary context. Specifically, the following definitions are intended to further clarify the present disclosure. However, terms may be described differently in different contexts. Therefore, the following definitions should be considered as supplementary and should not be considered as limiting other definitions of the descriptions given to such terms in the present specification.
[0038] A bitstream is a sequence of bits that includes video data compressed 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. A decoder is a device configured to use a decoding process to recover video data from the bitstream for display. A picture is an array of luma samples and / or an array of chroma samples that generate a frame or a field thereof. A slice is an integer number of complete tiles or an integer number of consecutive complete coding tree unit (CTU) rows of a picture (e.g., within a tile) that are exclusively contained in a single network abstraction layer (NAL) unit. For clarity of explanation, a picture being coded or decoded can be referred to as a current picture. A coded picture is a coded representation of a picture that includes all coding tree units (CTUs) of the picture, comprising a video coding layer (VCL) NAL unit with a particular value of the NAL unit header layer identifier (nuh_layer_id) in the access unit (AU). A decoded picture is a picture produced by applying a decoding process to a coded picture.
[0039] An AU is a set of coded pictures contained in different layers and associated at the same time for output from the decoded picture buffer (DPB). A decoding unit (DU) is an AU or a subset of an AU that includes one or more VCL NAL units and associated non-VCL NAL units within the AU. A NAL unit is a syntax structure that includes data in the form of a Raw Byte Sequence Payload (RBSP), an indication of the type of data, and is interspersed as desired with emulation prevention bytes. A VCL NAL unit is a NAL unit that is coded to include video data, such as a coded slice of a picture. A non-VCL NAL unit is a NAL unit that includes non-video data, such as syntax and / or parameters that support decoding the video data, performing conformance checks, or other operations. A layer is a set of VCL NAL units that share specified characteristics (e.g., a common resolution, frame rate, picture size, etc.) as indicated by a layer ID and associated non-VCL NAL units.
[0040] A hypothetical reference decoder (HRD) is a decoder model that runs on an encoder to check the variability of the bitstream generated by the encoding process to verify its conformance to specified constraints. A bitstream conformance test is a test to determine whether the encoded bitstream conforms to a standard such as Versatile Video Coding (VVC). HRD parameters are syntax elements that initialize and / or define the operating conditions of the HRD. HRD parameters may be included in a supplemental enhancement information (SEI) message, a sequence parameter set (SPS), and / or a video parameter set (VPS). The DU HRD parameters present flag (du_hrd_params_present_flag) is a syntax element that specifies whether DU-level HRD parameters are present in the bitstream. The AU level is a description of the operation that applies across one or more AUs (e.g., across one or more picture groups that share the same output time). The DU level is a description of the operation that applies across one or more DUs (e.g., across one or more pictures).
[0041] An SEI message is a syntax structure with specified semantics that conveys information that is not required in the decoding process to determine values of samples in a decoded picture. An SEI NAL unit is a NAL unit that contains one or more SEI messages. A particular SEI NAL unit may be referred to as a current SEI NAL unit. A buffering period (BP) SEI message is an SEI message that includes HRD parameters for initializing an HRD for managing a coded picture buffer (CPB). A picture timing (PT) SEI message is a type of SEI message that includes HRD parameters for managing delivery information for AUs in the CPB and / or decoded picture buffer (DPB). A decoding unit information (DUI) SEI message is a type of SEI message that includes HRD parameters for managing delivery information of DUs in the CPB and / or DPB. The DU CPB parameters flag in PT SEI (du_cpb_params_in_pic_timing_sei_flag) is a syntax element that specifies whether the DU level CPB removal delay parameter is present in the PT SEI message and / or the DUI SEI message. The CPB is a first-in, first-out buffer in the HRD that contains the DUs in decoding order. The CPB removal delay is the time that one or more pictures can remain in the CPB before being forwarded to the DPB in the HRD. The VPS is a syntax structure that contains data about the entire bitstream. The SPS is a syntax structure that contains syntax elements that apply to zero or more entire coded layer video sequences. A coded video sequence is a set of one or more coded pictures. A decoded video sequence is a set of one or more decoded pictures.
[0042] In this specification, the following acronyms are used: Access Unit (AU), Coding Tree Block (CTB), Coding Tree Unit (CTU), Coding Unit (CU), Coded Layer Video Sequence (CLVS), Coded Layer Video Sequence Start (CLVSS), Coded Video Sequence (CVS), Coded Video Sequence Start (CVSS), Joint Video Experts Team (JVET), Hypothetical Reference Decoder HRD, Motion Constrained Tile Set (MCTS), Maximum Transfer Unit (MTU), Network Abstraction Layer (NAL), Output Layer Set (OLS), Picture Order Count (POC), Random Access Point (RAP), and IEEE 802.11a standard. The following are used:
[0043] Many video compression techniques can be used to reduce the size of a video file while minimizing data loss. For example, video compression techniques can 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. In block-based video coding, a video slice (e.g., a video picture or a portion of a video picture) 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 an intra-coded (I) slice of a picture are coded using spatial prediction with respect to reference samples in neighboring blocks in the same picture. Video blocks in an inter-coded unidirectionally predicted (P) or bidirectionally predicted (B) slice of a picture may be coded using 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. A picture may be referred to as a frame and / or an image, and a reference picture may be referred to as a reference frame and / or a reference image. A spatial or temporal prediction results in a prediction block representing an image block. The residual data represents pixel differences between the original image block and the prediction block. Thus, an inter-coded block is coded according to a motion vector pointing to a block of reference samples forming the prediction block and the residual data indicating the difference between the coded block and the prediction block. An intra-coded block is coded according to an intra-coding mode and the residual data. To further compress, the residual data may be transformed from the pixel domain to a transform domain. These become residual transform coefficients and may be quantized. The quantized transform coefficients may initially be arranged in a two-dimensional array. The quantized transform coefficients may be scanned to generate a one-dimensional vector of transform coefficients. To achieve further compression, entropy coding may be applied. Such video compression techniques are described in more detail below.
[0044] To enable accurate decoding of the encoded video, the video is encoded and decoded according to a corresponding video encoding standard, including Advanced Video Coding (AVC), also known as International Telecommunications Union (ITU) Standardization Sector (ITU-T) H.261, International Organization for Standardization / International Electrotechnical Commission (ISO / IEC) Moving Picture Experts Group (MPEG)-1 Part 2, 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), Multiview Video Coding plus Depth (MVC+D), and three-dimensional (3D) AVC (3D-AVC). HEVC includes extensions such as Scalable HEVC (SHVC), Multiview HEVC (MV-HEVC), and 3D HEVC (3D-HEVC). The Joint Video Experts Team (JVET) of ITU-T and ISO / IEC has begun the development of a video coding standard called Versatile Video Coding (VVC). VVC is included in the Working Draft (WD), which includes JVET-O2001-v14.
[0045] A video coding system may encode a video sequence as a sequence of coded pictures into a bitstream. To support the decoding of the video sequence, various parameters may also be coded. For example, a video parameter set (VPS) may include parameters related to the configuration of layers, sublayers, and / or output layer sets (OLS) in the video sequence. Furthermore, the video sequence may be checked by a hypothetical reference decoder (HRD) for conformance to the standard. To support such conformance testing, the VPS and / or SPS may include HRD parameters. HRD-related parameters may also be included in a supplemental enhancement information (SEI) message. The SEI message includes information that is not required by the decoding process to determine values of samples in a decoded picture. For example, the SEI message may include HRD parameters that further describe the HRD process in light of the HRD parameters included in the VPS. In some video coding systems, the SEI message may include parameters that directly reference the VPS. This dependency poses certain difficulties. For example, the VPS may be removed from the bitstream when transmitting an OLS that includes a single layer. This approach can be beneficial in some cases because the VPS does not contain useful information when the decoder receives only one layer. However, omitting the VPS can prevent SEI messages from being properly analyzed due to their dependency on the VPS. Specifically, omitting the VPS can cause SEI messages to return errors because the data on which the SEI messages depend in the VPS is not received by the decoder.
[0046] In the present specification, a mechanism for removing the dependency between the VPS and the SEI message is disclosed. For example, a decoding unit (DU) hypothetical reference decoder (HRD) parameters present flag (du_hrd_params_present_flag) can be encoded in the current SEI message. du_hrd_params_present_flag specifies whether the HRD operates at the access unit (AU) level or the decoding unit (DU) level. Furthermore, the current SEI message can include a DU coded picture buffer (CPB) parameters-in-picture timing (PT) SEI flag (du_cpb_params_in_pic_timing_sei_flag) that specifies whether the DU level CPB removal delay parameters are present in the PT SEI message or in the decoding unit information (DUI) SEI message. By including these flags in the current SEI message, the current SEI message does not depend on the VPS. Therefore, the current SEI message can be parsed even if the VPS is omitted from the bitstream. Thus, various errors can be avoided. As a result, the functionality of the encoder and decoder is improved. Furthermore, removing the dependency between the SEI message and the VPS supports the removal of the VPS in certain cases, which improves coding efficiency and thus reduces processor, memory, and / or network signaling resource usage in both the encoder and the decoder.
[0047] 1 is a flow chart of an exemplary operational method 100 for encoding a video signal. Specifically, a video signal is encoded by an encoder. The encoding process compresses the video signal using various mechanisms that reduce the size of the video file. 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 and recovers the original video signal for display to the end user. To allow the decoder to recover the video signal consistently, the decoding process typically mirrors the encoding process.
[0048] At 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 audio and video components. The video component includes a series of image frames that, when viewed in succession, create the impression of visual movement. The frames include pixels, which are represented by 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.
[0049] At step 103, the video is divided into blocks. The division includes subdividing the 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 subdivided into coding tree units (CTUs), which are blocks of a predetermined size (e.g., 64 pixels by 64 pixels). The CTUs contain both luma and chroma samples. The coding tree may be used to subdivide the CTUs into blocks, which may then be recursively subdivided until a configuration is achieved that supports further encoding. For example, the luma component of a frame may be subdivided until each individual block contains a relatively uniform illumination value. Additionally, the chroma component of a frame may be subdivided until each individual block contains a relatively uniform color value. Thus, the division mechanism may vary depending on the content of the video frame.
[0050] In step 105, the image blocks partitioned in step 103 are compressed using various compression mechanisms. For example, inter-prediction and / or intra-prediction may be used. Inter-prediction is designed to take advantage of the fact that objects in a common scene tend to appear in successive frames. Thus, a block representing an object in a reference frame does not need to be repeatedly described in adjacent frames. Specifically, an object such as a desk may remain in a constant position across multiple frames. Thus, the desk may be described once and adjacent frames may refer to the reference frame. A pattern matching mechanism may be used to match objects across multiple frames. Furthermore, an object may be represented as moving across multiple frames, for example due to object movement or camera movement. As a particular example, a video may show a car moving across the screen across multiple frames. Such movement may be described using motion vectors. A motion vector is a two-dimensional vector that provides an offset from the coordinates of an object in a frame to the coordinates of that object in the reference frame. Thus, inter-prediction may encode an image block in a current frame as a set of motion vectors indicating an offset from a corresponding block in a reference frame.
[0051] Intra prediction encodes blocks within a common frame. Intra prediction exploits the fact that luma and chroma components tend to cluster together in a frame. For example, green patches in a part of a tree tend to be located near similar green patches. Intra prediction uses multiple directional prediction modes (e.g., 33 in HEVC), planar mode, and direct current (DC) mode. Directional modes indicate that the current block is similar / same as the samples of neighboring blocks in the corresponding direction. Planar modes indicate that a series of blocks along a row / column (e.g., a plane) can be interpolated based on neighboring blocks at the edge of the row. Planar modes actually show a smooth transition of light / color across the row / column by using a relatively constant slope of changing values. DC mode is used for boundary smoothing and indicates that the block is similar / same as the average value associated with the samples of all neighboring blocks associated with the angular direction of the directional prediction mode. Thus, intra prediction blocks can represent image blocks as various related prediction mode values instead of actual values. Additionally, inter prediction blocks can represent image blocks as motion vector values instead of actual values. In either case, the predicted block may not exactly represent the image block in some cases. The difference is stored in a residual block. To further compress the file, a transform can be applied to the residual block.
[0052] In step 107, various filtering techniques may be applied. In HEVC, filters are applied according to an in-loop filtering scheme. The block-based prediction described above may create blocky images at the decoder. Furthermore, the block-based prediction scheme may code a block and reconstruct the coded block for later use as a reference block. The in-loop filtering scheme applies noise suppression filters, deblocking filters, adaptive loop filters, and sample adaptive offset (SAO) filters iteratively to the block / frame. These filters reduce such blocking artifacts so that the coded file can be accurately reconstructed. Furthermore, these filters reduce artifacts in the reconstructed reference block so that subsequent blocks coded based on the reconstructed reference block are less likely to introduce further artifacts.
[0053] After the video signal is segmented, compressed, and filtered, the resulting data is coded into a bitstream at step 109. The bitstream includes the data described above, as well as signaling data that may be desirable to support proper video signal recovery 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 so that it can be transmitted to the decoder upon request. The bitstream may also be broadcast and / or multicast to multiple decoders. Creation of the bitstream is an iterative process. Thus, steps 101, 103, 105, 107, and 109 may occur sequentially and / or simultaneously across multiple frames and blocks. The order depicted in FIG. 1 is presented for clarity and simplicity of explanation, and is not intended to limit the video coding process to any particular order.
[0054] The decoder receives the bitstream and starts the decoding process in step 111. Specifically, the decoder uses an entropy decoding scheme to convert the bitstream into corresponding syntax data and video data. In step 111, the decoder uses the syntax data from the bitstream to determine the partitioning of the frame. The partitioning must match the result of the block partitioning in step 103. The entropy encoding / decoding used in step 111 is described below. The encoder makes a number of choices during the compression process, such as selecting a block partitioning scheme from several possible options based on the spatial arrangement of values in the input image. To convey the exact options, a number of bins may be used. As used herein, a bin is a binary value that is treated as a variable (e.g., a bit value that can change depending on the situation). Entropy encoding allows the encoder to discard options that are clearly not valid in a particular situation, 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 acceptable options (e.g., one bin for two options, two bins for three to four options, etc.). The encoder then encodes a codeword of the selected option. This scheme reduces the size of the codeword because it is desirable if the codeword uniquely indicates a choice from a small subset of the allowable options, as opposed to a potentially large set of all possible options. The decoder then decodes the selection by determining the set of allowable options in the same manner as the encoder. The decoder can read the codeword and determine the selection made by the encoder by determining the set of allowable options.
[0055] In step 113, the decoder performs block decoding. Specifically, the decoder uses an inverse transform to generate a residual block. The decoder then uses the residual block and a corresponding prediction block to reconstruct an image block based on the partitioning. The prediction block may include both intra-prediction blocks and inter-prediction blocks generated by the encoder in step 105. The reconstructed image block is then placed in a frame of the reconstructed video signal based on the partitioning data determined in step 111. The syntax of step 113 may also be conveyed in the bitstream by entropy coding as described above.
[0056] In step 115, filtering is performed on the frames of the restored video signal 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 blocking artifacts. After the frames are filtered, in step 117 the video signal may be output to a display for viewing by an end user.
[0057] 2 is a schematic diagram of an exemplary encoding and decoding (codec) system 200 for video encoding. Specifically, the codec system 200 provides functionality to support the implementation of the operational method 100. The codec system 200 is generalized to represent components used in both encoders and decoders. The codec system 200 receives and segments a video signal as described with respect to steps 101 and 103 of the operational method 100, resulting in a segmented video signal 201. The codec system 200 then compresses the segmented video signal 201 into an encoded bitstream when functioning as an encoder as described with respect to steps 105, 107, and 109 of the method 100. When functioning as a decoder, the codec system 200 generates an output video signal from the bitstream as described with respect to steps 111, 113, 115, and 117 of the operational method 100. Codec system 200 includes a general coder control component 211, a transform scaling 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 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 formatting and context adaptive binary arithmetic coding (CABAC) component 231. Such components are coupled as shown. In FIG. 2, the black lines indicate the movement of data to be coded / decoded, and the dashed lines indicate the movement of control data that controls the operation of the other components. All of the components of codec system 200 may reside 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 inverse transform component 229, an in-loop filter component 225, and a decoded picture buffer component 223. These components are described below.
[0058] The split video signal 201 is a captured video sequence that has been split into blocks of pixels by a coding tree. The coding tree uses various split modes to subdivide blocks of pixels into smaller blocks of pixels. These blocks can then be further subdivided into smaller blocks. Blocks may be referred to as nodes on the coding tree. Larger parent nodes are split into smaller child nodes. The number of times a node is subdivided is referred to as the depth of the node / coding tree. The subdivided blocks may be included in some cases in coding units (CUs). For example, a CU may be a sub-part of a CTU that includes a luma block, a red differential chroma (Cr) block(s), and a blue differential chroma (Cb) block(s), along with a corresponding CU syntax instruction. Split modes include binary tree (BT), triple tree (TT), and quad tree (QT), which are used to split a node into two, three, or four child nodes that vary in shape depending on the split mode used. 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.
[0059] The general coder control component 211 is configured to make decisions related to encoding the images of the video sequence into a bitstream according to application constraints. For example, the general coder control component 211 manages the optimization of bitrate / bitstream size and reconstruction quality. Such decisions may be based on storage space / bandwidth availability and image resolution requirements. The general coder control component 211 also manages buffer usage in light of the transmission rate to mitigate buffer under-run and over-run issues. To manage these issues, the general coder control component 211 manages segmentation, prediction, and filtering by other components. For example, the general coder control component 211 can dynamically increase the compression complexity to increase resolution and bandwidth usage, or decrease the compression complexity to decrease resolution and bandwidth usage. Thus, the general coder control component 211 balances the reconstruction quality and bitrate issues of the video signal by controlling other components of the codec system 200. The general coder control component 211 generates control data that controls the operation of the other components. The control data is also forwarded to the header formatting CABAC component 231 for encoding into the bitstream to signal parameters for decoding at the decoder.
[0060] The segmented video signal 201 is also sent 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 sub-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 with reference to one or more blocks in one or more reference frames to provide temporal prediction. The codec system 200 may perform multiple coding passes, for example to select an appropriate coding mode for each block of video data.
[0061] The motion estimation component 221 and the motion compensation component 219 may be highly integrated, but are shown separately for conceptual purposes. Motion estimation performed by the motion estimation component 221 is a process of generating motion vectors that estimate the motion of a video block. A motion vector may indicate, for example, the displacement of an encoded object relative to a predictive block. A predictive block is a block that is known to closely match a block to be encoded in terms of pixel difference. A predictive block may also be referred to as a reference block. Such pixel difference may be determined by sum of absolute difference (SAD), sum of square difference (SSD), or other difference metric. HEVC uses several encoded objects including CTUs, coding tree blocks (CTBs), and CUs. For example, a CTU may be divided into CTBs, which may then be subdivided into CBs for inclusion in a CU. A CU may be coded as a prediction unit that includes predictive data and / or a transform unit (TU) that includes transform residual data for the CU. The motion estimation component 221 generates motion vectors, prediction units, and TUs by using rate-distortion analysis as part of a rate-distortion optimization process. For example, the motion estimation component 221 can determine multiple reference blocks, multiple motion vectors, etc. for a current block / frame and select the reference block, motion vector, etc. with the best rate-distortion characteristics. The best rate-distortion characteristics balance 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).
[0062] In some examples, the codec system 200 can calculate values for sub-integer pixel locations of the reference picture stored in the decoded picture buffer component 223. For example, the video codec system 200 can interpolate values for quarter-pixel locations, eighth-pixel locations, or other fractional pixel locations of the reference picture. Thus, the motion estimation component 221 can perform motion searches for full-pixel and fractional pixel locations and output fractional pixel precision motion vectors. The motion estimation component 221 calculates motion vectors for prediction units of video blocks in inter-coded slices by comparing the location of the prediction unit with the location of the prediction block of the reference picture. The motion estimation component 221 outputs the calculated motion vectors as motion data to the header formatting CABAC component 231 for encoding and outputs the motion to the motion compensation component 219.
[0063] The motion compensation performed by the motion compensation component 219 may include obtaining or generating a prediction block based on a motion vector determined by the motion estimation component 221. Again, in some examples, the motion estimation component 221 and the motion compensation component 219 may be functionally integrated. After receiving the motion vector of the prediction unit of the current video block, the motion compensation component 219 may identify the location of the prediction block to which the motion vector points. A residual video block is then formed by subtracting pixel values of the prediction block from pixel values of the current video block to be coded to form pixel difference values. In general, the motion estimation component 221 performs motion estimation on the luma component, and the motion compensation component 219 uses the motion vector calculated based on the luma component for both the chroma and luma components. The prediction block and the residual block are forwarded to the transform scaling quantization component 213.
[0064] The segmented video signal 201 is also sent to an intra-picture estimation component 215 and an intra-picture prediction component 217. As with 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 also be highly integrated, but are shown separately for conceptual purposes. The intra-picture estimation component 215 and the intra-picture prediction component 217 intra-predict a current block with respect to blocks in a current frame, instead of the inter-prediction performed between frames by the motion estimation component 221 and the motion compensation component 219, as described above. Specifically, 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 to encode the current block from a plurality of tested intra-prediction modes. The selected intra-prediction mode is then forwarded to the header formatting CABAC component 231 for encoding.
[0065] For example, the intra picture estimation component 215 calculates rate-distortion values for various tested intra prediction modes using a rate-distortion analysis, and selects an intra prediction mode with the best rate-distortion characteristics from among the tested modes. The rate-distortion analysis typically determines the amount of distortion (or error) between an encoded block and the original uncoded block that was encoded to generate the encoded block, and the bit rate (e.g., number of bits) used to generate the encoded block. The intra picture estimation component 215 calculates a ratio from the distortion and rate of the various encoded blocks to determine which intra prediction mode exhibits the best rate-distortion value for the block. In addition, the intra picture estimation component 215 may be configured to encode the depth block of the depth map using a rate-distortion optimization (RDO) based depth modeling mode (DMM).
[0066] The intra picture prediction component 217 can generate a residual block from the prediction block based on a selected intra prediction mode determined by the intra picture estimation component 215 if implemented on an encoder, or can read the residual block from the bitstream if implemented on a decoder. The residual block contains the difference in values between the prediction block and the original block and is represented as a matrix. The residual block is then forwarded to the transform scaling quantization component 213. The intra picture estimation component 215 and the intra picture prediction component 217 can operate on both the luma and chroma components.
[0067] The transform scaling quantization component 213 is configured to further compress the residual block. The transform scaling 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 generate a video block including residual transform coefficient values. A wavelet transform, an integer transform, a subband transform, or other types of transforms may also be used. The transform may convert the residual information from a pixel value domain to a transform domain, such as a frequency domain. The transform scaling 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, which causes different frequency information to be quantized with different granularity, which may affect the final visual quality of the restored video. The transform scaling 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 changed by adjusting a quantization parameter. In some examples, the transform scaling quantization component 213 can then perform a scan of a matrix containing the quantized transform coefficients, which are forwarded to the header formatting CABAC component 231 for encoding into the bitstream.
[0068] The inverse scaling component 229 applies the inverse operation of the transform scaling quantization component 213 to support motion estimation. The inverse scaling component 229 applies inverse scaling, transformation, and / or quantization to reconstruct the residual block in the pixel domain for later use as a reference block that may be a predictive block for another current block, for example. The motion estimation component 221 and / or the motion compensation component 219 can compute a reference block by adding the residual block to a corresponding predictive block for use in motion estimation of a later block / frame. A filter is applied to the reconstructed reference block to mitigate artifacts that occur during scaling, quantization, and transformation. Such artifacts may otherwise cause inaccurate predictions (and further artifacts) when subsequent blocks are predicted.
[0069] The filter control analysis component 227 and the in-loop filter component 225 apply filters to the residual blocks and / or to the reconstructed image blocks. For example, the transformed residual blocks from the scaling inverse transform component 229 can be combined with the corresponding prediction blocks from the intra picture prediction component 217 and / or the motion compensation component 219 to reconstruct the original image block. The filters can then be applied to the reconstructed image blocks. In some examples, the filters can be applied to the residual blocks instead. As with the other components of FIG. 2, the filter control analysis component 227 and the in-loop filter component 225 can be highly integrated and implemented together, but are depicted separately for conceptual purposes. The filters applied to the reconstructed reference blocks are applied to specific spatial regions and include multiple parameters that adjust how such filters are applied. The filter control analysis component 227 analyzes the reconstructed reference blocks to determine when such filters should be applied and sets the corresponding parameters. Such data is forwarded to the header formatting CABAC component 231 as filter control data for encoding. The in-loop filter component 225 applies such filters based on the filter control data. The filters may include a deblocking filter, a noise suppression filter, a SAO filter, and an adaptive loop filter. Such filters may be applied in the spatial / pixel domain (e.g., on the reconstructed pixel block) or in the frequency domain, depending on the example.
[0070] 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 described 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 the 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.
[0071] The header formatting CABAC component 231 receives data from various components of the codec system 200 and encodes such data into an encoded bitstream for transmission to a decoder. Specifically, the header formatting CABAC component 231 generates various headers to encode control data, such as general control data and filter control data. In addition, prediction data, including intra prediction and motion data, as well as residual data in the form of quantized transform coefficient data, are all encoded into the bitstream. The final bitstream contains all the information required for 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 the coding contexts of various blocks, indications of the most probable intra prediction modes, indications of segmentation information, and the like. Such data may be encoded using entropy coding. For example, the information may be encoded using context adaptive variable length coding (CAVLC), CABAC, syntax-based context-adaptive binary arithmetic coding (SBAC), probability interval partitioning entropy (PIPE) coding, or other entropy coding techniques. After entropy coding, the encoded bitstream may be transmitted to another device (e.g., a video decoder) or stored for later transmission or retrieval.
[0072] 3 is a block diagram illustrating an example video encoder 300. The video encoder 300 may be used to perform the encoding functions of the codec system 200 and / or to perform steps 101, 103, 105, 107, and / or 109 of the method of operation 100. The encoder 300 splits an input video signal, such that the resulting split video signal 301 is substantially similar to the split video signal 201. The split video signal 301 is then compressed and encoded into a bitstream by components of the encoder 300.
[0073] 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 a reference block 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 block and the residual block 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 block. The transform and quantization component 313 may be substantially similar to the transform scaling and quantization component 213. The transformed and quantized residual block and the corresponding prediction block (along with associated control data) are forwarded to an entropy coding component 331 for coding into a bitstream. The entropy encoding component 331 may be substantially similar to the header formatting CABAC component 231 .
[0074] The transformed and quantized residual block and / or the corresponding prediction block are also forwarded from the transform quantization component 313 to the inverse transform quantization component 329 for reconstruction into a reference block used by the motion compensation component 321. The inverse transform quantization component 329 may be substantially similar to the scaling inverse transform component 229. In some examples, an in-loop filter in an in-loop filter component 325 is also applied to the residual block and / or the reconstructed reference block. 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 described 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.
[0075] 4 is a block diagram illustrating an example video decoder 400. The video decoder 400 may be used to perform the decoding functions of the codec system 200 and / or to perform steps 111, 113, 115, and / or 117 of the method of operation 100. The decoder 400 receives a bitstream, for example from the encoder 300, and generates a reconstructed output video signal based on the bitstream for display to an end user.
[0076] The bitstream is received by the entropy decoding component 433. The entropy decoding component 433 is configured to perform an entropy decoding scheme, such as CAVLC, CABAC, SBAC, PIPE coding, or other entropy coding techniques. For example, the entropy decoding component 433 can use header information to provide a context for interpreting additional data encoded as codewords in the bitstream. The decoded information includes desired information for decoding the video signal, such as general control data, filter control data, partitioning information, motion data, prediction data, and quantized transform coefficients from the residual block. The quantized transform coefficients are forwarded to the inverse transform and quantization component 429 for reconstruction into the residual block. The inverse transform and quantization component 429 can be similar to the inverse transform and quantization component 329.
[0077] The reconstructed residual block and / or predictive block are forwarded to an 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 residual block to the result to reconstruct an intra-predicted image block. The reconstructed intra-predicted image block and / or residual block and 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 block is transferred from the decoded picture buffer component 423 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 uses a motion vector from a reference block to generate a prediction block, and applies a residual block to the result to reconstruct the image block. The reconstructed block may also be transferred to the decoded picture buffer component 423 via the in-loop filter component 425. The decoded picture buffer component 423 continues to store further reconstructed image blocks, which may be reconstructed into frames according to the partition information. Such frames may also be arranged in a sequence. The sequence is output to a display as a reconstructed output video signal.
[0078] 5 is a schematic diagram illustrating an exemplary HRD 500. The HRD 500 may be used in the codec system 200 and / or an encoder, such as the encoder 300. The HRD 500 may inspect the bitstream generated in step 109 of the method 100 before the bitstream is forwarded to a decoder, such as the decoder 400. In some examples, the bitstream may be continuously forwarded through the HRD 500 as it is encoded. If a portion of the bitstream does not conform to an associated constraint, the HRD 500 may indicate such anomaly to the encoder so that the encoder re-encodes the corresponding portion of the bitstream with another mechanism.
[0079] The HRD 500 comprises a hypothetical stream scheduler (HSS) 541. The HSS 541 is a component configured to execute a virtual distribution mechanism. The virtual distribution mechanism is used to check the conformance of a bitstream or a decoder with respect to the timing and data flow of the bitstream 551 input to the HRD 500. For example, the HSS 541 may receive the bitstream 551 output from an encoder and manage the process of conformance testing of the bitstream 551. In a particular example, the HSS 541 may control the rate at which the encoded pictures pass through the HRD 500 and verify that the bitstream 551 does not contain non-conforming data.
[0080] The HSS 541 may forward the bitstream 551 to the CPB 543 at a predetermined rate. The HRD 500 may manage data in a decoding unit (DU) 553. The DU 553 is a subset of an access unit (AU), or an AU and associated non-video coding layer (VCL) network abstraction layer (NAL) units. Specifically, an AU includes one or more pictures associated with an output time. For example, an AU may include a single picture in a single-layer bitstream and a picture of each layer in a multi-layer bitstream. Each picture of an AU may be subdivided into slices that are each included in a corresponding VCL NAL unit. Thus, the DU 553 may include one or more pictures, one or more slices of a picture, or a combination thereof. Also, parameters used to decode the AU, the picture, and / or the slice may be included in the non-VCL NAL unit. Thus, the DU 553 contains non-VCL NAL units that contain data necessary to support decoding of the VCL NAL units in the DU 553. The CPB 543 is a first-in, first-out buffer for the HRD 500. The CPB 543 contains the DUs 553 that contain video data in decode order. The CPB 543 stores the video data for use during bitstream conformance validation.
[0081] The CPB 543 forwards the DU 553 to the decoding process component 545. The decoding process component 545 is a component that complies with the VVC standard. For example, the decoding process component 545 may emulate the decoder 400 used by an end user. The decoding process component 545 decodes the DU 553 at a rate that can be achieved by an exemplary end user decoder. If the decoding process component 545 cannot decode the DU 553 fast enough to prevent overflow of the CPB 543, then the bitstream 551 does not comply with the standard and should be re-encoded.
[0082] The decoding process component 545 decodes the DU 553 to generate a decoded DU 555. The decoded DU 555 includes a decoded picture. The decoded DU 555 is forwarded to the DPB 547. The DPB 547 may be substantially similar to the decoded picture buffer components 223, 323, and / or 423. To support inter-prediction, pictures obtained from the decoded DU 555 and marked for use as reference pictures 556 are returned to the decoding process component 545 to support further decoding. The DPB 547 outputs the decoded video sequence as a series of pictures 557. The pictures 557 are reconstructed pictures that generally reflect pictures encoded into the bitstream 551 by an encoder.
[0083] Picture 557 is forwarded to the output cropping component 549, which is configured to apply an adaptive cropping window to picture 557. This results in output cropped picture 559. Output cropped picture 559 is a perfectly reconstructed picture. Thus, output cropped picture 559 mimics what an end user would see when decoding bitstream 551. In this way, the encoder can review output cropped picture 559 to ensure that the encoding is good.
[0084] The HRD 500 is initialized based on HRD parameters in the bitstream 551. For example, the HRD 500 may read HRD parameters from a VPS, SPS, and / or SEI message. The HRD 500 may then perform conformance testing operations on the bitstream 551 based on information in such HRD parameters. As a specific example, the HRD 500 may determine one or more CPB delivery schedules from the HRD parameters. The delivery schedules specify the timing of delivery of video data to and from memory locations such as the CPB and / or DPB. Thus, the CPB delivery schedules specify the timing of delivery of AUs, DUs 553, and / or pictures to and from the CPB 543. It should be noted that the HRD 500 may use a DPB delivery schedule of the DPB 547 similar to the CPB delivery schedule.
[0085] Video may be encoded into different layers and / or OLSs for use by decoders with various levels of hardware capabilities and for various network conditions. The CPB delivery schedule is selected to reflect these issues. Thus, the upper layer sub-bitstreams are designated for optimal hardware and network conditions, and therefore the upper layers may receive one or more CPB delivery schedules that use a large amount of memory in the CPB 543 and a short delay for the transfer of the DU 553 to the DPB 547. Similarly, the lower layer sub-bitstreams are designated for limited decoder hardware capabilities and / or poor network conditions. Thus, the lower layers may receive one or more CPB delivery schedules that use a small amount of memory in the CPB 543 and a longer delay for the transfer of the DU 553 to the DPB 547. The OLSs, layers, sub-layers, or combinations thereof may then be tested according to the corresponding delivery schedules to ensure that the resulting sub-bitstreams can be correctly decoded under the conditions expected for the sub-bitstreams. Thus, the HRD parameters in the bitstream 551 may indicate the CPB delivery schedule and include sufficient data to enable the HRD 500 to determine the CPB delivery schedule and correlate the CPB delivery schedule to a corresponding OLS, layer, and / or sublayer.
[0086] 6 is a schematic diagram illustrating an exemplary multi-layer video sequence 600. The multi-layer video sequence 600 may be encoded by an encoder, such as the codec system 200 and / or the encoder 300, and decoded by a decoder, such as the codec system 200 and / or the decoder 400, according to, for example, the method 100. Additionally, the multi-layer video sequence 600 may be checked for standard conformance by an HRD, such as the HRD 500. The multi-layer video sequence 600 is included to illustrate an exemplary application of layers in an encoded video sequence. The multi-layer video sequence 600 is any video sequence that uses multiple layers, such as layer N 631 and layer N+1 632.
[0087] In one example, the multi-layer video sequence 600 may use inter-layer prediction 621. Inter-layer prediction 621 is applied between pictures 611, 612, 613, and 614 and pictures 615, 616, 617, and 618 of different layers. In the illustrated example, pictures 611, 612, 613, and 614 are part of layer N+1 632, and pictures 615, 616, 617, and 618 are part of layer N 631. A layer, such as layer N 631 and / or layer N+1 632, is a group of pictures that are all associated with similar values of characteristics such as similar size, quality, resolution, signal-to-noise ratio, capacity, etc. A layer may be formally defined as a set of VCL NAL units that share the same layer ID and associated non-VCL NAL units. A VCL NAL unit is a NAL unit that is coded to contain video data, such as a coded slice of a picture. A non-VCL NAL unit is a NAL unit that contains non-video data, such as syntax and / or parameters that support decoding the video data, performing conformance checks, or other operations.
[0088] In the illustrated example, layer N+1 632 is associated with a larger image size than layer N 631. Thus, in this example, the picture size (e.g., larger height and width, and therefore more samples) of pictures 611, 612, 613, and 614 of layer N+1 632 is larger than the picture size of pictures 615, 616, 617, and 618 of layer N 631. However, such pictures may be separated between layer N+1 632 and layer N 631 by other characteristics. Although only two layers, layer N+1 632 and layer N 631, are shown, a set of pictures may be separated into any number of layers based on associated characteristics. Layer N+1 632 and layer N 631 may also be indicated by a layer ID. A layer ID is an item of data associated with a picture and indicates that the picture is part of the indicated layer. Thus, each picture 611-618 may be associated with a corresponding layer ID to indicate which layer N+1 632 or layer N 631 contains the corresponding picture. For example, the layer ID may include a NAL unit header layer ID (nuh_layer_id), which is a syntax element that specifies an identifier of a layer that contains a NAL unit (e.g., containing slices and / or parameters of a picture in a layer). A layer associated with a lower quality / smaller picture size / smaller bitstream size, such as layer N 631, is generally assigned a lower layer ID and is referred to as a lower layer. Furthermore, a layer associated with a higher quality / larger picture size / larger bitstream size, such as layer N+1 632, is generally assigned a higher layer ID and is referred to as a higher layer.
[0089] Pictures 611-618 in different layers 631-632 are configured to be alternatively displayed. As a specific example, a decoder may decode and display picture 615 at the current display time if a smaller picture is desired, or the decoder may decode and display picture 611 at the current display time if a larger picture is desired. Thus, pictures 611-614 in higher layer N+1 632 contain substantially the same image data as corresponding pictures 615-618 in lower layer N 631 (despite differences in picture size). Specifically, picture 611 contains substantially the same image data as picture 615, picture 612 contains substantially the same image data as picture 616, and so on.
[0090] Pictures 611-618 may be coded by referencing other pictures 611-618 in the same layer N 631 or N+1 632. Coding a picture with reference to another picture in the same layer results in inter prediction 623. Inter prediction 623 is indicated by a solid arrow. For example, picture 613 may be coded by using inter prediction 623 using one or two of pictures 611, 612, and / or 614 in layer N+1 632 as references, one picture being referenced for unidirectional inter prediction and / or two pictures being referenced for bidirectional inter prediction. Furthermore, picture 617 may be coded by using inter prediction 623 using one or two of pictures 615, 616, and / or 618 in layer N 631 as references, one picture being referenced for unidirectional inter prediction and / or two pictures being referenced for bidirectional inter prediction. When performing inter prediction 623, a picture may be referred to as a reference picture when it is used as a reference for another picture in the same layer. For example, picture 612 may be a reference picture used to encode picture 613 according to inter prediction 623. Inter prediction 623 may also be referred to as intra-layer prediction in a multi-layer context. Thus, inter prediction 623 is a mechanism for encoding samples of a current picture by referencing indicated samples in a reference picture different from the current picture, where the reference picture and the current picture are in the same layer.
[0091] Pictures 611-618 can also be coded by referencing other pictures 611-618 in different layers. This process is known as inter-layer prediction 621 and is indicated by dashed arrows. Inter-layer prediction 621 is a mechanism for coding samples of a current picture by referencing indicated samples in reference pictures where the current picture and the reference picture are in different layers and therefore have different values of nuh_layer_id. For example, a picture in a lower layer N 631 can be used as a reference picture to code a corresponding picture in a higher layer N+1 632. As a specific example, picture 611 can be coded by referencing picture 615 according to inter-layer prediction 621. In such a case, picture 615 is used as an inter-layer reference picture. An inter-layer reference picture is a reference picture used for inter-layer prediction 621. In most cases, inter-layer prediction 621 is constrained so that a current picture, such as picture 611, can only use inter-layer reference pictures that are included in the same AU 627 and are in a lower layer, such as picture 615. When multiple layers (e.g., more than two) are available, inter-layer prediction 621 can encode / decode the current picture based on multiple inter-layer reference pictures that are in a lower level than the current picture.
[0092] A video encoder can use the multi-layer video sequence 600 to encode pictures 611-618 by many different combinations and / or permutations of inter-prediction 623 and inter-layer prediction 621. For example, picture 615 may be encoded according to intra-prediction. Pictures 616-618 may then be encoded according to inter-prediction 623 by using picture 615 as a reference picture. Furthermore, picture 611 may be encoded according to inter-layer prediction 621 by using picture 615 as an inter-layer reference picture. Pictures 612-614 may then be encoded according to inter-prediction 623 by using picture 611 as a reference picture. Thus, a reference picture can function as both a single-layer reference picture and an inter-layer reference picture for different encoding mechanisms. By encoding the upper layer N+1 632 pictures based on the lower layer N 631 pictures, the upper layer N+1 632 can avoid using intra prediction, which has much lower coding efficiency than inter prediction 623 and inter-layer prediction 621. In this way, the poor coding efficiency of intra prediction may be limited to pictures with the smallest / lowest quality and thus limited to coding a minimum amount of video data. Pictures used as reference pictures and / or inter-layer reference pictures may be indicated in entries of a reference picture list included in a reference picture list structure.
[0093] Pictures 611-618 may also be included in an access unit (AU) 627. AU 627 is a set of coded pictures that are included in different layers and have the same output time during decoding. Thus, coded pictures in the same AU 627 are scheduled to be output from the DPB at the same time in the decoder. For example, pictures 614 and 618 are in the same AU 627. Pictures 613 and 617 are in a different AU 627 than pictures 614 and 618. Pictures 614 and 618 in the same AU 627 may be alternatively displayed. For example, picture 618 may be displayed when a small picture size is desired, and picture 614 may be displayed when a large picture size is desired. When a large picture size is desired, picture 614 is output, and picture 618 is only used for inter-layer prediction 621. In this case, picture 618 is discarded without being output when inter-layer prediction 621 is completed.
[0094] For the purpose of conformance testing, AU 627 can be further subdivided into DU 628. A DU 628 may be defined as an AU 627 or a subset of an AU 627 that includes one or more VCL NAL units and associated non-VCL NAL units within the AU 627. In other words, a DU 628 may include a single coded picture along with syntax elements to support decoding of the picture. In a single-layer bitstream, a DU 628 is an AU 627. In a multi-layer bitstream, a DU 628 is a subset of an AU 627. The distinction between AU 627 and DU 628 can be used when performing conformance testing in the HRD. For example, some conformance tests are configured to be applied to each AU 627, and other conformance tests are configured to be applied to each DU 628 within each AU 627. Conformance tests applied to one or more complete AUs 627 can be referred to as AU-level operations. Conformance tests applied to one or more DUs 628 can be referred to as DU-level operations. Thus, the AU level is a description of operations that apply to one or more complete AUs 627 and thus to one or more complete picture groups that share the same output time. Also, the DU level is a description of operations that apply to one or more complete DUs 628 and thus to one or more pictures.
[0095] 7 is a schematic diagram illustrating an exemplary bitstream 700. For example, the bitstream 700 may be generated by the codec system 200 and / or the encoder 300 for decoding by the codec system 200 and / or the decoder 400 according to the method 100. Furthermore, the bitstream 700 may include the multi-layer video sequence 600. Furthermore, the bitstream 700 may include various parameters for controlling the operation of an HRD, such as the HRD 500. Based on such parameters, the HRD may check the bitstream 700 for conformance to a standard before sending it to the decoder for decoding.
[0096] The bitstream 700 includes a VPS 711, one or more SPSs 713, multiple picture parameter sets (PPSs) 715, multiple slice headers 717, image data 720, a buffering period (BP) SEI message 716, a PT SEI message 718, and / or a DUI SEI message 719. The VPS 711 includes data related to the entire bitstream 700. For example, the VPS 711 may include data related OLS, layers, and / or sublayers used in the bitstream 700. The SPS 713 includes sequence data common to all pictures in the coded video sequences included in the bitstream 700. For example, each layer may include one or more coded video sequences, and each coded video sequence may reference the SPS 713 for corresponding parameters. The parameters in the SPS 713 may include picture sizing, bit depth, coding tool parameters, bit rate limits, etc. It should be noted that while each sequence references an SPS 713, in some examples a single SPS 713 may contain data for multiple sequences. The PPS 715 contains parameters that apply to an entire picture. Thus, each picture in a video sequence may reference a PPS 715. It should be noted that while each picture references a PPS 715, in some examples a single PPS 715 may contain data for multiple pictures. For example, multiple similar pictures may be coded according to similar parameters. In such a case, a single PPS 715 may contain data for such similar pictures. The PPS 715 may indicate coding tools, quantization parameters, offsets, etc. available for slices in the corresponding picture.
[0097] The slice header 717 includes parameters specific to each slice in a picture. Thus, there may be one slice header 717 for each slice 727 in a video sequence. The slice header 717 may include slice type information, filtering information, prediction weights, tile entry points, deblocking parameters, etc. Note that in some examples, the bitstream 700 may also include a picture header, which is a syntax structure that includes parameters that apply to all slices 727 in a single picture 725. For this reason, picture headers and slice headers 717 may be used interchangeably in some contexts. For example, certain parameters may be moved between slice headers 717 and picture headers depending on whether such parameters are common to all slices 727 in a picture 725.
[0098] Image data 720 includes video data encoded according to inter prediction and / or intra prediction, as well as corresponding transformed and quantized residual data. For example, image data 720 may include layers 723, pictures 725, and / or slices 727. Layers 723 are sets of VCL NAL units and associated non-VCL NAL units that share specified characteristics (e.g., a common resolution, frame rate, image size, etc.) as indicated by a layer ID such as nuh_layer_id. For example, layer 723 may include a set of pictures 725 that share the same nuh_layer_id and associated parameter sets and / or SEI messages. Layer 723 may be substantially similar to layers 631 and / or 632. nuh_layer_id is a syntax element that specifies an identifier of layer 723 that includes at least one NAL unit. For example, the lowest quality layer 723, known as the base layer, may include the lowest value of nuh_layer_id, with increasing values of nuh_layer_id for higher quality layers 723. Thus, the lower layer is the layer 723 with a lower value of nuh_layer_id, and the higher layer is the layer 723 with a higher value of nuh_layer_id. The layers 723 may also include an OLS. The OLS is a set of layers 723 where one or more layers 723 are designated as output layers. An output layer is any layer 723 that is designated for output and display at a decoder. Layers 723 that are not output layers may be included in the OLS to support decoding of the output layers, for example, via inter-layer prediction.
[0099] A picture 725 is an array of luma samples and / or array of chroma samples that generate a frame or a field thereof. For example, a picture 725 is a coded image that may be output for display or used to support coding of other pictures 725 for output. A picture 725 includes one or more slices 727. A slice 727 may be defined as an integer number of complete tiles or an integer number of consecutive complete coding tree unit (CTU) rows (e.g., within a tile) of a picture 725 that are exclusively contained in a single NAL unit. A slice 727 is further subdivided into CTUs and / or coding tree blocks (CTBs). A CTU is a group of samples of a given size that can be divided in a coding tree. A CTB is a subset of a CTU and includes the luma or chroma components of the CTU. The CTUs / CTBs are further subdivided into coding blocks based on the coding tree. The coding blocks can then be coded / decoded according to a prediction mechanism.
[0100] The SEI message is a syntax structure with specified semantics that conveys information that is not required in the decoding process to determine values of samples in a decoded picture. For example, the SEI message may include data for supporting the HRD process or other support data that is not directly related to the decoding of the bitstream 700 at the decoder. The BP SEI message 716 is an SEI message that includes HRD parameters for initializing the HRD to manage the CPB for testing the corresponding OLS and / or layer 723. The PT SEI message 718 is an SEI message that includes HRD parameters for managing the distribution information of the AUs in the CPB and / or DPB for testing the corresponding OLS and / or layer 723. The DUI SEI message 719 is an SEI message that includes HRD parameters for managing the distribution information of the DUs in the CPB and / or DPB for testing the corresponding OLS and / or layer 723.
[0101] It should be noted that the bitstream 700 may be encoded as a sequence of NAL units. A NAL unit is a container for video data and / or supporting syntax. A NAL unit may be a VCL NAL unit or a non-VCL NAL unit. A VCL NAL unit is a NAL unit that is encoded to contain video data. Specifically, a VCL NAL unit includes a slice 727 and an associated slice header 717. A non-VCL NAL unit is a NAL unit that contains non-video data, such as syntax and / or parameters that support decoding the video data, performing conformance checks, or other operations. A non-VCL NAL unit may include a VPS NAL unit, an SPS NAL unit, and a PPS NAL unit, which include a VPS 711, an SPS 713, and a PPS 715, respectively. A non-VCL NAL unit may also include an SEI NAL unit, which may include a BP SEI message 716, a PT SEI message 718, and / or a DUI SEI message 719. Thus, a SEI NAL unit is a NAL unit that contains a SEI message. It should be noted that the foregoing list of NAL units is exemplary and not exhaustive.
[0102] An HRD, such as the HRD 500, can be used to check the bitstream 700 for conformance to a standard. The HRD can perform conformance tests on the bitstream 700 using the HRD parameters. The HRD parameters 735 can be stored in a syntax structure in the VPS 711 and / or SPS 713. The HRD parameters 735 are syntax elements that initialize and / or define the operating conditions of the HRD. The BP SEI message 716, the PT SEI message 718, and / or the DUI SEI message 719 include parameters that further define the operation of the HRD for a particular sequence, AU, and / or DU based on the HRD parameters 735 in the VPS 711 and / or SPS 713.
[0103] In some video coding systems, the BP SEI message 716, the PT SEI message 718, and / or the DUI SEI message 719 may include parameters that directly reference the VPS 711. This dependency creates certain difficulties. For example, the bitstream 700 may be encoded with various layers 723 and / or OLS. When the decoder requests an OLS, the encoder, slicer, and / or intermediate storage server may send the OLS for the layers 723 to the decoder based on the decoder capabilities and / or based on the current network conditions. Specifically, the encoder, slicer, and / or storage server uses a bitstream extraction process to remove the layers 723 outside the OLS from the bitstream 700 and send the remaining layers 723 toward the decoder. This process allows many different decoders to each obtain a different representation of the bitstream 700 based on the conditions on the decoder side. As mentioned above, the VPS 711 includes data related to the OLS and / or layers 723. However, some OLSs include a single layer 723. When an OLS with a single layer 723 is transmitted to a decoder, the decoder may not need the data in the VPS 711 because the data in the SPS 713, PPS 715, and slice header 717 may be sufficient to decode the bitstream of the single layer 723. To avoid transmitting unnecessary data, the encoder, slicer, and / or storage server may remove the VPS 711 as part of the bitstream extraction process. This approach may be beneficial because it may increase the coding efficiency of the sub-bitstream that is extracted and transmitted to the decoder. However, dependencies of the BP SEI message 716, PT SEI message 718, and / or DUI SEI message 719 may result in errors when the VPS 711 is removed. Specifically, omitting the VPS 711 may cause the SEI messages to return errors because the data on which the SEI messages depend within the VPS 711 is not received at the decoder when the VPS 711 is removed.Additionally, the HRD checks the bitstream for conformance by mimicking a decoder. Thus, the HRD may check an OLS with a single layer 723 without parsing the VPS 711. Thus, the HRD of some systems may not be able to resolve parameters of the BP SEI message 716, the PT SEI message 718, and / or the DUI SEI message 719, and therefore the HRD may not be able to check such an OLS for conformance.
[0104] The bitstream 700 is improved to correct the above problem. Specifically, parameters are added to the BP SEI message 716, the PT SEI message 718, and / or the DUI SEI message 719 to remove the dependency on the VPS 711. Thus, the BP SEI message 716, the PT SEI message 718, and / or the DUI SEI message 719 can be fully parsed and resolved by the HRD and / or the decoder even when the VPS 711 is omitted for an OLS that includes a single layer 723. The dependency can be removed by including du_hrd_params_present_flag 731 and du_cpb_params_in_pic_timing_sei_flag 733 in one or more of the SEI messages. In the illustrated example, du_hrd_params_present_flag 731 and du_cpb_params_in_pic_timing_sei_flag 733 are included in the BP SEI message 716.
[0105] du_hrd_params_present_flag 731 is a syntax element that specifies whether the HRD should operate at the AU level or the DU level. The AU level is a description of the operation as it applies to one or more AUs as a whole (e.g., applied to one or more picture groups that share the same output time). The DU level is a description of the operation as it applies to one or more DUs as a whole (e.g., applied to one or more pictures). In a specific example, du_hrd_params_present_flag 731 is set to 1 if the DU level HRD parameter is present and specifies that the HRD can operate at the AU level or the DU level, and is set to 0 if the DU level HRD parameter is absent and specifies that the HRD operates at the AU level.
[0106] If the HRD operates at the DU level (e.g., du_hrd_params_present_flag 731 is set to 1), the HRD should refer to DU parameters such as CPB Removal Delay 737. CPB Removal Delay 737 is a syntax element that specifies the CPB removal delay of a DU, which is the time that one or more DUs (pictures 725) can remain in the CPB before being forwarded to the DPB of the HRD. However, depending on the example, the relevant CPB Removal Delay 737 may be included in the PT SEI message 718 or the DUI SEI message 719. du_cpb_params_in_pic_timing_sei_flag 733 is a syntax element that specifies whether the DU-level CPB Removal Delay 737 parameter is present in the PT SEI message 718 or the DUI SEI message 719. In a particular example, du_cpb_params_in_pic_timing_sei_flag 733 is set to 1 when a DU-level CPB removal delay 737 parameter is present in the PT SEI message 718 and specifies that the DUI SEI message 719 is not available. Additionally, du_cpb_params_in_pic_timing_sei_flag 733 can be set to 0 when a DU-level CPB removal delay 737 parameter is present in the DUI SEI message 719 and specifies that the PT SEI message 718 does not include a DU-level CPB removal delay 737 parameter.
[0107] By including du_hrd_params_present_flag 731 and du_cpb_params_in_pic_timing_sei_flag 733 in the SEI message, the SEI message does not depend on the VPS 711. Therefore, even if the VPS 711 is omitted from the bitstream 700, the BP SEI message 716, the PT SEI message 718, and / or the DUI SEI message 719 can be parsed. Therefore, the HRD can properly parse the BP SEI message 716, the PT SEI message 718, and / or the DUI SEI message 719 and perform conformance testing for the OLS with a single layer. Furthermore, the decoder can parse and use syntax elements in the BP SEI message 716, the PT SEI message 718, and / or the DUI SEI message 719 as necessary to support the decoding process. As a result, the encoder and decoder can improve their functionality and avoid errors. Additionally, removing the dependency between the SEI messages and the VPS 711 supports the removal of the VPS 711 in certain cases, which improves coding efficiency and thus reduces processor, memory, and / or network signaling resource usage in both the encoder and decoder in such cases.
[0108] The aforementioned information will now be explained in more detail below. Layered video coding is also referred to as scalable coding or video coding with scalability. Scalability in video coding may be supported by using multi-layer coding techniques. A multi-layer bitstream includes a base layer (BL) and one or more enhancement layers (EL). Examples of scalability include spatial scalability, quality / signal-to-noise ratio (SNR) scalability, multi-view scalability, frame rate scalability, etc. When a multi-layer coding technique is used, a picture or a part thereof may be coded without using a reference picture (intra prediction), by referencing a reference picture in the same layer (inter prediction), and / or by referencing a reference picture in another layer (inter-layer prediction). A reference picture used for inter-layer prediction of a current picture is called an inter-layer reference picture (ILRP). FIG. 6 shows an example of multi-layer coding for spatial scalability, where pictures of different layers have different resolutions.
[0109] Some video coding families provide support for scalability in profiles separated from profiles for single-layer coding. Scalable Video Coding (SVC) is a scalable extension of Advanced Video Coding (AVC) that supports spatial, temporal, and quality scalability. For SVC, a flag is signaled in each macroblock (MB) in an EL picture to indicate whether the EL MB is predicted using a collocated block from the lower layer. Prediction from the collocated block may include texture, motion vectors, and / or coding mode. SVC implementations may not directly reuse unmodified AVC implementations in their design. The syntax and decoding process of SVC EL macroblocks differs from that of AVC.
[0110] Scalable HEVC (SHVC) is an extension of HEVC that supports spatial and quality scalability. Multiview HEVC (MV-HEVC) is an extension of HEVC that provides support for multiview scalability. 3D HEVC (3D-HEVC) is an extension of HEVC that provides support for more advanced and efficient 3D video coding than MV-HEVC. Temporal scalability can be included as an integral part of a single-layer HEVC codec. In the multi-layer extension of HEVC, decoded pictures used for inter-layer prediction originate only from the same AU and are treated as long-term reference pictures (LTRPs). Such pictures are assigned a reference index in a reference picture list along with other temporal reference pictures in the current layer. Inter-layer prediction (ILP) is achieved at the prediction unit level by setting the value of the reference index to refer to the inter-layer reference picture in the reference picture list. Spatial scalability involves resampling a reference picture or a portion of it when the ILRP has a different spatial resolution than the current picture being coded or decoded. The resampling of the reference picture can be achieved either at the picture level or at the coding block level.
[0111] VVC may also support layered video coding. A VVC bitstream may include multiple layers. The layers may all be independent of each other. For example, each layer may be coded without inter-layer prediction. In this case, each layer is also called a simulcast layer. In some cases, some of the layers are coded using ILP. A flag in the VPS may indicate whether a layer is a simulcast layer or whether some layers use ILP. If some layers use ILP, layer dependencies between layers are also signaled in the VPS. Unlike SHVC and MV-HEVC, VVC may not specify an OLS. An OLS includes a set of specified layers, and one or more layers in the set of layers are specified to be output layers. An output layer is a layer of the OLS that is output. In some implementations of VVC, if a layer is a simulcast layer, only one layer may be selected for decoding and output. In some implementations of VVC, when any layer uses ILP, the entire bitstream including all layers is specified to be decoded. Also, of these layers, one layer is specified to be an output layer. The output layer may be indicated as the top layer only, all layers, or the top layer plus a designated set of lower layers.
[0112] The above-mentioned aspects have some problems. For example, the nuh_layer_id values of SPS, PPS, and APS NAL units may not be properly constrained. In addition, the TemporalId value of the SEI NAL unit may not be properly constrained. Also, when reference picture resampling is enabled and the spatial resolutions of pictures in the CLVS are different, the setting of NoOutputOfPriorPicsFlag may not be properly specified. Also, in some video coding systems, the suffix SEI message cannot be included in the scalable nesting SEI message. As another example, the buffering period, picture timing, and decoding unit information SEI messages may include parsing dependencies on the VPS and / or SPS.
[0113] Generally, this disclosure describes video coding improvement techniques. The techniques are based on VVC. However, these techniques also apply to layered video coding based on other video codec specifications.
[0114] One or more of the problems mentioned above may be solved as follows: The nuh_layer_id values of the SPS, PPS, and APS NAL units are appropriately constrained herein. The TemporalId values of the SEI NAL units are appropriately constrained herein. The setting of NoOutputOfPriorPicsFlag is appropriately specified when reference picture resampling is enabled and pictures in the CLVS have different spatial resolutions. A suffix SEI message can be included in a scalable nesting SEI message. The parsing dependency of BP, PT, and DUI SEI messages on a VPS or SPS can be removed by repeating the syntax element decoding_unit_hrd_params_present_flag in the BP SEI message syntax, the syntax elements decoding_unit_hrd_params_present_flag and decoding_unit_cpb_params_in_pic_timing_sei_flag in the PT SEI message syntax, and the syntax element decoding_unit_cpb_params_in_pic_timing_sei_flag in the DUI SEI message.
[0115] An exemplary implementation of the aforementioned mechanism is as follows: Exemplary general NAL unit semantics are as follows:
[0116] nuh_temporal_id_plus1 minus 1 specifies the temporal identifier of the NAL unit. The value of nuh_temporal_id_plus1 should not be equal to 0. The variable TemporalId can be derived as follows: TemporalId=nuh_temporal_id_plus1-1 When nal_unit_type is in the range from IDR_W_RADL to RSV_IRAP_13, inclusive, TemporalId shall be equal to 0. When nal_unit_type is equal to STSA_NUT, TemporalId shall not be equal to 0.
[0117] The value of TemporalId MUST be the same for all VCL NAL units of an access unit. The value of TemporalId of a coded picture, layer access unit, or access unit MAY be the value of TemporalId of the VCL NAL units of the coded picture, layer access unit, or access unit. The value of TemporalId of a sub-layer representation MAY be the maximum value of TemporalId of all VCL NAL units in the sub-layer representation.
[0118] The value of TemporalId for non-VCL NAL units is constrained as follows: if nal_unit_type is equal to DPS_NUT, VPS_NUT, or SPS_NUT, then TemporalId shall be equal to 0 and the TemporalId of the access unit that contains the NAL unit shall be equal to 0. Otherwise, if nal_unit_type is equal to EOS_NUT or EOB_NUT, then TemporalId shall be equal to 0. Otherwise, if nal_unit_type is equal to AUD_NUT, FD_NUT, PREFIX_SEI_NUT, or SUFFIX_SEI_NUT, then TemporalId shall be equal to the TemporalId of the access unit that contains the NAL unit. Otherwise, if nal_unit_type is equal to PPS_NUT or APS_NUT, then TemporalId shall be greater than or equal to the TemporalId of the access unit that contains the NAL unit. If the NAL unit is a non-VCL NAL unit, the value of TemporalId MUST be equal to the minimum of the TemporalId values of all access units to which the non-VCL NAL unit applies. If nal_unit_type is equal to PPS_NUT or APS_NUT, TemporalId MAY be greater than or equal to the TemporalId of the containing access unit. This is because all PPSs and APSs may be included at the beginning of the bitstream. Furthermore, the first coded picture has TemporalId equal to 0.
[0119] Exemplary sequence parameter set RBSP semantics are as follows: An SPS RBSP must be available to the decoding process before it can be referenced. An SPS may be included in at least one access unit with TemporalId equal to 0, or may be provided via an external mechanism. An SPS NAL unit that contains an SPS may be constrained to have a nuh_layer_id equal to the lowest nuh_layer_id value of the PPS NAL units that reference the SPS.
[0120] Exemplary picture parameter set RBSP semantics are as follows: The PPS RBSP must be available to the decoding process before it is referenced. The PPS should be included in at least one access unit with a TemporalId less than or equal to the TemporalId of the PPS NAL unit, or provided via an external mechanism. The PPS NAL unit that contains the PPS RBSP should have a nuh_layer_id equal to the lowest nuh_layer_id value of the coded slice NAL units that reference the PPS.
[0121] The semantics of an example adaptation parameter set are as follows: Each APS RBSP must be available to the decoding process before it is referenced. The APS should also be included in at least one access unit with a TemporalId less than or equal to the TemporalId of the coded slice NAL unit that references the APS or is provided via an external mechanism. An APS NAL unit can be shared by pictures / slices of multiple layers. The nuh_layer_id of the APS NAL unit must be equal to the lowest nuh_layer_id value of the coded slice NAL units that reference the APS NAL unit. Alternatively, the APS NAL unit may not be shared by pictures / slices of multiple layers. The nuh_layer_id of the APS NAL unit must be equal to the nuh_layer_id of the slice that references the APS.
[0122] In one example, removal of a picture from the DPB before decoding of the current picture is described as follows: Removal of a picture from the DPB before decoding of the current picture (but after parsing the slice header of the first slice of the current picture) may be performed at the CPB removal time of the first decoding unit of access unit n (containing the current picture). This proceeds as follows: A decoding process for reference picture list construction is called, and a decoding process for reference picture marking is called.
[0123] If the current picture is a Coded Layer Video Sequence Start (CLVSS) picture that is not picture 0, the following ordered steps are applied: For the decoder under test, the variable NoOutputOfPriorPicsFlag may be derived as follows: If the values of pic_width_in_luma_samples, pic_height_max_in_luma_samples, chroma_format_idc, separate_colour_plane_flag, bit_depth_luma_minus8, bit_depth_chroma_minus8, or sps_max_dec_pic_buffering_minus1[Htid] derived from the SPS differ from the values of pic_width_in_luma_samples, pic_height_in_luma_samples, chroma_format_idc, separate_colour_plane_flag, bit_depth_luma_minus8, bit_depth_chroma_minus8, or sps_max_dec_pic_buffering_minus1[Htid], respectively, derived from the SPS referenced by the previous picture, then NoOutputOfPriorPicsFlag may be set to 1 by the decoder under test regardless of the value of no_output_of_prior_pics_flag. Under these conditions, it may be preferable to set NoOutputOfPriorPicsFlag equal to no_output_of_prior_pics_flag, where the decoder under test is capable of setting NoOutputOfPriorPicsFlag to 1. Otherwise, NoOutputOfPriorPicsFlag may be set equal to no_output_of_prior_pics_flag.
[0124] The obtained value of NoOutputOfPriorPicsFlag for the decoder under test is applied to the HRD, so that if the value of NoOutputOfPriorPicsFlag is 1, all picture storage buffers in the DPB are emptied without outputting any pictures they contain, and the DPB fullness is set to zero. If both of the following conditions apply for any picture k in the DPB, then any such picture k in the DPB is removed from the DPB: Picture k is marked as unused for reference, and either picture k has a PictureOutputFlag equal to 0 or the corresponding DPB output time is less than or equal to the CPB removal time of the first decoding unit (denoted as decoding unit m) of the current picture n. This may occur if DpbOutputTime[k] is less than or equal to DuCpbRemovalTime[m]. For each picture removed from the DPB, the DPB fullness is decremented by 1.
[0125] An exemplary output or removal of a picture from the DPB is as follows: Output and removal of a picture from the DPB before decoding of the current picture (but after parsing the slice header of the first slice of the current picture) may occur when the first decoding unit of the access unit containing the current picture is removed from the CPB and proceeds as follows: The decoding process for reference picture list construction and the decoding process for reference picture marking are invoked.
[0126] If the current picture is a CLVSS picture that is not picture 0, the following ordered steps may be applied: For the decoder under test, the variable NoOutputOfPriorPicsFlag may be derived as follows: If the values of pic_width_in_luma_samples, pic_height_max_in_luma_samples, chroma_format_idc, separate_colour_plane_flag, bit_depth_luma_minus8, bit_depth_chroma_minus8 or sps_max_dec_pic_buffering_minus1[Htid] derived from the SPS differ from the values of pic_width_in_luma_samples, pic_height_in_luma_samples, chroma_format_idc, separate_colour_plane_flag, bit_depth_luma_minus8, bit_depth_chroma_minus8 or sps_max_dec_pic_buffering_minus1[Htid] derived from the SPS referenced by the previous picture, respectively, then NoOutputOfPriorPicsFlag may be set to 1 by the decoder under test regardless of the value of no_output_of_prior_pics_flag. Under these conditions, it is preferable to set NoOutputOfPriorPicsFlag equal to no_output_of_prior_pics_flag, in which case the decoder under test may set NoOutputOfPriorPicsFlag to 1. Otherwise, NoOutputOfPriorPicsFlag may be set equal to no_output_of_prior_pics_flag.
[0127] The value of NoOutputOfPriorPicsFlag derived for the decoder under test may be applied to the HRD as follows: If the value of NoOutputOfPriorPicsFlag is 1, all picture storage buffers in the DPB may be emptied without outputting the pictures they contain, and the DPB fullness may be set equal to 0. Otherwise (when the value of NoOutputOfPriorPicsFlag is equal to 0), all picture storage buffers containing pictures that do not need to be output and are marked as not to be used for reference may be emptied (without outputting), and by repeatedly invoking the bumping process, all non-empty picture storage buffers in the DPB may be emptied and the DPB fullness may be set equal to 0.
[0128] Otherwise (the current picture is not a CLVSS picture), all picture storage buffers containing pictures marked as not needed for output and unused for reference are emptied (without output). For each picture storage buffer emptied, the DPB fullness is decremented by one. When one or more of the following conditions are true, the bumping process is repeatedly called with further decrements of the DPB fullness by one for each additional picture storage buffer emptied until none of the following conditions are true: A condition is that the number of pictures in the DPB marked as needed for output is greater than sps_max_num_reorder_pics[Htid]. Another condition is that there is at least one picture in the DPB marked as needed for output with sps_max_latency_increase_plus1[Htid] not equal to 0 and the associated variable PicLatencyCount is greater than or equal to SpsMaxLatencyPictures[Htid]. Another condition is that the number of pictures in the DPB is greater than or equal to SubDpbSize[Htid].
[0129] An exemplary general SEI message syntax is as follows:
[0130] [Table 1]
[0131] An exemplary scalable nesting SEI message syntax is as follows:
[0132] [Table 2]
[0133] Exemplary scalable nesting SEI message semantics are as follows: A scalable nesting SEI message provides a mechanism for associating an SEI message with a particular layer in the context of a particular OLS or with a particular layer not in the context of an OLS. A scalable nesting SEI message contains one or more SEI messages. An SEI message included in a scalable nesting SEI message is also referred to as a scalably nested SEI message. Bitstream conformance may require that the following restrictions apply when an SEI message is included in a scalable nesting SEI message:
[0134] A scalable nesting SEI message should not contain an SEI message with payloadType equal to 132 (decoded picture hash) or 133 (scalable nesting). If a scalable nesting SEI message contains a buffering period, picture timing, or decoding unit information SEI message, the scalable nesting SEI message should not contain any other SEI message with payloadType not equal to 0 (buffering period), 1 (picture timing), or 130 (decoding unit information).
[0135] Bitstream conformance may also require that the following restrictions apply to the value of nal_unit_type of an SEI NAL unit that contains a scalable nesting SEI message: If the scalable nesting SEI message contains an SEI message with payloadType equal to 0 (buffering duration), 1 (picture timing), 130 (decoded unit information), 145 (dependent RAP indication), or 168 (frame field information), the SEI NAL unit that contains the scalable nesting SEI message SHOULD have nal_unit_type set equal to PREFIX_SEI_NUT. If the scalable nesting SEI message contains an SEI message with payloadType (decoded picture hash) equal to 132, the SEI NAL unit that contains the scalable nesting SEI message SHOULD have nal_unit_type set equal to SUFFIX_SEI_NUT.
[0136] nesting_ols_flag may be set equal to 1 to specify that the scalably nested SEI message applies to a particular layer in the context of a particular OLS. nesting_ols_flag may be set equal to 0 to specify that the scalably nested SEI message applies to a particular layer in general (e.g., not within the context of an OLS).
[0137] Bitstream conformance may require that the following restrictions apply to the value of nesting_ols_flag: When a scalable nesting SEI message contains an SEI message with payloadType equal to 0 (buffering period), 1 (picture timing), or 130 (decoding unit information), the value of nesting_ols_flag shall be equal to 1. When a scalable nesting SEI message contains an SEI message with payloadType equal to a value in VclAssociatedSeiList, the value of nesting_ols_flag shall be equal to 0.
[0138] nesting_num_olss_minus1 plus 1 specifies the number of OLSs to which the scalably nested SEI message applies. The value of nesting_num_olss_minus1 must be in the range from 0 to TotalNumOlss-1, inclusive. nesting_ols_idx_delta_minus1[i] is used to derive the variable NestingOlsIdx[i], which specifies the OLS index of the ith OLS to which the scalably nested SEI message applies, when nesting_ols_flag is equal to 1. The value of nesting_ols_idx_delta_minus1[i] must be in the range from 0 to TotalNumOlss-2, inclusive. The variable NestingOlsIdx[i] can be derived as follows: if(i==0) NestingOlsIdx[ i ]=nesting_ols_idx_delta_minus1[ i ] else NestingOlsIdx[ i ]=NestingOlsIdx[ i-1 ]+nesting_ols_idx_delta_minus1[ i ]+1
[0139] nesting_num_ols_layers_minus1[i] plus 1 specifies the number of layers to which the scalably nested SEI message applies, in the context of the NestingOlsIdx[i]-th OLS. The value of nesting_num_ols_layers_minus1[i] must be in the range from 0 to NumLayersInOls[NestingOlsIdx[i]]-1, inclusive.
[0140] nesting_ols_layer_idx_delta_minus1[i][j] is used to derive the variable NestingOlsLayerIdx[i][j] that specifies the OLS layer index of the jth layer to which the scalably nested SEI message applies, in the context of the NestingOlsIdx[i]th OLS, when nesting_ols_flag is equal to 1. The value of nesting_ols_layer_idx_delta_minus1[i] must be in the range from 0 to NumLayersInOls[nestingOlsIdx[i]]-2, inclusive.
[0141] The variable NestingOlsLayerIdx[i][j] can be derived as follows. if(j==0) NestingOlsLayerIdx[ i ][ j ]=nesting_ols_layer_idx_delta_minus1[ i ][ j ] else NestingOlsLayerIdx[ i ][ j ]=NestingOlsLayerIdx[ i ][ j-1 ]+ nesting_ols_layer_idx_delta_minus1[ i ][ j ]+1
[0142] The lowest of all values of LayerIdInOls[NestingOlsIdx[i]][NestingOlsLayerIdx[i][0]] for i in the range from 0 to nesting_num_olss_minus1, inclusive, shall be equal to the nuh_layer_id of the current SEI NAL unit (e.g., the SEI NAL unit that contains the scalable nesting SEI message). nesting_all_layers_flag may be set equal to 1 to specify that the scalably nested SEI message generally applies to all layers with nuh_layer_id greater than or equal to the nuh_layer_id of the current SEI NAL unit. nesting_all_layers_flag may be set equal to 0 to specify that the scalably nested SEI message generally may or may not apply to all layers with nuh_layer_id greater than or equal to the nuh_layer_id of the current SEI NAL unit.
[0143] nesting_num_layers_minus1 plus 1 specifies the number of layers to which a scalably nested SEI message generally applies. If nuh_layer_id is the nuh_layer_id of the current SEI NAL unit, the value of nesting_num_layers_minus1 MUST be in the range from 0 to vps_max_layers_minus1-GeneralLayerIdx[nuh_layer_id], inclusive. nesting_layer_id[i] specifies the nuh_layer_id value of the i-th layer to which a scalably nested SEI message generally applies when nesting_all_layers_flag is 0. The value of nesting_layer_id[i] MUST be greater than nuh_layer_id, where nuh_layer_id is the nuh_layer_id of the current SEI NAL unit.
[0144] When nesting_ols_flag is equal to 1, the variables NestingNumLayers, which specify the number of layers to which a scalably nested SEI message generally applies, and NestingLayerId[i], for i in the range from 0 to NestingNumLayers-1 (inclusive), which specifies the list of nuh_layer_id values of layers to which a scalably nested SEI message generally applies, are derived as follows, where nuh_layer_id is the nuh_layer_id of the current SEI NAL unit: if(nesting_all_layers_flag) { NestingNumLayers= vps_max_layers_minus1+1-GeneralLayerIdx[ nuh_layer_id ] for(i=0;i < NestingNumLayers;i++) NestingLayerId[ i ]=vps_layer_id[ GeneralLayerIdx[ nuh_layer_id ]+i ](D-2) } else { NestingNumLayers=nesting_num_layers_minus1+1 for(i=0;i < NestingNumLayers;i++) NestingLayerId[ i ]=(i==0)? nuh_layer_id:nesting_layer_id[ i ] }
[0145] nesting_num_seis_minus1 plus 1 specifies the number of scalably nested SEI messages. The value of nesting_num_seis_minus1 MUST be in the range from 0 to 63, inclusive. nesting_0_bit SHALL be set equal to 0.
[0146] FIG. 8 is a schematic diagram of an exemplary video encoding device 800. The video encoding device 800 is suitable for implementing the disclosed examples / embodiments described herein. The video encoding device 800 comprises a downstream port 820, an upstream port 850, and / or a transceiver unit (Tx / Rx) 810 including a transmitter and / or a receiver for communicating data upstream and / or downstream over a network. The video encoding device 800 also includes a processor 830 including a logic unit and / or a central processing unit (CPU) for processing data, and a memory 832 for storing data. The video encoding device 800 may also include electrical, optical-electrical (OE) components, electrical-optical (EO) components, and / or wireless communication components coupled to the upstream port 850 and / or the downstream port 820 for communication of data over an electrical, optical, or wireless communication network. The video encoding device 800 may also include input and / or output (I / O) devices 860 for communicating data to and from a user. The I / O devices 860 may include output devices such as a display for displaying video data, speakers for outputting audio data, etc. The I / O devices 860 may also include input devices such as a keyboard, mouse, trackball, etc., and / or corresponding interfaces for interacting with such output devices.
[0147] The processor 830 is implemented by hardware and software. The processor 830 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 830 communicates with the downstream port 820, the Tx / Rx 810, the upstream port 850, and the memory 832. The processor 830 comprises an encoding module 814. The encoding module 814 implements the disclosed embodiments described herein, such as the methods 100, 900, and 1000, which may use the multi-layer video sequence 600 and / or the bitstream 700. The encoding module 814 may also implement any other methods / mechanisms described herein. Additionally, the encoding module 814 may implement the codec system 200, the encoder 300, the decoder 400, and / or the HRD 500. For example, the encoding module 814 may be used to signal and / or read various parameters as described herein. Furthermore, the encoding module may be used to encode and / or decode video sequences based on such parameters. Thus, the signaling modifications described herein may increase efficiency and / or avoid errors in the encoding module 814. Thus, the encoding module 814 may be configured to execute mechanisms to address one or more of the problems described above. Thus, the encoding module 814 causes the video encoding device 800 to provide additional functionality and / or coding efficiency when encoding video data. Thus, the encoding module 814 improves the functionality of the video encoding device 800 and addresses problems specific to video encoding techniques. Furthermore, the encoding module 814 transforms the video encoding device 800 into a different state. Alternatively, the encoding module 814 may be implemented as instructions stored in the memory 832 and executed by the processor 830 (e.g., as a computer program product stored in a non-transitory medium).
[0148] Memory 832 may include 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), flash memory, a ternary content addressable memory (TCAM), a static random access memory (SRAM), etc. Memory 832 may be used as an overflow data storage device to store programs when such programs are selected for execution, and to store instructions and data retrieved during program execution.
[0149] 9 is a flowchart of an example method 900 for encoding a video sequence into a bitstream, such as bitstream 700, by using SEI messages that may be independent of the VPS. Method 900 may be used by an encoder, such as codec system 200, encoder 300, and / or video encoding device 800, when performing method 100. Additionally, method 900 may operate on HRD 500 and thus perform conformance testing on multi-layer video sequence 600.
[0150] The method 900 may start when an encoder receives a video sequence and determines, for example, based on user input, to encode the video sequence into a multi-layer bitstream. In step 901, the encoder encodes a number of encoded pictures into a bitstream. For example, the encoded pictures may be organized into layers to create a multi-layer bitstream. Furthermore, each encoded picture may be included in a DU. The encoded pictures may also be included in an AU, which includes a set of pictures from different layers having the same output time. A layer may include a set of VCL NAL units having the same layer ID and associated non-VCL NAL units. For example, a set of VCL NAL units is part of a layer if the set of VCL NAL units all have a particular value of nuh_layer_id. A layer may include a set of VCL NAL units, each VCL NAL unit including a slice of an encoded picture. A layer may also include any parameter set used to encode such a picture, such parameters included in the non-VCL NAL units. These layers may be included in one or more OLSs. One or more layers may be output layers (e.g., each OLS includes at least one output layer). Layers that are not output layers are encoded to support the reconstruction of the output layers, but such support layers are not intended for output at a decoder. In this manner, the encoder can encode various combinations of layers for transmission to the decoder upon request. Layers can be transmitted as needed to allow the decoder to obtain different representations of the video sequence depending on network conditions, hardware capabilities, and / or user settings.
[0151] In step 903, the encoder may encode the current SEI message into the bitstream. The current SEI message may be a BP SEI message, a PT SEI message, or a DUI SEI message, depending on the example. The current SEI message includes du_hrd_params_present_flag, which specifies whether a DU-level HRD parameter is present in the bitstream. du_hrd_params_present_flag may further specify whether the HRD operates at the AU level or the DU level. The AU level indicates that the HRD process is applied to the entire AU, and the DU level indicates that the HRD process is applied to each individual DU. Thus, du_hrd_params_present_flag may specify the granularity of the conformance test (e.g., AU granularity or DU granularity). As a specific example, du_hrd_params_present_flag may be set to 1 if a DU-level HRD parameter is present to specify that the HRD can operate at the AU level or the DU level. Additionally, du_hrd_params_present_flag may be set to 0 to specify that no DU level HRD parameters are present and the HRD operates at the AU level.
[0152] The current SEI message may also include du_cpb_params_in_pic_timing_sei_flag, which specifies whether a DU-level CPB removal delay parameter is present in the PT SEI message. du_cpb_params_in_pic_timing_sei_flag may further specify whether a DU-level CPB removal delay parameter is present in the DUI SEI message. In a particular example, du_cpb_params_in_pic_timing_sei_flag may be set to 1 when a DU-level CPB removal delay parameter is present in the PT SEI message and specifies that the DUI SEI message is not available. Furthermore, du_cpb_params_in_pic_timing_sei_flag may be set to 0 when a DU-level CPB removal delay parameter is present in the DUI SEI message and specifies that the PT SEI message does not include a DU-level CPB removal delay parameter. The aforementioned constraints and / or requirements ensure that the bitstream complies with, for example, VVC or any other standard as modified as set forth herein. However, the encoder may also be capable of operating in other modes that are less constrained, such as when operating under different standards or different versions of the same standard.
[0153] In step 905, the HRD can perform a set of bitstream conformance tests on the bitstream based on the current SEI message. For example, the HRD can read du_hrd_params_present_flag to determine whether to test the bitstream at the AU level or, similarly, whether a DU parameter is present that allows testing at the DU level as well. Furthermore, the HRD can read du_cpb_params_in_pic_timing_sei_flag to determine whether a DU parameter, if present, can be found in the DUI SEI message or the PT SEI message. The HRD can then obtain the desired parameters from the indicated SEI message and perform conformance tests based on those parameters. Based on the aforementioned flags, the current SEI message is VPS independent. In this way, the current SEI message can be fully parsed and resolved even if the VPS is not available. Thus, the conformance tests will work properly even if the tests are performed on an OLS with a single layer, and thus the VPS is not available to the HRD since it is not configured to transmit as part of the OLS.
[0154] In step 907, the encoder can store the bitstream for communication to the decoder upon request. The encoder can also transmit the bitstream to the decoder as needed.
[0155] 10 is a flowchart of an example method 1000 of decoding a video sequence from a bitstream, such as bitstream 700, that applies SEI messages that may not depend on a VPS. Method 1000 may be used by a decoder, such as codec system 200, decoder 400, and / or video encoding device 800, when performing method 100. Additionally, method 1000 may be used on a multi-layer video sequence 600 that has been checked for conformance by an HRD, such as HRD 500.
[0156] Method 1000 may begin when a decoder begins receiving a bitstream of encoded data representing a multi-layer video sequence, e.g., as a result of method 900 and / or in response to a request by the decoder. In step 1001, the decoder receives a bitstream including encoded pictures in one or more VCL NAL units. Furthermore, the bitstream may include one or more layers including encoded pictures. Furthermore, each encoded picture may be included in a DU. An encoded picture may also be included in an AU, which includes a set of pictures from different layers having the same output time. A layer may include a set of VCL NAL units having the same layer ID and associated non-VCL NAL units. For example, a set of VCL NAL units is part of a layer if the set of VCL NAL units all have a particular value of nuh_layer_id. A layer may include a set of VCL NAL units, each VCL NAL unit including a slice of an encoded picture. A layer may also include any set of parameters used to encode such pictures, such parameters included in the non-VCL NAL units. Layers may be included in an OLS. One or more layers may be output layers. Layers that are not output layers are coded to support the reconstruction of output layers, but such support layers are not intended for output. In this way, a decoder can obtain different representations of a video sequence depending on network conditions, hardware capabilities, and / or user settings.
[0157] The bitstream also includes a current SEI message. The current SEI message may be a BP SEI message, a PT SEI message, or a DUI SEI message, depending on the example. The current SEI message includes du_hrd_params_present_flag, which specifies whether DU-level HRD parameters are present in the bitstream. du_hrd_params_present_flag may further specify whether the HRD operates at the AU level or the DU level. The AU level indicates that the HRD process is applied to the entire AU, and the DU level indicates that the HRD process is applied to individual DUs. Thus, du_hrd_params_present_flag may specify the granularity of the conformance test (e.g., AU granularity or DU granularity). As a specific example, du_hrd_params_present_flag may be set to 1 if a DU-level HRD parameter is present to specify that the HRD can operate at the AU level or the DU level. Additionally, du_hrd_params_present_flag may be set to 0 to specify that no DU level HRD parameters are present and the HRD operates at the AU level.
[0158] The current SEI message may also include du_cpb_params_in_pic_timing_sei_flag, which specifies whether a DU-level CPB removal delay parameter is present in the PT SEI message. du_cpb_params_in_pic_timing_sei_flag may further specify whether a DU-level CPB removal delay parameter is present in the DUI SEI message. In a particular example, du_cpb_params_in_pic_timing_sei_flag may be set to 1 when a DU-level CPB removal delay parameter is present in the PT SEI message and specifies that the DUI SEI message is not available. Furthermore, du_cpb_params_in_pic_timing_sei_flag may be set to 0 when a DU-level CPB removal delay parameter is present in the DUI SEI message and specifies that the PT SEI message does not include a DU-level CPB removal delay parameter.
[0159] In one embodiment, the video decoder expects du_hrd_params_present_flag and du_cpb_params_in_pic_timing_sei_flag to indicate the presence and / or location of DU level parameters as described above based on VVC or some other standard. However, if the decoder determines that this condition is not true, the decoder may detect an error, signal the error, request that a corrected bitstream (or a portion thereof) be retransmitted, or take some other corrective measures to ensure that a conforming bitstream is received.
[0160] In step 1003, the decoder may decode the encoded picture from the VCL NAL unit to generate a decoded picture. For example, the decoder may determine that the bitstream has been checked for conformance to the standard based on the presence of the current SEI message. Thus, the decoder may determine that the bitstream is decodable based on the presence of the current SEI message. Note that in some cases, the OLS received at the decoder may include a single layer. In such a case, the layer / OLS may not include a VPS. Due to the presence of du_hrd_params_present_flag and du_cpb_params_in_pic_timing_sei_flag, the current SEI message is independent of the VPS. Thus, the absence of a VPS does not cause an error when the current SEI message is parsed. In step 1005, the decoder may forward the decoded picture for display as part of the decoded video sequence.
[0161] 11 is a schematic diagram of an example system 1100 for encoding a video sequence using a bitstream that uses a VPS-independent SEI message. The system 1100 may be implemented by an encoder and a decoder, such as the codec system 200, the encoder 300, the decoder 400, and / or the video encoding device 800. Furthermore, the system 1100 may perform conformance testing on the multi-layer video sequence 600 and / or the bitstream 700 using the HRD 500. Furthermore, the system 1100 may be used when implementing the methods 100, 900, and / or 1000.
[0162] The system 1100 includes a video encoder 1102. The video encoder 1102 comprises an encoding module 1103 for encoding the encoded picture into a bitstream. Furthermore, the encoding module 1103 is for encoding into the bitstream a current SEI message including du_hrd_params_present_flag specifying whether DU level HRD parameters are present in the bitstream. The video encoder 1102 further comprises an HRD module 1105 for performing a set of bitstream conformance tests on the bitstream based on the current SEI message. The video encoder 1102 further comprises a storage module 1106 for storing the bitstream for communication to the decoder. The video encoder 1102 further comprises a transmission module 1107 for transmitting the bitstream towards the video decoder 1110. The video encoder 1102 may be further configured to perform any of the steps of the method 900.
[0163] The system 1100 also includes a video decoder 1110. The video decoder 1110 comprises a receiving module 1111 for receiving a bitstream including the encoded picture and a current SEI message including a du_hrd_params_present_flag specifying whether DU level HRD parameters are present in the bitstream. The video decoder 1110 further comprises a decoding module 1113 for decoding the encoded picture to generate a decoded picture. The video decoder 1110 further comprises a forwarding module 1115 for forwarding the decoded picture for display as part of a decoded video sequence. The video decoder 1110 may be further configured to perform any of the steps of the method 1000.
[0164] A first component is directly coupled to a second component when there are no intervening components other than lines, traces, or other intermediaries between the first and second components. A first component is indirectly coupled to a second component when there are intervening components other than lines, traces, or other intermediaries between the first and second components. The term "coupled" and variations thereof include both direct and indirect couplings. Use of the term "about" refers to a range that includes ±10% of the succeeding numerical value, unless otherwise stated.
[0165] 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 ordering of the steps of such methods should be understood as merely exemplary. Similarly, such methods may include additional steps, and some steps may be omitted or combined, in methods consistent with various embodiments of the present disclosure.
[0166] Although several embodiments are provided in the present 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 present disclosure. The examples of the present disclosure should be considered as illustrative rather than limiting, and the intention should not be limited to the details given herein. For example, various elements or components may be combined or integrated in another system, or certain features may be omitted or not implemented.
[0167] In addition, the techniques, systems, subsystems, and methods described and illustrated 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 disclosure. Other examples of modifications, substitutions, and alterations will be ascertainable by those skilled in the art and may be made without departing from the spirit and scope disclosed herein. [Explanation of symbols]
[0168] 100 How it works 200 Codec System 201 Split Video Signal 211 General Coder Control Component 213 Transform Scaling Quantization Component 215 In-Picture Estimation Component 217 Intra-Picture Prediction Component 219 Motion Compensation Component 221 Motion Estimation Component 223 Decoded Picture Buffer Component 225 In-Loop Filter Components 227 Filter Control Analysis Component 229 Scaling Inverse Transformation Component 231 Header Formatting - Context-Adaptive Binary Arithmetic Coding (CABAC) Component 300 Video Encoder 301 Split Video Signal 313 Transform Quantization Component 317 Intra-Picture Prediction Component 321 Motion Compensation Component 323 Decoded Picture Buffer Component 325 In-Loop Filter Components 329 Inverse Transform Quantization Component 331 Entropy Coding Components 400 Video Decoder 417 In-Picture Prediction Component 421 Motion Compensation Component 423 Decoded Picture Buffer Component 425 In-Loop Filter Components 429 Inverse Transform Quantization Component 433 Entropy Decoding Component 500HRD 541 Virtual Stream Scheduler (HSS) 543 CPB 545 Decryption Process Components 547 DPB 549 Output Cropping Component 551 Bitstream 553 Decoding Unit (DU) 555 Decrypted DUs 556 Reference Pictures 557 Pictures 559 Output Cropped Picture 600 Multi-layer Video Sequences 611 Pictures 612 Pictures 613 Pictures 614 Pictures 615 Pictures 616 Pictures 617 Pictures 618 Pictures 621 Inter-layer Prediction 623 Inter Prediction 627 Access Unit (AU) 628DU 631 Layer N 632 Layer N+1 700 bitstream 711 VPS 713 SPS 715 Picture Parameter Set (PPS) 716 Buffering Period (BP) SEI Message 717 Slice Header 718 PT SEI Message 719 DUI SEI Message 720 Image data 723 Layer 725 Pictures 727 Slice 731 du_hrd_params_present_flag 733 du_cpb_params_in_pic_timing_sei_flag 737 CPB Removal Delay 800 Video Encoder 810 Transceiver Unit (Tx / Rx) 814 Encoding Module 820 downstream ports 830 Processor 832 Memory 850 Upstream Ports 860 Input and / or Output (I / O) Devices 1100 System 1102 Video Encoder 1103 Encoding Module 1105 HRD module 1106 Memory Module 1107 Transmitting Module 1110 Video Decoder 1111 Receiver Module 1113 Decryption module 1115 Transfer Module
Claims
1. A method implemented by a decoder, comprising: receiving, by a receiver of the decoder, a bitstream including a coded picture and a current supplemental enhancement information (SEI) message including a decoding unit (DU) hypothetical reference decoder (HRD) parameters present flag (du_hrd_params_present_flag) specifying whether DU level HRD parameters are present in the bitstream; decoding, by a processor of the decoder, the encoded picture to generate a decoded picture; A method comprising:
2. The method of claim 1 , wherein the du_hrd_params_present_flag further specifies whether HRD operates at an access unit (AU) level or a DU level.
3. 3. A method according to claim 1 or 2, wherein the du_hrd_params_present_flag is set to 1 when a DU level HRD parameter is present specifying that the HRD may operate at the AU level or the DU level, and the du_hrd_params_present_flag is set to 0 when a DU level HRD parameter is not present specifying that the HRD operates at the AU level.
4. 4. The method of claim 1, wherein the current SEI message further includes a DU coded picture buffer (CPB) parameters in picture timing (PT) SEI flag (du_cpb_params_in_pic_timing_sei_flag) that specifies whether a DU level CPB removal delay parameter is present in a PT SEI message.
5. The method of claim 1 , wherein the du_cpb_params_in_pic_timing_sei_flag further specifies whether a DU-level CPB removal delay parameter is present in a Decoding Unit Information (DUI) SEI message.
6. 6. The method of claim 1, wherein du_cpb_params_in_pic_timing_sei_flag is set to 1 when a DU-level CPB removal delay parameter is present in a PT SEI message specifying that the DUI SEI message is not available, and wherein du_cpb_params_in_pic_timing_sei_flag is set to 0 when a DU-level CPB removal delay parameter is present in a DUI SEI message specifying that the PT SEI message does not include a DU-level CPB removal delay parameter.
7. 7. The method of claim 1, wherein the current SEI message is a buffering period (BP) SEI message, a PT SEI message, or a DUI SEI message.
8. 1. A method implemented by an encoder, comprising: encoding, by a processor of the encoder, the coded pictures into a bitstream; encoding, by the processor, into the bitstream a current supplemental enhancement information (SEI) message including a decoding unit (DU) hypothetical reference decoder (HRD) parameters present flag (du_hrd_params_present_flag) that specifies whether DU-level HRD parameters are present in the bitstream; performing, by the processor, a set of bitstream conformance tests on the bitstream based on the current SEI message; storing, by a memory coupled to the processor, the bitstream for communication to a decoder; A method comprising:
9. The method of claim 8, wherein the du_hrd_params_present_flag further specifies whether HRD operates at an access unit (AU) level or a DU level.
10. 10. The method of claim 8 or 9, wherein the du_hrd_params_present_flag is set to 1 when a DU level HRD parameter is present specifying that the HRD may operate at the AU level or the DU level, and the du_hrd_params_present_flag is set to 0 when a DU level HRD parameter is not present specifying that the HRD operates at the AU level.
11. 11. The method of claim 8, wherein the current SEI message further includes a DU coded picture buffer (CPB) parameters in picture timing (PT) SEI flag (du_cpb_params_in_pic_timing_sei_flag) that specifies whether a DU level CPB removal delay parameter is present in a PT SEI message.
12. The method of any one of claims 8 to 11, wherein the du_cpb_params_in_pic_timing_sei_flag further specifies whether a DU-level CPB removal delay parameter is present in a Decoding Unit Information (DUI) SEI message.
13. 13. The method according to claim 8, wherein du_cpb_params_in_pic_timing_sei_flag is set to 1 when a DU-level CPB removal delay parameter is present in a PT SEI message specifying that the DUI SEI message is not available, and wherein du_cpb_params_in_pic_timing_sei_flag is set to 0 when a DU-level CPB removal delay parameter is present in a DUI SEI message specifying that the PT SEI message does not include a DU-level CPB removal delay parameter.
14. 14. The method according to claim 8, wherein the current SEI message is a buffering period (BP) SEI message, a PT SEI message, or a DUI SEI message.
15. 15. A video encoding apparatus 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, receiver, memory, and transmitter are configured to perform a method according to any one of claims 1 to 14.
16. 15. A non-transitory computer-readable medium including a computer program product for use by a video encoding device, the computer program product including computer-executable instructions stored on the non-transitory computer-readable medium, the computer-executable instructions, when executed by a processor, causing the video encoding device to perform a method according to any one of claims 1 to 14.
17. receiving means for receiving a bitstream including a coded picture and a current supplemental enhancement information (SEI) message including a decoding unit (DU) hypothetical reference decoder (HRD) parameters present flag (du_hrd_params_present_flag) specifying whether DU level HRD parameters are present in the bitstream; decoding means for decoding the encoded picture to generate a decoded picture; transfer means for transferring the decoded pictures for display as part of a decoded video sequence; A decoder comprising:
18. The decoder of claim 17, wherein the decoder is further configured to perform the method of any one of claims 1 to 7.
19. Encoding the coded picture into a bitstream; encoding a current supplemental enhancement information (SEI) message into the bitstream that includes a decoding unit (DU) hypothetical reference decoder (HRD) parameters present flag (du_hrd_params_present_flag) that specifies whether DU-level HRD parameters are present in the bitstream; An encoding means; a hypothetical reference decoder (HRD) means for performing a set of bitstream conformance tests on the bitstream based on the current SEI message; storage means for storing said bitstream for communication to a decoder; An encoder comprising:
20. 20. The encoder of claim 19, further configured to perform a method according to any one of claims 8 to 14.
Citation Information
Patent Citations
Designing the hrd descriptor and buffer model for the hevc extension carrying data stream
JP2017535184A