private int YUV_to_BGR(int Y, int u, int v) {
        if (Y < 0) {
            Y = 0;
        }
        int tempB, tempG, tempR;
        tempB = Y + ((116130 * u) >> 16);
        if (tempB < 0) {
            tempB = 0;
        } else if (tempB > 255) {
            tempB = 255;
        }

        tempG = Y - ((22554 * u + 46802 * v) >> 16);
        if (tempG < 0) {
            tempG = 0;
        } else if (tempG > 255) {
            tempG = 255;
        }

        tempR = Y + ((91881 * v) >> 16);
        if (tempR < 0) {
            tempR = 0;
        } else if (tempR > 255) {
            tempR = 255;
        }

        return 0xff000000 | ((tempR << 16) + (tempG << 8) + tempB);
    }