Determining the list of block vector predictor candidates
Patent Information
- Application Number
- JP2024541722
- Authority / Receiving Office
- JP · JP
- Patent Type
- Applications
- Current Assignee / Owner
- Priority Date
- 2022-01-10
- Filing Date
- 2023-01-10
- Publication Date
- 2025-02-19
- Estimated Expiration
- Not applicable · inactive patent
Smart Images

Figure 2025504804000001_ABST
Abstract
Description
[Background technology]
[0001] CROSS-REFERENCE TO RELATED APPLICATIONS This application claims the benefit of U.S. Provisional Patent Application No. 63 / 297,957, filed January 10, 2022. The above-referenced application is incorporated herein by reference in its entirety.
[0002] Computing devices process video for storage, transmission, reception, and / or display, including encoding and decoding, for example, to reduce the data size associated with the video. Summary of the Invention
[0003] The following summary provides a simplified overview of certain features. It is not an extensive overview and is not intended to identify key or critical elements.
[0004] Video may include a series of frames displayed consecutively. Predictive encoding and decoding may involve using information associated with a block in a frame to encode and / or decode other blocks within the same frame. For example, information associated with a block (e.g., the block's luma and / or chroma components) may be encoded and / or decoded using previously decoded information associated with a reference block within the same frame. A reference block may be indicated in the form of a block vector (BV), which represents the position of the reference block relative to a current block being coded or decoded. To reduce the signaling overhead required to directly indicate a BV, a BV may be indicated based on a block vector predictor (BVP) in a candidate BVP list. The BVP itself may be used as a BV in one or more operating modes. As described herein, additional candidate BVPs within the decoding region of a frame may be added to the list of candidate BVPs. Additional candidate BVPs may be added, for example, if the list of candidate BVPs is not complete and / or to replace candidate BVPs that are zero-valued. The availability of additional candidate BVPs may enable more accurate prediction of BVs and / or block information, thereby reducing the resource overhead required to encode, decode, and / or transmit a block.
[0005] These and other features and advantages are described in more detail below. [Brief explanation of the drawings]
[0006] Certain features are illustrated by way of example, and not by way of limitation, in the accompanying drawings in which like numerals refer to like elements and in which:
[0007] [Figure 1] FIG. 1 shows an exemplary video encoding / decoding system. [Figure 2] FIG. 2 shows an exemplary encoder. [Figure 3] FIG. 3 shows an exemplary decoder. [Figure 4]FIG. 4 shows an exemplary quadtree division of a coding tree block (CTB). [Figure 5] FIG. 5 shows an exemplary quadtree corresponding to the exemplary quadtree division of the CTB of FIG. [Figure 6] FIG. 6 shows exemplary binary and ternary tree partitioning. [Figure 7] Figure 7 shows an example of a combination of quadtree and multitype tree partitioning of a CTB. [Figure 8] FIG. 8 shows the tree corresponding to the combination of the CTB quadtree and multitype tree partitioning shown in FIG. [Figure 9] FIG. 9 shows an exemplary set of reference samples determined for intra prediction of a current block. [Figure 10A] FIG. 10A shows exemplary intra-prediction modes. [Figure 10B] FIG. 10B shows exemplary intra-prediction modes. [Figure 11] FIG. 11 shows the current block and the corresponding reference samples. [Figure 12] FIG. 12 illustrates the application of intra prediction modes for the prediction of the current block. [Figure 13A] FIG. 13A shows an example of inter prediction. [Figure 13B] FIG. 13B shows an example motion vector. [Figure 14] FIG. 14 shows an example of bi-prediction. [Figure 15A] FIG. 15A shows exemplary spatial candidate neighboring blocks for a current block. [Figure 15B] FIG. 15B shows an example of a block that is temporally co-located with the current block. [Figure 16] FIG. 16 shows an example of intra block copy (IBC) for coding. [Figure 17A] FIG. 17A shows an example of a candidate block vector predictor (BVP) decision. [Figure 17B] FIG. 17B shows an example of a candidate block vector predictor (BVP) decision. [Figure 17C] FIG. 17C shows an example of a candidate block vector predictor (BVP) decision. [Figure 18A] FIG. 18A shows exemplary IBC reference regions. [Figure 18B] FIG. 18B shows exemplary IBC reference regions. [Figure 19] FIG. 19 illustrates an exemplary method for determining candidate BVPs for inclusion in a list of candidate BVPs. [Figure 20] FIG. 20 shows an example of a computer system that may be used in any of the embodiments described herein. [Figure 21] FIG. 21 illustrates exemplary elements of a computing device that may be used to implement any of the various devices described herein. DETAILED DESCRIPTION OF THE INVENTION
[0008] The accompanying drawings and description provide examples. It should be understood that the examples shown in the drawings and / or description are non-exclusive, and that the features shown and described may be practiced in other embodiments. Examples are provided for the operation of video encoding and decoding systems that may be used in the field of video data storage and / or transmission / reception. More specifically, the techniques disclosed herein may relate to video compression used in encoding and / or decoding devices and / or systems.
[0009] A video sequence containing multiple pictures / frames may be represented in a digital format for storage and / or transmission. Representing a video sequence in a digital format may require a large number of bits. The large data size that may be associated with a video sequence may require significant resources for storage and / or transmission. Video encoding may be used to compress the size of a video sequence for more efficient storage and / or transmission. Video decoding may be used to restore the compressed video sequence for display and / or other forms of consumption.
[0010] 1 shows an exemplary video encoding / decoding system. The video encoding / decoding system 100 may include a source device 102, a transmission medium 104, and a destination device 106. The source device 102 may encode a video sequence 108 into a bitstream 110 for more efficient storage and / or transmission. The source device 102 may store and / or transmit / transmit the bitstream 110 to the destination device 106 via the transmission medium 104. The destination device 106 may decode the bitstream 110 to display the video sequence 108. The destination device 106 may receive the bitstream 110 from the source device 102 via the transmission medium 104. The source device 102 and / or the destination device 106 may be any of a number of different devices (e.g., a desktop computer, a laptop computer, a tablet computer, a smartphone, a wearable device, a television, a camera, a video game console, a set-top box, a video streaming device, etc.).
[0011] Source device 102 may include one or more of video source 112, encoder 114, and / or output interface 116 (e.g., for encoding video sequence 108 into bitstream 110). Video source 112 may provide and / or generate video sequence 108 based on the capture of natural and / or synthetically generated scenes. Synthetically generated scenes may be scenes including computer-generated graphics and / or screen content. Video source 112 may include a video capture device (e.g., a video camera), a video archive containing previously captured natural and / or synthetically generated scenes, a video feed interface for receiving captured natural and / or synthetically generated scenes from a video content provider, and / or a processor for generating synthetic scenes.
[0012] A video sequence, such as video sequence 108, may include a series of pictures (also called frames). A video sequence may achieve the impression of motion based on the sequential presentation of the pictures of the video sequence using fixed or variable time intervals between pictures. A picture may include one or more sample arrays of intensity values. The intensity values may be obtained (e.g., measured, determined, provided) at a series of regularly spaced locations within the picture. A color picture may (e.g., typically) include a luma sample array and two chroma sample arrays. The luma sample array may include intensity values representing the brightness of the picture (e.g., luminance component, Y). The chroma sample array may include intensity values representing the blue and red components of the picture (e.g., chroma components, Cb and Cr), respectively, separate from the brightness. Other color picture sample arrays are possible based on different color schemes (e.g., red, green, blue (RGB) color schemes). A pixel in a color picture may point to, contain, or associate all intensity values (e.g., luma component, chroma component) for a given location in the sample arrays used to represent the color picture. A monochrome picture may include a single luminance sample array, and a pixel in a monochrome picture may point to / contain / associate an intensity value (e.g., luminance component) at a given location in the single luminance sample array used to represent the monochrome picture.
[0013] The encoder 114 may encode the video sequence 108 into the bitstream 110. The encoder 114 may apply / use one or more prediction techniques (e.g., to encode the video sequence 108) to reduce redundant information in the video sequence 108. The redundant information may include information that can be predicted at a decoder and does not need to be transmitted to the decoder for accurate decoding of the video sequence. For example, the encoder 114 may apply spatial prediction (e.g., intra-frame or intra-prediction), temporal prediction (e.g., inter-frame or inter-prediction), inter-layer prediction, and / or other prediction techniques to reduce redundant information in the video sequence 108. The encoder 114 may, for example, divide a picture including the video sequence 108 into rectangular regions called blocks before applying one or more prediction techniques. The encoder 114 may then encode the blocks using one or more of the prediction techniques.
[0014] For example, for temporal prediction, the encoder 114 may search for a block similar to a block to be coded in another picture (e.g., a reference picture) of the video sequence 108. The encoder 114 may then predict the block to be coded using a block (e.g., a predictive block) determined during the search. For example, for spatial prediction, the encoder 114 may form a predictive block based on data from reconstructed neighboring samples of a block to be coded within the same picture of the video sequence 108. The reconstructed samples may be coded and then decoded samples. The encoder 114 may determine a prediction error (e.g., a residual) based on the difference between the block to be coded and the predictive block. The prediction error may represent non-redundant information that can be transmitted / communicated to a decoder for accurate decoding of the video sequence.
[0015] Encoder 114 may apply a transform to the prediction errors (e.g., using a discrete cosine transform (DCT) or any other transform) to generate transform coefficients. Encoder 114 may form bitstream 110 based on the transform coefficients and other information used to determine the prediction blocks (e.g., prediction type, motion vectors, and prediction mode). Encoder 114 may perform one or more of quantization and entropy coding of the transform coefficients and / or other information used to determine the prediction blocks before forming bitstream 110. The quantization and / or entropy coding may further reduce the amount of bits required to store and / or transmit video sequence 108.
[0016] The output interface 116 may be configured to write and / or store the bitstream 110 on the transmission medium 104 for transmission to the destination device 106. The output interface 116 may be configured to send / transmit, upload, and / or stream the bitstream 110 to the destination device 106 via the transmission medium 104. The output interface 116 may include a wired and / or wireless transmitter configured to send / transmit, upload, and / or stream the bitstream 110 according to one or more proprietary, open source, and / or standardized communication protocols (e.g., Digital Video Broadcasting (DVB) standards, Advanced Television Systems Committee (ATSC) standards, Integrated Services Digital Broadcasting (ISDB) standards, Data Over Cable Service Interface Specification (DOCSIS) standards, Third Generation Partnership Project (3GPP) standards, Institute of Electrical and Electronics Engineers (IEEE) standards, Internet Protocol (IP) standards, Wireless Application Protocol (WAP) standards, and / or other communication protocols).
[0017] The transmission medium 104 may include wireless, wired, and / or computer-readable media. For example, the transmission medium 104 may include one or more wires, cables, air interfaces, optical disks, flash memory, and / or magnetic memory. The transmission medium 104 may also include one or more networks (e.g., the Internet) or file servers configured to store and / or transmit / transmit encoded video data.
[0018] Destination device 108 may decode bitstream 110 into video sequence 108 for display. Destination device 106 may include one or more of input interface 118, decoder 120, and / or video display 122. Input interface 118 may be configured to read bitstream 110 stored on transmission medium 104 by source device 102. Input interface 118 may be configured to receive, download, and / or stream bitstream 110 from source device 102 via transmission medium 104. Input interface 118 may include a wired and / or wireless receiver configured to receive, download, and / or stream bitstream 110 according to one or more proprietary, open source, standardized communication protocols, and / or any other communication protocols (e.g., as referenced herein).
[0019] The decoder 120 may decode the video sequence 108 from the encoded bitstream 110. The decoder 120 may generate prediction blocks for pictures of the video sequence 108 in a manner similar to the encoder 114, and may, for example, determine prediction errors for blocks to decode the video sequence. The decoder 120 may generate the prediction blocks using / based on the prediction type, prediction mode, and / or motion vectors received in the bitstream 110. The decoder 120 may determine the prediction errors using transform coefficients received in the bitstream 110. The decoder 120 may determine the prediction errors by weighting the transform basis functions using the transform coefficients. The decoder 120 may combine the prediction blocks and the prediction errors to decode the video sequence 108. The decoded video sequence at the destination device may, or may not necessarily, be the same video sequence as transmitted, such as the video sequence 108 transmitted by the source device 102. For example, the decoder 120 may decode a video sequence that approximates the video sequence 108 due to, for example, lossy compression of the video sequence 108 by the encoder 114 and / or errors introduced into the encoded bitstream 110 during transmission to the destination device 106.
[0020] The video display 122 may display the video sequence 108 to a user. The video display 122 may include a cathode ray tube (CRT) display, a liquid crystal display (LCD), a plasma display, a light emitting diode (LED) display, and / or any other display device suitable for displaying the video sequence 108.
[0021] Video encoding / decoding system 100 is merely an example, and video encoding / decoding systems other than video encoding / decoding system 100 and / or modified versions of video encoding / decoding system 100 may perform the methods and processes described herein. For example, video encoding / decoding system 100 may include other components and / or arrangements. Video source 112 may be external to source device 102. Video display device 122 may be external to destination device 106 or may be omitted entirely (e.g., if video sequence 108 is intended for consumption by a machine and / or storage device). Source device 102 may further include a video decoder, and destination device 104 may further include a video encoder. For example, source device 102 may be configured to further receive an encoded bitstream from destination device 106 to support bidirectional video transmission between the devices.
[0022] The encoder 114 and / or the decoder 120 may operate according to one or more proprietary or industry video coding standards. For example, the encoder 114 and / or the decoder 120 may operate according to one or more proprietary, open-source, and / or standardized protocols (e.g., International Telecommunication Union Telecommunication Standardization Sector (ITU-T) H.263, ITU-T H.264, and Motion Picture Experts Group (MPEG)-4 Visual (also known as Advanced Video Coding (AVC)), ITU-T H.265 and MPEG-H Part 2 (also known as High Efficiency Video Coding (HEVC)), ITU-T H.265 and MPEG-I Part 3 (also known as Versatile Video Coding (VVC)), WebM VP8 and VP9 codecs, and / or AOMedia Video 1 (AV1)), and / or other communication protocols.
[0023] FIG. 2 shows an example encoder. The encoder 200 shown in FIG. 2 may implement one or more processes described herein. The encoder 200 may encode a video sequence 202 into a bitstream 204 for more efficient storage and / or transmission. The encoder 200 may be implemented in the video encoding / decoding system 100 (e.g., as encoder 114) as shown in FIG. 1 or in any computing, communication, or electronic device (e.g., a desktop computer, a laptop computer, a tablet computer, a smartphone, a wearable device, a television, a camera, a video game console, a set-top box, a video streaming device, etc.). The encoder 200 may include one or more of an inter-prediction unit 206, an intra-prediction unit 208, combiners 210 and 212, a transform and quantization unit (TR+Q) unit 214, an inverse transform and quantization unit (iTR+iQ) 216, an entropy coding unit 218, one or more filters 220, and / or a buffer 222.
[0024] The encoder 200 may divide (e.g., include) a picture (e.g., a frame) of the video sequence 202 into blocks and encode the video sequence 202 block by block. The encoder 200 may perform / apply prediction techniques on the blocks to be encoded using either an inter prediction unit 206 or an intra prediction unit 208. The inter prediction unit 206 may perform inter prediction by searching for a block similar to a block to be encoded in another reconstructed picture (e.g., a reference picture) of the video sequence 202. The reconstructed picture may be an encoded and then decoded picture. The block (e.g., a predictive block) determined during the search may then be used to predict the block to be encoded to remove redundant information. The inter prediction unit 206 may determine the predictive block by exploiting temporal redundancy or similarity in scene content from picture to picture of the video sequence 202. For example, the scene content between pictures of the video sequence 202 may be similar over time except for differences due to motion or affine transformation of screen content.
[0025] The intra prediction unit 208 may perform intra prediction by forming a predictive block based on data from reconstructed neighboring samples of a block encoded within the same picture of the video sequence 202. The reconstructed samples may refer to samples that have been encoded and then decoded. The intra prediction unit 208 may determine the predictive block by exploiting spatial redundancy or similarity in scene content within a picture of the video sequence 202. For example, the texture of a region of scene content in a picture may be similar to the texture of the region immediately surrounding the region of scene content in the same picture.
[0026] The combiner 210 may determine a prediction error (e.g., a residual) based on the difference between the block to be coded and the prediction block. The prediction error may represent non-redundant information that can be transmitted / communicated to a decoder for accurate decoding of the video sequence.
[0027] The transform and quantization unit 214 may transform and quantize the prediction errors. The transform and quantization unit 214 may convert the prediction errors into transform coefficients, for example, by applying a DCT to reduce correlation information of the prediction errors. The transform and quantization unit 214 may quantize the coefficients by mapping the data of the transform coefficients to a set of predetermined representative values. The transform and quantization unit 214 may quantize the coefficients to reduce irrelevant information in the bitstream 204. The irrelevant information may be information that can be removed from the coefficients without producing visible and / or perceptible distortion in the video sequence 202 after decoding (e.g., at a receiving device).
[0028] The entropy coding unit 218 may apply one or more entropy coding methods to the quantized transform coefficients to further reduce the bit rate. For example, the entropy coding unit 218 may apply context-adaptive variable length coding (CAVLC), context-adaptive binary arithmetic coding (CABAC), and / or context-based binary arithmetic coding (SBAC). The entropy-coded coefficients may be packed to form the bitstream 204.
[0029] The inverse transform and quantization unit 216 may inverse quantize and inverse transform the quantized transform coefficients to determine a reconstructed prediction error. The combiner 212 may combine the reconstructed prediction error with the prediction block to form a reconstructed block. The filter 220 may filter the reconstructed block using, for example, a deblocking filter and / or a sample adaptive offset (SAO) filter. The buffer 222 may store the reconstructed block for prediction of one or more other blocks in the same and / or different pictures of the video sequence 202.
[0030] The encoder 200 may further include an encoder control unit. The encoder control unit may be configured to control one or more units of the encoder 200 shown in FIG. 2. The encoder control unit may control one or more units of the encoder 200 so that the bitstream 204 may be generated in accordance with the requirements of one or more proprietary coding protocols, industry video coding standards, and / or any other communication protocol. For example, the encoder control unit may control one or more units of the encoder 200 so that the bitstream 204 is generated in compliance with one or more of ITU-T H.263, AVC, HEVC, VVC, VP8, VP9, AV1, and / or any other video coding standards / formats.
[0031] The encoder control unit may attempt to minimize (or reduce) the bitrate of bitstream 204 and / or maximize (or increase) the reconstructed video quality (e.g., within the constraints of a proprietary coding protocol, an industry video coding standard, and / or any other communication protocol). For example, the encoder control unit may attempt to minimize or reduce the bitrate of bitstream 204 so that the reconstructed video quality does not fall below a particular level / threshold, and / or may attempt to maximize or increase the reconstructed video quality so that the bitrate of bitstream 204 does not exceed a particular level / threshold. The encoder control unit may determine / control one or more of: the division of a picture of the video sequence 202 into blocks, whether the block is inter predicted by the inter prediction unit 206 or intra predicted by the intra prediction unit 208; the motion vector for inter prediction of the block; the intra prediction mode among multiple intra prediction modes for intra prediction of the block; the filtering performed by the filter 220; and / or one or more transform types and / or quantization parameters applied by the transform and quantization unit 214. The encoder control unit may determine / control one or more of the above based on a rate-distortion measurement for the block or picture being coded. The encoder control unit may determine / control one or more of the above to reduce the rate-distortion measurement for the block or picture being coded.
[0032] The prediction type (intra- or inter-prediction) used to encode the block, the prediction information for the block (intra-prediction, intra-prediction mode, motion vector, etc., in the case of intra-prediction), and / or transform and / or quantization parameters may be transmitted to entropy coding unit 218 for further compression (e.g., to reduce bitrate). The prediction type, prediction information, and transform and / or quantization parameters may be packed with the prediction error to form bitstream 204.
[0033] Encoder 200 is merely an example, and encoders other than encoder 200 and / or modified versions of encoder 200 may implement the methods and processes described herein. For example, encoder 200 may have other components and / or arrangements. One or more of the components shown in FIG. 2 may optionally be included in encoder 200 (e.g., entropy coding unit 218 and / or filter 220).
[0034] FIG. 3 shows an exemplary decoder. The decoder 300 shown in FIG. 3 may implement one or more processes described herein. The decoder 300 may decode a bitstream 302 into a decoded video sequence for display and / or some other form of consumption. The decoder 300 may be implemented in the video encoding / decoding system 100 of FIG. 1 and / or in a computing, communication, or electronic device (e.g., a desktop computer, a laptop computer, a tablet computer, a smartphone, a wearable device, a television, a camera, a video game console, a set-top box, and / or a video streaming device). The decoder 300 may include an entropy decoding unit 306, an inverse transform and quantization (iTR+iQ) unit 308, a combiner 310, one or more filters 312, a buffer 314, an inter prediction unit 316, and / or an intra prediction unit 318.
[0035] The decoder 300 may include a decoder control unit configured to control one or more units of the decoder 300. The decoder control unit may control one or more units of the decoder 300 such that the bitstream 302 is decoded in accordance with the requirements of one or more proprietary coding protocols, industry video coding standards, and / or any other communication protocol. For example, the decoder control unit may control one or more units of the decoder 300 such that the bitstream 302 is decoded in accordance with one or more of ITU-T H.263, AVC, HEVC, VVC, VP8, VP9, AV1, and / or any other video coding standards / formats.
[0036] The decoder control unit may determine / control one or more of the following, regardless of whether the block is inter predicted by inter prediction unit 316 or intra predicted by intra prediction unit 318: a motion vector for inter prediction of the block, an intra prediction mode among multiple intra prediction modes for intra prediction of the block, filtering performed by filter 312, and / or one or more inverse transform types and / or inverse quantization parameters applied by inverse transform and quantization unit 308. One or more of the control parameters used by the decoder control unit may be packed into the bitstream 302.
[0037] The entropy decoding unit 306 may entropy decode the bitstream 302. The inverse transform and quantization unit 308 may inverse quantize and / or inverse transform the quantized transform coefficients to determine a decoded prediction error. The combiner 310 may combine the decoded prediction error with a prediction block to form a decoded block. The prediction block may be generated by the inter prediction unit 318 or the inter prediction unit 316 (e.g., as described above with respect to the encoder 200 of FIG. 2). The filter 312 may filter the decoded block using, for example, a deblocking filter and / or a sample adaptive offset (SAO) filter. The buffer 314 may store the decoded block for prediction of one or more other blocks in the same and / or different pictures of the video sequence in the bitstream 302. As shown in FIG. 3, the decoded video sequence 304 may be output from the filter 312.
[0038] The decoder 300 is merely an example, and decoders other than the decoder 300 and / or modified versions of the decoder 300 may implement the methods and processes described herein. For example, the decoder 300 may have other components and / or arrangements. One or more of the components shown in FIG. 3 may optionally be included in the decoder 300 (e.g., the entropy decoding unit 306 and / or the filter 312).
[0039] Although not shown in Figures 2 and 3, each of the encoder 200 and the decoder 300 may further include an intra block copy unit in addition to the inter prediction and intra prediction units. The intra block copy unit may perform / operate similarly to the inter prediction unit, but may predict blocks within the same picture. For example, the intra block copy unit may take advantage of repetitive patterns that appear in screen content. The screen content may include computer-generated text, graphics, animation, etc.
[0040] Video encoding and / or decoding may be performed on a block-by-block basis. The process of dividing a picture into blocks may be adaptive based on the content of the picture. For example, to improve coding efficiency, larger block divisions may be used in areas of a picture that have a higher level of homogeneity.
[0041] A picture (e.g., HEVC, or any other coding standard / format) may be divided into non-overlapping square blocks, which may be referred to as coding tree blocks (CTBs). A CTB may contain samples of a sample array. A CTB may be divided into 2 n ×2 n The CTB may have a sample size, n, which may be specified by the parameters of the coding system. For example, n may be 4, 5, 6, or any other value. The CTB may have any other size. The CTB may be further divided by a recursive quadtree division into coding blocks (CBs) of half-vertical and half-horizontal size. The CTB may form the root of the quadtree. CBs that are not further divided as part of the recursive quadtree division may be referred to as leaf CBs of the quadtree, or otherwise may be referred to as non-leaf CBs of the quadtree. The CB may have a minimum size specified by the parameters of the coding system. For example, the CB may have a minimum size of 4x4, 8x8, 16x16, 32x32, 64x64 samples, or any other minimum size. The CB may be further divided into one or more prediction blocks (PBs) to perform inter-prediction and intra-prediction. A PB may be a rectangular block of samples to which the same prediction type / mode can be applied. For transformation, the CB may be divided into one or more transform blocks (TBs). The TB may be a rectangular block of samples that may determine / indicate the applied transform size.
[0042] FIG. 4 shows an example of a quadtree division of a CTB. FIG. 5 shows a quadtree corresponding to the exemplary quadtree division of the CTB 400 of FIG. 4. As shown in FIGS. 4 and 5, the CTB 400 may first be divided into four CBs of semi-vertical and semi-horizontal size. Three of the CBs resulting from the first level division of the CTB 400 may be leaf CBs. The three leaf CBs of the first level division of the CTB 400 are labeled 7, 8, and 9, respectively, in FIGS. 4 and 5. The non-leaf CBs of the first level division of the CTB 400 may be divided into four sub-CBs of semi-vertical and semi-horizontal size. Three of the sub-CBs resulting from the second level division of the CTB 400 may be leaf CBs. The three leaf CBs of the second level division of the CTB 400 are labeled 0, 5, and 6, respectively, in FIGS. 4 and 5. The non-leaf CBs of the second level division of the CTB 400 may be divided into four leaf CBs of semi-vertical and semi-horizontal size. The four lobes CB can be labeled 1, 2, 3, and 4 in Figures 4 and 5, respectively.
[0043] The CTB 400 of FIG. 4 may be divided into ten leaf CBs, labeled 0 through 9, and / or any other number of leaf CBs. The ten leaf CBs may correspond to ten CB leaf nodes (e.g., FIG. 5). In other embodiments, the CTB may be divided into a different number of leaf CBs. The resulting quadtree division of the CTB 400 may be scanned using a z-scan (e.g., left to right, top to bottom) to form a sequence order for encoding / decoding the CB leaf nodes. The numeric label (e.g., indicator, index) of each CB leaf node in FIGS. 4 and 5 may correspond to a sequence order for encoding / decoding. For example, CB leaf node 0 may be encoded / decoded first, and CB leaf node 9 may be encoded / decoded last. Although not shown in FIGS. 4 and 5, each CB leaf node may include one or more PBs and / or TBs.
[0044] Pictures in VVC (or any other coding standard / format) can be partitioned in a similar manner (such as HEVC). Pictures can first be partitioned into non-overlapping square CTBs. The CTBs can then be partitioned into half-vertical and half-horizontal sized CBs using recursive quadtree partitioning. Quadtree leaf nodes (e.g., in VVC) can be further partitioned into unequal sized CBs by binary or ternary tree partitioning (or any other partitioning).
[0045] FIG. 6 illustrates exemplary binary tree and ternary tree partitioning. Binary tree partitioning may divide a parent block in half, either vertically 602 or horizontally 604. The resulting partitions may be half the size compared to the parent block. The resulting partitions may correspond to sizes less than and / or more than half the parent block size. Ternary tree partitioning may divide a parent block into three parts, either vertically 606 or horizontally 608. FIG. 6 illustrates an example in which a middle partition may be twice the size of the other two end partitions in the ternary tree partitioning. In other examples, the partitions may be other sizes relative to each other and the parent block. Binary tree partitioning and ternary tree partitioning are examples of multi-type tree partitioning. Multi-type tree partitioning may include dividing a parent block into other amounts of smaller blocks. A block partitioning strategy (e.g., in VVC) may be referred to as quad-tree + multi-type tree partitioning due to the addition of binary and / or ternary tree partitioning to quad-tree partitioning.
[0046] FIG. 7 shows an example of a combined quadtree and multitype tree partitioning of a CTB. FIG. 8 shows a tree corresponding to the combined quadtree and multitype tree partitioning of CTB 700 shown in FIG. 7. In both FIG. 7 and FIG. 8, the quadtree partitioning is shown with solid lines, and the multitype tree partitioning is shown with dashed lines. CTB 700 is shown with the same quadtree partitioning as CTB 400 described in FIG. 4, and a description of the quadtree partitioning of CTB 700 is omitted. The quadtree partitioning of CTB 700 is merely an example, and the CTB may be quadtree partitioned in a manner different from CTB 700. Additional multitype tree partitioning of CTB 700 may be performed on the three leaf CBs shown in FIG. 4. The three leaf CBs of FIG. 4 shown in FIG. 7 as being further partitioned may be leaves CBs 5, 8, and 9. The three leaf CBs may be further partitioned using one or more binary and ternary tree partitionings.
[0047] Leaf CB5 in Figure 4 can be split into two CBs based on a vertical binary tree partition. The resulting two CBs may be leaf CBs labeled 5 and 6 in Figures 7 and 8, respectively. Leaf CB8 in Figure 4 can be split into three CBs based on a vertical ternary tree partition. Two of the three resulting CBs may be leaf CBs labeled 9 and 14 in Figures 7 and 8, respectively. The remaining non-leaf CBs may be initially split into two CBs based on a horizontal binary tree partition. One of the two CBs may be the leaf CB labeled 10. The other of the two CBs may be further split into three CBs based on a vertical ternary tree partition. The resulting three CBs may be leaf CBs labeled 11, 12, and 13 in Figures 7 and 8, respectively. Leaf CB9 in Figure 4 can be split into three CBs based on a horizontal ternary tree partition. Two of the three CBs may be the leaf CBs labeled 15 and 19 in Figures 7 and 8, respectively. The remaining non-leaf CBs can be split into three CBs based on another horizontal ternary tree split. All three resulting CBs can be leaf CBs, labeled 16, 17, and 18 in Figures 7 and 8, respectively.
[0048] Overall, CTB 700 may be divided into 20 leaf CBs, labeled 0 through 19, respectively. The resulting quadtree + multitype tree division of CTB 700 may be scanned using a z-scan (left to right, top to bottom) to form a sequence order for encoding / decoding the CB leaf nodes. The numeric labels of each CB leaf node in FIGS. 7 and 8 may correspond to the sequence order for encoding / decoding, with CB leaf node 0 being encoded / decoded first and CB leaf node 19 being encoded / decoded last. Note that, although not shown in FIGS. 7 and 8, each CB leaf node may contain one or more PBs and / or TBs.
[0049] A coding standard / format (e.g., HEVC, VVC, or any other of the coding standards / formats) may define various units (e.g., in addition to specifying various blocks (e.g., CTB, CB, PB, TB)). A block may include a rectangular region of samples within a sample array. A unit may include co-located blocks of samples from different sample arrays (e.g., luma and chroma sample arrays) that form a picture and syntax elements and prediction data for the block. A coding tree unit (CTU) may include co-located CTBs of different sample arrays and may form a complete entity in the coded bitstream. A coding unit (CU) may include co-located CBs of different sample arrays and syntax structures used to code samples of the CBs. A prediction unit (PU) may include co-located PBs of different sample arrays and syntax elements used to predict the PBs. A transform unit (TU) may include TBs of different sample arrays and syntax elements used to transform the TBs.
[0050] A block may refer to any of a CTB, CB, PB, TB, CTU, CU, PU, and / or TU (e.g., in the context of HEVC, VVC, or any other coding format / standard). A block may be used to refer to a similar data structure in the context of any video coding format / standard / protocol. For example, a block may refer to a macroblock in the AVC standard, a macroblock or sub-block in the VP8 coding format, a superblock or sub-block in the VP9 coding format, or a superblock or sub-block in the AV1 coding format.
[0051] Samples of a block to be coded (e.g., a current block) may be predicted from samples in columns adjacent to the leftmost column of the current block and samples in rows adjacent to the top row of the current block, such as in intra-prediction. Samples from adjacent columns and rows may be collectively referred to as reference samples. Each sample of the current block may be predicted by projecting the sample's position in the current block in a given direction onto a point along the reference sample (e.g., in intra-prediction mode). If the projection does not fall directly onto the reference sample, the sample may be predicted by interpolating between the two closest reference samples of the projected point. A prediction error (e.g., a residual) may be determined for the current block based on the difference between the predicted sample value and the original sample value of the current block.
[0052] Predicting samples and determining a prediction error based on a difference between the predicted sample and the original sample may be performed (e.g., in an encoder) for multiple different intra-prediction modes (e.g., including a non-directional intra-prediction mode). The encoder may select one of the multiple intra-prediction modes and its corresponding prediction error to encode the current block. The encoder may send an indication of the selected prediction mode and its corresponding prediction error to a decoder for decoding the current block. The decoder may decode the current block by predicting samples of the current block using the intra-prediction mode indicated by the encoder and / or combining the predicted samples with the prediction error.
[0053] 9 shows an example set of reference samples determined for intra-prediction of a current block. The current block 904 may correspond to a block to be coded and / or decoded. The current block 904 may correspond to block 3 of the split CTB 700 as shown in FIG. 7. As described herein, the numeric labels 0-19 of the blocks of the split CTB 700 may correspond to a sequence order for coding / decoding the blocks and may be used as in the example of FIG. 9.
[0054] The current block 904 may be w × h samples in size. The reference samples 902 may include 2 w samples (or any other number of samples) in a row adjacent to the top row of the current block 904, 2 h samples (or any other number of samples) in a column adjacent to the leftmost column of the current block 904, and an upper-left adjacent corner sample for the current block 904. The current block 904 may be square, such that w = h = s. In other embodiments, the current block need not be square, such that w ≠ h. Available samples from neighboring blocks of the current block 904 may be used to construct the set of reference samples 902. A sample may not be available to construct the set of reference samples 902, for example, if the sample is outside the picture of the current block, if the sample is part of a different slice of the current block (e.g., if the concept of slices is used), and / or if the sample belongs to an inter-coded block and constrained intra prediction is indicated. For example, if constrained intra prediction is indicated, the intra prediction may not depend on the inter-predicted block.
[0055] Samples that are not available for constructing the set of reference samples 902 may include samples within blocks that have not yet been coded and reconstructed at the encoder and / or decoded at the decoder based on the sequence order for encoding / decoding. Restricting such samples from inclusion in the set of reference samples may enable both the encoder and the decoder to determine the same prediction results. Samples from neighboring blocks 0, 1, and 2 may be available for constructing reference samples 902, given that these blocks are coded and reconstructed at the encoder and decoded at the decoder before coding of the current block 904. Samples from neighboring blocks 0, 1, and 2 may be available for constructing reference samples 902, for example, if there are no other issues (e.g., as described above) that prevent the availability of samples from neighboring blocks 0, 1, and 2. A portion of reference samples 902 from neighboring block 6 may not be available due to the sequence order for encoding / decoding (e.g., because block 6 may not yet be coded and reconstructed at the encoder and / or decoded at the decoder based on the sequence order for encoding / decoding).
[0056] Unavailable samples from the reference samples 902 may be filled with one or more of the available reference samples 902. For example, an unavailable reference sample may be filled with the nearest available reference sample. The nearest available reference sample may be determined by moving clockwise from the position of the unavailable reference through the reference samples 902. The reference samples 902 may be filled with, for example, an intermediate value of the dynamic range in which the picture is encoded when a reference sample is unavailable.
[0057] The reference sample 902 may be filtered based on the size of the current block 904 to be coded and the applied intra-prediction mode. Figure 9 shows an example determination of a reference sample for intra-prediction of a block. The reference sample may be determined in a manner different from that described above. For example, multiple reference lines may be used in other instances (e.g., VVC).
[0058] The samples of the current block 904 may be intra predicted based on the reference sample 902, e.g., based on determining the reference sample and (optionally) filtering. At least some (e.g., most) encoders / decoders may support multiple intra prediction modes according to one or more video coding standards. For example, HEVC supports 35 intra prediction modes, including planar mode, direct current (DC) mode, and 33 angular modes. VVC supports 67 intra prediction modes, including planar mode, DC mode, and 65 angular modes. Planar and DC modes may be used to predict smooth and gradually changing regions of a picture. Angular modes may be used to predict directional structure in regions of a picture. Any amount of intra prediction modes may be supported.
[0059] 10A and 10B show exemplary intra prediction modes. FIG. 10A shows 35 intra prediction modes such as those supported by HEVC. The 35 intra prediction modes may be indicated / identified by indexes 0 through 34. Prediction mode 0 may correspond to planar mode. Prediction mode 1 may correspond to DC mode. Prediction modes 2 through 34 may correspond to angular modes. Prediction modes 2 through 18 may be referred to as horizontal prediction modes because the primary prediction source is horizontal. Prediction modes 19 through 34 may be referred to as vertical prediction modes because the primary prediction source is vertical.
[0060] FIG. 10B illustrates 67 intra prediction modes, such as those supported by VVC. The 67 intra prediction modes may be indicated / identified by indexes 0 through 66. Prediction mode 0 may correspond to planar mode. Prediction mode 1 may correspond to DC mode. Prediction modes 2 through 66 may correspond to angular modes. Prediction modes 2 through 34 may be referred to as horizontal prediction modes because the primary prediction source is in the horizontal direction. Prediction modes 35 through 66 may be referred to as vertical prediction modes because the primary prediction source is in the vertical direction. Some of the intra prediction modes illustrated in FIG. 10B may be adaptively replaced by wide-angle directions because VVC blocks need not be square.
[0061] 11 shows a current block and corresponding reference samples. In FIG. 11, the current block 904 and reference samples 902 from FIG. 9 are shown in a two-dimensional x, y plane, and the samples may be referenced as p[x][y]. To simplify the prediction process, the reference samples 902 may be arranged in two one-dimensional arrays. The reference samples 902 above the current block 904 may be arranged in a one-dimensional array ref1[x].
number
[0062] The reference samples 902 to the left of the current block 904 may be arranged in a one-dimensional array ref2[y].
number
[0063] The prediction process may include determining a predicted sample p[x][y] (e.g., a predicted value) at a position [x][y] within the current block 904. In planar mode, the sample at a position [x][y] within the current block 904 may be predicted by determining / calculating the average of two interpolated values. The first of the two interpolated values may be based on a horizontal linear interpolation at the position [x][y] within the current block 904. The second of the two interpolated values may be based on a vertical linear interpolation at the position [x][y] within the current block 904. The predicted sample p[x][y] in the current block 904 may be determined / calculated as follows:
number
number
number
[0064] The sample at position [x][y] in the current block 904 may be predicted by the average of the reference samples 902, such as in DC mode. The predicted sample p[x][y] in the current block 904 may be determined / calculated as follows:
number
[0065] The sample at position [x][y] within the current block 904 may be predicted by projecting position [x][y] onto a point on a horizontal or vertical line of samples that includes the reference sample 902, for example, for a given angular mode, in a direction specified by the given angular mode. The sample at position [x][y] may be predicted by interpolating between the two nearest reference samples to the projection point if the projection does not fall directly on the reference sample. The direction specified by the angular mode may be given by an angle φ defined with respect to the y-axis for vertical prediction modes (e.g., modes 19-34 of HEVC and modes 35-66 of VVC). The direction specified by the angular mode may be given by an angle φ defined with respect to the x-axis for horizontal prediction modes (e.g., modes 2-18 of HEVC and modes 2-34 of VVC).
[0066] FIG. 12 illustrates the application of an intra prediction mode for predicting a current block. FIG. 12 specifically illustrates the prediction of a sample at a position [x][y] within a current block 904 for a vertical prediction mode 906. The vertical prediction mode 906 may be given by an angle φ relative to the vertical axis. In the vertical projection mode, the position [x][y] within the current block 904 may be projected to a point (e.g., a projection point) on the horizon of the reference sample ref1[x]. The reference sample 902 is only partially illustrated in FIG. 12 for ease of illustration. As can be seen in FIG. 12, the projection point on the horizon of the reference sample ref1[x] may not be exactly on the reference sample. For example, if the projection point is located at a fractional sample position between two reference samples, the prediction sample p[x][y] within the current block 904 may be determined / calculated by linearly interpolating between the two reference samples. The prediction sample p[x][y] may be determined as follows:
number
number
number
[0067] The position [x][y] of the sample in the current block 904 may be projected onto a vertical line of the reference sample ref2[y], such as for a horizontal prediction mode. The predicted sample p[x][y] for the horizontal prediction mode may be determined / calculated as follows:
number
number
number
[0068] The interpolation functions given by equations (7) and (10) may be implemented by an encoder and / or a decoder (e.g., the encoder 200 of FIG. 2 and / or the decoder 300 of FIG. 3). The interpolation functions may be implemented by finite impulse response (FIR) filters. For example, the interpolation functions may be implemented as a set of 2-tap FIR filters. The coefficients of the 2-tap FIR filters are (1-i f ) and if The prediction samples p[x][y] in angular intra prediction may be calculated at some predetermined level of sample accuracy (e.g., 1 / 32 sample accuracy, or accuracy defined by any other metric). For 1 / 32 sample accuracy, the set of 2-tap FIR interpolation filters may include up to 32 different 2-tap FIR interpolation filters, which can be used to calculate the projection displacement i f In other embodiments, different levels of sample precision may be used.
[0069] FIR filters may be used to predict chroma samples and / or luma samples. For example, a two-tap interpolating FIR filter may be used to predict chroma samples, and the same or a different interpolation technique / filter may be used for luma samples. For example, a four-tap FIR filter may be used to determine the predicted values for luma samples. The coefficients of the four-tap FIR filter are i f (e.g., similar to a 2-tap FIR filter). For 1 / 32 sample accuracy, the set of 32 different 4-tap FIR filters may include up to 32 different 4-tap FIR filters, which is determined based on the projection displacement i f One for each of the 32 possible values of the fractional part of i. In other embodiments, different levels of sample precision may be used. The set of 4-tap FIR filters is stored in a look-up table (LUT) and f The prediction samples p[x][y] for the vertical prediction mode may be determined based on a 4-tap FIR filter as follows:
number
number
[0070] If the position [x][y] of a sample in the current block 904 to be predicted is projected to a negative x coordinate, a supplemental reference sample may be determined / constructed. The position [x][y] of the sample may be projected to a negative x coordinate, for example, if a negative vertical prediction angle φ is used. The supplemental reference sample may be determined / constructed by projecting the reference sample of ref2[y] within the vertical line of reference samples 902 onto the horizontal line of reference samples 902 using the negative vertical prediction angle φ. For example, if the position [x][y] of a sample in the current block 904 to be predicted is projected to a negative y coordinate, a supplemental reference sample may be determined similarly. The position [x][y] of the sample may be projected to a negative y coordinate, for example, if a negative horizontal prediction angle φ is used. The supplemental reference sample may be determined / constructed by projecting the reference sample of ref1[x] on the horizontal line of reference samples 902 onto the vertical line of reference samples 902 using the negative horizontal prediction angle φ.
[0071] The encoder may determine / predict samples of a current block (e.g., current block 904) to be coded for multiple intra prediction modes (e.g., using one or more of the functions described herein). For example, the encoder may predict samples of the current block for each of the 35 intra prediction modes in HEVC or the 67 intra prediction modes in VVC. For each applied intra prediction mode, the encoder may determine a corresponding prediction error for the current block based on the difference (e.g., sum of squared differences (SSD), sum of absolute differences (SAD), or sum of absolute transformed differences (SATD)) between the predicted samples determined for the intra prediction mode and the original samples of the current block. The encoder may determine / select one of the intra prediction modes to code the current block based on the determined prediction error. For example, the encoder may select the intra prediction mode that results in the smallest prediction error for the current block. The encoder may select the intra prediction mode to code the current block based on a rate-distortion measure (e.g., a Lagrangian rate-distortion cost) determined using the prediction error. The encoder may send an indication of the selected intra-prediction mode and its corresponding prediction error (e.g., residual) to the decoder for decoding of the current block.
[0072] The decoder may determine / predict samples of a current block (e.g., current block 904) to be decoded for an intra-prediction mode. For example, the decoder may receive an indication of a prediction mode (e.g., an angular intra-prediction mode) from the encoder of the block. The decoder may construct a set of reference samples and perform intra-prediction based on the prediction mode indicated by the encoder for the block in a similar manner (e.g., as described above for the encoder). The decoder adds predicted values of the samples of the block (e.g., determined based on intra-prediction) to the residual of the block to reconstruct the block. It is not necessary for the decoder to receive an indication of an angular intra-prediction mode from the encoder of the block. The decoder may determine the intra-prediction mode based on, for example, other criteria. Although various embodiments herein correspond to intra-prediction modes of HEVC and VVC, the methods, devices, and systems described herein may be applied / used for other intra-prediction modes (e.g., as used in other video coding standards / formats such as VP8, VP9, AV1, etc.).
[0073] Intra prediction may utilize correlation between spatially adjacent samples of the same picture of a video sequence to perform video compression. Inter prediction is another coding tool that can be used to perform video compression. Inter prediction may utilize time-domain correlation between sample blocks of different pictures of a video sequence. For example, an object may be visible across multiple pictures of a video sequence. The object may move (e.g., with some translational and / or affine motion) or remain stationary across multiple pictures. A current block of samples of a current picture being encoded may have / be associated with a corresponding block of samples of a previously decoded picture. The corresponding block of samples may accurately predict the current block of samples. The corresponding block of samples may be displaced from the current block of samples due, for example, to an object represented in both blocks moving across the respective pictures of the block. The previously decoded picture may be a reference picture. The corresponding block of samples in the reference picture may be a reference block for motion-compensated prediction. An encoder may use block matching techniques to estimate the displacement (or motion) of an object and / or determine a reference block in a reference picture.
[0074] The encoder may determine a difference between the current block and a prediction for the current block. The encoder may determine the difference, for example, based on / after determining / generating a prediction for the current block (e.g., using inter-prediction). The difference may be referred to as a prediction error and / or a residual. The encoder may then store and / or transmit (e.g., signal) a bitstream, the prediction error, and / or other related prediction information. The prediction error and / or other related prediction information may be used for decoding or consumption in other formats. The decoder may decode the current block by predicting samples of the current block (e.g., by using the related prediction information) and combining the predicted samples with the prediction error.
[0075] FIG. 13A shows an example of inter-prediction. Inter-prediction may be performed on a current block 1300 of a current picture 1302 to be encoded. An encoder (e.g., the encoder 200 shown in FIG. 2) may perform inter-prediction to determine and / or generate a reference block 1304 in a reference picture 1306. The reference block 1304 may be used to predict the current block 1300. The reference picture (e.g., the reference picture 1306) may be a pre-decoded picture available to the encoder and decoder. The availability of a previous decoded picture may depend / be based on whether a previous decoded picture is available in the decoded picture buffer when the current block 1300 is encoded or decoded. The encoder may search one or more reference pictures for a reference block that is similar (or substantially similar) to the current block 1300. The encoder may determine a best-matching reference block from the blocks tested during the search process. The best-matching reference block may be the reference block 1304. The encoder may determine that the reference block 1304 is the best matching reference block based on one or more cost criteria. The one or more cost criteria may include a rate-distortion criterion (e.g., a Lagrangian rate-distortion cost). The one or more cost criteria may be based on the difference (e.g., SSD, SAD, and / or SATD) between the predicted samples of the reference block 1304 and the original samples of the current block 1300.
[0076] The encoder may search for the reference block 1304 within a reference region 1308. The reference region 1308 may be positioned around a collocated position (or block) 1310 of the current block 1300 in the reference picture 1306. The collocated block 1310 may have the same position in the reference picture 1306 as the current block 1300 in the current picture 1302. The reference region 1308 may also be referred to as a search range. The reference region 1308 may extend at least partially outside the reference picture 1306. A certain boundary extension may be used, for example, when the reference region 1308 extends outside the reference picture 1306. A certain boundary extension may be used so that values of samples in a row or column of the reference picture 1306 adjacent to a portion of the reference region 1308 that extends outside the reference picture 1306 may be used for sample positions outside the reference picture 1306. A subset of the potential locations within the reference region 1308, or all potential locations, may be searched for the reference block 1304. The encoder may utilize one or more search implementations to determine and / or generate the reference block 1304. For example, the encoder may determine a set of candidate search locations based on motion information of neighboring blocks relative to the current block 1300.
[0077] One or more reference pictures may be searched by the encoder during inter-prediction to determine and / or generate a best-matching reference block. The reference pictures searched by the encoder may be included in (e.g., added to) one or more reference picture lists. For example, in HEVC and VVC (and / or in one or more other communication protocols), two reference picture lists (e.g., Reference Picture List 0 and Reference Picture List 1) may be used. A reference picture list may contain one or more pictures. A reference picture 1306 of a reference block 1304 may be indicated by a reference index that points to the reference picture list that contains the reference picture 1306.
[0078] 13B shows an example motion vector. The displacement between the reference block 1304 and the current block 1300 may be interpreted as an estimate of the motion between the reference block 1304 and the current block 1300 across the respective pictures. The displacement may be represented by a motion vector 1312. For example, the motion vector 1312 may have a horizontal component (MV) relative to the position of the current block 1300. x ) and vertical component (MV y ) Motion vectors (e.g., motion vector 1312) may have fractional or integer resolution. A motion vector with fractional resolution may point between two samples in a reference picture to provide a better estimate of the motion of the current block 1300. For example, a motion vector may have ½, ¼, ⅛, ⅙, ⅛, ⅙, ⅛, or any other fractional sample resolution. Interpolation between samples at integer positions may be used to generate a reference block and its corresponding samples at fractional positions, for example, if the motion vector points to a non-integer sample value in the reference picture. The interpolation may be performed by a filter with two or more taps.
[0079] The encoder may determine a difference (e.g., a corresponding sample-by-sample difference) between the reference block 1304 and the current block 1300. The encoder may determine the difference between the reference block 1304 and the current block 1300, for example, based on / after the reference block 1304 was determined and / or generated using inter-prediction with respect to the current block 1300. The difference may be referred to as a prediction error and / or a residual. The encoder may store and / or transmit (e.g., a signal) within / via a bitstream, the prediction error and / or associated motion information. The prediction error and / or associated motion information may be used for decoding (e.g., decoding the current block 1300) and / or other forms of consumption. The motion information may include a motion vector 1312 and / or a reference indicator / index. The reference indicator may indicate a reference picture 1306 in a reference picture list. The motion information may include an indication of the motion vector 1312 and / or an indication of the reference index. The reference index may indicate a reference picture 1306 in a reference picture list. A decoder may decode the current block 1300 by determining and / or generating a reference block 1304. The decoder may determine and / or generate the reference block 1304, for example, based on motion information. The reference block 1304 may correspond to / form (e.g., take into account) a prediction of the current block 1300. The decoder may decode the current block 1300 based on combining the prediction with a prediction error.
[0080] As shown in Figure 13A, inter-prediction may be performed using one reference picture 1306 as the source of prediction for a current block 1300. Inter-prediction based on predicting a current block using a single picture may be referred to as uni-prediction.
[0081] 14 shows an example of bi-prediction. Prediction for a current block 1400 may be based on two pictures using bi-prediction. Bi-prediction may be useful, for example, when a video sequence includes fast motion, camera panning, zooming, and / or scene changes. Bi-prediction may be useful for imaging a fade-out from one scene or a fade-out from one scene to another, where two pictures may be effectively displayed simultaneously at different levels of intensity.
[0082] One or both of uni-prediction and bi-prediction may be available / used to perform inter-prediction (e.g., an encoder and / or a decoder). Performing a particular type of inter-prediction (e.g., uni-prediction and / or bi-prediction) may depend on the slice type of the current block 1400. For example, for a P slice, only uni-prediction may be available / used to perform inter-prediction. For a B slice, either uni-prediction or bi-prediction may be used to perform inter-prediction. The encoder may determine and / or generate a reference block for predicting the current block 1400, for example, from reference picture list 0 if the encoder uses uni-prediction. The encoder may determine and / or generate a first reference block for predicting the current block 1400 from reference picture list 0, and may determine and / or generate a second reference block for predicting the current block 1400, for example, from reference picture list 1 if the encoder uses bi-prediction.
[0083] FIG. 14 shows an example of inter-prediction performed using bi-prediction. Two reference blocks 1402 and 1404 may be used to predict a current block 1400. Reference block 1402 may be in one reference picture of reference picture list 0 or reference picture list 1. Reference block 1404 may be in another reference picture of reference picture list 0 or reference picture list 1. As shown in FIG. 14, reference block 1402 may be in a first picture preceding (e.g., temporally) the current picture of current block 1400, and reference block 1402 may be in a second picture following (e.g., temporally) the current picture of current block 1400. The first picture may precede the current picture in terms of a picture order count (POC). The second picture may follow the current picture in terms of a POC. The reference picture may precede or follow the current picture in terms of a POC. The POC may indicate the order in which pictures are output (e.g., from a decoded picture buffer). The POC may be / indicate the order in which pictures are generally intended to be displayed. The output picture may not necessarily be displayed, but may be subjected to different processing and / or consumption (e.g., transcoding). Two reference blocks determined and / or generated using / for bi-prediction may correspond to (e.g., be included in) the same reference picture. A reference picture may be included in both Reference Picture List 0 and Reference Picture List 1, for example, if the two reference blocks correspond to the same reference picture.
[0084] Configurable weight and / or offset values may be applied to one or more inter-prediction reference blocks. The encoder may enable the use of weighted prediction using a flag in a picture parameter set (PPS). The encoder may transmit / signal the weighting and / or offset parameters in the slice segment header of the current block 1400. Different weight and / or offset parameters may be signaled for the luma and chroma components.
[0085] The encoder may use inter-prediction to determine and / or generate reference blocks 1402 and 1404 for the current block 1400. The encoder may determine a difference between the current block 1400 and each of the reference blocks 1402 and 1404. The difference may be referred to as a prediction error or residual. The encoder may store and / or transmit / signal the prediction errors and their respective associated motion information within / via a bitstream. The prediction errors and their respective associated motion information may be used for decoding or other forms of consumption. The motion information for the reference block 1402 may include a motion vector 1406 and a reference indicator / index. The reference indicator may indicate a reference picture for the reference block 1402 in a reference picture list. The motion information for the reference block 1402 may include an indication of the motion vector 1406 and / or an indication of the reference index. The reference index may indicate a reference picture for the reference block 1402 in a reference picture list.
[0086] The motion information for the reference block 1404 may include a motion vector 1408 and / or a reference index / indicator. The reference indicator may indicate a reference picture for the reference block 1408 in a reference picture list. The motion information for the reference block 1404 may include an indication of the motion vector 1408 and / or an indication of a reference index. The reference index may indicate a reference picture for the reference block 1404 in a reference picture list.
[0087] A decoder may decode the current block 1400 by determining and / or generating reference blocks 1402 and 1404. The decoder may determine and / or generate reference blocks 1402 and 1404, for example, based on respective motion information for reference blocks 1402 and 1404. Reference blocks 1402 and 1404 may correspond to / form (e.g., take into account) a prediction of the current block 1400. The decoder may decode the current block based on combining the prediction with a prediction error.
[0088] The motion information may be predictively coded, for example, before being stored and / or transmitted / signaled in / via a bitstream (e.g., HEVC, VVC, and / or other video coding standards / formats / protocols). The motion information for a current block may be predictively coded based on the motion information of one or more blocks neighboring the current block. The motion information of neighboring blocks may often be correlated with the motion information of the current block because the motion of an object represented in the current block is often the same as (or similar to) the motion of an object in the neighboring block. Motion information prediction techniques may include advanced motion vector prediction (AMVP) and inter-prediction block merging.
[0089] An encoder (e.g., the encoder 200 shown in FIG. 2) may encode a motion vector. The encoder may encode the motion vector (e.g., using AMVP) as the difference between the motion vector of the current block being encoded and a motion vector predictor (MVP). The encoder may determine / select an MVP from a list of candidate MVPs. The candidate MVP may be / correspond to previously decoded motion vectors of neighboring blocks of the current picture of the current block or blocks collocated or near the current block in other reference pictures. The encoder and / or decoder may generate and / or determine the list of candidate MVPs.
[0090] The encoder may determine / select an MVP from a list of candidate MVPs. The encoder may transmit / signal an indication of the selected MVP and the motion vector difference (MVD) in / via the bitstream. The encoder may indicate the selected MVP in the bitstream using an index / indicator. The index may indicate the selected MVP in the list of candidate MVPs. The MVD may be determined / calculated based on the difference between the motion vector of the current block and the selected MVP. For example, the position (e.g., horizontal component (MVD)) relative to the position of the current block being coded may be used. x ) and vertical component (MV y For a motion vector denoted by (V), the MVD can be represented by two components: MVD x and MVD y .MVD x and MVD y is determined / calculated as follows:
number
number
[0091] A list of candidate MVPs for AMVP (e.g., HEVC, VVC, and / or one or more other communication protocols) may include two or more candidates (e.g., candidate A and candidate B). Candidates A and B may include up to two spatial candidate MVPs determined / derived from five spatial neighboring blocks of the current block being coded, one temporal candidate MVP determined / derived from two temporally co-located blocks (e.g., when both spatial candidate MVPs are unavailable or identical), or a zero motion vector candidate MVP (e.g., when one or both of the spatial candidate MVP or the temporal candidate MVP are unavailable). Other quantities of spatial candidate MVPs, spatial neighboring blocks, temporal candidate MVPs, and / or temporally co-located blocks may be used in the list of candidate MVPs.
[0092] Figure 15A shows spatial candidate neighboring blocks relative to a current block. For example, five (or any other number) spatial candidate neighboring blocks may be located relative to a current block 1500 to be coded. The five spatial candidate neighboring blocks may be A0, A1, B0, B1, and B2. Figure 15B shows temporally co-located blocks relative to the current block. For example, two (or any other number) temporally co-located blocks may be located relative to the current block 1500. The two temporally co-located blocks may be C0 and C1. The two temporally co-located blocks may be in one or more reference pictures that may differ from the current picture of the current block 1500.
[0093] An encoder (e.g., the encoder 200 shown in FIG. 2) may encode motion vectors using inter-prediction block merging (e.g., merge mode). The encoder (e.g., using merge mode) may use neighboring blocks (e.g., neighboring blocks A0, A1, B0, B1, and B2) for inter prediction of a current block. 2)The encoder (e.g., using merge mode) may reuse the same motion information of a temporally co-located block (e.g., one of the temporally co-located blocks C0 and C1) for inter-prediction of the current block. MVD does not need to be transmitted (e.g., indicated or signaled) for the current block because the same motion information as that of a neighboring block or temporally co-located block can be used for the current block (e.g., at the encoder and / or decoder). Because MVD does not need to be indicated for the current block, the signaling overhead for transmitting / signaling the motion information of the current block may be reduced. The encoder and / or decoder (e.g., both the encoder and the decoder) may generate a candidate list of motion information from the neighboring blocks or temporally co-located blocks of the current block (e.g., in a manner similar to AMVP). The encoder may decide to use (e.g., inherit) the motion information of one neighboring block or one temporally co-located block in the candidate list to predict the motion information of the current block to be encoded. The encoder may signal / transmit an indication of the motion information determined from the candidate list within / via the bitstream. For example, the encoder may signal / transmit / send an indicator / index. The index may indicate the determined motion information within the list of candidate motion information. The encoder may signal / transmit the index to indicate the determined motion information.
[0094] A list of candidate motion information for a merge mode (e.g., in HEVC, VVC, or any other coding format / standard / protocol) may include up to four (or any other number) spatial merge candidates derived / determined from five (or any other number) spatial neighboring blocks (e.g., as shown in Figure 15A), one (or any other number) temporal merge candidates derived from two (or any other number) temporally co-located blocks (e.g., as shown in Figure 15B), and / or additional merge candidates including both prediction candidates and zero motion vector candidates. The spatial neighboring blocks and temporally co-located blocks used for the merge mode may be the same as the spatial neighboring blocks and temporally co-located blocks used for AMVP.
[0095] Inter prediction may be performed in other ways and variants than those described herein. For example, motion information prediction techniques other than AMVP and merge mode may be used. While various examples herein correspond to inter prediction modes such as those used in HEVC and VVC, the methods, devices, and systems described herein may be applied / used for other inter prediction modes (e.g., as used in other video coding standards / formats such as VP8, VP9, AV1, etc.). History-based motion vector prediction (HMVP), combined intra / inter prediction mode (CIIP), and / or merge mode with motion vector difference (MMVD) (e.g., as described in VVC) may be performed / used and are within the scope of the present disclosure.
[0096] Block matching may be used (e.g., in inter prediction) to determine a reference block of a picture different from the current block being coded. Block matching may also be used to determine a reference block of the same picture as that of the current block being coded. When a reference block is determined using block matching in the same picture as the current block, it often cannot accurately predict the current block (e.g., in the case of video captured by a camera). Prediction accuracy for screen video content may not be similarly affected, for example, when a reference block in the same picture as the current block is used for coding. Screen content video may include, for example, computer-generated text, graphics, animation, etc. Screen video content may (e.g., often does) include repetitive patterns (e.g., repetitive patterns of text and graphics) within the same picture. Using a reference block (e.g., determined using block matching) in the same picture as the current block being coded may provide efficient compression for screen content video.
[0097] Prediction techniques may be used (e.g., in HEVC, VVC, and / or any other coding standard / format / protocol) to exploit correlation between blocks of samples within the same picture (e.g., of screen content video). Prediction techniques may be referred to as intra block copy (IBC) or current picture reference (CPR). The encoder may apply / use a block matching technique (e.g., similar to inter prediction) to determine a displacement vector (e.g., block vector (BV)). The BV may indicate the relative position of a reference block that best matches the current block from the position of the current block (e.g., according to intra block compensated prediction). For example, the relative position of the reference block may be the relative position of the upper left corner (or any other point / sample) of the reference block. The BV may indicate the relative displacement from the current block to the reference block that best matches the current block. The encoder may determine the best matching reference block from the blocks tested during the search process (e.g., in a manner similar to that used for inter prediction). The encoder may determine that the reference block is the best matching reference block based on one or more cost criteria. The one or more cost criteria may include a rate-distortion criterion (e.g., a Lagrangian rate-distortion cost). The one or more cost criteria may be based, for example, on one or more differences (e.g., differences determined based on SSD, SAD, SATD, and / or a hash function) between predicted samples of the reference block and original samples of the current block. The reference block may correspond to / include a previously decoded block of samples of the current picture. The reference block may include a decoded block of samples of the current picture before being processed by an in-loop filtering operation (e.g., deblocking and / or SAW filtering).
[0098] Figure 16 shows an example of an IBC for coding. The exemplary IBC shown in Figure 16 may correspond to screen content. The rectangular portion / section with the arrow starting at their boundary may be the current block to be coded. The rectangular portion / section to which the arrow points may be a reference block for predicting the current block.
[0099] A reference block may be determined and / or generated for the current block for IBC. The encoder may determine a difference (e.g., corresponding sample-by-sample difference) between the reference block and the current block. The difference may be referred to as a prediction error or residual. The encoder may store and / or transmit / signal the prediction error and / or associated prediction information within / via a bitstream. The prediction error and / or associated prediction information may be used for decoding and / or other forms of consumption. The prediction information may include a BV. The prediction information may include an indication of the BV. A decoder (e.g., decoder 300 shown in FIG. 3) may decode the current block by determining and / or generating a reference block. The decoder may determine and / or generate the current block, for example, based on the prediction information (e.g., BV). The reference block may correspond to / form (e.g., take into account) a prediction of the current block. The decoder may decode the current block by combining the prediction with the prediction error.
[0100] The BVs may be predictively encoded (e.g., in HEVC, VVC, and / or any other coding standard / format / protocol) before being stored and / or transmitted / signaled in / via a bitstream. The BVs for a current block may be predictively encoded based on BV blocks neighboring the current block. For example, the encoder may predictively encode the BVs using merge mode (e.g., in a manner similar to that described herein for inter prediction), AMVP (e.g., as described herein for inter prediction), or an AMVP-like technique. The AMVP-like technique may be BV prediction and differential coding (or AMVP for IBC).
[0101] An encoder that performs BV prediction and encoding (e.g., the encoder 200 shown in FIG. 2) may encode the BV as the difference between the BV of the current block being encoded and a BV predictor (BVP). The encoder may select / determine a BVP from a list of candidate BVPs. The candidate BVP may include / correspond to previously decoded BVs of blocks neighboring the current block in the current picture. The encoder and / or decoder may generate or determine the list of candidate BVPs.
[0102] The encoder may transmit / signal an indication of the selected BVP and BV difference (BVD) in / via the bitstream. The encoder may indicate the selected BVP in the bitstream using an index / indicator. The index may indicate the selected BVP in a list of candidate BVPs. The BVD may be determined / calculated based on the difference between the BV of the current block and the selected BVP. For example, the horizontal component (BV) relative to the position of the current block being coded may be used to determine the difference between the BV of the current block and the selected BVP. x ) and vertical component (BV y ), the BVD can be represented by the following two components: BVD x and BVD y BVD x and BVD yis determined / calculated as follows:
number
number
[0103] The same BV as the neighboring block may be used for the current block (e.g., in merge mode), and there is no need to separately signal / transmit the BVD for the current block. The BVP (in the candidate BVP) that may correspond to the decoded BV of the neighboring block may itself be used as the BV of the current block. Not transmitting the BVD may reduce signaling overhead.
[0104] A list of candidate BVPs (e.g., in HEVC, VVC, and / or any other coding standard / format / protocol) may include two (or more) candidates. The candidates may include candidates A and B. Candidates A and B may include up to two (or any other number) spatial candidate BVPs determined / derived from five (or any other number) spatial neighboring blocks of the current block to be coded, and / or one or more of the last two (or any other number) coded BVs (e.g., when spatial neighboring candidates are unavailable). Spatial neighboring candidates may not be available, for example, when neighboring blocks are coded using intra prediction or inter prediction. The positions of spatial candidate neighboring blocks relative to a current block coded using IBC may be illustrated in a manner similar to the spatial candidate neighboring blocks used to code motion vectors in inter prediction (e.g., as shown in FIG. 15A). For example, the five spatial candidate neighboring blocks of IBC may be denoted as A0, A1, B0, B1, and B2, respectively.
[0105] An encoder such as the encoder 200 shown in FIG. 2 may code the BV according to a merge mode. Using the merge mode, the encoder can reuse the same BV of a neighboring block or another block for IBC prediction of the current block. The BVD does not need to be signaled because the BV of the neighboring block (or another block) may be used as the BV of the current block and / or may be directly indicated as a BVP present in the list of candidate BVPs. Not signaling the BVD may reduce the signaling overhead for signaling the BV of the current block.
[0106] The encoder and / or decoder can generate a candidate list of BVPs for the current block from neighboring blocks or other blocks (e.g., in a manner similar to BV prediction and differential coding, or AMVP in IBC). The encoder can determine to use one of the BVPs in the candidate list as the BV for the current block being coded. The encoder can transmit an indication of the BVP determined from the list of candidate BVPs in the bitstream. For example, the encoder can signal an indicator / index that references (e.g., points to) the list of candidate BVPs to indicate the determined BV. The decoder can generate (e.g., determine or construct) the list of candidate BVPs in the same manner as a merge-mode encoder. The BV can be indicated in the bitstream to the decoder in the form of an index that indicates a BVP in the list of candidate BVPs. The decoder can decode the current block, for example, by determining and / or generating a reference block using the determined BV. The reference block may correspond to a prediction of the current block. The decoder can decode the current block by combining the prediction and prediction error using the determined BV.
[0107] The list of candidate BVPs for a merge mode (e.g., HEVC, VC, and / or any other coding standard / format / protocol) may include up to four (or any other quantity) spatial merge candidates. The spatial merge candidates may be derived from the five (or any other quantity) spatial neighboring blocks used in the merge mode, or AMVP and / or one or more additional history-based BVs for IBC.
[0108] The list of candidate BVPs (e.g., when generated by the encoder and / or decoder for AMVP, merge mode, or any other operating mode) may, at least in some circumstances, not include a sufficient number of candidate BVPs. For example, an insufficient number of candidate BVPs may be added to the list of candidate BVPs or otherwise made available based on one or more sources (e.g., BV information of neighboring blocks and / or history-based BVs). Candidate BVPs may not be available from one or more sources, for example, because neighboring blocks and / or other blocks may be coded using intra-prediction or inter-prediction. The encoder and decoder may pad the list of candidate BVPs with one or more zero candidate BVPs (e.g., if the number of candidate BVPs is insufficient to fill the list). A zero candidate BVP may be a BVP whose horizontal and vertical components are both equal to zero.
[0109] For a current block coded using IBC, the BV may be constrained to indicate the displacement from the position of the current block to the position of a reference block within the IBC reference region (e.g., as further illustrated with reference to Figures 17A-17C, 18A, and 18B). The IBC reference region may include reference blocks that have been previously coded / decoded and are therefore readily available to the encoder / decoder hardware for predicting the current block. The IBC reference region may generally be determined such that the BV within the IBC reference region indicates the displacement from the position of the current block to the position of a reference block that does not overlap, even partially, with the current block. A zero-candidate BVP (e.g., both horizontal and vertical components equal zero) indicates zero displacement from the current block in both the horizontal and vertical directions and refers to the position of a reference block that completely overlaps with the current block. Because the reference block that overlaps with the current block has not, at least in part, been previously coded or decoded (and is therefore unavailable to the encoder or decoder hardware), the zero-candidate BVP may not provide a good prediction of the BV for a current block coded or decoded using IBC. Inaccurate prediction of the BV for the current block may require a larger amount of bits to signal / indicate the BVD between the BV and the BVP. A zero-candidate BVP cannot be used as a BV for merge mode operation because it cannot indicate the displacement from the position of the current block to the position of the reference block in the IBC reference region.
[0110] Various embodiments herein relate to determining one or more candidate BVPs. The one or more candidate BVPs may be used to pad the list of candidate BVPs. Determining the one or more candidate BVPs may be based on the IBC reference region of the current block. The candidate BVP (e.g., used for padding) may indicate a position within the IBC reference region of the current block. For example, the candidate BVP may indicate a displacement from the current block to the position of a reference block within the IBC reference region. One or more candidate BVPs may be added to the list of candidate BVPs. The list of candidate BVPs may be used to indicate, determine, and / or predict a BV for the current block. Adding (e.g., padding) one or more candidate BVPs to the list of candidate BVPs may enable more accurate BV prediction (e.g., AMVP for BV prediction and differential coding or IBC operation) and / or enable the use of one or more candidate BVPs (e.g., as BVs) in merge mode. More accurate BV prediction may reduce the signaling overhead required for BVD indication. Enabling the use of one or more candidate BVPs in merge mode may result in the availability of a wider range of candidate BVPs, which may result in more accurate prediction of the current block.
[0111] 17A-17C illustrate examples of candidate BVP determination. An encoder (e.g., the encoder 200 shown in FIG. 2) or a decoder (e.g., the decoder 300 shown in FIG. 3) uses IBC to encode or decode a current block 1700 in a CTU 1702. The encoder and decoder can encode or decode the current block 1700 using IBC as described herein. An encoder using IBC may search for a reference block in the current picture that is the same as that of the current block 1700. Only a portion of the current picture may be available for searching for the reference block. For example, only a portion of the current picture that was decoded before encoding the current block 1700 may be available for searching for the reference block (e.g., because it is stored in local memory on the same chip as the decoder). The portion of the current picture available for searching for the reference block may be an IBC reference region. Searching only a portion of the current picture that was decoded before encoding the current block 1700 may ensure that the encoding and decoding systems can produce identical results but may limit the IBC reference region.
[0112] Blocks may be scanned in a particular order. Blocks may be scanned from left to right and top to bottom using z-scan (e.g., in HEVC, VVC, and / or other coding standards / formats / protocols) to form a sequence order for encoding / decoding. CTUs to the left and above CTU 1702 and blocks to the left and above current block 1700 in CTU 1704 may form an exemplary IBC reference region 1706 for determining reference blocks for predicting current block 1700. Different sequence orders and / or picture partitioning methods for encoding / decoding may be used in other video encoders / decoders. Using a different sequence order and / or picture partitioning method may change the IBC reference region 1706 accordingly.
[0113] The IBC reference region 1706 may represent the location of a valid reference block (e.g., a reference block that has been previously decoded and is within the same CTU or video frame). The IBC reference region 1706 may represent the location of a block that can be used as a valid reference block. Blocks outside the IBC reference region 1706 and / or that overlap with the current block cannot be used as reference blocks. The IBC reference region 1706 (e.g., as shown shaded) may be defined / represented in the form of valid locations / positions of reference blocks that can be used for encoding / decoding / predicting the current block 1700. The location of a reference block may be defined as the location / position of the upper-left corner of the reference block. A reference block whose upper-left corner is below a first boundary (e.g., a horizontal boundary) and to the right of a second boundary (e.g., a vertical boundary) of the IBC reference region 1706 may be at least partially outside the IBC reference region 1706 and / or may coincide with (e.g., partially or completely overlap) the current block 1700. A reference block whose upper left corner is below a first boundary (e.g., a horizontal boundary) of the IBC reference region 1706 and to the right of a second boundary (e.g., a vertical boundary) may be considered to be outside the IBC reference region 1706. A reference block whose upper left corner is on (or above) the first boundary (e.g., a horizontal boundary) and / or on (or to the left of) the second boundary (e.g., a vertical boundary) of the IBC reference region 1706 may be considered to be located inside the IBC reference region 1706. The horizontal and vertical boundaries may be the boundaries of the IBC reference region 1706 that are closest to the current block 1700. The location of the reference block (e.g., the upper left corner of the reference block) may be defined relative to the current block 1700 using the BV.
[0114] One or more reference region constraints (e.g., in addition to the encoding / decoding sequence order) may be placed on the IBC reference region 1706. For example, the IBC reference region 1706 may be constrained based on slice boundaries, tile boundaries, wavefront parallel processing (WPP), and / or limited memory (e.g., at the encoder or decoder) for storing reference samples for predicting the current block 1700. Tiles may be used as part of a picture partitioning process to flexibly subdivide a picture into rectangular regions of CTUs such that coding dependencies between CTUs of different tiles are not allowed. WPP may similarly be used as part of a picture partitioning process to divide a picture into CTU rows. The partitioning into CTU rows may be such that dependencies between CTUs of different partitions are not allowed. The use of tiles or WPP may enable parallel processing of the picture partitioning. Due to limited memory for storing reference samples and / or one of the parallel processing approaches, one or more CTUs to the left and above the CTU 1702 cannot be part of the IBC reference region 1706.
[0115] The IBC reference region 1706 may be constrained so that any BV determined for encoding the current block 1700 based on IBC indicates a displacement from the position of the current block 1700 to the position of a reference block that does not overlap (even partially) with the current block 1700. The constraint that the reference block should not overlap (e.g., completely or partially) with the current block 1700 may result in an upside-down L-shaped gap between the current block 1700 and the IBC reference region 1706 (e.g., FIG. 17A). The dimensions of the L-shaped gap may be expressed as a function of the width (e.g., cbWidth) and height (e.g., cbHeight) of the current block. The L-shaped gap may have a width of (cbWidth-1) on the left side of the current block 1700 and a length of cbHeight-1 on the top side of the current block 1700.
[0116] The encoder may use / apply a block matching technique to determine the BV. The BV may indicate the relative displacement from the position of the current block 1700 to the position of a reference block within the IBC reference region 1706. The reference block may be a block that best matches the current block 1700 (e.g., according to intra-block compensated prediction). The IBC reference region 1706 may be a constraint (e.g., selected by the encoder) that can be applied to the BV. The BV is constrained by the IBC reference region 1706 and may indicate the displacement from the position of the current block 1700 to the position of the reference block within the IBC reference region 1706. The positions of both the current block 1700 and the reference block may be determined based on the positions of their respective top-left samples.
[0117] The encoder may determine a best-matching reference block from among the blocks tested during the search process (e.g., at a location within the IBC reference region 1706). The encoder may determine that a reference block may be the best-matching reference block based on one or more cost criteria, where the one or more cost criteria may include a rate-distortion criterion (e.g., a Lagrangian rate-distortion cost). The one or more cost criteria may be based, for example, on one or more differences (e.g., one or more of SSD, SAD, SATD, and / or differences determined based on a hash function) between predicted samples of the reference block and original samples of the current block 1700. The reference block may include decoded (and / or reconstructed) samples of the current picture before being processed by in-loop filtering operations (e.g., deblocking and / or SAW filtering).
[0118] The encoder may determine and / or use the difference (e.g., corresponding sample-by-sample difference) between the current block 1700 and the reference block. The difference may be referred to as a prediction error or residual. The encoder may store and / or transmit / signal the prediction error and associated prediction information for decoding in / via a bitstream.
[0119] The encoder and / or decoder may determine a list of candidate BVPs for predictively encoding the BV. The BV may indicate the displacement from the current block 1700 to a reference block. The reference block can be used to predict the current block 1700 according to IBC. The encoder and / or decoder may determine / construct a list of candidate BVPs from candidate BVPs derived from multiple sources. The candidate BVPs may be determined based on IBC information (e.g., BVs) of spatially neighboring blocks of the current block 1700, temporally coexisting blocks of the current block 1700, and history-based BVs. The encoder and / or decoder may determine a list of candidate BVPs for predictively encoding the BV based on AMVP in IBC or merge mode.
[0120] The list of candidate BVPs (e.g., when generated by the encoder and / or decoder for AMVP, merge mode, or any other operating mode) may, at least in some circumstances, not include a sufficient number of candidate BVPs. For example, an insufficient number of candidate BVPs may be added to or otherwise made available to the list of candidate BVPs based on one or more sources (e.g., based on BV information of spatially adjacent blocks, temporally coexisting blocks, and / or history-based BVs). Candidate BVPs may not be available from one or more sources, for example, because adjacent blocks and / or other blocks may be coded using intra-prediction or inter-prediction. The encoder and decoder may pad the list of candidate BVPs with one or more zero candidate BVPs. A zero candidate BVP may be a BVP whose horizontal and vertical components (e.g., BVPx and BVPy) are both equal to zero.
[0121] Zero candidate BVPs may not be ideal for use as candidate BVPs because they do not indicate a displacement from the position of the current block 1700 to the position of a reference block within the IBC reference 1706 (e.g., making them inaccurate or inaccessible). A zero candidate BVP (e.g., both horizontal and vertical components equal zero) indicates zero displacement in both the horizontal and vertical directions from the current block 1700 and points to a reference block position that completely overlaps with the current block 1700. A zero candidate BVP may not provide a good prediction of a BV for the current block 1700 (e.g., coded using IBC) because the reference block completely overlaps with the current block 1700. An inaccurate prediction of a BV for the current block may require a larger amount of bits to signal / indicate the BVD between the BV and BVP for the AMVP for IBC mode operation. A zero candidate BVP may not be used as a BV for merge mode operation because it cannot indicate a displacement from the position of the current block to the position of the reference block within the IBC reference region.
[0122] The encoder and / or decoder may determine one or more (e.g., additional) candidate BVPs, for example, based on / in response to the number / amount of candidate BVPs in the list of candidate BVPs being less than a given value (e.g., a threshold value). For example, the encoder and / or decoder may determine whether the list of candidate BVPs includes a threshold amount / number of candidate BVPs. The encoder and / or decoder may determine / generate one or more additional candidate BVPs, for example, based on / in response to determining that the amount / number of candidate BVPs in the list of candidate BVPs is less than a threshold amount / number of candidate BVPs (e.g., 2, 4, 6, etc.). The encoder and / or decoder may determine / generate one or more additional candidate BVPs based on the IBC reference region 1706 of the current block 1700. The encoder and / or decoder may determine / generate one or more additional candidate BVPs based on the IBC reference region 1706 such that the one or more additional candidate BVPs indicate a displacement from the position of the current block 1700 to the position of the reference block within the IBC reference region 1700. The positions of both the current block 1700 and the reference block may be determined based on the positions of their respective top-left samples. The encoder and / or decoder may determine one or more candidate BVPs based on / in response to, for example, the number / amount of non-zero candidate BVPs in the list of candidate BVPs being less than a given value (e.g., a threshold).
[0123] The encoder and / or decoder may generate at least one candidate BVP of one or more additional candidate BVPs that indicates a displacement from the current block 1700 to a boundary (e.g., a border) of the IBC reference region 1706. The encoder and / or decoder may generate at least one candidate BVP of one or more candidate BVPs that indicates a displacement from the current block 1700 to a non-boundary of the IBC reference region 1706. The position of the current block 1700 may be given by the position / coordinates of its top-left sample (cbX, cbY) relative to the origin (0,0) of the CTU coordinate system at the top-left corner of the CTU 1702 (e.g., relative to the origin (0,0) of the picture coordinate system at the top-left corner of the picture). The positive direction is to the right along the horizontal x-axis. As the value of x increases, the sample position may move further to the right in the positive horizontal direction. The positive direction is downward along the vertical y-axis. As the value of y increases, the sample position may move further downward in the positive vertical direction. The above CTU coordinate system is merely exemplary, and in other embodiments, different origins, axes, and / or direction protocols may be used.
[0124] The encoder and / or decoder may generate at least one candidate BVP 1708 of the one or more candidate BVPs to indicate horizontal and vertical displacements (e.g., from the position of the current block) of −cbWidth and 0, respectively. The encoder and / or decoder may generate at least one candidate BVP 1708 based on, for example, that the horizontal position (e.g., x-coordinate) of the left edge of the IBC reference region 1706 is less than or equal to cbX−cbWidth (e.g., cbX is the horizontal position of the current block 1700 and cbWidth is the width of the current block 1700). The left edge may be, for example, the left edge of the IBC reference region 1706 that is closest to the current block 1700 if the IBC reference region 1706 includes two or more left edges. The left edge of the IBC reference region 1706 may be the vertical edge of the IBC reference region 1706 that is positioned to the left of the current block 1700. 17A, the horizontal position of the left edge of the IBC reference region 1706 may be less than or equal to cbX-cbWidth. A candidate BVP 1708 may be generated and added to the list of candidate BVPs.
[0125] 17B and 17C show alternative IBC reference regions 1706. In FIG. 17B, the horizontal position of the left edge of the IBC reference region 1706 may be greater than or equal to cbX-cbWidth. In FIG. 17B, the horizontal position of the left edge of the IBC reference region 1706 may be greater than cbX-cbWidth and considered to be 0. A BVP 1708 may not be generated in the example shown in FIG. 17B, for example, based on the horizontal position of the left edge of the IBC reference region 1706 being greater than cbX-cbWidth. In FIG. 17C, the horizontal position of the left edge of the IBC reference region 1706 may be less than or equal to cbX-cbWidth. A BVP 1708 may be generated and added to the list of candidate BVPs in the example shown in FIG. 17C, for example, based on the horizontal position of the left edge of the IBC reference region 1706 being less than or equal to cbX-cbWidth.
[0126] The encoder and / or decoder may generate at least one candidate BVP 1710 of one or more candidate BVPs, as shown in FIG. 17B , to indicate horizontal and vertical displacements from the current block's position of 0 and −cbHeight, respectively. The encoder and / or decoder may generate at least one candidate BVP 1710 based on, for example, the vertical position (e.g., y coordinate) of the top edge of the IBC reference region 1706 being less than or equal to cbY−cbHeight (e.g., cbY is the vertical position of the current block 1700, and cbHeight is the height of the current block 1700). The top edge may be, for example, the top edge of the IBC reference region 1706 that is closest to the current block 1700 if the IBC reference region 1706 includes two or more top edges. The top edge of the IBC reference region 1706 may be the horizontal edge of the IBC reference region 1706 that is positioned above the current block 1700. 17A, the vertical position of the top edge of the IBC reference region 1706 may be less than or equal to cbY-cbHeight. A candidate BVP 1710 may be generated and added to the list of candidate BVPs.
[0127] In FIG. 17B , the vertical position of the top edge of the IBC reference region 1706 may be less than or equal to cbY-cbHeight. A BVP 1710 may be generated and added to a list of candidate BVPs, for example, based on the vertical position of the top edge of the IBC reference region 1706 being less than or equal to cbY-cbHeight. In FIG. 17C , the vertical position of the top edge of the IBC reference region 1706 may be greater than or equal to cbY-cbHeight. In FIG. 17C , the vertical position of the top edge of the IBC reference region 1706 may be considered to be 0, which is greater than cbY-cbHeight. A BVP 1710 may not be generated in the example shown in FIG. 17C , for example, based on the vertical position of the top edge of the IBC reference region 1706 being greater than cbY-cbHeight.
[0128] The encoder and / or decoder may generate at least one candidate BVP 1712 of one or more candidate BVPs to indicate the horizontal and vertical displacements of -cbWidth and -cbHeight, respectively, from the position of the current block 1700. The encoder and / or decoder may generate at least one candidate BVP 1712 to indicate the horizontal and vertical displacements of -cbWidth and -cbHeight from the position of the current block 1700, for example, based on the fact that the horizontal position (x coordinate) of the left edge of the IBC reference region 1706 is less than or equal to cbX-cbWidth and the vertical position (y coordinate) of the top edge of the IBC reference region 1706 is less than or equal to cbY-cbHeight. In FIG. 17A, the horizontal position (x coordinate) of the left edge of the IBC reference region 1706 may be less than or equal to cbX-cbWidth, and the vertical position (y coordinate) of the top edge of the IBC reference region 1706 may be less than or equal to cbY-cbHeight. A candidate BVP 1712 may be generated and added to the list of candidate BVPs. FIGS. 17B and 17C show an alternative IBC reference region 1706. In FIG. 17B, the vertical position (y coordinate) of the top edge of the IBC reference region 1706 may be less than or equal to cbY-cbHeight, but the horizontal position (x coordinate) of the left edge of the IBC reference region 1706 may be greater than cbX-cbWidth. In Figure 17C, the horizontal position (x coordinate) of the left edge of the IBC reference region 1706 may be less than or equal to cbX-cbWidth, but the vertical position (y coordinate) of the top edge of the IBC reference region 1706 may be greater than or equal to cbY-cbHeight. BVP 1712 is based on at least one of two conditions not being met in either Figures 17B and 17C.
[0129] The encoder and / or decoder may generate at least one candidate BVP 1714 of one or more candidate BVPs to indicate horizontal and vertical displacements of -cbX and -cbHeight, respectively, from the position of the current block 1700. The encoder and / or decoder may generate at least one candidate BVP 1714 to indicate horizontal and vertical displacements of -cbX and -cbHeight from the position of the current block 1700, for example, based on at least the vertical position (y coordinate) of the top edge of the IBC reference region 1706 being less than or equal to cbY-cbHeight. The BVP 1714 may be generated in the example of FIG. 17A, for example, based on the vertical position (y coordinate) of the top edge of the IBC reference region 1706 being less than or equal to cbY-cbHeight. Figures 17B and 17C show alternative IBC reference regions 1706. BVP 1714 may be generated and added to the list of candidate BVPs in the example of Figure 17B based on, for example, the vertical position (y coordinate) of the top edge of IBC reference region 1706 being less than or equal to cbY-cbHeight. BVP 1714 may not be generated in the example of Figure 17C based on, for example, the vertical position (y coordinate) of the top edge of IBC reference region 1706 being greater than cbY-cbHeight.
[0130] The encoder and / or decoder may generate at least one candidate BVP 1716 of one or more candidate BVPs to indicate horizontal and vertical displacements of -cbWidth and -cbY from the position of the current block, respectively. The encoder and / or decoder may generate at least one candidate BVP 1716 to indicate horizontal and vertical displacements of -cbWidth and -cbY from the position of the current block, for example, based on at least the horizontal position (x coordinate) of the left edge of the IBC reference region 1706 being less than or equal to cbX-cbWidth. In the example of FIG. 17A , the BVP 1716 may be generated, for example, based on the horizontal position (x coordinate) of the left edge of the IBC reference region 1706 being less than or equal to cbX-cbWidth. Figures 17B and 17C show alternative IBC reference regions 1706. 17B, BVP 1716 cannot be generated based on, for example, the horizontal position (x coordinate) of the left edge of IBC reference region 1706 being greater than cbX-cbWidth. BVP 1716 can be generated and added to the list of candidate BVPs based on, for example, the horizontal position (x coordinate) of the left edge of IBC reference region 1706 being less than or equal to cbX-cbWidth in the example of FIG. 17C.
[0131] The BVP candidates 1708-1716 may be added (e.g., incrementally) to the list of candidate BVPs, for example, until the list of candidate BVPs equals a given value / threshold (e.g., 2, 4, 6, etc.). The given value may indicate that the list of candidate BVPs is full. For example, the BVP candidates 1708-1716 may be checked sequentially for addition to the list of candidate BVPs until the list of candidate BVPs is full. The BVP candidates 1708-1716 may be checked in a different order for addition to the list of candidate BVPs. One or more of the BVP candidates 1708-1716 may be added to the list of candidate BVPs based on one or more conditions (e.g., as described herein) being true. The encoder and decoder may use the list of candidate BVPs to indicate, predict, and / or determine (e.g., at the encoder and / or decoder) the BVP to be used to encode the current block 1700, as described herein. The BVP candidates 1708-1716 may be added (eg, incrementally) to a list of candidate BVPs, for example, to replace one or more zero candidate BVPs.
[0132] 17A-C only show additional candidate BVPs for padding the list of candidate BVPs on the boundary (e.g., border) of the IBC reference region 1706, in other embodiments, one or more additional candidate BVPs may be used to pad the list of candidate BVPs. The one or more additional candidate BVPs may be (e.g., may indicate a location) within the IBC reference region 1706 (e.g., not on the boundary of the IBC reference region 1706). The additional candidate BVPs may be determined to be distributed between the edges of the IBC reference region 1706 or within two boundaries.
[0133] The IBC reference area 1706 shown in FIGS. 17A-17C is merely exemplary, and the IBC reference area may be different from the IBC reference area 1706. The methods, devices, and systems described herein with respect to FIGS. 17A-17C may be used / applied to an IBC reference area different from the IBC reference area 1706. For example, the IBC reference area 1706 may be replaced by an approximate IBC reference area. The approximate IBC reference area may completely encompass the true IBC reference area (i.e., the IBC reference area 1706). For example, the approximate IBC reference area may be used in the methods discussed with reference to FIGS. 17A-17C. The approximate IBC reference area may be rectangular in shape (or may correspond to any other shape) and may completely or partially encompass the IBC reference area 1706.
[0134] As shown in FIGS. 17A-17C, the IBC reference region 1706 may be replaced with an IBC reference region determined based on a different set of IBC reference region constraints. The IBC reference region 1706 may be limited not only to the reconstructed portion of the CTU 1702 (e.g., the portion that includes the current block) and / or one or more WPP partitions and / or tile partitions, but also to include the number / quantity of decoded or reconstructed samples that can be stored in a limited memory size (e.g., an IBC reference sample memory). The size of the IBC reference sample memory may be limited based on being implemented on-chip using an encoder or decoder. The IBC reference region may be increased in size by using a larger-sized IBC reference sample memory off-chip from the encoder or decoder. Using off-chip memory may require higher memory bandwidth requirements and increased latency in writing and / or reading samples (e.g., in the IBC reference region 1706) to and / or from the IBC reference sample memory.
[0135] An IBC reference region (e.g., IBC reference region 1706) may be constrained to the reconstructed portion of the current CTU and / or one or more reconstructed CTUs to the left of the current CTU. The one or more reconstructed CTUs to the left of the current CTU may not include a portion of the leftmost one or more reconstructed CTUs that is collocated with either the reconstructed portion of the current CTU or the virtual pipeline data unit (VPDU) in which the current block to be coded is located. Blocks of samples in different CTUs may be collocated based on having the same size and / or CTU offset. The CTU offset of a block may be the offset of the block's upper-left corner relative to the upper-left corner of the CTU in which the block is located.
[0136] The IBC reference area may not include the leftmost portion of a more reconstructed CTU that is collocated with the reconstructed portion of the current CTU. For example, the IBC reference area may not include the leftmost portion of a more reconstructed CTU that is collocated with the reconstructed portion of the current CTU. This is because the IBC reference sample memory may be implemented in a manner similar to a circular buffer. For example, the IBC reference sample memory may store reconstructed reference samples corresponding to one or more CTUs. For example, the reconstructed reference samples of the current CTU may replace the reconstructed reference samples stored in the IBC reference sample memory of the CTU located furthest to the left of the current CTU (e.g., in a picture or frame) when the IBC reference sample memory is filled. The samples of the CTU stored in the IBC reference sample memory located furthest to the left of the current CTU in a picture or frame may correspond to the oldest data in the IBC reference sample memory. As described herein, updating the samples in the IBC reference sample memory may allow at least a portion of the reconstructed reference samples from the leftmost CTU to remain stored in the IBC reference sample memory when processing the current CTU. The remaining reference samples of the leftmost CTU stored in the IBC reference sample memory may be used to predict the current block of the current CTU.
[0137] CTUs may or may not be processed at once. For example, in a typical hardware implementation of an encoder and / or decoder, CTUs may not be processed at once. CTUs may be divided into VPDUs for processing by pipeline stages. A VPDU may include a 4x4 sample region, a 16x16 sample region, a 32x32 sample region, a 64x64 sample region, a 128x128 sample region, or any other sample region size. The size of the VPDU may be determined based on the smaller of the maximum VPDU size (e.g., a 64x64 sample region) and the size (e.g., width or height) of the current CTU. The leftmost portion of one or more reconstructed CTUs collocated with the VPDU in which the block to be coded is located may further be excluded from the IBC reference region. Excluding this portion of the leftmost one or more reconstructed CTUs from the IBC reference region may enable a portion of the IBC reference sample memory (e.g., used to store reference samples reconstructed from this portion) to store only samples within the region of the current CTU that corresponds to the VPDU. Storing only samples within the region of the current CTU that corresponds to the VPDU may reduce and / or avoid certain complexities in encoder and / or decoder design.
[0138] The quantity / number of reconstructed CTUs to the left of the current CTU included in the IBC reference area can be determined based on the quantity / number of reconstructed reference samples that the IBC reference sample memory can store and / or the size of the CTUs in the current picture. The quantity / number of reconstructed CTUs to the left of the current CTU included in the IBC reference area can be determined based on the quantity / number of reconstructed reference samples that the IBC reference sample memory can store divided by the size of the CTUs in the current picture. For example, in an IBC reference sample memory that can store 128x128 reconstructed reference samples for the IBC reference area and a CTU size of 128x128 samples, the quantity / number of reconstructed CTUs to the left of the current CTU included in the IBC reference area is equal to (128x128) / (128x128), or 1 CTU. As another example, for a memory that may store 128x128 reconstructed reference samples for an IBC reference area and has a CTU size of 64x64 samples, the amount / number of CTUs to be reconstructed to the left of the current CTU contained in the IBC reference area may be equal to (128x128) / (64x64) or 4 CTUs.
[0139] FIG. 18A shows an exemplary IBC reference region. The IBC reference region 1800 may be determined based on the IBC reference sample memory size and the CTU size. The IBC reference sample memory size may be equal to the CTU size. The IBC reference sample memory size may be equal to 128×128 samples (or any other number of samples). The CTU size may be equal to 128×128 samples (or any other number of samples). The amount / number of reconstructed CTUs to the left of the current CTU 1804 to be included in the IBC reference region 1800 may be equal to (128×128) / (128×128), or 1 CTU. The IBC reference region 1800 may be a portion of the reconstruction region 1810. The samples in the IBC reference region 1800 may be a subset of the samples in the reconstruction region 1810. The samples of the current block 1802 to be coded may be a subset of the samples in the VPDU 1808.
[0140] FIG. 18A shows a current block 1802 within a current CTU 1804. The current block 1802 may be the first block encoded in the current CTU 1804 and may be encoded using IBC mode. As described with reference to FIGS. 17A-17B, a block may be encoded using IBC mode by determining the best-matching reference block within an IBC reference region 1800. The IBC reference region 1800 may be constrained to a single reconstructed CTU 1806 to the left of the current CTU 1804 that does not include the reconstructed portion of the current CTU 1804 and any portion of the reconstructed CTU 1806 that is co-located with either the reconstructed portion of the current CTU 1804 or the VPDU 1808 in which the current block 1802 is located. A CTU may be divided into multiple VPDUs. For example, the CTU of FIG. 18A may be divided into four VPDUs of size 64 by 64 samples. The IBC reference area 1800 of the current block 1802 may include a reconstructed area 1810 (shown with hatching) excluding the 64x64 area of the reconstructed CTU 1806 that is collocated with the VPDU 1808. The collocated area is marked with an X in FIG. 18A . The IBC reference area 1800 may include a different amount / number of CTUs to the left of the current CTU 1802. The amount of CTUs in the IBC reference area 1800 to the left of the current CTU 1802 may vary for different CTU sizes. For example, for a 64x64 CTU size, the IBC reference area 1800 may include 4 CTUs to the left of the current CTU 1802 based on the amount / number of reconstructed reference samples that the IBC reference sample memory can store divided by the size of the CTU in the current picture. For ease of illustration, FIG. 18A does not show the L-shaped area surrounding the current block as described with reference to FIG. 17 . Such L-shaped areas may be excluded from the IBC reference area 1800.
[0141] Figure 18B shows an example IBC reference region. Figure 18B shows an IBC reference region 1818 for a block coded after the current CTU 1804. The later-coded block may be the current block 1812. The current block 1812 may be coded using IBC mode. The current block 1812 may be coded by determining the best-matching reference block within the IBC reference region 1818. The IBC reference region 1818 for the current block 1812 may be constrained to a reconstructed portion of the current CTU 1804 and a reconstructed CTU 1806 that does not include a portion of the reconstructed CTU 1806 that is co-located with either the reconstructed portion of the current CTU 1804 or the VPDU 1814 in which the current block 1812 is located. The current CTU 1804 may be divided into four VPDUs of size 64x64 samples (e.g., as described with reference to Figure 18A). The IBC reference region 1818 for the current block 1812 may consist of the to-be-reconstructed region 1816 (shown hatched) excluding the portions of the CTU 1806 that are collocated with either the reconstructed portions of the current CTU 1804 and / or the VPDUs 1814. In FIG. 18B, each collocated region is indicated by an X. For ease of illustration, FIG. 18B does not show the L-shaped region surrounding the current block as described with respect to FIG. 17A. Such L-shaped regions may be excluded from the IBC reference region 1818.
[0142] 19 illustrates an exemplary method for determining candidate BVPs for inclusion in a list of candidate BVPs. The method 1900 illustrated in FIG. 19 may be performed by a device in a video encoding and / or decoding system. For example, the device may be an encoder and / or a decoder (e.g., the encoder 200 illustrated in FIG. 2 and / or the decoder 300 illustrated in FIG. 3).
[0143] The device may determine a list of candidate BVPs (e.g., step 1902). The list of candidate BVPs may be determined based on BV information, for example, of spatially adjacent blocks, temporally coexisting blocks, and / or history-based BVs. The device may determine (e.g., step 1904) whether the quantity / number of candidate BVPs in the list of candidate BVPs is less than a value (e.g., a threshold quantity / number, a predefined value).
[0144] The device may determine / generate a candidate BVP based on the IBC reference region of the current block, for example, based on / in response to the quantity / number of candidate BVPs being less than a value (e.g., step 1906). The candidate BVP may indicate a displacement from the current block to a boundary of the IBC reference region. The candidate BVP may indicate a displacement from the current block to a non-boundary of the IBC reference region (e.g., within the IBC reference region). The device may add the candidate BVP to a list of candidate BVPs (e.g., step 1908). The device may indicate, determine, and / or predict a BV (e.g., step 1910) based on the list of candidate BVPs. For example, the encoder may indicate a BVP for predicting a BV (e.g., an AMVP for IBC operation) based on the list of candidate BVPs. The encoder may indicate a BV (e.g., merge mode operation) by indicating a BVP in the list of candidate BVPs. The decoder may use the list candidate BVPs to determine a BV.
[0145] Various embodiments herein may be implemented in hardware (e.g., using analog and / or digital circuitry), software (e.g., through execution of stored / received instructions by one or more general-purpose or special-purpose processors), and / or a combination of hardware and software. Various embodiments herein may be implemented in an environment that includes a computer system or other processing system.
[0146] Figure 20 illustrates an example of a computer system that may use any of the embodiments described herein. For example, the exemplary computer system 2000 illustrated in Figure 20 may implement one or more of the methods described herein. For example, the various devices and / or systems described herein (e.g., Figures 1, 2, and 3) may be implemented in the form of one or more computer systems 2000. Furthermore, each of the steps of the flowcharts illustrated in this disclosure may be implemented on one or more computer systems 2000.
[0147] Computer system 2000 may include one or more processors, such as processor 2004. Processor 2004 may be a special purpose processor, a general purpose processor, a microprocessor, and / or a digital signal processor. Processor 2004 may be connected to a communications infrastructure 2002 (e.g., a bus or network). Computer system 2000 may also include a main memory 2006 (e.g., random access memory (RAM)) and / or a secondary memory 2008.
[0148] The secondary memory 2008 may include a hard disk drive 2010 and / or a removable storage drive 2012 (e.g., a magnetic tape drive, an optical disk drive, and / or the like). The removable storage drive 2012 may be read from and / or written to a removable storage unit 2016. The removable storage unit 2016 may include a magnetic tape, an optical disk, and / or the like. The removable storage unit 2016 may be read by and / or written to the removable storage drive 2012. The removable storage unit 2016 may include a computer-usable storage medium having computer software and / or data stored therein.
[0149] The secondary memory 2008 may include other similar means for allowing computer programs or other instructions to be loaded into the computer system 2000. Such means may include a removable storage unit 2018 and / or an interface 2014. Examples of such means may include a program cartridge and / or cartridge interface (such as a video game device), a removable memory chip (such as an erasable programmable read-only memory (EPROM) or a programmable read-only memory (PROM)), and associated sockets, thumb drives, and USB ports, and / or other removable storage units 2018 and interfaces 2014 that may allow software and / or data to be transferred from the removable storage unit 2018 to the computer system 2000.
[0150] Computer system 2000 may also include a communications interface 2020. Communications interface 2020 may allow software and data to be transferred between computer system 2000 and external devices. Examples of communications interface 2020 may include a modem, a network interface (e.g., an Ethernet card), a communications port, etc. The software and / or data transferred via communications interface 2020 may be in the form of signals, which may be electronic, electromagnetic, optical, and / or other signals that can be received by communications interface 2020. The signals may be provided to communications interface 2020 via communications path 2022. Communications path 2022 may transmit signals and may be implemented using wire or cable, fiber optics, a phone line, a cellular phone link, an RF link, and / or any other communications channel.
[0151] Computer program medium and / or computer-readable medium may be used to refer to tangible storage media, such as removable storage units 2016 and 2018, or a hard disk installed in hard disk drive 2010. A computer program product may be a means for providing software to computer system 2000. Computer programs (which may also be called computer control logic) may be stored in main memory 2006 and / or secondary memory 2008. Computer programs may be received via communications interface 2020. Such computer programs, when executed, may enable computer system 2000 to implement the present disclosure as discussed herein. In particular, computer programs, when executed, may enable processor 2004 to perform processes of the present disclosure, such as any of the methods described herein. Thus, such computer programs may represent controllers of computer system 2000.
[0152] 21 shows exemplary elements of a computing device that may be used to implement any of the various devices described herein, including, for example, a source device (e.g., 102), an encoder (e.g., 200), a destination device (e.g., 106), a decoder (e.g., 300), and / or any computing device described herein. The computing device 2130 may include one or more processors 2131 that may execute instructions stored on random access memory (RAM) 2133, removable media 2134 (such as a universal serial bus (USB) drive, a compact disc (CD) or digital versatile disc (DVD), or a floppy disk drive), or any other desired storage medium. Instructions may also be stored on an attached (or internal) hard drive 2135. The computing device 2130 may also include a security processor (not shown) that may execute instructions of one or more computer programs to monitor processes running on the processor 2131 and any process requesting access to any hardware and / or software components of the computing device 2130 (e.g., ROM 2132, RAM 2133, removable media 2134, hard drive 2135, device controllers 2137, network interface 2139, GPS 2141, Bluetooth interface 2142, WiFi interface 2143, etc.). The computing device 2130 may include one or more output devices such as a display 2136 (e.g., a screen, display device, monitor, television, etc.) and may include one or more output device controllers 2137, such as a video processor. There may also be one or more user input devices 2138, such as a remote control, keyboard, mouse, touch screen, microphone, etc. The computing device 2130 may also include one or more network interfaces, such as a network interface 2139, which may be a wired interface, a wireless interface, or a combination of the two.The network interface 2139 may provide an interface through which the computing device 2130 communicates with a network 2140 (e.g., a RAN, or any other network). The network interface 2139 may include a modem (e.g., a cable modem), and the external network 2140 may include a communications link, an external network, a home network, a provider's wireless, coaxial, fiber, or hybrid fiber / coaxial distribution system (e.g., a DOCSIS network), or any other desired network. Additionally, the computing device 2130 may include a location detection device such as a global positioning system (GPS) microprocessor 2141, which may be configured to receive and process global positioning signals and, with possible assistance from an external server and antenna, determine the geographic location of the computing device 2130.
[0153] While the example of FIG. 21 may be a hardware configuration, the components shown may be implemented as software. Changes may be made, as desired, to add, remove, combine, divide, etc., components of the computing device 2130. Furthermore, components may be implemented using basic computing devices and components, and the same components (e.g., processor 2131, ROM storage 2132, display 2136, etc.) may be used to implement any of the other computing devices and components described herein. For example, the various components described herein may be implemented using a computing device having components such as a processor that executes computer-executable instructions stored on a computer-readable medium, as shown in FIG. 21. Some or all of the entities described herein may be software-based and coexist on a common physical platform (e.g., a requesting entity may be a separate software process and program from a dependent entity, both of which may run as software on a common computing device).
[0154] Various features are highlighted below in a set of numbered clauses or paragraphs. These features are not to be construed as limiting the invention or inventive concept, but are provided merely as highlighting some of the features described herein, without implying the importance or relevance of any particular order of such features.
[0155] Article 1. The method includes, based on a determination that an amount of candidate block vector predictors (BVPs) in the list of candidate BVPs is less than a threshold, updating, by a computing device, the list of candidate BVPs with the candidate BVPs, wherein the candidate BVPs are based on an intra block copy (IBC) reference region of the current block.
[0156] Article 2. 10. The method of claim 1, further comprising performing at least one of encoding the current block or decoding the current block based on the updated list of candidate BVPs.
[0157] Article 3. 3. The method of any one of clauses 1 and 2, wherein encoding the current block includes encoding the current block based on a second candidate BVP in the updated list of candidate BVPs, and determining a prediction error between the current block and a reference block associated with the second candidate BVP.
[0158] Article 4. 4. The method of any one of clauses 1-3, further comprising transmitting a second candidate BVP and an indication of the prediction error.
[0159] Article 5. 5. The method of any one of clauses 1 to 4, wherein encoding the current block includes determining a block vector difference (BVD) between a block vector (BV) of the current block and a second candidate BVP, and the method further includes transmitting an indication of the BVD.
[0160] Article 6. The method of any one of clauses 1 to 5, further comprising receiving an indication of a second candidate BVP in the updated list of candidate BVPs, and wherein decoding the current block comprises decoding the current block based on a reference block associated with the second candidate BVP.
[0161] Article 7. 7. The method of any one of clauses 1 to 6, further comprising receiving an indication of a prediction error between the reference block and the current block, and wherein decoding the current block comprises decoding the current block further based on the prediction error.
[0162] Article 8. 8. The method of any one of clauses 1 to 7, wherein the candidate BVP indicates a displacement from the current block to a boundary of the IBC reference region.
[0163] Article 9. 9. The method of any one of clauses 1 to 8, wherein the candidate BVP indicates a displacement from the current block to a position within the IBC reference region.
[0164] Article 10. 10. The method of any one of clauses 1 to 9, wherein the candidate BVP indicates a displacement from the current block to a position that is between two boundaries of the IBC reference region.
[0165] Article 11. 11. The method of any one of clauses 1 to 10, wherein the candidate BVP exhibits a horizontal displacement of -cbWidth and a vertical displacement of zero from the position of the current block based on the width of the current block being cbWidth and the horizontal distance of the vertical edge of the IBC reference region from the position of the current block being greater than or equal to the width of the current block.
[0166] Article 12. 12. The method of any one of clauses 1 to 11, wherein the candidate BVP exhibits a horizontal displacement of zero and a vertical displacement of -cbHeight from the position of the current block based on the height of the current block being cbHeight and the vertical distance of the horizontal edge of the IBC reference area from the position of the current block being greater than or equal to the height of the current block.
[0167] Article 13. 13. The method of any one of clauses 1 to 12, wherein the width of the current block is cbWidth, the height of the current block is cbHeight, and the candidate BVP indicates a horizontal displacement and a vertical displacement of -cbWidth and -cbHeight, respectively, from the position of the current block based on the fact that the horizontal distance of the vertical edge of the IBC reference area from the position of the current block is greater than or equal to the width of the current block, and the vertical distance of the horizontal edge of the IBC reference area from the position of the current block is greater than or equal to the height of the current block.
[0168] Article 14. 14. The method of any one of clauses 1 to 13, wherein the width of the current block is cbWidth, the height of the current block is cbHeight, the horizontal position of the current block is cbX, the vertical position of the current block is cbY, and the candidate BVP indicates a horizontal displacement and a vertical displacement of -cbX and -cbHeight, respectively, from the position of the current block based on the horizontal distance of the vertical edge of the IBC reference area from the position of the current block being less than the width of the current block and the vertical distance of the horizontal edge of the IBC reference area from the position of the current block being greater than or equal to the height of the current block.
[0169] Article 15. 15. The method of any one of clauses 1 to 14, wherein the width of the current block is cbWidth, the height of the current block is cbHeight, the horizontal position of the current block is cbX, the vertical position of the current block is cbY, and the candidate BVP indicates a horizontal displacement and a vertical displacement of -cbWidth and -cbY, respectively, from the position of the current block based on the horizontal distance of the vertical edge of the IBC reference area from the position of the current block being greater than or equal to the width of the current block and the vertical distance of the horizontal edge of the IBC reference area from the position of the current block being less than the height of the current block.
[0170] Article 16. 16. The method of any one of clauses 1 to 15, wherein the vertical edge or horizontal edge is the nearest vertical edge or nearest horizontal edge of the IBC reference area from the position of the current block.
[0171] Article 17. A computing device comprising one or more processors and a memory storing instructions that, when executed by the one or more processors, cause the computing device to perform the method of any one of clauses 1 to 16.
[0172] Article 18. 17. A system comprising: a first computing device configured to perform the method of any one of clauses 1 to 16; and a second computing device configured to receive an encoded current block.
[0173] Article 19. A computer readable medium storing instructions that, when executed, cause the performance of the method of any one of clauses 1 to 16.
[0174] Article 20. A method comprising, based on a determination that an amount of candidate block vector predictors (BVPs) in a list of candidate BVPs is less than a threshold, updating, by a computing device, a list of candidate BVPs with at least one candidate BVP, wherein the at least one candidate BVP is based on an intra block copy (IBC) reference region of a current block.
[0175] Article 21. 21. The method of clause 20, further comprising receiving an indication of the candidate BVP in the updated list of candidate BVPs.
[0176] Article 22. 22. The method of any one of clauses 20 and 21, further comprising decoding the current block based on the candidate BVP.
[0177] Article 23. 23. The method of any one of clauses 20 to 22, wherein the at least one candidate BVP includes a second candidate BVP indicating a displacement from the current block to a boundary of the IBC reference region.
[0178] Article 24. 24. The method of any one of clauses 20 to 23, wherein the at least one candidate BVP includes a second candidate BVP that indicates a displacement from the current block to a position within the IBC reference region.
[0179] Article 25. 25. The method of any one of clauses 20 to 24, wherein the at least one candidate BVP includes a second candidate BVP indicating a displacement from the current block to a position between two boundaries of the IBC reference region.
[0180] Article 26. 26. The method of any one of clauses 20 to 25, wherein updating the list of candidate BVPs includes replacing at least one second candidate BVP in the list of candidate BVPs with at least one candidate BVP.
[0181] Article 27. 27. The method of any one of clauses 20 to 26, further comprising receiving an indication of a prediction error of the current block, and wherein decoding the current block comprises decoding the current block further based on the prediction error.
[0182] Article 28. A computing device comprising one or more processors and a memory storing instructions that, when executed by the one or more processors, cause the computing device to perform the method of any one of clauses 20 to 27.
[0183] Article 29. A system comprising: a first computing device configured to perform the method of any one of clauses 20-27; and a second computing device configured to transmit an indication of a candidate BVP.
[0184] Article 30. A computer readable medium storing instructions that, when executed, cause the performance of the method of any one of clauses 20-27.
[0185] Article 31. A method comprising, based on a determination that an amount of candidate block vector predictors (BVPs) in a list of candidate BVPs is less than a threshold, updating, by a computing device, a list of candidate BVPs with at least one candidate BVP, wherein the at least one candidate BVP is based on an intra block copy (IBC) reference region of a current block.
[0186] Article 32. 32. The method of claim 31, further comprising: encoding the current block based on a candidate BVP in the updated list of candidate BVPs, wherein the encoding comprises determining a prediction error between the current block and a reference block associated with the candidate BVP.
[0187] Article 33. 33. The method of any one of clauses 31 and 32, further comprising transmitting an indication of the candidate BVP and the prediction error.
[0188] Article 34. 34. The method of any one of clauses 31 to 33, wherein the at least one candidate BVP includes a second candidate BVP indicating a displacement from the current block to a boundary of the IBC reference region.
[0189] Article 35. 35. The method of any one of clauses 31 to 34, wherein the at least one candidate BVP includes a second candidate BVP that indicates a displacement from the current block to a position within the IBC reference region.
[0190] Article 36. 36. The method of any one of clauses 31 to 35, wherein the at least one candidate BVP includes a second candidate BVP that indicates a displacement from the current block to a position between two boundaries of the IBC reference region.
[0191] Article 37. 37. The method of any one of clauses 31 to 36, wherein updating the list of candidate BVPs includes replacing at least one second candidate BVP in the list of candidate BVPs with the at least one candidate BVP.
[0192] Article 38. A computing device comprising one or more processors and a memory storing instructions that, when executed by the one or more processors, cause the computing device to perform the method of any one of clauses 31 to 37.
[0193] Article 39. 38. A system comprising: a first computing device configured to perform the method of any one of clauses 31-37; and a second computing device configured to receive an indication of a candidate BVP and a prediction error.
[0194] Article 40. A computer readable medium storing instructions that, when executed, cause the performance of the method of any one of clauses 31 to 37.
[0195] A computing device may perform a method including a plurality of operations. The computing device may update a list of candidate block vector predictors (BVPs) with the candidate BVP based on a determination that an amount of the candidate BVP in the list of candidate BVPs is less than a threshold. The candidate BVP may be based on an intra block copy (IBC) reference region of the current block. The computing device may perform at least one of encoding the current block or decoding the current block based on the updated list of candidate BVPs. The computing device may also perform one or more additional operations. Updating the list of candidate BVPs may include replacing a second candidate BVP in the list of candidate BVPs with the candidate BVP. Encoding the current block may include encoding the current block based on a second candidate BVP in the updated list of candidate BVPs and determining a prediction error between the current block and a reference block associated with the second candidate BVP. The computing device may transmit an indication of the second candidate BVP and the prediction error. Encoding the current block may include determining a block vector difference (BVD) between the block vector (BV) of the current block and the second candidate BVP. The computing device may send an indication of the BVD. The computing device may receive an indication of a second candidate BVP in the updated list of candidate BVPs. Decoding the current block may include decoding the current block based on a reference block associated with the second candidate BVP. The computing device may receive an indication of a prediction error between the reference block and the current block. Decoding the current block may include decoding the current block further based on the prediction error. The candidate BVP may indicate a displacement from the current block to a boundary of the IBC reference region. The candidate BVP may indicate a displacement from the current block to a position within the IBC reference region. The candidate BVP may indicate a displacement from the current block to a position between two boundaries of the IBC reference region. The width of the current block may be cbWidth, and the height of the current block may be cbHeight.Based on the horizontal distance of the vertical edge of the IBC reference area from the position of the current block being equal to or greater than the width of the current block, the candidate BVP may indicate a horizontal displacement of -cbWidth and a vertical displacement of zero from the position of the current block. Based on the vertical distance of the horizontal edge of the IBC reference area from the position of the current block being equal to or greater than the height of the current block, the candidate BVP may indicate a horizontal displacement of zero and a vertical displacement of -cbHeight from the position of the current block. Based on the horizontal distance of the vertical edge of the IBC reference area from the position of the current block being equal to or greater than the width of the current block and the vertical distance of the horizontal edge of the IBC reference area from the position of the current block being equal to or greater than the height of the current block, the candidate BVP may indicate horizontal and vertical displacements of -cbWidth and -cbHeight, respectively, from the position of the current block. The horizontal position of the current block may be cbX, and the vertical position of the current block may be cbY. The candidate BVP indicates horizontal and vertical displacements, -cbX and -cbHeight, respectively, from the position of the current block based on the horizontal distance of the vertical edge of the IBC reference area from the position of the current block being less than the width of the current block and the vertical distance of the horizontal edge of the IBC reference area from the position of the current block being greater than or equal to the height of the current block. The candidate BVP may indicate horizontal and vertical displacements, -cbWidth and -cbY, respectively, from the position of the current block based on the horizontal distance of the vertical edge of the IBC reference area from the position of the current block being greater than or equal to the width of the current block and the vertical distance of the horizontal edge of the IBC reference area from the position of the current block being less than the height of the current block. The vertical or horizontal edge may be the nearest vertical edge or nearest horizontal edge of the IBC reference area from the position of the current block. The computing device may include one or more processors and memory storing instructions that, when executed by the one or more processors, cause the computing device to perform the described methods, additional operations, and / or include additional elements.The system may include a first computing device configured to perform the described methods, additional operations, and / or include additional elements, and a second computing device configured to receive the encoded current block. A computer-readable medium may store instructions that, when executed, cause the performance of the described methods, additional operations, and / or include additional elements.
[0196] A computing device may perform a method including a plurality of operations. Based on a determination that an amount of candidate block vector predictors (BVPs) in the list of candidate BVPs is less than a threshold, the computing device may update the list of candidate BVPs with at least one candidate BVP. The at least one candidate BVP may be based on an intra block copy (IBC) reference region of the current block. The computing device may receive an indication of the candidate BVPs in the updated list of candidate BVPs. The computing device may decode the current block based on the candidate BVPs. The computing device may also perform one or more additional operations. The at least one candidate BVP may include a second candidate BVP indicating a displacement from the current block to a boundary of the IBC reference region. The at least one candidate BVP may include a second candidate BVP indicating a displacement from the current block to a position within the IBC reference region. The at least one candidate BVP may include a second candidate BVP indicating a displacement from the current block to a position between two boundaries of the IBC reference region. Updating the candidate BVP list may include replacing at least one second BVP in the candidate BVP list with at least one candidate BVP. The computing device may receive an indication of a prediction error for the current block, and decoding the current block includes decoding the current block further based on the prediction error. The computing device may include one or more processors and a memory storing instructions that, when executed by the one or more processors, cause the computing device to perform the described methods, additional operations, and / or include additional elements. A system may include a first computing device configured to perform the described methods, additional operations, and / or include additional elements, and a second computing device configured to send an indication of the candidate BVP. A computer-readable medium may store instructions that, when executed, cause performance of the described methods, additional operations, and / or include additional elements.
[0197] A computing device may perform a method including multiple operations. The computing device may update a list of candidate block vector predictors (BVPs) with at least one candidate BVP based on a determination that an amount of candidate block vector predictors (BVPs) in the list of candidate BVPs is less than a threshold. At least one candidate BVP may be based on an intra block copy (IBC) reference region of the current block. The computing device may encode the current block based on the candidate BVPs in the updated list of candidate BVPs. The encoding may include determining a prediction error between the reference block associated with the candidate BVP and the current block. The computing device may transmit an indication of the candidate BVP and the prediction error. The computing device may also perform one or more additional operations. The at least one candidate BVP may include a second candidate BVP indicating a displacement from the current block to a boundary of the IBC reference region. The at least one candidate BVP may include a second candidate BVP indicating a displacement from the current block to a position within the IBC reference region. The at least one candidate BVP may include a second candidate BVP indicating a displacement from the current block to a position between two boundaries of the IBC reference region. Updating the list of candidate BVPs may include replacing at least one second candidate BVP in the list of candidate BVPs with the at least one candidate BVP. The computing device may include one or more processors and a memory storing instructions that, when executed by the one or more processors, cause the computing device to perform the described methods, additional operations, and / or include additional elements. The system may include a first computing device configured to perform the described methods, additional operations, and / or include additional elements, and a second computing device configured to receive the candidate BVPs and an indication of the prediction error. A computer-readable medium may store instructions that, when executed, cause performance of the described methods, additional operations, and / or include additional elements.
[0198] One or more embodiments herein may be described as a process, which may be depicted as a flowchart, a flow diagram, a data flow diagram, a structure diagram, and / or a block diagram. A flowchart may describe operations as a sequential process, but one or more operations may be performed in parallel or simultaneously. The order of operations shown may be rearranged. A process may terminate when its operations are completed, but may have additional steps not shown in the figures. A process may correspond to a method, a function, a procedure, a subroutine, a subprogram, etc. When a process corresponds to a function, its termination may correspond to a return of the function to a calling function or main function.
[0199] The operations described herein may be implemented by hardware, software, firmware, middleware, microcode, hardware description languages, or any combination thereof. When implemented in software, firmware, middleware, or microcode, program code or code segments (e.g., computer program product) to perform the necessary tasks may be stored on a computer-readable or machine-readable medium. A processor may perform the necessary tasks. Features of the present disclosure may be implemented in hardware using, for example, hardware components such as application-specific integrated circuits (ASICs) and gate arrays. Implementation of hardware state machines to perform the functions described herein will also be apparent to those skilled in the art.
[0200] One or more features described herein may be implemented in computer-usable data and / or computer-executable instructions, such as one or more program modules, executed by one or more computers or other devices. Generally, program modules include routines, programs, objects, components, data structures, etc. that, when executed by a processor or data processing device within a computer, perform particular tasks or implement particular abstract data types. Computer-executable instructions may be stored on one or more computer-readable media, such as hard disks, optical disks, removable storage media, solid-state memory, RAM, etc. The functionality of the program modules may be combined or distributed as desired. Functionality may be implemented in whole or in part in firmware or hardware equivalents, such as integrated circuits, field programmable gate arrays (FPGAs), etc. Particular data structures may be used to more efficiently implement one or more features described herein, and such data structures are contemplated within the scope of the computer-executable instructions and computer-usable data described herein. Computer-readable media may include, but are not limited to, portable or non-portable storage devices, optical storage devices, and various other media capable of storing, containing, or carrying instructions and / or data. The computer-readable medium may include non-transitory media on which data may be stored and which do not include carrier waves and / or transitory electronic signals propagated via wireless or wired connections. Examples of non-transitory media include, but are not limited to, magnetic disks or tapes, optical storage media such as compact disks (CDs) or digital versatile disks (DVDs), flash memory, memory or memory devices. The computer-readable medium may store code and / or machine-executable instructions, which may represent procedures, functions, subprograms, programs, routines, subroutines, modules, software packages, classes, or any combination of instructions, data structures, or program statements.A code segment may be coupled to another code segment or a hardware circuit by passing and / or receiving information, data, arguments, parameters, or memory contents. Information, arguments, parameters, data, etc. may be passed, forwarded, or transmitted via any suitable means including memory sharing, message passing, token passing, network transmission, etc.
[0201] A non-transitory tangible computer-readable medium may include instructions executable by one or more processors configured to cause the operations described herein. An article of manufacture may include a non-transitory tangible computer-readable machine-accessible medium encoded with instructions for enabling programmable hardware to cause a device (e.g., an encoder, decoder, transmitter, receiver, etc.) to perform the operations described herein. One or more devices, such as an apparatus or in a system, may include one or more processors, memory, interfaces, and / or the like.
[0202] Communications described herein may be determined, generated, sent, and / or received using any amount of messages, information elements, fields, parameters, values, indications, information, bits, and / or the like. While one or more embodiments may be described herein using any of the terms / phrases message, information element, field, parameter, value, indication, information, bit, and / or the like, those skilled in the art will understand that such communications may be implemented using any one or more of these terms, including other such terms. For example, one or more parameters, fields, and / or information elements (IEs) may include one or more information objects, values, and / or any other information. An information object may include one or more other objects. At least some (or all) parameters, fields, IEs, and / or the like may be used and may be interchangeable depending on the context. Where meanings or definitions are given, such meanings or definitions are controlling.
[0203] One or more elements of the embodiments described herein may be implemented as a module. A module may be an element that performs a defined function and / or has a defined interface to other elements. A module may be implemented in hardware, software combined with hardware, firmware, wetware (e.g., hardware with biological components), or a combination thereof, all of which may be behaviorally equivalent. For example, a module may be implemented as a software routine written in a computer language configured to run on a hardware machine (e.g., C, C++, Fortran, Java, Basic, Matlab, etc.) or Simulink, Stateflow, GNU Octave, or LabVIEW MathScript. Additionally or alternatively, it may be possible to implement a module using physical hardware incorporating discrete or programmable analog, digital, and / or quantum hardware. Examples of programmable hardware include computers, microcontrollers, microprocessors, application-specific integrated circuits (ASICs), field-programmable gate arrays (FPGAs), and / or complex programmable logic devices (CPLDs). Computers, microcontrollers, and / or microprocessors may be programmed using languages such as assembly, C, C++, etc. FPGAs, ASICs, and CPLDs are often programmed using hardware description languages (HDLs) such as Verilog or Verilog Hardware Description Language (VHDL), which allow for the configuration of connections between the less functional internal hardware modules of the programmable device. The techniques described above can be used in combination to achieve a functionally modular result.
[0204] One or more of the operations described herein may be conditional. For example, one or more operations may be performed if certain criteria are met, such as by a computing device, a communications device, an encoder, a decoder, a network, a combination of the above, and / or the like. Exemplary criteria may be based on one or more conditions, such as device configuration, traffic load, initial system setup, packet size, traffic characteristics, a combination of the above, and the like. If one or more criteria are met, various embodiments may be used. It may be possible to implement any part of the embodiments described herein in any order and based on any conditions.
[0205] Although embodiments are described above, the features and / or steps of these embodiments may be combined, divided, omitted, rearranged, revised, and / or extended in any desired manner. Various changes, modifications, and improvements will readily occur to those skilled in the art. Such changes, modifications, and improvements, although not expressly described herein, are intended to be part of this specification and are intended to be within the spirit and scope of the description herein. Accordingly, the foregoing description is illustrative only and not limiting.
Claims
1. updating, by a computing device, a list of candidate block vector predictors (BVPs) with candidate BVPs based on a determination that an amount of candidate BVPs in the list of candidate BVPs is less than a threshold, the candidate BVPs being based on an intra block copy (IBC) reference region of a current block; Based on the updated list of candidate BVPs, encoding the current block, or and decrypting the current block.
2. The encoding of the current block comprises: encoding the current block based on a second candidate BVP in the updated list of candidate BVPs; and determining a prediction error between the current block and a reference block associated with the second candidate BVP.
3. The method of claim 2 , further comprising transmitting the second candidate BVP and an indication of the prediction error.
4. 4. The method of claim 2 or 3, wherein the encoding of the current block includes determining a block vector difference (BVD) between a block vector (BV) of the current block and the second candidate BVP, the method further including transmitting an indication of the BVD.
5. 2. The method of claim 1, further comprising receiving an indication of a second candidate BVP in the updated list of candidate BVPs, and wherein the decoding of the current block comprises decoding the current block based on a reference block associated with the second candidate BVP.
6. 6. The method of claim 5, further comprising receiving an indication of a prediction error between the reference block and the current block, and wherein the decoding of the current block comprises decoding the current block further based on the prediction error.
7. The method of any one of claims 1 to 6, wherein the candidate BVP indicates a displacement from the current block to a boundary of the IBC reference region.
8. The method of any one of claims 1 to 7, wherein the candidate BVP indicates a displacement from the current block to a position within the IBC reference region.
9. The method according to any one of claims 1 to 8, wherein the candidate BVP indicates a displacement from the current block to a position between two boundaries of the IBC reference region.
10. the width of the current block is cbWidth, and 10. The method of claim 1, wherein the candidate BVP indicates a horizontal displacement of -cbWidth and a vertical displacement of zero from the position of the current block based on the horizontal distance of a vertical edge of the IBC reference area from the position of the current block being greater than or equal to the width of the current block.
11. the height of the current block is cbHeight, 11. The method of claim 1, wherein the candidate BVP indicates a horizontal displacement of zero and a vertical displacement of -cbHeight from the position of the current block on the basis that a vertical distance of a horizontal edge of the IBC reference area from the position of the current block is greater than or equal to the height of the current block.
12. the width of the current block is cbWidth, the height of the current block is cbHeight, The candidate BVP is the horizontal distance of a vertical edge of the IBC reference region from the position of the current block is greater than or equal to the width of the current block; and 12. The method of claim 1, further comprising indicating -cbWidth and -cbHeight, respectively, horizontal and vertical displacements from the position of the current block, based on the vertical distance of a horizontal edge of the IBC reference area from the position of the current block being greater than or equal to the height of the current block.
13. 1. A computing device comprising: one or more processors; and a memory storing instructions which, when executed by said one or more processors, cause said computing device to perform a method according to any one of claims 1 to 12.
14. 1. A system comprising: A first computing device configured to perform the method of any one of claims 1 to 12; a second computing device configured to receive the encoded current block.
15. A computer readable medium storing instructions which, when executed, cause a method according to any one of claims 1 to 12 to be performed.
Citation Information
Patent Citations
Intra-block copying enhancements for HEVC in-range-extension (REXT)
US20150049813A1
Unified block vector prediction for intra picture block compensation
US20200288120A1