Geometric partitioning mode with coordinated motion field storage and motion compensation

By selecting integer angles for video block segmentation using a geometric segmentation pattern, the problem of high computational complexity in existing technologies is solved, resulting in more efficient video encoding and decoding.

CN114342373BActive Publication Date: 2025-10-17QUALCOMM INC
View PDF 0 Cites 0 Cited by

Patent Information

Application Number
CN202080058977.2
Authority / Receiving Office
CN · China
Patent Type
Patents(China)
Current Assignee / Owner
Priority Date
2020-08-20
Filing Date
2020-08-21
Publication Date
2025-10-17
Estimated Expiration
2040-08-21

AI Technical Summary

Technical Problem

Existing video encoding and decoding technologies rely on 32 angles of 11.25 degrees when segmenting video blocks, resulting in high computational complexity, large multiplication function operations, and impact on encoding and decoding efficiency and latency.

Method used

A geometric segmentation mode is adopted, which determines the segmentation line by selecting an integer angle corresponding to the N:M ratio of the sample points of the current block, thus avoiding the segmentation line on the corner of the block. The angle is implemented by bit shifting, reducing the use of multiplication functions.

Benefits of technology

It improves the computational efficiency of video encoding and decoding, reduces computational complexity, enhances encoding and decoding accuracy, and reduces latency.

✦ Generated by Eureka AI based on patent content.

Smart Images

  • Figure CN114342373B_ABST
    Figure CN114342373B_ABST
Patent Text Reader

Abstract

A method of decoding video data includes determining that a geometric partitioning mode is enabled for a current block of video data and determining a partition line that partitions the current block into a first partition and a second partition, wherein determining the partition line includes selecting an angle of the partition line from a plurality of angles, each of the plurality of angles corresponding to an N:M ratio of samples of the current block, where N and M are integers. The partition line is not on a corner of the current block. The method further includes determining a geometric mode weight for the current block using the angle of the partition line, generating a first prediction block using motion information of the first partition, and generating a second prediction block using motion information of the second partition.
Need to check novelty before this filing date? Find Prior Art

Description

[0001] This application claims priority to U.S. Patent Application No. 16 / 998,639, filed August 20, 2020, which claims priority to U.S. Provisional Patent Application No. 62 / 891,138, filed August 23, 2019, the entire contents of each of which are incorporated herein by reference. TECHNICAL FIELD

[0002] The present disclosure relates to video encoding and video decoding. BACKGROUND

[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 radio telephones, so-called “smart phones,” video teleconferencing devices, video streaming devices, and the like. Digital video devices implement video coding techniques, such as those described in the 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), and extensions of such standards. The video devices can thereby encode, decode, and / or store digital video information more efficiently.

[0004] Video coding techniques include spatial (intra-picture) prediction and / or temporal (inter-picture) prediction to reduce or remove redundancy inherent in video sequences. For block-based video coding, a video slice (for example, a video picture or a portion of a video picture) can be partitioned into video blocks, which can also be referred to as coding tree units (CTUs), coding units (CUs), and / or coding nodes. For video blocks in an intra-coded (I) slice of a picture, intra prediction from SUMMARY

[0005] In general, this disclosure describes techniques for video coding. More specifically, the techniques of this disclosure can reduce the complexity of prediction by potentially simplifying the implementation of a geometric partition mode (GPM). A geometric partition mode can refer to a partition mode configured to support partitioning a block of video data into one or more shapes, such as triangles, trapezoids, or rectangles. For example, a video coder (e.g., a video encoder or a video decoder) can partition a block of video data into a first partition and a second partition, where the first partition includes a triangular shape and the second partition includes a trapezoidal shape. Conversely, when operating in a triangular partition mode, the video coder can partition the block of video data along a diagonal or anti-diagonal split that evenly divides the block into a first triangular partition and a second triangular partition.

[0006] Rather than relying on 32 angles of 11.25 degrees to select an angle of a partition line, the techniques described herein configure a video coder to apply a geometric partition mode that selects an angle of a partition line from angles corresponding to an N:M ratio of samples of a current block, where N and M are integers. Additionally, the partition line can not be on a corner of the block. The angles corresponding to the N:M ratio can allow the video coder to apply a geometric partition mode that supports angles for various block ratios (e.g., 1:1, 1:2, 1:4, 0:1, 2:1, and 1:0) that are computationally efficient. For example, the video coder can apply a geometric partition mode that supports angles that can be implemented by the video coder using bit shifting rather than a multiplication function, which can potentially improve the computational efficiency of the video coder with little or no impact on coding accuracy compared to a video coder configured to apply a geometric partition mode using 32 angles of 11.25 degrees.

[0007] In one example, a method of decoding video data includes determining that a geometric partition mode is enabled for a current block of video data and determining a partition line that partitions the current block into a first partition and a second partition, where determining the partition line includes selecting an angle of the partition line from a plurality of angles, each of the plurality of angles corresponding to an N:M ratio of samples of the current block, where N and M are integers, and where the partition line is not on a corner of the current block. The method further includes determining geometric mode weights for the current block using the angle of the partition line and generating a first prediction block using motion information for the first partition. The method further includes generating a second prediction block using motion information for the second partition and applying the geometric partition mode weights to samples of the first prediction block and samples of the second prediction block to determine a final prediction block for the current block. The method further includes decoding a residual block for the current block and combining the final prediction block and the residual block to decode the current block.

[0008] In another example, a method of encoding video data includes determining that a geometric partition mode is enabled for a current block of the video data, and determining a partition line that partitions the current block into a first partition and a second partition, wherein determining the partition line includes selecting an angle of the partition line from a plurality of angles, each angle of the plurality of angles corresponding to an N:M ratio of samples of the current block, where N and M are integers, and wherein the partition line is not on a corner of the current block. The method further includes determining a geometric mode weight for the current block using the angle of the partition line, and generating a first prediction block using motion information of the first partition. The method further includes generating a second prediction block using motion information of the second partition, and applying the geometric partition mode weight to samples of the first prediction block and samples of the second prediction block to determine a final prediction block for the current block. The method further includes generating a residual block for the current block of the video data based on a difference between the current block of the video data and the final prediction block, and encoding the residual block.

[0009] In one example, an apparatus for decoding video data includes a memory configured to store the video data, and one or more processors implemented in circuitry configured to: determine that a geometric partition mode is enabled for a current block of the video data, and determine a partition line that partitions the current block into a first partition and a second partition, wherein to determine the partition line, the one or more processors are configured to: select an angle of the partition line from a plurality of angles, each angle of the plurality of angles corresponding to an N:M ratio of samples of the current block, where N and M are integers, and wherein the partition line is not on a corner of the current block. The one or more processors are further configured to: determine a geometric mode weight for the current block using the angle of the partition line, and generate a first prediction block using motion information of the first partition. The one or more processors are further configured to: generate a second prediction block using motion information of the second partition, and apply the geometric partition mode weight to samples of the first prediction block and samples of the second prediction block to determine a final prediction block for the current block. The one or more processors are further configured to: decode a residual block for the current block, and combine the final prediction block and the residual block to decode the current block.

[0010] In another example, a device for encoding video data includes one or more processors implemented in circuitry configured to determine that a geometric partition mode is enabled for a current block of video data, and determine a partition line that partitions the current block into a first partition and a second partition, wherein to determine the partition line, the one or more processors are configured to select an angle of the partition line from a plurality of angles, each angle of the plurality of angles corresponding to an N:M ratio of samples of the current block, where N and M are integers, and wherein the partition line is not on a corner of the current block. The one or more processors are further configured to determine geometric mode weights for the current block using the angle of the partition line, and generate a first prediction block using motion information of the first partition. The one or more processors are further configured to generate a second prediction block using motion information of the second partition, and apply the geometric partition mode weights to samples of the first prediction block and samples of the second prediction block to determine a final prediction block for the current block. The one or more processors are further configured to generate a residual block for the current block of video data based on a difference between the current block of video data and the final prediction block, and encode the residual block.

[0011] In one example, a device for decoding video data includes means for determining that a geometric partition mode is enabled for a current block of video data, and means for determining a partition line that partitions the current block into a first partition and a second partition, wherein the means for determining the partition line includes means for selecting an angle of the partition line from a plurality of angles, each angle of the plurality of angles corresponding to an N:M ratio of samples of the current block, where N and M are integers, and wherein the partition line is not on a corner of the current block. The device further includes means for determining geometric mode weights for the current block using the angle of the partition line, and means for generating a first prediction block using motion information of the first partition. The device further includes means for generating a second prediction block using motion information of the second partition, and means for applying the geometric partition mode weights to samples of the first prediction block and samples of the second prediction block to determine a final prediction block for the current block. The device further includes means for decoding a residual block for the current block, and means for combining the final prediction block and the residual block to decode the current block.

[0012] In another example, a device for encoding video data includes means for determining that a geometric partition mode is enabled for a current block of the video data, and means for determining a partition line that partitions the current block into a first partition and a second partition, wherein the means for determining the partition line includes means for selecting an angle of the partition line from a plurality of angles, each of the plurality of angles corresponding to an N:M ratio of samples of the current block, where N and M are integers, and wherein the partition line is not on a corner of the current block. The device further includes means for determining geometric mode weights for the current block using the angle of the partition line, and means for generating a first prediction block using motion information of the first partition. The device further includes means for generating a second prediction block using motion information of the second partition, and means for applying the geometric partition mode weights to samples of the first prediction block and samples of the second prediction block to determine a final prediction block for the current block. The device further includes means for generating a residual block for the current block of the video data based on a difference between the current block of the video data and the final prediction block, and means for encoding the residual block.

[0013] The details of one or more examples are set forth in the accompanying drawings and the description below. Other features, objects, and advantages will be apparent from the description, drawings, and claims. BRIEF DESCRIPTION OF DRAWINGS

[0014] Figure 1 FIG. 1 is a block diagram illustrating an example video encoding and decoding system that can perform the techniques of this disclosure.

[0015] Figure 2A and 2B FIG. 2 is a conceptual diagram illustrating an example quad-tree binary tree (QTBT) structure and corresponding coding tree unit (CTU).

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

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

[0018] Figure 5 FIG. 5 is a conceptual diagram illustrating an example of triangle partition based inter prediction.

[0019] Figure 6 FIG. 6 is a conceptual diagram illustrating example spatial and temporal neighboring blocks used to construct a uni-prediction candidate list.

[0020] Figure 7 FIG. 7 is a conceptual diagram illustrating an example of uni-prediction MV selection for a triangle partition mode.

[0021] Figure 8is a conceptual diagram illustrating example weights used in a blending process.

[0022] Figure 9 is a conceptual diagram illustrating an example triangle partition mode (TPM).

[0023] Figure 10 is a conceptual diagram illustrating example geometry partition mode partition signaling.

[0024] Figure 11 is a conceptual diagram illustrating an example geometry partition mode (GPM) coordination with TPM.

[0025] Figure 12 is a flowchart illustrating a first example method for encoding a current block.

[0026] Figure 13 is a flowchart illustrating an example method for decoding a current block of video data.

[0027] Figure 14 is a conceptual diagram illustrating a second example GPM coordination with TPM.

[0028] Figure 15 is a flowchart illustrating an example method for encoding a current block using a plurality of angles, each of the plurality of angles corresponding to an N:M ratio of samples of the current block, in accordance with the techniques of this disclosure.

[0029] Figure 16 is a flowchart illustrating an example method for decoding a current block of video data using a plurality of angles, each of the plurality of angles corresponding to an N:M ratio of samples of the current block, in accordance with the techniques of this disclosure.

[0030] Figure 17 is a conceptual diagram illustrating example angles for a block having a 1:2 ratio, in accordance with the techniques of this disclosure.

[0031] Figure 18 is a conceptual diagram illustrating example angles for a block having a 1:4 ratio, in accordance with the techniques of this disclosure.

[0032] Figure 19 is a conceptual diagram illustrating example angles for a block having a 1:1 ratio, in accordance with the techniques of this disclosure.

[0033] Figure 20 is a conceptual diagram illustrating example angles for a block having a 2:1 ratio, in accordance with the techniques of this disclosure.

[0034] Figure 21 is a conceptual diagram illustrating example angles for a block having a 0:1 ratio, in accordance with the techniques of this disclosure.

[0035] Figure 22is a conceptual diagram illustrating example angles of a block having a 1 :0 ratio, in accordance with the techniques of this disclosure. DETAILED DESCRIPTION

[0036] In general, this disclosure describes techniques for video coding. More specifically, the techniques of this disclosure relate to partitioning for motion estimation, such as a triangular partition mode, a geometric partition mode (GPM), or another partition mode. For example, a video coder (e.g., a video encoder or a video decoder) can apply a geometric partition mode to perform motion estimation to track motion of a video object within video data. In contrast, partitioning of video data often involves a process by which a video encoder divides a coding tree unit (CTU) along a vertical or horizontal direction (e.g., see Figure 2B ), and signals information including a residual block for each block of video data.

[0037] For partitioning using a triangular partition mode (TPM) for motion estimation, a video coder (e.g., a video encoder or a video decoder) can apply a triangular partition mode to partition a rectangular block of video data into a first triangular partition and a second triangular partition. For example, the video coder can apply a partitioning line from a first corner (e.g., a top-left corner or a bottom-left corner) of the rectangular block to a second corner (e.g., a bottom-right corner or a top-right corner) of the rectangular block. The video coder can generate samples of a first prediction block using motion information of the first triangular partition, and generate samples of a second prediction block using motion information of the second triangular partition. In this example, the video coder can blend (e.g., weighted average) samples from the first prediction block and the second prediction block along the partitioning line that divides the first triangular partition and the second triangular partition to generate a final prediction block for the block of video data. In this example, the video encoder does not signal first residual information for the first triangular partition and second residual information for the second triangular partition. Instead, the video encoder can signal a single residual block for the entire block of video data. In this way, samples arranged in a portion of video data having similar motion can be grouped together, which can potentially improve coding accuracy with little or no impact on computational complexity.

[0038] Generally, when operating in a triangular partitioning mode, a video codec (e.g., a video encoder or a video decoder) can partition a block of video data along a diagonal or anti-diagonal split that evenly divides the block into a first partition and a second partition, where the first partition includes the same number of samples as the second partition. While the triangular partitioning mode can partition a square block along a 45-degree angle, the video codec can apply different triangular partitioning mode angles for non-square rectangular blocks. For example, the video codec can apply a triangular partitioning mode to determine a first split line at a first triangular partitioning mode angle to evenly divide a first block that includes a width:height ratio of 1 :2, apply a triangular partitioning mode to determine a second split line at a second triangular partitioning mode angle to evenly divide a second block that includes a width:height ratio of 1 :4, and so on. That is, a set of triangular partitioning mode angles can include diagonal angles to accommodate each possible block ratio (e.g., 1 : 1, 1 :2, 1 :4, and 2: 1). In some examples, the value of N or M of an N:M ratio of samples of a current block can be 2X, where X is 0 or a positive integer.

[0039] Further, the set of triangular partitioning mode angles (also referred to herein as “TPM angles”) can include anti-diagonal angles to accommodate each possible block ratio (e.g., 1 : 1, 1 :2, 1 :4, 2: 1). The set of triangular partitioning mode angles can include a +180-degree angle corresponding to each diagonal angle and each anti-diagonal angle. For example, for block ratios of 1 : 1, 1 :2, 1 :4, 2: 1, the set of triangular partitioning mode angles can include 4 diagonal angles, 4 diagonal angles with a 180-degree offset, 4 anti-diagonal angles, and 4 anti-diagonal angles with a 180-degree offset, for a total of 16 angles.

[0040] A video codec can apply a geometric partition mode to partition a block of video data into one or more triangular shapes and one or more non-triangular shapes (e.g., trapezoidal shapes or rectangular shapes). For example, a video codec (e.g., a video encoder or a video decoder) can generate a first prediction block using motion information that includes a first partition comprising a trapezoidal shape and generate a second prediction block using motion information that includes a second partition comprising a trapezoidal shape. In this example, the video codec can apply a geometric partition mode weight to samples of the first prediction block and samples of the second prediction block to determine a final prediction block for the current block. In some examples, a video codec (e.g., a video encoder or a video decoder) can apply a geometric partition mode to partition a block of video data into a first partition and a second partition, where the first partition includes more samples than the second partition. In this way, a video codec can allow an additional number of samples with similar motion to be included within a single partition, which can potentially improve coding accuracy with little or no impact on computational complexity as compared to systems video codecs that rely on equally sized partitions and / or rectangular and triangular partitions.

[0041] To perform a geometric partition mode, some video codecs can be configured to use 32 angles of 11.25 degrees to select an angle of a partition line. For example, a video encoder can signal a value indicating one angle index selected from a set of 0-31. For example, angle index 0 can represent 0 degrees, angle index 1 can represent 11.25 degrees, angle index 2 can represent 22.5 degrees, and so on. In addition, the video encoder can signal the value to indicate a row displacement relative to a center of the block. Similarly, a video decoder can receive a value indicating one angle index selected from a set of 0-31 and a row displacement to determine a partition line for the block. In this way, a video codec can apply a geometric partition mode to non-uniformly partition a block of video data and / or allow a block of video data to be partitioned into non-rectangular and non-triangular shapes, which can potentially improve coding accuracy with little or no impact on computational complexity as compared to systems video codecs that rely on equally sized partitions and / or rectangular and triangular partitions.

[0042] However, there can be one or more problems with configuring a video codec (e.g., a video encoder or a video decoder) to use 32 angles of 11.25 degrees to select an angle of a partition line. For example, 32 angles of 11.25 degrees can cause the video codec to use a multiplication function to multiply a sample position by a cosine of the angle multiple times, which can be computationally large, causing a delay in coding. The techniques described herein can represent one or more solutions to the problems that exist with using 32 angles of 11.25 degrees to select an angle of a partition line. For example, a set of angles that are applicable to triangular partitioning can be instead applied to a geometric partition mode, such that the geometric partition mode can include a different set of angles.

[0043] For example, a set of angles for geometric mode partitioning can include triangular set partition mode angles corresponding to N:M ratios, where N and M are integers. For example, a set of angles for geometric mode partitioning can include triangular set partition mode angles corresponding to 1:1, 1:2, 1:4, and 2:1. More specifically, a set of angles for geometric mode partitioning can include a set of 4 diagonal angles, 4 diagonal angles with a 180 degree offset, 4 anti-diagonal angles, and 4 anti-diagonal angles with a 180 degree offset. In addition, a video codec can determine a set of angles for geometric mode partitioning to also include angles that support partitioning a block into a rectangular shape. For example, a set of angles for geometric mode partitioning can also include one or more horizontal angles and / or one or more vertical angles. In addition, in contrast to TPM, GPM allows for shifting a partition line from a corner of a current block. For example, when applying GPM with a triangular set partition mode angle, a video codec (e.g., a video encoder or a video decoder) can determine that a partition line that partitions a current block into a first partition and a second partition is not on a corner of the current block. For example, the video codec can determine that the partition line is arranged such that one or more of the first partition or the second partition includes a non-triangular shape (e.g., a trapezoid).

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

[0045] As Figure 1As shown, 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. In particular, source device 102 provides video data to destination device 116 via a computer- readable medium 110. Source device 102 and destination device 116 can comprise any of a wide variety of devices, including desktop computers, notebook (i.e., laptop) computers, tablet computers, set-top boxes, handheld phones (e.g., smartphones), televisions, cameras, display devices, digital media players, video gaming consoles, video streaming devices, or the like. In some cases, source device 102 and destination device 116 can be equipped for wireless communication, and thus can be referred to as wireless communication devices.

[0046] In Figure 1 the example of FIG. 1, source device 102 includes a video source 104, a memory 106, a video encoder 200, and an output interface 108. Destination device 116 includes an input interface 122, a video decoder 300, a memory 120, and a display device 118. In accordance with this disclosure, video encoder 200 of source device 102 and video decoder 300 of destination device 116 can be configured to apply the techniques for geometric partition mode with coordinated motion field storage and motion compensation in accordance with this disclosure. 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, a source device and a destination device can include other components or arrangements. For example, source device 102 can receive video data from an external video source, such as an external camera. Likewise, destination device 116 can interface with an external display device, rather than include an integrated display device.

[0047] As Figure 1 shown in FIG. 1, system 100 is merely one example. In general, any digital video encoding and / or decoding device can perform the techniques for geometric partition mode with coordinated motion field storage and motion compensation. Source device 102 and destination device 116 are merely examples of such coding devices in which source device 102 generates coded video data for transmission to destination device 116. This disclosure refers to a "coding" device as a device that performs coding (encoding and / or decoding) of data. Thus, video encoder 200 and video decoder 300 represent examples of coding devices, in particular, a video encoder and a video decoder, respectively. In some examples, devices 102, 116 can operate in a substantially symmetrical manner, such that each of devices 102, 116 includes video encoding and decoding components. Hence, system 100 can support one-way or two-way video transmission between video devices 102, 116, e.g., for video streaming, video playback, video broadcasting, or video telephony.

[0048] In general, video source 104 represents a source of video data (i.e., raw, uncoded video data) and provides a sequential series of pictures (also referred to as “frames”) of the video data to video encoder 200, which encodes the data of the pictures. Video source 104 of source device 102 can include a video capture device, such as a video camera, a video archive containing previously captured raw video, and / or a video feed interface to receive video from a video content provider. As a further alternative, video source 104 can generate computer graphics-based data as the 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 can rearrange the pictures from received order (sometimes referred to as “display order”) into codec order for coding. Video encoder 200 can generate a bitstream including encoded video data. Source device 102 can then output the encoded video data via output interface 108 onto computer-readable medium 110 for reception and / or retrieval by, e.g., input interface 122 of destination device 116.

[0049] Memory 106 of source device 102 and memory 120 of destination device 116 represent general purpose memories. In some examples, memories 106, 120 can store raw video data, e.g., raw video from video source 104 and raw decoded video data from video decoder 300. Additionally or alternatively, memories 106, 120 can store software instructions executable by, e.g., video encoder 200 and video decoder 300, respectively. Although memory 106 and memory 120 are shown separately from video encoder 200 and video decoder 300 in this example, it should be understood that video encoder 200 and video decoder 300 can also include internal memories to implement functionally similar or equivalent purposes. Further, memories 106, 120 can store encoded video data that is output from video encoder 200 and input to video decoder 300, e.g. In some examples, portions of memories 106, 120 can be allocated as one or more video buffers, e.g., to store raw decoded and / or encoded video data.

[0050] Computer-readable medium 110 can represent any type of medium or device capable of transporting the encoded video data from source device 102 to destination device 116. In one example, computer-readable medium 110 represents a communication medium to enable source device 102 to transmit encoded video data directly to destination device 116 in real-time, e.g., via a radio frequency network or computer-based network. Output interface 108 can modulate a transmission signal including the encoded video data, and input interface 122 can demodulate the received transmission signal, according to a communication standard, such as a wireless communication protocol. The communication medium can comprise any wireless or wired communication medium, such as a radio frequency (RF) spectrum or one or more physical transmission lines. The communication medium can 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 can include routers, switches, base stations, or any other equipment that can be useful to facilitate communication from source device 102 to destination device 116.

[0051] In some examples, computer-readable medium 110 can include storage device 112. Source device 102 can output encoded data from output interface 108 to storage device 112. Similarly, destination device 116 can access encoded data from storage device 112 via input interface 122. Storage device 112 can include any of a variety of distributed or locally accessed data storage media such as a hard drive, Blu-ray discs, DVDs, CD-ROMs, flash memory, volatile or non-volatile memory, or any other suitable digital storage media for storing encoded video data.

[0052] In some examples, computer-readable medium 110 can include a file server 114 or another intermediate storage device that can store the encoded video data generated by source device 102. Source device 102 can output encoded video data to file server 114 or another intermediate storage device that can store the encoded video generated by source device 102. Destination device 116 can access stored video data from file server 114 via streaming or download. File server 114 can be any type of server device capable of storing encoded video data and transmitting that encoded video data to the destination device 116. File server 114 can represent a web server (e.g., for a website), a file transfer protocol (FTP) server, a content delivery network device, or a network attached storage (NAS) device. Destination device 116 can access the encoded video data from file server 114 through any standard data connection, including an Internet connection. This can include a wireless channel (e.g., a Wi-Fi connection), a wired connection (e.g., digital subscriber line (DSL), cable modem, etc.), or a combination of both that is suitable for accessing encoded video data stored on file server 114. File server 114 and input interface 122 can be configured to operate according to a streaming or download transmission protocol, or a combination of both.

[0053] Output interface 108 and input interface 122 can represent wireless transmitters / receivers, modems, wired networking components (e.g., Ethernet cards), wireless communication components operating according to any of a variety of IEEE 802.11 standards, or other physical components. In examples where output interface 108 and input interface 122 comprise wireless components, output interface 108 and input interface 122 can 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, or the like. In some examples, output interface 108 and input interface 122 can be configured to transfer data, such as encoded video data, according to other wireless standards, such as an IEEE 802.11 specification, an IEEE 802.15 specification (e.g., ZigBee), a Bluetooth standard (e.g., Bluetooth Low Energy), or the like. In some examples, source device 102 and / or destination device 116 can include respective system on a chip (SoC) devices. For example, source device 102 can include an SoC device to perform the functionality attributed to video encoder 200 and / or output interface 108, and destination device 116 can include an SoC device to perform the functionality attributed to video decoder 300 and / or input interface 122. TM TM In some examples, source device 102 and / or destination device 116 can include respective system on a chip (SoC) devices. For example, source device 102 can include an SoC device to perform the functionality attributed to video encoder 200 and / or output interface 108, and destination device 116 can include an SoC device to perform the functionality attributed to video decoder 300 and / or input interface 122.

[0054] ​The technology of the present disclosure can be applied to video encoding and decoding to support any of a variety of multimedia applications, such as over-the-air television broadcasting, cable television transmission, satellite television transmission, Internet streaming video transmission such as Dynamic Adaptive Streaming over HTTP (DASH), digital video encoded onto a data storage medium, decoding of digital video stored on a data storage medium, or other applications.

[0055] The input interface 122 of the target device 116 receives an encoded video bitstream from the computer-readable medium 110 (e.g., a communication medium, a storage device 112, a file server 114, etc.). The encoded video bitstream may include signaling information defined by the video encoder 200 and also used by the video decoder 300, such as syntax elements having values ​​that describe the characteristics and / or processing of video blocks or other codec 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.

[0056] Although not in Figure 1 , but in some examples, the video encoder 200 and the video decoder 300 can each be integrated with an audio encoder and / or an audio decoder and can include appropriate MUX-DEMUX units or other hardware and / or software to process the multiplexed stream including audio and video in the common data stream. If applicable, the MUX-DEMUX unit can comply with the ITU H.223 multiplexer protocol or other protocols such as the User Datagram Protocol (UDP).

[0057] The video encoder 200 and the video decoder 300 can each be implemented as any of a variety of suitable encoder and / or decoder circuits, 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 technology is partially implemented in software, the device can store instructions for the software in a suitable non-transitory computer-readable medium and use one or more processors to execute the instructions in hardware to perform the technology of the present disclosure. Each of the video encoder 200 and the video decoder 300 can be included in one or more encoders or decoders, either of which can be integrated as part of a combined encoder / decoder (CODEC) in the respective device. The device including the video encoder 200 and / or the video decoder 300 can include an integrated circuit, a microprocessor, and / or a wireless communication device such as a cellular telephone.

[0058] The video encoder 200 and the video decoder 300 may operate in accordance with a video codec standard such as ITU-T H.265, also known as High Efficiency Video Codec (HEVC), or an extension thereof such as a multi-view and / or scalable video codec extension. Alternatively, the video encoder 200 and the video decoder 300 may operate in accordance with other proprietary or industry standards such as ITU-T H.266 (also known as Versatile Video Codec (VVC)). A draft of the VVC standard is described in Bross et al., "Versatile Video Coding (Draft 6)", ITU-T SG 16 WP3 and ISO / IEC JTC 1 / SC 29 / WG 11 Joint Video Experts Group (JVET), 15th Meeting: Gothenburg, Sweden, July 3-12, 2019, JVET-O2001-vE (hereinafter referred to as "VVC Draft 6"). A more recent draft of the VVC standard is described in Bross et al., "Versatile Video Coding (Draft 10)", ITU-T SG 16 WP3 and ISO / IEC JTC 1 / SC 29 / WG 11 Joint Video Experts Group (JVET), 19th Meeting: Teleconference, June 22-July 1, 2020, JVET-S2001-vG (hereinafter referred to as "VVC Draft 10"). However, the techniques of this disclosure are not limited to any particular codec standard.

[0059] Generally, the video encoder 200 and the video decoder 300 can perform block-based encoding and decoding of pictures. The term "block" generally refers to a structure that includes data to be processed (e.g., to be encoded, to be decoded, or otherwise used in the encoding and / or decoding process). For example, a block can include a two-dimensional matrix of samples of luminance and / or chrominance data. Generally, the video encoder 200 and the video decoder 300 can encode and decode video data represented in a YUV (e.g., Y, Cb, Cr) format. That is, the video encoder 200 and the video decoder 300 can encode and decode luminance and chrominance components, where the chrominance components can include both red and blue hue components, rather than encoding and decoding red, green, and blue (RGB) data of the samples of the picture. In some examples, the video encoder 200 converts the received RGB formatted data into a YUV representation before encoding, and the video decoder 300 converts the YUV representation into an RGB format. Alternatively, pre-processing and post-processing units (not shown) can perform these conversions.

[0060] This disclosure generally relates to coding (e.g., encoding and decoding) of pictures to include processes that encode or decode picture data. Similarly, this disclosure can relate to coding of blocks of pictures to include processes that encode or decode data of blocks, such as prediction and / or residual coding. An encoded video bitstream generally includes a series of values for syntax elements that represent coding decisions (e.g., coding modes) and partitioning of pictures into blocks. Thus, a reference to coding a picture or a block generally should be understood to code values of syntax elements that form the picture or block.

[0061] 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 quad tree structure. That is, the video coder partitions CTUs and CUs into four equal, non overlapping squares, and each node of the quad tree has zero or four child nodes. Nodes with zero child nodes can be referred to as“leaf nodes,” and CUs of such leaf nodes can include one or more PUs and / or one or more TUs. The video coder can further partition PUs and TUs. For example, in HEVC, a residual quad tree (RQT) represents partitioning of TUs. In HEVC, PUs represent inter prediction data, and TUs represent residual data. CUs that are intra predicted include intra mode information, such as an intra mode indication.

[0062] As another example, video encoder 200 and video decoder 300 can be configured to operate according to VVC. According to VVC, a video coder, such as video encoder 200, partitions a picture into coding tree units (CTUs). Video encoder 200 can partition CTUs according to a tree structure, such as a quad-tree binary tree (QTBT) structure or Multi-Type Tree (MTT) structure. The QTBT structure removes the concepts of multiple partition types, such as the separation between CUs, PUs, and TUs of HEVC. The QTBT structure includes two levels: a first level partitioned according to quad tree partitioning, and a second level partitioned according to binary tree partitioning. The root node of the QTBT structure corresponds to a CTU. Leaf nodes of the binary trees correspond to coding units (CUs).

[0063] In the MTT partitioning structure, blocks can be partitioned using quad tree (QT) partitioning, binary tree (BT) partitioning, and one or more types of ternary tree (TT) (also referred to as tri-tree) partitioning. Ternary tree or tri-tree partitioning is a manner of partitioning a block into three sub-blocks. In some examples, ternary tree or tri-tree partitioning divides a block into three sub-blocks without dividing the original block by a center. The partitioning types (e.g., QT, BT, and TT) in the MTT can be symmetric or asymmetric.

[0064] In some examples, video encoder 200 and video decoder 300 can use a single QTBT or MTT structure to represent each of the luma and chroma components, while in other examples, video encoder 200 and video decoder 300 can use two or more QTBT or MTT structures, such as one QTBT / MTT structure for the luma component and another QTBT / MTT structure for the two chroma components (or two QTBT / MTT structures for the respective chroma components).

[0065] Video encoder 200 and video decoder 300 can be configured to use quadtree partitioning according to HEVC, QTBT partitioning, MTT partitioning, or other partitioning structures. For purposes of illustration, the description of the techniques of this disclosure is presented with respect to QTBT partitioning. However, it should be understood that the techniques of this disclosure can also be applied to video codecs configured to use quadtree partitioning or other types of partitioning.

[0066] Blocks (e.g., CTUs or CUs) can be grouped in various ways in a picture. As one example, a brick can refer to a rectangular region of CTU rows in a particular tile in a picture. A tile can be a rectangular region of CTUs in a particular tile column and a particular tile row in a picture. A tile column refers to a rectangular region of CTUs having a height equal to the height of the picture and a width specified by a syntax element (e.g., such as in a picture parameter set). A tile row refers to a rectangular region of CTUs having a height specified by a syntax element (e.g., such as in a picture parameter set) and a width equal to the width of the picture.

[0067] In some examples, a tile can be partitioned into multiple bricks, each of which can include one or more CTU rows in the tile. A tile that is not partitioned into multiple bricks can also be referred to as a brick. However, a brick that is a proper subset of a tile cannot be referred to as a tile.

[0068] Bricks in a picture can also be arranged in slices. A slice can be an integer number of bricks of a picture, which can be exclusively contained in a single network abstraction layer (NAL) unit. In some examples, a slice includes multiple complete tiles or only a contiguous sequence of complete bricks of a single tile.

[0069] The disclosure can use "NxN" and "N by N" interchangeably to refer to the sample dimensions of a block, such as a CU or other video block, in terms of vertical and horizontal dimensions, e.g., 16x16 samples or 16 by 16 samples. In general, a 16x16 CU will have 16 samples in the vertical direction (y = 16) and 16 samples in the horizontal direction (x = 16). Likewise, an NxN CU will, in general, have N samples in the vertical direction and N samples in the horizontal direction, where N represents a nonnegative integer value. The samples in a CU can be arranged in rows and columns. Moreover, a CU need not necessarily have the same number of samples in the horizontal direction as in the vertical direction. For example, a CU can include NxM samples, where M is not necessarily equal to N.

[0070] Video encoder 200 encodes video data for CUs that represent prediction and / or residual information, among other information. Prediction information indicates how to predict a CU in order to form a prediction block for the CU. Residual information generally represents sample-by-sample differences between the CU prior to encoding and the prediction block.

[0071] To predict a CU, video encoder 200 can generally form a prediction block for the CU through inter-prediction or intra-prediction. Inter-prediction generally refers to predicting the CU from data of previously coded pictures, whereas intra-prediction generally refers to predicting the CU from previously coded data of the same picture. To perform inter-prediction, video encoder 200 can use one or more motion vectors to generate the prediction block. Video encoder 200 can generally perform a motion search to identify a reference block that closely matches the CU, e.g., in terms of differences between the CU and the reference block. Video encoder 200 can calculate a difference metric using a sum of absolute difference (SAD), sum of squared differences (SSD), mean absolute difference (MAD), mean squared differences (MSD), or other such difference calculations to determine whether a reference block closely matches a current CU. In some examples, video encoder 200 can use uni -prediction or bi-prediction to predict a current CU.

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

[0073] To perform intra prediction, video encoder 200 can select an intra prediction mode to generate a prediction block. Some examples of VVC provide sixty-seven intra prediction modes, including various directional modes as well as a planar mode and a DC mode. In general, video encoder 200 selects an intra prediction mode that describes neighboring samples of a current block (e.g., a block of a CU) from which to predict prediction samples of the current block. Assuming video encoder 200 is coding CTUs and CUs in a raster scan order (from left to right, top to bottom), such samples can generally be above, above and to the left of, or to the left of the current block in the same picture as the current block.

[0074] Video encoder 200 can apply a geometric partition mode to generate a first partition of a current block of video data and a second partition of the block of video data. In general, video encoder 200 can select a partition line that includes an angle and a displacement (e.g., a horizontal displacement from a center of the current block, a vertical displacement from the center of the current block, or a displacement from the center of the current block). Video encoder 200 can signal an indication (e.g., an index) of the partition line.

[0075] Video encoder 200 can generate a first prediction block using first motion information of the first partition and a second prediction block using second motion information of the second partition. Video encoder 200 can use the angle of the partition line to determine geometric mode weights to apply to the first prediction block and the second prediction block. For example, video encoder 200 can apply a weight map that applies weights to values of the current block consistent with the weights shown with respect to the partition line in the example of FIG. 7. Figure 8 Video encoder 200 can use the geometric partition mode weights to determine a final prediction block. For example, video encoder 200 can apply respective geometric partition mode weights to each co-located sample of the first prediction block and the second prediction block to determine values of samples of the final prediction block.

[0076] Video encoder 200 encodes data representing a prediction mode for the current block. By way of example, for inter prediction modes, video encoder 200 can encode data representing which of various available inter prediction modes was used and motion information for the corresponding mode. For uni-directional or bi-directional inter prediction, video encoder 200 can encode motion vectors using, for example, advanced motion vector prediction (AMVP) or merge mode. Video encoder 200 can use similar modes to encode motion vectors for affine motion compensation modes.

[0077] Following prediction, such as intra prediction or inter prediction of a block, video encoder 200 can 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 the block, formed using the corresponding prediction mode. Video encoder 200 can apply one or more transforms to the residual block to produce transform data in a transform domain rather than the sample domain. For example, video encoder 200 can apply a discrete cosine transform (DCT), an integer transform, a wavelet transform, or a conceptually similar transform. In addition, video encoder 200 can apply a secondary transform following the primary transform, such as a mode-dependent non-separable secondary transform (MDNSST), a signal-dependent transform, a Karhunen-Loeve transform (KLT), or the like. Video encoder 200 produces transform coefficients following application of the one or more transforms.

[0078] As described above, following any transforms to produce transform coefficients, video encoder 200 can perform quantization on the transform coefficients. Quantization generally refers to a process that quantizes transform coefficients to possibly reduce the amount of data used to represent the transform coefficients, providing further compression. By performing the quantization process, video encoder 200 can reduce the bit depth of some or all of the transform coefficients associated with the coefficients. For example, video encoder 200 can round n-bit values down to m-bit values during quantization, where n is greater than m. In some examples, to perform quantization, video encoder 200 can perform a bit- shift right of the values being quantized.

[0079] Following quantization, video encoder 200 can scan the transform coefficients, producing a one-dimensional vector from the two-dimensional matrix comprising the quantized transform coefficients. The scan can be designed so that higher energy, hence lower frequency, coefficients are placed in the front of the vector, and lower energy, hence higher frequency, transform coefficients are placed in the back of the vector. In some examples, video encoder 200 can utilize a pre-defined scan order to scan the quantized transform coefficients to produce a serialized vector, and then entropy encode the quantized transform coefficients of the vector. In other examples, video encoder 200 can perform an adaptive scan. Following scanning of the quantized transform coefficients to form a one-dimensional vector, video encoder 200 can entropy encode the one-dimensional vector, e.g., according to context adaptive binary arithmetic coding (CABAC). Video encoder 200 can also entropy encode values for syntax elements that describe metadata associated with the encoded video data used by video decoder 300 in decoding the video data.

[0080] To perform CABAC, video encoder 200 can assign a context within a context model to a symbol to be transmitted. The context can relate to, for example, whether neighboring values of a symbol are zero-valued or not. Probability determination can be based on the context assigned to the symbol.

[0081] Video encoder 200 can further generate syntax data, such as block-based syntax data, picture-based syntax data, and sequence-based syntax data, e.g., in picture headers, block headers, slice headers, to video decoder 300, or generate other syntax data, such as a sequence parameter set (SPS), a picture parameter set (PPS), or a video parameter set (VPS). Video decoder 300 can similarly decode such syntax data to determine how to decode corresponding video data.

[0082] In this way, video encoder 200 can generate a bitstream that includes encoded video data, e.g., syntax elements that describe partitioning of a picture into blocks (e.g., CUs) and prediction and / or residual information for the blocks. Ultimately, video decoder 300 can receive the bitstream and decode the encoded video data.

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

[0084] Video decoder 300 can receive an indication (e.g., an index) of the partition line. Video decoder 300 can apply the geometric partitioning mode to generate a first partition of the current block of video data using the partition line and a second partition of the block of video data using the partition line. In general, video decoder 300 can determine the partition line to include an angle and a displacement (e.g., a horizontal displacement from a center of the current block, a vertical displacement from the center of the current block, or a displacement from the center of the current block).

[0085] Video decoder 300 can generate a first prediction block using first motion information of the first partition and a second prediction block using second motion information of the second partition. Video decoder 300 can use the angle of the partition line to determine geometric mode weights to apply to the first prediction block and the second prediction block of the current block. For example, video decoder 300 can apply a weight map that applies weights to the first prediction block and the second prediction block based on the angle of the partition line. Video decoder 300 can combine the first prediction block and the second prediction block using the weights to generate a final prediction block for the current block. Figure 8the example shown in FIG. 7. Video decoder 300 can use the geometric partition mode weights to determine a final prediction block. For example, video decoder 300 can apply the respective geometric partition mode weights to each co-located sample of the first prediction block and the second prediction block to determine values for samples of the final prediction block.

[0086] For example, residual information can be represented by quantized transform coefficients. Video decoder 300 can inverse quantize and inverse transform the quantized transform coefficients of a block to reproduce a residual block for the block. Video decoder 300 uses the signaled prediction mode (intra or inter prediction) and related prediction information (e.g., motion information for inter prediction) to form a prediction block for the block. Video decoder 300 can then combine (on a sample-by-sample basis) the prediction block and the residual block to reproduce the original block. Video decoder 300 can perform additional processing such as performing a deblocking process to reduce visual artifacts along block boundaries.

[0087] According to the techniques of this disclosure, video decoder 300 can be configured to determine that a geometric partition mode is enabled for a current block of video data, and determine a partition line that partitions the current block into a first partition and a second partition, wherein, to determine the partition line, video decoder 300 is configured to select an angle of the partition line from a plurality of angles, each angle of the plurality of angles corresponding to an N:M ratio, where N and M are integers, and wherein the partition line is not on a corner of the current block. Video decoder 300 is further configured to determine geometric mode weights for the current block using the angle of the partition line, and generate a first prediction block using motion information of the first partition. Video decoder 300 is further configured to generate a second prediction block using motion information of the second partition, and apply the geometric partition mode weights to samples of the first prediction block and samples of the second prediction block to determine a final prediction block for the current block. Video decoder 300 is further configured to decode a residual block for the current block, and combine the final prediction block and the residual block to decode the current block.

[0088] In some examples, the video decoder 300 may be configured to determine whether a geometric partitioning mode is enabled for a current block of video data, and to determine a partitioning line that divides the current block into a first partition and a second partition, wherein, to determine the partitioning line, the video decoder 300 is configured to select an angle of the partitioning line from a plurality of angles, each of the plurality of angles corresponding to an N:M ratio, where N and M are integers, and wherein the partitioning line is not at a corner of the current block. The video decoder 300 is further configured to use the angle of the partitioning line to determine a geometric mode weight for the current block, and to generate a first prediction block using motion information of the first partition. The video decoder 300 is further configured to use the motion information of the second partition to generate a second prediction block, and to apply the geometric partitioning mode weight to samples of the first prediction block and samples of the second prediction block to determine a final prediction block for the current block. The video decoder 300 is further configured to generate a residual block for the current block of video data based on a difference between the current block of video data and the prediction block, and to encode the residual block.

[0089] Generally, the present disclosure may involve "signaling" certain information, such as syntax elements. The term "signaling" may generally refer to the communication of values ​​for syntax elements and / or other data used to decode encoded video data. That is, the video encoder 200 may signal the values ​​of syntax elements in a bitstream. Generally, signaling refers to generating values ​​in a bitstream. As described above, the source device 102 may transmit the bitstream to the destination device 116 in substantially real time (or non-real time, such as may occur when storing syntax elements to the storage device 112 for later retrieval by the destination device 116).

[0090] Figure 2A and 2B is a conceptual diagram showing an example quadtree binary tree (QTBT) structure 130 and a corresponding codec tree unit (CTU) 132. Solid lines represent quadtree partitioning, and dashed lines indicate binary tree partitioning. In each partition (i.e., non-leaf) node of the binary tree, a flag is signaled to indicate which partition type (i.e., horizontal or vertical) is used, where in this example, 0 indicates horizontal partitioning and 1 indicates vertical partitioning. For quadtree partitioning, since the quadtree node divides the block horizontally and vertically into 4 sub-blocks of equal size, there is no need to indicate the partition type. Accordingly, the video encoder 200 can encode syntax elements (e.g., partition information) at the region tree level (i.e., first level) (i.e., solid line) of the QTBT structure 130 and syntax elements (e.g., partition information) at the prediction tree level (i.e., second level) (i.e., dashed line) of the QTBT structure 130, and the video decoder 300 can decode the above. For the CU represented by the terminal leaf node of the QTBT structure 130 , the video encoder 200 may encode video data (such as prediction and transform data), and the video decoder 300 may decode the same.

[0091] Generally, Figure 2B A CTU 132 can be associated with parameters that define the sizes of blocks corresponding to nodes of the QTBT structure 130 at the first and second levels. These parameters can include a CTU size (representing the size of the CTU 132 in samples), a minimum quadtree size (MinQTSize, representing the minimum allowed quadtree leaf node size), a maximum binary tree size (MaxBTSize, representing the maximum allowed binary tree root node size), a maximum binary tree depth (MaxBTDepth, representing the maximum allowed binary tree depth), and a minimum binary tree size (MinBTSize, representing the minimum allowed binary tree leaf node size).

[0092] A root node of the QTBT structure corresponding to a CTU can have four child nodes at the first level of the QTBT structure, each of which can be partitioned according to quadtree partitioning. That is, a node at the first level is either a leaf node (having no child nodes) or has four child nodes. The example of the QTBT structure 130 represents such nodes, including child nodes and parent nodes with solid branches. If a node at the first level is not larger than the maximum allowed binary tree root node size (MaxBTSize), the node can be further partitioned by respective binary trees. The binary tree partitioning of a node can be iterated until the partitioning results in nodes that are either at the minimum allowed binary tree leaf node size (MinBTSize) or at the maximum allowed binary tree depth (MaxBTDepth). The example of the QTBT structure 130 represents such nodes as having dashed branches. Binary tree leaf nodes are represented as coding units (CUs), which are used for prediction (e.g., intra- or inter-picture prediction) and transform without any further partitioning. As noted above, a CU can also be referred to as a “video block” or “block.”

[0093] In one example of the QTBT structure, the CTU size is set to 128x128 (luma samples and two corresponding 64x64 chroma samples), MinQTSize is set to 16x16, MaxBTSize is set to 64x64, MinBTSize (for both width and height) is set to 4, and MaxBTDepth is set to 4. First, quad-tree partitioning is applied to the CTU to generate quad-tree leaf nodes. A quad-tree leaf node can have a size from 16x16 (i.e., MinQTSize) to 128x128 (i.e., the CTU size). If a quad-tree leaf node is 128x128, then it will not be further divided by binary tree since its size exceeds MaxBTSize (64x64 in this example). Otherwise, the quad-tree leaf node will be further partitioned by binary tree. Thus, the quad-tree leaf node is also the root node of binary tree and has a binary tree depth of 0. When the binary tree depth reaches MaxBTDepth (4 in this example), no further partition is allowed. When a binary tree node has a width equal to MinBTSize (4 in this example), it implies that no further vertical partition is allowed for the binary tree node. Similarly, a binary tree node with a height equal to MinBTSize implies that no further horizontal partition is allowed for the binary tree node. As described above, the leaf nodes of binary tree are referred to as CUs and are further processed according to prediction and transform without further partitioning.

[0094] Figure 3 FIG. 2 is a block diagram illustrating an example video encoder 200 that can perform the techniques of this disclosure. The video encoder 200 is provided by way of example only, and other configurations can be suitable. Figure 3 The techniques of this disclosure are provided for explanatory purposes and should not be considered limiting on the techniques broadly exemplified and described in this disclosure. For purposes of illustration, this disclosure describes the video encoder 200 in the context of video coding standards such as the HEVC video coding standard under development and the H.266 video coding standard. However, the techniques of this disclosure are not limited to these video coding standards and are generally applicable to video encoding and decoding.

[0095] In Figure 3In the example of FIG. 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 encoding 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 encoding unit 220 can be implemented in one or more processors or in processing circuitry. Furthermore, video encoder 200 can include additional or alternative processors or processing circuitry to perform these and other functions.

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

[0097] In this disclosure, reference to video data memory 230 should not be interpreted as being limited to memory internal to video encoder 200 (unless specifically so indicated) or memory external to video encoder 200 (unless specifically so indicated). Rather, reference to video data memory 230 should be understood as reference memory that stores video data that video encoder 200 receives for encoding (e.g., video data of a current block that is to be encoded). Figure 1 Memory 106 of video encoder 200 can also provide temporary storage of outputs from the various units of video encoder 200.

[0098] As illustrated, video encoder 200 further includes 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 encoding unit 220. Figure 3The various units of video encoder 200 are used to help understand the operations performed by video encoder 200. These units can be implemented as fixed- function circuits, programmable circuits, or a combination thereof. Fixed-function circuits refer to circuits that provide particular functionality, and are preset on the 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 that they can perform. For instance, programmable circuits can execute software or firmware that cause the programmable circuits to operate in the manner defined by instructions of the software or firmware. Fixed-function circuits can execute software instructions (e.g., to receive parameters or output parameters), but the types of operations that the fixed-function circuits perform are generally immutable. In some examples, one or more of the units can be distinct circuit blocks (fixed-function or programmable), and in some examples, one or more of the units can be integrated circuits.

[0099] Video encoder 200 can include arithmetic logic units (ALUs), elementary function units (EFUs), digital circuits, analog circuits, and / or programmable cores formed from programmable circuits. In examples where the operations of video encoder 200 are performed using software executed by the programmable circuits, memory 106 Figure 1 ) can store object code of the software that video encoder 200 receives and executes, or another memory within video encoder 200 (not shown) can store such instructions.

[0100] Video data memory 230 is configured to store video data to be encoded. Video encoder 200 can retrieve a picture of the video data from video data memory 230 and provide the video data to residual generation unit 204 and mode selection unit 202. Video data in video data memory 230 can be raw video data that is to be encoded.

[0101] Mode selection unit 202 includes motion estimation unit 222, motion compensation unit 224, and intra-prediction unit 226. Mode selection unit 202 can include additional functional units to perform video prediction from other prediction modes. As examples, mode selection unit 202 can include a palette unit, an intra block copy unit (which can be part of motion estimation unit 222 and / or motion compensation unit 224), an affine unit, a linear model (LM) unit, etc.

[0102] In general, mode selection unit 202 coordinates multiple encoding passes to test combinations of encoding parameters and derive rate-distortion values for such combinations. The encoding parameters can 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. Mode selection unit 202 can ultimately select the combination of encoding parameters that has the best rate-distortion value compared to other tested combinations.

[0103] Video encoder 200 can 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 can partition CTUs of a picture according to a tree structure such as the QTBT structure or quad-tree structure of HEVC described above. As described above, video encoder 200 can form one or more CUs from partitioning a CTU according to the tree structure. Such CUs can also be referred to generally as “video blocks” or “blocks.”

[0104] In general, mode select unit 202 also controls its components (e.g., motion estimation unit 222, motion compensation unit 224, and intra-prediction unit 226) to generate a prediction block for a current block (e.g., a current CU or an overlapping portion of a PU and a TU in HEVC). To perform inter-prediction of the current block, motion estimation unit 222 can 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 DPB 218). In particular, motion estimation unit 222 can calculate values that represent how similar a potential reference block is to the current block according to, for example, sum of absolute difference (SAD), sum of squared difference (SSD), mean absolute difference (MAD), mean squared difference (MSD), and the like. Motion estimation unit 222 can generally perform these calculations using point-wise differences between the current block and the reference block under consideration. Motion estimation unit 222 can identify the reference block with the lowest value generated by these calculations, which indicates the reference block that most closely matches the current block.

[0105] Motion estimation unit 222 can form one or more motion vectors (MVs) that define the position of a reference block in a reference picture relative to the position of the current block in the current picture. Motion estimation unit 222 can then provide the motion vector(s) to motion compensation unit 224. For example, for single -direction inter-prediction, motion estimation unit 222 can provide a single motion vector, while for bi-directional inter-prediction, motion estimation unit 222 can provide two motion vectors. Motion compensation unit 224 can then use the motion vector(s) to generate the prediction block. In some examples, motion compensation unit 224 can use the techniques described herein for geometric partitioning modes with coordinated motion field storage and motion compensation to form the prediction block. For example, motion compensation unit 224 can use the motion vector(s) to retrieve data for the reference block. As another example, if the motion vector(s) have fractional sample precision, motion compensation unit 224 can interpolate the prediction block according to one or more interpolation filters. Further, for bi-directional inter-prediction, motion compensation unit 224 can retrieve data for two reference blocks identified by the respective motion vectors and combine the retrieved data (e.g., by point-wise averaging or weighted averaging).

[0106] As another example, for intra prediction or intra prediction coding, the intra prediction unit 226 can generate a prediction block from samples neighboring the current block. For example, for directional modes, the intra prediction unit 226 can mathematically combine neighboring sample values and fill these calculated values across the current block in a defined direction to produce the prediction block. As another example, for a DC mode, the intra prediction unit 226 can calculate an average of neighboring samples of the current block and generate the prediction block to include the resulting average for each sample of the prediction block.

[0107] The mode selection unit 202 can apply a geometric partitioning mode to generate a first partition of the current block of video data and a second partition of the video data block. In general, the mode selection unit 202 can select a partition line that includes an angle and a displacement (e.g., a horizontal displacement from a center of the current block, a vertical displacement from the center of the current block, or a displacement from the center of the current block). The mode selection unit 202 can cause the entropy encoding unit 220 to signal an indication (e.g., an index) of the partition line.

[0108] The mode selection unit 202 can generate the first partition using first motion information of the first partition and generate the second partition using second motion information of the second partition. The mode selection unit 202 can use the angle of the partition line to determine geometric mode weights for the current block. For example, the mode selection unit 202 can apply a weight map that applies weights to values of the current block that are consistent with the weights shown with respect to the partition line in the example of Figure 8 The mode selection unit 202 can use the geometric partitioning mode weights to determine a final prediction block. For example, the mode selection unit 202 can apply respective geometric partitioning mode weights to each co-located sample of the first prediction block and the second prediction block to determine final values for samples of the final prediction block for the current block.

[0109] The mode selection unit 202 provides the prediction block to the residual generation unit 204. The residual generation unit 204 receives an original, unencoded version of the current block from the video data store 230 and receives the final prediction block from the mode selection unit 202. The residual generation unit 204 computes a sample-by-sample difference between the current block and the final prediction block. The resulting sample-by-sample difference defines a residual block for the current block. In some examples, the residual generation unit 204 can also use residual differential pulse code modulation (RDPCM) to determine differences between sample values in the residual block to generate the residual block. In certain examples, the residual generation unit 204 can be formed using one or more subtractor circuits that perform binary subtraction.

[0110] In examples where the mode selection unit 202 partitions the CU into PUs, each PU can be associated with a luma prediction unit and corresponding chroma prediction units. Video encoder 200 and video decoder 300 can support PUs having various sizes. As described above, the size of a CU can refer to the size of the luma coding block of the CU, while the size of a PU can refer to the size of the luma prediction unit of the PU. Assuming that a particular CU has a size of 2Nx2N, video encoder 200 can support 2Nx2N or NxN PU sizes for intra-prediction, and 2Nx2N, 2NxN, Nx2N, NxN, or similar symmetric PU sizes for inter-prediction. Video encoder 200 and video decoder 300 can also support asymmetric partitioning for inter-prediction for PU sizes 2NxnU, 2NxnD, nLx2N, and nRx2N.

[0111] In examples where the mode selection unit does not partition the CU into PUs, each CU can be associated with a luma coding block and corresponding chroma coding blocks. As described above, the size of a CU can refer to the size of the luma coding block of the CU. Video encoder 200 and video decoder 300 can support CU sizes of 2Nx2N, 2NxN, or Nx2N.

[0112] For other video coding techniques, such as intra block copy mode coding, affine mode coding, and linear model (LM) mode coding as some examples, the mode selection unit 202 generates a prediction block for the current block being coded via respective units associated with the coding techniques. In some examples, such as palette mode coding, the mode selection unit 202 can not generate a prediction block, but rather generate syntax elements that indicate a way to reconstruct the block based on a selected palette. In such modes, the mode selection unit 202 can provide these syntax elements to the entropy encoding unit 220 for encoding.

[0113] As described above, the residual generation unit 204 receives video data for the current block and the corresponding prediction 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 the point-wise difference between the prediction block and the current block.

[0114] The 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"). The transform processing unit 206 may apply various transforms to the residual block to form the transform coefficient block. For example, the 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, the transform processing unit 206 may perform multiple transforms on the residual block, for example, a primary transform and a secondary transform such as a rotation transform. In some examples, the transform processing unit 206 does not apply a transform to the residual block.

[0115] 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 selection 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 introduce information loss, and thus, the quantized transform coefficients may have lower precision than the original transform coefficients produced by the transform processing unit 206.

[0116] The inverse quantization unit 210 and the 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. The reconstruction unit 214 may generate a reconstructed block corresponding to the current block (albeit potentially with some degree of distortion) based on the reconstructed residual block and the prediction block generated by the mode selection unit 202. For example, the reconstruction unit 214 may add samples of the reconstructed residual block to corresponding samples from the prediction block generated by the mode selection unit 202 to generate the reconstructed block.

[0117] Filter unit 216 may perform one or more filter operations on the reconstructed block. For example, filter unit 216 may perform a deblocking operation to reduce blocking artifacts along the edges of the CU. In some examples, the operations of filter unit 216 may be skipped.

[0118] Video encoder 200 stores reconstructed blocks in DPB 218. For instance, in examples where the operations of filter unit 216 are not needed, reconstructed unit 214 can store reconstructed blocks to DPB 218. In examples where the operations of filter unit 216 are needed, filter unit 216 can store filtered reconstructed blocks to DPB 218. Motion estimation unit 222 and motion compensation unit 224 can retrieve reference pictures from DPB 218, which are formed from reconstructed (and potentially filtered) blocks, to inter-predict blocks of a subsequently encoded picture. In addition, intra-prediction unit 226 can use reconstructed blocks in DPB 218 of the current picture to intra-predict other blocks in the current picture.

[0119] In general, entropy encoding unit 220 can entropy encode syntax elements received from other functional components of video encoder 200. For example, entropy encoding unit 220 can entropy encode quantized transform coefficient blocks from quantization unit 208. As another example, entropy encoding unit 220 can entropy encode prediction 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 can perform one or more entropy encoding operations on syntax elements of another example of video data to generate entropy encoded data. For example, entropy encoding unit 220 can perform a context- adaptive variable length coding (CAVLC) operation, a CABAC operation, a variable to variable (V2V) length 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 encoding operation on the data. In some examples, entropy encoding unit 220 can operate in a bypass mode where syntax elements are not entropy encoded.

[0120] Video encoder 200 can output a bitstream that includes the entropy encoded syntax elements needed to reconstruct blocks of a slice or picture. In particular, entropy encoding unit 220 can output the bitstream.

[0121] The operations described above are described in terms of blocks. Such descriptions should be understood to be operations for luma coding blocks and / or chroma coding blocks. As described above, in some examples, luma coding blocks and chroma coding blocks are luma and chroma components of a CU. In some examples, luma coding blocks and chroma coding blocks are luma and chroma components of a PU.

[0122] In some examples, operations performed with respect to a luma coding block need not be repeated for a chroma coding block. As one example, operations to identify a motion vector (MV) and a reference picture for a luma coding block need not be repeated to identify an MV and a reference picture for a chroma block. Instead, the MV of the luma coding block can be scaled to determine the MV of the chroma block, and the reference picture can be the same. As another example, the intra prediction process can be the same for luma and chroma coding blocks.

[0123] 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 circuitry configured to: determine that a geometric partitioning mode is enabled for a current block of video data; and determine a partition line that partitions the current block into a first partition and a second partition, wherein, to determine the partition line, video encoder 200 is configured to: select an angle of the partition line from a plurality of angles, each angle of the plurality of angles corresponding to an N:M ratio of samples of the current block, where N and M are integers, and wherein the partition line is not on a corner of the current block. Video encoder 200 is further configured to determine a geometric mode weight for the current block using the angle of the partition line, and generate a first prediction block using motion information of the first partition. Video encoder 200 is further configured to generate a second prediction block using motion information of the second partition, and apply the geometric partitioning mode weight to samples of the first prediction block and samples of the second prediction block to determine a final prediction block for the current block. Video encoder 200 is further configured to generate a residual block for the current block of video data based on a difference between the current block of video data and the final prediction block, and encode the residual block.

[0124] Figure 4 is a block diagram illustrating an example video decoder 300 that can perform the techniques of this disclosure. The techniques are provided for purposes of explanation and are not limiting on the techniques as broadly exemplified and described. Figure 4 is a block diagram illustrating an example video decoder 300 that can perform the techniques of this disclosure. The techniques are provided for purposes of explanation and are not limiting on the techniques as broadly exemplified and described.

[0125] In Figure 4In the example of FIG. 3, video decoder 300 includes coded picture buffer (CPB) memory 320, entropy decoding unit 302, prediction processing unit 304, inverse quantization unit 306, inverse transform processing unit 308, reconstruction unit 310, filter unit 312, and decoded picture buffer (DPB) 314. Any or all of CPB memory 320, entropy decoding unit 302, prediction processing unit 304, inverse quantization unit 306, inverse transform processing unit 308, reconstruction unit 310, filter unit 312, and DPB 314 can be implemented in one or more processors or in processing circuitry. Moreover, video decoder 300 can include additional or alternative processors or processing circuitry to perform these and other functions.

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

[0127] CPB memory 320 can store video data, such as encoded video bitstreams, to be decoded by the components of video decoder 300. The video data stored in CPB memory 320 can be obtained, for example, from computer-readable medium 110 Figure 1 CPB memory 320 can include a CPB that stores encoded video data (e.g., syntax elements) from an encoded video bitstream. Also, CPB memory 320 can store video data other than syntax elements of a coded picture, such as temporary data representing outputs from the various units of video decoder 300. Generally, DPB 314 stores decoded pictures that video decoder 300 can 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 can 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 can be provided by the same memory devices or by independent memory devices. In various examples, CPB memory 320 can be on-chip with other components of video decoder 300, or off-chip relative to those components.

[0128] Additionally or alternatively, in some examples, video decoder 300 can receive the syntax elements and / or other information from memory 120 Figure 1) to retrieve the encoded and decoded video data. That is, memory 120 may store data together with CPB memory 320 as discussed above. Similarly, when some or all of the functionality of video decoder 300 is implemented in software to be executed by the processing circuitry of video decoder 300, memory 120 may store instructions to be executed by video decoder 300.

[0129] Show Figure 4 Various units are shown to aid in understanding the operations performed by the video decoder 300. These units may be implemented as fixed function circuits, programmable circuits, or a combination thereof. Figure 3 , fixed-function circuits refer to circuits that provide specific functions and are preset in the operations that can be performed. Programmable circuits refer to circuits that can be programmed to perform various tasks and provide flexible functions in the operations that can be performed. For example, a programmable circuit can execute software or firmware that causes the programmable circuit to operate in a manner defined by the instructions of the software or firmware. Fixed-function circuits can execute software instructions (for example, to receive parameters or output parameters), but the type of operations performed by fixed-function circuits is generally immutable. In some examples, one or more units may be different circuit blocks (fixed-function or programmable), and in some examples, one or more units may be integrated circuits.

[0130] The video decoder 300 may include an ALU, an EFU, digital circuits, analog circuits, and / or a programmable core formed by programmable circuits. In examples where the operation of the video decoder 300 is performed by software executed on the programmable circuits, on-chip or off-chip memory may store instructions (e.g., object code) of the software that the video decoder 300 receives and executes.

[0131] The entropy decoding unit 302 may receive the encoded video data from the CPB and perform entropy decoding on the video data to reproduce 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.

[0132] Generally, the video decoder 300 reconstructs a picture on a block-by-block basis and may perform reconstruction operations on each block individually (where the block currently being reconstructed (ie, decoded) may be referred to as a "current block").

[0133] Entropy decoding unit 302 can entropy decode syntax elements defining quantized transform coefficients of a quantized transform coefficient block, as well as transform information such as a quantization parameter (QP) and / or transform mode indication(s). Inverse quantization unit 306 can use the QP associated with the quantized transform coefficient block to determine a degree of quantization, and likewise, a degree of inverse quantization for inverse quantization unit 306 to apply. Inverse quantization unit 306 can inverse quantize the quantized transform coefficients, e.g., performing a bit- shift left operation. Inverse quantization unit 306 can thereby form a transform coefficient block comprising transform coefficients.

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

[0135] Further, prediction processing unit 304 generates a prediction block from the prediction information syntax elements entropy decoded by entropy decoding unit 302. For example, if the prediction information syntax elements indicate that the current block is inter-predicted, motion compensation unit 316 can generate the prediction block. In this case, the prediction information syntax elements can indicate a reference picture in DPB 314 from which to retrieve a reference block, and a motion vector identifying a location of the reference block in the reference picture relative to the current block in the current picture. Motion compensation unit 316 can generally perform the inter-prediction process in a manner substantially similar to that described for motion compensation unit 224 Figure 3 ) described above. In some examples, motion compensation unit 316 can use the techniques described herein for geometric partitioning modes with coordinated motion field storage and motion compensation to form the prediction block.

[0136] As another example, if the prediction information syntax elements indicate that the current block is intra-predicted, intra-prediction unit 318 can generate the prediction block according to an intra-prediction mode indicated by the prediction information syntax elements. Again, intra-prediction unit 318 can generally perform the intra-prediction process in a manner substantially similar to that described for intra-prediction unit 226 Figure 3 ) described above. Intra-prediction unit 318 can retrieve data for neighboring samples of the current block from DPB 314.

[0137] Prediction processing unit 304 can receive an indication (e.g., an index) of a split line. Prediction processing unit 304 can apply a geometric split mode to generate a first partition of the current block of video data using the split line and a second partition of the block of video data. In general, prediction processing unit 304 can determine a split line that includes an angle and a displacement (e.g., a horizontal displacement from a center of the current block, a vertical displacement from the center of the current block, or a displacement from the center of the current block).

[0138] Prediction processing unit 304 can generate a first prediction block using first motion information of the first partition determined using the first motion information of the first partition and a second prediction block using second motion information of the second partition determined using the second motion information of the second partition. Prediction processing unit 304 can determine a geometric mode weight for the current block using an angle of the split line. For example, prediction processing unit 304 can apply a weight map that applies a weight to a value of the current block that is consistent with the weight shown with respect to the split line in the example of Figure 8 Prediction processing unit 304 can determine a final prediction block using the geometric split mode weight. For example, prediction processing unit 304 can apply a respective geometric split mode weight to each co-located sample of the first prediction block and the second prediction block to determine a value of a sample of the final prediction block of the current block.

[0139] Reconstruction unit 310 can reconstruct the current block using the prediction block and the residual block. For example, reconstruction unit 310 can add the samples of the residual block to the corresponding samples of the prediction block to reconstruct the current block.

[0140] Filter unit 312 can perform one or more filter operations on the reconstructed block. For example, filter unit 312 can perform a deblocking operation to reduce block artifact pseudo effects along edges of the reconstructed block. The operations of filter unit 312 are not necessarily performed in all examples.

[0141] Video decoder 300 can store the reconstructed block in DPB 314. For example, in examples where the operations of filter unit 312 are not performed, reconstruction unit 310 can store the reconstructed block to DPB 314. In examples where the operations of filter unit 312 are performed, filter unit 312 can store the filtered reconstructed block to DPB 314. As described above, DPB 314 can provide reference information to prediction processing unit 304, such as samples of a current picture for intra-prediction and previously decoded pictures for subsequent motion compensation. In addition, video decoder 300 can output decoded pictures from DPB for subsequent presentation on a display device, such as display device 118 of FIG. 1. Figure 1

[0142] ​In this way, 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 circuitry configured to: determine that a geometric partitioning mode is enabled for a current block of video data; and determine a partition line that partitions the current block into a first partition and a second partition, wherein, to determine the partition line, video decoder 300 is configured to: select an angle of the partition line from a plurality of angles, each angle of the plurality of angles corresponding to an N:M ratio of samples of the current block, where N and M are integers, and wherein the partition line is not on a corner of the current block. Video decoder 300 is further configured to determine geometric mode weights for the current block using the angle of the partition line, and generate a first prediction block using motion information of the first partition. Video decoder 300 is further configured to generate a second prediction block using motion information of the second partition, and apply the geometric partitioning mode weights to samples of the first prediction block and samples of the second prediction block to determine a final prediction block for the current block. Video decoder 300 is further configured to decode a residual block for the current block, and combine the final prediction block and the residual block to decode the current block.

[0143] Video coding standards are described in this section, in particular techniques related to GPM storage in past standards. Video coding standards can include, for example and without limitation, 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 known as ISO / IEC MPEG-4 AVC), including its Scalable Video Coding (SVC) and Multiview Video Coding (MVC) extensions. The latest joint draft of MVC is described in ITU-T H.264, “Advanced video coding for generic audiovisual services,” proposed by ITU-T in March 2010.

[0144] In addition, there is a newly developed video coding standard, namely, for example and without limitation, High Efficiency Video Coding (HEVC) developed by the Joint Collaborative Team - Video Coding (JCT-VC) of ITU-T Video Coding Experts Group (VCEG) and ISO / IEC Motion Picture Experts Group (MPEG). The HEVC draft is available at http: / / phenix.int- evry.fr / jct / doc_end_user / documents / 12_Geneva / wg11 / JCTVC-L1003-v34.zip. The specification text for Versatile Video Coding and Test Model 6 (VTM6) can be referred to in JVET-O2001.

[0145] Figure 5is a conceptual diagram illustrating an example of triangle partition based inter prediction. As introduced in Chen et al., “Algorithm description of Versatile Video Coding and Test Model 5 (VTM 5),” ITU-T SG 16 WP3 and ISO / IEC JTC 1 / SC 29 / WG 11 Joint Video Expert Team (JVET), 14th Meeting: Geneva, CH, 19-27 March 2019, JVET-O2001-v2 (hereinafter “JVET-N1002”), a video coder (e.g., video encoder 200 and video decoder 300) can only apply the triangle partition mode to CUs coded in skip or merge mode, but not in merge with motion vector difference (MMVD) or combined inter and intra prediction (CIIP) mode. For CUs that satisfy these conditions (e.g., CUs coded in skip or merge mode, but not in MMVD or CIIP mode), video encoder 200 can signal one flag to indicate whether to apply the triangle partition mode.

[0146] When using the triangle partition mode, video encoder 200 and video decoder 300 can be configured to uniformly partition a CU into two triangle-shaped partitions using either a diagonal line partition of block 500 or an anti-diagonal line partition of block 502. As shown, the resulting partition lines are arranged on the corners of block 500. Video encoder 200 and video decoder 300 can be configured to use the motion of each triangle itself to inter predict each triangle partition in the CU; only allow uni-prediction for each partition, that is, each partition has one motion vector and one reference index. Video encoder 200 and video decoder 300 can be configured to apply uni-prediction motion constraints to ensure that only two times of motion compensation prediction are needed for each CU, which is the same as bi-prediction for the CU.

[0147] Video encoder 200 and video decoder 300 can be configured to derive the uni-prediction motion for each partition from a uni-prediction candidate list constructed using a uni-prediction candidate list construction (see Figure 6 ) construction. Figure 6In the example of FIG. 6, a CU-level flag indicates that the current CU is coded using the triangle partition mode. If the triangle partition mode is used, video encoder 200 can be configured to signal a flag indicating the triangle partition direction (e.g., diagonal or anti-diagonal) and two merge indices (e.g., one for each triangle partition). After prediction is performed for each triangle partition, video encoder 200 and video decoder 300 can be configured to use a blending process with adaptive weights to adjust the sample values along the diagonal or anti-diagonal edges. This is the prediction signal for the whole CU and transform, and video encoder 200 and video decoder 300 can be configured to apply the quantization process to the whole CU as in other prediction modes. Finally, video encoder 200 and video decoder 300 can be configured to store the motion field of the CU predicted using the triangle partition mode in 4x4 units using blending along the triangle partition edges (see Figure 8 ).

[0148] Figure 6 FIG. 7 is a conceptual diagram illustrating example spatial and temporal neighboring blocks used to construct a uni-prediction candidate list. The uni-prediction candidate list can include or consist of five uni-prediction motion vector candidates. Video encoder 200 and video decoder 300 can be configured to derive the uni-prediction candidate list from seven neighboring blocks including five spatial neighboring blocks (labeled 1-5 in Figure 6 ) and two temporal co-located blocks (labeled 6-7 in Figure 6 ). Video encoder 200 and video decoder 300 can be configured to collect the motion vectors of the seven neighboring blocks and place the motion vectors of the seven neighboring blocks into the uni-prediction candidate list in the following order: first, the motion vector of the uni-predicted neighboring block; then, for the bi-predicted neighboring blocks, the L0 motion vector (i.e., the L0 motion vector part of the bi-predicted MV), the Ll motion vector (i.e., the Ll motion vector part of the bi-predicted MV), and the average motion vector of the L0 and Ll motion vectors of the bi-predicted MVs. If the number of candidates is less than five, video encoder 200 and video decoder 300 can be configured to add a zero motion vector to the end of the list.

[0149] Figure 7 FIG. 8 is a conceptual diagram illustrating an example of uni-prediction MV selection for the triangle partition mode. The construction of the triangle partition mode (TPM) candidate list is described below. Given a merge candidate index, video encoder 200 and video decoder 300 can be configured to derive a uni-prediction motion vector from the merge candidate list. For a candidate in the merge list, video encoder 200 and video decoder 300 can be configured to use the candidate’s LX MV (where X equals the parity of the merge candidate index value) as the uni-prediction motion vector for the triangle partition mode. These motion vectors are inFigure 7 In the case where the corresponding LX motion vector does not exist, video encoder 200 and video decoder 300 can be configured to use the L(l-x) motion vector of the same candidate in the extended merge prediction candidate list as the uni-prediction motion vector for the triangle partition mode. For example, assuming the merge list consists of 5 sets of bi-prediction motion, video encoder 200 and video decoder 300 can be configured to compose a TPM candidate list of L0 / L1 / L0 / L1 / L0 MVs from the 0th / 1st / 2nd / 3rd / 4th merge candidate, from first to last. Video encoder 200 and video decoder 300 can then be configured to signal two different merge indices from the TPM mode, one for each triangle partition, to indicate the use of the candidate in the TPM candidate list.

[0150] Figure 8 is a conceptual diagram illustrating example weights used in a blending process. Figure 8 The example blending process of can be referred to herein as the section 2.2.3 blending along triangle partition edges, or simply the section 2.2.3.

[0151] A video codec (e.g., video encoder 200 and / or video decoder 300) can be configured to perform the example pixel blending of Figure 8 with one set of weights illustrated in Figure 8 The example pixel blending of can be performed by a video codec (e.g., video encoder 200 and / or video decoder 300) using a set of weights to generate a pixel in a blending region by, for example, weighted averaging co-located motion compensated pixels based on motion information of two triangle partitions. As used herein, a co-located pixel can refer to a first pixel of a first prediction block determined using a first partition (e.g., a first triangle partition) that is located at the same pixel position as a second pixel of a second prediction block determined using a second partition (e.g., a second triangle partition).

[0152] That is, for example, a video codec (e.g., video encoder 200 or video decoder 300) can apply pixel blending using a set of weights to generate a final prediction block for a chroma component of a block of video data. In this example, to apply the pixel blending, the video codec can use the set of weights to determine a weighted average of a co-located motion compensated pixel of a first partition block determined using motion information of a first triangle partition (illustrated as “P1”) and a co-located motion compensated pixel of a second partition block determined using motion information of a second triangle partition (illustrated as “P2”).

[0153] For example, a video codec (e.g., video encoder 200 or video decoder 300) can be configured to determine motion information for the first triangular partition by performing a motion search to identify a reference block that closely matches the first triangular partition, for example, based on a difference between the first triangular partition and the reference block. In some examples, the video codec can calculate a difference metric using a sum of absolute differences (SAD), a sum of squared differences (SSD), a mean absolute difference (MAD), a mean squared difference (MSD), or other such difference calculations to determine whether the reference block closely matches the first triangular partition. In some examples, the video codec can predict the first prediction block using unidirectional prediction or bidirectional prediction. Pixels of the first prediction block may be referred to herein as "P1," and may also be referred to herein as samples of the first prediction block.

[0154] Similarly, a video codec (e.g., video encoder 200 or video decoder 300) can be configured to determine motion information for the second triangular partition by performing a motion search to identify a reference block that closely matches the second triangular partition, for example, based on a difference between the first triangular partition and the reference block. In some examples, the video codec can calculate a difference metric using a sum of absolute differences (SAD), a sum of squared differences (SSD), a mean absolute difference (MAD), a mean squared difference (MSD), or other such difference calculations to determine whether the reference block closely matches the second triangular partition. In some examples, the video codec can predict the second prediction block using unidirectional prediction or bidirectional prediction. The pixels of the second prediction block may be referred to herein as "P2," and may also be referred to herein as samples of the second prediction block.

[0155] like Figure 8 As shown, the video codec (e.g., the video encoder 200 or the video decoder 300) can determine the pixel value P of the pixel marked with "2" of the prediction block 537 of the luma component (also referred to herein as the "final prediction block 537") and / or the prediction block 538 of the luma component ("final prediction block 538") by calculating the corresponding value P of each pixel according to Equation 1.

[0156]

[0157] wherein P1 is the first reference pixel value of the first pixel of the first prediction block, which in this example is co-located with the corresponding pixel marked with “2”, and wherein P2 is the second reference pixel value of the second pixel of the second prediction block, which in this example is co-located with the corresponding pixel marked with “2”.

[0158] exist Figure 8In the example, the video codec (e.g., video encoder 200 or video decoder 300) can determine the pixel value P of the pixel marked with "4" of the prediction block 537 of the luma component and / or the prediction block 538 of the luma component by calculating the corresponding value P of each pixel according to Equation 2.

[0159]

[0160] wherein P1 is the first reference pixel value of the first pixel of the first prediction block, which in this example is co-located with the corresponding pixel marked with “4”, and wherein P2 is the second reference pixel value of the second pixel of the second prediction block, which in this example is co-located with the corresponding pixel marked with “4”.

[0161] exist Figure 8 In the example, the video codec (e.g., video encoder 200 or video decoder 300) can determine the pixel value P of the pixel marked with "7" of the prediction block 537 of the luma component and / or the prediction block 538 of the luma component by calculating the corresponding value P of each pixel according to Equation 3.

[0162]

[0163] wherein P1 is the first reference pixel value of the first pixel of the first prediction block, which in this example is co-located with the corresponding pixel marked with “7”, and wherein P2 is the second reference pixel value of the second pixel of the second prediction block, which in this example is co-located with the corresponding pixel marked with “7”.

[0164] The values ​​"1" and "6" represent equations corresponding to Equations 1 to 3. That is, the video codec (e.g., the video encoder 200 or the video decoder 300) can determine the pixel value P of the pixel marked with "1" of the prediction block 537 of the luma component and / or the prediction block 538 of the luma component by calculating the corresponding value P of each pixel according to Equation 4.

[0165]

[0166] Wherein P1 is a first reference pixel value of a first pixel of a first prediction block, and wherein P2 is a second reference pixel value of a second pixel of a second prediction block.

[0167] The video codec (e.g., video encoder 200 or video decoder 300) can determine the pixel value P of the pixel marked with "6" of the prediction block 537 of the luma component and / or the prediction block 538 of the luma component by calculating the corresponding value P of each pixel according to Equation 5.

[0168]

[0169] Wherein P1 is a first reference pixel value of a first pixel of a first prediction block, and wherein P2 is a second reference pixel value of a second pixel of a second prediction block.

[0170] Although Figure 8 The example shown in shows an example set of weights {7 / 8, 6 / 8, 4 / 8, 2 / 8, 1 / 8} for luma and {7 / 8, 4 / 8, 1 / 8} for chroma, but other examples may use different weights. For example, there may be two weight sets, and in each set the chroma weights and luma weights may be defined separately:

[0171] The first set: {7 / 8, 6 / 8, 4 / 8, 2 / 8, 1 / 8} for luma and {7 / 8, 4 / 8, 1 / 8} for chroma.

[0172] Second set: {7 / 8, 6 / 8, 5 / 8, 4 / 8, 3 / 8, 2 / 8, 1 / 8} for luma and {6 / 8, 4 / 8, 2 / 8} for chroma.

[0173] The example motion field processing described below may be referred to herein as Section 2.2.4 Motion Field Storage, or simply Section 2.2.4. The video encoder 200 and the video decoder 300 may be configured to store motion vectors of CUs encoded and decoded in a triangular partitioning mode in 4x4 units. Depending on the position of each 4x4 unit, the video encoder 200 and the video decoder 300 may be configured to store unidirectional prediction or bidirectional prediction motion vectors. In this example, Mv1 and Mv2 may represent unidirectional prediction motion vectors for partition 1 and partition 2, respectively. When the CU may be partitioned from the upper left corner to the lower right corner (i.e., a 45° partition), partition 1 and partition 2 may be triangular blocks located at the upper right corner and the lower left corner, respectively; and when the CU is partitioned from the upper right corner to the lower left corner (i.e., a 135° partition), Mv1 and Mv2 become triangular blocks located at the upper left corner and the lower right corner, respectively. If the 4x4 unit is located at Figure 9 , the video encoder 200 and the video decoder 300 may be configured to store Mv1 or Mv2 for the 4x4 unit. Otherwise, if the 4x4 unit is located in the weighted region, the video encoder 200 and the video decoder 300 may be configured to store a bidirectionally predicted motion vector. The video encoder 200 and the video decoder 300 may be configured to derive the bidirectionally predicted motion vector from Mv1 and Mv2 according to the following process:

[0174] 1. If Mv1 and Mv2 are from different reference picture lists (one from L0 and the other from L1), video encoder 200 and video decoder 300 can be configured to combine Mv1 and Mv2 to form a bi-predictive motion vector.

[0175] 2. Otherwise, if Mv1 and Mv2 are from the same list, video encoder 200 and video decoder 300 can be configured to store only Mv2.

[0176] Figure 9 FIG. 6 is a conceptual diagram illustrating an example triangle partition mode (TPM). As shown, when the triangle partition mode is applied, a video codec (e.g., video encoder 200 or video decoder 300) can apply a diagonal split line 509 or an anti-diagonal split line 511. As shown, diagonal split line 590 and anti-diagonal split line 511 are arranged on the corners of the current block. Additionally, when the geometric partition mode is applied, a video codec can apply a split line at a quantized angle between 0 and 360 degrees, with a separation degree of 11.25 degrees and a separation line displacement from the center of the block.

[0177] Figure 9 Examples of TPMs are illustrated, as described in VVC Draft and GPM in Esenlik et al., “Non-CE4: Geometric Partitioning for Inter Blocks,” ITU-T SG 16 WP3 and ISO / IEC JTC 1 / SC 29 / WG 11 Joint Video Expert Team (JVET), 15th Meeting: Gothenburg, SE, 3-12 July 2019, JVET- O0489-v4 (hereinafter “JVET-6O0489”).

[0178] Geometric partitioning is introduced in JVET-O0489 as a proposed extension to the non-rectangular partitioning introduced for TPM. As introduced in JVET-O0489, a video encoder or video decoder can only apply the geometric partition mode (GEO) to CUs coded in skip or merge mode, but not CUs coded in MMVD or CIIP mode. For CUs that satisfy those conditions, a video encoder (e.g., video encoder 200) can signal one flag indicating whether to apply GPM. Figure 9 FIG. 7 illustrates TPMs in VVC Draft 6 and additional shapes proposed for non-rectangular inter blocks.

[0179] The total number of GPM partitions can be 140 possibilities. Additional signaling for GPM signals the angle a, as well as the split line displacement p relative to the center of the block. a represents a quantized angle between 0 and 360 degrees with a split of 11.25 degrees, and p represents a distance with 5 different values. Video encoder 200 and video decoder 300 can be configured to store the pair of values a and p in a table of size 140 x (3+5) / 8 = 140 bytes. That is, video encoder 200 can signal a value that indicates an angle index. Video decoder 300 can receive the value that indicates the angle index and use the value that indicates the angle index to determine the angle of the split line. Similarly, video encoder 200 can determine a distance offset from the center of the current block. Video encoder 200 can signal a value that indicates the offset index.

[0180] Figure 10 FIG. 4 is a diagram illustrating example GPM partition signaling. In Figure 10 Video encoder 200 can signal a value for the angle of the split line 515 and a value for the split line displacement p relative to the center of the block.

[0181] Similar to TPM, video encoder 200 and video decoder 300 can be configured to allow GPM partitioning for inter prediction for single directional prediction blocks that are not smaller than 8x8, in order to have the same memory bandwidth at the decoder side as for bi-directional prediction blocks. The motion vector prediction for GPM partitioning can be aligned with TPM. And in TPM, video encoder 200 and video decoder 300 can be configured to apply blending between the two predictions on the internal boundary.

[0182] According to the procedure proposed in JVET-O0489, video encoder can signal GPM mode as an additional merge mode.

[0183]

[0184] Table 1 Syntax elements introduced in JVET-O0489

[0185] geo_merge_idx0 and geo_merge_idx1 are coded using the same CABAC context and binarization as TPM merge index. geo_partition_idx indicates the partition mode (140 possibilities) and is coded using truncated binary binarization and bypass coding.

[0186] When GPM mode is not selected, video encoder 200 and video decoder 300 can be configured to select TPM. The partitioning of GPM mode does not include the partitioning that can be obtained by TPM with binary partitioning. In a sense, the proposed signaling scheme is similar to intra mode signaling, where TPM partitioning corresponds to the most probable partitioning and GPM mode corresponds to the remaining partitioning.

[0187] geo_partition_idx is used as an index to a lookup table storing pairs of a and p. As mentioned above, storing this table requires 140 bytes. The example blending operation for luma blocks can be referred to herein as the blending operation of Section 2.3.2 for luma blocks, or simply Section 2.3.2. As in the case of TPM, video encoder 200 and video decoder 300 can be configured to obtain the final prediction of the coded block by weighted averaging the first and second uni-predictions according to the sample weights.

[0188] sampleWeight L [x][y] = GeoFilter[distScaled] if distFromLine <= 0

[0189] sampleWeight L [x][y] = 8 - GeoFilter[distScaled] if distFromLine > 0

[0190] where the sample weights are implemented as a lookup table, as in Table 2 below:

[0191]

[0192] Table 2 Blending filter weights

[0193] The number of operations to compute the sample weights is approximately one addition per sample, which has similar computational complexity as TPM. In more detail, for each sample, video encoder 200 and video decoder 300 can be configured to compute distScaled according to the following two equations:

[0194] distFromLine = ((x « 1) + 1) * Dis[displacementX] + ((y « 1) + 1) * Dis[displacementY] - rho

[0195] distScaled = min((abs(distFromLine) + 8) » 4, 14)

[0196] Wherein the video encoder 200 and the video decoder 300 can be configured to calculate the variables rho, displacementX, and displacementY once per codec block, Dis[] is a lookup table having 32 entries (8-bit resolution) storing cosine values, and the video encoder 200 and the video decoder 300 can be configured to calculate distFromLine by incrementing distFromLine for each sample by a value of 2*Dis[displacementX] within a sample row and by a value of 2*Dis[displacementX] from one sample row to the next. Thus, the distFromLine value is obtained using slightly more than one addition per sample. Additionally, minimum, absolute value, and downshift operations can be used without introducing any significant complexity.

[0197] The video encoder 200 and the video decoder 300 can be configured to implement all operations of the GPM using integer arithmetic. The computational complexity of the GPM may be very similar to that of the TPM. More details about the hybrid operation can be found in, for example, JVET-00489.

[0198] The video encoder 200 and the video decoder 300 may be configured to subsample the sample weights calculated for the luma samples and use the sample weights calculated for the luma samples to perform chroma blending without any calculation. The video encoder 200 and the video decoder 300 may be configured to set the chroma sample weight at the coordinate (x, y) to be equal to the luma sample weight at the coordinate (2x, 2y) with respect to the upper left corner sample of the luma block.

[0199] The video encoder 200 and the video decoder 300 can be configured to derive motion vectors for each partition of the GPM block using the same merge list derivation process used for TPM. For example, the video encoder 200 and the video decoder 300 can be configured to predict each partition using only unidirectional prediction.

[0200] The video encoder 200 and the video decoder 300 may be configured to weight the luma samples at the four corners of a 4x4 motion memory unit (which may be obtained by following the Figure 8 The sum is calculated by blending the triangular segmentation edges shown in FIG. 2 . The video encoder 200 and the video decoder 300 can then be configured to compare the sum with two thresholds to determine whether one of the two unidirectional prediction motion information or the bidirectional prediction motion information is stored. The video encoder 200 and the video decoder 300 can be configured to derive the bidirectional prediction motion information using the same process as TPM.

[0201] The current GPM design describes an extension to TPM. However, some divergences can be reconciled during the 15th JVET meeting in Gothenburg. The reconciliation of TPM and GPM motion field storage will be discussed below. The TPM algorithm only utilizes the position of 4x4 units in a CU to determine the motion vectors that need to be stored, while the GPM approach uses the weights used for motion compensation for storage. Furthermore, if the existing GPM motion field storage algorithm is applied to TPM, the TPM storage results will change. It is beneficial to have a unified storage process for both TPM and GPM processes.

[0202] The reconciliation of TPM and GPM weight derivation is discussed below. The GPM algorithm described for the weight derivation for the luma block is different from the GPM algorithm used for TPM weight derivation. It is beneficial to have a unified weight derivation process for both methods.

[0203] Several processes for unifying the motion field storage and motion weight derivation for TPM and GPM are disclosed.

[0204] A variation of GPM motion field storage is discussed below.

[0205] In some examples, the motion field storage of GPM can be modified by the following.

[0206] Video encoder 200 and video decoder 300 can be configured to use the distance from the center of each 4x4 unit to the partition line such that the same equation can be used for TPM motion field storage without changing the MVs stored for TPM. In some examples, video encoder 200 and video decoder 300 can be configured to derive the motion storage buffer using the following equation:

[0207] sx_i = (x « 1) + 4;

[0208] sy_i = (y « 1) + 4;

[0209] d = (sx_i * Dis[displacementX] + sy_i * Dis[displacementY] - rho);

[0210] distanceScaled = (abs(d) + shiftDistanceOffset) » shiftDistance;

[0211] tempMotionBuffer[x » 2] = (distanceScaled «= 16)? 2 : d «= 0? 0 : 1;

[0212] where sx_i represents a distance between a center of the i-th 4x4 block and a split line in the x direction, sy_i represents a distance between the center of the i-th 4x4 block and a split line in the y direction, d is an intermediate variable, displacement, displacementY, and rho represent split lines, each block is calculated once per coded block, distanceScaled represents a scaled distance between the center of the i-th 4x4 block and a split line, and tempMotionBuffer represents a “GEO’s motion field storage” which can be 2 for bi-prediction (e.g., using list 0 and list 1), 1 for uni-prediction (e.g., using only list 0 or list 1), and 0 for uni-prediction (e.g., using only list 1 or list 0).

[0213] In some examples, video encoder 200 and video decoder 300 can be configured to derive the motion storage buffer using the following equations:

[0214] sx_i = (x « 2) + 2;

[0215] sy_i = (y « 2) + 2;

[0216] d = (sx_i * Dis[displacementX] + sy_i * Dis[displacementY] - rho);

[0217] distanceScaled = (abs(d) + shiftDistanceOffset) » shiftDistance;

[0218] tempMotionBuffer[x » 2] = (distanceScaled «= 16)? 2 : d «= 0? 0 : 1;

[0219] In some examples, video encoder 200 and video decoder 300 can be configured to derive the motion storage buffer using the following equations:

[0220] sx_i = (x * 4) + 2.5;

[0221] y_i = (y * 4) + 2.5;

[0222] d = (sx_i * Dis[displacementX] + sy_i * Dis[displacementY] - rho);

[0223] distanceScaled = (abs(d) + shiftDistanceOffset) » shiftDistance;

[0224] tempMotionBuffer[x » 2] = (distanceScaled <= 16)? 2 : d <= 0? 0 : 1;

[0225] Video encoder 200 and video decoder 300 can be configured to apply scaling to enable integer operations.

[0226] where x (respectively y) ranges from 0 to the width (respectively height) of the block in steps of 4. Wherein, video encoder 200 and video decoder 300 can be configured to derive displacementX, displacementY, Dis, and rho using the blending operation (see Table 2) for luma blocks and tempMotionBuffer equal to 0 indicates storage of MvO, equal to 1 indicates storage of Mvl, and equal to 2 indicates storage of biMv using motion field storage. For example, video encoder 200 and video decoder 300 can be configured to derive displacementX, displacementY, Dis, and rho according to the process described in section 2.3.2. In certain examples, tempMotionBuffer equal to 2 indicates storage of biMv using the process described in section 2.2.4.

[0227] Variations of GPM motion weight derivation are discussed below. In some examples, video encoder 200 and video decoder 300 can be configured to vary the weights used for the blending portion in GPM such that the weights used for the blending portion in GPM use TPM weight handling for blending along a triangle partition edge (see Figure 9 ). For example, video encoder 200 and video decoder 300 can be configured to vary the weights used for the blending portion in GPM such that the weights used for the blending portion in GPM use TPM weight handling described in section 2.2.3. For example, video encoder 200 and video decoder 300 can be configured to identify a partition edge, generate a subblock including the partition edge arranged within the subblock to correspond to a TPM position, and derive GPM motion weights using TPM weight handling.

[0228] Video encoder 200 and video decoder 300 can be configured to change the angles used by GPM so that the angles used by GPM match the TPM angles. For example, video encoder 200 and video decoder 300 can be configured to use GPM to have angles equivalent to TPM (e.g., more than 32 angles). In other words, video encoder 200 and video decoder 300 can be configured to use GPM to select an angle of a partition line from a plurality of angles, each of the plurality of angles corresponding to an N:M ratio of samples of a current block, where N and M are integers. For example, video encoder 200 and video decoder 300 can apply angles corresponding to a 1:2 ratio, a 1:4 ratio, a 1:1 ratio, a 2:1 ratio, a 0:1 ratio, or a 1:0 ratio, rather than using 32 angles that are spaced 11.25 degrees apart.

[0229] Video encoder 200 and video decoder 300 can be configured to move the start and end positions of a weighting region by an offset to replicate GPM multiple offsets. In other words, a video codec (e.g., video encoder 200 or video decoder 300) can determine a partition line that partitions a current block into a first partition and a second partition, where, to determine the partition line, the video codec is configured to select an angle of the partition line that is not on a corner of the current block. In some examples, the video codec can determine a weighting region based on the angle of the partition line and shift the weighting region to a generated shifted weighting region based on a distance offset from a center of the current block.

[0230] Video encoder 200 and video decoder 300 can be configured to use TPM angles from different block sizes along with GEO to allow more GPM angles. Figure 11 Examples are presented in the detailed description. Figure 11 is a conceptual diagram illustrating an example GPM coordination with TPM.

[0231] Figure 12 is a flowchart illustrating an example method for encoding a current block. The current block can include a current CU. Although described with respect to video encoder 200 Figure 1 and Figure 3 ), it should be understood that other devices can be configured to perform a method similar to Figure 12 .

[0232] In this example, video encoder 200 predicts (350) the current block. For example, video encoder 200 can form a prediction block for the current block. In some examples, video encoder 200 can use the techniques described herein for geometric partitioning mode to form the prediction block. Video encoder 200 can then calculate a residual block for the current block (352). To calculate the residual block, video encoder 200 can calculate the difference between the original, unencoded block and the prediction block for the current block. Video encoder 200 can then transform and quantize (354) the coefficients of the residual block. Next, video encoder 200 can scan the quantized transform coefficients of the residual block (356). During the scan or after the scan, video encoder 200 can entropy encode (358) the transform coefficients. For example, video encoder 200 can encode the transform coefficients using CAVLC or CABAC. Video encoder 200 can then output the entropy encoded data for the block (360).

[0233] Figure 13 is a flowchart illustrating an example method for decoding a current block of video data. The current block can include a current CU. Although described with respect to video decoder 300 Figure 1 and Figure 4 ) it should be understood that other devices can be configured to perform a method similar to Figure 13 .

[0234] Video decoder 300 can receive entropy encoded data for the current block, such as entropy encoded prediction information and entropy encoded data for the coefficients of a residual block corresponding to the current block (370). Video decoder 300 can decode the entropy encoded data to determine prediction information for the current block and to reproduce the coefficients of the residual block (372). Video decoder 300 can predict (374) the current block, e.g., using an intra or inter prediction mode indicated by the prediction information for the current block, to calculate a prediction block for the current block. In some examples, video decoder 300 can use the techniques described herein for geometric partitioning mode to form the prediction block. Video decoder 300 can then inverse scan the reproduced coefficients to create a block of quantized transform coefficients (376). Video decoder 300 can then inverse quantize and inverse transform the transform coefficients to produce a residual block (378). Video decoder 300 can finally decode the current block by combining the prediction block and the residual block (380).

[0235] Figure 14is a conceptual diagram illustrating example GPM coordination with TPM. As shown, the GPM angle of split line 381 has an aspect ratio that is not a multiple of 2. That is, split line 381 has an aspect ratio of 4 to 7. In other examples, the aspect ratio that is not a multiple of 2 can be different than 4 to 7, e.g., 3 to 7, 2 to 7, 3 to 8, etc.

[0236] Figure 15 is a flowchart illustrating an example method for encoding a current block using a plurality of angles, each of the plurality of angles corresponding to an N:M ratio of samples of the current block, in accordance with the techniques of this disclosure. Video encoder 200 (e.g., mode selection unit 202) can determine that a geometric partitioning mode is enabled for a current block of video data (502). Video encoder 200 (e.g., mode selection unit 202) can determine a split line that partitions the current block into a first partition and a second partition, wherein determining the split line includes selecting an angle of the split line from a plurality of angles, each of the plurality of angles corresponding to an N:M ratio of samples of the current block, where N and M are integers, and wherein the split line is not on a corner of the current block (504). Video encoder 200 (e.g., mode selection unit 202) can determine geometric mode weights for the current block using the angle of the split line (506). Video encoder 200 (e.g., mode selection unit 202) can generate a first partition block using motion information for the first partition (508). Video encoder 200 (e.g., mode selection unit 202) can generate a second partition block using motion information for the second partition (510). Video encoder 200 (e.g., mode selection unit 202) can apply the geometric partitioning mode weights to samples of the first prediction block and samples of the second prediction block to determine a final prediction block for the current block (512). Video encoder 200 (e.g., residual generation unit 204) can generate a residual block for the current block of video data based on a difference between the current block of video data and the final prediction block (514). Video encoder 200 (e.g., entropy encoding unit 220) can encode the residual block to generate an encoded residual block (516) and output the encoded residual block (518).

[0237] Figure 16is a flowchart illustrating an example method for decoding a current block of video data using a plurality of angles, each of the plurality of angles corresponding to an N:M ratio of samples of the current block, in accordance with the techniques of this disclosure. Video decoder 300 (e.g., prediction processing unit 304) can determine that a geometric partitioning mode is enabled for a current block of video data (552). Video decoder 300 (e.g., prediction processing unit 304) can determine a partition line that partitions the current block into a first partition and a second partition, wherein the determination of the partition line includes selecting an angle of the partition line from a plurality of angles, each of the plurality of angles corresponding to an N:M ratio of samples of the current block, where N and M are integers, and wherein the partition line is not on a corner of the current block (554). Video decoder 300 (e.g., prediction processing unit 304) can determine geometric mode weights for the current block using the angle of the partition line (556). Video decoder 300 (e.g., prediction processing unit 304) can generate a first prediction block using motion information for the first partition (558). Video decoder 300 (e.g., prediction processing unit 304) can generate a second prediction block using motion information for the second partition (560). Video decoder 300 (e.g., prediction processing unit 304) can apply the geometric partitioning mode weights to samples of the first prediction block and samples of the second prediction block to determine a final prediction block for the current block (562). Video decoder 300 (e.g., entropy decoding unit 302 with inverse quantization unit 306 and inverse transform processing unit 308) can decode a residual block for the current block (564). Video decoder 300 (e.g., reconstruction unit 310) can combine the final prediction block and the residual block to decode the current block (566). Video decoder 300 (e.g., DPB 314) can output the current block (568).

[0238] Figure 17 is a conceptual diagram illustrating example angles for a block having a 1:2 ratio, in accordance with the techniques of this disclosure. Figure 17 One or more of the example angles for a block of Figure 17 include partition line 602 including a 153.43° angle, partition line 604 including a 26.57° angle, partition line 606 including a 333.43° angle, and partition line 608 including a 208.57° angle.

[0239] Figure 18 is a conceptual diagram illustrating example angles for a block having a 1:4 ratio, in accordance with the techniques of this disclosure. Figure 18 One or more of the example angles for a block of Figure 18includes a split line 612 containing a 165.96° angle, a split line 614 containing a 14.04° angle, a split line 616 containing a 345.96° angle, a split line 618 containing a 194.04° angle.

[0240] Figure 19 is a conceptual diagram illustrating example angles for a block with a 1 : 1 ratio according to the techniques of this disclosure. Figure 19 One or more example angles for a block of can be included in a set of angles for a geometric partition mode. As shown, Figure 19 includes a split line 622 containing a 135° angle, a split line 624 containing a 45° angle, a split line 626 containing a 315° angle, a split line 628 containing a 225° angle.

[0241] Figure 20 is a conceptual diagram illustrating example angles for a block with a 2: 1 ratio according to the techniques of this disclosure. Figure 20 One or more example angles for a block of can be included in a set of angles for a geometric partition mode. As shown, Figure 20 includes a split line 632 containing a 116.57° angle, a split line 634 containing a 63.43° angle, a split line 636 containing a 296.57° angle, a split line 638 containing a 243.43° angle.

[0242] Figure 21 is a conceptual diagram illustrating example angles for a block with a 0: 1 ratio according to the techniques of this disclosure. Figure 21 One or more example angles for a block of can be included in a set of angles for a geometric partition mode. As shown, Figure 21 includes a split line 642 containing a 90° angle and a split line 644 containing a 270° angle.

[0243] Figure 22 is a conceptual diagram illustrating example angles for a block with a 1 : 0 ratio according to the techniques of this disclosure. Figure 22 One or more example angles for a block of can be included in a set of angles for a geometric partition mode. As shown, Figure 22 includes a split line 652 containing a 0° angle and a split line 654 containing a 180° angle.

[0244] Figures 17-22 The angles shown in can include the following features: the tangent of the proposed angle is a power of 2, where a significant portion of the multiplications required for wldx(x, y) can be replaced by using bit shifts.

[0245]

[0246] Using those with a power of 2 as the angle of the tangent line, a video codec (e.g., video encoder 200 or video decoder 300) can replace the multiplication by one per sample by using a bit shift operation in the implementation of the ‘dynamic’ calculation of the GPM weight values. Since the trigonometric functions can implement integer precision operations, reducing the multiplication by one helps to reduce the rounding error.

[0247] In some implementations, it can be preferable to store a mask with the weight of each CU size and each partition to reduce the number of operations required by GEO, since the weight values repeat row by row with the phase shift. This behavior can be expressed by using Equation 10, as follows:

[0248]

[0249] wldx(x, y) can be interpreted as inferring one of the weight values assigned to the integer sample immediately above the previous row, and thus a row of weight values is the only thing needed for mask storage.

[0250] In certain cases, the value of tan(a) can not be an integer, cot(a) is used as a replacement, and thus the weight values repeat column by column with the phase shift, as shown in Equation 12. It can be seen that wldx(x, y) can be interpreted as inferring one of the weight values assigned to the integer sample immediately to the left of the previous column, and thus a column of weight values is the only thing needed for mask storage.

[0251]

[0252] In Gao et al., “Geometric Merge Mode (GEO),” ITU-T SG 16 WP3 and ISO / IEC JTC 1 / SC 29 / WG 11 Joint Video Expert Team (JVET), 16th Meeting: Geneva, CH, 1-11 Oct, 2019, JVET-P0068-v2 (hereinafter “JVET-P0068”), most of the angles have non-integer values for tan(a), which means that (x-tan(a), y-1) and (x-1, y-cot(a)) do not fall on the center of the pixel, and this property cannot be used.

[0253] According to the techniques of this disclosure, a video codec (e.g., video encoder 200 or video decoder 300) can be configured to align the derivation process of TPM with GPM, and thus the TPM mode can share the same functionality as the GPM to derive its weight values. In this way, the TPM mode can become identical to a particular GPM mode, with a diagonal (or anti-diagonal) partition and an edge index equal to zero.

[0254] A non-limiting, illustrative list of examples of the techniques of this disclosure is provided below.

[0255] Example 1. A method of coding video data, the method comprising: determining that a geometric partition mode is enabled for a current block; determining a partition line that partitions the current block into a first partition and a second partition; for each 4x4 block of the current block, deriving a motion vector based on a distance from a center of each respective 4x4 unit of the current block to the partition line, wherein deriving the motion vector comprises: selecting a uni-prediction with a first prediction motion vector, a uni-prediction with a second prediction motion vector, or a bi-prediction with the first prediction motion vector and the second prediction motion vector for the respective 4x4 unit of the current block according to a distance of the respective 4x4 unit to the partition line, and not using weights for motion compensation; and determining a prediction block for the current block using the motion vector.

[0256] Example 2. The method of example 1, wherein deriving the motion vector comprises using the following equations:

[0257] sx_i = (x « 1) + 4;

[0258] sy_i = (y « 1) + 4;

[0259] d = (sx_i * Dis[displacementX] + sy_i * Dis[displacementY] - rho);

[0260] distanceScaled = (abs(d) + shiftDistanceOffset) » shiftDistance;

[0261] tempMotionBuffer[x » 2] = (distanceScaled «= 16)? 2 : d «= 0? 0 : 1;

[0262] where sx_i represents a distance between a center of an i-th 4x4 block of the current block and the partition line in an x-direction, sy_i represents a distance between the center of the i-th 4x4 block and the partition line in a y-direction, d is an intermediate variable, displacementX, displacementY, and rho represent the partition line, distanceScaled represents a scaled distance between the center of the i-th 4x4 block and the partition line, and tempMotionBuffer represents whether to derive the motion vector using the uni-prediction with the first prediction motion vector, the uni-prediction with the second prediction motion vector, or the bi-prediction with the first prediction motion vector and the second prediction motion vector.

[0263] Example 3. The method of example 1, wherein deriving the motion vector comprises using the following equations:

[0264] sx_i = (x « 1) + 2;

[0265] sy_i = (y « 1) + 2;

[0266] d = (sx_i * Dis[displacementX] + sy_i * Dis[displacementY] - rho);

[0267] distanceScaled = (abs(d) + shiftDistanceOffset) » shiftDistance;

[0268] tempMotionBuffer[x » 2] = (distanceScaled <= 16)? 2 : d <= 0? 0 : 1;

[0269] where sx_i represents a distance between a center of an i-th 4x4 block of the current block and a split line along an x direction, sy_i represents a distance between the center of the i-th 4x4 block and a split line along a y direction, d is an intermediate variable, displacementX, displacementY, and rho represent the split lines, distanceScaled represents a scaled distance between the center of the i-th 4x4 block and the split line, and tempMotionBuffer represents whether to use uni-prediction with a first prediction motion vector, uni-prediction with a second prediction motion vector, or bi-prediction with the first prediction motion vector and the second prediction motion vector to derive the motion vector.

[0270] Example 4. The method of example 1, wherein deriving the motion vector comprises using the following equations:

[0271] sx_i = (x « 1) + 2.5;

[0272] sy_i = (y « 1) + 2.5;

[0273] d = (sx_i * Dis[displacementX] + sy_i * Dis[displacementY] - rho);

[0274] distanceScaled = (abs(d) + shiftDistanceOffset) » shiftDistance;

[0275] tempMotionBuffer[x » 2] = (distanceScaled <= 16)? 2 : d <= 0? 0 : 1;

[0276] where sx_i denotes a distance between a center of the i-th 4x4 block of the current block and a split line along an x direction, sy_i denotes a distance between the center of the i-th 4x4 block and a split line along a y direction, d is an intermediate variable, displacement, displacement Y, and rho denote the split line, distanceScaled denotes a scaled distance between the center of the i-th 4x4 block and the split line, and tempMotionBuffer denotes whether to use uni-prediction with the first prediction motion vector, uni-prediction with the second prediction motion vector, or bi-prediction with the first prediction motion vector and the second prediction motion vector to derive the motion vector.

[0277] Example 5. The method of any of examples 2-4, wherein deriving the motion vector comprises: when the tempMotionBuffer is equal to 0, deriving the motion vector with uni-prediction using the first prediction motion vector; when the tempMotionBuffer is equal to 1, deriving the motion vector with uni-prediction using the second prediction motion vector; and when the tempMotionBuffer is equal to 2, deriving the motion vector with bi-prediction using the first prediction motion vector and the second prediction motion vector.

[0278] Example 6. A method of coding video data, the method comprising: determining that a geometric partition mode is enabled for a current block; determining a split line that partitions the current block into a first partition and a second partition; determining a sub-block of the current block such that the sub-block includes a triangular partition edge formed by the split line; for a triangular partition mode, deriving a triangular partition mode weight by blending along the triangular partition edge; determining a geometric mode weight for the current block using the triangular partition mode weight; and determining a prediction block using the geometric partition mode weight.

[0279] Example 7. The method of example 6, wherein the split line is arranged for one of a plurality of angles for the geometric partition mode, and wherein the plurality of angles for the geometric partition mode includes each of a plurality of angles for a triangular partition mode.

[0280] Example 8. The method of any of examples 1-7, wherein coding comprises decoding.

[0281] Example 9. The method of any of examples 1-7, wherein coding comprises encoding.

[0282] Example 10. A device for coding video data, the device comprising one or more means for performing the method of any of examples 1-9.

[0283] Example 11. The apparatus of Example 10, wherein the one or more components include one or more processors implemented in circuitry.

[0284] Example 12. The apparatus according to any one of Examples 10 and 11, further comprising a memory for storing video data.

[0285] Example 13. The apparatus of any one of Examples 10-12, further comprising a display configured to display the decoded video data.

[0286] Example 14. The device of any of Examples 10-13, wherein the device comprises one or more of: a camera, a computer, a mobile device, a broadcast receiver device, or a set-top box.

[0287] Example 15. The apparatus of any one of Examples 10-14, wherein the apparatus comprises a video decoder.

[0288] Example 16. The apparatus of any one of Examples 10-15, wherein the apparatus comprises a video encoder.

[0289] Example 17. A computer-readable storage medium having instructions stored thereon, the instructions, when executed, causing one or more processors to perform the method of any one of Examples 1-10.

[0290] It should be appreciated that, depending on the examples, certain actions or events of any of the techniques described herein may be performed in a different sequence, may be added together, combined, or omitted (e.g., not all described actions or events are required to practice the techniques). Furthermore, in some examples, actions or events may be performed concurrently rather than sequentially, such as through multithreading, interrupt handling, or multiple processors.

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

[0292] By way of example, and not limitation, such computer-readable storage media can include RAM, ROM, EEPROM, CD-ROM or other optical disk storage, magnetic disk storage, or other magnetic storage devices, flash memory, or any other storage 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

[0293] Instructions can be executed by one or more processors, such as one or more digital signal processors (DSPs), general purpose microprocessors, application-specific integrated circuits (ASICs), field programmable gate arrays (FPGAs), or other equivalent integrated or discrete logic circuitry. Accordingly, the terms “processor” and “processing circuitry,” as used herein can refer to any of the foregoing structures or any other structure suitable for implementation of the techniques described herein. In addition, in some aspects, the functionality described herein can be provided within dedicated hardware and / or software modules configured for encoding and decoding, or incorporated in a combined codec. Also, the techniques could be fully implemented in one or more circuits or logic elements.

[0294] The techniques of this disclosure can be implemented in a variety of devices or apparatuses, including a wireless phone, an integrated circuit (IC), or a set of ICs (e.g., a chip set). In this disclosure, various components, modules, or units are described to emphasize functionality of a device configured to perform the disclosed techniques, but those need not be implemented as separate hardware modules. Rather, the various modules can be combined in codec hardware

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

Claims

1. A method for decoding video data, the method comprising: determining to enable a geometric partitioning mode for a current block of the video data; determining a partition line that partitions the current block into a first partition and a second partition, wherein determining the partition line comprises selecting an angle of the partition line from a plurality of angles, each of the plurality of angles corresponding to an N:M ratio of width to height of samples of the current block, wherein N and M are integers and different N:M ratios of width to height correspond to different angles, and wherein the partition line is not at a corner of the current block; Determine a geometric partitioning mode weight of the current block using the angle of the partitioning line; generating a first prediction block using the motion information of the first partition; generating a second prediction block using the motion information of the second partition; Applying the geometric partitioning mode weights to samples of the first prediction block and samples of the second prediction block to determine a final prediction block of the current block; Decoding the residual block of the current block; and The final prediction block and the residual block are combined to decode the current block.

2. The method according to claim 1, wherein Selecting the angle of the dividing line includes: receiving a value indicating an angle index; and The angle of the dividing line is determined using the value indicating the angle index.

3. The method according to claim 1, wherein Determining the segmentation line further includes determining a distance offset from a center of the current block.

4. The method according to claim 3, wherein: Determining the geometric segmentation mode weight includes: determining a weighted region based on the angle of the segmentation line; moving the weighted region based on the distance offset from the center of the current block to generate a moved weighted region; and The geometric partitioning mode weights are determined based on the shifted weighted regions.

5. The method according to claim 3, wherein: Determining the distance offset includes: receiving a value indicating an offset index; and The distance offset of the segmentation line is determined using the value indicating the offset index.

6. The method according to claim 1, wherein The first partition includes more samples than the second partition.

7. The method according to claim 1, wherein Determining that the geometric partitioning mode is enabled for the current block includes receiving a value indicating that the geometric partitioning mode is enabled for the current block.

8. The method according to claim 1, wherein Determining the geometric segmentation mode weight includes determining the pixel value P of the prediction block by the following calculation: Wherein, P1 is a first reference pixel value of a first pixel of the first prediction block and is located at the partition line, and wherein P2 is a second reference pixel value of a second pixel of the second prediction block and is located at the partition line.

9. The method according to claim 1, wherein Determining the geometric segmentation mode weight includes determining the pixel value P of the prediction block by the following calculation: Wherein, P1 is the first reference pixel value of the first pixel of the first prediction block and is offset by one sample from the partition line, and wherein P2 is the second reference pixel value of the second pixel of the second prediction block and is offset by one sample from the partition line.

10. The method according to claim 1, wherein A tangent of each of the plurality of angles is equal to a ratio of the N:M width to height of samples of the current block.

11. A method for encoding video data, the method comprising: determining to enable a geometric partitioning mode for a current block of the video data; determining a partition line that partitions the current block into a first partition and a second partition, wherein determining the partition line comprises selecting an angle of the partition line from a plurality of angles, each of the plurality of angles corresponding to an N:M ratio of width to height of samples of the current block, wherein N and M are integers and different N:M ratios of width to height correspond to different angles, and wherein the partition line is not at a corner of the current block; Determine a geometric partitioning mode weight of the current block using the angle of the partitioning line; generating a first prediction block using the motion information of the first partition; generating a second prediction block using the motion information of the second partition; Applying the geometric partitioning mode weights to samples of the first prediction block and samples of the second prediction block to determine a final prediction block of the current block; generating a residual block for the current block of video data based on a difference between the current block of video data and the final prediction block; and The residual block is encoded.

12. The method according to claim 11, further comprising: The signaling indicates the value of the angle index.

13. The method according to claim 11, wherein: Determining the segmentation line further includes determining a distance offset from a center of the current block.

14. The method according to claim 13, wherein Determining the geometric segmentation mode weight includes: determining a weighted region based on the angle of the segmentation line; moving the weighted region based on the distance offset from the center of the current block to generate a moved weighted region; and The geometric partitioning mode weights are determined based on the shifted weighted regions.

15. The method according to claim 13, further comprising: determining an offset index using the distance offset from the center of the current block; as well as The signaling notification indicates the value of the offset index.

16. The method according to claim 11, wherein The first partition includes more samples than the second partition.

17. The method according to claim 11, wherein Also included is signaling a value indicating that the geometric partitioning mode is enabled for the current block.

18. The method according to claim 11, wherein Determining the geometric segmentation mode weight includes determining the pixel value P of the prediction block by the following calculation: Wherein, P1 is a first reference pixel value of a first pixel of the first prediction block and is located at the partition line, and wherein P2 is a second reference pixel value of a second pixel of the second prediction block and is located at the partition line.

19. The method according to claim 11, wherein Determining the geometric segmentation mode weight includes determining the pixel value P of the prediction block by the following calculation: Wherein, P1 is the first reference pixel value of the first pixel of the first prediction block and is offset by one sample from the partition line, and wherein P2 is the second reference pixel value of the second pixel of the second prediction block and is offset by one sample from the partition line.

20. The method according to claim 11, wherein A tangent of each of the plurality of angles is equal to a ratio of the N:M width to height of samples of the current block.

21. A device for decoding video data, the device comprising: a memory configured to store the video data; as well as One or more processors implemented in circuitry, configured to: determining to enable a geometric partitioning mode for a current block of the video data; determining a partition line that partitions the current block into a first partition and a second partition, wherein, to determine the partition line, the one or more processors are configured to: select an angle of the partition line from a plurality of angles, each of the plurality of angles corresponding to an N:M width-to-height ratio of samples of the current block, wherein N and M are integers and different N:M width-to-height ratios correspond to different plurality of angles, and wherein the partition line is not at a corner of the current block; Determine a geometric partitioning mode weight of the current block using the angle of the partitioning line; generating a first prediction block using the motion information of the first partition; generating a second prediction block using the motion information of the second partition; Applying the geometric partitioning mode weights to samples of the first prediction block and samples of the second prediction block to determine a final prediction block of the current block; Decoding the residual block of the current block; and The final prediction block and the residual block are combined to decode the current block.

22. The apparatus according to claim 21, wherein To select the angle of the dividing line, the one or more processors are configured to: receiving a value indicating an angle index; and The angle of the dividing line is determined using the value indicating the angle index.

23. The apparatus of claim 21, wherein: To determine the segmentation line, the one or more processors are configured to determine a distance offset from a center of the current block.

24. The apparatus according to claim 23, wherein To determine the geometric partitioning mode weight, the one or more processors are configured to: determining a weighted region based on the angle of the segmentation line; moving the weighted region based on the distance offset from the center of the current block to generate a moved weighted region; as well as The geometric partitioning mode weights are determined based on the shifted weighted regions.

25. The apparatus of claim 23, wherein: To determine the range offset, the one or more processors are configured to: receiving a value indicating an offset index; and The distance offset of the segmentation line is determined using the value indicating the offset index.

26. The apparatus of claim 21, wherein The first partition includes more samples than the second partition.

27. The apparatus of claim 21, wherein To determine whether to enable the geometric partitioning mode for the current block, the one or more processors are configured to receive a value indicating that the geometric partitioning mode is enabled for the current block.

28. The apparatus of claim 21, wherein A tangent of each of the plurality of angles is equal to a ratio of the N:M width to height of samples of the current block.

29. An apparatus for encoding video data, the apparatus comprising: a memory configured to store the video data; as well as One or more processors implemented in circuitry, configured to: determining to enable a geometric partitioning mode for a current block of the video data; determining a partition line that partitions the current block into a first partition and a second partition, wherein, to determine the partition line, the one or more processors are configured to: select an angle of the partition line from a plurality of angles, each of the plurality of angles corresponding to an N:M width-to-height ratio of samples of the current block, wherein N and M are integers and different N:M width-to-height ratios correspond to different plurality of angles, and wherein the partition line is not at a corner of the current block; Determine a geometric partitioning mode weight of the current block using the angle of the partitioning line; generating a first prediction block using the motion information of the first partition; generating a second prediction block using the motion information of the second partition; Applying the geometric partitioning mode weights to samples of the first prediction block and samples of the second prediction block to determine a final prediction block of the current block; generating a residual block for the current block of video data based on a difference between the current block of video data and the final prediction block; and The residual block is encoded.

30. The apparatus of claim 29, wherein: The one or more processors are configured to signal a value indicative of an angle index.

31. The apparatus of claim 29, wherein To determine the segmentation line, the one or more processors are configured to determine a distance offset from a center of the current block.

32. The apparatus of claim 31, wherein To determine the geometric partitioning mode weight, the one or more processors are configured to: determining a weighted region based on the angle of the segmentation line; as well as The weighted region is moved based on the distance offset from the center of the current block to generate a moved weighted region.

33. The apparatus of claim 31 , wherein: The one or more processors are configured to: determining an offset index using the distance offset from the center of the current block; and The signaling notification indicates the value of the offset index.

34. The apparatus of claim 29, wherein: A tangent of each of the plurality of angles is equal to a ratio of the N:M width to height of samples of the current block.

35. A computer-readable storage medium having stored thereon instructions that, when executed, cause one or more processors to perform the method of any one of claims 1-20.

36. An apparatus for encoding video data, the apparatus comprising one or more means for performing the method according to any one of claims 1-20.

37. A computer program product comprising computer readable instructions which, when executed by a processor, cause the processor to perform the method according to any one of claims 1 to 20.