Just for the sake of putting in an answer,
you can very simply use only the Y channel of YUV,
and you will get, exactly, a monochrome version of the image.
So, in abstract pseudocode terms, merely do something like this ..
uint32_t grayscale_from_y(uint8_t y)
{
// when we want to show a YUV texture on screen
// for checking during development,
// you can be super lazy and just feed
// the "Y" to RGB upstream,
// set R G and B to the Y value, something like this:
uint32_t r = y;
uint32_t g = y;
uint32_t b = y;
return r + (g << 8) + (b << 16) + 0xff000000;
// (alpha is one there)
}
it may help someone !