Video encoding and decoding method and device

By introducing virtual boundary processing technology and adaptive in-loop filters in video encoding and decoding, the visual artifacts and encoding efficiency problems caused by discontinuous edges are solved, and more efficient video quality improvement and encoding performance optimization are achieved.

CN114731419BActive Publication Date: 2025-08-22HFI INNOVATION INC
View PDF 4 Cites 0 Cited by

Patent Information

Application Number
CN202080062450.7
Authority / Receiving Office
CN · China
Patent Type
Patents(China)
Current Assignee / Owner
Priority Date
2019-09-20
Filing Date
2020-09-02
Publication Date
2025-08-22
Estimated Expiration
2040-09-02

AI Technical Summary

Technical Problem

In video encoding and decoding, existing in-loop filtering technology will lead to visual artifacts and coding efficiency when processing discontinuous edges. Especially in 360° video and multi-faceted projection formats, directly applying in-loop filtering will lead to surface seam artifacts at discontinuous edges, and the prior art will have line buffer requirements and error propagation problems when processing virtual boundaries.

Method used

Using virtual boundary processing technology, discontinuous edges are treated as virtual boundaries, adaptive in-loop filters are used for filtering, and time filters are selected by using APS ID to avoid the use of line buffers, while repeated filling or repeated filling processing is performed at the boundaries to ensure the effectiveness and efficiency of filtering.

Benefits of technology

It effectively reduces visual artifacts on discontinuous edges, improves encoding efficiency, reduces the demand for line buffers, avoids error propagation, and improves video quality and encoding performance.

✦ Generated by Eureka AI based on patent content.

Smart Images

  • Figure CN114731419B_ABST
    Figure CN114731419B_ABST
Patent Text Reader

Abstract

Video codec methods and apparatus using adaptive loop filter (ALF) processing are disclosed. According to one approach, ALF virtual boundary processing is always applied to the bottom CTU row, regardless of whether the bottom CTU row is within a frame or a sub-frame. In another approach, the ALF padding process is uniformly applied to different boundary types belonging to a target boundary belonging to a boundary-type group comprising two or more of the following: slice boundary, block boundary, VR360 plane boundary, and sub-frame boundary. In yet another approach, ALF VB processing has a fixed priority for a corner region where both horizontal and vertical virtual boundaries can be applied.
Need to check novelty before this filing date? Find Prior Art

Description

[0001] Cross-references

[0002] This application claims priority to U.S. Provisional Patent Applications Serial No. 62 / 896,032, filed September 5, 2019, Serial No. 62 / 896,631, filed September 6, 2019, and Serial No. 62 / 903,043, filed September 20, 2019. The U.S. Provisional Patent Applications are hereby incorporated by reference in their entirety. Technical Field

[0003] The present invention relates to adaptive loop filter (ALF) processing in a video codec system. More particularly, the present invention relates to ALF processing at frame boundaries and sub-frame boundaries in a video encoder or decoder. Background Art

[0004] Motion estimation is an effective inter-frame coding technique for exploiting temporal redundancy in video sequences. Motion-compensated inter-frame coding is widely used in various international video codec standards. The motion estimation employed in these standards is typically a block-based technique, where motion information, such as the codec mode and motion vectors, is determined for each macroblock or similar block configuration. Intra-frame coding is also adaptively applied, where frames are processed without reference to any other frames. The residuals after inter-frame or intra-frame prediction are typically further processed through transformation, quantization, and entropy coding to produce a compressed video bitstream. Coding artifacts are introduced during the coding process, particularly during quantization. To mitigate these artifacts, newer codecs have implemented additional processes in the reconstructed video to improve image quality. The additional process is usually configured in an in-loop operation so that the encoder and decoder can derive the same reference picture to achieve improved system performance.

[0005] Figure 1AAn exemplary adaptive inter / intra video codec system incorporating inner loop processing including adaptive in-loop filtering (ALF) is illustrated. For inter prediction, motion estimation (ME) / motion compensation (MC) 112 is used to provide prediction data based on video data from one or more other frames. A switch 114 selects either intra prediction 110 or inter prediction data, and the selected prediction data is provided to an adder 116 to form a prediction error, also known as a residual. The prediction error is then processed by a transform module (T) 118 and then by a quantization module (Q) 120. The transformed and quantized residual is then encoded and decoded by an entropy encoder 122 to form a video bitstream corresponding to the compressed video data. The bitstream associated with the transform coefficients is then packed together with side information (e.g., motion, mode, and other information associated with the image area). The side information may also be entropy encoded and decoded to reduce the required bandwidth. Thus, as Figure 1A As shown, data related to the side information is provided to the entropy encoder 122. When an inter-prediction mode is used, one or more reference frames must also be reconstructed at the encoder. Therefore, the transformed and quantized residual is processed by an inverse quantization module (IQ) 124 and an inverse transform module (IT) 126 to restore the residual. The residual is then added back to the prediction data 136 at the reconstruction module (REC) 128 to restore the video data. The restored video data can be stored in a reference picture buffer (RPB) 134 and used to predict other frames.

[0006] like Figure 1A As shown, incoming video data undergoes a series of processing within the encoding system. The reconstructed video data from REC 128 may be subject to various impairments due to this processing. Therefore, various in-loop processing is applied to the reconstructed video data before it is stored in reference picture buffer 134 to improve video quality. In video encoding and decoding systems, various in-loop filters, such as deblocking filter (DF) 130, sample adaptive offset (SAO) 131, and adaptive loop filter (ALF) 132, are used to improve picture quality.

[0007] Used for Figure 1A The corresponding decoder of the encoder is shown in Figure 1BThe video bitstream is decoded by entropy decoder 142 to reconstruct the transformed and quantized residual. On the decoder side, only motion compensation (MC) 113 is performed instead of ME / MC. The decoding process is similar to the reconstruction loop on the encoder side. The reconstructed transformed and quantized residual, SAO / ALF information, and other system information are used to reconstruct the video data. The reconstructed video is further processed by DF 130, SAO 131, and ALF 132 to produce the final improved decoded video.

[0008] In the upcoming emerging codec standard under development (called Versatile Video Coding (VVC)), a coding tree block (CTB)-based ALF scheme has been proposed: in JVET-K0382 ("CE2-related: CTU Based Adaptive Loop Filtering" by M.Karczewicz et al., in the International Telecommunication Union - Telecommunication Standardization Sector, Study Group 16, Working Group 3 (ITU-T SG16WP3) and the International Organization for Standardization / International Electrotechnical Commission Technical Committee 1, Subcommittee 29, Working Group 11 (ISO / IEC JTC1 / SC29 11th meeting of the Joint Video Experts Group (JVET) under WG11, Ljubljana, Slovenia, July 10–18, 2018; document JVET-K0382); in JVET-L0391 (by N. Hu et al., “CE2.3 and CE2.4: Fixed filters, temporal filters, CU-level control and low-latency encoder for ALF”, in ITU-T SG16 WP3, International Telecommunication Union - Telecommunication Standardization Sector, Study Group 16, Working Group 11, Subcommittee 29, ISO / IEC JTC1 / SC29 in the Joint Video Experts Group (JVET) under WG11, 12th meeting: Macao, China, October 3–12, 2018; document: JVET-L0391); and in JVET-M0429 (“Coding tree block based adaptive loop filter” by N. Hu et al., in the Joint Video Experts Group (JVET) under ITU-T SG16WP3 and ISO / IEC JTC1 / SC29 WG11, 13th meeting: Marrakech, MA, January 9–18, 2019; document: JVET-M0429).The Adaptive Parameter Set (APS) is adopted in VTM4 (J. Chen et al., "Algorithm description for Versatile Video Coding and Test Model 4 (VTM 4)" in the Joint Video Experts Team (JVET) under the International Telecommunication Union - Telecommunication Standardization Sector, Study Group 16, Working Group 3 (ITU-T SG16 WP3) and the International Organization for Standardization / International Electrotechnical Commission, Technical Committee 1, Subcommittee 29, Working Group 11 (ISO / IEC JTC1 / SC29 WG11), 13th Meeting: Marrakech, MA, January 9–18, 2019, document JVET-M1002). Each APS includes a set of signaled ALF filters, supporting up to 32 APSs. A tile group can reuse ALF information from one APS to reduce overhead. The APSs are updated as first-in-first-out (FIFO) buffers. In CTB-based ALF, for luma components, when ALF is applied to a luma CTB, the selection of the filter set after 5 temporal or 1 signaling is indicated. Only the index of the filter set is signaled. For a slice, only a new set of 25 filters can be signaled. If a new set is signaled for a slice, all luma CTBs in the same slice share the same set. For chroma components, when ALF is applied to a chroma CTB, if a new filter is signaled for a slice, the CTB uses the new filter; otherwise, the latest temporal chroma filter that meets the temporal scalability constraint is applied. As a slice-level temporal filter, the APSs are updated as first-in-first-out (FIFO) buffers.

[0009] For a 360° video, the unwrapping for a particular projection format may have one or more discontinuous edges. Directly applying in-loop filters to these continuous edges may result in poor visual quality and reduce codec efficiency because the pixels accessed (to be referenced and / or filtered) across the discontinuous edges are processed (filtered) together. For projection formats that include multiple planes, discontinuities may appear between two or more adjacent planes in a frame-packed image, regardless of which compact frame packing arrangement is used. For example, Figure 2An example of a frame with a 3x2 frame packing configuration is shown, where the three faces in the upper half are 3D-contiguous, and the three faces in the lower half are also 3D-contiguous. However, after frame wrapping, the edge 210 between the upper and lower halves of the frame is 3D-contiguous. If an in-loop filtering operation is performed across this discontinuity, face seam artifacts may become visible in the reconstructed video. In JVET-N0438 ("AHG12: Loop filter disabled across virtual boundaries" by SY Lin et al., Joint Video Experts Group (JVET) of the International Telecommunication Union - Telecommunication Standardization Sector, Study Group 16, Working Group 3 (ITU-T SG16WP3) and the International Organization for Standardization / International Electrotechnical Commission, Technical Committee 1, Subcommittee 29, Working Group 11 (ISO / IEC JTC1 / SC29 WG11), 14th Meeting: Geneva, CH, March 19–27, 2019, document JVET-N0438), a proposed method for disabling the in-loop filter across vertical and / or horizontal virtual boundaries in the frame is disclosed.

[0010] In JVET-N0088 (CY Chen et al., “CE5-1: Adaptive loop filter with virtual boundary processing,” Joint Video Experts Group (JVET) of the International Telecommunication Union - Telecommunication Standardization Sector, Study Group 16, Working Group 3 (ITU-T SG16 WP3) and ISO / IEC JTC1 / SC29 WG11, 14th Meeting: Geneva, CH, March 19–27, 2019, document JVET-N0088), an ALF with virtual boundary (VB) is used to remove the line buffer required in adaptive loop filtering (ALF). For VTM4.0's ALF, seven luma line buffers and four chroma line buffers are required. This is because a 7x7 diamond filter with 4x4 block-based sorting is used for the luma component and a 5x5 diamond filter is used for the chroma components. To completely remove the need for line buffers, an ALF with virtual boundary (VB) processing is proposed as follows: when a sample on one side of a VB is filtered, access to samples on the other side of the VB is prohibited. The samples originally required on the other side of the VB are replaced with padded samples.

[0011] Figure 3 An example of a CTU row-based virtual boundary for ALF is shown. Figure 3 In the example, each small block corresponds to a CTU. CTU row boundaries are indicated by arrows. ALF VBs are shown as dashed lines, with each ALF VB located above a corresponding CTU row boundary. When ALF VB processing is enabled, an unavailable sample and its symmetrically located sample are padded. Figure 4A and Figure 4B Two examples of ALF VB filling are shown. In these examples, the ALF has a 7x7 diamond-shaped footprint. Figure 4A In the example, the bottom sample (shown as a black circle 410) is outside of VB 412. Not only this unavailable sample, but also the sample at the symmetrical position 414 of the ALF footprint is filled. Figure 4B , the bottom 4 samples (shown as black circles 420) are outside of VB 422. Not only these unavailable samples, but also the samples at the symmetrical position 424 of the ALF footprint are filled. Figure 4C and Figure 4DTwo examples of ALF padding across a picture boundary are shown. Figure 4C In , the bottom sample (shown as a black circle 430) is outside the frame boundary 432. Only this unavailable sample is filled. Figure 4D , the bottom 4 samples (black circles 440) are shown outside the picture boundary 442. Only these unavailable samples are padded.

[0012] In VTM3.0 (VVC (Versatile Video Coding) Test Model Version 3.0), the adaptive loop filter (ALF) filtering process is implemented as follows:

[0013] O(x,y)=∑ (i,j) w(i,j)×I(x+i,y+j), (1)

[0015] In the above equation, sample I(x+i,y+j) is the input sample, O(x,y) is the filtered output sample (i.e., the filter result), and w(i,j) represents the filter coefficient. Because the ALF is applied to the reconstructed sample, sample I(x+i,y+j) corresponds to the reconstructed sample. The central reconstructed pixel at a central location in the ALF process corresponds to (i,j) = (0,0), i.e., I(i,j). In practice, integer arithmetic is used in VTM3.0 for fixed-point precision calculations:

[0016]

[0017] In the above equation, L represents the filter length and w(i,j) are the filter coefficients in fixed-point precision.

[0018] Equation (1) can be rewritten in the following representation without affecting the efficiency of encoding and decoding:

[0019] O(x,y)=I(x,y)+∑ (i,j)≠(0,0) w(i,j)×(I(x+i,y+j)-I(x,y)) (3)

[0021] In the above equations, w(i,j) is the same as the filter coefficient in equation (1), except for w(0,0), which is equal to 1 in equation (3) and equal to (1-∑ (i,j)≠(0,0) w(i,j)).

[0022] Using the filter formula in equation (3) above, we can easily introduce nonlinearity by using a simple clipping function to make the ALF more effective in reducing the influence of neighboring sample values ​​(I(x+i,y+j)) when the neighboring sample values ​​are very different from the current sample value being filtered (I(x,y)).

[0023] In JVET-M0385 ("Non-Linear Adaptive Loop Filter" by J. Taquet et al., Joint Video Experts Team (JVET), International Telecommunication Union - Telecommunication Standardization Sector, Study Group 16, Working Group 3 (ITU-T SG 16WP3), and International Organization for Standardization / International Electrotechnical Commission, Technical Committee 1, Subcommittee 29, Working Group 11 (ISO / IEC JTC1 / SC29WG11), Meeting 13, Marrakech, MA, January 9–18, 2019, document JVET-M0385), a nonlinear ALF is described. This approach introduces an adaptive clamping operation on the input sample values ​​of the adaptive loop filter in the VTM 3.0 test software. The purpose of this adaptive clamping is to introduce some nonlinearity to limit the difference between the filtered input sample value and the values ​​of other adjacent input samples in the filter.

[0024] According to JVET-M0385, the ALF filter operation is modified as follows:

[0025] O′(x,y)=I(x,y)+∑ (i,j)≠(0,0) w(i,j)×K(I(x+i,y+j)-I(x,y),k(i,j)), (4)

[0026] In the above equation, O'(x,y) corresponds to the modified ALF filter output, I(x,y) corresponds to the sample before ALF processing, K(d,b)=min(b,max(-b,d)) is the clamping function, and k(i,j) is the clamping parameter, which depends on the filter coefficient at (i,j). The encoder performs optimization to find the optimal k(i,j). As shown in equation (4), the clamping function is applied to the difference (I(x+i,y+j)-I(x,y)), which corresponds to the difference between an off-center reconstructed pixel (i.e., I(x+i,y+j), (i,j)≠(0,0)) and the center reconstructed pixel of the ALF (i.e., I(x,y)). According to equation (4), this difference (I(x+i,y+j)-I(x,y)) is clamped by the clamping function with the clamping parameter k(i,j). In this disclosure, this term K(I(x+i,y+j)-I(x,y),k(i,j)) is referred to as the clamped difference. In other words, the modified ALF output O′(x,y) includes a weighted sum of the clamped differences (i.e., ∑ (i,j)≠(0,0) w(i,j).K(I(x+i,i+j)-I(x,y),k(i,j))). As shown in equation (4), the difference between a non-center filter position and the center reconstructed pixel (I(x+i,y+j)-I(x,y)) is modified to a new term K(I(x+i,y+j)-I(x,y),k(i,j). This term (I(x+i,y+j)-I(x,y)) is called the original difference between a non-center filter position and the center reconstructed pixel.

[0027] According to the JVET-M0385 implementation, clamping parameters k(i,j) are specified for each ALF filter, where a clamping value is signaled for each filter coefficient. This means that for each luma filter, 12 clamping values ​​are signaled in the bitstream, and for the chroma filters, there are 6 clamping values.

[0028] To limit signaling costs and encoder complexity, the clamp values ​​in JVET-M0385 are restricted to a small set of possible values. Furthermore, only four possible values ​​are used for inter slices, and three possible values ​​are used for intra slices.

[0029] Because the variance of local differences in luma is typically higher than that in chroma, two different sets of filters are used for luma and chroma. In addition, the maximum sample value is included in each set so that clamping can be disabled if not needed.

[0030] The clamping value set proposed according to JVET-M0385 is provided in Table 1.

[0031] Table 1: Allowed clamp values

[0032]

[0033] The clamp value is encoded in the slice header using Golomb encoding corresponding to the index of the clamp value in the group.

[0034] The clamp value is encoded in the slice header using a k-th exponential-Golomb code corresponding to the index of the clamp value in the group.

[0035] In VVC draft 6 (B. Bross et al., "Versatile Video Coding (Draft 6)", Joint Video Experts Team (JVET), International Telecommunication Union - Telecommunication Standardization Sector, Study Group 16, Working Group 3 (ITU-T SG 16WP3), and ISO / IEC JTC1 / SC29WG11, Working Group 11, 15th Meeting, Gothenburg, Sweden, 3–12 July 2019, document JVET-O2001), secondary picture information is signaled in the SPS as shown below. In the syntax table, the flag subpics_present_flag is signaled, where subpics_present_flag equal to 1 indicates that secondary picture parameters are present in the SPS RBSP syntax.

[0036] 7.3.2.3 Sequence Parameter Group RBSP Syntax

[0037]

[0038]

[0039] In JVET-O 2001, the draft clause 8.8.5.5 specifies the ALF boundary location derivation procedure. Clause 8.8.5.5 is shown below.

[0040] 8.8.5.5 ALF boundary location derivation procedure

[0041] The input to this program is:

[0042] A luma position (xCtb, yCtb) to specify the top left sample of the current luma codec treeblock relative to the top left sample of the current picture,

[0043] A luma position (x, y) specifies the current sample relative to the upper left sample of the current luma codec treeblock.

[0044] The output of this program is:

[0045] The left vertical border position clipLeftPos,

[0046] The right vertical border position clipRightPos,

[0047] The upper horizontal boundary position clipTopPos,

[0048] The bottom horizontal border position clipBottomPos.

[0049] The variables clipLeftPos, clipRightPos, clipTopPos, and clipBottomPos are set equal to -128.

[0050] The variable clipTopPos is modified as follows:

[0051] If the lower boundary of the current codec treeblock is not the lower boundary of the picture and y-(CtbSizeY-4) is greater than or equal to 0, the variable clipTopPos is set equal to yCtb+CtbSizeY-4.

[0052] Otherwise, if pps_loop_filter_across_virtual_boundaries_disabled_flag is equal to 1, and PpsVirtualBoundariesPosY[n] % CtbSizeY is equal to 0, and yCtb+y-PpsVirtualBoundariesPosY[n] is greater than or equal to 0 and less than 3 (for any n=0..pps_num_hor_virtual_boundaries-1), the following applies:

[0053] clipTopPos=PpsVirtualBoundariesPosY[n] (8-1292)

[0054] Otherwise, if y is less than 3, and the top boundary of the current codec treeblock is not the top boundary of the picture, and one or more of the following conditions are true, the variable clipTopPos is set equal to yCtb:

[0055] If the upper boundary of the current codec tree block is the upper boundary of the brick, and loop_filter_across_bricks_enabled_flag is equal to 0.

[0056] If the upper boundary of the current codec tree block is the upper boundary of the slice, and loop_filter_across_slices_enabled_flag is equal to 0.

[0057] If the upper boundary of the current codec treeblock is the upper boundary of the sub-picture, and loop_filter_across_subpic_enabled_flag[SubPicIdx] is equal to 0.

[0058] The variable clipBottomPos is modified as follows:

[0059] If the lower boundary of the current codec treeblock is not the lower boundary of the picture and CtbSizeY-4-y is greater than 0 and less than 4, the variable clipBottomPos is set equal to yCtb+CtbSizeY-4.

[0060] Otherwise, if pps_loop_filter_across_virtual_boundaries_disabled_flag is equal to 1, PpsVirtualBoundariesPosY[n] % CtbSizeY is equal to 0, PpsVirtualBoundariesPosY[n] is not equal to pic_height_in_luma_samples-1 or 0, and PpsVirtualBoundariesPosY[n]-yCtb-y is greater than 0 and less than 4 (for any n=0..pps_num_hor_virtual_boundaries-1), the following applies:

[0061] clipBottomPos=PpsVirtualBoundariesPosY[n] (8-1293)

[0062] Otherwise, if CtbSizeY-y is less than 4, and the lower boundary of the current codec treeblock is not the lower boundary of the picture, and one or more of the following conditions are true, the variable clipBottomPos is set equal to yCtb+CtbSizeY:

[0063] If the lower boundary of the current codec tree block is the lower boundary of the brick, and loop_filter_across_bricks_enabled_flag is equal to 0.

[0064] If the lower boundary of the current codec tree block is the lower boundary of the slice, and loop_filter_across_slices_enabled_flag is equal to 0.

[0065] If the lower boundary of the current codec treeblock is the lower boundary of the sub-picture, and loop_filter_across_subpic_enabled_flag[SubPicIdx] is equal to 0.

[0066] The variable clipLeftPos is modified as follows:

[0067] If pps_loop_filter_across_virtual_boundaries_disabled_flag is equal to 1, and PpsVirtualBoundariesPosX[n] % CtbSizeY is equal to 0, and xCtb+x-PpsVirtualBoundariesPosX[n] is greater than or equal to 0 and less than 3 (for any n=0..pps_num_ver_virtual_boundaries-1), the following applies:

[0068] clipLeftPos=PpsVirtualBoundariesPosX[n] (8-1294)

[0069] Otherwise, if x is less than 3, and the left boundary of the current codec treeblock is not the left boundary of the picture, and one or more of the following conditions are true, the variable clipLeftPos is set equal to xCtb:

[0070] If the left boundary of the current codec treeblock is the left boundary of the brick, and loop_filter_across_bricks_enabled_flag is equal to 0.

[0071] If the left boundary of the current codec tree block is the left boundary of the slice, and loop_filter_across_slices_enabled_flag is equal to 0.

[0072] If the left boundary of the current codec treeblock is the left boundary of the sub-picture, and loop_filter_across_subpic_enabled_flag[SubPicIdx] is equal to 0.

[0073] The variable clipRightPos is modified as follows:

[0074] If pps_loop_filter_across_virtual_boundaries_disabled_flag is equal to 1, and PpsVirtualBoundariesPosX[n]%CtbSizeY is equal to 0, and PpsVirtualBoundariesPosX[n]-xCtb-x is greater than 0 and less than 4 (for any n=0..pps_num_ver_virtual_boundaries-1), the following applies:

[0075] clipRightPos=PpsVirtualBoundariesPosX[n] (8-1295)

[0076] Otherwise, if CtbSizeY-x is less than 4, and the right boundary of the current codec treeblock is not the right boundary of the picture, and one or more of the following conditions are true, the variable clipRightPos is set equal to xCtb+CtbSizeY:

[0077] If the right boundary of the current codec tree block is the right boundary of the brick, and loop_filter_across_bricks_enabled_flag is equal to 0.

[0078] If the right boundary of the current codec tree block is the right boundary of the slice, and loop_filter_across_slices_enabled_flag is equal to 0.

[0079] If the right boundary of the current codec treeblock is the right boundary of the sub-picture, and loop_filter_across_subpic_enabled_flag[SubPicIdx] is equal to 0. Summary of the Invention

[0080] A method and apparatus for video coding and decoding are disclosed. According to the method, reconstructed pixels associated with a target sub-picture in a current picture are received, wherein the current picture is partitioned into one or more sub-pictures. If the height of the current picture is a multiple of a CTU (Codec Tree Unit) row height, if a row of a target CTU is a row of a bottom-most CTU of the target sub-picture, and if the row of the target CTU is a row of the bottom-most CTU of the current picture, ALF VB (Virtual Boundary) processing is applied to the row of the target CTU, wherein one or more reconstructed samples of an ALF footprint outside a virtual boundary of the row of the target CTU and one or more corresponding reconstructed samples at symmetrical positions of the ALF footprint are padded for the ALF VB processing.

[0081] The ALF VB process can be applied to reconstructed pixels at an encoder side and / or at a decoder side. In one embodiment, a flag is used on the target sub-picture to indicate whether the target sub-picture is enabled to be treated as a picture in a decoding process.

[0082] According to another method, ALF processing is applied to reconstructed pixels, wherein if one or more reconstructed samples required for the adaptive in-loop filtering process are outside a target boundary, the adaptive in-loop filtering process pads the one or more reconstructed samples using repeat padding; and wherein the target boundary belongs to a boundary-type group that includes two or more of the following: a slice boundary, a block boundary, a VR360 plane boundary, and a sub-picture boundary. A flag may be used for the target boundary to indicate whether the repeat padding step is enabled for ALF processing of the target boundary.

[0083] According to yet another method, a determination is made as to whether one or more target pixels in an area required for adaptive in-loop filtering (ALF) processing of a current block are outside a horizontal virtual boundary and a vertical virtual boundary of the current block. If the one or more target pixels in the area required for adaptive in-loop filtering processing of the current block are outside the horizontal virtual boundary and the vertical virtual boundary of the current block, the ALF processing is applied to the higher-priority one of the horizontal virtual boundary and the vertical virtual boundary of the current block rather than the other of the horizontal virtual boundary and the vertical virtual boundary of the current block. In one embodiment, the horizontal virtual boundary of the current block has a higher priority than the vertical virtual boundary. In another embodiment, the vertical virtual boundary of the current block has a higher priority than the horizontal virtual boundary. BRIEF DESCRIPTION OF THE DRAWINGS

[0084] Figure 1AAn exemplary adaptive inter / intra video coding system combining DF, SAO, and ALF loop processing is illustrated.

[0085] Figure 1B An exemplary adaptive inter / intra video decoding system combining DF, SAO, and ALF loop processing is illustrated.

[0086] Figure 2 An example of a frame of a 3x2 frame packing configuration is shown, where the three faces in the upper half are continuous in 3D geometry, and the three faces in the lower half are also continuous in 3D geometry. However, the boundaries between the three faces in the upper half and the three faces in the lower half are discontinuous.

[0087] Figure 3 An example of a CTU row-based virtual boundary for ALF is shown.

[0088] Figure 4A and Figure 4B Two examples of padding across a virtual boundary for ALF processing are shown.

[0089] Figure 4C and Figure 4D Two examples of padding across a frame boundary for ALF processing are shown.

[0090] Figure 5 FIG. 4 is a flowchart of an exemplary video codec according to an embodiment of the present invention, wherein the ALF virtual boundary processing is always applied to the bottom CTU row.

[0091] Figure 6 FIG. 4 is a flowchart of an exemplary video codec according to an embodiment of the present invention, wherein the ALF padding process is unified for different boundary types.

[0092] Figure 7 FIG2 is a flowchart of an exemplary video codec according to an embodiment of the present invention, wherein the ALF VB process has a fixed priority for a corner area where both the horizontal and vertical virtual boundary processes can be applied. DETAILED DESCRIPTION

[0093] The following description is the best contemplated mode of implementing the present invention. The purpose of this description is to illustrate the general principles of the present invention and should not be viewed in a limiting sense. The scope of the present invention is determined by reference to the appended claims.

[0094] Method 1: Using APS ID instead of index in APS FIFO for ALF with time filter

[0095] In JVET-M0429, the selected temporal filter is signaled by using an index in the APS FIFO instead of using the APS ID in the APS. This limits the possibilities or combinations of using the encoded APS for the current tile group. This also introduces some error propagation when the APS is lost or duplicated. To avoid these problems, according to one embodiment, it is proposed to use the APS ID to indicate the selection of the temporal filter for the ALF instead of using the index in the APS FIFO. In another embodiment, this concept can be used for CTB-based ALF. When multiple temporal filters are allowed and switched at a certain level (e.g., CTB level), the APS ID of the temporal filter used in the current tile group is signaled.

[0096] Method 2: Treat discontinuous edges as virtual boundaries

[0097] In JVET-N0088, ALF with virtual boundaries was proposed to avoid using samples that cross virtual boundaries to reduce line buffer usage. In JVET-M0438, discontinuous edges between different faces in 360° video are signaled, and the in-loop filtering process is disabled at these edges to avoid using irrelevant samples for filtering. Combining these two techniques, we propose a method that treats these discontinuous edges as virtual boundaries in the ALF process with VB, rather than disabling the in-loop filtering process. In other words, we still apply in-loop filtering to samples near the discontinuous edges, rather than disabling it for these samples; however, we also enable the virtual boundary process in JVET-N0088 to avoid using irrelevant samples on the other side of the virtual boundary in the in-loop filtering process. In another embodiment, the virtual boundary process proposed in JVET-N0088 is extended to the column direction. Furthermore, in some cases where some sub-frames are high-resolution videos, sub-frame boundaries can also be treated as virtual boundaries in JVET-N0088, and we apply the virtual boundary procedure to samples close to these boundaries.

[0098] In another embodiment, when both horizontal and vertical ALF VB processes are applicable, the ALF process with VB applied to the horizontal virtual boundary has a higher priority than the ALF process with VB applied to the vertical virtual boundary. For example, for a 4x4 block in the ALF process, only the upper left area is unavailable, and the ALF process with VB is required. We apply the ALF process with VB to the horizontal virtual boundary (i.e., padding in the vertical direction) rather than applying the ALF process with VB to the vertical virtual boundary (i.e., padding in the horizontal direction). In another embodiment, when both horizontal and vertical ALF VB processes are applicable, the ALF process with VB applied to the horizontal virtual boundary has a lower priority than the ALF process with VB applied to the vertical virtual boundary.

[0099] In another embodiment, for a 4x4 block to be processed, if one of the upper left, upper, or upper right regions is unavailable, the ALF process with VB is applied to the upper boundary of the 4x4 block. For a 4x4 block to be processed, if one of the lower left, lower, or lower right regions is unavailable, the ALF process with VB is applied to the lower boundary of the 4x4 block. Furthermore, in another case, if one of the left and right regions is also unavailable, ALF is disabled for the 4x4 block. In another case, if one of the left and right regions is unavailable and one of the upper and lower regions is unavailable, ALF is disabled for the 4x4 block. In another case, if at least N of the left, right, upper, and lower regions are unavailable, ALF is disabled for the 4x4 block, where N is an integer greater than or equal to 0 (e.g., N=2). In another case, ALF is disabled for a 4x4 block if at least N of the left, right, top, bottom, top-left, top-right, bottom-left, and bottom-right regions are unavailable, where N is an integer greater than or equal to 0 (e.g., N=2).

[0100] In another embodiment, for a 4x4 block to be processed, if one of the upper left, left, and lower left areas is unavailable, the ALF process with VB is applied to the left boundary of the 4x4 block. For a 4x4 block to be processed, if one of the upper right, right, and lower right areas is unavailable, the ALF process with VB is applied to the right boundary of the 4x4 block.

[0101] In another embodiment, the aforementioned boundary may be one of a slice / block / brick / sub-frame / 360 virtual boundary.

[0102] In another embodiment, the aforementioned 4x4 block may be a 4x4 block or a sample in the ALF process.

[0103] In another embodiment, the aforementioned ALF process with VB can be replaced by a predefined padding method (eg, repeated padding) to avoid accessing unavailable samples.

[0104] For example, in one embodiment, when both horizontal and vertical ALF VB processes are applicable, repeat padding applied to horizontal boundaries takes precedence over repeat padding applied to vertical boundaries. For example, for a 4x4 block in the ALF process, only the upper left region is unavailable, and repeat padding is used to handle the unavailable samples. Repeat padding is applied to horizontal boundaries (i.e., repeat padding is performed in the vertical direction) rather than to vertical boundaries (i.e., repeat padding is performed in the horizontal direction). In another embodiment, when both horizontal and vertical ALF VB processes are applicable, repeat padding applied to horizontal boundaries takes precedence over repeat padding applied to vertical boundaries.

[0105] In another embodiment, for a 4x4 block to be processed, if one of the upper left, upper, and upper right regions is unavailable, then repetitive padding is applied to the upper boundary of the 4x4 block. For a 4x4 block to be processed, if one of the lower left, lower, and lower right regions is unavailable, then repetitive padding is applied to the lower boundary of the 4x4 block.

[0106] In another embodiment, for a 4x4 block to be processed, if one of the upper left, left, and lower left areas is unavailable, repetitive padding is applied to the left boundary of the 4x4 block. For a 4x4 block to be processed, if one of the upper right, right, and lower right areas is unavailable, an ALF process with VB is applied to the right boundary of the 4x4 block.

[0107] In another embodiment, for a 4x4 block to be processed, if one of the upper left, upper, and upper right regions is unavailable, the ALF process with VB is applied to the upper boundary of the 4x4 block. For a 4x4 block to be processed, if one of the lower left, lower, and lower right regions is unavailable, the ALF process with VB is applied to the lower boundary of the 4x4 block.

[0108] Any of the previously proposed methods may be implemented in an encoder and / or decoder. For example, any of the proposed methods may be implemented in an in-loop filtering module or an entropy coding module of an encoder and / or a decoder. Alternatively, any of the proposed methods may be implemented as a circuit coupled to an in-loop filtering module or an entropy coding module of an encoder and / or a decoder.

[0109] The SPS (Sequence Parameter Set) syntax table based on JVET-O2001-vE can be modified to support the above embodiments. An exemplary modified SPS syntax table is shown in Table 2.

[0110] Table 2: Modified SPS syntax table to support VB for secondary screen

[0111]

[0112]

[0113] In the syntax table above, subpic_treated_as_pic_flag[i] equal to 1 specifies that the i-th sub-picture of each coded picture in the CVS (Coded Video Sequence) is treated as a picture in the decoding process (excluding in-loop filtering operations). subpic_treated_as_pic_flag[i] equal to 0 specifies that the i-th sub-picture of each coded picture in the CVS is not treated as a picture in the decoding process (excluding in-loop filtering operations). When not present, the value of subpic_treated_as_pic_flag[i] is inferred to be equal to 0.

[0114] In the syntax table above, loop_filter_across_subpic_enabled_flag[i] equal to 1 specifies that in-loop filtering can be performed across boundaries of the i-th sub-picture of each coded picture in the CVS. loop_filter_across_subpic_enabled_flag[i] equal to 0 specifies that in-loop filtering is not performed across boundaries of the i-th sub-picture of each coded picture in the CVS. When not present, the value of loop_filter_across_subpic_enabled_flag[i] is inferred to be equal to 1.

[0115] Method 3: Sending ALF for secondary picture

[0116] In VVC, two flags in the sequence parameter set, including subpic_treated_as_pic_flag and loop_filter_across_subpic_enabled_flag, are used to control the valid referred data region. When subpic_treated_as_pic_flag[i] is equal to 1, it specifies that the i-th sub-picture of each coded picture in the CVS (Coded Video Sequence) is treated as a picture in the decoding process (excluding in-loop filtering operations). When loop_filter_across_subpic_enabled_flag[i] is equal to 1, it specifies that in-loop filtering operations can be performed across the boundaries of the i-th sub-picture of each coded picture in the CVS. In order to clarify the definition of the allowable referred data region, some methods have been proposed.

[0117] In one embodiment, subpic_treated_as_pic_flag[i] shall have higher priority than loop_filter_across_subpic_enabled_flag[i]. If subpic_treated_as_pic_flag[i] is equal to 1, loop_filter_across_subpic_enabled_flag[i] shall be inferred to be equal to 0 and need not be signaled. In this case, referenced material crossing subpicture boundaries is not allowed in the entire picture. Only if subpic_treated_as_pic_flag[i] is equal to 0, loop_filter_across_subpic_enabled_flag[i] shall be signaled to indicate whether referenced material for in-loop filtering can cross subpicture boundaries. In another embodiment, if subpic_treated_as_pic_flag[i] is equal to 1, loop_filter_across_subpic_enabled_flag[i] is still signaled, with the constraint that it shall be 0.

[0118] In VTM6, repetitive padding is applied to a picture boundary to handle unavailable data references in the ALF process, where these boundaries include top, left, right, and bottom boundaries. However, in VTM6, when sub-picture is applied, if both the subpic_treated_as_pic_flag and the loop_filter_across_subpic_enabled_flag are enabled, the bitstream of each sub-picture must be fully decoded without reference to any other sub-picture data. In this case, the ALF virtual boundary (VB) process is applied to the sub-picture boundary to handle unavailable data in the ALF process. Aligning the ALF process behavior at sub-picture boundaries and picture boundaries is proposed.

[0119] In one embodiment, to calibrate the behavior of the ALF process at sub-frame boundaries and frame boundaries, if the frame height is a multiple of the CTU height, the ALF VB process is always applied to the bottom CTU rows in the frame.

[0120] In another embodiment, when subpic_treated_as_pic_flag[i] is equal to 1, the ALF VB process of the bottommost CTU row in the sub-picture is disabled.

[0121] In another embodiment, when subpic_treated_as_pic_flag[i] is equal to 1, repetitive padding is applied to samples near the sub-picture boundary to handle unavailable data.

[0122] In another embodiment, when the picture boundary is also a CTU boundary, the ALF VB process is applied to samples at the picture boundary to handle the unavailable data.

[0123] In the above method, the condition of "subpic_treated_as_pic_flag[i] is equal to 1" is used to allow decoding of the sub-picture bitstream without information about the relative sub-picture position in a picture. Therefore, this condition can be replaced by other control flags. For example, this condition can be replaced by "loop_filter_across_subpic_enabled_flag[i] is equal to 0". Alternatively, it can be controlled by two flags at the same time, for example, "subpic_treated_as_pic_flag[i] is equal to 1" and "loop_filter_across_subpic_enabled_flag[i] is equal to 0".

[0124] Any of the previously proposed methods may be implemented in an encoder and / or decoder. For example, any of the proposed methods may be implemented in an in-loop filtering module or an entropy coding module of an encoder and / or a decoder. Alternatively, any of the proposed methods may be implemented as a circuit coupled to an in-loop filtering module or an entropy coding module of an encoder and / or a decoder.

[0125] According to another aspect of the present invention, a case study is provided for ALF in-loop filtering of a sub-picture when the i-th sub-picture exists and subpic_treated_as_pic_flag[i] is equal to 1 or 0. When subpic_treated_as_pic_flag[i] is equal to 1, the sub-picture boundary should be treated as a picture boundary. Therefore, all cases involving picture boundary condition checking and handling should include this sub-picture case. The proposed textual changes are as follows (emphasized in bold) for the luma and chroma sample location procedures in 8.8.5.2 and 8.8.5.4, and the boundary location derivation procedure in 8.8.5.5.

[0126] Modified 8.8.5.2 codec treeblock filtering procedure for luma samples

[0127] The input to this program is:

[0128] A reconstructed luminance picture sample array recPicture before the adaptive in-loop filtering process L ,

[0129] A filtered and reconstructed luminance picture sample array alfPicture L ,

[0130] A luma position (xCtb, yCtb) specifies the top left sample of the current luma codec treeblock relative to the top left sample of the current picture.

[0131] The output of this program is the corrected, filtered, and reconstructed brightness picture sample array alfPicture L .

[0132] The derivation procedure of clause 8.8.5.3 for the filter index is referenced, where the position (xCtb, yCtb) is related to the reconstructed luma picture sample array recPicture L as input, and filtIdx[x][y] and transposeIdx[x][y] as output, where x,y=0..CtbSizeY-1.

[0133] After filtering and reconstructing the brightness sample alfPicture LDerivation of [x][y], in the current brightness codec tree block recPicture L Each reconstructed luma sample within [x][y] is filtered as follows, where x,y = 0..CtbSizeY-1:

[0134] The array f[j] of luma filter coefficients and the array c[j] of luma clamp values ​​corresponding to the filter specified by filtIdx[x][y] are derived as follows, where j = 0..11:

[0135] if

[0136] If AlfCtbFiltSetIdxY[xCtb>>CtbLog2SizeY][yCtb>>CtbLog2SizeY] is less than 16, the following applies:

[0137] i=AlfCtbFiltSetIdxY[xCtb>>CtbLog2SizeY][yCtb>>CtbLog2SizeY] (8-1219)

[0138] f[j]=AlfFixFiltCoeff[AlfClassToFiltMap[i][filtIdx[x][y]]][j](8-1220)

[0139] c[j]=2 BitdepthY (8-1221)

[0140] otherwise

[0141] (AlfCtbFiltSetIdxY[xCtb>>CtbLog2SizeY][yCtb>>CtbLog2SizeY] is greater than or equal to 16, the following applies:

[0142] i=slice_alf_aps_id_luma[AlfCtbFiltSetIdxY[xCtb>>CtbLog2SizeY][yCtb>>CtbLog2SizeY]-16] (8-1222)

[0143] f[j]=AlfCoeff L [i][filtIdx[x][y]][j] (8-1223)

[0144] c[j]=AlfClip L [i][filtIdx[x][y]][j] (8-1224)

[0145] Depending on transposeIdx[x][y], the luma filter coefficients and the clamp value index idx are derived in the following way:

[0146] If transposeIndex[x][y] is equal to 1, the following applies:

[0147] idx[]={9,4,10,8,1,5,11,7,3,0,2,6} (8-1225)

[0148] Otherwise, if transposeIndex[x][y] is equal to 2, the following applies:

[0149] idx[]={0,3,2,1,8,7,6,5,4,9,10,11} (8-1226)

[0150] Otherwise, if transposeIndex[x][y] is equal to 3, the following applies:

[0151] idx[]={9,8,10,4,3,7,11,5,1,0,2,6} (8-1227)

[0152] Otherwise, the following applies:

[0153] idx[]={0,1,2,3,4,5,6,7,8,9,10,11} (8-1228)

[0154] For each corresponding luminance sample (x, y) position (h x+i ,v y+j ), where i, j = -3..3, is derived as follows:

[0155]

[0156]

[0157] pps_loop_filter_across_virtual_boundaries_disabled_flag is equal to 1, and PpsVirtualBoundariesPosX[n] % CtbSizeY is not equal to 0, and xCtb+x-PpsVirtualBoundariesPosX[n] is greater than or equal to 0 and less than 3 (for any n=0..pps_num_ver_virtual_boundaries-1), the following applies:

[0158] hx+i =Clip3(PpsVirtualBoundariesPosX[n],pic_width_in_luma_samples-1,xCtb+x+i) (8-1229)

[0159] Otherwise, if pps_loop_filter_across_virtual_boundaries_disabled_flag is equal to 1, and PpsVirtualBoundariesPosX[n]%CtbSizeY is not equal to 0, and PpsVirtualBoundariesPosX[n]-xCtb-x is greater than 0 and less than 4 (for any n=0..pps_num_ver_virtual_boundaries-1), the following applies:

[0160] h x+i =Clip3(0,PpsVirtualBoundariesPosX[n]-1,xCtb+x+i)

[0161] (8-1230)

[0162] Otherwise, the following applies:

[0163] h x+i =Clip3(0,pic_width_in_luma_samples-1,xCtb+x+i) (8-1231)

[0164]

[0165] If pps_loop_filter_across_virtual_boundaries_disabled_flag is equal to 1, and PpsVirtualBoundariesPosY[n] % CtbSizeY is not equal to 0, and yCtb+y-PpsVirtualBoundariesPosY[n] is greater than or equal to 0 and less than 3 (for any n = 0..pps_num_hor_virtual_boundaries-1), the following applies:

[0166] v y+j =Clip3(PpsVirtualBoundariesPosY[n],pic_height_in_luma_samples-1,yCtb+y+j) (8-1232)

[0167] Otherwise, if pps_loop_filter_across_virtual_boundaries_disabled_flag is equal to 1, and PpsVirtualBoundariesPosY[n]%CtbSizeY is not equal to 0, and PpsVirtualBoundariesPosY[n]-yCtb-y is greater than 0 and less than 4 (for any n=0..pps_num_hor_virtual_boundaries-1), the following applies:

[0168] v y+j =Clip3(0,PpsVirtualBoundariesPosY[n]-1,yCtb+y+j) (8-1233)

[0169] Otherwise, the following applies:

[0170] v y+j =Clip3(0,pic_height_in_luma_samples-1,yCtb+y+j) (8-1234)

[0171] Modified 8.8.5.4 codec treeblock filtering procedure for chroma samples

[0172] The input to this program is:

[0173] A reconstructed chroma picture sample array recPicture before the adaptive in-loop filtering process,

[0174] a filtered and reconstructed chroma picture sample array alfPicture,

[0175] a chroma position (xCtbC, yCtbC) to specify the top left sample of the current chroma codec treeblock relative to the top left sample of the current picture,

[0176] An alternative chroma filter index altIdx.

[0177] The output of this program is the modified filtered and reconstructed chroma picture sample array alfPictur.

[0178] The width and height of the current chroma codec tree block (ctbWidthC and ctbHeightC) are derived as follows:

[0179] ctbWidthC=CtbSizeY / SubWidthC (8-1278)

[0180] ctbHeightC=CtbSizeY / SubHeightC (8-1279)

[0181] For the derivation of the filtered reconstructed chroma samples alfPicture[x][y], each reconstructed chroma sample within the current chroma codec tree block recPicture[x][y] is filtered as follows, where x = 0..ctbWidthC-1 and y = 0..ctbHeightC-1:

[0182] For each corresponding chroma sample (x, y) position (h x+i ,v y+j ), where i, j = -2..2, is derived as follows:

[0183]

[0184] h x+i =Clip3(0,xCtbC+CtbSizeY / SubWidthC-1,xCtbC+x+i)

[0185] If pps_loop_filter_across_virtual_boundaries_disabled_flag is equal to 1, and PpsVirtualBoundariesPosX[n]%CtbSizeY is not equal to 0, and xCtbC+x-PpsVirtualBoundariesPosX[n] / SubWidthC is greater than or equal to 0 and less than 2 (for any n=0..pps_num_ver_virtual_boundaries-1), the following applies:

[0186] h x+i =Clip3(PpsVirtualBoundariesPosX[n] / SubWidthC, (8-1280)

[0187] pic_width_in_luma_samples / SubWidthC-1,xCtbC+x+i)

[0188] Otherwise, if pps_loop_filter_across_virtual_boundaries_disabled_flag is equal to 1, and PpsVirtualBoundariesPosX[n]%CtbSizeY is not equal to 0, and PpsVirtualBoundariesPosX[n] / SubWidthC-xCtbC-x is greater than 0 and less than 3 (for any n=0..pps_num_ver_virtual_boundaries-1, the following applies:

[0189] h x+i =Clip3(0,PpsVirtualBoundariesPosX[n] / SubWidthC-1,xCtbC+x+i)(8-1281)

[0190] Otherwise, the following applies:

[0191] h x+i =Clip3(0,pic_width_in_luma_samples / SubWidthC-1,xCtbC+x+i) (8-1282)

[0192]

[0193] If pps_loop_filter_across_virtual_boundaries_disabled_flag is equal to 1, and PpsVirtualBoundariesPosY[n] % CtbSizeY is not equal to 0, and yCtbC+y-PpsVirtualBoundariesPosY[n] / SubHeightC is greater than or equal to 0 and less than 2 (for any n=0..pps_num_hor_virtual_boundaries-1), the following applies:

[0194] v y+j =Clip3(PpsVirtualBoundariesPosY[n] / SubHeightC, (8-1283)

[0195] pic_height_in_luma_samples / SubHeightC-1,yCtbC+y+j)

[0196] Otherwise, if pps_loop_filter_across_virtual_boundaries_disabled_flag is equal to 1, and PpsVirtualBoundariesPosY[n]%CtbSizeY is not equal to 0, and PpsVirtualBoundariesPosY[n] / SubHeightC-yCtbC-y is greater than 0 and less than 3 (for any n=0..pps_num_hor_virtual_boundaries-1), the following applies:

[0197] v y+j =Clip3(0,PpsVirtualBoundariesPosY[n] / SubHeightC-1,yCtbC+y+j)(8-1284)

[0198] Otherwise, the following applies:

[0199] v y+j =Clip3(0,pic_height_in_luma_samples / SubHeightC–1,yCtbC+y+j) (8-1285)

[0200] Revised 8.8.5.5ALF boundary location derivation procedure

[0201] The input to this program is:

[0202] A luma position (xCtb, yCtb) to specify the top left sample of the current luma codec treeblock relative to the top left sample of the current picture,

[0203] A luma position (x, y) specifies the current sample relative to the upper left sample of the current luma codec treeblock.

[0204] The output of this program is:

[0205] The left vertical border position clipLeftPos,

[0206] The right vertical border position clipRightPos,

[0207] The upper horizontal boundary position clipTopPos,

[0208] The bottom horizontal border position clipBottomPos.

[0209] The variables clipLeftPos, clipRightPos, clipTopPos, and clipBottomPos are set equal to -128.

[0210] The variable clipTopPos is modified as follows:

[0211] If the lower boundary of the current codec tree block is not the lower boundary of the picture, And if y-(CtbSizeY-4) is greater than or equal to 0, the variable clipTopPos is set equal to yCtb+CtbSizeY-4.

[0212]

[0213] Otherwise, if pps_loop_filter_across_virtual_boundaries_disabled_flag is equal to 1, and PpsVirtualBoundariesPosY[n] % CtbSizeY is equal to 0, and yCtb+y-PpsVirtualBoundariesPosY[n] is greater than or equal to 0 and less than 3 (for any n=0..pps_num_hor_virtual_boundaries-1), the following applies:

[0214] clipTopPos=PpsVirtualBoundariesPosY[n] (8-1292)

[0215] Otherwise, if y is less than 3, and the top boundary of the current codec treeblock is not the top boundary of the picture, and one or more of the following conditions are true, the variable clipTopPos is set equal to yCtb:

[0216] If the upper boundary of the current codec tree block is the upper boundary of the brick, and loop_filter_across_bricks_enabled_flag is equal to 0.

[0217] If the upper boundary of the current codec tree block is the upper boundary of the slice, and loop_filter_across_slices_enabled_flag is equal to 0.

[0218] If the upper boundary of the current codec tree block is the upper boundary of the sub-picture, And loop_filter_across_subpic_enabled_flag[SubPicIdx] is equal to 0.

[0219] The variable clipBottomPos is modified as follows:

[0220] If the lower boundary of the current codec tree block is not the lower boundary of the picture, And CtbSizeY-4-y is greater than 0 and less than 4, the variable clipBottomPos is set equal to yCtb+CtbSizeY-4.

[0221]

[0222] Otherwise, if pps_loop_filter_across_virtual_boundaries_disabled_flag is equal to 1, PpsVirtualBoundariesPosY[n] % CtbSizeY is equal to 0, PpsVirtualBoundariesPosY[n] is not equal to pic_height_in_luma_samples-1 or 0, and PpsVirtualBoundariesPosY[n]-yCtb-y is greater than 0 and less than 4 (for any n=0..pps_num_hor_virtual_boundaries-1), the following applies:

[0223] clipBottomPos=PpsVirtualBoundariesPosY[n] (8-1293)

[0224] Otherwise, if CtbSizeY-y is less than 4, and the lower boundary of the current codec treeblock is not the lower boundary of the picture, and one or more of the following conditions are true, the variable clipBottomPos is set equal to yCtb+CtbSizeY:

[0225] If the lower boundary of the current codec tree block is the lower boundary of the brick, and loop_filter_across_bricks_enabled_flag is equal to 0.

[0226] If the lower boundary of the current codec tree block is the lower boundary of the slice, and loop_filter_across_slices_enabled_flag is equal to 0.

[0227] If the lower boundary of the current codec tree block is the lower boundary of the sub-picture, And loop_filter_across_subpic_enabled_flag[SubPicIdx] is equal to 0.

[0228] The variable clipLeftPos is modified as follows:

[0229] If pps_loop_filter_across_virtual_boundaries_disabled_flag is equal to 1, and PpsVirtualBoundariesPosX[n] % CtbSizeY is equal to 0, and xCtb+x-PpsVirtualBoundariesPosX[n] is greater than or equal to 0 and less than 3 (for any n=0..pps_num_ver_virtual_boundaries-1), the following applies:

[0230] clipLeftPos=PpsVirtualBoundariesPosX[n] (8-1294)

[0231] Otherwise, if x is less than 3, and the left boundary of the current codec treeblock is not the left boundary of the picture, and one or more of the following conditions are true, the variable clipLeftPos is set equal to xCtb:

[0232] If the left boundary of the current codec treeblock is the left boundary of the brick, and loop_filter_across_bricks_enabled_flag is equal to 0.

[0233] If the left boundary of the current codec tree block is the left boundary of the slice, and loop_filter_across_slices_enabled_flag is equal to 0.

[0234] If the left edge of the current codec tree block is the left edge of the sub-picture, And loop_filter_across_subpic_enabled_flag[SubPicIdx] is equal to 0.

[0235] The variable clipRightPos is modified as follows:

[0236] If pps_loop_filter_across_virtual_boundaries_disabled_flag is equal to 1, and PpsVirtualBoundariesPosX[n]%CtbSizeY is equal to 0, and PpsVirtualBoundariesPosX[n]-xCtb-x is greater than 0 and less than 4 (for any n=0..pps_num_ver_virtual_boundaries-1), the following applies:

[0237] clipRightPos=PpsVirtualBoundariesPosX[n] (8-1295)

[0238] Otherwise, if CtbSizeY-x is less than 4, and the right boundary of the current codec treeblock is not the right boundary of the picture, and one or more of the following conditions are true, the variable clipRightPos is set equal to xCtb+CtbSizeY:

[0239] If the right boundary of the current codec tree block is the right boundary of the brick, and loop_filter_across_bricks_enabled_flag is equal to 0.

[0240] If the right boundary of the current codec tree block is the right boundary of the slice, and loop_filter_across_slices_enabled_flag is equal to 0.

[0241] If the right edge of the current codec tree block is the right edge of the sub-picture, And loop_filter_across_subpic_enabled_flag[SubPicIdx] is equal to 0.

[0242] Figure 5 The flowchart of an exemplary video codec according to an embodiment of the present invention is shown, in which ALF virtual boundary processing is always applied to the bottom CTU row. The steps shown in the flowchart can be implemented as code executable by one or more processors (e.g., one or more CPUs) on the encoder side. The steps shown in the flowchart can be implemented based on hardware (e.g., one or more electronic devices or processors) arranged to perform the flowchart steps. According to this method, in step 510, reconstructed pixels associated with a target sub-frame in a current frame are received, where the current frame is partitioned into one or more sub-frames. In step 520, if the height of the current picture is a multiple of the CTU (Codec Tree Unit) row height: if a target CTU row is a bottom-most CTU row of the target sub-picture, and if the target CTU row is the bottom-most CTU row of the current picture, ALF VB (virtual boundary) processing is applied to the target CTU row; wherein one or more reconstructed samples of an ALF footprint outside a virtual boundary of the target CTU row and one or more corresponding reconstructed samples at symmetrical positions of the ALF footprint are padded for the ALF VB processing.

[0243] Figure 6A flowchart of an exemplary video codec according to an embodiment of the present invention is provided, wherein an ALF padding process is unified for different boundary types. According to this method, at step 610, reconstructed pixels in a current frame are received. At step 620, an ALF process is applied to the reconstructed pixels; wherein if one or more reconstructed samples required for the ALF process are outside a target boundary, the one or more reconstructed samples are padded using repetitive padding during the ALF process; and wherein the target boundary belongs to a boundary-type group consisting of two or more of the following: slice boundary, block boundary, VR360 plane boundary, and sub-frame boundary.

[0244] Figure 7 A flowchart of an exemplary video codec according to an embodiment of the present invention is provided, in which ALF VB processing has a fixed priority for use in a corner region where both horizontal and vertical virtual boundary processes can be applied. According to this method, in step S710, reconstructed pixels in a current picture are received. In step S720, a check is performed to determine whether one or more target pixels in a region required for adaptive in-loop filtering processing for a current block are outside a horizontal virtual boundary and a vertical virtual boundary of the current block. If the one or more target pixels in the region required for adaptive in-loop filtering processing for the current block are outside the horizontal virtual boundary and the vertical virtual boundary of the current block (i.e., the "yes" path from step S720), step S730 is performed. Otherwise (i.e., the "no" path from step S720), step S730 is skipped. In step S730, ALF processing is applied to the higher-priority one of the horizontal virtual boundary and the vertical virtual boundary of the current block, rather than the other of the horizontal virtual boundary and the vertical virtual boundary of the current block.

[0245] The flowchart shown is used to illustrate an example of video encoding and decoding according to the present invention. Without departing from the spirit of the present invention, those skilled in the art can modify each step, reorganize the steps, separate a step, or combine steps to implement the present invention. In this disclosure, specific syntax and semantics have been used to illustrate examples of implementing embodiments of the present invention. Without departing from the spirit of the present invention, those skilled in the art can implement the present invention by replacing the syntax and semantics with equivalent syntax and semantics.

[0246] The above description enables one skilled in the art to implement the present invention within the context of a specific application and its requirements. Various variations of the described embodiments will be readily apparent to one skilled in the art, and the general principles defined herein may be applied to other embodiments. Therefore, the present invention is not limited to the specific embodiments shown and described, but is to be accorded the widest scope consistent with the principles and novel features disclosed herein. In the above detailed description, various specific details are provided to provide a thorough understanding of the present invention. Nevertheless, it will be understood by one skilled in the art that the present invention can be practiced.

[0247] The embodiments of the present invention described above can be implemented in various hardware, software code, or a combination of both. For example, an embodiment of the present invention can be implemented as circuitry integrated within a video compression chip or as program code integrated into video compression software to perform the processing described herein. An embodiment of the present invention can also be implemented as program code executed on a digital signal processor (DSP) to perform the processing described herein. The present invention can also include functions executed by a computer processor, digital signal processor, microprocessor, or field programmable gate array (FPGA). According to the present invention, these processors can be configured to perform specific tasks by executing machine-readable software code or firmware code that defines the specific methods implemented by the present invention. The software code or firmware code can be developed in different programming languages ​​and in different formats or styles. The software code can also be compiled for different target platforms. However, different code formats, software code styles and languages, and other forms of configuration code to perform the tasks of the present invention do not depart from the spirit and scope of the present invention.

[0248] Without departing from the spirit or essential characteristics of the present invention, the present invention may be implemented in other specific forms. The examples described are considered to be illustrative and not restrictive in all aspects only. Therefore, the scope of the present invention is indicated by the appended claims rather than the preceding description. All changes within the meaning and scope of equivalents belonging to the claims are intended to be included within their scope.

Claims

1. A video encoding and decoding method, the method comprising: receiving reconstructed pixels associated with a target sub-frame in a current frame, wherein the current frame is divided into one or more sub-frames; as well as If the height of the current picture is a multiple of the height of the codec tree unit row: if a target codec tree unit row is a lowermost codec tree unit row of the target sub-picture, or if the target codec tree unit row is the lowermost codec tree unit row of the current picture, applying virtual boundary processing of adaptive in-loop filtering to an actual boundary of the target codec tree unit row, wherein one or more reconstructed samples of an adaptive in-loop filtering footprint outside a virtual boundary of the target codec tree unit row and one or more corresponding reconstructed samples at symmetrical positions of the adaptive in-loop filtering footprint are padded for the virtual boundary processing of the adaptive in-loop filtering.

2. The video encoding and decoding method according to claim 1, wherein: The virtual boundary processing of the adaptive in-loop filtering is applied to the reconstructed pixels at an encoder side.

3. The video encoding and decoding method according to claim 1, wherein: The virtual boundary processing of the adaptive in-loop filtering is applied to the reconstructed pixels at a decoder side.

4. The video encoding and decoding method according to claim 1, wherein: A flag is used for the target sub-frame to indicate whether the target sub-frame is enabled to be treated as a frame in a decoding process.

5. A video encoding and decoding apparatus comprising one or more electronic circuits or processors arranged to: receiving reconstructed pixels associated with a target sub-frame in a current frame, wherein the current frame is divided into one or more sub-frames; and If the height of the current picture is a multiple of the height of the codec tree unit row: if a target codec tree unit row is a lowermost codec tree unit row of the target sub-picture, or if the target codec tree unit row is the lowermost codec tree unit row of the current picture, applying virtual boundary processing of adaptive in-loop filtering to an actual boundary of the target codec tree unit row, wherein one or more reconstructed samples of a footprint of an adaptive in-loop filtering outside a virtual boundary of the target codec tree unit row and one or more corresponding reconstructed samples at a symmetrical position of the footprint of the adaptive in-loop filtering are padded for the virtual boundary processing of the adaptive in-loop filtering.

6. A video encoding and decoding method, the method comprising: Receiving a reconstructed pixel in a current picture; as well as Adaptive in-loop filtering is applied to the reconstructed pixels, wherein if one or more reconstructed samples required for the adaptive in-loop filtering are outside a target boundary, the one or more reconstructed samples are padded in the adaptive in-loop filtering using a same repetitive padding scheme; and wherein the target boundary belongs to a boundary-type group consisting of two or more of the following: a slice boundary, a block boundary, a VR360 plane boundary, and a sub-picture boundary.

7. The video encoding and decoding method according to claim 6, wherein: A flag is used for the target boundary to indicate whether the iterative filling step is enabled for adaptive in-loop filtering of the target boundary.

8. A video encoding and decoding apparatus comprising one or more electronic circuits or processors arranged to: receiving a reconstructed pixel in a current picture; and Adaptive in-loop filtering is applied to the reconstructed pixels, wherein if one or more reconstructed samples required for the adaptive in-loop filtering are outside a target boundary, the one or more reconstructed samples are padded in the adaptive in-loop filtering using a same repetitive padding scheme; and wherein the target boundary belongs to a boundary-type group consisting of two or more of the following: a slice boundary, a block boundary, a VR360 plane boundary, and a sub-picture boundary.

Citation Information

Patent Citations

  • Video coding with network abstraction layer units that include multiple encoded picture partitions

    CN104160702A

  • Virtual Boundary Processing Simplification for Adaptive Loop Filtering (ALF) in Video Coding

    US20130272624A1

  • Method and apparatus of inter-layer filtering for scalable video coding

    US20150103900A1

  • 360-degree video coding using face continuities

    WO2018191224A1