Поскольку вы конвертируете кадр камеры (NV12) в RGB, вам необходимо установить pixelFormat
в OTPixelFormatARGB
в videoFrame.format
Краткость хороша - объяснения лучше :)
x &= 0x0f
конечно, правильный ответ. Это точно выражает намерение того, чего Вы пытаетесь достигнуть, и на любой нормальной архитектуре будет всегда компилировать вниз в минимальное количество инструкций (т.е. 1). Действительно используйте шестнадцатеричное число, а не десятичное число каждый раз, когда Вы помещаете константы в побитовый оператор.
x <<= 4; x >>= 4
будет только работать, если Ваш 'байт' будет надлежащим неподписанным типом. Если бы это был на самом деле символ со знаком затем, то вторая операция могла бы вызвать расширение знака (т.е. Ваш исходный бит 3 затем появился бы в битах 4-7 также).
без оптимизации это, конечно, возьмет 2 инструкции, но с GCC на OSX, даже
-O1
уменьшит это до первого ответа.
x %= 16
даже без оптимизатора, включенного Ваш компилятор, почти наверняка сделает правильную вещь здесь и превратит ту дорогую операцию отделения/модификации в первый ответ. Однако это может только сделать это для полномочий два, и эта парадигма не делает его вполне настолько очевидным, чего Вы пытаетесь достигнуть.
Единственная операция И может сделать это.
x = (x & 0x0F);
Существует много хороших ответов, и некоторые из них являются технически правильными.
В более широком масштабе нужно понять, что C/C++ не является ассемблером. Задание программиста состоит в том, чтобы попытаться сказать компилятору намерение, чего Вы хотите достигнуть. Компилятор выберет лучший способ сделать это в зависимости от архитектуры и различных флагов оптимизации.
x& = 0x0F; самый ясный путь состоит в том, чтобы сказать компилятор, чего Вы хотите достигнуть. Если смещение вверх и вниз быстрее на некоторой архитектуре, это - задание компилятора, чтобы знать это и сделать правильную вещь.
Это будет зависеть от на архитектуре в некоторой степени - смещающийся и отступать на ARM, вероятно, самый быстрый путь - однако, компилятор должен сделать это для Вас. На самом деле все предложенные методы будут, вероятно, оптимизированы к тому же коду компилятором.