Fractional Pel Block Vectors for Video Coding

Fractional pel resolution block vectors enhance coding efficiency by enabling IBC and intra-TMP techniques for natural content, addressing limitations of integer pel resolution in existing video coding standards.

JP2026502450APending Publication Date: 2026-01-23QUALCOMM INC
View PDF 0 Cites 0 Cited by

Patent Information

Application Number
JP2025538012
Authority / Receiving Office
JP · JP
Patent Type
Applications
Current Assignee / Owner
Priority Date
2024-01-10
Filing Date
2024-01-11
Publication Date
2026-01-23

AI Technical Summary

Technical Problem

Existing video coding techniques, such as HEVC, VVC, and AV1, limit coding gains for natural content by restricting block vectors to integer pel resolution, which is suitable only for screen content, thereby reducing efficiency for other types of content.

Method used

Implementing block vectors with fractional pel resolution to identify positions between samples within the same picture, enabling Intra Block Copy (IBC) and Intra Template Matching (TMP) techniques for improved coding efficiency on natural content.

Benefits of technology

Enhances coding efficiency by allowing fractional pel resolution block vectors to provide additional coding modes, improving compression performance beyond what integer pel resolution can achieve.

✦ Generated by Eureka AI based on patent content.

Smart Images

  • Figure 2026502450000001_ABST
    Figure 2026502450000001_ABST
Patent Text Reader

Abstract

A method for encoding or decoding video data includes determining a block vector for a current block of a current picture, the block vector identifying fractional pel positions between reference samples in the current picture and having a fractional pel resolution that is less than the integer pel resolution; generating a predictive block from the reference samples in the current picture based on the fractional pel positions; and encoding or decoding the current block based on the predictive block.
Need to check novelty before this filing date? Find Prior Art

Description

[Technical Field]

[0001] This application claims priority to U.S. Patent Application No. 18 / 408,928, filed January 10, 2024, and U.S. Provisional Patent Application No. 63 / 493,093, filed March 30, 2023, and U.S. Provisional Patent Application No. 63 / 479,720, filed January 12, 2023, the entire contents of which are incorporated herein by reference. U.S. Patent Application No. 18 / 408,928, filed January 10, 2024, claims the benefit of U.S. Provisional Patent Application No. 63 / 493,093, filed March 30, 2023, and U.S. Provisional Patent Application No. 63 / 479,720, filed January 12, 2023.

[0002]

[0002] This disclosure relates to video encoding and decoding. [Background technology]

[0003]

[0003] Digital video capabilities can be incorporated into a wide range of devices, including digital televisions, digital direct broadcast systems, wireless broadcast systems, personal digital assistants (PDAs), laptop or desktop computers, tablet computers, e-book readers, digital cameras, digital recording devices, digital media players, video gaming devices, video game consoles, cellular or satellite wireless telephones, so-called "smartphones," video teleconferencing devices, video streaming devices, and the like. Digital video devices implement video coding techniques such as those described in standards defined by MPEG-2, MPEG-4, ITU-T H.263, ITU-T H.264 / MPEG-4, Part 10, Advanced Video Coding (AVC), ITU-T H.265 / High Efficiency Video Coding (HEVC), ITU-T H.266 / Versatile Video Coding (VVC), and extensions to such standards, as well as proprietary video codecs / formats such as AOMedia Video 1 (AV1) developed by the Alliance for Open Media. By implementing such video coding techniques, video devices may more efficiently transmit, receive, encode, decode, and / or store digital video information.

[0004]

[0004] Video coding techniques include spatial (intra-picture) prediction and / or temporal (inter-picture) prediction to reduce or remove redundancy inherent in video sequences. In block-based video coding, video slices (e.g., video pictures or portions of video pictures) may be partitioned into video blocks, which may also be referred to as coding tree units (CTUs), coding units (CUs), and / or coding nodes. Video blocks in intra-coded (I) slices of a picture are encoded using spatial prediction with respect to reference samples in neighboring blocks in the same picture. Video blocks in inter-coded (P or B) slices of a picture may use spatial prediction with respect to reference samples in neighboring blocks in the same picture or temporal prediction with respect to reference samples in other reference pictures. A picture may be referred to as a frame, and a reference picture may be referred to as a reference frame. Summary of the Invention

[0005]

[0005] Generally, the present invention describes Intra Block Copy (IBC) and Intra Template Matching (TMP) techniques with support for fractional pel block vectors. The disclosed methods can be applied to any of the existing video codecs, such as High Efficiency Video Coding (HEVC), Versatile Video Coding (VVC), Essential Video Coding (EVC), or can be an efficient coding feature in future video coding standards (e.g., Enhanced Compression Model (ECM)).

[0006]

[0006] As described in more detail, in one or more examples, block vectors (e.g., vectors for a current block that identify locations within the same picture as the current block) may have fractional pel resolution, meaning that the block vectors identify locations between samples within the current picture. By having fractional pel resolution block vectors, example techniques may enable IBC and / or intra-TMP to be used for natural content in addition to screen content, thus providing additional coding modes to further increase coding efficiency.

[0007]

[0007] In one example, the present disclosure describes a method for encoding or decoding video data, the method including determining a block vector for a current block of a current picture, the block vector identifying fractional pel positions between reference samples in the current picture and having a fractional pel resolution that is less than the integer pel resolution, generating a predictive block from the reference samples in the current picture based on the fractional pel positions, and encoding or decoding the current block based on the predictive block.

[0008]

[0008] In one example, the present disclosure describes a device for encoding or decoding video data, the device comprising one or more memories configured to store the video data and processing circuitry coupled to the one or more memories, the processing circuitry configured to: determine a block vector for a current block of a current picture of the video data, the block vector identifying fractional pel positions between reference samples in the current picture and having a fractional pel resolution that is less than the integer pel resolution; generate a predictive block from the reference samples in the current picture based on the fractional pel positions; and encode or decode the current block based on the predictive block.

[0009]

[0009] In one example, the present disclosure describes a computer-readable storage medium storing instructions that, when executed, cause one or more processors to determine a block vector for a current block of a current picture, where the block vector identifies fractional pel positions between reference samples in the current picture and has a fractional pel resolution that is less than the integer pel resolution, generate a predictive block from the reference samples in the current picture based on the fractional pel positions, and encode or decode the current block based on the predictive block.

[0010]

[0010] The details of one or more examples are set forth in the accompanying drawings and the description below. Other features, objects, and advantages will become apparent from the description, drawings, and claims. [Brief explanation of the drawings]

[0011] [Figure 1]

[0011] FIG. 1 is a block diagram illustrating an example video encoding and decoding system that may implement the techniques of this disclosure. [Figure 2]

[0012] FIG. 2 is a block diagram illustrating an example video encoder that may perform the techniques of this disclosure. [Figure 3]

[0013] FIG. 2 is a block diagram illustrating an example video decoder that may perform the techniques of this disclosure. [Figure 4]

[0014] 10 is a flowchart illustrating an example method for encoding a current block, in accordance with techniques of this disclosure. [Figure 5]

[0015] 10 is a flowchart illustrating an example method for decoding a current block, in accordance with techniques of this disclosure. [Figure 6]

[0016] FIG. 1 is a conceptual diagram illustrating an example of intra block copy (IBC). [Figure 7]

[0017] FIG. 1 is a conceptual diagram illustrating an example of template matching for a search area around an initial motion vector (MV). [Figure 8]

[0018] FIG. 10 is a conceptual diagram illustrating an example of an intra-template matching search area. [Figure 9]

[0019] 9A to 9D are conceptual diagrams illustrating examples of intra block copy (IBC) reference areas that depend on the current coding unit (CU) position. [Figure 10]

[0020] 10A and 10B are conceptual diagrams illustrating examples of block vectors that identify fractional pel locations and have fractional pel resolution. [Figure 11]

[0021] 1 is a flowchart illustrating an example method for encoding or decoding video data, in accordance with techniques of this disclosure. DETAILED DESCRIPTION OF THE INVENTION

[0012]

[0022] In video coding, a video encoder determines a predictive block for a current block based on one or more reference samples. The video encoder determines residual information indicating the difference between the current block and the predictive block and signals the residual information. The video decoder determines the predictive block for the current block using the same technique as the video encoder. The video decoder sums the predictive block and the residual information to reconstruct the current block.

[0013]

[0023] One exemplary way to determine the predictive block is from a reference sample in a different picture from the current block or from a reference sample in the same picture as the current block. For example, in the case of inter prediction, the video encoder may determine a motion vector that identifies a location in the reference picture. From the identified location, the video encoder may determine the predictive block. The video encoder may signal to the video decoder information that the video decoder uses to determine the motion vector and the reference picture, so that the video decoder can determine the predictive block in the same manner as the video encoder.

[0014]

[0024] Intra block copying (IBC) and intra template matching (intra-TMP) are exemplary video coding modes in which a predictive block is determined from reference samples in the same picture as a current block. For example, a video encoder may determine a block vector that identifies a location within the current picture. As with inter prediction, the video encoder may determine a predictive block from the identified location. The video encoder may signal to a video decoder information that the video decoder uses to determine the block vector, so that the video decoder can determine the predictive block in the same manner as the video encoder.

[0015]

[0025] IBC and intra-TMP modes may generally be used for screen content that is rendered on an integer grid, which typically has a sharp signal. Thus, block vectors for IBC and intra-TMP modes may have integer pel resolution (e.g., 1-pel or 4-pel resolution). With integer pel resolution, the block vector identifies a location within the current picture with the current block where the reference sample is located.

[0016]

[0026] There may be benefits to using IBC mode or Intra-TMP mode for content in addition to screen content. However, block vectors with integer pel resolution may limit coding gains over IBC or Intra-TMP for content other than screen content. Therefore, this disclosure describes examples of determining a block vector for a current block of a current picture. In one or more examples, the block vector identifies fractional pel positions between samples in the current picture and has a fractional pel resolution that is less than integer pel resolution. For example, rather than pointing to samples in the current picture, the block vector may point to positions between samples. Examples of fractional pel resolution include half pel, quarter pel, ⅛ pel, etc.

[0017]

[0027] In this way, the exemplary technique enables the benefits of video coding using block vectors, but not of non-screen content, such as natural content. IBC or intra-TMP is used as an example, and the technique is not limited to IBC or intra-TMP, but can be extended in general to block vectors with fractional pel resolution.

[0018]

[0028] 1 is a block diagram illustrating an example video encoding and decoding system 100 that may perform techniques of this disclosure. The techniques of this disclosure are generally directed to coding (encoding and / or decoding) video data. Generally, video data includes any data for processing video. Thus, video data may include raw uncoded video, coded video, decoded (e.g., reconstructed) video, and video metadata, such as signaling data.

[0019]

[0029] 1 , in this example, system 100 includes a source device 102 that provides encoded video data to be decoded and displayed by a destination device 116. Specifically, source device 102 provides the video data to destination device 116 via a computer-readable medium 110. Source device 102 and destination device 116 may be or include any of a wide range of devices, such as a desktop computer, a notebook (i.e., laptop) computer, a mobile device, a tablet computer, a set-top box, a telephone handset such as a smartphone, a television, a camera, a display device, a digital media player, a video gaming console, a video streaming device, a broadcast receiver device, etc. In some cases, source device 102 and destination device 116 may be capable of wireless communication and thus may be referred to as wireless communication devices.

[0020]

[0030] In the example of FIG. 1 , source device 102 includes video source 104, memory 106, video encoder 200, and output interface 108. Destination device 116 includes input interface 122, video decoder 300, memory 120, and display device 118. According to this disclosure, video encoder 200 of source device 102 and video decoder 300 of destination device 116 may be configured to apply techniques for fractional-pel block vectors for video coding. Thus, source device 102 represents an example of a video encoding device, while destination device 116 represents an example of a video decoding device. In other examples, the source device and destination device may include other components or configurations. For example, source device 102 may receive video data from an external video source, such as an external camera. Similarly, destination device 116 may interface with an external display device rather than including an integrated display device.

[0021]

[0031] System 100 as shown in FIG. 1 is merely an example. In general, any digital video encoding and / or decoding device may implement techniques for fractional-pel block vectors for video coding. Source device 102 and destination device 116 are merely examples of coding devices, such that source device 102 generates coded video data that destination device 116 transmits to source device 102. This disclosure refers to devices that perform coding (encoding and / or decoding) of data as “coding” devices. Accordingly, video encoder 200 and video decoder 300 represent examples of coding devices, specifically, video encoders and video decoders, respectively. In some examples, source device 102 and destination device 116 may operate in a substantially symmetrical manner, such that source device 102 and destination device 116 each include video encoding and decoding components. Thus, system 100 may support unidirectional or bidirectional video transmission between source device 102 and destination device 116, e.g., for video streaming, video playback, video broadcasting, or video telephony.

[0022]

[0032] Generally, video source 104 represents a source of video data (i.e., raw, unencoded video data) and provides a continuous series of pictures (also called “frames”) of the video data to video encoder 200, which encodes the picture data. Video source 104 of source device 102 may include a video capture device such as a video camera, a video archive containing previously captured raw video, and / or a video feed interface that receives video from a video content provider. As a further alternative, video source 104 may generate computer-graphics-based data as source video, or a combination of live video, archived video, and computer-generated video. In each case, video encoder 200 encodes the captured, pre-captured, or computer-generated video data. Video encoder 200 may reorder the pictures from the order in which they were received (sometimes referred to as “display order”) into a coding order for coding. Video encoder 200 may generate a bitstream containing the encoded video data. Source device 102 may then output the encoded video data via output interface 108 to computer-readable medium 110, for receipt and / or retrieval by input interface 122 of destination device 116, for example.

[0023]

[0033] Memory 106 of source device 102 and memory 120 of destination device 116 represent general-purpose memory. In some examples, memory 106, 120 may store raw video data, e.g., raw video from video source 104 and raw decoded video data from video decoder 300. Additionally or alternatively, memory 106, 120 may store software instructions executable by, e.g., video encoder 200 and video decoder 300, respectively. While memory 106 and memory 120 are shown separate from video encoder 200 and video decoder 300 in this example, it should be understood that video encoder 200 and video decoder 300 may also include internal memory for functionally similar or equivalent purposes. Furthermore, memory 106, 120 may store, e.g., encoded video data output from video encoder 200 and input to video decoder 300. In some examples, a portion of the memory 106, 120 may be allocated as one or more video buffers, for example, to store raw video data, decoded video data, and / or encoded video data.

[0024]

[0034] The computer-readable medium 110 may represent any type of medium or device capable of transferring encoded video data from the source device 102 to the destination device 116. In one example, the computer-readable medium 110 represents a communication medium that enables the source device 102 to transmit encoded video data directly to the destination device 116 in real time, for example, via a radio frequency network or a computer-based network. The output interface 108 may modulate a transmission signal containing the encoded video data, and the input interface 122 may demodulate a received transmission signal in accordance with a communication standard such as a wireless communication protocol. The communication medium may include any wireless or wired communication medium, such as the radio frequency (RF) spectrum or one or more physical transmission lines. The communication medium may form part of a packet-based network, such as a local area network, a wide area network, or a global network such as the Internet. The communication medium may include routers, switches, base stations, or any other equipment that may be useful for facilitating communication from the source device 102 to the destination device 116.

[0025]

[0035] In some examples, source device 102 may output encoded data from output interface 108 to storage device 112. Similarly, destination device 116 may access encoded data from storage device 112 via input interface 122. Storage device 112 may include any of a variety of distributed or locally accessed data storage media, such as a hard drive, Blu-ray Disc, DVD, CD-ROM, flash memory, volatile or non-volatile memory, or any other suitable digital storage medium that stores encoded video data.

[0026]

[0036] In some examples, source device 102 may output encoded video data to file server 114 or another intermediate storage device that may store the encoded video data generated by source device 102. Destination device 116 may access the stored video data from file server 114 via streaming or download.

[0027]

[0037] File server 114 may be any type of server device capable of storing encoded video data and transmitting the encoded video data to destination device 116. File server 114 may represent a web server (e.g., for a website), a server configured to provide file transfer protocol services (such as File Transfer Protocol (FTP) or File Delivery over Unidirectional Transport (FLUTE) protocol), a content delivery network (CDN) device, a hypertext transfer protocol (HTTP) server, a Multimedia Broadcast Multicast Service (MBMS) or Enhanced MBMS (eMBMS) server, and / or a network attached storage (NAS) device. The file server 114 may additionally or alternatively implement one or more HTTP streaming protocols, such as Dynamic Adaptive Streaming over HTTP (DASH), HTTP Live Streaming (HLS), Real Time Streaming Protocol (RTSP), HTTP Dynamic Streaming, etc.

[0028]

[0038] Destination device 116 may access the encoded video data from file server 114 through any standard data connection, including an Internet connection. This may include a wireless channel (e.g., a Wi-Fi connection), a wired connection (e.g., a digital subscriber line (DSL), a cable modem, etc.), or a combination of both suitable for accessing encoded video data stored on file server 114. Input interface 122 may be configured to operate according to any one or more of the various protocols described above to retrieve or receive media data from file server 114, or other such protocols to retrieve media data.

[0029]

[0039] Output interface 108 and input interface 122 may represent a wireless transmitter / receiver, a modem, a wired network component (e.g., an Ethernet card), a wireless communication component operating according to any of the various IEEE 802.11 standards, or other physical components. In examples in which output interface 108 and input interface 122 include wireless components, output interface 108 and input interface 122 may be configured to transfer data, such as encoded video data, according to a cellular communication standard, such as 4G, 4G-LTE (Long Term Evolution), LTE-Advanced, 5G, etc. In some examples in which output interface 108 includes a wireless transmitter, output interface 108 and input interface 122 may be configured to transfer data, such as encoded video data, according to other wireless standards, such as the IEEE 802.11 standard, the IEEE 802.15 standard (e.g., ZigBee™), the Bluetooth™ standard, etc. In some examples, source device 102 and / or destination device 116 may include respective system-on-chip (SoC) devices. For example, source device 102 may include an SoC device that performs functionality attributed to video encoder 200 and / or output interface 108, and destination device 116 may include an SoC device that performs functionality attributed to video decoder 300 and / or input interface 122.

[0030]

[0040] The techniques of this disclosure may be applied to video coding supporting any of a variety of multimedia applications, such as over-the-air television broadcast, cable television transmission, satellite television transmission, Internet streaming video transmission such as Dynamic Adaptive Streaming over HTTP (DASH), digital video encoded on a data storage medium, decoding of digital video stored on a data storage medium, or other applications.

[0031]

[0041] The input interface 122 of the destination device 116 receives an encoded video bitstream from a computer-readable medium 110 (e.g., a communications medium, a storage device 112, a file server 114, etc.). The encoded video bitstream may include signaling information defined by the video encoder 200 that is also used by the video decoder 300, such as syntax elements having values ​​that describe characteristics and / or processing of video blocks or other coded units (e.g., slices, pictures, groups of pictures, sequences, etc.). The display device 118 displays decoded pictures of the decoded video data to a user. The display device 118 may represent any of a variety of display devices, such as a liquid crystal display (LCD), a plasma display, an organic light emitting diode (OLED) display, or another type of display device.

[0032]

[0042] Although not shown in FIG. 1, in some examples, the video encoder 200 and the video decoder 300 may each be integrated with an audio encoder and / or an audio decoder, and may include appropriate MUX-DEMUX units or other hardware and / or software to handle multiplexed streams containing both audio and video in a common data stream.

[0033]

[0043] The video encoder 200 and the video decoder 300 may each be implemented as any of a variety of suitable encoder and / or decoder circuitry, such as one or more microprocessors, digital signal processors (DSPs), application specific integrated circuits (ASICs), field programmable gate arrays (FPGAs), discrete logic, software, hardware, firmware, or any combination thereof. When the techniques are performed partially in software, a device may store instructions for the software in a suitable non-transitory computer-readable medium and execute the instructions in hardware using one or more processors to perform the techniques of this disclosure. Each of the video encoder 200 and the video decoder 300 may be included in one or more encoders or decoders, any of which may be integrated as part of a combined encoder / decoder (CODEC) in the respective device. Devices including the video encoder 200 and / or the video decoder 300 may implement the video encoder 200 and / or the video decoder 300 in processing circuitry, such as an integrated circuit and / or a microprocessor. Such a device may be a wireless communication device, such as a cellular telephone, or any other type of device described herein.

[0034]

[0044] The video encoder 200 and the video decoder 300 may operate according to a video coding standard such as ITU-T H.265, also known as High Efficiency Video Coding (HEVC), or an extension thereof, such as multiview and / or scalable video coding extensions. Alternatively, the video encoder 200 and the video decoder 300 may operate according to other proprietary or industry standards, such as ITU-T H.266, also known as Generic Video Coding (VVC). In other examples, the video encoder 200 and the video decoder 300 may operate according to a proprietary video codec / format, such as AOMedia Video 1 (AV1), an extension of AV1, and / or a successor version of AV1 (e.g., AV2). In other examples, the video encoder 200 and the video decoder 300 may operate according to other proprietary formats or industry standards. However, the techniques of this disclosure are not limited to any particular coding standard or format.

[0035]

[0045] In general, video encoder 200 and video decoder 300 may be configured to perform the techniques of the present invention with any video coding technique that uses block vectors, such as intra block copy (IBC) mode or intra template matching (intra-TMP) mode, as two non-limiting examples. A block vector refers to a vector that identifies (e.g., points to) a location within the same picture as the block being coded or decoded. Some techniques have limited block vectors to integer pel resolution. While integer pel resolution may work well for screen content coding, integer pel resolution block vectors may not provide limited coding gain for non-screen content coding.

[0036]

[0046] However, there may be benefits to using reference samples within the same picture as the current picture for prediction of the current block. As described in more detail, this disclosure describes examples having block vectors with fractional pel resolution (e.g., the block vectors point to positions between samples within a picture, rather than where the samples are located). Thus, exemplary techniques provide coding gains associated with using block vectors while minimizing coding inefficiencies from limiting block vectors to integer pel resolution (e.g., when the block vectors point to positions within a picture where samples are located).

[0037]

[0047] Generally, the video encoder 200 and the video decoder 300 may perform block-based coding of pictures. The term “block” generally refers to a structure containing data to be processed (e.g., encoded, decoded, or used in the encoding and / or decoding process). For example, a block may include a two-dimensional matrix of luminance and / or chrominance data samples. Generally, the video encoder 200 and the video decoder 300 may code video data represented in YUV (e.g., Y, Cb, Cr) format. That is, rather than coding red, green, and blue (RGB) data for picture samples, the video encoder 200 and the video decoder 300 may code luminance and chrominance components, which may include both red and blue chrominance components. In some examples, the video encoder 200 converts received RGB-format data to a YUV representation before encoding, and the video decoder 300 converts the YUV representation to RGB format. Alternatively, pre-processing and post-processing units (not shown) may perform these transformations.

[0038]

[0048] This disclosure may generally refer to coding (e.g., encoding and decoding) a picture as including the process of encoding or decoding data for a picture. Similarly, this disclosure may refer to coding a block of a picture as including the process of encoding or decoding data for the block, e.g., predictive and / or residual coding. A coded video bitstream generally includes a series of values ​​of syntax elements that represent coding decisions (e.g., coding modes) and the partitioning of a picture into blocks. Thus, references to coding a picture or a block should generally be understood as coding values ​​of the syntax elements that form the picture or block.

[0039]

[0049] HEVC defines various blocks, including coding units (CUs), prediction units (PUs), and transform units (TUs). According to HEVC, a video coder (such as video encoder 200) partitions coding tree units (CTUs) into CUs according to a quadtree structure. That is, the video coder partitions CTUs and CUs into four equal, non-overlapping squares, and each node of the quadtree has either zero or four child nodes. A node with no child nodes may be called a "leaf node," and a CU of such a leaf node may include one or more PUs and / or one or more TUs. The video coder may further partition PUs and TUs. For example, in HEVC, a residual quadtree (RQT) represents the partitioning of TUs. In HEVC, a PU represents inter-predicted data, and a TU represents residual data. An intra-predicted CU includes intra-prediction information, such as an intra-mode indication.

[0040]

[0050] As another example, video encoder 200 and video decoder 300 may be configured to operate according to VVC. According to VVC, a video coder (such as video encoder 200) partitions a picture into multiple CTUs. Video encoder 200 may partition the CTUs according to a tree structure, such as a quadtree-binary tree (QTBT) structure or a multi-type tree (MTT) structure. The QTBT structure eliminates the concept of multiple partition types, such as the separation between CUs, PUs, and TUs in HEVC. The QTBT structure includes two levels: a first level partitioned according to quadtree partitioning and a second level partitioned according to binary tree partitioning. The root node of the QTBT structure corresponds to a CTU. The leaf nodes of the binary tree correspond to CUs.

[0041]

[0051] In the MTT partitioning structure, blocks may be partitioned using quadtree (QT) partitioning, binary tree (BT) partitioning, and one or more types of triple tree (TT) (also called ternary tree (TT)) partitioning. A triple tree partitioning or triple tree partitioning is a partitioning in which a block is divided into three sub-blocks. In some examples, a triple tree partitioning or triple tree partitioning divides a block into three sub-blocks without splitting the original block down the middle. The partition types in MTT (e.g., QT, BT, and TT) may be symmetric or asymmetric.

[0042]

[0052] When operating according to the AV1 codec, the video encoder 200 and the video decoder 300 may be configured to code video data in blocks. In AV1, the largest coding block that can be processed is called a superblock. In AV1, a superblock may be either 128x128 luma samples or 64x64 luma samples. However, in successor video coding formats (e.g., AV2), a superblock may be defined by a different (e.g., larger) luma sample size. In some examples, a superblock is the top level of a block quadtree. The video encoder 200 may further partition the superblock into smaller coding blocks. The video encoder 200 may partition the superblock and other coding blocks into smaller blocks using square or non-square partitioning. Non-square blocks may include N / 2xN, NxN / 2, N / 4xN, and NxN / 4 blocks. The video encoder 200 and the video decoder 300 may perform separate prediction and transform processes for each of the coding blocks.

[0043]

[0053] AV1 also defines tiles of video data. A tile is a rectangular array of superblocks that can be coded independently of other tiles. That is, video encoder 200 and video decoder 300 may encode and decode coding blocks within a tile, respectively, without using video data from other tiles. However, video encoder 200 and video decoder 300 may perform filtering across tile boundaries. Tiles may be uniform or non-uniform in size. Tile-based coding may enable parallel processing and / or multithreading for encoder and decoder implementations.

[0044]

[0054] In some examples, the video encoder 200 and the video decoder 300 may use a single QTBT or MTT structure to represent each of the luminance and chrominance components, and in other examples, the video encoder 200 and the video decoder 300 may use two or more QTBT or MTT structures, such as one QTBT / MTT structure for the luminance component and another QTBT / MTT structure for both chrominance components (or two QTBT / MTT structures for each chrominance component).

[0045]

[0055] Video encoder 200 and video decoder 300 may be configured to use quadtree partitioning, QTBT partitioning, MTT partitioning, superblock partitioning, or other partitioning structures.

[0046]

[0056] In some examples, a CTU includes a coding tree block (CTB) of luma samples, two corresponding CTBs of chroma samples for a picture with three sample arrays, or a CTB of samples for a picture coded using three separate color planes and syntax structures used to code a monochrome picture or samples. A CTB can be an N×N block of samples for some value of N, partitioned to divide the components into CTBs. A component is a single sample from one array or one of the three arrays (luma and two chroma) that make up a picture in 4:2:0, 4:2:2, or 4:4:4 color format, or a single sample from an array or array that makes up a picture in monochrome format. In some examples, a coding block is an M×N block of samples for some values ​​of M and N, partitioned to divide the CTB into coding blocks.

[0047]

[0057] Blocks (e.g., CTUs or CUs) may be grouped in various ways within a picture. As an example, a brick may refer to a rectangular region of a CTU row within a particular tile within a picture. A tile may be a rectangular region of a CTU within a particular tile column and a particular tile row within a picture. A tile column refers to a rectangular region of a CTU with a height equal to the height of the picture and a width specified by a syntax element (e.g., in a picture parameter set). A tile row refers to a rectangular region of a CTU with a height specified by a syntax element (e.g., in a picture parameter set) and a width equal to the width of the picture.

[0048]

[0058] In some examples, a tile may be partitioned into multiple bricks, each of which may include one or more CTU rows within the tile. A tile that is not partitioned into multiple bricks may also be referred to as a brick. However, a brick that is a true subset of a tile may not be referred to as a tile. Bricks within a picture may also be configured as slices. A slice may be an integer number of bricks of a picture that may be contained exclusively within a single network abstraction layer (NAL) unit. In some examples, a slice includes either several complete tiles or only a continuous sequence of complete bricks of one tile.

[0049]

[0059] This disclosure may use "N x N" and "N by N" interchangeably to refer to the sample dimensions of a block (such as a CU or other video block) in the vertical and horizontal dimensions, e.g., 16 x 16 samples or 16 by 16 samples. Generally, a 16 x 16 CU has 16 samples in the vertical direction (y = 16) and 16 samples in the horizontal direction (x = 16). Similarly, an N x N CU generally has N samples in the vertical direction and N samples in the horizontal direction, where N represents a non-negative integer value. Samples within a CU may be organized in rows and columns. Furthermore, a CU does not necessarily have to have the same number of samples in the horizontal direction as in the vertical direction. For example, a CU may include N x M samples, where M is not necessarily equal to N.

[0050]

[0060] Video encoder 200 encodes video data for a CU that represents prediction and / or residual information and other information. The prediction information indicates how the CU will be predicted to form a predictive block for the CU. The residual information generally represents sample-by-sample differences between the samples of the CU before encoding and the predictive block.

[0051]

[0061] To predict a CU, video encoder 200 may generally form a predictive block for the CU through inter prediction or intra prediction. Inter prediction generally refers to predicting a CU from data of a previously coded picture, and intra prediction generally refers to predicting a CU from previously coded data of the same picture. To perform inter prediction, video encoder 200 may generate a predictive block using one or more motion vectors. Video encoder 200 may generally perform a motion search to identify a reference block that closely matches the CU, for example, with respect to the difference between the CU and the reference block. Video encoder 200 may calculate a difference metric using a sum of absolute difference (SAD), a sum of squared differences (SSD), a mean absolute difference (MAD), a mean squared difference (MSD), or other such difference calculation to determine whether the reference block closely matches the current CU. In some examples, video encoder 200 may predict the current CU using unidirectional prediction or bidirectional prediction.

[0052]

[0062] Some examples of VVC also provide an affine motion compensation mode, which may be considered an inter-prediction mode. In affine motion compensation mode, video encoder 200 may determine two or more motion vectors that represent non-translational motion, such as zooming in or out, rotation, perspective movement, or other irregular motion types.

[0053]

[0063] To perform intra prediction, video encoder 200 may select an intra prediction mode to generate a predicted block. Some examples of VVC provide 67 intra prediction modes, including various directional modes, as well as a planar mode and a DC mode. Generally, video encoder 200 selects an intra prediction mode that describes neighboring samples for a current block (e.g., a block of a CU) and predicts samples of the current block therefrom. Assuming that video encoder 200 codes CTUs and CUs in raster scan order (left to right, top to bottom), such samples may generally be above, above and to the left, or to the left of the current block in the same picture as the current block.

[0054]

[0064] Video encoder 200 encodes data representing a prediction mode for the current block. For example, in the case of an inter-prediction mode, video encoder 200 may encode data representing which of various available inter-prediction modes is used as well as motion information for the corresponding mode. In the case of unidirectional or bidirectional inter-prediction, for example, video encoder 200 may encode motion vectors using an advanced motion vector prediction (AMVP) mode or a merge mode. Video encoder 200 may use a similar mode to encode motion vectors for an affine motion compensation mode.

[0055]

[0065] AV1 includes two general techniques for encoding and decoding coding blocks of video data. The two general techniques are intra-prediction (e.g., intra-frame prediction or spatial prediction) and inter-prediction (e.g., inter-frame prediction or temporal prediction). In the context of AV1, when predicting a block of a current frame of video data using an intra-prediction mode, the video encoder 200 and the video decoder 300 do not use video data from other frames of the video data. In most intra-prediction modes, the video encoder 200 encodes the block of the current frame based on the difference between sample values ​​in the current block and predicted values ​​generated from reference samples in the same frame. The video encoder 200 determines the predicted values ​​generated from the reference samples based on the intra-prediction mode.

[0056]

[0066] Following prediction, such as intra-prediction or inter-prediction, of a block, the video encoder 200 may calculate residual data for the block. The residual data, such as a residual block, represents sample-by-sample differences between the block and a prediction block for that block formed using a corresponding prediction mode. The video encoder 200 may apply one or more transforms to the residual block to produce transform data in a transform domain rather than a sample domain. For example, the video encoder 200 may apply a discrete cosine transform (DCT), an integer transform, a wavelet transform, or a conceptually similar transform to the residual video data. In addition, the video encoder 200 may apply a secondary transform, such as a mode-dependent non-separable secondary transform (MDNSST), a signal-dependent transform, or a Karhunen-Loeve transform (KLT), following the initial transform. The video encoder 200 produces transform coefficients following application of the one or more transforms.

[0057]

[0067] As described above, following any transformations that produce transform coefficients, the video encoder 200 may perform quantization of the transform coefficients. Quantization generally refers to a process in which transform coefficients are quantized to possibly reduce the amount of data used to represent the transform coefficients, providing further compression. By performing the quantization process, the video encoder 200 may reduce the bit depth associated with some or all of the transform coefficients. For example, the video encoder 200 may truncate an n-bit value to an m-bit value during quantization, where n is greater than m. In some examples, to perform quantization, the video encoder 200 may perform a bitwise right shift of the value to be quantized.

[0058]

[0068] Following quantization, the video encoder 200 may scan the transform coefficients, creating a one-dimensional vector from a two-dimensional matrix containing the quantized transform coefficients. The scan may be designed to place transform coefficients with higher energy (and therefore lower frequency) at the front of the vector and transform coefficients with lower energy (and therefore higher frequency) at the back of the vector. In some examples, the video encoder 200 may utilize a predefined scan order to scan the quantized transform coefficients to create a serialized vector and then entropy code the quantized transform coefficients of the vector. In other examples, the video encoder 200 may perform adaptive scanning. After scanning the quantized transform coefficients to form the one-dimensional vector, the video encoder 200 may entropy code the one-dimensional vector, for example, according to context-adaptive binary arithmetic coding (CABAC). The video encoder 200 may also entropy code values ​​for syntax elements describing metadata associated with the encoded video data for use by the video decoder 300 in decoding the video data.

[0059]

[0069] To perform CABAC, video encoder 200 may assign a context in a context model to a symbol to be transmitted. The context may relate, for example, to whether the symbol's neighboring values ​​are zeroed out. A probability determination may be based on the context assigned to the symbol.

[0060]

[0070] Video encoder 200 may further generate syntax data, such as block-based syntax data, picture-based syntax data, and sequence-based syntax data, for example, within a picture header, a block header, a slice header, or other syntax data, such as a sequence parameter set (SPS), a picture parameter set (PPS), or a video parameter set (VPS), to video decoder 300. Video decoder 300 may similarly decode such syntax data to determine how to decode corresponding video data.

[0061]

[0071] In this manner, video encoder 200 may generate a bitstream including syntax elements that describe coded video data, e.g., partitions of a picture into blocks (e.g., CUs) and prediction and / or residual information for the blocks. Finally, video decoder 300 may receive the bitstream and decode the coded video data.

[0062]

[0072] Generally, video decoder 300 performs a reciprocal process to that performed by video encoder 200 to decode encoded video data of a bitstream. For example, video decoder 300 may decode values ​​for syntax elements of a bitstream using CABAC in a manner substantially similar to, but reciprocal to, the CABAC encoding process of video encoder 200. The syntax elements may define partition information for the partition of a picture into CTUs and the partition of each CTU according to a corresponding partition structure, such as a QTBT structure, to define the CUs of the CTU. The syntax elements may further define prediction information and residual information for blocks of video data (e.g., CUs).

[0063]

[0073] The residual information may be represented, for example, by quantized transform coefficients. The video decoder 300 may dequantize and inverse transform the quantized transform coefficients of the block to reconstruct a residual block for the block. The video decoder 300 uses the signaled prediction mode (intra-prediction or inter-prediction) and associated prediction information (e.g., motion information for inter-prediction) to form a predictive block for the block. The video decoder 300 may then combine (sample by sample) the predictive block and the residual block to reconstruct the original block. The video decoder 300 may perform additional processing, such as performing a deblocking process to reduce visual artifacts along block boundaries.

[0064]

[0074] This disclosure may generally refer to "signaling" some information, such as a syntax element. The term "signaling" may generally refer to the communication of a value for a syntax element and / or other data used to decode the encoded video data. That is, video encoder 200 may signal a value for a syntax element within a bitstream. Generally, signaling refers to generating a value within a bitstream. As mentioned above, source device 102 may forward the bitstream to destination device 116 in substantially real time or non-real time, which may occur, for example, when storing syntax elements in storage device 112 for later retrieval by destination device 116.

[0065]

[0075] According to the techniques of this disclosure, as described in more detail, video encoder 200 and video decoder 300 may determine a block vector for a current block of a current picture. The block vector identifies fractional pel positions among samples in the current picture and may have a fractional pel resolution that is less than the integer pel resolution. Video encoder 200 and video decoder 300 may generate a predictive block from reference samples in the current picture based on the fractional pel positions and encode or decode the current block based on the predictive block.

[0066]

[0076] Before describing example techniques using block vectors with fractional pel resolution, the following describes example video coding techniques. Video coding standards include ITU-T H.261, ISO / IEC MPEG-1 Visual, ITU-T H.262 or ISO / IEC MPEG-2 Visual, ITU-T H.263, ISO / IEC MPEG-4 Visual, and ITU-T H.264 (also called ISO / IEC MPEG-4 AVC), including their Scalable Video Coding (SVC) and Multiview Video Coding (MVC) extensions.

[0067]

[0077] Additionally, High Efficiency Video Coding (HEVC), or ITU-T H.265, including its range extension, multiview extension (MV-HEVC), and scalable extension (SHVC), has been developed by the Joint Collaboration Team on Video Coding (JCT-VC) and the Joint Collaboration Team on 3D Video Coding Extension Development (JCT-3V) of the ITU-T Video Coding Experts Group (VCEG) and the ISO / IEC Motion Picture Experts Group (MPEG). The latest HEVC draft specification, hereafter referred to as HEVC WD, is available at https: / / phenix.int-evry.fr / jct / doc_end_user / documents / 14_Vienna / wg11 / JCTVC-N1003-v1.zip.

[0068]

[0078] ITU-T VCEG (Q6 / 16) and ISO / IEC MPEG (JTC1 / SC29 / WG11) have studied the potential need for standardization of future video coding technologies with compression capabilities significantly exceeding those of the HEVC standard (including its current and near-term extensions for screen content coding and high dynamic range coding). The groups collaborated on this exploration activity in a joint collaborative effort known as the Joint Video Exploration Team (JVET) to evaluate compression technology designs proposed by their experts in this area. The latest version of the reference software, i.e., VVC Test Model 19 (VTM-19.0), can be downloaded from https: / / vcgit.hhi.fraunhofer.de / jvet / VVCSoftware_VTM.

[0069]

[0079] The Versatile Video Coding (VVC) draft standard is published by Bross et al., Joint Video Experts Team (JVET) of ITU-T SG 16 WP 3, JVET-T2001: "Versatile Video Coding Editorial Refinements on Draft 10", and ISO / IEC JTC 1 / SC 29 20 th Meeting, by teleconference, 7-16 Oct. 2020. The algorithm description of Versatile Video Coding and Test Model 10 (VTM 10.0) can be found in Chen et al., Joint Video Experts Team (JVET) of ITU-T SG 16 WP 3, JVET-T2002: "Algorithm description for Versatile Video Coding and Test Model 11 (VTM 11)", and ISO / IEC JTC 1 / SC 29 20 th Meeting, by teleconference, 7-16 October 2020. The algorithm description of Enhanced Compression Model 7 (ECM-7.0) can be found in Coban et al., Joint Video Experts Team (JVET) of ITU-T SG 16 WP 3, JVET-AB2025: "Algorithm description of Enhanced Compression Model 7 (ECM 7)", and ISO / IEC JTC 1 / SC 29 28 th Meeting, Mainz, DE, 20-28 October 2022.

[0070]

[0080] The following describes intra block copy (IBC) for intra prediction. Intra block copy (IBC) is one of the coding tools for screen content. For a current coding unit (CU), IBC searches all block vectors and finds the best matching block in the reference region as a prediction, as shown in FIG. 6. Then, a prediction of the selected block vector is generated, and the difference between the selected block vector and the predicted block vector, known as the block vector difference (BVD), is signaled in the bitstream.

[0071]

[0081] FIG. 6 is a conceptual diagram illustrating an example of intra block copy (IBC). FIG. 6 shows a current CU 600 having a top current template 602A and a left current template 602B. The current CU 600 is part of an uncoded (e.g., not yet encoded or decoded) area of ​​a current picture, and a coded (e.g., already encoded or decoded) area of ​​the same current picture includes a reference block 604 having a top reference template 606A and a left reference template 606B. The video encoder 200 and the video decoder 300 may compare the templates 602 and 606 (e.g., determine template differences). The video encoder 200 and the video decoder 300 may determine different block vectors identifying different reference blocks using a different set of templates and compare those templates with the template 602. The video encoder 200 and the video decoder 300 may repeat such operations until the smallest difference is found and determine the block vector as the vector that produces the smallest difference within the template. The above example technique of template matching may be for block vector refinement.

[0072]

[0082] For example, in some examples, video encoder 200 may determine a block vector for current CU 600 and signal information to video decoder 300 for determining the block vector. In this example, if block vector refinement is appropriate, video encoder 200 and video decoder 300 may perform the example techniques described above for FIG.

[0073]

[0083] As another example, video encoder 200 and video decoder 300 may each construct a candidate list of block vector predictors, which may be block vectors or may be derived from block vectors of blocks adjacent or nearby to current CU 600. Video encoder 200 may signal, and video decoder 300 may receive, an index into the candidate list of block vector predictors to determine the block vector predictor. If IBC merge mode is enabled, video decoder 300 may set the block vector predictor as the block vector for current CU 600 and may optionally perform block vector refinement using the example technique of FIG. 6 to refine the block vector for current CU 600. If IBC advanced motion vector prediction (IBC-AMPV) mode is enabled, video encoder 200 may further signal a block vector difference (BVD) between the block vector predictor and the actual block vector for current CU 600. Video decoder 300 may add the BVD to the block vector predictor to determine the block vector for current CU 600. Video decoder 300 may then optionally perform block vector refinement using the example technique of FIG. 6 to refine the block vectors for current CU 600.

[0074]

[0084] The following describes template matching-related tools. Template matching tools may include template matching (TM)—advanced motion vector prediction (AMVP) and TM merge (MRG) for inter prediction and IBC. Template matching (TM) is a decoder-side MV derivation method for improving the motion information of a current CU by finding the closest match between a template in the current picture (i.e., a neighboring block above and / or to the left of the current CU) and a block in a reference picture (i.e., the same size as the template). TM can be applied to both AMVP mode and normal merge mode, referred to as TM-AMVP mode and TM-MRG mode, respectively. Similarly, the same TM can also be applied to IBC AMVP and IBC merge modes. One difference between inter TM and IBC TM is that the reference picture for inter prediction is a reconstructed area within the current frame in IBC. Without loss of generality, this disclosure generally uses “MV” or “motion” to indicate that the current CU is an inter block and has motion information, or that the current CU is an IBC block and has block vector information.

[0075]

[0085] As shown in Figure 7, a better MV is searched around the initial motion of the current CU within the [-8, +8] Pel search range. Chen et al., Joint Video Exploration Team (JVET) of ITU-T SG 16 WP 3, JVET-J0021: "Description of SDR, HDR and 360° video coding technology proposed by Qualcomm and Technicolor - low and high complexity versions," and ISO / IEC JTC 1 / SC 29 / WG 11 10 thThe template matching method in Meeting: San Diego, US, 10-20 April 2018 is used with the following modifications: the search step size is determined based on the AMVR (adaptive motion vector resolution) mode, and the TM can be cascaded with the bilateral matching process in merge mode.

[0076]

[0086] 7 is a conceptual diagram illustrating an example of template matching for a search area around an initial motion vector (MV). For example, FIG. 7 shows a current frame 700 and a reference frame 706. The current frame 700 includes a current CU 702 having a top template 704A and a left template 704B. The initial motion vector points to a reference template in the reference frame 706, and the initial motion vector can be updated by evaluating a reference template within the search range that better matches the top template 704A and the left template 704B. A similar technique can be applied to an IBC where the search range is within the current frame 700, rather than having a reference frame 706.

[0077]

[0087] In TM-AMVP mode, MVP candidates are determined based on the template matching error to select one MVP candidate that achieves the smallest difference between the current block template and the reference block template. TM is then performed only on this specific MVP candidate for MV refinement. TM refines this MVP candidate by using an iterative diamond search, starting with full-pel MVD accuracy (or 4-pel for 4-pel AMVR mode) within the [-8, +8]-pel search range. The AMVP candidate can be further refined by using a cross search, starting with full-pel MVD accuracy (or 4-pel for 4-pel AMVR mode), followed by half-pel and quarter-pel accuracy, depending on the AMVR mode, as specified in the table below. This search process can ensure that the MVP candidate retains the same MV accuracy as indicated by AMVR mode after the TM process. In the search process, if the difference between the previous minimum cost and the current minimum cost in an iteration is less than a threshold equal to the area of ​​the block, the search process terminates.

[0078] [Table 1]

[0079]

[0088] In TM-MRG merge mode, a similar search method is applied to the merge candidates indicated by the merge index. As Table 1 shows, TM can be performed all the way up to 1 / 8-pel MVD accuracy or skip anything beyond half-pel MVD accuracy, depending on whether an alternative interpolation filter (used when AMVR is in half-pel mode) is used according to the merged motion information. When TM mode is enabled, template matching can function as an independent process or an additional MV refinement process between the block-based bilateral matching (BM) method and the sub-block-based BM method, depending on whether BM can be enabled according to its enablement condition check.

[0080]

[0089] The following describes intra-TMP for intra prediction. Intra-template matching prediction (intra-TMP) is a special intra-prediction mode that copies the best predicted block from the reconstructed portion of the current frame, and its L-shaped template matches the current template. For a given search range, video encoder 200 searches for the template most similar to the current template in the reconstructed portion of the current frame and uses the corresponding block as the predicted block. Video encoder 200 then signals the use of this mode, and the same prediction operation is performed on the decoder side by video decoder 300.

[0081]

[0090] The prediction signal is generated by matching the L-shaped causal neighborhood of the current block with another block within a predetermined search area of ​​Figure 8, including R1: current CTU, R2: upper left CTU, R3: upper CTU, and R4: left CTU, with SAD used as the cost function. Figure 8 is a conceptual diagram illustrating an example of an intra-template matching search area. For example, Figure 8 shows a current block 800 and a matching block 802 referenced by block vectors within region R2.

[0082]

[0091] Within each region, video decoder 300 searches for the template with the smallest SAD to the current template and uses the corresponding block as the prediction block. The dimensions of all regions (SearchRange_w, SearchRange_h) are set proportional to the block dimensions (BlkW, BlkH) to have a fixed number of SAD comparisons per pixel, i.e., SearchRange_w=5. * BlkW and SearchRange_h=5 * It's BlkH.

[0083]

[0092] The intra template matching tool is enabled for CUs with width and height sizes less than or equal to 64. This maximum CU size for intra template matching is configurable. The intra template matching prediction mode is signaled at the CU level via a dedicated flag when DIMD (Decoder-Side Intra Mode Derivation) is not currently used for the CU.

[0084]

[0093] In the following, we describe IBC-TM-AMVP and IBC-TM-MRG for intra prediction. Template matching is used in IBC for both IBC merge mode and IBC AMVP mode, which are called IBC-TM-AMVP and IBC-TM-MRG, respectively.

[0085]

[0094] In IBC-TM-MRG, the merge list is modified compared to that used by the regular IBC merge mode so that candidates are selected according to a pruning method using the motion distance between candidates, as in the regular TM merge mode. The ending zero motion saturation is replaced by motion vectors to the left (-W, 0), up (0, -H), and up-left (-W, -H), where W is the width of the current CU and H is the height of the current CU. In addition, the selected candidate is refined by a template matching method before the rate-distortion optimization (RDO) or decoding process. The IBC-TM-MRG mode is in competition with the regular IBC merge mode, and the TM merge flag is signaled.

[0086]

[0095] In IBC-TM-AMVP mode, up to three candidates are selected from the IBC-TM-MRG merge list. Each of these three selected candidates is refined using a template matching method and sorted according to the resulting template matching cost. In some examples, only the first two are then considered in the motion estimation process.

[0087]

[0096] Template matching refinement for both IBC-TM merge mode and AMVP mode may be based on IBC motion vectors that are constrained to be (i) integers and (ii) within reference regions as shown in Figures 9A-9D, which are conceptual diagrams illustrating examples of intra block copy (IBC) reference regions that depend on the position of current coding units (CUs) 900A-900D.

[0088]

[0097] In IBC-TM-MRG mode, refinements (e.g., all refinements) are performed with integer precision, and in IBC-TM-AMVP mode, refinements are performed with either integer precision or 4-pel precision depending on the AMVR value. In one or more examples, such refinements access only samples without interpolation. In either case, the motion vectors refined and the templates used in each refinement step may respect the reference region constraints.

[0089]

[0098] An IBC-TM-MRG coded block may not inherit the flip type from a RR-IBC (Reconstruction-Reordered IBC) coded neighboring block. An IBC-TM-AMVP coded block may also be an RR-IBC coded block with a horizontal or vertical flip type, and template matching may not be applied in such cases.

[0090]

[0099] In the following, we describe the IBC merge mode using block vector difference (IBC-MBVD) for intra prediction. Affine-MMVD and GPM-MMVD are adopted in ECM as extensions of the regular MMVD mode. It may be possible to extend the MMVD mode to the IBC merge mode.

[0091]

[0100] In IBC-MBVD, the distance sets are {1 pel, 2 pels, 4 pels, 8 pels, 12 pels, 16 pels, 24 pels, 32 pels, 40 pels, 48 ​​pels, 56 pels, 64 pels, 72 pels, 80 pels, 88 pels, 96 pels, 104 pels, 112 pels, 120 pels, 128 pels} and the BVD directions are two horizontal and two vertical directions.

[0092]

[0101] The base candidate is selected from the first five candidates in the sorted IBC merge list. All possible MBVD refinement positions (20 × 4) for each base candidate are sorted based on the SAD cost between the template (one row above and one column to the left of the current block) for each refinement position and its reference. Finally, the top eight refinement positions with the smallest template SAD cost are retained as available positions and therefore for MBVD index coding. The MBVD index is binarized by a Rice code with parameter equal to 1. IBC-MBVD coded blocks do not inherit flip types from RR-IBC coded neighboring blocks.

[0093]

[0102] Particular problems can exist with block vectors. IBC has generally been considered a dedicated coding tool for screen content. Screen content is typically rendered on an integer grid with sharp signals, and therefore IBC generally works with integer-pel block vector precision (or higher precision, such as 4-pel block vector precision). However, when IBC is used for coding natural content, the limitation imposed on BVs (block vectors) to support only integer-pel precision can become a major performance bottleneck on IBC, as repeating patterns may not always lie exactly on grid samples.

[0094]

[0103] To address one or more of such problems, this disclosure describes examples of extending IBC to support BVs that point to fractional pel locations on its reference picture (i.e., a reconstructed area of ​​a current frame). For example, video encoder 200 and video decoder 300 may be configured to determine a block vector for a current block of a current picture, where the block vector identifies a fractional pel location among samples in the current picture and has a fractional pel resolution that is smaller than the integer pel resolution, generate a predictive block from the reference samples in the current picture based on the fractional pel location, and encode or decode the current block based on the predictive block.

[0095]

[0104] In the following, adaptive block vector resolution is described. Various examples may be used together or separately. For simplicity, various examples are shown with reference to Figures 10A and 10B. Figures 10A and 10B are conceptual diagrams illustrating examples of block vectors that identify fractional pel locations and have fractional pel resolution.

[0096]

[0105] In a first example, video encoder 200 and video decoder 300 may utilize block vector precision for IBC with fractional pel resolution, such as half-pel (1 / 2), quarter-pel (1 / 4), one-eighth-pel (1 / 8), or one-sixteenth-pel (1 / 16) block vector precision. Similar to inter-precision, which obtains reference samples from a reference picture, IBC and intra-TMP may obtain reference samples from a reconstructed area of ​​the current frame.

[0097]

[0106] For example, the video encoder 200 and the video decoder 300 may determine a block vector for a current block of a current picture. The video encoder 200 and the video decoder 300 may determine that the current block should be encoded or decoded in intra block copy (IBC) mode or intra template matching (intra-TMP) mode. The block vector identifies a fractional pel location among reference samples in the current picture and has a fractional pel resolution that is smaller than the integer pel resolution. For example, FIG. 10A shows a luma current block 1002 of a current picture 1000, which may be the luma component of the current block 1002. The luma current block 1002 includes a block vector 1004, which may be considered the block vector for the current block.

[0098]

[0107] In Figure 10A, current picture 1000 includes reference samples 1006A-1006P (also called integer samples), collectively referred to as reference samples 1006. Reference samples 1006 refer to samples that actually exist in current picture 1000. That is, reference samples 1006 correspond to samples that may actually be displayed. In Figure 10A, block vector 1004 does not point to reference samples.

[0099]

[0108] Rather, block vector 1004 points to fractional sample 1008A. In Figure 10A, the fractional samples are shown as fractional samples 1008-1008 and are collectively referred to as fractional samples 1008. For example, fractional sample 1008 is located within a fractional pel location, such as between reference samples 1006. Fractional sample 1008 does not actually exist within the current picture 1000, but instead is generated based on reference sample 1006. Thus, fractional pel location refers to a location between reference sample 1006 and a location where no actual sample exists.

[0100]

[0109] Because the block vector 1004 points to a fractional pel location, the block vector 1004 may have a fractional pel resolution that is less than the integer pel resolution. The block vector 1004 has an x ​​coordinate and a y coordinate, and generally has the following values:<x,y> In the case of integer pel resolution, x and y are both integer values. In the case of fractional pel resolution, x and / or y may be non-integer and fractional values. For example, in the case of fractional pel resolution, block vector 1004 may be (2.25, 5), where 0.25 of the x coordinate of 2.25 represents quarter-pel resolution. In this manner, block vector 1004 identifies a fractional-pel position (e.g., the position of fractional sample 1008A) between reference samples 1006 in current picture 1000 and has a fractional-pel resolution that is less than integer-pel resolution. The above is provided as an example to aid in understanding and should not be considered limiting.

[0101]

[0110] Video encoder 200 and video decoder 300 may generate a predictive block from reference samples 1006 in current picture 1000 based on the fractional pel locations. The predictive block generated by video encoder 200 and video decoder 300 may be viewed as a group of fractional samples, including luma components of fractional samples (e.g., fractional sample 1008) and chroma components of fractional samples (e.g., fractional sample 1014 as described below).

[0102]

[0111] For example, Figure 10B shows chroma current block 1002, which is a chroma component of current block 1002. Chroma current block 1002 includes block vector 1010, which may be a scaled version of block vector 1004 based on chroma subsampling (e.g., 4:4:4, 4:2:2, or 4:2:0). Reference samples 1012A-1012D, collectively referred to as reference sample 1012, represent chroma reference samples. Fractional samples 1014A-1014D, collectively referred to as fractional sample 1014, represent chroma fractional samples.

[0103]

[0112] There may be various methods for generating a predictive block, such as interpolation-based techniques. As an example, to generate a predictive block, the video encoder 200 and the video decoder 300 may interpolate using an N-tap interpolation filter for the luma components of the reference samples of the current picture 1000 and an M-tap interpolation filter for the chroma components of the reference samples of the current picture 1000, where N and M are different. For example, to generate a predictive block, the video encoder 200 and the video decoder 300 may apply an N-tap interpolation filter to the reference samples 1006 to generate fractional samples 1008 and an M-tap interpolation filter to the reference samples 1012 to generate fractional samples 1014. A predictive block may be considered to be the fractional samples 1008 when referring to the luma component, or the fractional samples 1014 when referring to the chroma component. In some examples, a predictive block may be considered to be a grouping of the fractional samples 1008 and the fractional samples 1014.

[0104]

[0113] The N-tap interpolation filter is an 8-tap interpolation filter, and the M-tap interpolation filter is a 6-tap interpolation filter, although other interpolation filters may be used, with an 8-tap interpolation filter for the luma component and a 6-tap interpolation filter for the chroma component being one example.

[0105]

[0114] For example, the same interpolation filters as for inter prediction are used to interpolate fractional position samples for IBC and intra-TMP. Depending on the underlying video standard, the interpolation filters may be the same as for HEVC and VVC (i.e., 8-tap and 6-tap filters for luma and 4-tap filters for chroma), or the same as for ECM (e.g., 12-tap filters for luma and 6-tap filters for chroma). In some examples, no additional hardware overhead may be required to support fractional pel block vectors for IBC and intra-TMP.

[0106]

[0115] As described, in one or more examples, there may be a requirement that the interpolation filtering used for IBC and intra-TMP be the same. For example, assume that current block 1002 is a first block to be encoded or decoded in intra-block copy (IBC) mode, current picture 1000 is a first picture, and the predictive block is a first predictive block. Video encoder 200 and video decoder 300 may determine a second block vector for a second block of the second picture, where the second block vector identifies a fractional pel position among samples in the second picture and has a fractional pel resolution that is smaller than the integer pel resolution. In this example, the second block is to be encoded or decoded in intra-template matching (intra-TMP) mode.

[0107]

[0116] The video encoder 200 and the video decoder 300 may generate a second predictive block from a reference sample in the second picture based on the fractional pel location. In this example, to generate the second predictive block, the video encoder 200 and the video decoder 300 may interpolate using an N-tap interpolation filter for the luma component of the reference sample of the second picture and an M-tap interpolation filter for the chroma component of the reference sample of the second picture. That is, the video encoder 200 and the video decoder 300 may use the same N-tap interpolation filter for the luma component of the reference sample in the second picture that the video encoder 200 and the video decoder 300 used for the reference sample 1006 to generate fractional sample 1008. Similarly, the video encoder 200 and the video decoder 300 may use the same M-tap interpolation filter for the chroma component of the reference sample in the second picture that the video encoder 200 and the video decoder 300 used for the reference sample 1012 to generate fractional sample 1014.

[0108]

[0117] In a second example, the interpolation filters used for IBC and Intra-TMP do not need to align with those used in the underlying video codec, for example, the 8-tap and 4-tap filters of VVC can be used in ECM for IBC and Intra-TMP.

[0109]

[0118] In a third example, depending on the adaptive motion vector resolution (AMVR) supported in the video codec, IBC and intra-TMP may support the same AMVR options for IBC AMVP mode to align with the inter-prediction design. For example, HEVC supports quarter-pel and integer-pel resolutions. In another example, VVC supports quarter-pel, half-pel, integer-pel, and 4-pel resolutions. IBC and intra-TMP may follow the same AMVR design as inter-prediction.

[0110]

[0119] In addition, the same syntax signaling for inter-predicted AMVR can be used for IBC and intra-TMP. An example syntax structure is shown below: Quarter Pel: 0 Half Pell: 1 0 Integer pels: 1 1 0 4 Pels: 1 1 1

[0111]

[0120] In some instances, there is no half-pel precision for IBC or intra-TMP. For example, there may only be quarter-pel, integer-pel, and 4-pel resolutions supported for IBC or intra-TMP. An example syntax structure is shown below: Quarter Pel: 0 Integer pels: 1 0 4 Pels: 1 1

[0112]

[0121] In general, the block vectors 1010 for the chroma components may be derived from the block vectors 1004 for the luma component, so the exemplary signaling for vector prediction refers to the block vectors 1004. However, it may be possible for the signaling to be applied to the block vectors 1010.

[0113]

[0122] From the third example above, in the case of fractional pel resolution, the block vector 1004 may be limited to quarter-pel resolution, integer-pel resolution, or four-pel resolution, where four-pel resolution is a special case of integer-pel resolution, and in four-pel resolution, the block vector 1004 may point to (e.g., identify) every fourth integer-pel resolution reference sample (e.g., the first reference sample, the fifth reference sample, the ninth reference sample, etc.).

[0114]

[0123] In a fourth example, a high-level syntax flag (which may be, for example, a sequence-level, picture-level, tile-level, or slice-level flag) is signaled to indicate whether the full set of AMVR options can be used for IBC and Intra-TMP (as described in the techniques related to AMVR design above in the third example). When the flag is true, the IBC and / or Intra-TMP support AMVR; otherwise, when the flag is false, they only support integer-pel resolution and / or higher resolutions (such as 4-pel).

[0115]

[0124] In other words, identifying a fractional-pel position and having fractional-pel resolution for block vector 1004 for current block 1002 may not be necessary in all instances. Video encoder 200 may signal, and video decoder 300 may receive, a syntax element (e.g., a first syntax element) indicating that fractional-pel resolution is allowed for block vector 1004. Video encoder 200 may signal, and video decoder 300 may receive, a syntax element (e.g., a second syntax element) indicating that block vector 1004 has fractional-pel resolution. In this case, video encoder 200 and video decoder 300 may be considered to determine the syntax element indicating that block vector 1004 has fractional-pel resolution.

[0116]

[0125] In some cases, fractional pel resolution for a block vector may be disabled using the example syntax elements described above. For example, assume that current block 1002 is a first block, current picture 1000 is a first picture, block vector 1004 is a first block vector, and predictive block is a first predictive block. In some examples, video encoder 200 and video decoder 300 may determine that fractional pels are disabled for a second block vector for a second block and truncate the second block vector to integer pels.

[0117]

[0126] Additionally, for HEVC, VVC, and ECM, video encoder 200 may not need to signal an AMVR syntax element in the bitstream when MVD is all zero for inter-predicted AMVP mode. In the case of zero MVD, the AMVR configuration is set by using the default AMVR option, which is quarter-pel resolution for inter-predicted AMVP mode and integer-pel for IBC. In some examples, when the aforementioned high-level syntax flag is true, the default AMVR option for IBC and intra-TMP is quarter-pel resolution (i.e., the same as inter-predicted AMVP mode).

[0118]

[0127] That is, in some examples, the video encoder 200 and the video decoder 300 may determine a block vector difference (BVD) indicating the difference between the block vector predictor for the current block 1002 and the block vector 1004. As an example, in the case of an IBC mode, the video encoder 200 and the video decoder 300 may determine the block vector predictor (e.g., based on neighboring blocks). In the IBC-AMVP mode, the video encoder 200 may signal the BVD, and the video decoder 300 may receive the BVD. In an example where the BVD is 0, the video decoder 300 may automatically determine that the block vector 1004 has quarter-pel resolution. For example, the video encoder 200 and the video decoder 300 may determine that the block vector difference (BVD) between the block vector predictor for the current block 1002 and the block vector 1004 for the current block 1002 is 0. Video encoder 200 and video decoder 300 may determine that the fractional-pel resolution (eg, of block vector 1004) is quarter-pel on the condition that BVD is 0 (ie, when BVD is 0).

[0119]

[0128] In a fifth example, when the high-level syntax flag in the fourth example is set to true, block vector predictors inferred from neighboring ones no longer need to be truncated or rounded to integer pel resolution to construct the AMVP and merge candidate lists for IBC and intra-TMP. For IBC and intra-TMP merge modes, neighboring block vectors or motion vectors can be inserted into the candidate list without truncation and / or rounding to integer pel resolution. For IBC and intra-TMP AMVP modes, neighboring block vectors or motion vectors are rounded to BV resolution as indicated by the AMVP mode before being inserted into the candidate list.

[0120]

[0129] For example, video encoder 200 and video decoder 300 may determine block vector 1004 based on block vectors of neighboring blocks. Because block vector 1004 has fractional pel resolution and can identify fractional pel locations, video encoder 200 and video decoder 300 may construct a vector candidate list including vectors of neighboring blocks with fractional pel resolution without truncating or rounding the vector to integer pel resolution. Video encoder 200 and video decoder 300 may determine block vector 1004 based on the vector candidate list.

[0121]

[0130] In a sixth example, in addition to or instead of the example above relating to when the interpolation filters used for IBC and intra-TMP do not need to align with those used in the underlying video codec (e.g., the second example), an 8-tap luma filter may be as follows: These filter coefficients may be scaled up by a factor of n before use, depending on which underlying video codec is used. For example, n=1 is used for VVC and HEVC, and n=4 is used for ECM (e.g., a filter coefficient that is "c" in the 2D array below would become "n*c" before use).

[0122] [Table 2]

[0123]

[0131] In a seventh example, in addition to or instead of the above example related to when the interpolation filter used for IBC and intra-TMP does not need to align with the interpolation filter used in the underlying video codec (e.g., the second example), a 4-tap luma filter may be as follows: These filter coefficients may be rounded up by a factor of n before use, depending on which underlying video codec is used. For example, n=1 is used for VVC and HEVC, and n=4 is used for ECM. In some examples, if the BV and MV in the codec are stored with a precision finer than quarter-pel precision, the fractional parts in the MV and BV may be right-shifted (e.g., should be right-shifted) before the lower arrays are used in the interpolation filtering process. For example, if both VVC and ECM use 1 / 16-pel precision for the storage precision for MV and BV (which means that the 4 bits after the integer precision are kept for the fractional precision part), the fractional parts of the MV and BV may be right-shifted (e.g., should be right-shifted) by 2 before the interpolation filtering process.

[0124] [Table 3]

[0125]

[0132] In an eighth example, when a high-level syntax flag (which may be, for example, a sequence-level, picture-level, tile-level, or slice-level flag) is signaled as 0 to indicate that additional AMVR options for fractional pel precision may not be used for IBC and / or intra-TMP (e.g., as disclosed in the techniques above for the third, fifth, and / or sixth examples), the fractional portion in the BV is truncated to 0 before the BV is used to position a reference sample in the current frame.

[0126]

[0133] In a ninth example, another high-level flag (e.g., at the sequence level, picture level, tile level, or slice level) for an inter slice (e.g., an inter-predicted slice) may be signaled in the bitstream for the inter slice (e.g., an inter-predicted slice) to indicate whether fractional pel AMVR mode may be used. If the flag value is 1, the same AMVR function as for VVC and ECM remains unchanged. Otherwise, if the flag value is 0, the fractional portion in the MV of an inter block (e.g., an inter-predicted block) is truncated to 0 before the MV is used to locate reference samples in the corresponding reference frame(s) for the inter block. That is, video encoder 200 and video decoder 300 may determine that fractional pels are disabled for a second block vector for the second block and truncate the second block vector to integer pels.

[0127]

[0134] The following describes availability checks on block vectors. The following examples can be performed separately or in combination, including in combination with the examples above.

[0128]

[0135] In one or more examples, a valid block vector is defined by whether all required reference samples pointed to by the block vector are within the coded / reconstructed area of ​​the current frame. Some video codecs may not allow the entire frame to serve as a reference picture for IBC and intra-TMP. In some techniques, the allowed area may be constrained to the current CTU plus the CTU to the left of the current CTU, the current CTU row, or the current CTU row plus several CTU rows above the current CTU row. Therefore, when a constrained area is imposed on the coded / reconstructed area of ​​the current frame, the definition of a valid block vector is that all required reference samples pointed to by the block vector are located within the constrained area of ​​the current frame. In special cases, the constrained area may also be the entire coded / reconstructed area of ​​the current frame. For example, FIG. 5 shows that the entire picture, excluding the uncoded area, may be a reference for determining a prediction block for a current block.

[0129]

[0136] In one or more examples, the definition of the required reference samples is that the interpolation process requires all of these samples to form the prediction signal or IBC and intra-TMP blocks. For a WxH block, if the block vector points to an integer position relative to the constrained area exactly, the required reference samples are the area of ​​samples of size WxH pointed to by the block vector. If the block points to a fractional pel position relative to the constrained area, the required samples may vary depending on the interpolation used. Assuming that an M-tap filter is used for horizontal interpolation and an N-tap filter is used for vertical interpolation (e.g., M and N are typically 2, 4, 6, 8, 10, 12, and M may be set equal to N), the required reference samples are defined as follows: · When both BVx and BVy point to fractional pel positions, the required reference samples are in the area of samples of size (W + M - 1) x (H + N - 1) indicated by the block vector (BVx - (((M / 2) - 1) << r), BVy - (((N / 2) - 1) << r)), where r is the log2 scale storage precision for BV and MV, e.g., 2 for HEVC and 4 for VVC and ECM. · When only BVx indicates a fractional position while BVy does not, the required reference samples are in the area of samples of size (W + M - 1) x H indicated by the block vector (BVx - (((M / 2) - 1) << r), BVy). · When only BVy indicates a fractional position while BVx does not, the required reference samples are in the area of samples of size W x (H + N - 1) indicated by the block vector (BVx, BVy - (((N / 2) - 1) << r)).

[0130]

[0137] In one or more examples, there are multiple ways to handle invalid BVs as follows. In one example, the BV can be rounded or truncated to an integer precision and forced to indicate an integer position on the current frame. If some of the required reference samples are still outside the constrained area of the current frame, the BV is considered invalid. Otherwise, if all the required reference samples are within the constrained area of the current frame, the truncated or rounded BV replaces the invalid one and is used to form IBC and intra TMP prediction blocks. The rounded or truncated BV is stored in the motion field for BV or MV prediction of subsequent CUs. In yet another example, the invalid BV is still used to be stored in the motion field and can be used for BV or MV prediction of subsequent CUs.

[0131]

[0138] In one or more examples, it may be the case that only one of the horizontal and vertical components of an invalid BV is truncated or rounded to obtain a valid one. For example, assuming the invalid block vector is (BVx, BVy), where r is the storage precision in log2 scale as described above for the BV or MV, and "o" is the rounding offset, the following three additional BV areas are considered candidates to replace the invalid BV: ·(BVx,((BVy+o)>>r)< <r) ·(((BVx+o)>>r)< <r,BVy) ·(((BVx+o)>>r)<<r,((BVy+o)> >r)< <r)

[0132]

[0139] A zero 'o' is used for BV truncation. A non-zero 'o' is used for BV rounding, with a typical value of 2. r-1 is.

[0133]

[0140] In one example, a shorter interpolation filter may be applied to replace either or both of the filters used for horizontal and vertical interpolation, respectively. Specifically, the horizontal filter is an M-tap filter and the vertical filter is an N-tap filter, which are initially the same value and are denoted as (M,N) for simplicity. The BV validity check is based on the following process.

[0134] [Table 4]

[0135]

[0141] Note that when there is either an m-tap filter or an n-tap interpolator supported in the codec, some (m,n) may be skipped in the above process.

[0136]

[0142] In another example, building on the example above, the values ​​of M and N can be forced to be the same to reduce the solution space of (m,n). For example, the process can be written as follows, with L=min(M,N):

[0137] [Table 5]

[0138]

[0143] Note that when there is either an m-tap filter or an n-tap interpolator supported in the codec, some (m,n) may be skipped in the above process.

[0139]

[0144] In one or more examples, the values ​​of M and N for the interpolation filters may be further adjusted based on the luma and chroma interpolation filters. L ,N L ) is M L is to represent the tap, N L The tap interpolation filter is used for the luma samples, (M C ,N C ) is M C is to represent the tap, N C A tap interpolation filter is used on the chroma samples and then the following is applied: For 4:4:4 format, (M,N)=(max(M L ,M C ),max(N L ,N C )) For 4:2:2 format, (M,N)=(max(M L ,2 * M C ),max(N L ,N C )) In the case of 4:2:0 format, (M,N)=(max(M L ,2 * M C ),max(N L ,2 * N C )) In the case of non-dual tree in VVC and ECM, or in the case of 4:0:0 format, (M,N)=(M L ,N L ) · A BV validity check is then performed using M,N) using the embodiment described above.

[0140]

[0145] In one or more examples, the use of a 6-tap interpolation filter (such as VVC and ECM) is stored in the motion field and can be inferred for subsequent blocks. For example, VVC supports a 6-tap interpolation filter in the case of half-pel AMVR. This information is also stored in the motion field and can be inferred by subsequent CUs.

[0141]

[0146] In one or more examples, the interpolation filter used to generate the reference template for IBC (for ARMC reordering or template matching) may be the same as that used for inter prediction, or may be a shortened one, such as a bilinear filter. For example, ARMC must check the validity of each BV in its merge candidate list. If a candidate is found to be an invalid BV, its TM cost is set to the maximum value before reordering occurs. As another example, during the template matching process, a BV validity check must be performed for each position in the TM search to avoid deriving a potentially invalid BV from the TM search.

[0142]

[0147] In some examples for IBC mode, video encoder 200 and video decoder 300 may determine an initial block vector and then perform refinement to determine block vector 1004. In some examples, to perform refinement, video encoder 200 and video decoder 300 may compare a template of current block 1002 (e.g., top and left samples) to a reference template including interpolated samples in current picture 1000. In one or more examples, to generate a reference template for refinement, video encoder 200 and video decoder 300 may perform bilinear filtering (e.g., perform bilinear filtering using reference sample 1006 or reference sample 1012 of FIGS. 10A and 10B). Based on the reference template with the minimum cost (e.g., minimum error), video encoder 200 and video decoder 300 may determine block vector 1004. To generate the predictive blocks, video encoder 200 and video decoder 300 may then apply an N-tap filter to the luma components and an M-tap filter to the chroma components, as described above.

[0143]

[0148] Similarly, for template matching purposes, in the case of intra-TMP, video encoder 200 and video decoder 300 may generate templates using bilinear filtering. Then, once video encoder 200 and video decoder 300 determine block vector 1004, to generate the prediction block, video encoder 200 and video decoder 300 may apply an N-tap filter to the luma component and an M-tap filter to the chroma component, as described above.

[0144]

[0149] In this manner, to determine block vector 1004, video encoder 200 and video decoder 300 may apply bilinear filtering to generate a reference template within current picture 1000. Video encoder 200 and video decoder 300 may determine block vector 1004 based on the reference template. For example, video encoder 200 and video decoder 300 may determine a cost between the current template and the reference template and determine block vector 1004 based on the minimum cost. Video encoder 200 and video decoder 300 may then determine a predictive block using N-tap filtering on the luma component and M-tap filtering on the chroma component.

[0145]

[0150] 2 is a block diagram illustrating an example video encoder 200 that may perform the techniques of this disclosure. Figure 2 is provided for purposes of explanation and should not be considered limiting of the techniques broadly illustrated and described in this disclosure. For purposes of explanation, this disclosure describes video encoder 200 in accordance with VVC and HEVC techniques. However, the techniques of this disclosure may be performed by video encoding devices configured for other video coding standards and video coding formats, such as AV1 and successors to the AV1 video coding format.

[0146]

[0151] 2, video encoder 200 includes video data memory 230, mode select unit 202, residual generation unit 204, transform processing unit 206, quantization unit 208, inverse quantization unit 210, inverse transform processing unit 212, reconstruction unit 214, filter unit 216, decoded picture buffer (DPB) 218, and entropy coding unit 220. Any or all of video data memory 230, mode select unit 202, residual generation unit 204, transform processing unit 206, quantization unit 208, inverse quantization unit 210, inverse transform processing unit 212, reconstruction unit 214, filter unit 216, DPB 218, and entropy coding unit 220 may be implemented in one or more processors or processing circuitry. For example, the units of video encoder 200 may be implemented as one or more circuits or logic elements as part of hardware circuitry, or as part of a processor, ASIC, or FPGA. Moreover, video encoder 200 may include additional or alternative processors or processing circuitry that perform these and other functions.

[0147]

[0152] Video data memory 230 may store video data to be encoded by components of video encoder 200. Video encoder 200 may receive video data stored in video data memory 230, for example, from video source 104 (FIG. 1). DPB 218 may function as a reference picture memory that stores reference video data for use in predicting subsequent video data by video encoder 200. Video data memory 230 and DPB 218 may be formed by any of a variety of memory devices, such as dynamic random access memory (DRAM), including synchronous dynamic random access memory (SDRAM), magnetoresistive RAM (MRAM), resistive RAM (RRAM), or other types of memory devices. Video data memory 230 and DPB 218 may be provided by the same memory device or separate memory devices. In various examples, video data memory 230 may be on-chip with other components of video encoder 200, as shown, or may be off-chip relative to those components.

[0148]

[0153] In this disclosure, references to video data memory 230 should not be construed as limited to memory internal to video encoder 200, unless specifically stated so, or to memory external to video encoder 200, unless specifically stated so. Rather, references to video data memory 230 should be understood as a reference memory that stores video data that video encoder 200 receives for encoding (e.g., video data for a current block to be encoded). Memory 106 of FIG. 1 may also provide temporary storage of outputs from various units of video encoder 200.

[0149]

[0154] The various units in FIG. 2 are shown to aid in understanding the operations performed by video encoder 200. The units may be implemented as fixed-function circuits, programmable circuits, or a combination thereof. A fixed-function circuit refers to a circuit that provides specific functionality and has predefined operations it can perform. A programmable circuit refers to a circuit that can be programmed to perform various tasks and provides flexible functionality in the operations it can perform. For example, a programmable circuit may execute software or firmware that causes the programmable circuit to operate in a manner defined by the software or firmware instructions. While a fixed-function circuit may execute software instructions (e.g., receive parameters or output parameters), the types of operations it performs are generally invariant. In some examples, one or more of the units may be different circuit blocks (fixed function or programmable), and in some examples, one or more of the units may be integrated circuits.

[0150]

[0155] Video encoder 200 may include arithmetic logic units (ALUs), elementary function units (EFUs), digital circuits, analog circuits, and / or a programmable core formed from programmable circuits. In examples in which the operations of video encoder 200 are performed using software executed by programmable circuits, memory 106 (FIG. 1) may store software instructions (e.g., object code) that video encoder 200 receives and executes, or a separate memory (not shown) within video encoder 200 may store such instructions.

[0151]

[0156] The video data memory 230 is configured to store received video data. The video encoder 200 may retrieve pictures of the video data from the video data memory 230 and provide the video data to the residual generation unit 204 and the mode selection unit 202. The video data in the video data memory 230 may be raw video data to be encoded.

[0152]

[0157] The mode select unit 202 includes a motion estimation unit 222, a motion compensation unit 224, and an intra prediction unit 226. The mode select unit 202 may include additional functional units that perform video prediction according to other prediction modes. By way of example, the mode select unit 202 may include a palette unit, an intra block copy unit (which may be part of the motion estimation unit 222 and / or the motion compensation unit 224), an affine unit, a linear model (LM) unit, etc.

[0153]

[0158] The mode selection unit 202 generally coordinates multiple coding passes to test combinations of coding parameters and the resulting rate-distortion values ​​for such combinations. The coding parameters may include partitioning of CTUs into CUs, prediction modes for CUs, transform types for residual data of CUs, quantization parameters for residual data of CUs, etc. The mode selection unit 202 may ultimately select a combination of coding parameters that has a better rate-distortion value than the other tested combinations.

[0154]

[0159] Video encoder 200 may partition a picture retrieved from video data memory 230 into a series of CTUs and encapsulate one or more CTUs within a slice. Mode select unit 202 may partition the CTUs of the picture according to a tree structure, such as the MTT structure, QTBT structure, superblock structure, or quadtree structure described above. As described above, video encoder 200 may form one or more CUs from partitioning the CTUs according to the tree structure. Such CUs may also be generally referred to as "video blocks" or "blocks."

[0155]

[0160] Generally, the mode select unit 202 also controls its components (e.g., the motion estimation unit 222, the motion compensation unit 224, and the intra prediction unit 226) to generate a prediction block for a current block (e.g., the current CU, or in HEVC, the overlapping portion of the PU and TU). In the case of inter prediction of the current block, the motion estimation unit 222 may perform a motion search to identify one or more closely matching reference blocks in one or more reference pictures (e.g., one or more previously coded pictures stored in the DPB 218). Specifically, the motion estimation unit 222 may calculate a value representing how similar a potential reference block is to the current block according to, for example, the sum of absolute differences (SAD), the sum of squared differences (SSD), the mean absolute deviation (MAD), the mean squared deviation (MSD), etc. The motion estimation unit 222 may generally perform these calculations using the sample-by-sample differences between the current block and the reference block under consideration. Motion estimation unit 222 may identify the reference block with the lowest value resulting from these calculations, indicating the reference block that most closely matches the current block.

[0156]

[0161] The motion estimation unit 222 may form one or more motion vectors (MVs) that define the position of a reference block in a reference picture relative to the position of a current block in the current picture. The motion estimation unit 222 may then provide the motion vectors to the motion compensation unit 224. For example, in the case of unidirectional inter prediction, the motion estimation unit 222 may provide a single motion vector, while in the case of bidirectional inter prediction, the motion estimation unit 222 may provide two motion vectors. The motion compensation unit 224 may then generate a predictive block using the motion vectors. For example, the motion compensation unit 224 may retrieve data for the reference block using the motion vectors. As another example, if the motion vectors have fractional sample precision (e.g., fractional pel resolution), the motion compensation unit 224 may interpolate values ​​for the predictive block according to one or more interpolation filters. Furthermore, in the case of bidirectional inter prediction, the motion compensation unit 224 may retrieve data for the two reference blocks according to their respective motion vectors and combine the retrieved data, for example, through sample-wise averaging or weighted averaging.

[0157]

[0162] When operating according to the AV1 video coding format, the motion estimation unit 222 and the motion compensation unit 224 may be configured to encode coding blocks of video data (e.g., both luma coding blocks and chroma coding blocks) using translational motion compensation, affine motion compensation, overlapped block motion compensation (OBMC), and / or synthetic inter-intra prediction.

[0158]

[0163] As another example, in the case of intra prediction or intra-predictive coding, the intra prediction unit 226 may generate a predictive block from samples neighboring the current block. For example, in the case of a directional mode, the intra prediction unit 226 may generally mathematically combine the values ​​of the neighboring samples and populate these calculated values ​​in a defined direction across the current block to create the predictive block. As another example, in the case of a DC mode, the intra prediction unit 226 may calculate the average of the neighboring samples for the current block and generate the predictive block to include this resulting average for each sample of the predictive block.

[0159]

[0164] When operating according to the AV1 video coding format, intra prediction unit 226 may be configured to encode coding blocks of video data (e.g., both luma coding blocks and chroma coding blocks) using directional intra prediction, non-directional intra prediction, recursive filter intra prediction, chroma-from-luma (CFL) prediction, intra block copy (IBC), and / or color palette mode. Mode select unit 202 may include additional functional units that perform video prediction according to other prediction modes.

[0160]

[0165] The mode select unit 202 provides the prediction block to the residual generation unit 204. The residual generation unit 204 receives a raw, uncoded version of the current block from the video data memory 230 and the prediction block from the mode select unit 202. The residual generation unit 204 calculates sample-by-sample differences between the current block and the prediction block. The resulting sample-by-sample differences define a residual block for the current block. In some examples, the residual generation unit 204 may also determine differences between sample values ​​within the residual block to generate the residual block using residual differential pulse code modulation (RDPCM). In some examples, the residual generation unit 204 may be formed using one or more subtractor circuits that perform binary subtraction.

[0161]

[0166] In examples in which mode select unit 202 partitions CUs into PUs, each PU may be associated with a luma prediction unit and a corresponding chroma prediction unit. Video encoder 200 and video decoder 300 may support PUs having various sizes. As mentioned above, the size of a CU may refer to the size of the luma coding block of the CU, and the size of a PU may refer to the size of the luma prediction unit of the PU. Assuming that the size of a particular CU is 2N×2N, video encoder 200 may support a PU size of 2N×2N or N×N for intra prediction, and a symmetric PU size of 2N×2N, 2N×N, N×2N, N×N, or similar for inter prediction. Video encoder 200 and video decoder 300 may also support asymmetric partitioning of PU sizes of 2N×nU, 2N×nD, nL×2N, and nR×2N for inter prediction.

[0162]

[0167] In examples where mode select unit 202 does not further partition CUs into PUs, each CU may be associated with a luma coding block and a corresponding chroma coding block. As described above, the size of a CU may refer to the size of the luma coding block of the CU. Video encoder 200 and video decoder 300 may support CU sizes of 2N×2N, 2N×N, or N×2N.

[0163]

[0168] For other video coding techniques, such as intra block copy mode coding, affine mode coding, and linear model (LM) mode coding, as some examples, mode select unit 202 generates a predictive block for the current block being coded via a respective unit associated with the coding technique. In some examples, such as palette mode coding, mode select unit 202 may not generate a predictive block, but instead may generate syntax elements that indicate how to reconstruct the block based on a selected palette. In such modes, mode select unit 202 may provide these syntax elements to entropy coding unit 220 to be coded.

[0164]

[0169] As described above, the residual generation unit 204 receives video data for a current block and a corresponding predictive block. The residual generation unit 204 then generates a residual block for the current block. To generate the residual block, the residual generation unit 204 calculates sample-by-sample differences between the predictive block and the current block.

[0165]

[0170] Transform processing unit 206 applies one or more transforms to the residual block to generate a block of transform coefficients (referred to herein as a "transform coefficient block"). Transform processing unit 206 may apply various transforms to the residual block to form the transform coefficient block. For example, transform processing unit 206 may apply a discrete cosine transform (DCT), a directional transform, a Karhunen-Loeve transform (KLT), or a conceptually similar transform to the residual block. In some examples, transform processing unit 206 may perform multiple transforms on the residual block, e.g., a linear transform and a secondary transform such as a rotational transform. In some examples, transform processing unit 206 does not apply a transform to the residual block.

[0166]

[0171] When operating according to AV1, transform processing unit 206 may apply one or more transforms to the residual block to generate a block of transform coefficients (referred to herein as a "transform coefficient block"). Transform processing unit 206 may apply various transforms to the residual block to form the transform coefficient block. For example, transform processing unit 206 may apply a combination of horizontal / vertical transforms, which may include a discrete cosine transform (DCT), an asymmetric discrete sine transform (ADST), an inverse ADST (e.g., ADST in reverse order), and an identity transform (IDTX). When using an identity transform, the transform is skipped in one of the vertical or horizontal directions. In some examples, the transform process may be skipped.

[0167]

[0172] The quantization unit 208 may quantize the transform coefficients in the transform coefficient block to produce a quantized transform coefficient block. The quantization unit 208 may quantize the transform coefficients of the transform coefficient block according to a quantization parameter (QP) value associated with the current block. The video encoder 200 (e.g., via the mode select unit 202) may adjust the degree of quantization applied to the transform coefficient block associated with the current block by adjusting the QP value associated with the CU. Quantization may result in loss of information, and therefore, the quantized transform coefficients may be less accurate than the original transform coefficients produced by the transform processing unit 206.

[0168]

[0173] As part of the reconstruction loop, inverse quantization unit 210 and inverse transform processing unit 212 may apply inverse quantization and inverse transform, respectively, to the quantized transform coefficient block to reconstruct a residual block from the transform coefficient block. Reconstruction unit 214 may produce a reconstructed block that corresponds to the current block (possibly with some distortion) based on the reconstructed residual block and the predictive block generated by mode select unit 202. For example, reconstruction unit 214 may add samples of the reconstructed residual block to corresponding samples from the predictive block generated by mode select unit 202 to produce the reconstructed block.

[0169]

[0174] Filter unit 216 may perform one or more filter operations on the reconstructed blocks. For example, filter unit 216 may perform a deblocking operation to reduce blockiness artifacts along the edges of the CU. The operations of filter unit 216 may be skipped in some examples.

[0170]

[0175] When operating according to AV1, filter unit 216 may perform one or more filter operations on the reconstructed blocks. For example, filter unit 216 may perform a deblocking operation to reduce blockiness artifacts along the edges of a CU. In other examples, filter unit 216 may apply a constrained directional enhancement filter (CDEF), which may be applied after deblocking and may include application of a non-separable, nonlinear, low-pass directional filter based on estimated edge directions. Filter unit 216 may also include a loop restoration filter, which may be applied after the CDEF and may include a separable symmetric normalized Wiener filter or a dual self-guided filter.

[0171]

[0176] Video encoder 200 stores the reconstructed blocks in DPB 218. For example, in examples where the operations of filter unit 216 are not performed, reconstruction unit 214 may store the reconstructed blocks in DPB 218. In examples where the operations of filter unit 216 are performed, filter unit 216 may store the filtered reconstructed blocks in DPB 218. Motion estimation unit 222 and motion compensation unit 224 may retrieve reference pictures formed from the reconstructed (and possibly filtered) blocks from DPB 218 to inter-predict blocks of a later-encoded picture. Additionally, intra-prediction unit 226 may use reconstructed blocks of the current picture in DPB 218 to intra-predict other blocks in the current picture.

[0172]

[0177] Generally, entropy encoding unit 220 may entropy encode syntax elements received from other functional components of video encoder 200. For example, entropy encoding unit 220 may entropy encode quantized transform coefficient blocks from quantization unit 208. As another example, entropy encoding unit 220 may entropy encode predictive syntax elements (e.g., motion information for inter-prediction or intra-mode information for intra-prediction) from mode select unit 202. Entropy encoding unit 220 may perform one or more entropy encoding operations on syntax elements, which are other examples of video data, to generate entropy-encoded data. For example, entropy encoding unit 220 may perform a context-adaptive variable length coding (CAVLC) operation, a CABAC operation, a variable-to-variable (V2V) coding operation, a syntax-based context-adaptive binary arithmetic coding (SBAC) operation, a Probability Interval Partitioning Entropy (PIPE) coding operation, an Exponential-Golomb coding operation, or another type of entropy coding operation on the data. In some examples, entropy encoding unit 220 may operate in a bypass mode in which syntax elements are not entropy coded.

[0173]

[0178] Video encoder 200 may output a bitstream that includes entropy-encoded syntax elements needed to reconstruct blocks of a slice or picture. Specifically, entropy encoding unit 220 may output the bitstream.

[0174]

[0179] The entropy coding unit 220 may be configured as a symbol-to-symbol adaptive multi-symbol arithmetic coder according to AV1. A syntax element in AV1 includes an alphabet of N elements, and a context (e.g., a probability model) includes a set of N probabilities. The entropy coding unit 220 may store the probabilities as n-bit (e.g., 15-bit) cumulative distribution functions (CDFs). The entropy coding unit 220 may perform recursive scaling to update the context, using an update factor based on the alphabet size.

[0175]

[0180] The operations described above are described with respect to blocks. Such descriptions should be understood as operations on luma coding blocks and / or chroma coding blocks. As described above, in some examples, the luma coding blocks and chroma coding blocks are luma and chroma components of a CU. In some examples, the luma coding blocks and chroma coding blocks are luma and chroma components of a PU.

[0176]

[0181] In some examples, operations performed with respect to luma coding blocks do not need to be repeated for chroma coding blocks. As one example, the operations of identifying motion vectors (MVs) and reference pictures for luma coding blocks do not need to be repeated to identify MVs and reference pictures for chroma blocks. Rather, the MVs for luma coding blocks may be scaled to determine the MVs for chroma blocks, and the reference pictures may be the same. As another example, the intra prediction process may be the same for luma coding blocks and chroma coding blocks.

[0177]

[0182] The video encoder 200 represents an example of a device configured to encode video data, including a memory configured to store video data and one or more processing units implemented in a circuit configured to: determine a block vector for a current block of a current picture, the block vector identifying fractional pel positions among samples in the current picture and having a fractional pel resolution that is less than the integer pel resolution; generate a predictive block from reference samples in the current picture based on the fractional pel positions; and encode the current block based on the predictive block.

[0178]

[0183] 3 is a block diagram illustrating an example video decoder 300 that may perform the techniques of this disclosure. Figure 3 is provided for purposes of explanation and does not limit the techniques broadly illustrated and described in this disclosure. For purposes of explanation, this disclosure describes a video decoder 300 in accordance with VVC and HEVC techniques. However, the techniques of this disclosure may be performed by video coding devices configured for other video coding standards.

[0179]

[0184] In the example of Figure 3, the video decoder 300 includes a coded picture buffer (CPB) memory 320, an entropy decoding unit 302, a prediction processing unit 304, an inverse quantization unit 306, an inverse transform processing unit 308, a reconstruction unit 310, a filter unit 312, and a DPB 314. Any or all of the CPB memory 320, the entropy decoding unit 302, the prediction processing unit 304, the inverse quantization unit 306, the inverse transform processing unit 308, the reconstruction unit 310, the filter unit 312, and the DPB 314 may be implemented in one or more processors or processing circuitry. For example, the units of the video decoder 300 may be implemented as one or more circuits or logic elements as part of hardware circuitry, or as part of a processor, ASIC, or FPGA. Moreover, the video decoder 300 may include additional or alternative processors or processing circuitry that perform these and other functions.

[0180]

[0185] Prediction processing unit 304 includes a motion compensation unit 316 and an intra prediction unit 318. Prediction processing unit 304 may include additional units that perform prediction according to other prediction modes. By way of example, prediction processing unit 304 may include a palette unit, an intra block copy unit (which may form part of motion compensation unit 316), an affine unit, a linear model (LM) unit, etc. In other examples, video decoder 300 may include more, fewer, or different functional components.

[0181]

[0186] When operating in accordance with AV1, the motion compensation unit 316 may be configured to decode coding blocks of video data (e.g., both luma coding blocks and chroma coding blocks) using translational motion compensation, affine motion compensation, OBMC, and / or synthetic inter-intra prediction, as described above. The intra prediction unit 318 may be configured to decode coding blocks of video data (e.g., both luma coding blocks and chroma coding blocks) using directional intra prediction, non-directional intra prediction, recursive filter intra prediction, CFL, IBC, and / or color palette mode, as described above.

[0182]

[0187] CPB memory 320 may store video data, such as an encoded video bitstream, to be decoded by components of video decoder 300. The video data stored in CPB memory 320 may be retrieved, for example, from computer-readable medium 110 (FIG. 1). CPB memory 320 may include a CPB that stores encoded video data (e.g., syntax elements) from the encoded video bitstream. CPB memory 320 may also store video data other than syntax elements of coded pictures, such as temporary data representing output from various units of video decoder 300. DPB 314 generally stores decoded pictures that video decoder 300 may output and / or use as reference video data when decoding subsequent data or pictures of the encoded video bitstream. CPB memory 320 and DPB 314 may be formed by any of a variety of memory devices, such as DRAM, including SDRAM, MRAM, RRAM, or other types of memory devices. CPB memory 320 and DPB 314 may be provided by the same memory device or separate memory devices. In various examples, CPB memory 320 may be on-chip with other components of video decoder 300 or may be off-chip relative to those components.

[0183]

[0188] Additionally or alternatively, in some examples, video decoder 300 may retrieve coded video data from memory 120 (FIG. 1). That is, memory 120 may store data as described above for CPB memory 320. Similarly, memory 120 may store instructions to be executed by video decoder 300 when some or all of the functionality of video decoder 300 is implemented in software that is executed by processing circuitry of video decoder 300.

[0184]

[0189] The various units shown in FIG. 3 are presented to aid in understanding the operations performed by video decoder 300. The units may be implemented as fixed-function circuits, programmable circuits, or a combination thereof. As with FIG. 2, fixed-function circuits refer to circuits that provide specific functionality and have predefined operations that they can perform. Programmable circuits refer to circuits that can be programmed to perform various tasks and provide flexible functionality in the operations they can perform. For example, a programmable circuit may execute software or firmware that causes the programmable circuit to operate in a manner defined by the software or firmware instructions. While a fixed-function circuit may execute software instructions (e.g., receive parameters or output parameters), the types of operations the fixed-function circuit performs are generally invariant. In some examples, one or more of the units may be different circuit blocks (fixed function or programmable), and in some examples, one or more of the units may be integrated circuits.

[0185]

[0190] Video decoder 300 may include a programmable core formed from ALUs, EFUs, digital circuits, analog circuits, and / or programmable circuits. In examples in which the operations of video decoder 300 are performed by software executing on programmable circuits, on-chip or off-chip memory may store software instructions (e.g., object code) that video decoder 300 receives and executes.

[0186]

[0191] The entropy decoding unit 302 may receive the encoded video data from the CPB and entropy decode the video data to recover the syntax elements. The prediction processing unit 304, the inverse quantization unit 306, the inverse transform processing unit 308, the reconstruction unit 310, and the filter unit 312 may generate decoded video data based on the syntax elements extracted from the bitstream.

[0187]

[0192] Generally, video decoder 300 reconstructs a picture on a block-by-block basis. Video decoder 300 may perform a reconstruction operation on each block individually (the block currently being reconstructed, i.e., decoded, may be referred to as the “current block”).

[0188]

[0193] The entropy decoding unit 302 may entropy decode syntax elements that define the quantized transform coefficients of the quantized transform coefficient block as well as transform information, such as a quantization parameter (QP) and / or a transform mode indication(s). The inverse quantization unit 306 may use the QP associated with the quantized transform coefficient block to determine the degree of quantization, and similarly the degree of inverse quantization that the inverse quantization unit 306 applies. The inverse quantization unit 306 may, for example, perform a bitwise left-shift operation to inverse quantize the quantized transform coefficients. The inverse quantization unit 306 may thereby form a transform coefficient block including the transform coefficients.

[0189]

[0194] After the inverse quantization unit 306 forms the transform coefficient blocks, the inverse transform processing unit 308 may apply one or more inverse transforms to the transform coefficient blocks to generate residual blocks associated with the current block. For example, the inverse transform processing unit 308 may apply an inverse DCT, an inverse integer transform, an inverse Karhunen-Loeve transform (KLT), an inverse rotational transform, an inverse transform, or another inverse transform to the transform coefficient blocks.

[0190]

[0195] Further, prediction processing unit 304 generates a predictive block according to the prediction information syntax element entropy decoded by entropy decoding unit 302. For example, if the prediction information syntax element indicates that the current block is inter-predicted, motion compensation unit 316 may generate a predictive block. In this case, the prediction information syntax element may indicate a reference picture in DPB 314 that will retrieve the reference block from the reference picture in DPB 314, as well as a motion vector that identifies the location of the reference block in the reference picture relative to the location of the current block in the current picture. Motion compensation unit 316 may generally perform the inter-prediction process in a manner substantially similar to that described with respect to motion compensation unit 224 (FIG. 2).

[0191]

[0196] As another example, if the prediction information syntax element indicates that the current block is intra-predicted, intra prediction unit 318 may generate a predictive block according to the intra-prediction mode indicated by the prediction information syntax element. Again, intra prediction unit 318 may generally perform the intra-prediction process in a manner substantially similar to that described with respect to intra prediction unit 226 (FIG. 2). Intra prediction unit 318 may retrieve data of neighboring samples for the current block from DPB 314.

[0192]

[0197] The reconstruction unit 310 may reconstruct the current block using the predictive block and the residual block. For example, the reconstruction unit 310 may add samples of the residual block to corresponding samples of the predictive block to reconstruct the current block.

[0193]

[0198] Filter unit 312 may perform one or more filter operations on the reconstructed blocks. For example, filter unit 312 may perform a deblocking operation to reduce blockiness artifacts along the edges of the reconstructed blocks. The operations of filter unit 312 may not be performed in all instances.

[0194]

[0199] The video decoder 300 may store the reconstructed blocks in the DPB 314. For example, in examples in which the operations of the filter unit 312 are not performed, the reconstruction unit 310 may store the reconstructed blocks in the DPB 314. In examples in which the operations of the filter unit 312 are performed, the filter unit 312 may store the filtered reconstructed blocks in the DPB 314. As described above, the DPB 314 may provide reference information to the prediction processing unit 304, such as samples of the current picture for intra prediction and previously decoded pictures for subsequent motion compensation. Furthermore, the video decoder 300 may output the decoded pictures (e.g., decoded video) from the DPB 314 for later display on a display device, such as the display device 118 of FIG. 1 .

[0195] In this manner, the video decoder 300 represents an example of a video decoding device that includes a memory configured to store video data and one or more processing units implemented in a circuit and configured to: determine a block vector for a current block of a current picture, where the block vector identifies fractional pel positions among samples in the current picture and has a fractional pel resolution that is less than the integer pel resolution; generate a predictive block from reference samples in the current picture based on the fractional pel positions; and decode the current block based on the predictive block.

[0196] 4 is a flowchart illustrating an example method for encoding a current block in accordance with the techniques of this disclosure. The current block may be or include a current CU. Although described with respect to video encoder 200 (FIGS. 1 and 2), it should be understood that other devices may be configured to perform methods similar to the method of FIG.

[0197]

[0200] In this example, video encoder 200 first predicts the current block (400). For example, video encoder 200 may form a predictive block for the current block. Video encoder 200 may then calculate a residual block for the current block (402). To calculate the residual block, video encoder 200 may calculate the difference between the original uncoded block and the predictive block for the current block. Video encoder 200 may then transform the residual block and quantize the transform coefficients of the residual block (404). Video encoder 200 may then scan the quantized transform coefficients of the residual block (406). During or following the scan, video encoder 200 may entropy code the transform coefficients (408). For example, video encoder 200 may code the transform coefficients using CAVLC or CABAC. Video encoder 200 may then output entropy-coded data for the block (410).

[0198]

[0201] 5 is a flowchart illustrating an example method for decoding a current block of video data in accordance with the techniques of this disclosure. The current block may be or include a current CU. Although described with respect to video decoder 300 (FIGS. 1 and 3), it should be understood that other devices may be configured to perform methods similar to the method of FIG.

[0199]

[0202] The video decoder 300 may receive entropy-coded data for a current block, such as entropy-coded prediction information and entropy-coded data for transform coefficients of a residual block corresponding to the current block (500). The video decoder 300 may entropy decode the entropy-coded data to determine prediction information for the current block and to reconstruct transform coefficients of the residual block (502). The video decoder 300 may predict the current block using, for example, an intra-prediction mode or an inter-prediction mode as indicated by the prediction information for the current block, to calculate a predictive block for the current block (504). The video decoder 300 may then inverse-scan the reconstructed transform coefficients to create a block of quantized transform coefficients (506). The video decoder 300 may then dequantize the transform coefficients and apply an inverse transform to the transform coefficients to generate a residual block (508). The video decoder 300 may finally decode the current block by combining the predictive block and the residual block (510).

[0200]

[0203] FIG. 11 is a flowchart illustrating an example method for encoding or decoding video data in accordance with the techniques of this disclosure. For simplicity of explanation, the example of FIG. 11 is described with reference to processing circuitry. Example processing circuitry includes the processing circuitry of video encoder 200 and video decoder 300. The processing circuitry may be coupled to memory, such as memory 106, memory 120, video data memory 230, DPB 218, CPB memory 320, DPB 314, or other memory. Also, for illustrative purposes only, reference is made to FIGS. 10A and 10B.

[0201]

[0204] Processing circuitry may be configured to determine a block vector 1004 for a current block 1002 of a current picture 1000, the block vector 1004 identifying a fractional pel location among reference samples 1006 in the current picture 1000 and having a fractional pel resolution less than the integer pel resolution (1100). The processing circuitry may determine that the current block 1002 should be encoded or decoded in an intra block copy (IBC) mode or an intra template matching (intra-TMP) mode (e.g., when block vectors are used).

[0202]

[0205] There may be various ways in which the processing circuitry may determine the block vector 1004. For example, the processing circuitry may signal or receive a syntax element indicating that fractional pel resolution is allowed for the block vector 1004. In some examples, for a second block (e.g., different from the current block 1002), the video encoder 200 and the video decoder 300 may determine that fractional pels are disabled for the second block vector for the second block and truncate the second block vector to integer pels.

[0203]

[0206] The processing circuitry may construct a vector candidate list including vectors having fractional-pel resolution of neighboring blocks without truncating or rounding the vectors to integer-pel resolution, and determine a block vector based on the vector candidate list. In some examples, the processing circuitry may determine that a block vector difference (BVD) between the block vector predictor for the current block 1002 and the block vector 1004 for the current block 1002 is 0. In this example, the processing circuitry may determine that the fractional-pel resolution is quarter-pel on the condition that BVD is 0 (i.e., when BVD is 0).

[0204]

[0207] In some examples, the processing circuitry may apply bilinear filtering to generate a reference template in the current picture and determine a block vector based on the reference template (e.g., based on the minimum difference between the reference template and the current template). The processing circuitry performs such an operation as part of block vector refinement for IBC mode or for intra-TMP. However, to then generate the prediction block, the processing circuitry may use other interpolation filtering techniques besides bilinear filtering.

[0205]

[0208] For example, processing circuitry may generate 1102 a predictive block from reference samples in current picture 1002 based on fractional pel locations (e.g., identified fractional pel locations). As an example, processing circuitry may generate luma components (e.g., fractional samples 1008) of the predictive block from reference samples 1006 (FIG. 10A) and chroma components (e.g., fractional samples 1014) of the predictive block from reference samples 1012 (FIG. 10B).

[0206]

[0209] To generate the predictive block, the processing circuitry may be configured to interpolate using an N-tap interpolation filter for the luma component of the reference samples 1006 of the current picture 1002 and an M-tap interpolation filter for the chroma component of the reference samples 1012 of the current picture 1002, where N and M are different. For example, the N-tap interpolation filter may include an 8-tap interpolation filter, and the M-tap interpolation filter may include a 6-tap interpolation filter.

[0207]

[0210] In some examples, the N-tap information filter and the M-tap interpolation filter used in the IBC mode may be the same as the N-tap information filter and the M-tap interpolation filter used in the intra-TMP mode. For example, assume that the current block 1002 is the first block to be coded or decoded in intra-block copy (IBC) mode, the current picture 1000 is the first picture, and the predictive block is the first predictive block.

[0208]

[0211] The processing circuitry may be configured to determine a second block vector for a second block of the second picture, the second block vector identifying a fractional pel location among samples in the second picture and having a fractional pel resolution smaller than the integer pel resolution. The second block is to be encoded or decoded in intra-template matching (intra-TMP) mode. The processing circuitry may generate a second predictive block from reference samples in the second picture based on the fractional pel location. In this example, to generate the second predictive block, the processing circuitry may interpolate using an N-tap interpolation filter for the luma components of the reference samples of the second picture and an M-tap interpolation filter for the chroma components of the reference samples of the second picture. The processing circuitry may encode or decode the second block based on the second predictive block, similar to the techniques currently described with respect to block 1002.

[0209]

[0212] For example, the processing circuitry may encode or decode the current block 1002 based on the predictive block (1104). For example, for decoding, the processing circuitry may receive residual information indicating differences between the predictive block and the current block 1002 (e.g., for the luma and chroma components) and sum the residual information with the predictive block to reconstruct the current block 1002. In some examples, the processing circuitry may perform decoding of the current block 1002 as part of the reconstruction loop of the video encoder 200. For encoding, the processing circuitry may determine the residual information indicating differences between the predictive block and the current block (1002). The processing circuitry may signal the residual information and signal information for determining block vectors.

[0210]

[0213] The following numbered clauses illustrate one or more aspects of the devices and techniques described in this disclosure.

[0211]

[0214] Clause 1. A method for encoding or decoding video data, comprising: determining a block vector for a current block of a current picture, the block vector identifying fractional pel positions between samples in the current picture and having a fractional pel resolution that is less than the integer pel resolution; generating a predictive block from reference samples in the current picture based on the identified fractional pel positions; and encoding or decoding the current block based on the predictive block.

[0212]

[0215] Clause 2. The method of clause 1, further comprising determining that the current block should be encoded or decoded in an intra block copy (IBC) mode or an intra template matching (intra-TMP) mode.

[0213]

[0216] Clause 3. The method of clause 1 or 2, further comprising determining a syntax element that indicates that the block vector has fractional pel resolution.

[0214]

[0217] Clause 4. A method according to any one of clauses 1 to 3, wherein generating the prediction block includes interpolating using an 8-tap interpolation filter for the luma components of the reference samples of the current picture and a 4-tap interpolation filter for the chroma components of the reference samples of the current picture.

[0215]

[0218] Clause 5. A method according to any one of clauses 1 to 3, wherein generating the prediction block includes interpolating using a 12-tap interpolation filter for the luma components of the reference samples of the current picture and a 6-tap interpolation filter for the chroma components of the reference samples of the current picture.

[0216]

[0219] Clause 6. The method of clause 4 or 5, wherein utilizing an 8-tap interpolation filter, a 4-tap interpolation filter, a 12-tap interpolation filter, or a 6-tap interpolation filter includes determining a video codec type for encoding or decoding the video data, and scaling the filter coefficients based on the determined video codec type.

[0217]

[0220] Clause 7. The method of any of clauses 1 to 6, further comprising determining that one or more adaptive motion vector resolution (AMVR) mode options are unavailable for intra block copy (IBC) or intra template matching (intra-TMP) modes, and determining the block vector comprises truncating the fractional portion of the block vector to 0.

[0218]

[0221] Clause 8. The method of any of clauses 1 to 7, wherein determining the block vector includes constructing a vector candidate list including vectors having fractional pel resolution of adjacent blocks without truncating or rounding the vector to integer pel resolution, and determining the block vector based on the candidate list.

[0219]

[0222] Clause 9. A method according to any one of clauses 1 to 8, wherein generating the prediction block includes determining whether a horizontal component of the block vector and a vertical component of the block vector identify respective fractional pel positions, and determining a reference sample for generating the prediction block based on a determination of whether the horizontal component of the block vector and the vertical component of the block vector identify respective fractional pel positions.

[0220]

[0223] Clause 10. A method according to any one of clauses 1 to 9, wherein encoding or decoding the current block includes decoding the current block, and wherein decoding the current block includes receiving residual information indicating a difference between the predictive block and the current block, and summing the residual information with the predictive block to reconstruct the current block.

[0221]

[0224] Clause 11. The method of clause 10, wherein decoding the current block includes decoding the current block as part of a reconstruction loop of a video encoder.

[0222]

[0225] Clause 12. A method according to any one of clauses 1 to 9, wherein encoding or decoding the current block includes encoding the current block, and encoding the current block includes determining residual information indicating a difference between the predictive block and the current block, signaling the residual information, and signaling information for determining a block vector.

[0223]

[0226] Clause 13. A device for encoding or decoding video data, comprising: a memory configured to store the video data; and processing circuitry coupled to the memory and configured to perform a method according to any one of clauses 1 to 10.

[0224]

[0227] Clause 14. The device of clause 13, further comprising a display configured to display the decoded video data.

[0225]

[0228] Clause 15. The device of clause 13 or 14, wherein the device comprises one or more of a camera, a computer, a mobile device, a broadcast receiver device, or a set-top box.

[0226]

[0229] Clause 16. A computer-readable storage medium storing instructions that, when executed, cause one or more processors to perform the method of any of clauses 1 to 12.

[0227]

[0230] Clause 17. A device for encoding or decoding video data, comprising means for performing the method according to any of clauses 1 to 12.

[0228]

[0231] Clause 1A. A method for encoding or decoding video data, comprising: determining a block vector for a current block of a current picture, the block vector identifying a fractional pel position between reference samples in the current picture and having a fractional pel resolution that is less than the integer pel resolution; generating a predictive block from the reference samples in the current picture based on the fractional pel position; and encoding or decoding the current block based on the predictive block.

[0229]

[0232] Clause 2A. The method of clause 1A, further comprising determining that the current block is to be encoded or decoded in intra block copy (IBC) mode or intra template matching (intra-TMP) mode, and determining the block vector comprises determining the block vector when the current block is to be encoded or decoded in IBC mode or intra-TMP mode.

[0230]

[0233] Clause 3A. The method of clause 1A or 2A, wherein generating the prediction block includes interpolating using an N-tap interpolation filter for the luma component of the reference sample of the current picture and an M-tap interpolation filter for the chroma component of the reference sample of the current picture, wherein N and M are different.

[0231]

[0234] Clause 4A. The method of clause 3A, wherein the N-tap interpolation filter comprises an 8-tap interpolation filter and the M-tap interpolation filter comprises a 6-tap interpolation filter.

[0232]

[0235] Clause 5A. The current block is a first block to be coded or decoded in intra block copy (IBC) mode, the current picture is a first picture, the fractional pel locations are first fractional pel locations, the fractional pel resolution is a first fractional pel resolution, the predictive block includes a first predictive block, and the method includes: a second block vector for a second block of a second picture, the second block vector identifying a second fractional pel location among samples in the second picture and having a second fractional pel resolution that is less than the integer pel resolution; and the second block is coded or decoded in an intra template vector. 4. The method of claim 3A or 4A, further comprising: determining a second block vector to be coded or decoded in an intra-TMP mode; generating a second predictive block from reference samples in the second picture based on the second fractional pel positions, wherein generating the second predictive block comprises interpolating using an N-tap interpolation filter for luma components of the reference samples of the second picture and an M-tap interpolation filter for chroma components of the reference samples of the second picture; and encoding or decoding the second block based on the second predictive block.

[0233]

[0236] Clause 6A. The method of any of clauses 1A-5A, further comprising signaling or receiving a syntax element indicating that fractional pel resolution is allowed for the block vectors.

[0234]

[0237] Clause 7A. The method of any of clauses 1A to 6A, further comprising determining that a block vector difference (BVD) between a block vector predictor for the current block and a block vector for the current block is 0, and determining that the fractional pel resolution is quarter-pel when the BVD is 0.

[0235]

[0238] Clause 8A. A method according to any one of clauses 1A to 7A, wherein determining the block vector includes constructing a vector candidate list including vectors having fractional pel resolution of adjacent blocks without truncating or rounding the vector to integer pel resolution, and determining the block vector based on the vector candidate list.

[0236]

[0239] Clause 9A. A method according to any of clauses 1A to 8A, wherein the current block is a first block, the current picture is a first picture, the block vector includes a first block vector, and the predicted block includes a first predicted block, and the method further includes determining that fractional pels are disabled for a second block vector for the second block, and truncating the second block vector to integer pels.

[0237]

[0240] Clause 10A. The method of any of clauses 1A to 9A, wherein determining the block vector includes applying bilinear filtering to generate a reference template in the current picture, and determining the block vector based on the reference template.

[0238]

[0241] Clause 11A. A method according to any of clauses 1A to 10A, wherein encoding or decoding the current block includes decoding the current block, and wherein decoding the current block includes receiving residual information indicating a difference between the predictive block and the current block, and summing the residual information with the predictive block to reconstruct the current block.

[0239]

[0242] Clause 12A. The method of clause 11A, wherein decoding the current block includes decoding the current block as part of a reconstruction loop of the video encoder.

[0240]

[0243] Clause 13A. A method according to any one of clauses 1A to 10A, wherein encoding or decoding the current block includes encoding the current block, and encoding the current block includes determining residual information indicating a difference between the predictive block and the current block, signaling the residual information, and signaling information for determining a block vector.

[0241]

[0244] Clause 14A. A device for encoding or decoding video data, comprising: one or more memories configured to store the video data; and processing circuitry coupled to the one or more memories, wherein the processing circuitry is configured to: determine a block vector for a current block of a current picture of the video data, the block vector identifying fractional pel positions between reference samples in the current picture and having a fractional pel resolution that is less than the integer pel resolution; generate a predictive block from the reference samples in the current picture based on the fractional pel positions; and encode or decode the current block based on the predictive block.

[0242]

[0245] Clause 15A. The device of clause 14A, wherein the processing circuitry is configured to determine that the current block is to be encoded or decoded in intra block copy (IBC) mode or intra template matching (intra-TMP) mode, and to determine the block vector, the processing circuitry is configured to determine the block vector when the current block is to be encoded or decoded in IBC mode or intra-TMP mode.

[0243]

[0246] Clause 16A. The device of clause 14A or 15A, wherein to generate the prediction block, the processing circuitry is configured to interpolate using an N-tap interpolation filter for luma components of reference samples of the current picture and an M-tap interpolation filter for chroma components of reference samples of the current picture, where N and M are different.

[0244]

[0247] Clause 17A. The device of clause 16A, wherein the N-tap interpolation filter comprises an 8-tap interpolation filter and the M-tap interpolation filter comprises a 6-tap interpolation filter.

[0245]

[0248] Clause 18A. The device of clause 16A or 17A, wherein the processing circuitry is configured to signal or receive a syntax element indicating that fractional pel resolution is allowed for the block vectors.

[0246]

[0249] Clause 19A. A device described in any of clauses 14A to 18A, wherein, to determine the block vector, the processing circuitry is configured to apply bilinear filtering to generate a reference template in the current picture and determine the block vector based on the reference template.

[0247]

[0250] Clause 20A. A computer-readable storage medium storing instructions that, when executed, cause one or more processors to determine a block vector for a current block of a current picture, the block vector identifying fractional pel positions between reference samples in the current picture and having a fractional pel resolution that is less than the integer pel resolution; generate a predictive block from the reference samples in the current picture based on the fractional pel positions; and encode or decode the current block based on the predictive block.

[0248]

[0251] It should be appreciated that in some examples, some acts or events of any of the techniques described herein may be performed in a different sequence, added, merged, or omitted entirely (e.g., not all described acts or events may be required to practice the techniques). Moreover, in some examples, acts or events may be performed in parallel rather than sequentially, for example, through multithreading, interrupt processing, or multiple processors.

[0249]

[0252] In one or more examples, the functions described may be implemented in hardware, software, firmware, or any combination thereof. If implemented in software, the functions may be stored on or transmitted via a computer-readable medium as one or more instructions or code and executed by a hardware-based processing unit. Computer-readable media may include computer-readable storage media, which correspond to tangible media such as data storage media, or communication media, including any medium that facilitates transfer of a computer program from one place to another, for example, according to a communications protocol. As such, computer-readable media may generally correspond to (1) tangible computer-readable storage media that is non-transitory, or (2) a communication medium such as a signal or carrier wave. Data storage media may be any available medium that can be accessed by one or more computers or one or more processors to retrieve instructions, code, and / or data structures for performing the techniques described in this disclosure. A computer program product may include a computer-readable medium.

[0250]

[0253] By way of example, and not limitation, such computer-readable storage media may include one or more of RAM, ROM, EEPROM, CD-ROM or other optical disk storage, magnetic disk storage or other magnetic storage devices, flash memory, or any other medium that can be used to store desired program code in the form of instructions or data structures and that can be accessed by a computer. Also, any connection is properly referred to as a computer-readable medium. For example, if instructions are transmitted from a website, server, or other remote source using coaxial cable, fiber optic cable, twisted pair, digital subscriber line (DSL), or wireless technologies such as infrared, radio, and microwave, the coaxial cable, fiber optic cable, twisted pair, DSL, or wireless technologies such as infrared, radio, and microwave are included within the definition of medium. However, it should be understood that computer-readable storage media and data storage media do not include connections, carrier waves, signals, or other transitory media, but instead cover non-transitory tangible storage media. As used herein, disk and disc include compact disc (CD), laser disc, optical disc, digital versatile disc (DVD), floppy disk, and Blu-ray disc, where disks typically reproduce data magnetically, while discs reproduce data optically using a laser. Combinations of the above should also be included within the scope of computer-readable media.

[0251]

[0254] The instructions may be executed by one or more processors, such as one or more DSPs, general-purpose microprocessors, ASICs, FPGAs, or other equivalent integrated or discrete logic circuitry. Accordingly, the terms "processor" and "processing circuitry," as used herein, may refer to any of the above structures or any other structure suitable for implementing the techniques described herein. Additionally, in some aspects, the functionality described herein may be provided within dedicated hardware and / or software modules configured for encoding and decoding, or may be incorporated into a combined codec. It is also possible for these techniques to be implemented entirely in one or more circuits or logic elements.

[0252]

[0255] The techniques of this disclosure may be implemented in a wide variety of devices or apparatuses, including a wireless handset, an integrated circuit (IC), or a set of ICs (e.g., a chipset). Various components, modules, or units have been described in this disclosure to highlight functional aspects of devices configured to perform the disclosed techniques, but they do not necessarily require implementation by different hardware units. Rather, as described above, the various units may be combined in a codec hardware unit or may be provided by a collection of interoperable hardware units, including one or more processors as described above, in conjunction with suitable software and / or firmware.

[0253]

[0256] Various examples have been described. These and other examples are within the scope of the following claims.

Claims

1. 1. A method for encoding or decoding video data, comprising: determining a block vector for a current block of a current picture, the block vector identifying a fractional pel location among reference samples in the current picture and having a fractional pel resolution that is less than an integer pel resolution; generating a prediction block from reference samples in the current picture based on the fractional pel position; encoding or decoding the current block based on the predicted block; A method comprising:

2. determining that the current block should be encoded or decoded in an intra block copy (IBC) mode or an intra template matching (intra TMP) mode; Further comprising: The method of claim 1 , wherein determining the block vector comprises determining the block vector when the current block is to be encoded or decoded in the IBC mode or the Intra-TMP mode.

3. 2. The method of claim 1 , wherein generating the predictive block comprises interpolating using an N-tap interpolation filter for luma components of the reference samples of the current picture and an M-tap interpolation filter for chroma components of the reference samples of the current picture, wherein N and M are different.

4. The method of claim 3 , wherein the N-tap interpolation filter comprises an 8-tap interpolation filter and the M-tap interpolation filter comprises a 6-tap interpolation filter.

5. the current block is a first block to be coded or decoded in an intra block copy (IBC) mode, the fractional pel location is a first fractional pel location, the fractional pel resolution is a first fractional pel resolution, the current picture is a first picture, and the predictive block includes a first predictive block; and the method includes: determining a second block vector for a second block of a second picture, the second block vector identifying a second fractional pel position among samples in the second picture and having a second fractional pel resolution that is less than an integer pel resolution, the second block to be coded or decoded in intra-template matching (intra-TMP) mode; generating a second prediction block from reference samples in the second picture based on the second fractional pel positions, wherein generating the second prediction block includes interpolating using the N-tap interpolation filter for luma components of the reference samples of the second picture and the M-tap interpolation filter for chroma components of the reference samples of the second picture; encoding or decoding the second block based on the second predicted block; The method of claim 3 further comprising:

6. signaling or receiving a syntax element indicating that the fractional pel resolution is allowed for the block vector; The method of claim 1 further comprising:

7. determining that a block vector difference (BVD) between a block vector predictor for the current block and the block vector for the current block is zero; determining that the fractional pel resolution is quarter-pel when the BVD is 0; The method of claim 1 further comprising:

8. determining the block vectors, constructing a vector candidate list including vectors of neighboring blocks having fractional pel resolution without truncating or rounding said vectors to integer pel resolution; determining the block vector based on the vector candidate list; The method of claim 1 , comprising:

9. the current block is a first block, the current picture is a first picture, the block vectors include a first block vector, the predictive block includes a first predictive block, and the method includes: determining that fractional pels are disabled for a second block vector for a second block; truncating the second block vector to an integer number of pels; The method of claim 1 further comprising:

10. determining the block vectors, applying bilinear filtering to generate a reference template in the current picture; determining the block vector based on the reference template; The method of claim 1 , comprising:

11. encoding or decoding the current block includes decoding the current block, and decoding the current block includes: receiving residual information indicating a difference between the predicted block and the current block; summing the residual information with the predicted block to reconstruct the current block; The method of claim 1 , comprising:

12. The method of claim 11 , wherein decoding the current block comprises decoding the current block as part of a reconstruction loop of a video encoder.

13. Encoding or decoding the current block includes encoding the current block, and encoding the current block includes: determining residual information indicative of a difference between the predicted block and the current block; signaling the residual information; and signaling information for determining the block vector; The method of claim 1 , comprising:

14. 1. A device for encoding or decoding video data, comprising: one or more memories configured to store the video data; processing circuitry coupled to the one or more memories; the processing circuitry comprising: determining a block vector for a current block of a current picture of the video data, the block vector identifying a fractional pel location between reference samples in the current picture and having a fractional pel resolution that is less than an integer pel resolution; generating a prediction block from reference samples in the current picture based on the fractional pel position; encoding or decoding the current block based on the predicted block; The device is configured as follows:

15. the processing circuitry comprising: determining that the current block should be encoded or decoded in an intra block copy (IBC) mode or an intra template matching (intra TMP) mode; It is structured as follows: and determining the block vector when the current block is to be encoded or decoded in the IBC mode or the Intra-TMP mode.

15. The device of claim 14.

16. 15. The device of claim 14, wherein, to generate the predictive block, the processing circuitry is configured to interpolate using an N-tap interpolation filter for luma components of the reference samples of the current picture and an M-tap interpolation filter for chroma components of the reference samples of the current picture, where N and M are different.

17. The device of claim 16 , wherein the N-tap interpolation filter comprises an 8-tap interpolation filter and the M-tap interpolation filter comprises a 6-tap interpolation filter.

18. the processing circuitry comprising: signaling or receiving a syntax element indicating that the fractional pel resolution is allowed for the block vectors; 17. The device of claim 16, configured to:

19. To determine the block vector, the processing circuitry applying bilinear filtering to generate a reference template in the current picture; determining the block vector based on the reference template; 15. The device of claim 14, configured to:

20. A computer-readable storage medium storing instructions that, when executed, cause one or more processors to: determining a block vector for a current block of a current picture, the block vector identifying a fractional pel location among reference samples in the current picture and having a fractional pel resolution that is less than an integer pel resolution; generating a prediction block from reference samples in the current picture based on the fractional pel position; encoding or decoding the current block based on the predicted block; A computer-readable storage medium.