A method, implemented in a computing device, the method comprising: generating, by a processor of the computing device, a reconstructed image from an encoded video stream; filtering, by the processor, the reconstructed image to create a filtered image, the filtering including applying a noise suppression filter to the reconstructed image immediately prior to applying a deblocking filter to the reconstructed image, wherein the noise suppression filter operates in both a spatial domain and a frequency domain to mitigate ringing artefacts, and wherein applying the noise suppression filter comprises: - generating an application map indicating portions of the reconstructed image to filter based on estimated amounts of quantization noise at blocks of the reconstructed image; - matching to determine, for each block indicated by the application map, a set of patches with chroma or luma values within a predetermined range to corresponding reference block; - grouping the patches into clusters; - employing a two-dimensional, 2D, transform to transform the clusters into a frequency domain resulting in frequency domain patches; - filtering the frequency domain patches; and - employing a reverse 2D transform to convert the frequency domain patches back into a spatial domain; and storing the filtered image in a picture buffer in memory. generating, by a processor of the computing device, a reconstructed image from an encoded video stream; filtering, by the processor, the reconstructed image to create a filtered image, the filtering including applying a noise suppression filter to the reconstructed image immediately prior to applying a deblocking filter to the reconstructed image, wherein the noise suppression filter operates in both a spatial domain and a frequency domain to mitigate ringing artefacts, and wherein applying the noise suppression filter comprises: - generating an application map indicating portions of the reconstructed image to filter based on estimated amounts of quantization noise at blocks of the reconstructed image; - matching to determine, for each block indicated by the application map, a set of patches with chroma or luma values within a predetermined range to corresponding reference block; - grouping the patches into clusters; - employing a two-dimensional, 2D, transform to transform the clusters into a frequency domain resulting in frequency domain patches; - filtering the frequency domain patches; and - employing a reverse 2D transform to convert the frequency domain patches back into a spatial domain; and - generating an application map indicating portions of the reconstructed image to filter based on estimated amounts of quantization noise at blocks of the reconstructed image; - matching to determine, for each block indicated by the application map, a set of patches with chroma or luma values within a predetermined range to corresponding reference block; - grouping the patches into clusters; - employing a two-dimensional, 2D, transform to transform the clusters into a frequency domain resulting in frequency domain patches; - filtering the frequency domain patches; and - employing a reverse 2D transform to convert the frequency domain patches back into a spatial domain; and storing the filtered image in a picture buffer in memory.