Reduced overhead block vector difference (BVD) display
By employing block vector predictors with null and non-null components to represent block vector differences, the signaling overhead in video encoding and decoding is reduced, improving efficiency and data size management.
Patent Information
- Application Number
- JP2025521249
- Authority / Receiving Office
- JP · JP
- Patent Type
- Applications
- Current Assignee / Owner
- Priority Date
- 2022-10-11
- Filing Date
- 2023-10-11
- Publication Date
- 2025-10-28
AI Technical Summary
Existing video encoding and decoding technologies face challenges in efficiently reducing the signaling overhead for block vector differences, which affects video coding efficiency and increases data size requirements for storage and transmission.
The use of block vector predictors (BVPs) that include a null component and a non-null component to represent block vector differences (BVDs), allowing the BVD to be signaled as the difference between these components, thereby reducing signaling overhead and improving coding efficiency.
This approach reduces the signaling overhead and enhances video coding efficiency by minimizing the data size required for video storage and transmission.
Smart Images

Figure 2025535787000001_ABST
Abstract
Description
[Technical Field]
[0001] This application claims the benefit of U.S. Provisional Application No. 63 / 415,175, filed October 11, 2022. The above-referenced application is incorporated herein by reference in its entirety. [Background technology]
[0002] Computing devices process video for storage, transmission, reception, and / or display, including encoding and / or 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 sequence of frames (pictures) that are displayed consecutively. Predictive coding and decoding may involve using information associated with a block in a frame to encode and / or decode other blocks in the same frame. For example, information associated with a block (e.g., the block's luma and / or chroma components) may be coded using previously decoded information associated with a reference block in the same frame. The 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. The BV may be indicated as a function of a block vector predictor (BVP) (e.g., block vector difference (BVD)) to reduce the signaling overhead required to directly indicate the BV. For a BV that includes a null component and a non-null component, the signaling overhead for indicating the BVD may be reduced by selecting a BVP that includes the null component and the non-null component. For example, the BVP may be selected such that the non-null component of the BVP may be in the same direction as the non-null component of the BV. Selecting a BVP that includes a null component and a non-null component may allow the representation of the BVD only as the difference between the non-null component of the BV and the BVP, thereby improving video coding efficiency and reducing signaling overhead.
[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] 1 illustrates an exemplary video encoding / decoding system. [Figure 2] 1 illustrates an exemplary encoder. [Figure 3] 1 illustrates an exemplary decoder. [Figure 4] 1 illustrates an exemplary quadtree division of a coding tree block (CTB). [Figure 5] 5 illustrates an exemplary quadtree corresponding to the exemplary quadtree division of the CTB of FIG. 4. [Figure 6] 1 illustrates exemplary binary and ternary tree partitioning. [Figure 7] An example of a combination of CTB quadtree and multitype tree partitioning is shown. [Figure 8] The tree corresponding to the combination of the CTB quadtree and multitype tree partitioning is shown in Fig. 7 . [Figure 9] 10 illustrates an exemplary set of reference samples determined for intra prediction of a current block. [Figure 10A] 1 illustrates exemplary intra-prediction modes. [Figure 10B] 1 illustrates exemplary intra-prediction modes. [Figure 11] The current block and the corresponding reference sample are shown. [Figure 12] 10 illustrates an exemplary application of intra-prediction modes for prediction of a current block. [Figure 13A] An example of inter prediction will be shown. [Figure 13B] 1 shows exemplary motion vectors. [Figure 14] An example of bi-prediction is shown. [Figure 15A] 1 illustrates exemplary spatial candidate neighboring blocks for a current block. [Figure 15B] An example of a block at the same temporal position as the current block is shown below. [Figure 16] 1 shows an example of intra block copy (IBC) for coding. [Figure 17A] An example of a BV with a null vertical component is shown below. [Figure 17B] 1 shows an example of a BV with a null horizontal component. [Figure 18A] 1 shows exemplary IBC reference regions. [Figure 18B] 1 shows exemplary IBC reference regions. [Figure 19A] An example of a BV with a null vertical component is shown below. [Figure 19B]1 shows an example of a BV with a null horizontal component. [Figure 20A] An example of a BV with a null vertical component is shown below. [Figure 20B] 1 shows an example of a BV with a null horizontal component. [Figure 21] A method for showing / representing a BV that includes a null component is shown. [Figure 22] 10 illustrates an exemplary method for determining a BV that includes a null component. [Figure 23] A method for showing / representing a BV that includes a null component is shown. [Figure 24] 10 illustrates a method for determining a BV that includes a null component. [Figure 25] 1 illustrates an exemplary computer system on which examples of the present disclosure may be implemented. [Figure 26] 1 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 examples. 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 including 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 the 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 a video source 112, an encoder 114, and / or an 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 does) 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., luma 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 may be possible based on different color schemes (e.g., red, green, blue (RGB) color schemes). A pixel in a color picture can point to / contain / associate all intensity values (e.g., luma component, chroma component) for a given location in the sample array used to represent the color picture. A monochrome picture may contain a single luma sample array. A pixel in a monochrome picture can point to / contain / associate an intensity value (e.g., luma component) at a given location in the single luma 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 may be predicted at a decoder and that does not need to be transmitted to the decoder for accurate decoding of the video sequence 108. 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] 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, for example, for temporal prediction. It may then predict the block to be coded using a block (e.g., a predictive block) determined during the search. 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, for example, for spatial prediction. The reconstructed samples may be coded and then decoded samples. The encoder 114 may determine a prediction error (e.g., a residual error) based on the difference between the block to be coded and the predictive block. The prediction error may represent non-redundant information that may be transmitted / communicated to a decoder for accurate decoding of the video sequence 108.
[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 using and based on the prediction type, motion vectors, and prediction modes. Encoder 114 may, for example, 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 transmit / 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 transmit / 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 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 106 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 predictive blocks for pictures of the video sequence 108 in a manner similar to the encoder 114, e.g., determine prediction errors for blocks to decode the video sequence 108. The decoder 120 may generate predictive blocks using / based on prediction types, prediction modes, and / or motion vectors received in the bitstream 110. The decoder 120 may determine prediction errors using transform coefficients received in the bitstream 110. The decoder 120 may determine prediction errors by weighting transform basis functions using the transform coefficients. The decoder 120 may combine the predictive blocks and prediction errors to decode the video sequence 108. The video sequence 108 at the destination device 106 may be, or may not necessarily be, the same video sequence as transmitted, such as the video sequence 108 transmitted by the source device 102. 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] Video display 122 may display video sequence 108 to a user. 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 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 a 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] Encoder 114 and / or decoder 120 may operate according to one or more proprietary or industry video coding standards. For example, encoder 114 and / or 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 video coding protocols.
[0023] FIG. 2 illustrates an exemplary encoder. The encoder 200 illustrated 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) 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 a picture that has been coded and then decoded. The block (e.g., a predictive block) determined during the search may then be used to predict the block to be coded 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, scene content between pictures of the video sequence 202 may be similar except for differences due to motion and / or affine transformation of screen content over time.
[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 be encoded and then decoded samples. 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 202.
[0027] The transform and quantization unit (TR+Q) 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 in 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 syntax-based 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 (iTR+iQ) 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 video coding protocol. For example, the encoder control unit may control one or more units of the encoder 200 so that the bitstream 204 may be 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 video coding 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 video sequence 202 into blocks, whether the block is inter predicted by inter prediction unit 206 or intra predicted by intra prediction unit 208; a motion vector for inter prediction of a block; an intra prediction mode among multiple intra prediction modes for intra prediction of a block; filtering performed by filter 220; and / or one or more transform types and / or quantization parameters applied by 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 code the block, the prediction information for the block (intra-prediction mode, motion vectors, etc., in the case of intra-prediction), and / or the 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 / or the 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 304 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: a motion vector for inter prediction of a block, an intra prediction mode among multiple intra prediction modes for intra prediction of a block, the 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, regardless of whether the block is inter predicted by inter prediction unit 316 or intra predicted by intra prediction unit 318. 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 an intra prediction unit 318 or an 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] Decoder 300 is merely an example, and decoders other than decoder 300 and / or modified versions of decoder 300 may implement the methods and processes described herein. For example, decoder 300 may have other components and / or arrangements. One or more of the components shown in Figure 3 may optionally be included in decoder 300 (e.g., entropy decoding unit 306 and / or 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 have a size of 2n×2n samples, where n may be specified by parameters of the coding system. For example, n may be 4, 5, 6, or any other value. A CTB may have any other size. A CTB may be further divided by a recursive quadtree division into coding blocks (CBs) of half-vertical and half-horizontal size. A CTB may form the root of the quadtree. A CB that is not further divided as part of the recursive quadtree division may be referred to as a leaf CB of the quadtree, or otherwise may be referred to as a non-leaf CB of the quadtree. A CB may have a minimum size specified by parameters of the coding system. For example, a CB may have a minimum size of 4×4, 8×8, 16×16, 32×32, 64×64 samples, or any other minimum size. The CB may be further divided into one or more prediction blocks (PBs) to perform inter-prediction and / or intra-prediction. A PB may be a rectangular block of samples to which the same prediction type / mode may be applied. For transforms, the CB may be divided into one or more transform blocks (TBs). A 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 example quadtree division of the CTB 400 in FIG. 4. As shown in FIGS. 4 and 5, the CTB 400 may initially 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 in 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., the ten CB leaf nodes of quadtree 500, as shown in FIG. 5). In other examples, 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). A picture 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 of 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) is sometimes referred to as a combination of quadtree and multi-type tree partitioning (quadtree + multi-type tree partitioning) because binary tree and / or ternary tree partitioning is added to quadtree 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 the 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. The CTB 700 is shown with the same quadtree partitioning as the CTB 400 described in FIG. 4, and a description of the quadtree partitioning of the CTB 700 is omitted. The quadtree partitioning of the CTB 700 is merely an example, and the CTB may be quadtree partitioned in a manner different from the CTB 700. Additional multitype tree partitioning of the 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 / or ternary tree partitionings.
[0047] Leaf CB5 in FIG. 4 may 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 FIGS. 7 and 8, respectively. Leaf CB8 in FIG. 4 may 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 FIGS. 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 FIGS. 7 and 8, respectively. Leaf CB9 in FIG. 4 may be split into three CBs based on a horizontal ternary tree partition. Two of the three CBs may be leaf CBs labeled 15 and 19 in FIGS. 7 and 8, respectively. The remaining non-leaf CBs can be split into three CBs based on another horizontal ternary tree division, and all three resulting CBs can be leaf CBs, labeled 16, 17, and 18 in Figures 7 and 8, respectively.
[0048] Overall, the CTB 700 may be divided into 20 leaf CBs, labeled 0 through 19, respectively. The 20 leaf CBs may correspond to 20 leaf nodes (e.g., the 20 leaf nodes of tree 800 shown in FIG. 8). The resulting combination of quadtree + multitype tree divisions of the 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 coding standard / format) 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 collocated blocks of samples from different sample arrays (e.g., luma and chroma sample arrays) that form a picture, as well as syntax elements and prediction data for the block. A coding tree unit (CTU) may include collocated CTBs of different sample arrays and may form a complete entity in the encoded bitstream. A coding unit (CU) may include collocated CBs of different sample arrays and syntax structures used to code samples of the CBs. A prediction unit (PU) may include collocated 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, and / 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 position of the sample 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 projection 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 of 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 2w samples (or any other number of samples) in a row adjacent to the top row of the current block 904, 2h 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 examples, 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 from 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 902 may enable both the encoder and the decoder to determine the same prediction result. 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, the 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 samples 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 reference samples for intra-prediction of a block. The reference samples 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 and (optionally) filtering the reference sample. 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] Figure 11 shows a current block and corresponding reference samples. In Figure 11, the current block 904 and reference samples 902 of Figure 9 are shown in a two-dimensional x,y plane, where the samples can be referenced as p[x][y]. To simplify the prediction process, the reference samples 902 can be arranged in two one-dimensional arrays. The reference samples 902 above the current block 904 can be arranged in a one-dimensional array ref1[x]. ref1[x]=p[-1+x][-1], (x≧0) (1)
[0062] The reference samples 902 to the left of the current block 904 may be arranged in a one-dimensional array ref2[y]. ref2[y]=p[-1][-1+y], (y≧0) (2)
[0063] The prediction process may include determining a predicted sample [x][y] (e.g., a predicted value) at a position p[x][y] within the current block 904. In the 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
[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] For example, in the case of an angular mode, the sample at position [x][y] within the current block 904 can be predicted by projecting position [x][y] onto a point on a horizontal or vertical line of samples that includes the reference sample 902 in a direction specified by the given angular mode. The sample at position [x][y] can be predicted by interpolating between the two nearest reference samples of 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 an exemplary application of intra prediction modes for predicting a current block. FIG. 12 specifically illustrates 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 φ with respect to the vertical axis. In the vertical prediction 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 illustrated in FIG. 12, the projection point on the horizon of the reference sample ref1[x] may not be located 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 / calculated as follows: p[x][y]=(1-i f )·ref1[x+i i +1]+i f ref1[x+i i +2](7)
[0067] i i can be the integer part of the horizontal displacement of the projected point relative to the position [x][y].i may be determined / calculated as a function of the tangent of the angle φ for vertical prediction mode 906 as follows:
number
[0068] i f may be the fractional part of the horizontal displacement of the projected point relative to the position [x][y] and may be determined / calculated as follows:
number
number
[0069] 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: p[x][y]=(1-i f )·ref2[y+i i +1]+i f ref2[y+i i +2](10)
[0070] i i can be the integer part of the vertical displacement of the projected point relative to the position [x][y]. i may be determined / calculated as a function of the tangent of the angle φ for the horizontal prediction mode as follows:
number
[0071] i f can be the fractional part of the vertical displacement of the projected point relative to the position [x][y]. f can be determined / calculated as follows:
number
number
[0072] The interpolation functions given by equations (7) and (10) may be implemented by an encoder and / or a decoder (e.g., encoder 200 of FIG. 2 and / or 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 i f 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 examples, different levels of sample precision may be used.
[0073] FIR filters may be used to predict chroma samples and / or luma samples. For example, a 2-tap interpolating FIR filter may be used to predict chroma samples, and the same and / or a different interpolation technique / filter may be used for luma samples. For example, a 4-tap FIR filter may be used to determine the predicted values for luma samples. The coefficients of the 4-tap FIR filter may be f 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 may be determined based on the projection displacement i fOne for each of the 32 possible values of the fractional part of i. In other examples, 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
[0074] A supplemental reference sample may be determined / constructed if the position [x][y] of a sample in the current block 904 to be predicted is projected to a negative x-coordinate. 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 at ref2[y] within the vertical line of reference samples 902 onto the horizontal line of reference samples 902 using the negative vertical prediction angle φ. Similarly, a supplemental reference sample may be determined / constructed if the position [x][y] of a sample in the current block 904 to be predicted is projected to a negative y-coordinate. 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 at ref1[x] on the horizontal line of reference samples 902 onto the vertical line of reference samples 902 using the negative horizontal prediction angle φ.
[0075] 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 determine / predict samples of the current block for each of the 35 intra prediction modes in HEVC and / 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 determine / select one of the intra prediction modes that results in the smallest prediction error for the current block. The encoder may determine / select an intra-prediction mode to encode 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 determined / selected intra-prediction mode and its corresponding prediction error (e.g., a residual) to the decoder for decoding the current block.
[0076] A 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 the intra-prediction mode (e.g., angular intra-prediction mode) from the encoder of the current block. The decoder may construct a set of reference samples and perform intra-prediction based on the intra-prediction mode indicated by the encoder for the current block in a similar manner (e.g., as described above for the encoder). The decoder may add the predicted value of the current block (e.g., determined based on the intra-prediction mode) to the residual of the current block to reconstruct the current block. It is not necessary for the decoder to receive an indication of the angular intra-prediction mode from the encoder of the current block. The decoder may determine the intra-prediction mode based on, for example, other criteria. Although various examples 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.).
[0077] Intra prediction may exploit 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 exploit 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 by 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. The 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.
[0078] 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 as a prediction error and / or a residual. The encoder may then store and / or transmit (e.g., signal) the bitstream, the prediction error, and / or other related prediction information. The prediction error and / or other related prediction information may be used for decoding and / or other forms of consumption. A 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.
[0079] 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., encoder 200, as 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., reference picture 1306) may be a pre-decoded picture available to the encoder and / or 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 and / or decoded. The encoder may search one or more reference pictures 1306 for a block that is similar (or substantially similar) to the current block 1300. The encoder may determine a best-matching block from the blocks tested during the search process. The best matching block may be reference block 1304. The encoder may determine that 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 differences (e.g., SSD, SAD, and / or SATD) between predicted samples of reference block 1304 and original samples of current block 1300.
[0080] The encoder may search for the reference block 1304 within a reference region (e.g., search range 1308). The reference region (e.g., search range 1308) may be disposed around a co-located position (or block) 1310 of the current block 1300 in the reference picture 1306. The co-located 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 (e.g., search range 1308) may extend at least partially outside the reference picture 1306. A fixed boundary extension may be used, for example, when the reference region (e.g., search range 1308) extends outside the reference picture 1306. Certain boundary extensions may be used so that values of samples in rows or columns of the reference picture 1306 that are adjacent to a portion of a reference region (e.g., search range 1308) that extends outside the reference picture 1306 may be used for sample locations outside the reference picture 1306. A subset of, or all of, the potential locations within the reference region (e.g., search range 1308) 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 (e.g., motion vectors 1312) relative to the current block 1300.
[0081] 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.
[0082] 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 x ) and vertical component (MV y ) A motion vector (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, the motion vector may have ½, ¼, ⅛, ⅙, ⅛, ⅛, ⅛, or any other fractional sample resolution. Interpolation between two samples at integer positions may be used to generate the reference block and its corresponding sample at the fractional position, 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.
[0083] 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 a prediction error and / or a residual. The encoder may store and / or transmit (e.g., a signal) within / via the 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 a prediction error and / or associated 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 the prediction error.
[0084] 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 prediction of a current block using a single picture may be referred to as uni-prediction.
[0085] Inter-prediction of the current block 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.
[0086] 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. 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 available / used to perform inter-prediction. The encoder may determine and / or generate a reference block for predicting the current block, e.g., 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 from reference picture list 0, and a second reference block for predicting the current block, e.g., from reference picture list 1 if the encoder uses bi-prediction.
[0087] Figure 14 shows an example of 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 Figure 14, reference block 1402 may be in a first picture that precedes (e.g., temporally) the current picture of current block 1400, and reference block 1404 may be in a second picture that follows (e.g., temporally) the current picture of current block 1400. The first picture may precede the current picture in terms of picture order count (POC). The second picture may follow the current picture in terms of POC. The reference pictures may precede or follow the current picture in terms of POC. The POC may be / 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. Pictures that are output may not necessarily be displayed, but may undergo 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.
[0088] 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 weight and / or offset parameters in the slice segment header of the current block 1400. Different weight and / or offset parameters may be transmitted / signaled for the luma and / or chroma components.
[0089] 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 a prediction error or a residual. The encoder may store and / or transmit / signal the prediction errors and / or their respective associated motion information in / via a bitstream. The prediction errors and their respective associated motion information may be used for decoding and / or other forms of consumption. The motion information for the reference block 1402 may include a motion vector 1406 and / or 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.
[0090] The motion information for the reference block 1404 may include a motion vector 1408 and / or a reference index / indicator. The reference indicator may point to 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 point to a reference picture for the reference block 1404 in a reference picture list.
[0091] A decoder may decode 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 a prediction error and / or associated motion information of each of reference blocks 1402 and 1404. Reference blocks 1402 and 1404 may correspond to / form (e.g., take into account) a prediction of current block 1400. The decoder may decode current block 1400 based on combining the prediction with the prediction error.
[0092] 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 standard / format / protocol). 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 / or inter-prediction block merging.
[0093] An encoder (e.g., encoder 200, as 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 correspond to / be a previously decoded motion vector of a neighboring block of the current picture of the current block and / or a block collocated or near the current block in another reference picture. The encoder and / or decoder may generate and / or determine the list of candidate MVPs.
[0094] 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 / or 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, a motion vector (e.g., horizontal component (MVD)) indicating the position relative to the position of the current block being coded may be used. x ) and vertical component (MV y), the MVD is divided into two components MVD x and MVD y It is expressed as MVD x and MVD y is determined / calculated as follows: MVD x =MV x -MVP x , (15) MVD y =MV y -MVP y (16)
[0095] MVD x and MVD y may represent the horizontal and vertical components of the MVD, respectively. x and MVP y may represent the horizontal and vertical components of the MVP, respectively. A decoder (e.g., decoder 300 as shown in FIG. 3) may decode a motion vector by adding the MVD to the MVP indicated in / via the bitstream. The decoder may decode a current block by determining and / or generating a reference block. The decoder may determine and / or generate a reference block, for example, based on a decoded motion vector. 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 a prediction error.
[0096] 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). Candidate A and candidate B may include up to two (or any other number) spatial candidate MVPs determined or derived from five (or any other number) of spatially neighboring blocks of the current block being coded, one (or any other number) temporal candidate MVPs determined or derived from two (or any other number) of temporally adjacent blocks (e.g., when both spatial candidate MVPs are unavailable or identical), and / 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, spatially neighboring blocks, temporal candidate MVPs, and / or temporally co-located blocks may be used in the list of candidate MVPs.
[0097] 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 being coded. The five spatial candidate neighboring blocks may be A0, A1, B0, B1, and B2. Figure 15B shows temporally co-located blocks relative to a 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 be different from the current picture of the current block 1500.
[0098] An encoder (e.g., encoder 200 as 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 reuse the same motion information of a neighboring block (e.g., one of neighboring blocks A0, A1, B0, B1, and B2) for inter-prediction of the current block. The encoder (e.g., using merge mode) may reuse the same motion information of a temporally co-located block (e.g., one of 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 the 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, signaling overhead for transmitting / signaling motion information of the current block may be reduced. The encoder and / or decoder may generate a candidate list of motion information from 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) motion information of one neighboring block or one temporally co-located block in the candidate list to predict motion information of the current block to be encoded. The encoder may signal / transmit an indication of the determined motion information from the candidate list in / via the bitstream. For example, the encoder may signal / transmit / send an indicator / index. The index may indicate the determined motion information in the list of candidate motion information. The encoder may signal / transmit an index to indicate the determined motion information.
[0099] 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 candidate 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 temporal co-located blocks used for merge mode may be the same as the spatial neighboring blocks and temporal co-located blocks used for AMVP.
[0100] 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 to 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.
[0101] Block matching may be used (e.g., in inter prediction) to determine a reference block in a picture different from that of the current block being coded. Block matching may be used to determine a reference block in the same picture as that of the current block being coded. A reference block determined using block matching in the same picture as that of the current block often may not accurately predict the current block (e.g., in the case of video captured by a camera). Prediction accuracy for screen content video may not be similarly affected, for example, when a reference block in the same picture as that of the current block is used for coding. Screen content video may include, for example, computer-generated text, graphics, animation, etc. Screen content video may (e.g., often does) include repetitive patterns (e.g., repetitive patterns of text and / or graphics) within the same picture. Using a reference block (e.g., determined using block matching) in the same picture as that of the current block being coded may provide efficient compression for screen content video.
[0102] 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). The prediction technique may be intra block copying (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 a 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 SAO filtering).
[0103] Figure 16 shows an example of an IBC for encoding. 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 encoded. The rectangular portion / section to which the arrow points may be a reference block for predicting the current block.
[0104] A reference block may be determined and / or generated for the current block for IBC. The encoder may determine a difference between the reference block and the current block (e.g., corresponding sample-by-sample difference). The difference may be a prediction error or a 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 as 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.
[0105] The BVs may be predictively coded (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 of a current block may be predictively coded based on the BVs of one or more blocks neighboring the current block. For example, an encoder may predictively code 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. An AMVP-like technique may be BV prediction and differential coding (or AMVP for IBC).
[0106] An encoder that performs BV prediction and encoding (e.g., encoder 200 as shown in FIG. 2) may encode the BV as the difference between the BV of the current block to be encoded and a block vector 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 neighboring blocks in the current picture of the current block. The encoder and / or decoder may generate or determine the list of candidate BVPs.
[0107] The encoder may transmit / signal an indication of the selected BVP and block vector 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 BV may be determined based on the position (e.g., horizontal component (BV)) relative to the position of the current block being coded. x ) and vertical component (BV y )), BVD is a two-component BVD x and BVD y It is expressed as BVD. x and BVD y is determined / calculated as follows: BVD x =BV x -BVP x , (17) BVD y =BV y -BVP y (18)
[0108] BVD x and BVD y may represent the horizontal and vertical components of the BVD, respectively. x and BVP ymay represent the horizontal and vertical components of the BVP, respectively. A decoder (e.g., decoder 300 as shown in FIG. 3) may decode the BV by appending the BVD to the BVP indicated in / via the bitstream. The decoder may decode the current block by determining and / or generating a reference block. The decoder may determine and / or generate a reference block, for example, based on the decoded 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.
[0109] The same BV as the neighboring block may be used for the current block, and there is no need to separately signal / transmit the BVD to the current block, such as in merge mode. 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.
[0110] 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.
[0111] 17A shows an example of a BV that includes a null vertical component. The BV may be associated with / correspond to a BVP and a BVD.
[0112] FIG. 17A further illustrates an example of IBC predictive coding. An encoder (e.g., encoder 200 of FIG. 2, or some other encoder) may encode a current block 1700 in a current picture (or a portion of a current picture) 1702 using an IBC prediction mode. The current block 1700 may be a predictive block (PB) or CB in a CTU 1704. A PB may also be referred to as a reference block (RB). Unlike inter-prediction, which involves searching for reference blocks in a previously decoded picture different from the picture of the current block being coded, IBC may involve searching for reference blocks in the same current picture as the current block. As a result, only a portion of the current picture may be available for searching for reference blocks in IBC. For example, only a portion of the current picture decoded before coding the current block may be available for searching for reference blocks in IBC. Searching for reference blocks in a portion of the current picture decoded before coding the current block may ensure that the encoding and decoding systems may produce identical results, but may also limit the IBC reference region.
[0113] The blocks may be scanned (e.g., from left to right, top to bottom) using a Z-scan to form a sequence order for encoding / decoding (e.g., in HEVC, VVC, and / or other video compression standards). The CTU (represented by the large square tile in FIG. 17A ) on the left side of the row immediately above the current CTU 1704 may be encoded / decoded before the current CTU 1704 and the current block 1700 (e.g., before encoding the current CTU 1704 and the current block 1700) based on the Z-scan. A sample of the CTU (e.g., as indicated by hatching in FIG. 17A ) may form an exemplary IBC reference region 1706 for determining a reference block for predicting / encoding / decoding the current block 1700. A different sequence order for encoding / decoding may be used (e.g., in other video encoders, decoders, and / or video compression standards). The IBC reference region 1706 (e.g., the location of the IBC reference region) may be affected based on the sequence order.
[0114] One or more additional 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 to CTUs based on a parallel processing approach (e.g., using tiling or wavefront parallel processing (WPP)). 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 such that dependencies between CTUs of different partitions are not allowed. The use of tiles or WPP may enable parallel processing of picture partitions. For example, the top row of CTUs shown in FIG. 17A may not be part of the IBC reference region 1706 due to one of the parallel processing approaches.
[0115] The encoder may use / apply a block matching technique to determine the BV 1708. The BV may indicate the relative displacement from the current block 1700 to a reference block 1710 within the IBC reference region 1706. The reference block 1710 may be a block that matches or best matches the current block 1700 (e.g., according to intra-block compensated prediction). The IBC reference region 1706 may be a constraint that may be applied to the BV 1708. The BV 1708 may be constrained by the IBC reference region 1706 and indicate the displacement from the current block 1700 (e.g., the position of the current block 1700) to the reference block 1710 (e.g., the position of the reference block 1710) within the IBC reference region 1706. The positions of the current block 1700 and the reference block 1710 may be determined based on, for example, the positions of their respective top-left samples.
[0116] The encoder may determine a best-matching reference block from among the blocks tested (e.g., within the IBC reference region 1706). The encoder may determine a best-matching reference block from among the blocks tested (e.g., within the IBC reference region 1706), for example, when a search process occurs. The encoder may determine that the reference block 1710 is the best-matching reference block based on, for example, 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, for example, 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 1710 may include decoded (and / or reconstructed) samples of the current picture 1702 before being processed by in-loop filtering operations (e.g., deblocking and / or SAO filtering).
[0117] 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 1710. 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 the bitstream.
[0118] The prediction information may include BV 1708. The prediction information may include a representation of BV 1708. BV 1708 may be predictively coded. BV 1708 may be predictively coded, for example, before being stored and / or signaled via a bitstream (e.g., HEVC, VVC, and / or other video compression schemes). BV 1708 of current block 1700 may be predictively coded (e.g., using an approach similar to AMVP for inter-prediction). BV 1708 may be predictively coded using BV prediction and differential coding. For example, when using BV prediction and differential coding techniques, the encoder may code BV 1708 as the difference between BV 1708 and BVP 1712. The encoder may select BVP 1712 from a list of candidate BVPs. The candidate BVPs may be determined based on previously decoded BVs of blocks neighboring current block 1700 and / or from other sources. Both the encoder and the decoder may generate and / or determine a list of candidate BVPs, which may be included as an AMVP list.
[0119] The encoder may determine BVD 1714, for example, based on selecting BVP 1712 from a list of candidate BVPs. BVD 1714 may be calculated, for example, based on the difference between BV 1708 and BVP 1712. For example, BVD 1714 may be represented by two directional components calculated according to equations (17) and (18), which are reproduced below: BVD x =BV x -BVP x (17) BVD y =BV y -BVP y (18) BVD x and BVD y may represent the horizontal and vertical components of the BVD 1714, respectively, and BV x and BV y may represent the horizontal and vertical components of BV1708, respectively, and BVP x and BVP y may respectively represent the horizontal and vertical components of the BVP 1712. An indication of the direction of the horizontal x-axis and vertical y-axis, as well as the positive signs of the x-axis and y-axis, is shown in the lower right corner of the current picture 1702 for reference purposes.
[0120] FIG. 17A shows that BV 1708 is a non-null horizontal component BV x and null vertical component BV y (e.g., BV y 17A, an example including a non-null vertical component BVP 1712 is further shown. BVP 1712 may indicate the displacement from the current block 1700 to the second reference block 1716. BVP 1712 may be a candidate for prediction included in a list of candidate BVPs (e.g., an AMVP list). As shown in FIG. 17A, BVP 1712 may be a candidate for prediction included in a list of candidate BVPs (e.g., an AMVP list). y and BVPs that may contain non-null horizontal components x BVD 1714 may indicate the displacement from reference block 1716 to reference block 1710. BVD 1714 may indicate the displacement from reference block 1716 to reference block 1710. x and BVD, which may contain non-null vertical components y .
[0121] The reference block 1716 may be selected / located using a block matching technique (e.g., similar to the block matching technique used to select the reference block 1710). The encoder and / or decoder may determine that the reference block 1710 is preferable for predicting the current block 1700 compared to the reference block 1716. The encoder and / or decoder may determine that the reference block 1710 is preferable for predicting the current block 1700 compared to the reference block 1716, for example, based on one or more cost criteria as discussed herein. The position of the reference block 1710 may be determined based on, for example, the displacement from the position of the current block 1700 (e.g., via the BVP 1712) to the position of the reference block 1716 and the displacement from the position of the reference block 1716 (e.g., via the BVD 1714) to the position of the reference block 1710 (e.g., instead of the position of the reference block 1710 being determined based on the BV 1708).
[0122] The combined displacement of BVP 1712 and BVD 1714 may indicate the location of reference block 1710. The combined displacement of BVP 1712 and BVD 1714 may indicate the location of reference block 1710, for example, so that reference block 1710 may be used for prediction or decoding of current block 1700. A decoder may use BVP 1712 (e.g., a non-null vertical component BVP y and non-null horizontal component BVP x ) and BVD1714 (non-null vertical component BVD y and non-null horizontal component BVD x ) to determine, for example, the location of the reference block 1710 within the IBC reference region 1706, and the decoder may determine whether BV 1708 has a null vertical component BVP y and non-null horizontal component BVP x Even if the BVP 1712 (e.g., non-null vertical component BVD y and non-null Heisei BVD x ) component) and BVD1714 (non-null vertical component BV y and the non-null horizontal component BV x (having the formula:
[0123] The encoder may signal, via the bitstream, the prediction error, an indication of the selected BVP 1712 (e.g., via an index indicating the BVP 1712 in a list of candidate BVPs, such as an AMVP list), and separate components of the BVD 1714 (e.g., determined based on equations (17) and (18)). A decoder (e.g., decoder 300 or any other decoder) may decode the BV 1708 by adding the corresponding components of the BVD 1714 to the corresponding components of the BVP 1712. The decoder may use the decoded BV 1708 to determine and / or generate a reference block 1710 (e.g., that forms / corresponds to a prediction of the current block 1700). The decoder may decode the current block 1700, for example, by combining the prediction with the prediction error received via the bitstream.
[0124] 17B shows an example of a BV that includes a null horizontal component. A BV may be associated with (e.g., correspond to) a BVP and a BVD.
[0125] FIG. 17B shows that BV 1708 is a non-null vertical component BV y and null horizontal component BV x (e.g., BV x =0). BVP 1712 may indicate the displacement from the current block 1700 to the second reference block 1716. BVP 1712 may be a candidate (e.g., of reference block 1710) for prediction as included in a list of candidate BVPs (e.g., an AMVP list). BVP 1712 may be a non-null horizontal component BVP x and non-null vertical component BVP y BVD 1714 may indicate the displacement from reference block 1716 to reference block 1710. BVD 1714 may include a non-null vertical component BVD y and non-null horizontal component BVD x may include:
[0126] The reference block 1716 may be located (e.g., determined) using a block matching technique (e.g., similar to the block matching technique used to select the reference block 1710). The encoder and / or decoder may determine that the reference block 1710 is preferable for predicting the current block 1700 compared to the reference block 1716, for example, based on one or more cost criteria (as discussed herein). The location of the reference block 1710 may be determined based on, for example, the displacement from the location of the current block 1700 (e.g., via the BVP 1712) to the location of the reference block 1716 and the displacement from the location of the reference block 1716 (e.g., via the BVD 1714) to the location of the reference block 1710 (e.g., instead of the location of the reference block 1710 being determined based on the BV 1708).
[0127] The combined displacement of BVP 1712 and BVD 1714 may indicate the location of a reference block 1710. The reference block 1710 may be used to predict or decode the current block 1700. To determine the location of the reference block 1710 in the IBC reference region 1706, the decoder calculates the displacement of the reference block 1710 by subtracting the null horizontal component BVP 1712 from the null horizontal component BVD 1714. x and non-null vertical component BVP y Even if the BVP 1712 (e.g., non-null horizontal component BVD x and non-null vertical component BVD y ) into BVD1714 (e.g., non-null horizontal component BV x and the non-null vertical component BV y (having the formula:
[0128] The encoder may signal, via the bitstream, the prediction error, an indication of the selected BVP 1712 (e.g., via an index indicating the BVP 1712 in a list of candidate BVPs, such as an AMVP list), and separate components of the BVD 1714 (e.g., determined based on equations (17) and (18)). A decoder (e.g., decoder 300 or any other decoder) may decode the BV 1708 by adding the corresponding components of the BVD 1714 to the corresponding components of the BVP 1712. The decoder may use the decoded BV 1708 to determine and / or generate a reference block 1710 (e.g., that forms / corresponds to a prediction of the current block 1700). The decoder may decode the current block 1700, for example, by combining the prediction with the prediction error received via the bitstream.
[0129] IBC reference region 1706 (e.g., as shown in Figures 17A and 17B) is shown as an example, and IBC reference regions may differ from IBC reference region 1706. The examples discussed herein may apply to IBC reference regions different from IBC reference region 1706.
[0130] As shown in Figures 17A and 17B, the IBC reference region 1706 may be replaced with an IBC reference region determined based on a different set of IBC reference region constraints. In addition to being limited to, for example, a reconstructed portion of the current picture 1702 and / or one or more WPP partitions and / or tile partitions (e.g., as described with respect to Figures 17A and 17B), the IBC reference region 1706 may be limited 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 with the 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.
[0131] 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 are 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.
[0132] The IBC reference region 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 region 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 that is 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 that is 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.
[0133] 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 the 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 the encoder and / or decoder design.
[0134] 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 128×128 reconstructed reference samples for the IBC reference area and the CTU size is 128×128 samples, the quantity / number of reconstructed CTUs to the left of the current CTU included in the IBC reference area is equal to (128×128) / (128×128), or 1 CTU. As another example, for a memory that can 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 included in the IBC reference area may be equal to (128x128) / (64x64), or 4 CTUs.
[0135] FIG. 18A shows an example 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.
[0136] FIG. 18A shows a current block 1802 in a current CTU 1804. The current block 1802 may be the first block coded in the current CTU 1804 and may be coded using IBC mode. As described with reference to FIGS. 17A and 17B, a block may be coded using IBC mode by determining a 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 the 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 split into multiple VPDUs. For example, the CTU of FIG. 18A may be split into four VPDUs of size 64×64 samples. The IBC reference region 1800 of the current block 1802 may include a reconstructed region 1810 (shown with hatching) excluding the 64x64 region of the reconstructed CTU 1806 that is collocated with the VPDU 1808. The collocated region is marked with an X in FIG. 18A . The IBC reference region 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 region 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 region 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 CTUs in the current picture.
[0137] 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 an IBC mode (e.g., as described with reference to Figures 17A and 17B). The current block 1812 may be coded by determining a 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 of the current block 1812 may include a reconstructed region 1816 (shown hatched) excluding portions of the CTU 1806 that are collocated with either the reconstructed portion of the current CTU 1804 and / or the VPDU 1814. In Figure 18B, the collocated regions are each indicated by an X.
[0138] Decoding / prediction information (e.g., IBC prediction information such as BVP and BVD) may be indicated / signaled in the bitstream by the encoder. The decoder may extract the prediction information from the bitstream and decode a BV for reconstructing the current block. For example, the encoder may signal, via the bitstream, a prediction error, an indication of the selected BVP (e.g., via an index indicating a list of candidate BVP / AMVP lists or an index indicating a selected BVP in the list of candidate BVP / AMVP lists), separate horizontal and vertical components of the BVD, and / or an indication of each of the separate horizontal and vertical components of the BVD. The decoder may decode / determine the BV by adding the corresponding horizontal and vertical components of the BVD to the corresponding horizontal and vertical components of the BVP. The decoder may use the decoded BV to determine a reference block (e.g., forming / corresponding to a prediction of the current block). The decoder may decode / determine the current block, for example, based on combining a prediction of the current block with a prediction error received via the bitstream. The method for determining the prediction / reference block may be inefficient, for example, when the BV includes a null component and a non-null component. For example, the BVD may include a non-null component even when the BV includes a null component. Signaling the non-null component of the BVD may be inefficient. Signaling the non-null component of the BVD and the indication of each of the components of the BVD may be inefficient, for example, when the corresponding BV includes a null component.
[0139] Various examples herein describe approaches for reducing the signaling overhead of prediction information (e.g., IBC prediction information). The reduction in signaling overhead can be achieved, for example, when a BV includes null and non-null components. The signaling overhead for indicating BVD components can be reduced, for example, by determining and signaling / indicating BVD components corresponding only to non-null components of the BV. The signaling overhead for indicating BVD component indications can be reduced, for example, by enabling inference / determination (e.g., at a decoder) of the indication of BVD components based on one or more modified BVPs. The signaling overhead of IBC prediction information can be reduced, for example, based on the indication of directional components of BVD and / or eliminating the indication of directional components. Reducing signaling overhead (e.g., the signaling overhead of IBC prediction information) can improve the efficiency of video encoding / decoding.
[0140] 19A shows an example of a BV that includes a null vertical component. A BV that includes a null vertical component can be determined based on a BVP and a BVD as described herein.
[0141] FIG. 19A further illustrates an example of IBC predictive coding. An encoder (e.g., encoder 200 as shown in FIG. 2, or some other encoder) may encode a current block 1900 in a current picture (or a portion of a current picture) 1902 using an IBC prediction mode. The current block 1900 may be a PB or CB in a CTU 1904. A PB may also be referred to as a reference block. Blocks may be scanned (e.g., from left to right, top to bottom) using a Z-scan to form a sequence order for encoding / decoding (e.g., in HEVC, VVC, and / or other video compression standards). A CTU on the left side of the row immediately above the current CTU 1904 may be encoded / decoded before the current CTU 1904 and the current block 1900 (e.g., before encoding the current CTU 1904 and the current block 1900) based on the Z-scan. A sample of CTUs (those located to the left of the row immediately above the current CTU 1904, as shown by hatching in FIG. 19) may form an exemplary IBC reference region 1906 for determining a reference block for predicting the current block 1900.
[0142] The encoder may use / apply block matching techniques to determine the BV 1908. The BV may indicate the relative displacement from the current block 1900 to a reference block 1910 (e.g., when using intrablock prediction) within the IBC reference region 1906. The reference block 1910 may match or be the best match to the current block 1900. The IBC reference region 1906 may be a constraint imposed on the BV 1908. The BV 1908 may be constrained by the IBC reference region 1906 to indicate the displacement from the current block 1900 to a reference block that is within the IBC reference region 1906. The encoder may determine the best matching reference block 1910, for example, from the blocks within the IBC reference region 1906 that are tested when the search process occurs. The encoder may determine that the reference block is the best matching reference block based on one or more cost criteria, such as, for example, a rate-distortion criterion (e.g., a Lagrangian rate-distortion cost). The one or more cost criteria may be based on differences (e.g., differences determined based on SSD, SAD, SATD, and / or a hash function) between predicted samples of the reference block 1910 and the original samples of the current block 1900. The reference block 1910 may include decoded (or reconstructed) samples of the current picture 1902 before the samples are processed by in-loop filtering operations (e.g., deblocking and / or SAO filtering).
[0143] The encoder may determine and / or use the difference (e.g., corresponding sample-by-sample difference) between the current block 1900 and the reference block 1910. 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 the bitstream.
[0144] The prediction information may include the BV 1908. The prediction information may include a representation of the BV 1908. The BV 1908 may be predictively encoded, for example, before being stored and / or signaled via a bitstream (e.g., HEVC, VVC, and / or other video compression schemes). The BV 1908 of the current block 1900 may be predictively encoded (e.g., using an approach similar to AMVP for inter-prediction). The BV 1908 may be predictively encoded using BV prediction and differential coding. The encoder may encode the BV 1908 as the difference between the BV 1908 and a BVP, for example, when using BV prediction and differential coding techniques. The encoder may select a BVP from a list of candidate BVPs. The candidate BVPs may be determined based on previously decoded BVs of blocks neighboring the current block 1900 and / or from other sources. Both the encoder and the decoder may generate and / or determine a list of candidate BVPs. The list of candidate BVPs may be included as an AMVP list. BVP0 and BVP1 may include exemplary BVPs (eg, as discussed further herein).
[0145] The encoder may determine the BVD, for example, based on the encoder selecting a BVP from a list of candidate BVPs. BVD0 and BVD1 may denote exemplary BVDs (e.g., as discussed further herein). The BVD may be calculated, for example, based on the difference between BV1908 and the BVP. The BVD may be represented by two directional components calculated according to equations (17) and (18), which are reproduced below: BVD x =BV x -BVP x (17) BVD y =BV y -BVP y (18) BVD x and BVD y may represent the horizontal and vertical components of the BVD, respectively. x and BV y may represent the horizontal and vertical components of BV1908, respectively. xand BVP y may represent the horizontal and vertical components of the BVP, respectively. An indication of the direction of the horizontal x-axis and vertical y-axis, as well as the positive signs of the x-axis and y-axis, is shown in the lower right corner of the current picture 1902 for reference purposes.
[0146] FIG. 19A shows that BV1908 is a non-null horizontal component BV x and null vertical component BV y (e.g., BV y =0). BV 1908 may indicate the displacement from the current block 1900 to a reference block 1910 within the IBC reference region 1906.
[0147] The encoder may determine a first BVP (e.g., BVP0) based on, for example, the dimensions of the current block 1900. BVP0 is the first BVP from the current block 1900 to the non-null horizontal component BV x The encoder may determine BVP0 based on, for example, the inverse of the width of the current block 1900 (e.g., the negative of the width of the current block, −CBwidth). The encoder may determine, for example, a second BVP (e.g., BVP1) based on the displacement from the position of the current block 1900. BVP1 is the distance from the current block 1900 to the non-null horizontal component BV xThe displacement of BVP1 from the current block 1900 may extend to the leftmost boundary of the IBC reference region 1906. The encoder may determine BVP1 based on the position of / at the leftmost boundary of the IBC reference region 1906 (e.g., to the left of the current block 1900). BVP0 and BVP1 may include a null vertical component. BVP0 and BVP1 may include a null vertical component, for example, based on BV 1908 including a null vertical component. The encoder may insert BVP0 and BVP1 into a list of candidate BVPs (e.g., an AMVP list). The encoder may determine the selected BVP from among BVP0 and BVP1. The encoder may determine the selected BVP from among BVP0 and BVP1, for example, in a manner similar to selecting a BVP from a list of candidate BVPs (e.g., as described herein with respect to Figures 17A and 17B). The encoder may signal / send an indication of the selected BVP to the decoder via the bitstream. The indication of the selected BVP may include an index / indicator.
[0148] The encoder may determine a first BVD (e.g., BVD0) and a second BVD (e.g., BVD1). The encoder may determine BVD0 and / or BVD1 based on, for example, the difference between BV1908 and BVP0 and / or the difference between BV1908 and BVP1, respectively. The encoder may determine BVD0 and / or BVD1 according to the following equations (19) and (20): BVD0=BV x -BVP0(19) BVD1=BV x -BVP1(20) In the formula, BV xmay be a non-null horizontal component of the BV 1908. The encoder may determine a BVD to indicate / signal to the decoder, for example, based on the difference between the BV 1908 and the selected BVP. The encoder may signal / indicate the BVD via the bitstream. The indication of the BVD may include the absolute value of the non-null component of the BVD. The encoder may determine a residual for the current block 1900, for example, based on the difference between the current block 1900 and the reference block 1910. The encoder may signal the residual of the CB via the bitstream.
[0149] The decoder may determine a first BVP (e.g., BVP0) based on, for example, the dimensions of the current block 1900. BVP0 is the first BVP of the non-null horizontal component BV x The decoder may determine BVP0 based on, for example, the inverse of the width of the current block 1900 (e.g., the negative of the width of the current block, −CBwidth). The decoder may determine a second BVP (e.g., BVP1) based on the displacement from the position of the current block 1900. BVP1 indicates the displacement of the non-null horizontal component BV x The displacement of BVP1 from the current block 1900 may indicate the displacement from the current block 1900 in the same horizontal direction as the current block 1900. The displacement of BVP1 from the current block 1900 may extend to the leftmost boundary of the IBC reference region 1906. The decoder may determine BVP1, for example, based on the position of / at the leftmost boundary of the IBC reference region 1906 (e.g., to the left of the current block 1900). The decoder may insert BVP0 and BVP1 into a BVP candidate list (e.g., an AMVP list). The decoder may receive an indication of a BVP selected from among BVP0 and BVP1 via the bitstream. The indication of the selected BVP may include an index / indicator.
[0150] The decoder may receive an indication of BVD via the bitstream. The indication of BVD may include absolute values of non-null components of the BVD. The decoder may determine an indication of BVD, for example, based on a selected BVP. For example, determining an indication of BVD based on a selected BVP may include determining / inferring that the BVD indication is negative, for example, if the selected BVP is BVP0. Determining an indication of BVD based on a selected BVP may include determining / inferring that the BVD indication is positive, for example, if the selected BVP is BVP1. The decoder may determine the BVD, for example, based on the indication and the BVD indication (e.g., absolute values of non-null components of the BVD). Determining the BVD based on the indication and the BVD indication may further include assigning an indication to the non-null components of the BVD.
[0151] The decoder may determine the BV1908 based on the selected BVP and the determined BVD, for example, according to the following equations (21) and (22): BV x =BVP0+BVD0(21) BV x =BVP1+BVD1(22) In the formula, BV x represents a non-null horizontal component of the BV 1908. Determining the BV 1908 based on the selected BVP and the determined BVD may include determining a non-null component of the BV 1908. The decoder may determine the non-null component of the BV 1908, for example, based on combining the non-null component of the selected BVP with the non-null component of the determined BVD. The decoder may decode the current block 1900 based on a reference block 1910 that is displaced from the current block 1900 by the block vector 1908 within the IBC reference region 1906. The decoder may further receive a residual of the current block 1900 via the bitstream. The decoder may decode the current block 1900 based on combining the reference block 1910 with the residual of the current block 1900.
[0152] 19B shows an example of a BV with a null horizontal component. A BV with a null vertical component can be determined, for example, based on the BVP and BVD. BV 1908 is a non-null vertical component BV as shown in FIG. y and null horizontal component BV x (e.g., BV x =0). BV 1908 may indicate the displacement from the current block 1900 to a reference block 1910 within the IBC reference region 1906.
[0153] The encoder may determine a first BVP (e.g., BVP0) based on, for example, the dimensions of the current block 1900. BVP0 is the first BVP from the current block 1900 to the non-null vertical component BV y The encoder may determine BVP0 based on, for example, the inverse of the height of the current block 1900 (e.g., the negative of the height of the current block, −CBHeight). The encoder may determine a second BVP (e.g., BVP1) based on, for example, the displacement from the position of the current block 1900. BVP1 is the distance from the current block 1900 to the non-null vertical component BV xThe displacement of BVP1 from the current block 1900 may extend to the top boundary of the IBC reference region 1906. The encoder may determine BVP1, for example, based on its position at / at the top boundary of the IBC reference region 1906 (e.g., above the current block 1900). BVP0 and BVP1 may include null horizontal components. BVP0 and BVP1 may include null horizontal components, for example, based on BV 1908 including a null horizontal component. The encoder may insert BVP0 and BVP1 into a list of candidate BVPs (e.g., an AMVP list). The encoder may determine the selected BVP from among BVP0 and BVP1. The encoder may determine the selected BVP from among BVP0 and BVP1 in a manner similar to selecting a BVP from a list of candidate BVPs (e.g., as described herein with respect to Figures 17A and 17B). The encoder may signal / send an indication of the selected BVP to the decoder via the bitstream. The indication of the selected BVP may include an index / indicator.
[0154] The encoder may determine a first BVD (e.g., BVD0) and a second BVD (e.g., BVD1). The encoder may determine BVD0 and / or BVD1 based on, for example, the difference between BV1908 and BVP0 and / or the difference between BV1908 and BVP1, respectively. The encoder may determine BVD0 and / or BVD1 according to the following equations (23) and (24): BVD0=BV y -BVP0(23) BVD1=BV y -BVP1(24) In the formula, BV ymay be a non-null vertical component of the BV 1908. The encoder may determine a BVD to indicate / signal to the decoder, for example, based on the difference between the BV 1908 and the selected BVP. The encoder may signal / indicate / send an indication of the BVD via the bitstream. The indication of the BVD may include the absolute value of the non-null component of the BVD. The encoder may determine a residual for the current block 1900, for example, based on the difference between the current block 1900 and the reference block 1910. The encoder may signal the residual of the CB via the bitstream.
[0155] The decoder may determine a first BVP (e.g., BVP0) based on, for example, the dimensions of the current block 1900. BVP0 is the first BVP from the current block 1900 to the non-null vertical component BV y The decoder may determine BVP0 based on, for example, the inverse of the height of the current block 1900 (e.g., the negative of the height of the current block, -CBheight). The decoder may determine a second BVP (e.g., BVP1) based on, for example, the displacement from the position of the current block 1900. BVP1 is the distance from the current block 1900 to the non-null vertical component BV y The displacement of BVP1 from the current block 1900 may extend to the top boundary of the IBC reference region 1906. The decoder may determine BVP1, for example, based on the position of / at the top boundary of the IBC reference region 1906 (e.g., above the current block 1900). The decoder may insert BVP0 and BVP1 into a BVP candidate list (e.g., an AMVP list). The decoder may receive an indication of a BVP selected from BVP0 and BVP1 via the bitstream. The indication of the selected BVP may include an index / indicator.
[0156] The decoder may receive an indication of BVD via the bitstream. The indication of BVD may include absolute values of non-null components of the BVD. The decoder may determine an indication of BVD, for example, based on a selected BVP. Determining an indication of BVD based on a selected BVP may include, for example, determining / inferring that the BVD indication is positive if the selected BVP is BVP0. Determining an indication of BVD based on a selected BVP may include, for example, determining / inferring that the BVD indication is positive if the selected BVP is BVP1. The decoder may determine the BVD, for example, based on the indication and the BVD indication (e.g., absolute values of non-null components of the BVD). Determining the BVD based on the indication and the BVD indication may further include assigning an indication to the non-null components of the BVD.
[0157] The decoder may determine the BV1908 based on the selected BVP and the determined BVD according to the following equations (25) and (26): BV y =BVP0+BVD0(25) BV y =BVP1+BVD1(26) In the formula, BV y represents a non-null vertical component of the BV 1908. Determining the BV 1908 based on the selected BVP and the determined BVD may include determining a non-null component of the BV 1908. The decoder may determine the non-null component of the BV 1908, for example, based on combining the non-null component of the selected BVP with the non-null component of the determined BVD. The decoder may decode the current block 1900, for example, based on a reference block 1910 that is displaced from the current block 1900 by the block vector 1908 within the IBC reference region 1906. The decoder may further receive a residual of the current block 1900 via the bitstream. The decoder may decode the current block 1900, for example, based on combining the reference block 1910 with the residual of the current block 1900.
[0158] 20A shows an example of a BV that includes a null vertical component. A BV that includes a null vertical component can be represented based on a combined BVP and BVD as described herein.
[0159] FIG. 20A further illustrates an example of IBC predictive coding. An encoder (e.g., encoder 200 as shown in FIG. 2, or some other encoder) may encode a current block 2000 in a current picture (or a portion of a current picture) 2002 using an IBC prediction mode. The current block 2000 may be a PB or CB in a CTU 2004. A PB may also be referred to as a reference block. Blocks may be scanned (e.g., from left to right, top to bottom) using a Z-scan to form a sequence order for encoding / decoding (e.g., in HEVC, VVC, and / or other video compression standards). A CTU on the left side of the row immediately above the current CTU 2004 may be encoded / decoded before the current CTU 2004 and the current block 2000 (e.g., before encoding the current CTU 2004 and the current block 2000) based on the Z-scan. A sample of CTUs (those located to the left of the row immediately above the current CTU 2004, as shown by hatching in FIG. 20) may form an exemplary IBC reference region 2006 for determining a reference block for predicting the current block 2000.
[0160] The encoder may use / apply block matching techniques to determine the BV 2008. The BV may indicate the relative displacement from the current block 2000 to the reference block 2010 (e.g., when using intrablock prediction) within the IBC reference region 2006. The reference block 2010 may match or best match the current block 2000. The IBC reference region 2006 may be a constraint imposed on the BV 2008. The BV 2008 may be constrained by the IBC reference region 2006 to indicate the displacement from the current block 2000 to a reference block that is within the IBC reference region 2006. The encoder may, for example, determine the best-matching reference block 2010 from the blocks within the IBC reference region 2006 that are tested when the search process occurs. The encoder may determine that the reference block is the best-matching reference block based on one or more cost criteria, such as, for example, a rate-distortion criterion (e.g., a Lagrangian rate-distortion cost). The one or more cost criteria may be based on differences (e.g., differences determined based on SSD, SAD, SATD, and / or a hash function) between predicted samples of the reference block 2010 and original samples of the current block 2000. The reference block 2010 may include decoded (or reconstructed) samples of the current picture 2002 before the samples are processed by in-loop filtering operations (e.g., deblocking and / or SAO filtering).
[0161] The encoder may determine and / or use the difference (e.g., corresponding sample-by-sample difference) between the current block 2000 and the reference block 2010. 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 the bitstream.
[0162] The prediction information may include the BV2008. The prediction information may include a representation of the BV2008. The BV2008 may be predictively encoded, for example, before being stored and / or signaled via a bitstream (e.g., HEVC, VVC, and / or other video compression schemes). The BV2008 of the current block 2000 may be predictively encoded (e.g., using an approach similar to AMVP for inter-prediction). The BV2008 may be predictively encoded using BV prediction and differential coding. The encoder may encode the BV2008 as the difference between the BV2008 and a BVP, for example, when using BV prediction and differential coding techniques. The encoder may select a BVP from a list of candidate BVPs. The candidate BVPs may be determined based on previously decoded BVs of blocks neighboring the current block 2000 and / or from other sources. Both the encoder and the decoder may generate and / or determine a list of candidate BVPs. The list of candidate BVPs may be included as an AMVP list.
[0163] The encoder may determine the BVD, for example, based on the encoder selecting a BVP from a list of candidate BVPs. The BVD may be calculated, for example, based on the difference between the BV2008 and the BVP. For example, the BVD may be represented by two directional components calculated according to equations (17) and (18), which are reproduced below: BVD x =BV x -BVP x (17) BVD y =BV y -BVP y (18) BVD x and BVD y may represent the horizontal and vertical components of the BVD, respectively. x and BV y may represent the horizontal and vertical components of BV2008, respectively. x and BVP ymay represent the horizontal and vertical components of the BVP, respectively. An indication of the direction of the horizontal x-axis and vertical y-axis, as well as the positive signs of the x-axis and y-axis, is shown in the lower right corner of the current picture 2002 for reference purposes.
[0164] FIG. 20A shows that BV2008 is a non-null horizontal component BV x and null vertical component BV y (e.g., BV y Specific examples are shown, including (BV = 0). BV 2008 may indicate the displacement from the current block 2000 to a reference block 2010 within the IBC reference region 2006.
[0165] The encoder may determine a combined BVP (BVP* as shown in FIG. 20A) based on a first BVP (e.g., BVP0) and a second BVP (e.g., BVP1). BVP0 and BVP1 may be in a BVP candidate list (e.g., an AMVP list). BVP0 and BVP1 may be the first and second candidate BVPs in the BVP candidate list. The displacement of BVP0 and BVP1 is not shown in FIG. 20A because the BVPs may be any two candidates in the BVP candidate list. BVP0 and BVP1 may be candidate BVPs with null vertical components. BVP0 and BVP1 may include null vertical components, for example, based on the fact that BV2008 includes a null vertical component. The encoder may determine a combined BVP* based on BVP0 and BVP1 and a BVD based on BV2008 and BVP* according to the following equations (27) and (28): BVP * =a*BVP0+b*BVP1+c (27) BVD=BV x -BVP * (28) In the formula, BV xrepresents the non-null horizontal components of BV2008. As described herein with respect to Equation (27), a may be a first weighting factor, b may be a second weighting factor, and c may be an offset value. The encoder may determine the combined BVP*, for example, based on BVP0 and BVP1 in the BVP candidate list, by determining a linear combination of the non-null components of the first BVP (e.g., BVP0) multiplied by a first weighting factor (denoted as a), a linear combination of the non-null components of the second BVP (e.g., BVP1) multiplied by a second weighting factor (denoted as ′), and a linear combination of an offset value (denoted as c). The weighting factors and offset values may be determined, for example, based on machine learning, statistical training, or any other technique.
[0166] The encoder may signal / indicate / send an indication of BVD to a decoder via the bitstream. The BVD may be based on the difference between BV2008 and the combined BVP* (e.g., determined based on equation (28)). Signaling the indication of BVD may further include determining the absolute value of the difference between the BV and the combined BVP*. Signaling the indication of BVD may further include signaling / sending an indication of the absolute value of the difference between BV2008 and the combined BVP* to a decoder via the bitstream. Signaling the indication of BVD may further include signaling an indication of whether the combined BVP* is less than or greater than BV2008. Signaling the indication of BVD may further include signaling an indication when the combined BVP* is less than BV2008 or greater than BV2008. The encoder may determine a non-null component of the BVD based on, for example, a difference between a non-null component of the BV 2008 and a non-null component of the combined BVP*. The encoder may determine an absolute value of the non-null component of the BVD. The encoder may signal / transmit / indicate the absolute value of the non-null component of the BVD via the bitstream (e.g., to a decoder). In one example, the encoder may determine a residual of the current block 2000 based on, for example, a difference between the current block 2000 and the reference block 2010. The encoder may further signal / transmit / indicate the residual of the current block 2000 via the bitstream.
[0167] The decoder may determine a combined BVP (e.g., BVP* as shown in FIG. 20A) based on a first BVP (e.g., BVP0) and a second BVP (e.g., BVP1) in a BVP candidate list (e.g., AMVP list). BVP0 and BVP1 may be the first and second candidate BVPs in the BVP candidate list. BVP0 and BVP1 may be candidate BVPs with null vertical components. The decoder may determine, for example, a combined BVP* based on BVP0 and BVP1, and a BVD based on BV2008 and BVP*, according to the following equations (29) and (30): BVP * =a*BVP0+b*BVP1+c (29) BV x =BVP * +BVD (30) In the formula, BV x a may be a non-null horizontal component of BV2008. As described herein with respect to equation (29), a may be a first weighting factor, b may be a second weighting factor, and c may be an offset value. The decoder may determine the combined BVP* based on, for example, BVP0 and BVP1 in the BVP candidate list by determining a linear combination of the non-null components of the first BVP multiplied by the first weighting factor (denoted as a), the non-null components of the second BVP multiplied by the second weighting factor (denoted as b), and a linear combination of the offset value (denoted as c).
[0168] The decoder may receive the absolute value of the BVD via the bitstream. The absolute value of the BVD may include absolute values of non-null components of the BVD. The decoder may receive an indication via the bitstream. The indication may be a flag or an index. The decoder may determine the BVD based on the absolute value and the indication, for example. Determining the BVD based on the absolute value and the indication may further include determining / inferring that an indication of BVD is negative if the indication indicates that the combined BVP* is less than BV2008, and determining / inferring that an indication of BVD is positive if the indication indicates that the combined BVP* is greater than BV2008. Determining the BVD based on the absolute value and the indication may further include assigning an indication to the non-null components of the BVD.
[0169] The decoder may determine the BV2008, for example, based on the combined BVP* and the determined BVD. Determining the BV2008 based on the combined BVP* and the determined BVD may include determining non-null components of the BV2008 by combining non-null components of the combined BVP* and the determined BVD (e.g., according to equation (30)). The decoder may decode the current block 2000, for example, based on a reference block 2010 of the IBC reference region 2006. The reference block 2010 may be displaced from the current block 2000 by the BV2008. The decoder may receive a residual of the current block 2000 via the bitstream. The decoder may decode the current block 2000 based on combining the reference block 2010 with the residual of the current block 2000.
[0170] 20B shows a BV with a null horizontal component. A BV with a null vertical component can be represented based on the combined BVP and BVD.
[0171] FIG. 20B shows that BV2008 is a non-null vertical component BV y and null horizontal component BV x (e.g., BV x Specific examples are shown, including (BV = 0). BV 2008 may indicate the displacement from the current block 2000 to a reference block 2010 within the IBC reference region 2006.
[0172] The encoder may determine a combined BVP (e.g., BVP* as shown in FIG. 20B) based on, for example, a first BVP (e.g., BVP0) and a second BVP (e.g., BVP1), where BVP0 and BVP1 may be in a BVP candidate list (e.g., an AMVP list). BVP0 and BVP1 may be the first and second candidate BVPs in the BVP candidate list. The displacement of BVP0 and BVP1 is not shown in FIG. 20B because the BVPs may be any two candidates in the BVP candidate list. BVP0 and BVP1 may be candidate BVPs with null horizontal components. BVP0 and BVP1 may include null horizontal components, for example, based on BV2008 including a null horizontal component. The encoder may determine a combined BVP* based on BVP0 and BVP1 and a BVD based on BV2008 and BVP* according to the following equations (31) and (32): BVP * =a*BVP0+b*BVP1+c (31) BVD=BV y -BVP * (32) In the formula, BV x represents the non-null vertical components of BV2008. As described herein with respect to Equation (31), a may be a first weighting factor, b may be a second weighting factor, and c may be an offset value. The encoder may determine the combined BVP* based on BVP0 and BVP1 in the BVP candidate list, for example, by determining a linear combination of the non-null components of the first BVP (e.g., BVP0) multiplied by a first weighting factor (denoted as a), a linear combination of the non-null components of the second BVP (e.g., BVP1) multiplied by a second weighting factor (denoted as b), and a linear combination of an offset value (denoted as c). The weighting factors and offset values may be determined based on, for example, machine learning, statistical training, or any other technique.
[0173] The encoder may signal / indicate / send an indication of BVD to a decoder via the bitstream. The BVD may be based on the difference between BV2008 and the combined BVP* (e.g., determined based on equation (32)). Signaling the indication of BVD may further include determining the absolute value of the difference between the BV and the combined BVP*. Signaling the indication of BVD may further include signaling / sending an indication of the absolute value of the difference between BV2008 and the combined BVP* to a decoder via the bitstream. Signaling the indication of BVD may further include signaling an indication of BVD if the combined BVP* is less than or greater than BV2008. Signaling the indication of BVD may further include signaling an indication of whether the combined BVP* is less than or greater than BV2008. The encoder may determine a non-null component of the BVD based on a difference between the non-null component of the BV 2008 and the non-null component of the combined BVP*. The encoder may determine an absolute value of the non-null component of the BVD. The encoder may signal / transmit / indicate the absolute value of the non-null component of the BVD via the bitstream (e.g., to a decoder). In one example, the encoder may determine a residual of the current block 2000 based on, for example, a difference between the current block 2000 and the reference block 2010. The encoder may further signal / transmit / indicate the residual of the current block 2000 via the bitstream.
[0174] The decoder may determine a combined BVP (e.g., BVP* as shown in FIG. 20B) based on, for example, a first BVP (e.g., BVP0) and a second BVP (e.g., BVP1) in a BVP candidate list (e.g., an AMVP list). BVP0 and BVP1 may be the first and second candidate BVPs in the BVP candidate list. BVP0 and BVP1 may be candidate BVPs with null horizontal components. The decoder may determine a combined BVP* based on BVP0 and BVP1, and a BVD based on BV2008 and BVP*, according to the following equations (29) and (30): BVP* =a*BVP0+b*BVP1+c (33) BV y =BVP * +BVD (34) In the formula, BV y may be non-null vertical components of BV2008. As described herein with respect to equation (33), a may be a first weighting factor, b may be a second weighting factor, and c may be an offset value. The decoder may determine the combined BVP* based on BVP0 and BVP1 in the BVP candidate list, for example, by determining a linear combination of the non-null components of the first BVP multiplied by the first weighting factor (denoted as 'a'), a linear combination of the non-null components of the second BVP multiplied by the second weighting factor (denoted as 'b'), and a linear combination of the offset value (denoted as 'c').
[0175] The decoder may receive the absolute value of the BVD via the bitstream. The absolute value of the BVD may include absolute values of non-null components of the BVD. The decoder may receive an indication via the bitstream. The indication may be a flag or an index. The decoder may determine the BVD based on the absolute value and the indication, for example. Determining the BVD based on the absolute value and the indication may further include determining / inferring that an indication of BVD is negative if the indication indicates that the combined BVP* is less than BV2008, and determining / inferring that an indication of BVD is positive if the indication indicates that the combined BVP* is greater than BV2008. Determining the BVD based on the absolute value and the indication may further include assigning an indication to the non-null components of the BVD.
[0176] The decoder may determine the BV2008 based on the combined BVP* and the determined BVD. Determining the BV2008 based on the combined BVP* and the determined BVD may include determining non-null components of the BV2008 by combining non-null components of the combined BVP* and non-null components of the determined BVD (e.g., according to equation (34)). The decoder may decode the current block 2000 based on a reference block 2010 of the IBC reference region 2006. The reference block 2010 may be displaced from the current block 2000 by the BV2008. The decoder may receive a residual of the current block 2000 via the bitstream. The decoder may decode the current block 2000, for example, based on combining the reference block 2010 with the residual of the current block 2000. Further exemplary embodiments according to the present disclosure are discussed below.
[0177] 21 illustrates a method for representing a BV including a null component. The BV may be represented by one or more derived BVPs and BVDs. One or more steps of the example method 2100 of FIG. 21 may be performed by an encoder (e.g., the encoder 200 shown in FIG. 2, or any other encoder).
[0178] In step 2102, the encoder may determine the position of a reference block within the reference region. The reference block may be displaced from the position of the current block by a BV. The BV may include a null vertical component or a null horizontal component.
[0179] In step 2104, the encoder may determine a first BVP. The encoder may determine the first BVP based on, for example, the dimensions of the current block. The dimensions of the current block may be the inverse of the height of the current block (e.g., the negative of the height of the current block). The dimensions of the current block may be the inverse of the width of the current block (e.g., the negative of the width of the current block).
[0180] In step 2106, the encoder may determine a second BVP. The encoder may determine the second BVP based on, for example, a displacement from the position of the current block. The displacement from the position of the current block may indicate the position of a / at the top boundary of a reference region above the current block. The displacement from the position of the current block may indicate the position of a / at the leftmost boundary of a reference region to the left of the current block.
[0181] In step 2108, the encoder may determine a selected BVP from among the first BVP and the second BVP. In step 2110, the encoder may signal / send an indication of the selected BVP to the decoder via the bitstream. The indication of the selected BVP may include an index.
[0182] Method 2100 may include inserting the first BVP and the second BVP into a BVP candidate list (e.g., an AMVP list). Method 2100 may include determining a BVD based on, for example, a difference between the BV and the selected BVP. Method 2100 may include signaling / transmitting, via the bitstream, an indication of the BVD. The indication of the BVD may include an absolute value of a non-null component of the BVD. Method 2100 may include determining a residual of the current block based on, for example, a difference between the current block and a reference block. Method 2100 may include signaling / transmitting, via the bitstream, an indication of the residual of the current block.
[0183] 22 shows an example method for determining a BV including a null component. The BV may be determined based on a BVP and a BVD. One or more steps of the example method 2200 of FIG. 22 may be performed by a decoder (e.g., the decoder 300 shown in FIG. 3, or any other decoder).
[0184] In step 2202, the decoder may determine a first BVP. The decoder may determine the first BVP based on, for example, the dimensions of the current block. The dimensions of the current block may be the inverse of the height of the current block (e.g., the negative of the height of the current block). The dimensions of the current block may be the inverse of the width of the current block (e.g., the negative of the width of the current block).
[0185] In step 2204, the decoder may determine a second BVP. The decoder may determine the second BVP based on, for example, a displacement from the position of the current block. The displacement from the position of the current block may indicate the position of a / at the topmost boundary of the reference region above the current block. The displacement from the position of the current block may indicate the position of a / at the leftmost boundary of the reference region to the left of the current block.
[0186] In step 2206, the decoder may receive, via the bitstream, an indication of a BVP selected from the first BVP and the second BVP. In step 2208, the decoder may receive, via the bitstream, an indication of a BVD. The indication of the BVD may include absolute values of non-null components of the BVD.
[0187] In step 2210, the decoder may determine an indication of BVD. The decoder may determine the indication of BVD based on, for example, a selected BVP. Determining the indication of BVD based on the selected BVP may include determining / inferring that the indication is negative if the selected BVP is a first BVP. Determining the indication of BVD based on the selected BVP may include determining / inferring that the indication is positive if the selected BVP is a second BVP.
[0188] In step 2212, the decoder may determine the BVD. The decoder may determine the BVD, for example, based on the signs and indications of the BVD. Determining the BVD based on the signs and indications of the BVD may include assigning signs to non-null components of the BVD.
[0189] In step 2214, the decoder may determine a BV. The decoder may determine the BV based on, for example, the selected BVP and the determined BVD. Determining the BV based on the selected BVP and the determined BVD may include determining non-null components of the BV by combining non-null components of the selected BVP and non-null components of the determined BVD. The BV may include a null vertical component. The BV may include a null horizontal component.
[0190] In step 2216, the decoder may decode the current block. The decoder may decode the current block based on, for example, a reference block of a reference region. The reference block may be displaced from the current block by a BV. Method 2200 may include inserting the first BVP and the second BVP into a BVP candidate list (e.g., an AMVP list). Method 2200 may include receiving a residual of the current block via the bitstream. The method may include, for example, decoding the current block based on combining the reference block with the residual of the current block.
[0191] 23 illustrates an exemplary method for indicating / representing a BV including a null component. The BV may be indicated / represented using a combined BVP and BVD. One or more steps of the exemplary method 2300 of FIG. 23 may be performed by an encoder (e.g., the encoder 200 shown in FIG. 2, or any other encoder).
[0192] In step 2302, the encoder may determine the position of a reference block within the reference region. The reference block may be displaced from the position of the current block by a BV. The BV may include a null vertical component or a null horizontal component.
[0193] In step 2304, the encoder may determine a combined BVP. The encoder may determine the combined BVP, for example, based on a first BVP and a second BVP in a BVP candidate list (e.g., an AMVP list). Determining the combined BVP based on the first BVP and the second BVP may include determining a linear combination of a non-null component of the first BVP multiplied by a first weighting factor, a non-null component of the second BVP multiplied by a second weighting factor, and an offset value.
[0194] In step 2306, the encoder may transmit / signal an indication of the BVD to the decoder via the bitstream. The BVD may be based on a difference between the BV and the combined BVP. Signaling / transmitting an indication of the BVD based on the difference between the BV and the combined BVP may include determining an absolute value of the difference between the BV and the combined BVP. Signaling / transmitting an indication of the BVD based on the difference between the BV and the combined BVP may include transmitting / signaling an indication of the absolute value of the difference between the BV and the combined BVP. Transmitting / signaling an indication of the BVD based on the difference between the BV and the combined BVP may include transmitting / signaling an indication of whether the combined BVP is smaller or larger than the BV.
[0195] Method 2300 may include determining a non-null component of the BVD. The non-null component of the BVD may be determined, for example, based on a difference between a non-null component of the BV and a non-null component of the combined BVP. Method 2300 may include determining an absolute value of the non-null component of the BVD. Method 2300 may include signaling / transmitting the absolute value of the non-null component of the BVD via the bitstream. Method 2300 may include determining a residual of the current block, for example, based on a difference between the current block and a reference block. Method 2300 may include signaling / transmitting the residual of the current block via the bitstream.
[0196] 24 shows an example method for determining a BV including a null component. The BV with a null component may be determined, for example, based on a combined BVP and BVD. One or more steps of the example method 2400 of FIG. 24 may be performed by a decoder (e.g., the decoder 300 shown in FIG. 3, or any other decoder).
[0197] In step 2402, the decoder may determine a combined BVP. The decoder may determine the combined BVP, for example, based on a first BVP and a second BVP in a BVP candidate list (e.g., an AMVP list). Determining the combined BVP based on the first BVP and the second BVP may include determining a linear combination of a non-null component of the first BVP multiplied by a first weighting factor, a non-null component of the second BVP multiplied by a second weighting factor, and an offset value.
[0198] In step 2404, the decoder may receive, via the bitstream, the absolute value of the BVD. The absolute value of the BVD may include the absolute values of the non-null components of the BVD. In step 2406, the decoder may receive an indication in the bitstream. In one embodiment, the indication is one of a flag or an index. The indication may indicate whether the combined BVP is less than the BV or greater than the BV.
[0199] In step 2408, the decoder may determine the BVD. The decoder may determine the BVD, for example, based on the absolute value and the indication. Determining the BVD based on the absolute value and the indication may include determining / inferring that the indication of BVD is negative if the indication indicates that the combined BVP is less than the BV, and determining / inferring that the indication of BVD is positive if the indication indicates that the combined BVP is greater than the BV. Determining the BVD based on the absolute value and the indication may include assigning an indication to a non-null component of the BVD.
[0200] In step 2410, the decoder may determine a BV. The decoder may determine the BV, for example, based on the combined BVP and the determined BVD. Determining the BV based on the combined BVP and the determined BVD may include determining non-null components of the BV. Determining the non-null components of the BV may include combining the non-null components of the combined BVP with the non-null components of the determined BVD (e.g., as determined in step 2408). The BV may include a null vertical component. The BV may include a null horizontal component.
[0201] In step 2412, the decoder may decode the current block. The decoder may decode the current block based on, for example, a reference block of a reference region. The reference block may be displaced from the current block by a BV. Method 2400 may include receiving a residual of the current block via the bitstream. The method may include decoding the current block based on combining the reference block with the residual of the current block.
[0202] 25 illustrates an exemplary computer system that may implement examples of the present disclosure. For example, as shown in FIG. 25, exemplary computer system 2500 may implement one or more of the methods described herein. For example, various devices and / or systems described herein (e.g., FIGS. 1, 2, and 3) may be implemented in the form of one or more computer systems 2500. Furthermore, each of the steps of the flowcharts illustrated in the present disclosure may be implemented on one or more computer systems 2500.
[0203] Computer system 2500 may include one or more processors, such as processor 2504. Processor 2504 may be a special purpose processor, a general purpose processor, a microprocessor, and / or a digital signal processor. Processor 2504 may be connected to a communications infrastructure 2502 (e.g., a bus or network). Computer system 2500 may also include main memory 2506 (e.g., random access memory (RAM)) and / or secondary memory 2508.
[0204] The secondary memory 2508 may include a hard disk drive 2510 and / or a removable storage drive 2512 (e.g., a magnetic tape drive, an optical disk drive, and / or the like). The removable storage drive 2512 may be read from and / or written to a removable storage unit 2516. The removable storage unit 2516 may include a magnetic tape, an optical disk, and / or the like. The removable storage unit 2516 may be read by and / or written to the removable storage drive 2512. The removable storage unit 2516 may include a computer-usable storage medium having computer software and / or data stored therein.
[0205] The secondary memory 2508 may include other similar means for allowing computer programs or other instructions to be loaded into the computer system 2500. Such means may include a removable storage unit 2518 and / or an interface 2514. 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 2518 and interfaces 2514 that may allow software and / or data to be transferred from the removable storage unit 2518 to the computer system 2500.
[0206] Computer system 2500 may also include a communications interface 2520. Communications interface 2520 may allow software and data to be transferred between computer system 2500 and external devices. Examples of communications interface 2520 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 2520 may be in the form of signals, which may be electronic, electromagnetic, optical, and / or other signals that can be received by communications interface 2520. The signals may be provided to communications interface 2520 via communications path 2522. Communications path 2522 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.
[0207] Computer program medium and / or computer-readable medium may be used to refer to tangible storage media, such as removable storage units 2516 and 2518, or a hard disk installed in hard disk drive 2510. A computer program product may be a means for providing software to computer system 2500. Computer programs (which may also be called computer control logic) may be stored in main memory 2506 and / or secondary memory 2508. Computer programs may be received via communications interface 2520. Such computer programs, when executed, may enable computer system 2500 to implement the present disclosure as discussed herein. In particular, computer programs, when executed, may enable processor 2504 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 2500.
[0208] 26 shows exemplary elements of a computing device that may be used to implement any of the various apparatuses 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 2630 may include one or more processors 2631 that may execute instructions stored on random access memory (RAM) 2633, removable media 2634 (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 2635. Computing device 2630 may also include a security processor (not shown) that may execute instructions of one or more computer programs to monitor processes running on processor 2631 and any processes requesting access to any hardware and / or software components of computing device 2630 (e.g., ROM 2632, RAM 2633, removable media 2634, hard drive 2635, device controller 2637, network interface 2639, GPS 2641, Bluetooth interface 2642, WiFi interface 2643, etc.). Computing device 2630 may include one or more output devices such as a display 2636 (e.g., a screen, display device, monitor, television, etc.) and may include one or more output device controllers 2637 such as a video processor. There may also be one or more user input devices 2638 such as a remote control, keyboard, mouse, touch screen, microphone, etc. Computing device 2630 may also include one or more network interfaces such as network interface 2639, which may be a wired interface, a wireless interface, or a combination of the two.The network interface 2639 may provide an interface through which the computing device 2630 communicates with a network 2640 (e.g., a RAN or any other network). The network interface 2639 may include a modem (e.g., a cable modem), and the external network 2640 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 2630 may include a location detection device such as a global positioning system (GPS) microprocessor 2641, which may be configured to receive and process global positioning signals and, with possible assistance from external servers and antennas, determine the geographic location of the computing device 2630.
[0209] While the example of FIG. 26 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 computing device 2630. Furthermore, components may be implemented using basic computing devices and components, and the same components (e.g., processor 2631, ROM storage 2632, display 2636, 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. 26. 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).
[0210] Various features are highlighted below in sets 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.
[0211] Clause 1. A method comprising selecting, by a computing device, a block vector predictor (BVP) from among a first BVP determined based on dimensions of a current block and a second BVP determined based on a displacement from a position of the current block to a boundary of a reference region.
[0212] Clause 2. The method of clause 1, further comprising determining a magnitude of a block vector difference (BVD) based on a difference between a BV and a BVP associated with the reference block.
[0213] Clause 3. The method of clause 1 or 2, further comprising transmitting an indication of the BVP and an indication of the size of the BVD.
[0214] Clause 4. The method of any one of clauses 1 to 3, wherein the representation of the magnitude of the BVD comprises the absolute value of a non-null component of the BVD.
[0215] Clause 5. The method of any one of clauses 1 to 3, wherein the BV includes a null vertical component or a null horizontal component.
[0216] Clause 6. The method of any one of clauses 1 to 3, wherein the dimension of the current block is the height of the current block or the width of the current block.
[0217] Clause 7. The method of any one of clauses 1 to 3, wherein the boundary of the reference area includes a top-most boundary of the reference area above the current block or a left-most boundary of the reference area to the left of the current block.
[0218] Clause 8. The method of any one of clauses 1 to 3, further comprising transmitting a residual associated with the current block, the residual being based on a difference between the current block and the reference block.
[0219] Clause 9. The method of any one of clauses 1 to 3, wherein the BVP comprises a null component and a non-null component, and the non-null component of the BVP is in the same direction as the non-null component of the BV.
[0220] Clause 10. The method of any one of clauses 1 to 3, wherein the representation of the BVP includes an index.
[0221] Clause 11. The method of any one of clauses 1 to 3, further comprising inserting the first BVP and the second BVP into a BVP candidate list.
[0222] Clause 12. 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 11.
[0223] Clause 13. A system comprising: a first computing device configured to perform the method of any one of clauses 1 to 11; and a second computing device configured to receive an indication of the size of the BVD and an indication of the BVP.
[0224] Clause 14. A computer-readable medium storing instructions that, when executed, cause performance of the method of any one of clauses 1-11.
[0225] Clause 15. A method, comprising receiving, by a computing device, an indication of a magnitude of a block vector difference (BVD) and an indication of a block vector predictor (BVP), wherein the BVP comprises one of: a first BVP determined based on a dimension of a current block; and a second BVP determined based on a displacement from a position of the current block to a boundary of a reference region.
[0226] Clause 16. The method of clause 15, further comprising determining a block vector (BV) based on the BVP, the magnitude of the BVD, and the sign of the BVD.
[0227] Clause 17. The method of clause 15 or 16, further comprising decoding the current block based on a reference block in a reference region displaced from the current block by BV.
[0228] Clause 18. The method of any one of clauses 15 to 17, further comprising determining symptoms of BVD.
[0229] Clause 19. A method according to any one of clauses 15 to 18, wherein determining the signs of BVD comprises determining that the signs are negative based on the BVP being a first BVP, or determining that the signs are positive based on the BVP being a second BVP.
[0230] Clause 20. The method of any one of clauses 15 to 19, wherein determining the BV further comprises assigning a signature to a non-null component of the BVD.
[0231] Clause 21. The method of any one of clauses 15 to 20, wherein determining the BV further comprises determining the non-null component of the BV by combining the non-null component of the BVP with the non-null component of the BVD.
[0232] Clause 22. The method of any one of clauses 15 to 21, wherein the indication of the magnitude of the BVD comprises the absolute value of a non-null component of the BVD.
[0233] Clause 23. The method of any one of clauses 15 to 22, wherein BV includes a null vertical component or a null horizontal component.
[0234] Clause 24. The method of any one of clauses 15 to 23, wherein the dimension of the current block is the height of the current block or the width of the current block.
[0235] Clause 25. The method of any one of clauses 15 to 24, wherein the boundaries of the reference region include a topmost boundary of the reference region that is above the current block or a leftmost boundary of the reference region that is to the left of the current block.
[0236] Clause 26. The method of any one of clauses 15 to 25, further comprising inserting the first BVP and the second BVP into a BVP candidate list.
[0237] Clause 27. The method of any one of clauses 15 to 26, further comprising receiving a residual for the current block.
[0238] Clause 28. The method of any one of clauses 15 to 27, wherein decoding the current block includes decoding the current block based on combining the reference block with a residual of the current block.
[0239] Clause 29. The method of any one of clauses 15 to 28, wherein the residual is based on the difference between the current block and the reference block.
[0240] Clause 30. 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 a method according to any one of clauses 15 to 29.
[0241] Clause 31. A system comprising: a first computing device configured to perform the method of any one of clauses 15 to 29; and a second computing device configured to transmit an indication of the size of the BVD and an indication of the BVP.
[0242] Clause 32. A computer-readable medium storing instructions that, when executed, cause performance of the method of any one of clauses 15 to 29.
[0243] Clause 33. A method comprising: determining, by a computing device, a composite block vector predictor (BVP) based on a first BVP and a second BVP in a BVP candidate list.
[0244] Clause 34. The method of clause 33, further comprising receiving an indication associated with the combined BVP and an indication of the magnitude of the block vector difference (BVD).
[0245] Clause 35. The method of clause 33 or 34, further comprising determining a block vector (BV) based on the combined BVP, BVD magnitude, and BVD sign.
[0246] Clause 35. The method of any one of clauses 33 to 35, further comprising decoding the current block based on a reference block in a reference region displaced from the current block by BV.
[0247] Clause 36. The method of any one of clauses 33 to 36, wherein determining the combined BVP based on the first BVP and the second BVP includes determining a linear combination of a non-null component of the first BVP multiplied by a first weighting factor, a non-null component of the second BVP multiplied by a second weighting factor, and an offset value.
[0248] Clause 37. The method of any one of clauses 33 to 37, further comprising determining that the indication for BVD is negative based on an indication associated with the combined BVP indicating that the combined BVP is less than the BV.
[0249] Clause 38. The method of any one of clauses 33 to 38, further comprising determining that the indication for BVD is positive based on an indication associated with the combined BVP indicating that the combined BVP is greater than the BV.
[0250] Clause 39. The method of any one of clauses 33 to 39, wherein determining BV based on the combined BVP, magnitude of BVD, and signs of BVD further comprises determining a non-null component of BV by combining the non-null component of the combined BVP with the non-null component of the determined BVD.
[0251] Clause 40. The method of any one of clauses 33 to 40, wherein BV comprises a null vertical component or a null horizontal component.
[0252] Clause 41. The method of any one of clauses 33 to 41, wherein the indication associated with the combined BVP is one of a flag or an index.
[0253] Clause 42. The method of any one of clauses 33 to 42, further comprising receiving a residual for the current block.
[0254] Clause 43. The method of any one of clauses 33 to 43, wherein decoding the current block comprises decoding the current block based on combining the reference block with a residual of the current block.
[0255] Clause 44. 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 a method according to any one of clauses 33 to 44.
[0256] Clause 45. A system comprising: a first computing device configured to perform the method of any one of clauses 33 to 44; and a second computing device configured to transmit an indication of the size of the BVD and an indication of the BVP.
[0257] Clause 46. A computer-readable medium storing instructions that, when executed, cause performance of the method of any one of clauses 33-44.
[0258] Clause 47. A method comprising determining a position of a reference block in a reference region displaced from a position of a current block by a block vector (BV).
[0259] Clause 48. The method of clause 47, further comprising determining a combined block vector predictor (BVP) based on the first BVP and the second BVP in the BVP candidate list.
[0260] Clause 49. The method of clause 47 or 48, further comprising determining a magnitude of a block vector difference (BVD) based on the difference between the BV and the combined BVP.
[0261] Clause 50. The method of any one of clauses 47 to 49, further comprising transmitting an indication associated with the combined BVP and an indication of the size of the BVD.
[0262] Clause 51. The method of any one of clauses 47 to 50, wherein determining the combined BVP based on the first BVP and the second BVP includes determining a linear combination of a non-null component of the first BVP multiplied by a first weighting factor, a non-null component of the second BVP multiplied by a second weighting factor, and an offset value.
[0263] Clause 52. The method of any one of clauses 47 to 51, wherein transmitting an indication associated with the combined BVP includes signaling an indication of whether the combined BVP is less than the BV or greater than the BV.
[0264] Clause 53. A method according to any one of clauses 47 to 52, wherein BV comprises a null vertical component or a null horizontal component.
[0265] Clause 54. The method of any one of clauses 47 to 53, further comprising determining a residual for the current block based on a difference between the current block and the reference block.
[0266] Clause 55. The method of any one of clauses 47 to 54, further comprising transmitting a residual for the current block.
[0267] Clause 56. 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 a method according to any one of clauses 47 to 55.
[0268] Clause 57. A system comprising: a first computing device configured to perform the method of any one of clauses 47 to 55; and a second computing device configured to transmit an indication of the size of the BVD and an indication of the BVP.
[0269] Clause 58. A computer-readable medium storing instructions that, when executed, cause performance of the method of any one of clauses 47 to 55.
[0270] A computing device may perform a method including multiple operations. The computing device may select a block vector predictor (BVP) from among a first BVP determined based on dimensions of the current block and a second BVP determined based on a displacement from the position of the current block to a boundary of the reference region. The computing device may determine a magnitude of a block vector difference (BVD) based on a difference between the reference block and a BV associated with the BVP. The computing device may transmit an indication of the BVP and an indication of the magnitude of the BVD. The computing device may also perform one or more additional operations. The indication of the magnitude of the BVD may include an absolute value of a non-null component of the BVD. The BV may include a null vertical component or a null horizontal component. The dimensions of the current block may be the height of the current block or the width of the current block. The boundary of the reference region may include a topmost boundary of the reference region above the current block or a leftmost boundary of the reference region to the left of the current block. The computing device may transmit a residual associated with the current block. The residual may be based on a difference between the current block and the reference block. The BVP may include a null component and a non-null component. The non-null components of the BVP may be in the same direction as the non-null components of the BV. The indication of the BVP may include an index. The computing device may insert the first BVP and the second BVP into a BVP candidate list. 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 receive an indication of the magnitude of the BVD and an indication of the BVP. A computer-readable medium may store instructions that, when executed, cause the described methods to be performed, additional operations, and / or include additional elements.
[0271] A computing device may perform a method including multiple operations. The computing device may receive an indication of a magnitude of a block vector difference (BVD) and an indication of a block vector predictor (BVP). The BVP may include one of a first BVP determined based on a dimension of the current block and a second BVP determined based on a displacement from the position of the current block to a boundary of a reference region. The computing device may determine a block vector (BV) based on the BVP, the magnitude of the BVD, and an indication of the BVD. The computing device may decode the current block based on a reference block in the reference region displaced from the current block by the BV. The computing device may also perform one or more additional operations. The computing device may determine an indication of BVD. Determining an indication of BVD may include determining that the indication is negative based on the BVP being the first BVP, or determining that the indication is positive based on the BVP being the second BVP. Determining the BV may include assigning the indication to a non-null component of the BVD. Determining the BV may include determining a non-null component of the BV by combining the non-null component of the BVP with the non-null component of the BVD. The indication of the magnitude of the BVD may include an absolute value of the non-null component of the BVD. The BV may include a null vertical component or a null horizontal component. The dimension of the current block may be the height of the current block or the width of the current block. The boundary of the reference region may include a topmost boundary of the reference region above the current block or a leftmost boundary of the reference region to the left of the current block. The computing device may insert the first BVP and the second BVP into a BVP candidate list. The computing device may receive a residual of the current block. Decoding the current block may include decoding the current block based on combining the reference block with the residual of the current block. The residual may be based on a difference between the current block and the reference block.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 transmit an indication of the BVD magnitude and an indication of the BVP. A computer-readable medium may store instructions that, when executed, cause the described methods to be performed, additional operations, and / or include additional elements.
[0272] A computing device may perform a method including multiple operations. The computing device may determine a combined block vector predictor (BVP) based on a first BVP and a second BVP in a BVP candidate list. The computing device may receive an indication associated with the combined BVP and an indication of the magnitude of a block vector difference (BVD). The computing device may determine a block vector (BV) based on the combined BVP, the magnitude of the BVD, and a sign of the BVD. The computing device may decode the current block based on a reference block in a reference region that is displaced from the current block by the BV. The computing device may also perform one or more additional operations. Determining the combined BVP based on the first BVP and the second BVP may include determining a linear combination of a non-null component of the first BVP multiplied by a first weighting factor, a non-null component of the second BVP multiplied by a second weighting factor, and an offset value. The computing device may determine that the indication of BVD is negative based on an indication associated with the combined BVP indicating that the combined BVP is smaller than the BV. The computing device may determine that the indication of BVD is positive based on an indication associated with the combined BVP indicating that the combined BVP is greater than the BV. Determining the BV based on the combined BVP, the magnitude of the BVD, and the indication of BVD may include determining a non-null component of the BV by combining a non-null component of the combined BVP with a non-null component of the determined BVD. The BV may include a null vertical component or a null horizontal component. The indication associated with the combined BVP may be one of a flag or an index. The computing device may receive a residual of the current block. Decoding the current block may include decoding the current block based on combining the reference block with the residual of the current block.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 transmit an indication of the magnitude of the BVD and an indication associated with the combined BVP. A computer-readable medium may store instructions that, when executed, cause the described methods to be performed, additional operations, and / or include additional elements.
[0273] The computing device may perform a method including a plurality of operations. The computing device may determine a position of a reference block in a reference region displaced from a position of a current block by a block vector (BV). The computing device may determine a combined block vector predictor (BVP) based on a first BVP and a second BVP in a BVP candidate list. The computing device may determine a magnitude of a block vector difference (BVD) based on a difference between the BV and the combined BVP. The computing device may transmit an indication associated with the combined BVP and an indication of the magnitude of the BVD. The computing device may also perform one or more additional operations. Determining the combined BVP based on the first BVP and the second BVP may include determining a linear combination of a non-null component of the first BVP multiplied by a first weighting factor, a non-null component of the second BVP multiplied by a second weighting factor, and an offset value. Transmitting an indication associated with the combined BVP may include signaling an indication of whether the combined BVP is less than the BV or greater than the BV. The BV may include a null vertical component or a null horizontal component. The computing device may determine a residual for the current block based on a difference between the current block and the reference block. The computing device may transmit the residual for the current block. 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 receive an indication of the magnitude of the BVD and an instruction associated with the combined BVP. A computer-readable medium may store instructions that, when executed, cause the described methods, additional operations, and / or include additional elements.
[0274] One or more examples 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. While a flowchart may describe operations as a sequential process, 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 the calling function or the main function.
[0275] 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.
[0276] 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 perform particular tasks or implement particular abstract data types when executed by a processor or data processing device within a computer. 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. Certain 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. Computer-readable media 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. Computer-readable media 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.
[0277] 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. A device, or one or more devices, such as in a system, may include one or more processors, memory, interfaces, and / or the like.
[0278] 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 examples 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.
[0279] One or more elements of the examples 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 in combination 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 construction 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.
[0280] 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 communication 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 of device configuration, traffic load, initial system setup, packet size, traffic characteristics, a combination of the above, and / or the like. Various examples may be used when one or more criteria are met. It may be possible to implement any part of the examples described herein in any order and based on any condition.
[0281] While examples are described above, features and / or steps of these examples 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 a part of this specification and are intended to be within the spirit and scope of the description herein. Accordingly, the foregoing description is by way of example only and not by way of limitation.
Claims
1. 1. A method comprising: receiving, by a computing device, an indication of a block vector difference (BVD) magnitude and an indication of a block vector predictor (BVP), the BVP comprising: a first BVP determined based on the size of the current block; a second BVP determined based on a displacement from the position of the current block to a boundary of a reference region; determining a block vector (BV) based on the BVP, the magnitude of the BVD, and a sign of the BVD; and decoding the current block based on a reference block in the reference region that is displaced from the current block by the BV.
2. and determining an indication of the BVD, wherein the determining the indication of the BVD comprises: determining that the indication is negative based on the BVP being the first BVP; or 2. The method of claim 1, comprising determining that the indication is positive based on the BVP being the second BVP.
3. The method of claim 1 or 2, wherein the determining the BV further comprises assigning a sign to a non-null component of the BVD.
4. 4. The method of claim 1, wherein the determining the BV further comprises determining a non-null component of the BV by combining a non-null component of the BVP with a non-null component of the BVD.
5. The method of any one of claims 1 to 4, wherein the indication of the magnitude of the BVD comprises the absolute value of a non-null component of the BVD.
6. The method of any one of claims 1 to 5, wherein the BV comprises a null vertical component or a null horizontal component.
7. The method of any one of claims 1 to 6, wherein the dimension of the current block is the height of the current block or the width of the current block.
8. The boundary of the reference region is the top boundary of the reference region above the current block, or The method of any one of claims 1 to 7, including a leftmost boundary of the reference region to the left of the current block.
9. The method of any one of claims 1 to 8, further comprising inserting the first BVP and the second BVP into a BVP candidate list.
10. The method of any one of claims 1 to 9, further comprising receiving a residual for the current block.
11. The method of claim 10 , wherein the decoding the current block comprises decoding the current block based on combining the reference block with the residual of the current block.
12. The method of claim 10 or 11, wherein the residual is based on the difference between the current block and the reference block.
13. 1. A computing device comprising: one or more processors; a memory storing instructions that, when executed by said one or more processors, cause said computing device to perform the method of 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 transmit the indication of the size of the BVD and the indication of the BVP.
15. A computer readable medium storing instructions that, when executed, cause performance of the method of any one of claims 1 to 12.
Citation Information
Patent Citations
Intra-block copy block vector signaling for video coding
JP2017519447A