Я работаю над тем, где хочу иметь выходную опцию, чтобы перейти к наложению видео. Некоторая поддержка rgb565, если так мило, просто скопируйте данные.Быстрое rgb565 до YUV (или даже rgb565 до Y)
Если нет, мне нужно скопировать данные с конверсией, и это буфер кадров за раз. Я собираюсь попробовать несколько вещей, но я подумал, что это может быть одной из тех вещей, которые оптимисты будут увлекаться тем, что у вас есть проблема.
Здесь различные форматы YUV, которые обычно поддерживаются, были бы плоскостью Y, за которой следовали либо чередующиеся, либо отдельные плоскости UV.
Использование Linux/xv, но на уровне, с которым я имею дело, это всего лишь байты и x86.
Я собираюсь сосредоточиться на скорости за счет качества, но есть потенциально сотни различных путей, чтобы попробовать. Там где-то есть баланс.
Я посмотрел на mmx, но я не уверен, есть ли там что-нибудь полезное. Мне ничего не кажется особенно подходящим для этой задачи, и много перетасовки, чтобы все было в правильном месте в реестрах.
Пробуя грубую версию с Y = Зеленый * 0.5 + R * 0.25 + Blue * notmuch. U и V еще меньше относятся к качеству обслуживания. Вы можете избежать убийства по этим каналам.
Для простой петли.
loop:
movzx eax,[esi]
add esi,2
shr eax,3
shr al,1
add ah,ah
add al,ah
mov [edi],al
add edi,1
dec count
jnz loop
конечно каждая команда зависит от того, до и слово читается не лучший, так чередованием два может получить чуток
loop:
mov eax,[esi]
add esi,4
mov ebx,eax
shr eax,3
shr ebx,19
add ah,ah
add bh,bh
add al,ah
add bl,bh
mov ah,bl
mov [edi],ax
add edi,2
dec count
jnz loop
Было бы довольно легко сделать это с 4 при время, возможно, для пользы.
Может ли кто-нибудь придумать что-нибудь быстрее, лучше?
Интересным аспектом является то, подходит ли достойный компилятор к аналогичному коду.
Я посмотрел MMX и SSE. Я упомянул об этом в резюме. Я не мог видеть ничего особенно полезного в этом случае, потому что MMX затрудняется при выполнении горизонтальных операций. Операция, которую мне нужно выполнить, - это различные уровни умножения (или сдвига) на разных участках одного входного источника. PMADDWD - это более или менее операция, которую мне нужно выполнить, но для этого требуется получить данные на два слова, чтобы сгенерировать результат двойного слова, который затем должен быть извлечен. Я серьезно сомневаюсь, что CPU из-за порядка может значительно ускорить короткую версию этого цикла. – Lerc
PHADDW и подобные инструкции SSSE3 я считаю. Это сокращает слишком много систем. Включая мой ноутбук. Все хорошие инструкции всегда просто недоступны. – Lerc