Encoders, decoders, and corresponding methods
By employing GDR techniques that allow sequential intra-refresh and manage data output through flag settings, the method addresses the challenges of efficient compression and random access in video coding, improving user experience and reducing latency.
Patent Information
- Application Number
- JP2023135533
- Authority / Receiving Office
- JP · JP
- Patent Type
- Patents
- Current Assignee / Owner
- Priority Date
- 2019-07-05
- Filing Date
- 2023-08-23
- Publication Date
- 2025-04-03
- Estimated Expiration
- 2040-03-11
AI Technical Summary
Existing video coding technologies face challenges in achieving efficient compression and random access without relying on intra-random access point (IRAP) pictures, which can increase bitrate and latency.
The method involves using gradual decoding refresh (GDR) techniques, where a GDR picture is treated as the first picture in the decoding order or following the End of Sequence (EOS) Network Abstraction Layer (NAL) unit, allowing sequential intra-refresh without the need for IRAP pictures. A flag is set to prevent potentially dirty data from being output, ensuring full synchronization before displaying data.
This approach enables random access in video coding without the need for IRAP pictures, improving compression efficiency and reducing latency, thereby enhancing the user experience in video transmission and viewing.
Smart Images

Figure 0007656666000005 
Figure 0007656666000006 
Figure 0007656666000007
Abstract
Description
[Technical field]
[0001] Generally, this disclosure describes techniques to support gradual decoding refresh in video coding. More specifically, this disclosure enables sequential intra refresh to enable random access without the need to use intra random access point (IRAP) pictures. [Background technology]
[0002] The amount of video data required to render even a relatively short video can be substantial, which can pose difficulties when the data is to be streamed or otherwise communicated across communication networks with limited bandwidth capacity. Thus, video data is generally compressed before being communicated through modern telecommunications networks. The size of the video can also be an issue when the video is stored on a storage device, since memory resources may be limited. Video compression devices often use software and / or hardware at the source to code the video data before transmission or storage, thereby reducing the amount of data required to render a digital video image. The compressed data is then received at the destination by a video decompression device, which decodes the video data. With limited network resources and an ever-increasing demand for higher video quality, improved compression and decompression techniques are desirable that improve compression ratios with little sacrifice in image quality. Summary of the Invention [Means for solving the problem]
[0003] A first aspect relates to a method for decoding a coded video bitstream, the method including: determining whether a gradual decoding refresh (GDR) picture in the coded video bitstream is the first picture in decoding order or the first picture following an end of sequence (EOS) network abstraction layer (NAL) unit in decoding order by the video decoder; when the GDR picture is the first picture in decoding order or the first picture following an EOS NAL unit in decoding order by the video decoder, setting a flag to a value to prevent the GDR picture from being output; decoding the GDR picture by the video decoder; and storing the GDR picture in a decoded picture buffer (DPB) by the video decoder.
[0004] The method provides a technique that allows sequential intra refresh to enable random access without the need to use an intra random access point (IRAP) picture. When a GDR picture is the first picture in decoding order or the first picture following an EOS NAL unit in decoding order, the value of the flag is set to prevent the GDR picture from being output. Setting the flag in this manner prevents potentially dirty data from being output to the display. That is, the value of the flag setting controls whether potentially dirty data from the GDR picture is output or whether the video decoder waits for perfect synchronization before beginning to display the data. By having the ability to limit dirty data from being output, the coder / decoder (also called "codec") in video coding is improved compared to current codecs. In effect, the improved video coding process provides a better user experience when video is transmitted, received, and / or viewed.
[0005] In a first implementation form of the method according to the first aspect itself, the method further includes a step of setting a flag to a value to prevent the GDR picture and any trailing pictures between the GDR picture and the recovery point picture in output order from being output when the GDR picture is the first picture in decoding order or the first picture following the EOS NAL unit in decoding order.
[0006] In a second implementation form of the method according to the first aspect itself or any preceding implementation form of the first aspect, the GDR picture is the first picture in a coded video sequence (CVS) of the coded video bitstream, or the GDR picture is the first picture in a layer of the coded video bitstream.
[0007] In a third implementation form of the method according to the first aspect itself or any preceding implementation form of the first aspect, the layer is a coded layer video sequence (CLVS) of a coded video sequence (CVS) of the coded video bitstream.
[0008] In a fourth implementation form of the method according to the first aspect itself or any preceding implementation form of the first aspect, when the GDR picture is the first picture in decoding order or the first picture following the EOS NAL unit in decoding order, the value of the flag is set to 1 to prevent the GDR picture and any trailing pictures between the GDR picture and the recovery point picture in output order from being output.
[0009] In a fifth implementation form of the method according to the first aspect itself or any preceding implementation form of the first aspect, the value of the flag is set to 0 when the GDR picture is not the first picture in decoding order and is not the first picture following the EOS NAL unit in decoding order.
[0010] A second aspect relates to a decoding device, the decoding device including: a receiver configured to receive a coded video bitstream; a memory coupled to the receiver, the memory storing instructions; and a processor coupled to the memory, the processor configured to execute instructions to cause the decoding device to determine whether a gradual decoding refresh (GDR) picture in the coded video bitstream is a first picture in decoding order or a first picture following an end-of-sequence (EOS) network abstraction layer (NAL) unit in decoding order, set a flag to a value to prevent the GDR picture from being output when the GDR picture is the first picture in decoding order or a first picture following an EOS NAL unit in decoding order, decode the GDR picture, and store the GDR picture in a decoded picture buffer (DPB).
[0011] The decoding device provides a technique that allows sequential intra refresh to enable random access without the need to use an intra random access point (IRAP) picture. When a GDR picture is the first picture in decoding order or the first picture following an EOS NAL unit in decoding order, a value of a flag is set to prevent the GDR picture from being output. Setting the flag in this manner prevents potentially dirty data from being output to the display. That is, the value of the flag setting controls whether potentially dirty data from the GDR picture is output or whether the video decoder waits for perfect synchronization before beginning to display the data. By having the ability to limit dirty data from being output, the coder / decoder (also called "codec") in video coding is improved compared to current codecs. In effect, the improved video coding process provides a better user experience when video is sent, received, and / or viewed.
[0012] In a first implementation form of a decoding device according to the second aspect by itself, when a GDR picture is the first picture in decoding order or the first picture following an EOS NAL unit in decoding order, a flag is set to a value to prevent the GDR picture and any trailing pictures between the GDR picture and the recovery point picture in output order from being output.
[0013] In a second implementation form of the decoding device according to the second aspect itself, the GDR picture is the first picture in a coded video sequence (CVS) of the coded video bitstream, or the GDR picture is the first picture in a layer of the coded video bitstream.
[0014] In a third implementation form of the decoding device according to the second aspect per se, the layer is a Coded Layer Video Sequence (CLVS) of a Coded Video Sequence (CVS) of the coded video bitstream.
[0015] In a fourth implementation form of the decoding device according to the second aspect itself, when the GDR picture is the first picture in decoding order or the first picture following the EOS NAL unit in decoding order, the value of the flag is set to 1 to prevent the GDR picture and any trailing pictures between the GDR picture and the recovery point picture in output order from being output.
[0016] In a fifth implementation form of the decoding device according to the second aspect itself, the value of the flag is set to 0 when the GDR picture is not the first picture in decoding order and is not the first picture following the EOS NAL unit in decoding order.
[0017] A third aspect relates to a coding apparatus including a receiver configured to receive a picture to be encoded or a bitstream to be decoded, a transmitter coupled to the receiver and configured to transmit the bitstream to a decoder or to transmit a decoded image to a display, a memory coupled to at least one of the receiver or the transmitter and configured to store instructions, and a processor coupled to the memory and configured to execute the instructions stored in the memory to perform any of the methods disclosed herein.
[0018] The coding device provides a technique that allows sequential intra refresh to enable random access without the need to use an intra random access point (IRAP) picture. When a GDR picture is the first picture in decoding order or the first picture following an EOS NAL unit in decoding order, a value of a flag is set to prevent the GDR picture from being output. Setting the flag in this manner prevents potentially dirty data from being output to the display. That is, the value of the flag setting controls whether potentially dirty data from a GDR picture is output or whether the video decoder waits for perfect synchronization before beginning to display the data. By having the ability to limit dirty data from being output, coders / decoders (also called "codecs") in video coding are improved compared to current codecs. In effect, the improved video coding process provides a better user experience when video is sent, received, and / or viewed.
[0019] In a first implementation form of the coding device according to the third aspect itself, it further comprises a display configured to display the image.
[0020] A fourth aspect relates to a system including an encoder and a decoder in communication with the encoder, the encoder or decoder including a decoding device, encoding device, or coding apparatus disclosed herein.
[0021] The system provides a technique that allows sequential intra refresh to enable random access without the need to use an intra random access point (IRAP) picture. When a GDR picture is the first picture in decoding order or the first picture following an EOS NAL unit in decoding order, a value of a flag is set to prevent the GDR picture from being output. Setting the flag in this manner prevents potentially dirty data from being output to the display. That is, the value of the flag setting controls whether potentially dirty data from a GDR picture is output or whether the video decoder waits for perfect synchronization before beginning to display the data. By having the ability to limit dirty data from being output, coders / decoders (also called "codecs") in video coding are improved compared to current codecs. In effect, the improved video coding process provides a better user experience when video is transmitted, received, and / or viewed.
[0022] A fifth aspect relates to a means for coding, the means for coding including receiving means configured to receive a picture to be encoded or to receive a bitstream to be decoded, transmitting means coupled to the receiving means and configured to transmit the bitstream to the decoding means or to transmit a decoded image to the display means, storage means coupled to at least one of the receiving means or the transmitting means and configured to store instructions, and processing means coupled to the storage means and configured to execute the instructions stored in the storage means to perform any of the methods disclosed herein.
[0023] The means for coding provides a technique that allows sequential intra refresh to enable random access without the need to use an intra random access point (IRAP) picture. When a GDR picture is the first picture in decoding order or the first picture following an EOS NAL unit in decoding order, a value of a flag is set to prevent the GDR picture from being output. Setting the flag in this manner prevents potentially dirty data from being output to the display. That is, the value of the flag setting controls whether potentially dirty data from the GDR picture is output or whether the video decoder waits for perfect synchronization before beginning to display the data. By having the ability to limit dirty data from being output, the coder / decoder (also called "codec") in video coding is improved compared to current codecs. In effect, the improved video coding process provides a better user experience when video is sent, received, and / or viewed.
[0024] For a more complete understanding of the present disclosure, reference is now made to the following brief description taken in conjunction with the accompanying drawings and detailed description, in which like reference numerals represent like parts, in which: [Brief description of the drawings]
[0025] [Figure 1] FIG. 1 is a block diagram illustrating an example coding system that can utilize GDR techniques. [Diagram 2] FIG. 1 is a block diagram illustrating an example video encoder that can implement a GDR technique. [Diagram 3] FIG. 1 is a block diagram illustrating an example of a video decoder that can implement the GDR technique. [Figure 4] A depiction of the relationship between IRAP pictures relative to leading pictures and trailing pictures in decoding order and presentation order. [Diagram 5]FIG. 2 illustrates a gradual decoding refresh technique. [Figure 6] FIG. 2 is a schematic diagram illustrating undesirable motion search. [Figure 7] FIG. 2 illustrates a video bitstream configured to implement a gradual decoding refresh technique, according to one embodiment of the present disclosure. [Figure 8] FIG. 1 illustrates an embodiment of a method for decoding a coded video bitstream. [Figure 9] 1 is a schematic diagram of a video coding device. [Figure 10] FIG. 2 is a schematic diagram of an embodiment of a means for coding; DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENTS
[0026] FIG. 1 is a block diagram illustrating an example coding system 10 that may utilize video coding techniques as described herein. As shown in FIG. 1, coding system 10 includes a source device 12 that provides encoded video data to be subsequently decoded by a destination device 14. In particular, source device 12 may provide the video data to destination device 14 via a computer-readable medium 16. Source device 12 and destination device 14 may include any of a wide range of devices, including desktop computers, notebook (e.g., laptop) computers, tablet computers, set-top boxes, telephone handsets such as so-called "smart" phones, so-called "smart" pads, televisions, cameras, display devices, digital media players, video game consoles, video streaming devices, and the like. In some cases, source device 12 and destination device 14 may be equipped for wireless communication.
[0027] The destination device 14 may receive the encoded video data to be decoded via a computer-readable medium 16. The computer-readable medium 16 may include any type of medium or device capable of moving the encoded video data from the source device 12 to the destination device 14. In one example, the computer-readable medium 16 may include a communication medium to enable the source device 12 to transmit the encoded video data directly to the destination device 14 in real time. The encoded video data may be modulated according to a communication standard, such as a wireless communication protocol, and transmitted to the destination device 14. The communication medium may include any wireless or wired communication medium, such as a radio frequency (RF) spectrum or one or more physical transmission lines. The communication medium may form part of a packet-based network, such as a local area network, a wide area network, or a global network such as the Internet. The communication medium may include routers, switches, base stations, or any other equipment that may be useful to facilitate communication from the source device 12 to the destination device 14.
[0028] In some examples, the encoded data may be output from the output interface 22 to a storage device. Similarly, the encoded data may be accessed from the storage device by the input interface. The storage device may include any of a variety of distributed or locally accessed data storage media, such as a hard drive, a Blu-ray® disc, a digital video disc (DVD), a compact disc read-only memory (CD-ROM), a flash memory, a volatile or non-volatile memory, or any other suitable digital storage medium for storing encoded video data. In a further example, the storage device may correspond to a file server or another intermediate storage device that may store the encoded video generated by the source device 12. The destination device 14 may access the stored video data from the storage device via streaming or download. The file server may be any type of server capable of storing the encoded video data and transmitting the encoded video data to the destination device 14. Exemplary file servers include a web server (e.g., for a website), a file transfer protocol (FTP) server, a network attached storage (NAS) device, or a local disk drive. Destination device 14 may access the encoded video data through any standard data connection, including an Internet connection. This may include a wireless channel (e.g., a Wi-Fi connection), a wired connection (e.g., a digital subscriber line (DSL), a cable modem, etc.), or a combination of both, suitable for accessing encoded video data stored on a file server. The transmission of the encoded video data from the storage device may be a streaming transmission, a download transmission, or a combination thereof.
[0029] The techniques of this disclosure are not necessarily limited to wireless applications or settings. The techniques may be applied to video coding to support any of a variety of multimedia applications, such as over-the-air television broadcasting, cable television transmission, satellite television transmission, Internet streaming video transmission such as Dynamic Adaptive Streaming over HTTP (DASH), digital video encoded on a data storage medium, decoding of digital video stored on a data storage medium, or other applications. In some examples, coding system 10 may be configured to support one-way or two-way video transmission to support applications such as video streaming, video playback, video broadcasting, and / or video telephony.
[0030] In the example of FIG. 1, source device 12 includes a video source 18, a video encoder 20, and an output interface 22. Destination device 14 includes an input interface 28, a video decoder 30, and a display device 32. According to this disclosure, video encoder 20 of source device 12 and / or video decoder 30 of destination device 14 may be configured to apply techniques for video coding. In other examples, the source device and destination device may include other components or configurations. For example, source device 12 may receive video data from an external video source, such as an external camera. Similarly, destination device 14 may interface with an external display device rather than including an integrated display device.
[0031] The illustrated coding system 10 of FIG. 1 is only one example. The techniques for video coding may be performed by any digital video encoding and / or decoding device. Although the techniques of this disclosure are generally performed by a video coding device, the techniques may also be performed by a video encoder / decoder, commonly referred to as a "codec." Moreover, the techniques of this disclosure may also be performed by a video pre-processor. The video encoder and / or decoder may be a graphics processing unit (GPU) or similar device.
[0032] Source device 12 and destination device 14 are merely examples of coding devices, such that source device 12 generates coded video data for transmission to destination device 14. In some examples, source device 12 and destination device 14 may operate substantially symmetrically, such that source device 12 and destination device 14 each include video encoding and decoding components. Thus, coding system 10 may support one-way or two-way video transmission between video devices 12, 14, e.g., for video streaming, video playback, video broadcasting, or video telephony.
[0033] Video source 18 of source device 12 may include a video capture device such as a video camera, a video archive containing previously captured video, and / or a video feed interface for receiving video from a video content provider. As a further alternative, video source 18 may generate computer-graphics-based data as the source video, or a combination of live, archived, and computer-generated video.
[0034] In some cases, when video source 18 is a video camera, source device 12 and destination device 14 may form a so-called cameraphone or videophone. However, as mentioned above, the techniques described in this disclosure may be applicable to video coding generally and may be applied to wireless and / or wired applications. In each case, captured, pre-captured, or computer-generated video may be encoded by video encoder 20. The encoded video information may then be output by output interface 22 onto computer-readable medium 16.
[0035] Computer-readable medium 16 may include a transitory medium, such as a wireless broadcast or wired network transmission, or a storage medium (i.e., a non-transitory storage medium), such as a hard disk, a flash drive, a compact disc, a digital video disc, a Blu-ray® disc, or other computer-readable medium. In some examples, a network server (not shown) may receive the encoded video data from source device 12, e.g., via a network transmission, and provide the encoded video data to destination device 14. Similarly, a computing device of a media production facility, such as a disc stamping facility, may receive the encoded video data from source device 12 and produce discs including the encoded video data. Thus, in various examples, computer-readable medium 16 may be understood to include one or more computer-readable media of various forms.
[0036] An input interface 28 of destination device 14 receives information from computer-readable medium 16. The information on computer-readable medium 16 may include syntax information defined by video encoder 20, including syntax elements that describe characteristics and / or processing of blocks and other coded units, e.g., group of pictures (GOPs), which is also used by video decoder 30. Display device 32 displays the decoded video data to a user and may include any of a variety of display devices, such as a cathode ray tube (CRT), a liquid crystal display (LCD), a plasma display, an organic light emitting diode (OLED) display, or another type of display device.
[0037] Video encoder 20 and video decoder 30 may operate according to a video coding standard, such as the High Efficiency Video Coding (HEVC) standard currently under development, and may conform to the HEVC Test Model (HM). Alternatively, video encoder 20 and video decoder 30 may operate according to other proprietary or industry standards, such as the International Telecommunication Union Telecommunication Standards Sector (ITU-T) H.264 standard, referred to as Moving Picture Experts Group (MPEG)-4 Part 10, Advanced Video Coding (AVC), H.265 / HEVC, or extensions of such standards. However, the techniques of this disclosure are not limited to any particular coding standard. Other examples of video coding standards include MPEG-2 and ITU-T H.263. 1, in some aspects, video encoder 20 and video decoder 30 may each be integrated with an audio encoder and decoder and may include appropriate multiplexer-demultiplexer (MUX-DEMUX) units, or other hardware and software, for handling the encoding of both audio and video in a common or separate data stream. Where applicable, the MUX-DEMUX units may conform to the ITU H.223 multiplexer protocol or other protocols, such as the User Datagram Protocol (UDP).
[0038] The video encoder 20 and the video decoder 30 may each be implemented as any of a variety of suitable encoder circuit configurations, such as one or more microprocessors, digital signal processors (DSPs), application specific integrated circuits (ASICs), field programmable gate arrays (FPGAs), discrete logic, software, hardware, firmware, or any combination thereof. When the techniques are implemented partially in software, the device may store instructions for the software in a suitable non-transitory computer-readable medium and execute the instructions in hardware using one or more processors to perform the techniques of this disclosure. Each of the video encoder 20 and the video decoder 30 may be included in one or more encoders or decoders, any of which may be integrated in the respective device as part of a combined encoder / decoder (codec). The device including the video encoder 20 and / or the video decoder 30 may include an integrated circuit, a microprocessor, and / or a wireless communication device such as a cellular phone.
[0039] FIG. 2 is a block diagram illustrating an example of a video encoder 20 that may implement video coding techniques. Video encoder 20 may perform intra-coding and inter-coding of video blocks within a video slice. Intra-coding relies on spatial prediction to reduce or remove spatial redundancy in video within a given video frame or picture. Inter-coding relies on temporal prediction to reduce or remove temporal redundancy in video within adjacent frames or pictures of a video sequence. An intra-mode (I-mode) may refer to any of several spatial-based coding modes. An inter-mode, such as unidirectional (also called uni-predictive) prediction (P-mode) or bi-predictive (also called bi-predictive) (B-mode), may refer to any of several temporal-based coding modes.
[0040] As shown in FIG. 2, video encoder 20 receives a current video block in a video frame to be encoded. In the example of FIG. 2, video encoder 20 includes a mode selection unit 40, a reference frame memory 64, an adder 50, a transform processing unit 52, a quantization unit 54, and an entropy coding unit 56. In turn, mode selection unit 40 includes a motion compensation unit 44, a motion estimation unit 42, an intra-prediction (also called intra prediction) unit 46, and a partition unit 48. For video block reconstruction, video encoder 20 also includes an inverse quantization unit 58, an inverse transform unit 60, and an adder 62. A deblocking filter (not shown in FIG. 2) may also be included to filter block boundaries to remove blockiness artifacts from the reconstructed video. If desired, the deblocking filter will typically filter the output of adder 62. In addition to the deblocking filter, additional filters (in-loop or post-loop) may also be used. Such a filter is not shown for simplicity, but may filter the output of summer 50 (as an in-loop filter) if desired.
[0041] During the encoding process, video encoder 20 receives a video frame or slice to be coded. The frame or slice may be divided into multiple video blocks. Motion estimation unit 42 and motion compensation unit 44 perform inter-predictive coding of the received video block relative to one or more blocks in one or more reference frames to provide temporal prediction. Intra prediction unit 46 may alternatively perform intra-predictive coding of the received video block relative to one or more neighboring blocks in the same frame or slice as the block to be coded to provide spatial prediction. Video encoder 20 may perform multiple coding passes, for example, to select an appropriate coding mode for each block of video data.
[0042] Moreover, partition unit 48 may partition blocks of video data into sub-blocks based on an evaluation of a previous partitioning scheme in a previous coding pass. For example, partition unit 48 may first partition a frame or slice into largest coding units (LCUs) and partition each of the LCUs into sub-coding units (sub-CUs) based on a rate-distortion analysis (e.g., rate-distortion optimization). Mode selection unit 40 may further generate a quadtree data structure indicating the partitioning of the LCUs into sub-CUs. A leaf-node CU of the quadtree may include one or more prediction units (PUs) and one or more transform units (TUs).
[0043] This disclosure uses the term "block" to refer to any of a CU, PU, or TU in the context of HEVC, or similar data structures in the context of other standards (e.g., macroblocks and their subblocks in H.264 / AVC). A CU includes a coding node, a PU, and a TU associated with the coding node. The size of a CU corresponds to the size of the coding node and is square in shape. The size of a CU may range from 8×8 pixels to the size of a treeblock with a maximum of 64×64 pixels or more. Each CU may include one or more PUs and one or more TUs. Syntax data associated with a CU may, for example, describe the partitioning of a CU into one or more PUs. The partitioning mode may differ between whether a CU is coded in skip mode or direct mode, intra-prediction mode, or inter-prediction (also called inter prediction) mode. A PU may be partitioned to be non-square in shape. Syntax data associated with a CU may also describe the partitioning of a CU into one or more TUs, for example, according to a quadtree. The TUs can be square or non-square (eg, rectangular) in shape.
[0044] Mode select unit 40 may, for example, select a coding mode, i.e., one of intra-mode or inter-mode, based on the error result, and provide the resulting intra-coded or inter-coded block to summer 50 for generating residual block data and to summer 62 for reconstructing a coded block for use as a reference frame. Mode select unit 40 also provides syntax elements such as motion vectors, intra-mode indicators, partition information, and other such syntax information to entropy coding unit 56.
[0045] Motion estimation unit 42 and motion compensation unit 44 may be highly integrated, but are illustrated separately for conceptual purposes. Motion estimation performed by motion estimation unit 42 is the process of generating motion vectors, which estimate motion for a video block. A motion vector may indicate the displacement of a PU of a video block in a current video frame or picture, for example, relative to a current block being coded in a current frame (or other coded unit) as compared to a predictive block in a reference frame (or other coded unit). A predictive block is a block that is found to be a good match for a block to be coded in terms of pixel difference, which may be determined by sum of absolute difference (SAD), sum of square difference (SSD), or other difference metric. In some examples, video encoder 20 may calculate values for sub-integer pixel locations of a reference picture stored in reference frame memory 64. For example, video encoder 20 may interpolate values of quarter-pixel locations, eighth-pixel locations, or other fractional pixel locations of a reference picture. Thus, motion estimation unit 42 may perform motion searches for full-pixel and fractional-pixel locations, and may output motion vectors with fractional-pixel accuracy.
[0046] Motion estimation unit 42 calculates a motion vector for a PU of a video block in an inter-coded slice by comparing the position of the PU with the position of a predictive block of a reference picture. The reference pictures may be selected from a first reference picture list (List 0) or a second reference picture list (List 1), each of which identifies one or more reference pictures stored in reference frame memory 64. Motion estimation unit 42 sends the calculated motion vector to entropy encoding unit 56 and motion compensation unit 44.
[0047] The motion compensation performed by motion compensation unit 44 may involve fetching or generating a predictive block based on the motion vector determined by motion estimation unit 42. Again, motion estimation unit 42 and motion compensation unit 44 may be functionally integrated in some examples. Upon receiving the motion vector for the PU of the current video block, motion compensation unit 44 may locate the predictive block to which the motion vector points in one of the reference picture lists. Adder 50 forms a residual video block by subtracting pixel values of the predictive block from pixel values of the current video block being coded to form pixel difference values, as described below. In general, motion estimation unit 42 performs motion estimation on the luma component, and motion compensation unit 44 uses the motion vector calculated based on the luma component for both the chroma and luma components. Mode selection unit 40 may also generate syntax elements related to the video blocks and video slices for use by video decoder 30 in decoding the video blocks of the video slices.
[0048] Intra prediction unit 46 may intra predict the current block as an alternative to the inter prediction performed by motion estimation unit 42 and motion compensation unit 44, as described above. In particular, intra prediction unit 46 may determine an intra prediction mode to use to encode the current block. In some examples, intra prediction unit 46 may encode the current block using different intra prediction modes, e.g., during separate encoding passes, and intra prediction unit 46 (or mode selection unit 40, in some examples) may select an appropriate intra prediction mode to use from the tested modes.
[0049] For example, intra prediction unit 46 may calculate rate-distortion values for various tested intra prediction modes using a rate-distortion analysis, and may select from among the tested modes the intra prediction mode with the best rate-distortion characteristics. The rate-distortion analysis generally determines the amount of distortion (i.e., error) between the coded block and the original uncoded block that was coded to produce the coded block, as well as the bit rate (i.e., number of bits) used to produce the coded block. Intra prediction unit 46 may calculate ratios from the distortion and rate for the various coded blocks to determine which intra prediction mode exhibits the best rate-distortion value for the block.
[0050] In addition, intra prediction unit 46 may be configured to code the depth blocks of the depth map using a depth modeling mode (DMM). Mode selection unit 40 may determine whether an available DMM mode produces better coding results than the intra prediction mode and other DMM modes, for example, using rate-distortion optimization (RDO). Data for texture images corresponding to the depth map may be stored in reference frame memory 64. Motion estimation unit 42 and motion compensation unit 44 may also be configured to inter predict the depth blocks of the depth map.
[0051] After selecting an intra-prediction mode for the block (e.g., one of a conventional intra-prediction mode or a DMM mode), intra-prediction unit 46 may provide information indicating the selected intra-prediction mode for the block to entropy coding unit 56. Entropy coding unit 56 may encode the information indicating the selected intra-prediction mode. Video encoder 20 may include configuration data in the transmitted bitstream, which may include multiple intra-prediction mode index tables and multiple modified intra-prediction mode index tables (also referred to as codeword mapping tables), definitions of coding contexts for various blocks, and an indication of the most probable intra-prediction mode to use for each of the contexts, the intra-prediction mode index table, and the modified intra-prediction mode index table.
[0052] Video encoder 20 forms a residual video block by subtracting the prediction data from mode select unit 40 from the original video block being coded. Summer 50 represents one or more components that perform this subtraction operation.
[0053] Transform processing unit 52 applies a transform, such as a discrete cosine transform (DCT) or a conceptually similar transform, to the residual block, resulting in a video block that includes residual transform coefficient values. Transform processing unit 52 may perform other transforms that are conceptually similar to the DCT. Wavelet transforms, integer transforms, subband transforms, or other types of transforms may also be used.
[0054] Transform processing unit 52 applies a transform to the residual block, resulting in a block of residual transform coefficients. The transform may convert the residual information from a pixel value domain to a transform domain, such as the frequency domain. Transform processing unit 52 may send the resulting transform coefficients to quantization unit 54. Quantization unit 54 quantizes the transform coefficients to further reduce the bit rate. The quantization process may reduce the bit depth associated with some or all of the coefficients. The degree of quantization may be modified by adjusting a quantization parameter. In some examples, quantization unit 54 may then perform a scan of a matrix including the quantized transform coefficients. Alternatively, entropy coding unit 56 may perform the scan.
[0055] Following quantization, entropy coding unit 56 entropy codes the quantized transform coefficients. For example, entropy coding unit 56 may perform context-adaptive variable length coding (CAVLC), context-adaptive binary arithmetic coding (CABAC), syntax-based context-adaptive binary arithmetic coding (SBAC), probability interval partitioning entropy (PIPE) coding, or another entropy coding technique. In the case of context-based entropy coding, the context may be based on neighboring blocks. Following entropy coding by entropy coding unit 56, the encoded bitstream may be transmitted to another device (e.g., video decoder 30) or archived for later transmission or retrieval.
[0056] Inverse quantization unit 58 and inverse transform unit 60 apply inverse quantization and inverse transformation, respectively, to reconstruct the residual block in the pixel domain, e.g., for later use as a reference block. Motion compensation unit 44 may calculate a reference block by adding the residual block to a predictive block of one of the frames in reference frame memory 64. Motion compensation unit 44 may also apply one or more interpolation filters to the reconstructed residual block to calculate sub-integer pixel values for use in motion estimation. Adder 62 adds the reconstructed residual block to the motion compensated predictive block produced by motion compensation unit 44, resulting in a reconstructed video block for storage in reference frame memory 64. The reconstructed video block may be used by motion estimation unit 42 and motion compensation unit 44 as a reference block for inter-coding blocks in subsequent video frames.
[0057] 3 is a block diagram illustrating an example of a video decoder 30 that may implement video coding techniques. In the example of FIG. 3, the video decoder 30 includes an entropy decoding unit 70, a motion compensation unit 72, an intra prediction unit 74, an inverse quantization unit 76, an inverse transform unit 78, a reference frame memory 82, and an adder 80. The video decoder 30 may perform a decoding path, in some examples, generally opposite to the encoding path described with respect to the video encoder 20 (FIG. 2). The motion compensation unit 72 may generate prediction data based on a motion vector received from the entropy decoding unit 70, while the intra prediction unit 74 may generate prediction data based on an intra prediction mode indicator received from the entropy decoding unit 70.
[0058] During the decoding process, video decoder 30 receives an encoded video bitstream from video encoder 20, representing video blocks of encoded video slices and associated syntax elements. Entropy decoding unit 70 of video decoder 30 entropy decodes the bitstream to generate quantized coefficients, motion vectors or intra-prediction mode indicators, and other syntax elements. Entropy decoding unit 70 forwards the motion vectors and other syntax elements to motion compensation unit 72. Video decoder 30 may receive syntax elements at the video slice level and / or the video block level.
[0059] When a video slice is coded as an intra-coded (I) slice, intra prediction unit 74 may generate predictive data for video blocks of the current video slice based on the signaled intra prediction mode and data from previously decoded blocks of the current frame or picture. When a video frame is coded as an inter-coded (e.g., B, P, or GPB) slice, motion compensation unit 72 generates predictive blocks for video blocks of the current video slice based on motion vectors and other syntax elements received from entropy decoding unit 70. The predictive blocks may be generated from one of the reference pictures in one of the reference picture lists. Video decoder 30 may construct the reference frame lists, i.e., List 0 and List 1, using a default construction technique based on reference pictures stored in reference frame memory 82.
[0060] Motion compensation unit 72 determines prediction information for video blocks of the current video slice by parsing the motion vectors and other syntax elements, and uses the prediction information to generate predictive blocks for the current video block being decoded. For example, motion compensation unit 72 uses some of the received syntax elements to determine the prediction mode (e.g., intra prediction or inter prediction) used to code the video blocks of the video slice, the inter-prediction slice type (e.g., B slice, P slice, or GPB slice), configuration information for one or more of the reference picture lists for the slice, a motion vector for each inter-coded video block of the slice, an inter-prediction status for each inter-coded video block of the slice, and other information for decoding video blocks in the current video slice.
[0061] Motion compensation unit 72 may also perform the interpolation based on an interpolation filter. Motion compensation unit 72 may calculate interpolated values for sub-integer pixels of the reference block using an interpolation filter as used by video encoder 20 during the encoding of the video block. In this case, motion compensation unit 72 may determine the interpolation filter used by video encoder 20 from a received syntax element and may use that interpolation filter to generate the predictive block.
[0062] Data for texture images that correspond to the depth maps may be stored in reference frame memory 82. Motion compensation unit 72 may also be configured to inter-predict depth blocks of the depth maps.
[0063] With the above in mind, video compression techniques perform spatial (intra-picture) prediction and / or temporal (inter-picture) prediction to reduce or remove redundancy inherent in video sequences. For block-based video coding, a video slice (i.e., a video picture, or a portion of a video picture) may be partitioned 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 encoded using spatial prediction with respect to reference samples in neighboring blocks in the same picture. Video blocks in an inter-coded (P or B) slice of a picture may use 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 a reference picture may be referred to as a reference frame.
[0064] Spatial or temporal prediction results in a predictive block for the block to be coded. The residual data represents pixel differences between the original block to be coded and the predictive block. Inter-coded blocks are coded according to a motion vector pointing to a block of reference samples forming the predictive block, and the residual data indicating the difference between the coded block and the predictive block. Intra-coded blocks are coded according to an intra-coding mode and the residual data. For further compression, the residual data may be transformed from the pixel domain to a transform domain, resulting in residual transform coefficients, which may then be quantized. The quantized transform coefficients, originally arranged in a two-dimensional array, may be scanned to generate a one-dimensional vector of transform coefficients, and entropy coding may be applied to achieve even further compression.
[0065] Image and video compression has undergone rapid growth, leading to a variety of coding standards. Such video coding standards include Advanced Video Coding (AVC), also known as ITU-T H.261, ISO / IEC 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) and Multiview Video Coding Plus Depth (MVC+D), as well as 3D AVC (3D-AVC). HEVC includes extensions such as Scalable HEVC (SHVC), Multiview HEVC (MV-HEVC), and 3D HEVC (3D-HEVC).
[0066] There is also an emerging video coding standard called Versatile Video Coding (VVC) being developed by the ITU-T and ISO / IEC Joint Video Experts Team (JVET). The VVC standard has several working drafts, but one working draft (WD) of VVC in particular is referenced herein: B. Bross, J. Chen, and S. Liu, "Versatile Video Coding (Draft 4)," JVET-M1001-v5, 13th JVET Meeting, January 2019 (VVC Draft 4).
[0067] The description of the techniques disclosed herein is based on an under-developed video coding standard, namely Versatile Video Coding (VVC) by the ITU-T and ISO / IEC Joint Video Experts Team (JVET), however the techniques also apply to other video codec specifications.
[0068] FIG. 4 is a depiction 400 of the relationship between an IRAP picture 402 relative to a leading picture 404 and a trailing picture 406 in decoding order 408 and presentation order 410. In one embodiment, the IRAP picture 402 is referred to as a clean random access (CRA) picture, or an instantaneous decoder refresh (IDR) picture with a random access decodable leading (RADL) picture. In HEVC, IDR pictures, CRA pictures, and Broken Link Access (BLA) pictures are all considered IRAP pictures 402. For VVC, it was agreed during the 12th JVET meeting in October 2018 to have both IDR and CRA pictures as IRAP pictures.
[0069] As shown in Figure 4, leading pictures 404 (e.g., pictures 2 and 3) follow the IRAP picture 402 in decoding order 408 but precede the IRAP picture 402 in presentation order 410. A trailing picture 406 follows the IRAP picture 402 in both decoding order 408 and presentation order 410. Although two leading pictures 404 and one trailing picture 406 are shown in Figure 4, those skilled in the art will understand that in actual applications, there may be more or fewer leading pictures 404 and / or trailing pictures 406 in the decoding order 408 and presentation order 410.
[0070] The leading pictures 404 in FIG. 4 are divided into two types, namely random access skipped leading (RASL) and RADL. When the decoding starts from an IRAP picture 402 (e.g., picture 1), the RADL picture (e.g., picture 3) can be correctly decoded, but the RASL picture (e.g., picture 2) cannot be correctly decoded. Therefore, the RASL picture is discarded. In light of the difference between RADL and RASL pictures, the type of the leading picture associated with an IRAP picture should be identified as either RADL or RASL for efficient and appropriate coding. In HEVC, when a RASL picture and a RADL picture exist, it is constrained that for the RASL picture and the RADL picture associated with the same IRAP picture, the RASL picture must precede the RADL picture in the presentation order 410.
[0071] The IRAP picture 402 provides two important features / benefits: First, the presence of the IRAP picture 402 indicates that the decoding process can start from that picture. This feature allows a random access feature where the decoding process starts at a position in the bitstream, not necessarily at the beginning of the bitstream, as long as the IRAP picture 402 is present in that position. Second, the presence of the IRAP picture 402 refreshes the decoding process such that pictures coded starting at the IRAP picture 402 are coded without any reference to previous pictures, except for RASL pictures. Thus, having the IRAP picture 402 present in the bitstream will stop any errors that may occur during the decoding of pictures coded before the IRAP picture 402 from propagating to the IRAP picture 402 and pictures following the IRAP picture 402 in the decoding order 408.
[0072] While providing important functionality, the IRAP picture 402 comes with a penalty in compression efficiency. The presence of the IRAP picture 402 causes a bitrate spike. This penalty in compression efficiency stems from two reasons. First, because the IRAP picture 402 is an intra-predicted picture, the picture itself will require relatively more bits to represent compared to other pictures (e.g., the leading picture 404, the trailing picture 406) that are inter-predicted pictures. Second, because the presence of the IRAP picture 402 breaks temporal prediction (because it causes the decoder to refresh the decoding process, and one of the actions of the decoding process in this regard is to remove previous reference pictures in the decoded picture buffer (DPB)), the IRAP picture 402 makes the coding of pictures that follow it in the decoding order 408 less efficient (i.e., requiring more bits to represent) because they have fewer reference pictures for their inter-predictive coding.
[0073] Among the picture types considered to be IRAP pictures 402, IDR pictures in HEVC have different signaling and derivation when compared to other picture types. Some of the differences are:
[0074] For signaling and derivation of the picture order count (POC) value of an IDR picture, the most significant bit (MSB) portion of the POC is not derived from the previous key picture, but is simply set equal to 0.
[0075] In order to signal information required for reference picture management, the slice header of an IDR picture does not include information required to be signaled to support reference picture management. For other picture types (i.e., CRA, trailing, temporal sub-layer access (TSA), etc.), information such as the reference picture set (RPS) described below, or other forms of similar information (e.g., reference picture list) are required for the reference picture marking process (i.e., the process for determining the status of a reference picture in the decoded picture buffer (DPB), i.e., whether used for reference and unused for reference). However, for an IDR picture, such information does not need to be signaled, because the presence of the IDR indicates that the decoding process simply marks all reference pictures in the DPB as unused for reference.
[0076] In HEVC and VVC, the IRAP picture 402 and the leading picture 404 may each be included in a single network abstraction layer (NAL) unit. A set of NAL units may be referred to as an access unit. The IRAP picture 402 and the leading picture 404 are given different NAL unit types so that they can be easily identified by system level applications. For example, a video splicer needs to understand the coded picture type without having to understand too many details of syntax elements in the coded bitstream, in particular to identify the IRAP picture 402 from a non-IRAP picture and to identify the leading picture 404 from the trailing picture 406, including determining the RASL and RADL pictures. The trailing picture 406 is a picture associated with the IRAP picture 402 and following the IRAP picture 402 in the presentation order 410. A picture may follow a particular IRAP picture 402 in decoding order 408, or may precede any other IRAP picture 402 in decoding order 408. For this reason, giving the IRAP pictures 402 and leading pictures 404 their own NAL unit type is useful for such applications.
[0077] For HEVC, the NAL unit types for an IRAP picture include: BLA with Leading Picture (BLA_W_LP): A NAL unit of a Broken Link Access (BLA) picture that may be followed in decoding order by one or more leading pictures. BLA with RADL (BLA_W_RADL): A NAL unit of a BLA picture that may be followed in decoding order by one or more RADL pictures but not by a RASL picture. BLA without Leading Picture (BLA_N_LP): A NAL unit of a BLA picture that is not followed by a leading picture in decoding order. IDR with RADL (IDR_W_RADL): A NAL unit of an IDR picture that may be followed in decoding order by one or more RADL pictures but not by a RADL picture. IDR without leading picture (IDR_N_LP): A NAL unit that is an IDR picture that is not followed by a leading picture in decoding order. CRA: A NAL unit of a clean random access (CRA) picture that may be followed by a leading picture (i.e., either a RASL picture or a RADL picture, or both). RADL: RADL picture NAL unit. RASL: NAL unit of a RASL picture.
[0078] For VVC, the NAL unit types for the IRAP picture 402 and the leading picture 404 are as follows: IDR with RADL (IDR_W_RADL): A NAL unit of an IDR picture that may be followed in decoding order by one or more RADL pictures but not by a RADL picture. IDR without leading picture (IDR_N_LP): A NAL unit that is an IDR picture that is not followed by a leading picture in decoding order. CRA: A NAL unit of a clean random access (CRA) picture that may be followed by a leading picture (i.e., either a RASL picture or a RADL picture, or both). RADL: RADL picture NAL unit. RASL: NAL unit of a RASL picture.
[0079] Sequential intra refresh / gradual decoding refresh is described below.
[0080] For low-delay applications, it is desirable to avoid coding pictures as IRAP pictures (e.g., IRAP picture 402) because their bit rate requirements are relatively large compared to non-IRAP pictures (i.e., P / B pictures) and therefore cause larger latency / delay. However, completely avoiding the use of IRAP may not be possible in all low-delay applications. For example, for conversational applications such as multi-party teleconferencing, it is necessary to provide periodic points at which new users can join the teleconference.
[0081] To provide access to a bitstream that allows new users to join a multi-party teleconferencing application, one possible approach is to use a progressive intra refresh technique (PIR) rather than using IRAP pictures to avoid having peaks in the bitrate. PIR is sometimes also called gradual decoding refresh (GDR). The terms PIR and GDR may be used interchangeably in this disclosure.
[0082] FIG. 5 illustrates a gradual decoding refresh (GDR) technique 500. As illustrated, the GDR technique 500 is illustrated with a GDR picture 502, one or more trailing pictures 504, and a recovery point picture 506 in a coded video sequence 508 of a bitstream. In one embodiment, the GDR picture 502, the trailing picture 504, and the recovery point picture 506 may define a GDR period in a CVS 508. The CVS 508 is a series of pictures (or a portion thereof) starting with the GDR picture 502 and including all pictures (or a portion thereof) up to (but not including) the next GDR picture or up to the end of the bitstream. The GDR period is a series of pictures starting with the GDR picture 502 and including all pictures up to (and including) the recovery point picture 506.
[0083] 5, the GDR technique 500 or principle operates across a sequence of pictures beginning with a GDR picture 502 and ending with a recovery point picture 506. The GDR picture 502 includes a refreshed / clean region 510 that contains blocks that are all coded using intra prediction (i.e., intra-predicted blocks) and an unrefreshed / dirty region 512 that contains blocks that are all coded using inter prediction (i.e., inter-predicted blocks).
[0084] The trailing picture 504, which is directly adjacent to the GDR picture 502, includes a refreshed / clean region 510 having a first portion 510A coded using intra prediction and a second portion 510B coded using inter prediction. The second portion 510B is coded, for example, by referencing the refreshed / clean region 510 of a preceding picture in the GDR period of the CVS 508. As shown, the refreshed / clean region 510 of the trailing picture 504 grows as the coding process moves or progresses in a consistent direction (e.g., from left to right), correspondingly shrinking the unrefreshed / dirty region 512. Eventually, a recovery point picture 506 is obtained from the coding process, which includes only the refreshed / clean region 510. In particular, as will be further described below, the second portion 510B of the refreshed / clean region 510, which is coded as an inter prediction block, only needs to reference the refreshed / clean region 510 in the reference picture.
[0085] In HEVC, the GDR technique 500 of Figure 5 was non-normatively supported using a recovery point supplemental enhancement information (SEI) message and a region refresh information SEI message. These two SEI messages do not specify how GDR is performed. Rather, the two SEI messages simply provide a mechanism to indicate the first and last pictures in a GDR period (i.e., provided by the recovery point SEI message) and the region being refreshed (i.e., provided by the region refresh information SEI message).
[0086] In practice, the GDR technique 500 is performed by using two techniques together: constrained intra prediction (CIP) and encoder constraint on motion vectors. Since CIP allows regions that do not use samples from unrefreshed regions (e.g., unrefreshed / dirty region 512) to be used for reference, CIP can be used for GDR purposes, especially for coding regions that are coded only as intra-predicted blocks (e.g., first part 510A of refreshed / clean region 510). However, the use of CIP causes serious coding performance degradation, since the constraint on intra blocks must be applied not only to intra blocks in the refreshed region but also to all intra blocks in the picture. The encoder constraint on motion vectors restricts the encoder from using any samples in the reference picture that are located outside the refreshed region. Such constraint causes non-optimal motion search.
[0087] 6 is a schematic diagram illustrating an undesirable motion search 600 when using encoder constraints to support GDR. As shown, the motion search 600 is performed using a current picture 602 and a reference picture 603.603 The current picture 602 and the reference picture 603 5 include a refreshed region 606 coded using intra prediction, a refreshed region 608 coded using inter prediction, and an unrefreshed region 608. The refreshed region 604, the refreshed region 606, and the unrefreshed region 608 are similar to the first portion 510A of the refreshed / clean region 510, the second portion 510B of the refreshed / clean region 510, and the unrefreshed / dirty region 512 in FIG.
[0088] During the motion search process, the encoder is constrained or prevented from selecting any motion vector 610 that would result in some of the samples of the reference block 612 being located outside the refreshed region 606. This is done even when the reference block 612 provides the best rate-distortion cost criterion when predicting the current block 614 in the current picture 602. Thus, Figure 6 illustrates the reason for the non-optimality in the motion search 600 when using encoder constraints to support GDR.
[0089] JVET contributions JVET-K0212 and JVET-L0160 describe an implementation of GDR based on the use of CIP and encoder constraint techniques. The implementation can be summarized as follows: intra prediction mode is forced for coding units per column, constrained intra prediction is enabled to ensure reconstruction of intra CUs, and motion vectors are constrained to point within the refreshed area while allowing for additional margin to avoid error propagation due to filters (e.g., 6 pixels) and removing past reference pictures when re-looping intra columns.
[0090] JVET contribution JVET-M0529 proposed a way to normatively indicate that pictures are the first and last pictures in a GDR period. The proposed idea works as follows:
[0091] A new NAL unit with NAL unit type recovery point indication is specified as a non-video coding layer (VCL) NAL unit. The payload of the NAL unit includes syntax elements for specifying information that can be used to derive a POC value of the last picture in a GDR period. An access unit that includes a non-VCL NAL unit with type recovery point indication is called a recovery point begin (RBP) access unit (AU), and a picture in an RBP access unit is called an RBP picture. The decoding process can start from the RBP AU. When decoding starts from the RBP AU, all pictures in the GDR period except the last picture are not output.
[0092] Some of the problems with existing GDR designs are discussed.
[0093] Existing designs / methods for supporting GDR have at least the following problems:
[0094] The method for normatively specifying GDR in JVET-M0529 has the following problems: The proposed method does not explain how GDR is performed. Instead, the proposed method only provides some signaling to indicate the first and last pictures in the GDR period. A new non-VCL NAL unit is needed to indicate the first and last pictures in the GDR period. This is redundant, since the information contained in the recovery point indication (RPI) NAL unit can simply be included in the tile group header of the first picture in the GDR period. Also, the proposed method cannot indicate which areas in the picture in the GDR period are refreshed and unrefreshed.
[0095] The GDR approach described in JVET-K0212 and JVET-L0160 has the following problems. First, the use of CIP. To prevent any samples from non-refreshed regions from being used for spatial reference, it is necessary to code the refreshed region using intra prediction with some constraints. When CIP is used, the coding is picture-based, which means that all intra blocks in the picture must also be coded as CIP intra blocks. This therefore causes performance degradation. Furthermore, the use of encoder constraints to limit the motion search prevents the encoder from choosing the best motion vector when the samples of the reference block associated with the motion vector are not entirely within the refreshed region in the reference picture. Also, the refreshed region coded using only intra prediction is not CTU size. Instead, the refreshed region can be smaller than the CTU size, down to the minimum CU size. This unnecessarily complicates the implementation, as it may require block-level representation.
[0096] Techniques are disclosed herein for supporting gradual decoding refresh (GDR) in video coding. The disclosed techniques allow sequential intra refresh to enable random access without the need to use intra random access point (IRAP) pictures. When a GDR picture is the first picture in decoding order or the first picture following an EOS NAL unit in decoding order, a value of a flag is set to prevent the GDR picture and any trailing pictures between the GDR picture and the recovery point picture in output order from being output. Setting the flag in this manner prevents potentially dirty data from being output to the display. That is, the value of the flag setting controls whether potentially dirty data from the GDR picture is output or whether the video decoder waits for perfect synchronization before starting to display the data. By having the ability to limit dirty data from being output, the coder / decoder (also called "codec") in video coding is improved compared to current codecs. In effect, the improved video coding process provides a better user experience to the user when the video is sent, received, and / or viewed.
[0097] In order to solve one or more of the problems described above, the present disclosure discloses the following aspects, each of which may be applied individually and some of which may be applied in combination.
[0098] 1) A VCL NAL unit with type GDR_NUT is defined. A picture with the NAL unit type GDR_NUT is called a GDR picture, i.e., the first picture in a GDR period. b. A GDR picture has temporalID equal to 0. An access unit that contains a GDR picture is called a GDR access unit. As mentioned above, an access unit is a set of NAL units. Each NAL unit may contain a single picture.
[0099] 2) A coded video sequence (CVS) may start at a GDR access unit.
[0100] 3) The GDR access unit is the first access unit in the CVS if one of the following is true: a. The GDR access unit is the first access unit in the bitstream. b. The GDR access unit immediately follows an end-of-sequence (EOS) access unit. c. The GDR access unit immediately follows an end-of-bitstream (EOB) access unit. d. A decoder flag, called NoIncorrectPicOutputFlag, is associated with the GDR picture and the value of the flag is set equal to 1 (ie, true) by an entity outside the decoder.
[0101] 4) When a GDR picture is the first access unit in a CVS, the following applies: All reference pictures in the DPB are marked as "unused for reference". b. The POC MSB of the picture is set equal to 0. c. The GDR picture and all pictures following the GDR picture in output order up to but not including the last picture in the GDR period are not output (ie, are marked as "not needed for output").
[0102] 5) A flag is signaled in the sequence level parameter set (e.g., in the SPS) to specify whether GDR is enabled. The flag may be specified as gdr_enabled_flag. b. When the flag is equal to 1, GDR pictures may be present in the CVS. Otherwise, when the flag is equal to 0, GDR is not enabled so that GDR pictures are not present in the CVS.
[0103] 6) Information that can be used to derive a POC value for the last picture in the GDR period is signaled in the tile group header of the GDR picture. The information is signaled as a delta POC between the last picture in the GDR period and the GDR picture. The information may be signaled using a syntax element designated as recovery_point_cnt. b. The presence of the syntax element recovery_point_cnt in the tile group header may be conditional on the value of the gdr_enabled flag and the NAL unit type of the picture, i.e., the flag is present only if gdr_enabled_flag is equal to 1 and the nal_unit_type of the NAL unit containing the tile group is GDR_NUT.
[0104] 7) A flag is signaled in the tile group header to specify whether the tile group is part of a refreshed region or not. The flag may be specified as refreshed_region_flag. b. The presence of the flag may be conditional on the value of gdr_enabled_flag and on whether the picture that contains the tile group is within a GDR period. Thus, the flag is present only if all of the following are true: i. The value of gdr_enabled_flag is equal to 1. ii. The POC of the current picture is greater than or equal to the POC value of the last GDR picture (when the current picture is a GDR picture, the last GDR picture is the current picture) and is less than the POC of the last picture in the GDR period. c. When the flag is not present in the tile group header, the flag's value is inferred to be equal to 1.
[0105] 8) All tile groups with refreshed_region_flag equal to 1 cover connected regions. Similarly, all tile groups with refreshed_region_flag equal to 0 also cover connected regions.
[0106] 9) Tile groups with refreshed_region_flag can be of type I (i.e., intra-tile group) or B or P (i.e., inter-tile group).
[0107] 10) Each picture starting from the GDR picture until the last picture in the GDR period contains at least one tile group with refreshed_region_flag equal to 1.
[0108] 11) The GDR picture contains at least one tile group with refreshed_region_flag equal to 1 and tile_group_type equal to I (i.e., an intra tile group).
[0109] 12) When gdr_enabled_flag is equal to 1, rectangular tile group information, i.e., the number of tile groups and their addresses, can be signaled either in the picture parameter set (PPS) or in the tile group header. To do this, a flag is signaled in the PPS to specify whether rectangular tile group information is present in the PPS or not. This flag is sometimes called rect_tile_group_info_in_pps_flag. This flag may be constrained to be equal to 1 when gdr_enabled_flag is equal to 1. a. In one alternative, rather than signaling whether rectangular tile group information is present in the PPS, a more general flag may be signaled in the PPS to specify whether tile group information (i.e., any type of tile group, such as rectangular tile groups, raster scan tile groups, etc.) is present in the PPS.
[0110] 13) When tile group information is not present in the PPS, it may be further constrained that there is no signaling of explicit tile group identifier (ID) information. Explicit tile group ID information includes signaled_tile_group_id_flag, signaled_tile_group_id_length_minus1, and tile_group_id[ i ].
[0111] 14) A flag is signaled to specify whether loop filtering operations that cross the boundary between refreshed and non-refreshed regions in the picture are allowed. a. This flag is signaled in the PPS and may be called loop_filter_across_refreshed_region_enabled_flag. The presence of loop_filter_across_refreshed_region_enabled_flag may be conditional on the value of loop_filter_across_tile_enabled_flag. When loop_filter_across_tile_enabled_flag is equal to 0, loop_filter_across_refreshed_region_enabled_flag may not be present and its value is inferred to be equal to 0. c. In one alternative, the flag may be signaled in the tile group header and its presence may be conditional on the value of refreshed_region_flag, ie, the flag is present only if the value of refreshed_region_flag is equal to 1.
[0112] 15) When a tile group is indicated to be a refreshed region and loop filters across the refreshed region are not enabled, the following applies: a. When neighboring tile groups that share an edge are not refreshed tile groups, no deblocking of edges at tile group boundaries is performed. b. The sample adaptive offset (SAO) process for blocks at tile group boundaries does not use any samples from outside the refreshed region boundary. c. The adaptive loop filtering (ALF) process for blocks at tile group boundaries does not use any samples from outside the refreshed region boundary.
[0113] 16) When gdr_enabled_flag is equal to 1, each picture is associated with variables that determine the boundaries of the refreshed area within the picture. These variables are sometimes referred to as: a. PicRefreshedLeftBoundaryPos for the left boundary position of the refreshed area in the picture. b. PicRefreshedRightBoundaryPos for the right boundary position of the refreshed area in the picture. c. PicRefreshedTopBoundaryPos for the top boundary position of the refreshed area in the picture. d. PicRefreshedBotBoundaryPos for the bottom boundary position of the refreshed area in the picture.
[0114] 17) The boundaries of the refreshed regions in a picture may be derived. The boundaries of the refreshed regions of a picture are updated by the decoder after the tile group headers are parsed and the value of refreshed_region_flag of the tile group is equal to 1.
[0115] 18) In an alternative to solution 17), the boundaries of refreshed areas in a picture are explicitly signaled within each tile group of the picture. A flag may be signaled to indicate whether the picture to which the tile group belongs contains an unrefreshed region. When it is specified that the picture does not contain an unrefreshed region, the refreshed boundary information is not signaled and may simply be inferred to be equal to the picture boundary.
[0116] 19) For the current picture, the boundaries of the refreshed region are used in the in-loop filter process as follows: For the deblocking process, determine the edges of the refreshed region to determine if the edges need to be deblocked. b. In the case of the SAO process, determine the boundaries of the refreshed region so that a clipping process can be applied to avoid using samples from the unrefreshed region when the loop filter across the refreshed region is not enabled. c. For the ALF process, determine the boundaries of the refreshed region so that a clipping process can be applied to avoid using samples from the unrefreshed region when the loop filter is not enabled to cross the refreshed region.
[0117] 20) For the motion compensation process, information about the boundaries of refreshed regions, in particular the boundaries of refreshed regions in the reference picture, is used as follows: when the current block in the current picture is in a tile group with refreshed_region_flag equal to 1 and the reference block is in a reference picture that contains a non-refreshed region, the following applies: a. The motion vector from the current block to its reference picture is clipped by the boundary of the refreshed region in that reference picture. b. For the fractional interpolation filter for a sample in the reference picture, this is clipped by the boundary of the refreshed region in the reference picture.
[0118] A detailed description of the embodiments of the present disclosure is provided. The description is related to the base text, which is the JVET contribution JVET-M1001-v5. That is, only the differences are described, but the text in the base text that is not mentioned below is applied as is. The text that is modified compared to the base text is in italics.
[0119] A definition is given.
[0120] 3.1 Clean Random Access (CRA) picture: An IRAP picture in which each VCL NAL unit has nal_unit_type equal to CRA_NUT. NOTE - A CRA picture does not reference any pictures other than itself for inter prediction in its decoding process and may be the first picture in the bitstream in decoding order or may appear later in the bitstream. A CRA picture may have an associated RADL or RASL picture. When a CRA picture has NoIncorrectPicOutputFlag equal to 1, the associated RASL picture is not output by the decoder because the RASL picture may not be decodable because it may contain references to pictures that do not exist in the bitstream.
[0121] 3.2 Coded Video Sequence (CVS): A sequence of access units that comprises, in decoding order, an IRAP access unit with NoIncorrectPicOutputFlag equal to 1 or a GDR access unit with NoIncorrectPicOutputFlag equal to 1, including all subsequent access units up to (but not including) any subsequent access units that are IRAP access units with NoIncorrectPicOutputFlag equal to 1 or GDR access units with NoIncorrectPicOutputFlag equal to 1, followed by 0 or more access units that are not IRAP access units with NoIncorrectPicOutputFlag equal to 1 or GDR access units with NoIncorrectPicOutputFlag equal to 1. NOTE 1 – An IRAP access unit can be an IDR access unit or a CRA access unit. For each IDR access unit, the value of NoIncorrectPicOutputFlag is equal to 1, and for each CRA access unit that is the first access unit in the bitstream in decoding order, it either follows the end-of-sequence NAL unit in decoding order or is the first access unit that has HandleCraAsCvsStartFlag equal to 1. NOTE 2 – For each GDR access unit that is the first access unit in the bitstream in decoding order, the value of NoIncorrectPicOutputFlag equal to 1 is the first access unit that follows the end-of-sequence NAL unit in decoding order or has HandleGdrAsCvsStartFlag equal to 1.
[0122] 3.3 Gradual Decoding Refresh (GDR) access unit: An access unit in which the coded picture is a GDR picture.
[0123] 3.4 Gradual Decoding Refresh (GDR) picture: A picture in which each VCL NAL unit has nal_unit_type equal to GDR_NUT.
[0124] 3.5 Random Access Skip-Leading (RASL) picture: A coded picture in which each VCL NAL unit has nal_unit_type equal to RASL_NUT. NOTE - Every RASL picture is a leading picture of the associated CRA picture. When the associated CRA picture has NoIncorrectPicOutputFlag equal to 1, the RASL picture is not output and may not be correctly decodable because it may contain references to pictures that do not exist in the bitstream. RASL pictures are not used as reference pictures for the decoding process of non-RASL pictures. When present, every RASL picture precedes in decoding order all trailing pictures of the same associated CRA picture.
[0125] Sequence Parameter Set raw byte sequence payload (RBSP) syntax and semantics.
[0126] [Table 1]
[0127] A gdr_enabled_flag equal to 1 specifies that GDR pictures may be present in the coded video sequence. A gdr_enabled_flag equal to 0 specifies that no GDR pictures are present in the coded video sequence.
[0128] Syntax and semantics of the picture parameter set RBSP.
[0129] [Table 2]
[0130] rect_tile_group_info_in_pps_flag equal to 1 specifies that rectangular tile group information is signaled in the PPS. rect_tile_group_info_in_pps_flag equal to 0 specifies that rectangular tile group information is not signaled in the PPS.
[0131] It is a bitstream conformance requirement that when the value of gdr_enabled_flag in an active SPS is equal to 0, the value of rect_tile_group_info_in_pps_flag must be equal to 0.
[0132] loop_filter_across_refreshed_region_enabled_flag equal to 1 specifies that in-loop filtering operations may be performed in pictures that reference the PPS across tile group boundaries with refreshed_region_flag equal to 1. loop_filter_across_refreshed_region_enabled_flag equal to 0 specifies that in-loop filtering operations are not performed across tile group boundaries with refreshed_region_flag equal to 1 in pictures that reference the PPS. In-loop filtering operations include deblocking filters, sample adaptive offset filters, and adaptive loop filter operations. When not present, the value of loop_filter_across_refreshed_region_enabled_flag is inferred to be equal to 0.
[0133] signalled_tile_group_id_flag equal to 1 specifies that the tile group ID for each tile group is signaled. signalled_tile_group_index_flag equal to 0 specifies that the tile group ID is not signaled. When not present, the value of signalled_tile_group_index_flag is inferred to be equal to 0.
[0134] signalled_tile_group_id_length_minus1+1 specifies the number of bits used to represent the syntax element tile_group_id[ i ], when present, and the syntax element tile_group_address in the tile group header. The value of signalled_tile_group_index_length_minus1 must be in the range 0 to 15, inclusive. When not present, the value of signalled_tile_group_index_length_minus1 is inferred as follows:
[0135] If rect_tile_group_info_in_pps_flag is equal to 1, Ceil( Log2( num_tile_groups_in_pic_minus1 + 1 ) ) - 1.
[0136] Otherwise, Ceil( Log2( NumTilesInPic ) ) - 1.
[0137] General tile group header syntax and semantics.
[0138] [Table 3]
[0139] tile_group_address specifies the tile address of the first tile in the tile group. When not present, the value of tile_group_address is inferred to be equal to 0.
[0140] When rect_tile_group_flag is equal to 0, the following applies: tile_group_address is the tile ID specified by expression 6-7. The length of tile_group_address is Ceil( Log2 ( NumTilesInPic ) ) bits. The value of tile_group_address must be in the range 0 to NumTilesInPic - 1, inclusive.
[0141] Otherwise, if rect_tile_group_flag is equal to 1 and rect_tile_group_info_in_pps is equal to 0, the following applies: The tile_group_address is the tile index of the tile located in the upper left corner of the i-th tile group. The length of the tile_group_address is signalled_tile_group_index_length_minus1 + 1 bits. If signalled_tile_group_id_flag is equal to 0, the value of tile_group_address must be in the range 0 to NumTilesInPic - 1, inclusive. Otherwise, the value of tile_group_address must be in the range 0 to 2, inclusive. ( signalled_tile_group_index_length_minus1 + 1 ) Must be in the range -1.
[0142] Otherwise (rect_tile_group_flag is equal to 1 and rect_tile_group_info_in_pps is equal to 1), the following applies: tile_group_address is the tile group ID of the tile group. The length of the tile_group_address is signalled_tile_group_index_length_minus1 + 1 bits. If signalled_tile_group_id_flag is equal to 0, the value of tile_group_address must be in the range 0 to num_tile_groups_in_pic_minus1, inclusive. Otherwise, the value of tile_group_address must be in the range 0 to 2, inclusive. ( signalled_tile_group_index_length_minus1 + 1 ) Must be in the range -1.
[0143] bottom_right_tile_id specifies the tile index of the tile located in the bottom right corner of the tile group. When single_tile_per_tile_group_flag is equal to 1, bottom_right_tile_id is inferred to be equal to tile_group_address. The length of the bottom_right_tile_id syntax element is Ceil( Log2( NumTilesInPic ) ) bits.
[0144] The variables NumTilesInCurrTileGroup, which specifies the number of tiles in the current tile group, TopLeftTileIdx, which specifies the tile index of the top left tile in the tile group, BottomRightTileIdx, which specifies the tile index of the bottom right tile in the tile group, and TgTileIdx[ i ], which specifies the tile index of the i-th tile in the current tile group, are derived as follows: if( rect_tile_group_flag ) { if ( tile_group_info_in_pps ) { tileGroupIdx = 0 while( tile_group_address != rect_tile_group_id[ tileGroupIdx ] ) tileGroupIdx++ tileIdx = top_left_tile_idx[ tileGroupIdx ] BottomRightTileIdx = bottom_right_tile_idx[ tileGroupIdx ] } else { tileIdx = tile_group_address BottomRightTileIdx = bottom_right_tile_id } TopLeftTileIdx = tileIdx deltaTileIdx = BottomRightTileIdx - TopLeftTileIdx NumTileRowsInTileGroupMinus1 = deltaTileIdx / ( num_tile_columns_minus1 + 1 ) (7-35) NumTileColumnsInTileGroupMinus1 = deltaTileIdx % ( num_tile_columns_minus1 + 1 ) NumTilesInCurrTileGroup = ( NumTileRowsInTileGroupMinus1 + 1 ) * ( NumTileColumnsInTileGroupMinus1 + 1 ) for( j = 0, tIdx = 0; j < NumTileRowsInTileGroupMinus1 + 1; j++, tileIdx += num_tile_columns_minus1 + 1 ) for( i = 0, currTileIdx = tileIdx; i < NumTileColumnsInTileGroupMinus1 + 1; i++, currTileIdx++, tIdx++ ) TgTileIdx[ tIdx ] = currTileIdx } else { NumTilesInCurrTileGroup = num_tiles_in_tile_group_minus1 + 1 TgTileIdx
[0000] = tile_group_address for( i = 1; i < NumTilesInCurrTileGroup; i++ ) TgTileIdx[ i ] = TgTileIdx[ i - 1 ] + 1 }
[0145] recovery_poc_cnt specifies the recovery point of a decoded picture in output order. If there is a picture picA that follows the current picture (i.e., the GDR picture) in decoding order in the CVS and has a PicOrderCntVal equal to the value of PicOrderCntVal+recovery_poc_cnt of the current picture, then picture picA is called the recovery point picture. Otherwise, the first picture in output order that has a PicOrderCntVal greater than the value of PicOrderCntVal+recovery_poc_cnt of the current picture is called the recovery point picture. The recovery point picture must not precede the current picture in decoding order. All decoded pictures in output order are indicated as being exact or nearly exact in content starting at the output order position of the recovery point picture. The value of recovery_poc_cnt must be in the range -MaxPicOrderCntLsb / 2 to MaxPicOrderCntLsb / 2 - 1, inclusive.
[0146] The value of RecoveryPointPocVal is derived as follows:
[0147] RecoveryPointPocVal = PicOrderCntVal + recovery_poc_cnt
[0148] refreshed_region_flag equal to 1 specifies that decoding of the tile group will produce accurate reconstructed sample values regardless of the value of NoIncorrectPicOutputFlag of the associated GDR. refreshed_region_flag equal to 0 specifies that decoding of the tile group may produce inaccurate reconstructed sample values when starting from an associated GDR with NoIncorrectPicOutputFlag equal to 1. When not present, the value of refreshed_region_flag is inferred to be equal to 1.
[0149] NOTE x – The current picture may itself be a GDR picture with NoIncorrectPicOutputFlag equal to 1.
[0150] The boundaries within which a tile group is refreshed are derived as follows: tileColIdx = TopLeftTileIdx % ( num_tile_columns_minus1 + 1 ) tileRowIdx = TopLeftTileIdx / ( num_tile_columns_minus1 + 1 ) TGRefreshedLeftBoundary = ColBd[ tileColIdx ] << CtbLog2SizeY TGRefreshedTopBoundary = RowBd[ tileRowIdx ] << CtbLog2SizeY tileColIdx = BottomRightTileIdx % ( num_tile_columns_minus1 + 1 ) tileRowIdx = BottomRightTileIdx / ( num_tile_columns_minus1 + 1 ) TGRefreshedRightBoundary = ( ( ColBd[ tileColIdx ] + ColWidth[ tileColIdx ] ) << CtbLog2SizeY ) - 1 TGRefreshedRightBoundary = TGRefreshedRightBoundary > pic_width_in_luma_samples ? pic_width_in_luma_samples : TGRefreshedRightBoundary TGRefreshedBotBoundary = ( ( RowBd[ tileRowIdx ] + RowHeight[ tileRowIdx ] ) << CtbLog2SizeY ) - 1 TGRefreshedBotBoundary = TGRefreshedBotBoundary > pic_height_in_luma_samples ? pic_height_in_luma_samples : TGRefreshedBotBoundary
[0151] Semantics of the NAL unit header.
[0152] [Table 4]
[0153] ... When nal_unit_type is equal to GDR_NUT and the coded tile group belongs to a GDR picture, TemporalId shall be equal to 0.
[0154] The ordering of access units and their association to a CVS is described. A bitstream that conforms to this specification (i.e., JVET contribution JVET-M1001-v5) contains one or more CVSs. A CVS contains one or more access units. The order of NAL units and coded pictures and their association to access units is described in Section 7.4.2.4.4. The initial access unit of CVS is one of the following: - An IRAP access unit with NoBrokenPictureOutputFlag equal to 1. - A GDR access unit with NoIncorrectPicOutputFlag equal to 1. When present, it is a bitstream conformance requirement that the next access unit after an access unit containing an end of sequence NAL unit or an end of bitstream NAL unit must be one of the following: - An IRAP access unit, which can be an IDR access unit or a CRA access unit. - GDR access unit.
[0155] 8.1.1 The decoding process for a coded picture is described. ... When the current picture is an IRAP picture, the following applies: The variable NoIncorrectPicOutputFlag is set equal to 1 when the current picture is an IDR picture, the first picture in the bitstream in decoding order, or the first picture following the end-of-sequence NAL unit in decoding order. - Otherwise, when some external means not specified in this specification (e.g., user input) are available to set the variable HandleCraAsCvsStartFlag to a value for the current picture, the variable HandleCraAsCvsStartFlag is set equal to the value provided by the external means, and the variable NoIncorrectPicOutputFlag is set equal to HandleCraAsCvsStartFlag. Otherwise, the variable HandleCraAsCvsStartFlag is set equal to 0 and the variable NoIncorrectPicOutputFlag is set equal to 0. When the current picture is a GDR picture, the following applies: The variable NoIncorrectPicOutputFlag is set equal to 1 when the current picture is a GDR picture, the first picture in the bitstream in decoding order, or the first picture following the end-of-sequence NAL unit in decoding order. - Otherwise, when some external means not specified in this specification are available to set the variable HandleGdrAsCvsStartFlag to a value for the current picture, the variable HandleGdrAsCvsStartFlag is set equal to the value provided by the external means, and the variable NoIncorrectPicOutputFlag is set equal to HandleGdrAsCvsStartFlag. Otherwise, the variable HandleGdrAsCvsStartFlag is set equal to 0 and the variable NoIncorrectPicOutputFlag is set equal to 0. ...
[0156] For the current picture CurrPic the decoding process works as follows. 1. Decoding of NAL units is specified in Section 8.2. 2. The process in Section 8.3 specifies the following decoding process using syntax elements in the tile group header layer and above. - Picture order count related variables and functions are derived as specified in Section 8.3.1. This needs to be called only for the first tile group of a picture. - At the start of the decoding process for each tile group of a non-IDR picture, the decoding process for reference picture list construction specified in Section 8.3.2 is invoked for the derivation of reference picture list 0 (RefPicList
[0000] ) and reference picture list 1 (RefPicList
[0001] ). - The decoding process for reference picture marking in section 8.3.3 is invoked, and reference pictures may be marked as "unused for reference" or "used for long-term reference". This is only invoked for the first tile group of a picture. - PicOutputFlag is set as follows: - PictureOutputFlag is set equal to 0 when one of the following conditions is true: - The current picture is a RASL picture and the associated IRAP picture's NoIncorrectPicOutputFlag is equal to 1. - gdr_enabled_flag is equal to 1 and the current picture is a GDR picture with NoIncorrectPicOutputFlag is equal to 1. - gdr_enabled_flag is equal to 1, the current picture contains one or more tile groups with refreshed_region_flag equal to 0, and the associated GDR picture's NoBrokenPictureOutputFlag is equal to 1. Otherwise, PicOutputFlag is set equal to 1. 3. The decoding process is invoked for coding tree units, scaling, transforming, in-loop filtering, etc. 4. After all tile groups of the current picture are decoded, the currently decoded picture is marked as "used for short-term reference".
[0157] A decoding process for picture order counting is described. The output of this process is PicOrderCntVal, the picture order count of the current picture. Each coded picture is associated with a picture order count variable, denoted as PicOrderCntVal. When the current picture is not an IRAP picture with NoIncorrectPicOutputFlag equal to 1, or a GDR picture with NoIncorrectPicOutputFlag equal to 1, the variables prevPicOrderCntLsb and prevPicOrderCntMsb are derived as follows: – Let prevTid0Pic be the previous picture in decoding order that has TemporalId equal to 0 and is not a RASL or RADL picture. - The variable prevPicOrderCntLsb is set equal to the tile_group_pic_order_cnt_lsb of prevTid0Pic. - The variable prevPicOrderCntMsb is set equal to the PicOrderCntMsb of prevTid0Pic.
[0158] The variable PicOrderCntMsb for the current picture is derived as follows: When the current picture is an IRAP picture with NoIncorrectPicOutputFlag equal to 1 or a GDR picture with NoIncorrectPicOutputFlag equal to 1, PicOrderCntMsb is set equal to 0. Otherwise, PicOrderCntMsb is derived as follows: if( ( tile_group_pic_order_cnt_lsb < prevPicOrderCntLsb ) && ( ( prevPicOrderCntLsb - tile_group_pic_order_cnt_lsb ) >= ( MaxPicOrderCntLsb / 2 ) ) ) PicOrderCntMsb = prevPicOrderCntMsb + MaxPicOrderCntLsb (8-1) else if( (tile_group_pic_order_cnt_lsb > prevPicOrderCntLsb ) && ( ( tile_group_pic_order_cnt_lsb - prevPicOrderCntLsb ) > ( MaxPicOrderCntLsb / 2 ) ) ) PicOrderCntMsb = prevPicOrderCntMsb - MaxPicOrderCntLsb else PicOrderCntMsb = prevPicOrderCntMsb PicOrderCntVal is derived as follows: PicOrderCntVal = PicOrderCntMsb + tile_group_pic_order_cnt_lsb (8-2)
[0159] NOTE 1 – Since PicOrderCntMsb is set equal to 0 for IRAP pictures with NoIncorrectPicOutputFlag equal to 1, all IRAP pictures with NoIncorrectPicOutputFlag equal to 1 have PicOrderCntVal equal to tile_group_pic_order_cnt_lsb.
[0160] NOTE 1 – Since PicOrderCntMsb is set equal to 0 for GDR pictures with NoIncorrectPicOutputFlag equal to 1, all GDR pictures with NoIncorrectPicOutputFlag equal to 1 have PicOrderCntVal equal to tile_group_pic_order_cnt_lsb.
[0161] The value of PicOrderCntVal is -2 inclusive. 31 ~2 31 Must be in the range -1. When the current picture is a GDR picture, the value of LastGDRPocVal is set equal to PicOrderCntVal.
[0162] The decoding process for picture refreshed boundary positions is described. This process is only invoked when gdr_enabled_flag is equal to 1. This process is called after tile group header parsing is completed. The output of this process is PicRefreshedLeftBoundaryPos, PicRefreshedRightBoundaryPos, PicRefreshedTopBoundaryPos, and PicRefreshedBotBoundaryPos, ie, the boundary positions of the refreshed regions of the current picture. Each coded picture is associated with a set of refreshed region boundary position variables, denoted as PicOrderCntVal. PicRefreshedLeftBoundaryPos, PicRefreshedRightBoundaryPos, PicRefreshedTopBoundaryPos, and PicRefreshedBotBoundaryPos are derived as follows: If the tile group is the first received tile group of the current picture with refreshed_region_flag equal to 1, the following applies: PicRefreshedLeftBoundaryPos = TGRefreshedLeftBoundary PicRefreshedRightBoundaryPos = TGRefreshedRightBoundary PicRefreshedTopBoundaryPos = TGRefreshedTopBoundary PicRefreshedBotBoundaryPos = TileGroupBotBoundary Otherwise, if refreshed_region_flag is equal to 1, the following applies: PicRefreshedLeftBoundaryPos = TGRefreshedLeftBoundary < PicRefreshedLeftBoundaryPos ? TGRefreshedLeftBoundary : PicRefreshedLeftBoundaryPos PicRefreshedRightBoundaryPos = TGRefreshedRightBoundary > PicRefreshedRightBoundaryPos ? TGRefreshedRightBoundary : PicRefreshedRightBoundaryPos PicRefreshedTopBoundaryPos = TGRefreshedTopBoundary < PicRefreshedTopBoundaryPos ? TGRefreshedTopBoundary : RefreshedRegionTopBoundaryPos PicRefreshedBotBoundaryPos = TileGroupBotBoundary > PicRefreshedBotBoundaryPos ? TileGroupBotBoundary : PicRefreshedBotBoundaryPos
[0163] A decoding process for reference picture list construction is described. ... It is a bitstream conformance requirement that for each current picture that is not an IRAP picture with NoIncorrectPicOutputFlag equal to 1 or a GDR picture with NoIncorrectPicOutputFlag equal to 1, the value of maxPicOrderCnt - minPicOrderCnt must be less than MaxPicOrderCntLsb / 2. ...
[0164] Decoding process for reference picture marking. ... If the current picture is an IRAP picture with NoIncorrectPicOutputFlag equal to 1 or a GDR picture with NoIncorrectPicOutputFlag equal to 1, then all reference pictures currently in the DPB (if any) are marked as "unused for reference". ...
[0165] A derivation process for temporal luma motion vector prediction is described. ... The variable currCb specifies the current luma coding block at luma location (xCb, yCb).
[0166] The variables mvLXCol and availableFlagLXCol are derived as follows: - if tile_group_temporal_mvp_enabled_flag is equal to 0 then both components of mvLXCol are set equal to 0 and availableFlagLXCol is set equal to 0. - Otherwise (tile_group_temporal_mvp_enabled_flag is equal to 1), the following ordered steps apply:
[0167] 1. The bottom right collocated motion vector is derived as follows: xColBr = xCb + cbWidth (8-414) yColBr = yCb + cbHeight (8-415) leftBoundaryPos = gdr_enabled_flag ? PicRefreshedLeftBoundaryPos of the picture referenced by RefPicList[ X ][ refIdxLX ] : 0 (8-415) topBoundaryPos = gdr_enabled_flag ? PicRefreshedTopBoundaryPos of the picture referenced by RefPicList[ X ][ refIdxLX ] : 0 (8-415) rightBoundaryPos = gdr_enabled_flag ? PicRefreshedRightBoundaryPos of the picture referenced by RefPicList[ X ][ refIdxLX ] : pic_width_in_luma_samples (8-415) botBoundaryPos = gdr_enabled_flag ? PicRefreshedBotBoundaryPos of the picture referenced by RefPicList[ X ][ refIdxLX ] : pic_height_in_luma_samples (8-415) - If yCb >> CtbLog2SizeY is equal to yColBr >> CtbLog2SizeY, yColBr is in the range from topBoundaryPos to botBoundaryPos, inclusive, and xColBr is in the range from leftBoundaryPos to rightBoundaryPos, inclusive, then the following applies: The variable colCb specifies the luma coding block that covers the modified location given by (( xColBr >> 3 ) << 3, ( yColBr >> 3 ) << 3 ), inside the collocated picture specified by ColPic. - The luma location (xColCb, yColCb) is set equal to the top-left sample of the collocated luma coding block specified by colCb relative to the top-left luma sample of the collocated picture specified by ColPic. - The derivation process for collocated motion vectors as specified in Section 8.5.2.12 is called with currCb, colCb, (xColCb, yColCb), refIdxLX, and sbFlag set equal to 0 as inputs, and the output is assigned to mvLXCol and availableFlagLXCol. Otherwise, both components of mvLXCol are set equal to 0 and availableFlagLXCol is set equal to 0.
[0168] 2. ... A luma sample bilinear interpolation process is described. The inputs to this process are: - Luma location in full samples (xInt L , yInt L ), - Luma location in fractional samples (xFrac L , yFrac L ), - Luma reference sample array refPicLX L , - The refreshed region boundaries of the reference picture: PicRefreshedLeftBoundaryPos, PicRefreshedTopBoundaryPos, PicRefreshedRightBoundaryPos, and PicRefreshedBotBoundaryPos. ...
[0169] Luma location in full samples (xInt i , yInt i ) is derived for i = 0..1 as follows: - if gdr_enabled_flag is equal to 1, the following applies: xInt i = Clip3( PicRefreshedLeftBoundaryPos, PicRefreshedRightBoundaryPos, xIntL + i ) (8-458) yInt i = Clip3( PicRefreshedTopBoundaryPos, PicRefreshedBotBoundaryPos, yInt L + i ) (8-458) - Otherwise (gdr_enabled_flag is equal to 0), the following applies: xInt i = sps_ref_wraparound_enabled_flag ? ClipH( ( sps_ref_wraparound_offset_minus1 + 1 ) * MinCbSizeY, picW, ( xInt L + i ) ) : (8-459) Clip3( 0, picW - 1, xInt L + i ) yInti = Clip3( 0, picH - 1, yInt L + i ) (8-460) ...
[0170] A luma sample 8-tap interpolation filtering process is described. The inputs to this process are: - Luma location in full samples (xInt L , yInt L ), - Luma location in fractional samples (xFrac L , yFrac L ), - Luma reference sample array refPicLX L , - A list padVal[ dir ] with dir = 0,1, specifying the direction and amount of reference sample padding. - The refreshed region boundaries of the reference picture: PicRefreshedLeftBoundaryPos, PicRefreshedTopBoundaryPos, PicRefreshedRightBoundaryPos, and PicRefreshedBotBoundaryPos. ...
[0171] Luma location in full samples (xInt i , yInt i ) for i = 0..7 is derived as follows: - if gdr_enabled_flag is equal to 1, the following applies: xInt i = Clip3( PicRefreshedLeftBoundaryPos, PicRefreshedRightBoundaryPos, xInt L + i - 3 ) (8-830) yInti = Clip3( PicRefreshedTopBoundaryPos, PicRefreshedBotBoundaryPos, yInt L + i - 3 ) (8-830) - Otherwise (gdr_enabled_flag is equal to 0), the following applies: xInt i = sps_ref_wraparound_enabled_flag ? ClipH( ( sps_ref_wraparound_offset_minus1 + 1 ) * MinCbSizeY, picW, xInt L + i - 3 ) : (8-831) Clip3( 0, picW - 1, xInt L + i - 3 ) yInt i = Clip3( 0, picH - 1, yInt L + i - 3 ) (8-832)
[0172] A chroma sample interpolation process is described. The inputs to this process are: - Chroma location in full samples (xInt C , yInt C ), - Chroma location in 1 / 32 fractional samples (xFrac C , yFrac C ), - Chroma reference sample array refPicLX C . - The refreshed region boundaries of the reference picture: PicRefreshedLeftBoundaryPos, PicRefreshedTopBoundaryPos, PicRefreshedRightBoundaryPos, and PicRefreshedBotBoundaryPos. ... The variable xOffset is set equal to (sps_ref_wraparound_offset_minus1 + 1) * MinCbSizeY) / SubWidthC.
[0173] Chroma location in full samples (xInt i , yInt i ) for i = 0..3 is derived as follows: - if gdr_enabled_flag is equal to 1, the following applies: xInt i = Clip3( PicRefreshedLeftBoundaryPos / SubWidthC, PicRefreshedRightBoundaryPos / SubWidthC, xInt L + i ) (8-844) yInti = Clip3( PicRefreshedTopBoundaryPos / SubHeightC, PicRefreshedBotBoundaryPos / SubHeightC, yInt L + i ) (8-844) - Otherwise (gdr_enabled_flag is equal to 0), the following applies: xInt i = sps_ref_wraparound_enabled_flag ? ClipH( xOffset, picW C , xInt C + i - 1 ) : (8-845) Clip3( 0, picW C - 1, xInt C + i - 1 ) yInt i = Clip3( 0, picH C - 1, yInt C + i - 1 ) (8-846)
[0174] A deblocking filter process is described. Overall process. ... The deblocking filter process is applied to all coding sub-block edges and transform block edges of a picture, except for the following types of edges: - Edges on the border of the picture. - An edge that coincides with the top boundary of tile group tgA when all of the following are true: - gdr_enabled_flag is equal to 1. - loop_filter_across_refreshed_region_enabled_flag is equal to 0. - Its edge coincides with the bottom border of tile group tgB, and the value of refreshed_region_flag of tgB is different from the value of refreshed_region_flag of tgA. - An edge that coincides with the left boundary of tile group tgA when all of the following are true: - gdr_enabled_flag is equal to 1. - loop_filter_across_refreshed_region_enabled_flag is equal to 0. - Its edge coincides with the right border of tile group tgB, and the value of refreshed_region_flag of tgB is different from the value of refreshed_region_flag of tgA. - Edges that coincide with tile boundaries when loop_filter_across_tiles_enabled_flag is equal to 0. - An edge that matches the top or left border of a tile group with tile_group_loop_filter_across_tile_groups_enabled_flag equal to 0 or tile_group_deblocking_filter_disabled_flag equal to 1. - Edges in a tile group with tile_group_deblocking_filter_disabled_flag equal to 1. - Edges that do not correspond to the 8x8 sample grid boundaries of the component being considered. - Edges in chroma components where both sides of the edge use inter prediction. - An edge of a chroma transform block that is not an edge of the associated transform unit. - An edge that crosses a luma transform block of a coding unit whose IntraSubPartitionsSplit value is not equal to ISP_NO_SPLIT.
[0175] A deblocking filter process for one direction is described. ... For each coding unit with coding block width log2CbW, coding block height log2CbH, and location of the top-left sample of the coding block ( xCb, yCb ), when edgeType is equal to EDGE_VER and xCb % 8 is equal to 0, or when edgeType is equal to EDGE_HOR and yCb % 8 is equal to 0, edges are filtered by the following ordered steps:
[0176] 1. The coding block width nCbW is set equal to 1 << log2CbW, and the coding block height nCbH is set equal to 1 << log2CbH.
[0177] 2. The variable filterEdgeFlag is derived as follows: If edgeType is equal to EDGE_VER and one or more of the following conditions are true, then filterEdgeFlag is set equal to 0: - The left boundary of the current coding block is the left boundary of the picture. - The left border of the current coding block is the left border of the tile and loop_filter_across_tiles_enabled_flag is equal to 0. - The left border of the current coding block is the left border of a tile group and tile_group_loop_filter_across_tile_groups_enabled_flag is equal to 0. The left boundary of the current coding block is the left boundary of the current tile group, and all of the following conditions are met: - gdr_enabled_flag is equal to 1. - loop_filter_across_refreshed_region_enabled_flag is equal to 0. - There is a tile group that shares a border with the left border of the current tile group and its refreshed_region_flag value is different from the current tile group's refreshed_region_flag value. Otherwise, if edgeType is equal to EDGE_HOR and one or more of the following conditions are true, then the variable filterEdgeFlag is set equal to 0: - The top border of the current luma coding block is the top border of the picture. - The top border of the current coding block is the top border of the tile and loop_filter_across_tiles_enabled_flag is equal to 0. - The top border of the current coding block is the top border of the tile group and tile_group_loop_filter_across_tile_groups_enabled_flag is equal to 0. The top boundary of the current coding block is the top boundary of the current tile group, and all of the following conditions are met: - gdr_enabled_flag is equal to 1. - loop_filter_across_refreshed_region_enabled_flag is equal to 0. - There is a tile group that shares a border with the current tile group's top border and its refreshed_region_flag value is different from the current tile group's refreshed_region_flag value. Otherwise, filterEdgeFlag is set equal to 1. Once the tiles are integrated, the syntax is adapted.
[0178] 3. All elements of the two-dimensional (nCbW) by (nCbH) array edgeFlags are initialized equal to 0. The CTB modification process for SAO is described. ... For all sample locations (xS i , yS j ) and (xY i , yY j ), pcm_loop_filter_disabled_flag, pcm_flag[ xY i ][ yY j] and the value of cu_transquant_bypass_flag, the following applies: - .... Fix the highlighted section pending future decision transform / quantization bypass.
[0179] - Otherwise, if SaoTypeIdx[ cIdx ][ rx ][ ry ] is equal to 2, then the following ordered steps apply:
[0180] 1. The values of hPos[ k ] and vPos[ k ] for k = 0..1 are specified in Table 8-18 based on SaoEoClass[ cIdx ][ rx ][ ry ].
[0181] 2. The variable edgeIdx is derived as follows: - Corrected sample location (xS ik' , yS jk' ) and (xY ik' , yY ik' ) is derived as follows: ( xS ik' , yS jk' ) = ( xS i + hPos[ k ], yS j + vPos[ k ] ) (8-1128) ( xY ik ', yY jk' ) = ( cIdx = = 0 ) ? ( xS ik' , yS jk' ) : ( xS ik' * SubWidthC, yS jk' * SubHeightC) (8-1129) - all sample locations (xS ik' , yS jk' ) and (xY ik' , yY jk' ), edgeIdx is set equal to 0 if one or more of the following conditions are true: - Location (xS ik' , yS jk' ) is outside the picture boundary. - gdr_enabled_flag is equal to 1, loop_filter_across_refreshed_region_enabled_flag is equal to 0, and the current tile group's refreshed_region_flag is equal to 1, and the location (xS ik' , yS jk' ) the tile group containing the sample in refreshed_region_flag is equal to 0. - Location (xS ik' , yS jk' ) belong to different tile groups and one of the following two conditions is true: - MinTbAddrZs [ xY ik' >> MinTbLog2SizeY ][ yY jk' >> MinTbLog2SizeY ] is MinTbAddrZs[ xY i >> MinTbLog2SizeY ][ yY j >> MinTbLog2SizeY] and the sample recPicture[xS i ][ yS j ] belongs to a tile group whose tile_group_loop_filter_across_tile_groups_enabled_flag is equal to 0. - MinTbAddrZs [ xY i >> MinTbLog2SizeY ][ yY j >> MinTbLog2SizeY ] is MinTbAddrZs[ xY ik' >> MinTbLog2SizeY ][ yY jk' >> MinTbLog2SizeY] and the sample recPicture[xS ik' ][ yS jk'] belongs to a tile group whose tile_group_loop_filter_across_tile_groups_enabled_flag is equal to 0. - loop_filter_across_tiles_enabled_flag is equal to 0 and location (xS ik' , yS jk' ) belong to different tiles. When a tile that does not have a tile group is incorporated, the highlighted section is modified. - Otherwise, edgeIdx is derived as follows: - The following applies: edgeIdx = 2 + Sign( recPicture[ xS i ][ yS j ] - recPicture[ xS i + hPos
[0000] ][ yS j + vPos
[0000] ] ) + Sign( recPicture[ xS i ][ yS j ] - recPicture[ xS i + hPos
[0001] ][ yS j + vPos
[0001] ] ) (8-1130) - When edgeIdx is equal to 0, 1, or 2, edgeIdx is modified as follows: edgeIdx = ( edgeIdx = = 2 ) ? 0 : ( edgeIdx + 1 ) (8-1131)
[0182] 3. The modified picture sample array saoPicture[ xS i ][ yS j ] is derived as follows: saoPicture[ xS i ][ yS j ] = Clip3( 0, ( 1 << bitDepth ) - 1, recPicture[ xS i ][ yS j] + SaoOffsetVal[ cIdx ][ rx ][ ry ][ edgeIdx ] ) (8-1132) A coding tree block filtering process for luma samples for ALF is described. ... To derive the filtered reconstructed luma sample alfPictureL[ x ][ y ], each reconstructed luma sample recPictureL[ x ][ y ] inside the current luma coding tree block is filtered with x, y = 0..CtbSizeY - 1 as follows: - ... - The location (h x , v y ) is derived as follows: - if gdr_enabled_flag is equal to 1, loop_filter_across_refreshed_region_enabled_flag is equal to 0, and refreshed_region_flag for the tile group tgA that contains the luma sample at location (x, y) is equal to 1, then the following applies: - Location ( x , v y ) is located within another tile group tgB and the refreshed_region_flag of tgB is equal to 0, then the variables leftBoundary, rightBoundary, topBoundary, and botBoundary are set equal to TGRefreshedLeftBoundary, TGRefreshedRightBoundary, TGRefreshedTopBoundary, and TGRefreshedBotBoundary, respectively. - Otherwise, the variables leftBoundary, rightBoundary, topBoundary, and botBoundary are set equal to PicRefreshedLeftBoundaryPos, PicRefreshedRightBoundaryPos, PicRefreshedTopBoundaryPos, and PicRefreshedBotBoundaryPos, respectively. h x = Clip3( leftBoundary, rightBoundary, xCtb + x ) (8-1140) v y = Clip3( topBoundary, botBoundary, yCtb + y ) (8-1141) - If not, the following applies: h x = Clip3( 0, pic_width_in_luma_samples - 1, xCtb + x ) (8-1140) v y = Clip3( 0, pic_height_in_luma_samples - 1, yCtb + y ) (8-1141) - ...
[0183] The derivation process for the ALF transpose and filter indexes for the luma samples is described. ... For each corresponding luma sample ( x, y ) inside a given array of luma samples recPicture, the location ( h x , v y ) is derived as follows: - if gdr_enabled_flag is equal to 1, loop_filter_across_refreshed_region_enabled_flag is equal to 0, and refreshed_region_flag for the tile group tgA that contains the luma sample at location (x, y) is equal to 1, then the following applies: - Location ( x , v y ) is located within another tile group tgB and the refreshed_region_flag of tgB is equal to 0, then the variables leftBoundary, rightBoundary, topBoundary, and botBoundary are set equal to TGRefreshedLeftBoundary, TGRefreshedRightBoundary, TGRefreshedTopBoundary, and TGRefreshedBotBoundary, respectively. - Otherwise, the variables leftBoundary, rightBoundary, topBoundary, and botBoundary are set equal to PicRefreshedLeftBoundaryPos, PicRefreshedRightBoundaryPos, PicRefreshedTopBoundaryPos, and PicRefreshedBotBoundaryPos, respectively. h x = Clip3( leftBoundary, rightBoundary, x ) (8-1140) v y = Clip3( topBoundary, botBoundary, y ) (8-1141) - If not, the following applies: h x = Clip3( 0, pic_width_in_luma_samples - 1, x ) (8-1145) v y = Clip3( 0, pic_height_in_luma_samples - 1, y ) (8-1146)
[0184] A coding tree block filtering process for chroma samples is described. ... To derive the filtered reconstructed chroma sample alfPicture[ x ][ y ], each reconstructed chroma sample recPicture[ x ][ y ] inside the current chroma coding tree block is filtered with x, y = 0..ctbSizeC - 1 as follows: - A location ( h ) for each of the corresponding chroma samples ( x, y ) inside a given array of chroma samples recPicture x , v y ) is derived as follows: - if gdr_enabled_flag is equal to 1, loop_filter_across_refreshed_region_enabled_flag is equal to 0, and refreshed_region_flag for the tile group tgA that contains the luma sample at location (x, y) is equal to 1, then the following applies: - Location ( x , v y ) is located within another tile group tgB and the refreshed_region_flag of tgB is equal to 0, then the variables leftBoundary, rightBoundary, topBoundary, and botBoundary are set equal to TGRefreshedLeftBoundary, TGRefreshedRightBoundary, TGRefreshedTopBoundary, and TGRefreshedBotBoundary, respectively. - Otherwise, the variables leftBoundary, rightBoundary, topBoundary, and botBoundary are set equal to PicRefreshedLeftBoundaryPos, PicRefreshedRightBoundaryPos, PicRefreshedTopBoundaryPos, and PicRefreshedBotBoundaryPos, respectively. h x= Clip3( leftBoundary / SubWidthC, rightBoundary / SubWidthC, xCtbC + x ) (8-1140) v y = Clip3( topBoundary / SubWidthC, botBoundary / SubWidthC, yCtbC + y ) (8-1141) - If not, the following applies: h x = Clip3( 0, pic_width_in_luma_samples / SubWidthC - 1, xCtbC + x ) (8-1177) v y = Clip3( 0, pic_height_in_luma_samples / SubHeightC - 1, yCtbC + y ) (8-1178)
[0185] 7 illustrates a video bitstream 750 configured to implement a gradual decoding refresh (GDR) technique 700 according to one embodiment of the present disclosure. The GDR technique 700 may be similar to the GDR technique 500 of FIG. 5. As used herein, the video bitstream 750 may also be referred to as a coded video bitstream, a bitstream, or variations thereof. As shown in FIG. 7, the bitstream 750 includes a sequence parameter set (SPS) 752, a picture parameter set (PPS) 754, a slice header 756, and image data 758.
[0186] The SPS 752 contains data common to all pictures in a sequence of pictures (SOP). In contrast, the PPS 754 contains data common to the entire picture. The slice header 756 contains information about the current slice, such as, for example, the slice type, which of the reference pictures are used, etc. The SPS 752 and the PPS 754 are sometimes collectively referred to as parameter sets. The SPS 752, the PPS 754, and the slice header 756 are types of network abstraction layer (NAL) units. A NAL unit is a syntax structure that contains an indication of the type of data (e.g., coded video data) that is to follow. NAL units are classified into video coding layer (VCL) NAL units and non-VCL NAL units. The VCL NAL units contain data that represent values of samples in a video picture, and the non-VCL NAL units contain any associated additional information, such as parameter sets (important header data that may apply to many VCL NAL units) and supplemental enhancement information (timing information and other additional data that may improve the usability of the decoded video signal but is not necessary for decoding the values of samples in a video picture). Those skilled in the art will appreciate that the bitstream 750 may contain other parameters and information in practical applications.
[0187] The image data 758 of FIG. 7 includes data related to the image or video being encoded or decoded. The image data 758 may simply be referred to as the payload, or data being carried in the bitstream 750. In one embodiment, the image data 758 includes a CVS 708 (or CLVS) that includes the GDR picture 702, one or more trailing pictures 704, and the recovery point picture 706. The image data 758 may also include a picture 760 disposed in a NAL unit 730 with an end-of-sequence (EOS) NAL unit type (EOS_NUT). A NAL unit 730 with EOS_NUT is a NAL unit that includes a slice from the last picture in the CVS. The NAL unit 730 that includes the picture 760 may be referred to herein as an EOS NAL unit. As shown, the picture 760 in the NAL unit 730 precedes the GDR picture 702 and is disposed in a different CVS than the GDR picture 702. In one embodiment, picture 760 is in the CVS that immediately precedes CVS 708 .
[0188] In one embodiment, the GDR picture 702, the trailing picture 704, and the recovery point picture 706 may define a GDR period in the CVS 708. In one embodiment, the decoding order begins with the GDR picture 702, continues to the trailing picture 704, and then proceeds to the recovery point picture 706. In one embodiment, the trailing picture 704 may be considered a form of a GDR picture because it precedes the recovery point picture 706 in the GDR period.
[0189] When the GDR picture 702 is the first picture in decoding order or the first picture following the EOS NAL unit 730 in decoding order, the value of the flag is set to 1 to prevent the GDR picture 702 and any trailing pictures 704 between the GDR picture 702 and the recovery point picture 706 in output order (e.g., presentation order 410) from being output. Otherwise, the flag is set to 0. That is, when the GDR picture is not the first picture in decoding order or the first picture following the EOS NAL unit in decoding order, the flag is set to 0. In one embodiment, the flag is designated as NoOutPutBeforeRecoveryFlag. In one embodiment, when the flag is set to 1, only the GDR picture 702 is prevented from being output.
[0190] CVS 708 is a coded video sequence for all coded layered video sequences (CLVS) in video bitstream 750. In particular, when video bitstream 750 contains a single layer, CVS and CLVS are the same. CVS and CLVS differ only when video bitstream 750 contains multiple layers. A layer is one of a set of VCL NAL units and associated non-VCL NAL units that all have a particular value (e.g., the same layer ID), or a set of syntax structures that have a hierarchical relationship.
[0191] As shown in Figure 7, the GDR technique 700 or principle operates over a series of pictures starting with a GDR picture 702 and ending with a recovery point picture 706. The GDR technique 700, the GDR picture 702, the trailing picture 704, and the recovery point picture 706 are similar to the GDR technique 500, the GDR picture 502, the trailing picture 504, and the recovery point picture 506 of Figure 5. Therefore, for brevity, the manner in which the GDR technique 700 is implemented will not be repeated with respect to Figure 7.
[0192] 7, the GDR pictures 702, the trailing pictures 704, and the recovery point pictures 706 in the CVS 708 are each contained within their own VCL NAL units 730. The set of VCL NAL units 730 in the CVS 708 may be referred to as an access unit.
[0193] The NAL unit 730 that contains the GDR picture 702 in the CVS 708 has a GDR NAL unit type (GDR_NUT). That is, in one embodiment, the NAL unit 730 that contains the GDR picture 702 in the CVS 708 has its own unique NAL unit type relative to the trailing picture 704 and the recovery point picture 706. In one embodiment, GDR_NUT allows the bitstream 750 to start with the GDR picture 702, rather than requiring the bitstream 750 to start with an IRAP picture. Designating the VCL NAL unit 730 of the GDR picture 702 as GDR_NUT may indicate to a decoder, for example, that the initial VCL NAL unit 730 in the CVS 708 contains a GDR picture 702.
[0194] In one embodiment, the GDR picture 702 is the first picture in the CVS 708. In one embodiment, the GDR picture 702 is the first picture in the GDR period. In one embodiment, the GDR picture 702 has a time identifier (ID) equal to 0. A time ID is a value or number that identifies a position or order of a picture relative to other pictures. In one embodiment, an access unit that includes a VCL NAL unit 730 with GDR_NUT is designated as a GDR access unit. In one embodiment, the GDR picture 702 is a coded slice of another (e.g., larger) GDR picture. That is, the GDR picture 702 may be a portion of a larger GDR picture.
[0195] FIG. 8 is an embodiment of a method 800 for decoding a coded video bitstream implemented by a video decoder (e.g., video decoder 30). Method 800 may be executed after receiving a decoded bitstream directly or indirectly from a video encoder (e.g., video encoder 20). The method improves the decoding process because method 800 allows sequential intra refresh to enable random access without the need to use an IRAP picture. When a GDR picture is the first picture in decoding order or the first picture following an EOS NAL unit in decoding order, the value of the flag is set to a value to prevent the GDR picture and any trailing pictures between the GDR picture and the recovery point picture in output order from being output. Setting the flag in this manner prevents potentially dirty data from being output to the display. Thus, in effect, the performance of the codec is improved, which translates into a better user experience.
[0196] In block 802, the video decoder determines whether a GDR picture (e.g., GDR picture 702) in a coded video bitstream (e.g., bitstream 750) is the first picture in decoding order or the first picture following an EOS NAL unit in decoding order.
[0197] In one embodiment, a GDR picture (e.g., GDR picture 702) is the first picture in a CVS of a coded video bitstream (coded video bitstream 750). In one embodiment, a GDR picture is the first picture in a layer of a coded video bitstream. In one embodiment, a layer is a CLVS of a CVS of a coded video bitstream.
[0198] In block 804, the video decoder sets a flag to a value to prevent the GDR picture from being output when the GDR picture is the first picture in decoding order or the first picture following the EOS NAL unit in decoding order. In one embodiment, the video decoder sets a flag to a value to prevent the GDR picture and any trailing pictures between the GDR picture and the recovery point picture in output order from being output when the GDR picture is the first picture in decoding order or the first picture following the EOS NAL unit in decoding order. In one embodiment, the value of the flag is set to 1 to prevent the current picture and any trailing pictures between the GDR picture and the recovery point picture in output order from being output when the GDR picture is the first picture in decoding order or the first picture following the EOS NAL unit in decoding order. In one embodiment, the value of the flag is set to 0 when the GDR picture is not the first picture in decoding order or the first picture following the EOS NAL unit in decoding order.
[0199] In block 806, the video decoder decodes the GDR picture. The trailing picture and the recovery point picture are then decoded in order. In block 808, the video decoder stores the GDR picture in a decoded picture buffer (DPB). In one embodiment, when the GDR picture is not restricted from being output by the flag setting, an image generated based on the GDR picture may be displayed for a user of an electronic device (e.g., a smartphone, a tablet, a laptop, a personal computer, etc.).
[0200] FIG. 9 is a schematic diagram of a video coding device 900 (e.g., video encoder 20 or video decoder 30) according to one embodiment of the present disclosure. The video coding device 900 is suitable for implementing the disclosed embodiments as described herein. The video coding device 900 comprises an ingress port 910 and a receiver unit (Rx) 920 for receiving data, a processor, logic unit, or central processing unit (CPU) 930 for processing data, a transmitter unit (Tx) 940 and an egress port 950 for transmitting data, and a memory 960 for storing data. The video coding device 900 may also include optical-to-electrical (OE) and electrical-to-optical (EO) components coupled to the ingress port 910, the receiver unit 920, the transmitter unit 940, and the egress port 950 for egress or ingress of optical or electrical signals.
[0201] The processor 930 is implemented by hardware and software. The processor 930 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 930 is in communication with the ingress port 910, the receiver unit 920, the transmitter unit 940, the egress port 950, and the memory 960. The processor 930 comprises a coding module 970. The coding module 970 implements the disclosed embodiments described above. For example, the coding module 970 implements, processes, prepares, or provides various codec functions. Thus, the inclusion of the coding module 970 provides significant improvements to the functionality of the video coding device 900 and affects the conversion of the video coding device 900 to different states. Alternatively, the coding module 970 is implemented as instructions stored in the memory 960 and executed by the processor 930.
[0202] Video coding device 900 may also include input and / or output (I / O) devices 980 for communicating data to and from a user. I / O devices 980 may include output devices, such as a display for displaying video data, speakers for outputting audio data, etc. I / O devices 980 may also include input devices, such as a keyboard, mouse, trackball, etc., and / or corresponding interfaces for interacting with such output devices.
[0203] Memory 960 may comprise one or more disks, tape drives, and solid state drives for storing programs when such programs are selected for execution, and for storing instructions and data read during program execution, and may be used as an overflow data storage device. Memory 960 may be volatile and / or non-volatile, and may be read-only memory (ROM), random access memory (RAM), ternary content-addressable memory (TCAM), and / or static random access memory (SRAM).
[0204] 10 is a schematic diagram of one embodiment of a means for coding 1000. In one embodiment, the means for coding 1000 is implemented in a video coding device 1002 (e.g., video encoder 20 or video decoder 30). The video coding device 1002 includes a means for receiving 1001. The means for receiving 1001 is configured to receive a picture to be encoded or a bitstream to be decoded. The video coding device 1002 includes a means for transmitting 1007 coupled to the means for receiving 1001. The means for transmitting 1007 is configured to transmit the bitstream to a decoder or transmit the decoded image to a display means (e.g., one of the I / O devices 1080).
[0205] The video coding device 1002 includes a storage means 1003. The storage means 1003 is coupled to at least one of the receiving means 1001 or the transmitting means 1007. The storage means 1003 is configured to store instructions. The video coding device 1002 also includes a processing means 1005. The processing means 1005 is coupled to the storage means 1003. The processing means 1005 is configured to execute instructions stored in the storage means 1003 to perform methods disclosed herein.
[0206] It should also be understood that the steps of the exemplary methods described herein are not necessarily required to be performed in the order described, and the order of steps of such methods should be understood to be merely exemplary. Similarly, additional steps may be included in such methods, and some steps may be omitted or combined in methods consistent with various embodiments of the present disclosure.
[0207] Although several embodiments are provided in the present disclosure, it should 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 should be considered illustrative rather than restrictive, and the intention is not to 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.
[0208] Additionally, the techniques, systems, subsystems, and methods described and illustrated in various embodiments as separate or distinct may be combined or integrated with other systems, modules, techniques, or methods without departing from the scope of the present disclosure. Other items illustrated or described as coupled or directly coupled or in communication with one another may be indirectly coupled or in communication through some interface, device, or intermediate component, whether electrical, mechanical, or otherwise. Other examples of changes, substitutions, and alterations are ascertainable by those skilled in the art and may be made without departing from the spirit and scope of the disclosure herein. [Explanation of symbols]
[0209] 10 Coding Systems 12 Source Device 14 Destination Device 16 Computer-Readable Media 18 Video Sources 20 Video Encoder 22 Output Interface 28 Input Interface 30 Video Decoder 32 Display Devices 40 Mode Selection Unit 42 Motion Estimation Unit 44 Motion Compensation Unit 46 Intra Prediction Units 48 division units 50 Adder 52 Conversion Processing Unit 54 Quantization Units 56 Entropy Coding Units 58 Inverse Quantization Unit 60 Reverse conversion unit 62 Adder 64 Reference Frame Memory 70 Entropy Decoding Unit 72 Motion Compensation Unit 74 intra prediction units 76 Inverse Quantization Unit 78 Reverse conversion unit 80 Adder 82 Reference Frame Memory 402 IRAP Picture 404 Leading Picture 406 Trailing Picture 408 Decoding Order 410 Presentation order 502 GDR Picture 504 Trailing Picture 506 Recovery Point Picture 508 coded video sequence 510 Refreshed / clean area 512 Unrefreshed / dirty region 602 Current Picture 604 Reference Pictures 604 Refreshed Area 606 Refreshed Areas 608 Unrefreshed Area 610 Motion Vector 612 Reference Block 614 currently blocked 702 GDR Picture 704 Trailing Picture 706 Recovery Point Picture 708 CVS 730 NAL Unit 750 Video Bitstream 752 Sequence Parameter Set (SPS) 754 Picture Parameter Set (PPS) 756 slice header 758 Image data 760 Pictures 900 Video Coding Device 910 Inlet Port 920 Receiver Unit (Rx) 930 Processor 940 Transmitter Unit (Tx) 950 Exit Port 960 Memory 970 Coding Module 980 I / O Devices 1000 ways to code 1001 Receiving means 1002 Video coding device 1003 Storage means 1005 Processing means 1007 Transmission means
Claims
1. An apparatus for transferring a coded video bitstream having a data structure, comprising: a coded video bitstream having the data structure for use by a decoder, the coded video bitstream being generated by an encoder, the data structure including a specific structure in which a gradual decoding refresh (GDR) picture is the first picture following an end-of-sequence (EOS) network abstraction layer (NAL) unit in decoding order; The decoder processor sets a flag based on the particular structure to prevent the coded GDR picture from being output from a decoded picture buffer.
2. 1. An encoder for generating a coded video bitstream having a data structure, comprising: a coded video bitstream having the data structure for use by a decoder, the coded video bitstream being generated by an encoder, the data structure including a specific structure in which a gradual decoding refresh (GDR) picture is the first picture following an end-of-sequence (EOS) network abstraction layer (NAL) unit in decoding order; The decoder processor sets a flag based on the particular structure to prevent the coded GDR picture from being output from a decoded picture buffer.
3. 1. An encoder comprising: means for generating a video bitstream coded in a particular manner in which a gradual decoding refresh (GDR) picture is the first picture following an end-of-sequence (EOS) network abstraction layer (NAL) unit in decoding order; means for transmitting the coded video bitstream to a decoder to cause a processor of the decoder to set a flag to prevent the coded GDR picture from being output from a decoded picture buffer; An encoder comprising:
4. The encoder of claim 3 , wherein the flag is further set to prevent any trailing pictures between the coded GDR picture and a recovery point picture in output order from being output.
5. 4. The encoder of claim 3, wherein the coded GDR picture is the first picture in a coded video sequence (CVS) of the coded video bitstream, or the coded GDR picture is the first picture in a layer of the coded video bitstream.
6. The encoder of claim 5 , wherein the layer is a Coded Layer Video Sequence (CLVS) of a Coded Video Sequence (CVS) of the coded video bitstream.
7. 7. The encoder of claim 3, wherein the value of the flag is set to 1 to prevent the coded GDR picture and any trailing pictures between the coded GDR picture and a recovery point picture in output order from being output when the coded GDR picture is the first picture following the EOS NAL unit in the decoding order.
8. 8. The encoder of claim 7, wherein the value of the flag is set to 0 when the coded GDR picture is not the first picture in the decoding order and is not the first picture following the EOS NAL unit in the decoding order.
Citation Information
Patent Citations
Video encoding / decoding device, method, and program
WO2014002385A1
Signaling of regions of interest and gradual decoding refresh in video coding
WO2014051915A1
Gradual decoding refresh with temporal scalability support in video coding
WO2014107723A1