1. A method of denoising a video stream of a camera, the method comprising: obtaining a current frame of the video stream of the camera; obtaining a temporally adjacent frame of the video stream that has been previously spatially and temporally denoised; spatially denoising the current frame while preserving edges in such current frame to generate a plurality of spatially denoised pixels for the current frame; and after the current frame is spatially denoised, temporally denoising a particular pixel of the current frame based on a weighted averaging of the particular pixel's associated already spatially denoised pixel from the current frame and a plurality of pixels from the temporally adjacent frame that have already been spatially and temporally denoised.