A method of decoding video data, the method comprising: based on a chroma sampling format of a coding unit, obtaining, for a leaf node of the coding unit, a square luma block, a first non-square rectangular chroma block for a first chroma component, and a second non-square rectangular chroma block for a second chroma component different from the first chroma component, each of the first and the second non-square chroma blocks (U, V) comprising half as many samples as the square luma block; and for each of the first and the second non-square rectangular chroma blocks (U, V), splitting the non-square rectangular chroma block into a first square sub-block and a second square sub-block, decoding a first coded block flag for the first square sub-block indicating whether the first square sub-block includes at least one nonzero transform coefficient, and a second coded block flag for the second square sub-block, separate from the first coded block flag, indicating whether the second square sub-block includes at least one nonzero transform coefficient, if the first coded block flag indicates that the first square sub-block includes at least one nonzero transform coefficient, parsing the first square sub-block to process the non-zero transform coefficients for obtaining first residual data, at a sub-block level, for the first square sub-block, reconstructing the first square sub-block based on the first residual data, intra-predicting the second square sub-block using reference samples from the reconstructed first square sub-block, if the second coded block flag indicates that the second square sub-block includes at least one nonzero transform coefficient, parsing the second square sub-block to process the non-zero transform coefficients for obtaining second residual data, at a sub-block level, for the second square sub-block, and reconstructing the second square sub-block based on the second residual data. based on a chroma sampling format of a coding unit, obtaining, for a leaf node of the coding unit, a square luma block, a first non-square rectangular chroma block for a first chroma component, and a second non-square rectangular chroma block for a second chroma component different from the first chroma component, each of the first and the second non-square chroma blocks (U, V) comprising half as many samples as the square luma block; and for each of the first and the second non-square rectangular chroma blocks (U, V), splitting the non-square rectangular chroma block into a first square sub-block and a second square sub-block, decoding a first coded block flag for the first square sub-block indicating whether the first square sub-block includes at least one nonzero transform coefficient, and a second coded block flag for the second square sub-block, separate from the first coded block flag, indicating whether the second square sub-block includes at least one nonzero transform coefficient, if the first coded block flag indicates that the first square sub-block includes at least one nonzero transform coefficient, parsing the first square sub-block to process the non-zero transform coefficients for obtaining first residual data, at a sub-block level, for the first square sub-block, reconstructing the first square sub-block based on the first residual data, intra-predicting the second square sub-block using reference samples from the reconstructed first square sub-block, if the second coded block flag indicates that the second square sub-block includes at least one nonzero transform coefficient, parsing the second square sub-block to process the non-zero transform coefficients for obtaining second residual data, at a sub-block level, for the second square sub-block, and reconstructing the second square sub-block based on the second residual data.