Формула преобразования 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 байт). Я запутался. Что можно сделать, чтобы решить эту проблему?

0 ответов

Другие вопросы по тегам