Изучая преобразование ffmpeg из yuv в rgb, я наткнулся на уравнение, реализуемое в ассемблере, yuv2rgb_template.c, расположенное в ffmpeg / libswscale / x86.
Я хочу знать, как работает инструкция packuswb?Google говорит это:
Преобразует 4 целых числа со знаком из мм и 4 целых числа со знаком из мм / м64 в 8 целых чисел без знака в мм с использованием насыщенности без знака.
DEST[7:0] ← SaturateSignedWordToUnsignedByte DEST[15:0];
DEST[15:8] ← SaturateSignedWordToUnsignedByte DEST[31:16];
DEST[23:16] ← SaturateSignedWordToUnsignedByte DEST[47:32];
DEST[31:24] ← SaturateSignedWordToUnsignedByte DEST[63:48];
DEST[39:32] ← SaturateSignedWordToUnsignedByte SRC[15:0];
DEST[47:40] ← SaturateSignedWordToUnsignedByte SRC[31:16];
DEST[55:48] ← SaturateSignedWordToUnsignedByte SRC[47:32];
DEST[63:56] ← SaturateSignedWordToUnsignedByte SRC[63:48];
Поскольку я не знаюСборка x86, даже сложно смоделировать или отладить текущий код.
Я хочу знать, как они вписываются в 16 бит в 8 бит?