Форматы пикселей, CVPixelBufferRefs и glReadPixels

Я использую glReadPixels для чтения данных в CVPixelBufferRef . Я использую CVPixelBufferRef в качестве входных данных в AVAssetWriter . К сожалению, форматы пикселей не совпадают.

Я думаю, что glReadPixels возвращает пиксельные данные в формате RGBA , тогда как AVAssetWriter запрашивает пиксельные данные в формате ARGB . Как лучше всего преобразовать RGBA в ARGB ?

Вот что я пробовал до сих пор:

  • манипуляции с битами в соответствии с argb = (rgba >> 8 ) | (rgba << 24)
  • с использованием CGImageRef в качестве промежуточного шага

Битовые манипуляции не работают, потому что CVPixelBufferRef, похоже, не поддерживает индексы. Промежуточный шаг CGImageRef действительно работает ... но я бы предпочел не иметь 50 дополнительных строк кода, которые потенциально могут снизить производительность.

6
задан Charles 25 October 2011 в 22:10
поделиться