Формула преобразования Android yuv_420_888 в rgb
Я имею в виду https://en.wikipedia.org/wiki/YUV#Y%E2%80%B2UV420sp_(NV21)_to_RGB_conversion_(Android) для преобразования yuv_420_888 в RGB.
Теперь моя проблема в том, что я получаю (в Android) U и V в 2-байтовом формате. т.е. я получаю
image.planes[1].pixelStride
а также
image.planes[2].pixelStride
как 2, что соответствует U и V ( https://developer.android.com/reference/android/graphics/ImageFormat#YUV_420_888).
Вот код, предоставленный вики
void YUVImage::yuv2rgb(uint8_t yValue, uint8_t uValue, uint8_t vValue,
uint8_t *r, uint8_t *g, uint8_t *b) const {
int rTmp = yValue + (1.370705 * (vValue-128));
// or fast integer computing with a small approximation
// rTmp = yValue + (351*(vValue-128))>>8;
int gTmp = yValue - (0.698001 * (vValue-128)) - (0.337633 * (uValue-128));
// gTmp = yValue - (179*(vValue-128) + 86*(uValue-128))>>8;
int bTmp = yValue + (1.732446 * (uValue-128));
// bTmp = yValue + (443*(uValue-128))>>8;
*r = clamp(rTmp, 0, 255);
*g = clamp(gTmp, 0, 255);
*b = clamp(bTmp, 0, 255);
}
Здесь, как мы видим, нам нужно передать 1 байтовое значение каждому из Y,U и V, в то время как android дает 2 байта значения U и V (Y - 1 байт). Я запутался. Что можно сделать, чтобы решить эту проблему?