okay.. you want a very simple approach to upscaling.
pixels are dots.
just like graph paper that is full of squares.
if you have a piece of graph paper that has 1920x1080 squares.. and you try to drop 720x480 onto the paper..
there are few options:
1. you place all of the pixels close together and center it in the middle (black bars on all four sides for squares you dont use.
2. you can add spaces between each square (empty squares) to make the size of the square box bigger (this is the gray, washed out look)
sometimes they fill in those empty squares with black or grey instead of white, because it helps change the final result.
3. you can start filling in the graph paper from the very top line to the very bottom line, so that there are no black bars on the top and bottom of the screen.
this means you have to have equal amounts of gaps (spaces) between the pixels.
then you use a copy and paste scheme to fill in the gaps with the exact same information in the original pixel.
the method you use to fill in those gaps is 'bicubic' or 'lanczos' or something else.
here are two pictures to give you a visual idea:
this one has the pixels spaced (if you wanted black bars on all four sides of the video, the circles would be touching)
this picture shows the pixels being copied.
the light grey circles are the original.
the dark grey circles are the copies.
there are still gaps using copies, as you can see in the photo.
those gaps either need more copies (advanced upscaling method)
those gaps are filled in with grey or black (either one of these will wash out the picture with grey or excessive black)
if you are experiencing artifacts.. that means the upscaling MATH is running too slow (or too stupid)
but it means you need a better upscaler.
what option you choose will determine how washed out the picture looks, and if there are any artifacts, and generally how solid (clean) the picture looks.