mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-08 18:39:54 +00:00
90f8cca04e
AYUV in gstreamer was defined in A-Y-U-V order in memory[1], however Microsoft defined another AYUV format in V-U-Y-A order in memory[2]. Add VUYA format for the latter in order to distinguish the two formats [1] https://gstreamer.freedesktop.org/documentation/design/mediatype-video-raw.html#formats [2] https://docs.microsoft.com/en-us/windows/desktop/medfound/recommended-8-bit-yuv-formats-for-video-rendering#ayuv)
2711 lines
41 KiB
Text
2711 lines
41 KiB
Text
.function video_orc_blend_little
|
|
.flags 1d
|
|
.dest 4 d guint8
|
|
.source 4 s guint8
|
|
.temp 4 t
|
|
.temp 2 tw
|
|
.temp 1 tb
|
|
.temp 4 a
|
|
.temp 8 d_wide
|
|
.temp 8 s_wide
|
|
.temp 8 a_wide
|
|
.const 4 a_alpha 0x000000ff
|
|
|
|
loadl t, s
|
|
convlw tw, t
|
|
convwb tb, tw
|
|
splatbl a, tb
|
|
x4 convubw a_wide, a
|
|
x4 shruw a_wide, a_wide, 8
|
|
x4 convubw s_wide, t
|
|
loadl t, d
|
|
x4 convubw d_wide, t
|
|
x4 subw s_wide, s_wide, d_wide
|
|
x4 mullw s_wide, s_wide, a_wide
|
|
x4 div255w s_wide, s_wide
|
|
x4 addw d_wide, d_wide, s_wide
|
|
x4 convwb t, d_wide
|
|
orl t, t, a_alpha
|
|
storel d, t
|
|
|
|
.function video_orc_blend_big
|
|
.flags 1d
|
|
.dest 4 d guint8
|
|
.source 4 s guint8
|
|
.temp 4 t
|
|
.temp 4 t2
|
|
.temp 2 tw
|
|
.temp 1 tb
|
|
.temp 4 a
|
|
.temp 8 d_wide
|
|
.temp 8 s_wide
|
|
.temp 8 a_wide
|
|
.const 4 a_alpha 0xff000000
|
|
|
|
loadl t, s
|
|
shrul t2, t, 24
|
|
convlw tw, t2
|
|
convwb tb, tw
|
|
splatbl a, tb
|
|
x4 convubw a_wide, a
|
|
x4 shruw a_wide, a_wide, 8
|
|
x4 convubw s_wide, t
|
|
loadl t, d
|
|
x4 convubw d_wide, t
|
|
x4 subw s_wide, s_wide, d_wide
|
|
x4 mullw s_wide, s_wide, a_wide
|
|
x4 div255w s_wide, s_wide
|
|
x4 addw d_wide, d_wide, s_wide
|
|
x4 convwb t, d_wide
|
|
orl t, t, a_alpha
|
|
storel d, t
|
|
|
|
.function video_orc_unpack_I420
|
|
.dest 4 d guint8
|
|
.source 1 y guint8
|
|
.source 1 u guint8
|
|
.source 1 v guint8
|
|
.const 1 c255 255
|
|
.temp 2 uv
|
|
.temp 2 ay
|
|
.temp 1 tu
|
|
.temp 1 tv
|
|
|
|
loadupdb tu, u
|
|
loadupdb tv, v
|
|
mergebw uv, tu, tv
|
|
mergebw ay, c255, y
|
|
mergewl d, ay, uv
|
|
|
|
|
|
.function video_orc_pack_I420
|
|
.dest 2 y guint8
|
|
.dest 1 u guint8
|
|
.dest 1 v guint8
|
|
.source 8 ayuv guint8
|
|
.temp 4 ay
|
|
.temp 4 uv
|
|
.temp 2 uu
|
|
.temp 2 vv
|
|
.temp 1 t1
|
|
.temp 1 t2
|
|
|
|
x2 splitlw uv, ay, ayuv
|
|
x2 select1wb y, ay
|
|
x2 splitwb vv, uu, uv
|
|
select0wb u, uu
|
|
select0wb v, vv
|
|
|
|
.function video_orc_pack_Y
|
|
.dest 1 y guint8
|
|
.source 4 ayuv guint8
|
|
.temp 2 ay
|
|
|
|
select0lw ay, ayuv
|
|
select1wb y, ay
|
|
|
|
.function video_orc_unpack_YUY2
|
|
.dest 8 ayuv guint8
|
|
.source 4 yuy2 guint8
|
|
.const 2 c255 0xff
|
|
.temp 2 yy
|
|
.temp 2 uv
|
|
.temp 4 ayay
|
|
.temp 4 uvuv
|
|
|
|
x2 splitwb uv, yy, yuy2
|
|
x2 mergebw ayay, c255, yy
|
|
mergewl uvuv, uv, uv
|
|
x2 mergewl ayuv, ayay, uvuv
|
|
|
|
|
|
.function video_orc_pack_YUY2
|
|
.dest 4 yuy2 guint8
|
|
.source 8 ayuv guint8
|
|
.temp 2 yy
|
|
.temp 2 uv
|
|
.temp 4 ayay
|
|
.temp 4 uvuv
|
|
|
|
x2 splitlw uvuv, ayay, ayuv
|
|
select0lw uv, uvuv
|
|
x2 select1wb yy, ayay
|
|
x2 mergebw yuy2, yy, uv
|
|
|
|
|
|
.function video_orc_pack_UYVY
|
|
.dest 4 yuy2 guint8
|
|
.source 8 ayuv guint8
|
|
.temp 2 yy
|
|
.temp 2 uv
|
|
.temp 4 ayay
|
|
.temp 4 uvuv
|
|
|
|
x2 splitlw uvuv, ayay, ayuv
|
|
select0lw uv, uvuv
|
|
x2 select1wb yy, ayay
|
|
x2 mergebw yuy2, uv, yy
|
|
|
|
|
|
.function video_orc_unpack_UYVY
|
|
.dest 8 ayuv guint8
|
|
.source 4 uyvy guint8
|
|
.const 2 c255 0xff
|
|
.temp 2 yy
|
|
.temp 2 uv
|
|
.temp 4 ayay
|
|
.temp 4 uvuv
|
|
|
|
x2 splitwb yy, uv, uyvy
|
|
x2 mergebw ayay, c255, yy
|
|
mergewl uvuv, uv, uv
|
|
x2 mergewl ayuv, ayay, uvuv
|
|
|
|
|
|
.function video_orc_pack_VYUY
|
|
.dest 4 vyuy guint8
|
|
.source 8 ayuv guint8
|
|
.temp 2 yy
|
|
.temp 2 vu
|
|
.temp 4 ayay
|
|
.temp 4 uvuv
|
|
|
|
x2 splitlw uvuv, ayay, ayuv
|
|
select0lw vu, uvuv
|
|
x2 select1wb yy, ayay
|
|
swapw vu, vu
|
|
x2 mergebw vyuy, vu, yy
|
|
|
|
|
|
.function video_orc_unpack_VYUY
|
|
.dest 8 ayuv guint8
|
|
.source 4 vyuy guint8
|
|
.const 2 c255 0xff
|
|
.temp 2 yy
|
|
.temp 2 uv
|
|
.temp 4 ayay
|
|
.temp 4 uvuv
|
|
|
|
x2 splitwb yy, uv, vyuy
|
|
swapw uv, uv
|
|
x2 mergebw ayay, c255, yy
|
|
mergewl uvuv, uv, uv
|
|
x2 mergewl ayuv, ayay, uvuv
|
|
|
|
|
|
.function video_orc_unpack_YVYU
|
|
.dest 8 ayuv guint8
|
|
.source 4 uyvy guint8
|
|
.const 2 c255 0xff
|
|
.temp 2 yy
|
|
.temp 2 uv
|
|
.temp 4 ayay
|
|
.temp 4 uvuv
|
|
|
|
x2 splitwb uv, yy, uyvy
|
|
swapw uv, uv
|
|
x2 mergebw ayay, c255, yy
|
|
mergewl uvuv, uv, uv
|
|
x2 mergewl ayuv, ayay, uvuv
|
|
|
|
|
|
.function video_orc_pack_YVYU
|
|
.dest 4 yuy2 guint8
|
|
.source 8 ayuv guint8
|
|
.temp 2 yy
|
|
.temp 2 uv
|
|
.temp 4 ayay
|
|
.temp 4 uvuv
|
|
|
|
x2 splitlw uvuv, ayay, ayuv
|
|
select0lw uv, uvuv
|
|
x2 select1wb yy, ayay
|
|
swapw uv, uv
|
|
x2 mergebw yuy2, yy, uv
|
|
|
|
|
|
.function video_orc_unpack_YUV9
|
|
.dest 8 d guint8
|
|
.source 2 y guint8
|
|
.source 1 u guint8
|
|
.source 1 v guint8
|
|
.const 1 c255 255
|
|
.temp 2 tuv
|
|
.temp 4 ay
|
|
.temp 4 uv
|
|
.temp 1 tu
|
|
.temp 1 tv
|
|
|
|
loadupdb tu, u
|
|
loadupdb tv, v
|
|
mergebw tuv, tu, tv
|
|
mergewl uv, tuv, tuv
|
|
x2 mergebw ay, c255, y
|
|
x2 mergewl d, ay, uv
|
|
|
|
|
|
.function video_orc_unpack_Y42B
|
|
.dest 8 ayuv guint8
|
|
.source 2 yy guint8
|
|
.source 1 u guint8
|
|
.source 1 v guint8
|
|
.const 1 c255 255
|
|
.temp 2 uv
|
|
.temp 2 ay
|
|
.temp 4 uvuv
|
|
.temp 4 ayay
|
|
|
|
mergebw uv, u, v
|
|
x2 mergebw ayay, c255, yy
|
|
mergewl uvuv, uv, uv
|
|
x2 mergewl ayuv, ayay, uvuv
|
|
|
|
.function video_orc_pack_Y42B
|
|
.dest 2 y guint8
|
|
.dest 1 u guint8
|
|
.dest 1 v guint8
|
|
.source 8 ayuv guint8
|
|
.temp 4 ayay
|
|
.temp 4 uvuv
|
|
.temp 2 uv
|
|
|
|
x2 splitlw uvuv, ayay, ayuv
|
|
select0lw uv, uvuv
|
|
splitwb v, u, uv
|
|
x2 select1wb y, ayay
|
|
|
|
|
|
.function video_orc_unpack_Y444
|
|
.dest 4 ayuv guint8
|
|
.source 1 y guint8
|
|
.source 1 u guint8
|
|
.source 1 v guint8
|
|
.const 1 c255 255
|
|
.temp 2 uv
|
|
.temp 2 ay
|
|
|
|
mergebw uv, u, v
|
|
mergebw ay, c255, y
|
|
mergewl ayuv, ay, uv
|
|
|
|
|
|
.function video_orc_pack_Y444
|
|
.dest 1 y guint8
|
|
.dest 1 u guint8
|
|
.dest 1 v guint8
|
|
.source 4 ayuv guint8
|
|
.temp 2 ay
|
|
.temp 2 uv
|
|
|
|
splitlw uv, ay, ayuv
|
|
splitwb v, u, uv
|
|
select1wb y, ay
|
|
|
|
.function video_orc_unpack_GRAY8
|
|
.dest 4 ayuv guint8
|
|
.source 1 y guint8
|
|
.const 1 c255 255
|
|
.const 2 c0x8080 0x8080
|
|
.temp 2 ay
|
|
|
|
mergebw ay, c255, y
|
|
mergewl ayuv, ay, c0x8080
|
|
|
|
|
|
.function video_orc_pack_GRAY8
|
|
.dest 1 y guint8
|
|
.source 4 ayuv guint8
|
|
.temp 2 ay
|
|
|
|
select0lw ay, ayuv
|
|
select1wb y, ay
|
|
|
|
|
|
.function video_orc_unpack_BGRA
|
|
.dest 4 argb guint8
|
|
.source 4 bgra guint8
|
|
|
|
swapl argb, bgra
|
|
|
|
.function video_orc_pack_BGRA
|
|
.dest 4 bgra guint8
|
|
.source 4 argb guint8
|
|
|
|
swapl bgra, argb
|
|
|
|
.function video_orc_pack_RGBA_le
|
|
.dest 4 rgba guint8
|
|
.source 4 argb guint8
|
|
.temp 4 a
|
|
.temp 4 r
|
|
|
|
loadl r, argb
|
|
shrul a, r, 8
|
|
shll r, r, 24
|
|
orl rgba, r, a
|
|
|
|
.function video_orc_unpack_RGBA_le
|
|
.dest 4 argb guint8
|
|
.source 4 rgba guint8
|
|
.temp 4 a
|
|
.temp 4 r
|
|
|
|
loadl r, rgba
|
|
shll a, r, 8
|
|
shrul r, r, 24
|
|
orl argb, r, a
|
|
|
|
.function video_orc_pack_RGBA_be
|
|
.dest 4 rgba guint8
|
|
.source 4 argb guint8
|
|
.temp 4 a
|
|
.temp 4 r
|
|
|
|
loadl r, argb
|
|
shrul a, r, 24
|
|
shll r, r, 8
|
|
orl rgba, r, a
|
|
|
|
.function video_orc_unpack_RGBA_be
|
|
.dest 4 argb guint8
|
|
.source 4 rgba guint8
|
|
.temp 4 a
|
|
.temp 4 r
|
|
|
|
loadl r, rgba
|
|
shll a, r, 24
|
|
shrul r, r, 8
|
|
orl argb, r, a
|
|
|
|
|
|
.function video_orc_unpack_ABGR_le
|
|
.dest 4 argb guint8
|
|
.source 4 abgr guint8
|
|
.temp 4 a
|
|
.temp 4 r
|
|
|
|
swapl r, abgr
|
|
shll a, r, 8
|
|
shrul r, r, 24
|
|
orl argb, r, a
|
|
|
|
.function video_orc_pack_ABGR_le
|
|
.dest 4 abgr guint8
|
|
.source 4 argb guint8
|
|
.temp 4 a
|
|
.temp 4 r
|
|
|
|
swapl r, argb
|
|
shll a, r, 8
|
|
shrul r, r, 24
|
|
orl abgr, r, a
|
|
|
|
.function video_orc_unpack_ABGR_be
|
|
.dest 4 argb guint8
|
|
.source 4 abgr guint8
|
|
.temp 4 a
|
|
.temp 4 r
|
|
|
|
swapl r, abgr
|
|
shll a, r, 24
|
|
shrul r, r, 8
|
|
orl argb, r, a
|
|
|
|
.function video_orc_pack_ABGR_be
|
|
.dest 4 abgr guint8
|
|
.source 4 argb guint8
|
|
.temp 4 a
|
|
.temp 4 r
|
|
|
|
swapl r, argb
|
|
shll a, r, 24
|
|
shrul r, r, 8
|
|
orl abgr, r, a
|
|
|
|
|
|
.function video_orc_unpack_NV12
|
|
.dest 8 d guint8
|
|
.source 2 y guint8
|
|
.source 2 uv guint8
|
|
.const 1 c255 255
|
|
.temp 4 ay
|
|
.temp 4 uvuv
|
|
|
|
mergewl uvuv, uv, uv
|
|
x2 mergebw ay, c255, y
|
|
x2 mergewl d, ay, uvuv
|
|
|
|
.function video_orc_pack_NV12
|
|
.dest 2 y guint8
|
|
.dest 2 uv guint8
|
|
.source 8 ayuv guint8
|
|
.temp 4 ay
|
|
.temp 4 uvuv
|
|
|
|
x2 splitlw uvuv, ay, ayuv
|
|
x2 select1wb y, ay
|
|
select0lw uv, uvuv
|
|
|
|
.function video_orc_unpack_NV21
|
|
.dest 8 d guint8
|
|
.source 2 y guint8
|
|
.source 2 vu guint8
|
|
.const 1 c255 255
|
|
.temp 2 uv
|
|
.temp 4 ay
|
|
.temp 4 uvuv
|
|
|
|
swapw uv, vu
|
|
mergewl uvuv, uv, uv
|
|
x2 mergebw ay, c255, y
|
|
x2 mergewl d, ay, uvuv
|
|
|
|
|
|
.function video_orc_pack_NV21
|
|
.dest 2 y guint8
|
|
.dest 2 vu guint8
|
|
.source 8 ayuv guint8
|
|
.temp 4 ay
|
|
.temp 4 uvuv
|
|
.temp 2 uv
|
|
|
|
x2 splitlw uvuv, ay, ayuv
|
|
x2 select1wb y, ay
|
|
select0lw uv, uvuv
|
|
swapw vu, uv
|
|
|
|
.function video_orc_unpack_NV24
|
|
.dest 4 d guint8
|
|
.source 1 y guint8
|
|
.source 2 uv guint8
|
|
.const 1 c255 255
|
|
.temp 2 ay
|
|
|
|
mergebw ay, c255, y
|
|
mergewl d, ay, uv
|
|
|
|
.function video_orc_pack_NV24
|
|
.dest 1 y guint8
|
|
.dest 2 uv guint8
|
|
.source 4 ayuv guint8
|
|
.temp 2 ay
|
|
|
|
splitlw uv, ay, ayuv
|
|
select1wb y, ay
|
|
|
|
.function video_orc_unpack_A420
|
|
.dest 4 d guint8
|
|
.source 1 y guint8
|
|
.source 1 u guint8
|
|
.source 1 v guint8
|
|
.source 1 a guint8
|
|
.temp 2 uv
|
|
.temp 2 ay
|
|
.temp 1 tu
|
|
.temp 1 tv
|
|
|
|
loadupdb tu, u
|
|
loadupdb tv, v
|
|
mergebw uv, tu, tv
|
|
mergebw ay, a, y
|
|
mergewl d, ay, uv
|
|
|
|
.function video_orc_pack_A420
|
|
.dest 2 y guint8
|
|
.dest 1 u guint8
|
|
.dest 1 v guint8
|
|
.dest 2 a guint8
|
|
.source 8 ayuv guint8
|
|
.temp 4 ay
|
|
.temp 4 uv
|
|
.temp 2 uu
|
|
.temp 2 vv
|
|
|
|
x2 splitlw uv, ay, ayuv
|
|
x2 select1wb y, ay
|
|
x2 select0wb a, ay
|
|
x2 splitwb vv, uu, uv
|
|
select0wb u, uu
|
|
select0wb v, vv
|
|
|
|
.function video_orc_pack_AY
|
|
.dest 1 y guint8
|
|
.dest 1 a guint8
|
|
.source 4 ayuv guint8
|
|
.temp 2 ay
|
|
|
|
select0lw ay, ayuv
|
|
select1wb y, ay
|
|
select0wb a, ay
|
|
|
|
|
|
.function video_orc_unpack_VUYA
|
|
.dest 4 ayuv guint8
|
|
.source 4 vuya guint8
|
|
|
|
swapl ayuv, vuya
|
|
|
|
|
|
.function video_orc_pack_VUYA
|
|
.dest 4 vuya guint8
|
|
.source 4 ayuv guint8
|
|
|
|
swapl vuya, ayuv
|
|
|
|
.function video_orc_unpack_RGB15_le
|
|
.dest 4 argb guint32
|
|
.source 2 rgb15 guint16
|
|
.temp 2 t
|
|
.temp 2 r
|
|
.temp 2 g
|
|
.temp 2 b
|
|
.temp 4 ag
|
|
.temp 4 rb
|
|
|
|
loadw t, rgb15
|
|
andw r, t, 0x7c00
|
|
andw g, t, 0x03e0
|
|
andw b, t, 0x001f
|
|
shlw b, b, 5
|
|
mulhsw r, r, 0x0210
|
|
mulhsw g, g, 0x4200
|
|
mulhsw b, b, 0x4200
|
|
mergewl ag, 0xff, g
|
|
mergewl rb, r, b
|
|
shll rb, rb, 8
|
|
orl argb, ag, rb
|
|
|
|
.function video_orc_unpack_RGB15_be
|
|
.dest 4 argb guint32
|
|
.source 2 rgb15 guint16
|
|
.temp 2 t
|
|
.temp 2 r
|
|
.temp 2 g
|
|
.temp 2 b
|
|
.temp 4 ag
|
|
.temp 4 rb
|
|
|
|
loadw t, rgb15
|
|
andw r, t, 0x7c00
|
|
andw g, t, 0x03e0
|
|
andw b, t, 0x001f
|
|
shlw b, b, 5
|
|
mulhsw r, r, 0x0210
|
|
mulhsw g, g, 0x4200
|
|
mulhsw b, b, 0x4200
|
|
mergewl ag, 0xff, g
|
|
mergewl rb, r, b
|
|
shll ag, ag, 8
|
|
orl argb, ag, rb
|
|
|
|
.function video_orc_unpack_RGB15_le_trunc
|
|
.dest 4 argb guint32
|
|
.source 2 rgb15 guint16
|
|
.temp 2 t
|
|
.temp 2 r
|
|
.temp 2 g
|
|
.temp 2 b
|
|
.temp 4 ag
|
|
.temp 4 rb
|
|
|
|
loadw t, rgb15
|
|
andw r, t, 0x7c00
|
|
andw g, t, 0x03e0
|
|
andw b, t, 0x001f
|
|
shruw r, r, 7
|
|
shruw g, g, 2
|
|
shlw b, b, 3
|
|
mergewl ag, 0xff, g
|
|
mergewl rb, r, b
|
|
shll rb, rb, 8
|
|
orl argb, ag, rb
|
|
|
|
.function video_orc_unpack_RGB15_be_trunc
|
|
.dest 4 argb guint32
|
|
.source 2 rgb15 guint16
|
|
.temp 2 t
|
|
.temp 2 r
|
|
.temp 2 g
|
|
.temp 2 b
|
|
.temp 4 ag
|
|
.temp 4 rb
|
|
|
|
loadw t, rgb15
|
|
andw r, t, 0x7c00
|
|
andw g, t, 0x03e0
|
|
andw b, t, 0x001f
|
|
shruw r, r, 7
|
|
shruw g, g, 2
|
|
shlw b, b, 3
|
|
mergewl ag, 0xff, g
|
|
mergewl rb, r, b
|
|
shll ag, ag, 8
|
|
orl argb, ag, rb
|
|
|
|
.function video_orc_pack_RGB15_le
|
|
.dest 2 rgb15 guint16
|
|
.source 4 argb guint32
|
|
.temp 4 t
|
|
.temp 4 r
|
|
.temp 4 g
|
|
.temp 4 b
|
|
.temp 4 t2
|
|
|
|
loadl t, argb
|
|
andl r, t, 0xf800
|
|
andl g, t, 0xf80000
|
|
andl b, t, 0xf8000000
|
|
shrul r, r, 1
|
|
shrul g, g, 14
|
|
shrul b, b, 27
|
|
orl t2, r, g
|
|
orl t2, t2, b
|
|
select0lw rgb15, t2
|
|
|
|
.function video_orc_pack_RGB15_be
|
|
.dest 2 rgb15 guint16
|
|
.source 4 argb guint32
|
|
.temp 4 t
|
|
.temp 4 r
|
|
.temp 4 g
|
|
.temp 4 b
|
|
.temp 4 t2
|
|
|
|
loadl t, argb
|
|
andl r, t, 0xf80000
|
|
andl g, t, 0xf800
|
|
andl b, t, 0xf8
|
|
shrul r, r, 9
|
|
shrul g, g, 6
|
|
shrul b, b, 3
|
|
orl t2, r, g
|
|
orl t2, t2, b
|
|
select1lw rgb15, t2
|
|
|
|
.function video_orc_unpack_BGR15_le
|
|
.dest 4 argb guint32
|
|
.source 2 bgr15 guint16
|
|
.temp 2 t
|
|
.temp 2 r
|
|
.temp 2 g
|
|
.temp 2 b
|
|
.temp 4 ag
|
|
.temp 4 rb
|
|
|
|
loadw t, bgr15
|
|
andw b, t, 0x7c00
|
|
andw g, t, 0x03e0
|
|
andw r, t, 0x001f
|
|
shlw r, r, 5
|
|
mulhsw b, b, 0x0210
|
|
mulhsw g, g, 0x4200
|
|
mulhsw r, r, 0x4200
|
|
mergewl ag, 0xff, g
|
|
mergewl rb, r, b
|
|
shll rb, rb, 8
|
|
orl argb, ag, rb
|
|
|
|
.function video_orc_unpack_BGR15_be
|
|
.dest 4 argb guint32
|
|
.source 2 bgr15 guint16
|
|
.temp 2 t
|
|
.temp 2 r
|
|
.temp 2 g
|
|
.temp 2 b
|
|
.temp 4 ag
|
|
.temp 4 rb
|
|
|
|
loadw t, bgr15
|
|
andw b, t, 0x7c00
|
|
andw g, t, 0x03e0
|
|
andw r, t, 0x001f
|
|
shlw r, r, 5
|
|
mulhsw b, b, 0x0210
|
|
mulhsw g, g, 0x4200
|
|
mulhsw r, r, 0x4200
|
|
mergewl ag, 0xff, g
|
|
mergewl rb, r, b
|
|
shll ag, ag, 8
|
|
orl argb, ag, rb
|
|
|
|
.function video_orc_unpack_BGR15_le_trunc
|
|
.dest 4 argb guint32
|
|
.source 2 bgr15 guint16
|
|
.temp 2 t
|
|
.temp 2 r
|
|
.temp 2 g
|
|
.temp 2 b
|
|
.temp 4 ag
|
|
.temp 4 rb
|
|
|
|
loadw t, bgr15
|
|
andw b, t, 0x7c00
|
|
andw g, t, 0x03e0
|
|
andw r, t, 0x001f
|
|
shruw b, b, 7
|
|
shruw g, g, 2
|
|
shlw r, r, 3
|
|
mergewl ag, 0xff, g
|
|
mergewl rb, r, b
|
|
shll rb, rb, 8
|
|
orl argb, ag, rb
|
|
|
|
.function video_orc_unpack_BGR15_be_trunc
|
|
.dest 4 argb guint32
|
|
.source 2 bgr15 guint16
|
|
.temp 2 t
|
|
.temp 2 r
|
|
.temp 2 g
|
|
.temp 2 b
|
|
.temp 4 ag
|
|
.temp 4 rb
|
|
|
|
loadw t, bgr15
|
|
andw b, t, 0x7c00
|
|
andw g, t, 0x03e0
|
|
andw r, t, 0x001f
|
|
shruw b, b, 7
|
|
shruw g, g, 2
|
|
shlw r, r, 3
|
|
mergewl ag, 0xff, g
|
|
mergewl rb, r, b
|
|
shll ag, ag, 8
|
|
orl argb, ag, rb
|
|
|
|
.function video_orc_pack_BGR15_le
|
|
.dest 2 rgb15 guint16
|
|
.source 4 argb guint32
|
|
.temp 4 t
|
|
.temp 4 r
|
|
.temp 4 g
|
|
.temp 4 b
|
|
.temp 4 t2
|
|
|
|
loadl t, argb
|
|
andl r, t, 0xf800
|
|
andl g, t, 0xf80000
|
|
andl b, t, 0xf8000000
|
|
shrul b, b, 17
|
|
shrul g, g, 14
|
|
shrul r, r, 11
|
|
orl t2, r, g
|
|
orl t2, t2, b
|
|
select0lw rgb15, t2
|
|
|
|
.function video_orc_pack_BGR15_be
|
|
.dest 2 rgb15 guint16
|
|
.source 4 argb guint32
|
|
.temp 4 t
|
|
.temp 4 r
|
|
.temp 4 g
|
|
.temp 4 b
|
|
.temp 4 t2
|
|
|
|
loadl t, argb
|
|
andl r, t, 0xf80000
|
|
andl g, t, 0xf800
|
|
andl b, t, 0xf8
|
|
shll b, b, 7
|
|
shrul g, g, 6
|
|
shrul r, r, 19
|
|
orl t2, r, g
|
|
orl t2, t2, b
|
|
select1lw rgb15, t2
|
|
|
|
.function video_orc_unpack_RGB16
|
|
.dest 4 argb guint32
|
|
.source 2 rgb16 guint16
|
|
.temp 2 t
|
|
.temp 2 r
|
|
.temp 2 g
|
|
.temp 2 b
|
|
.temp 4 ar
|
|
.temp 4 gb
|
|
.temp 8 t2
|
|
|
|
loadw t, rgb16
|
|
andw r, t, 0xf800
|
|
andw g, t, 0x07e0
|
|
andw b, t, 0x001f
|
|
shruw r, r, 6
|
|
shlw b, b, 5
|
|
mulhsw r, r, 0x4200
|
|
mulhsw g, g, 0x2080
|
|
mulhsw b, b, 0x4200
|
|
mergewl ar, 0xff, r
|
|
mergewl gb, g, b
|
|
mergelq t2, ar, gb
|
|
x4 convsuswb argb, t2
|
|
|
|
.function video_orc_unpack_RGB16_trunc
|
|
.dest 4 argb guint32
|
|
.source 2 rgb16 guint16
|
|
.temp 2 t
|
|
.temp 2 r
|
|
.temp 2 g
|
|
.temp 2 b
|
|
.temp 4 ar
|
|
.temp 4 gb
|
|
.temp 8 t2
|
|
|
|
loadw t, rgb16
|
|
andw r, t, 0xf800
|
|
andw g, t, 0x07e0
|
|
andw b, t, 0x001f
|
|
shruw r, r, 8
|
|
shruw g, g, 3
|
|
shlw b, b, 3
|
|
mergewl ar, 0xff, r
|
|
mergewl gb, g, b
|
|
mergelq t2, ar, gb
|
|
x4 convsuswb argb, t2
|
|
|
|
.function video_orc_pack_RGB16_le
|
|
.dest 2 rgb15 guint16
|
|
.source 4 argb guint32
|
|
.temp 4 t
|
|
.temp 4 r
|
|
.temp 4 g
|
|
.temp 4 b
|
|
.temp 4 t2
|
|
|
|
loadl t, argb
|
|
andl r, t, 0xf800
|
|
andl g, t, 0xfc0000
|
|
andl b, t, 0xf8000000
|
|
shrul g, g, 13
|
|
shrul b, b, 27
|
|
orl t2, r, g
|
|
orl t2, t2, b
|
|
select0lw rgb15, t2
|
|
|
|
.function video_orc_pack_RGB16_be
|
|
.dest 2 rgb16 guint16
|
|
.source 4 argb guint32
|
|
.temp 4 t
|
|
.temp 4 r
|
|
.temp 4 g
|
|
.temp 4 b
|
|
.temp 4 t2
|
|
|
|
loadl t, argb
|
|
andl r, t, 0xf80000
|
|
andl g, t, 0xfc00
|
|
andl b, t, 0xf8
|
|
shrul r, r, 8
|
|
shrul g, g, 5
|
|
shrul b, b, 3
|
|
orl t2, r, g
|
|
orl t2, t2, b
|
|
select1lw rgb16, t2
|
|
|
|
.function video_orc_unpack_BGR16
|
|
.dest 4 argb guint32
|
|
.source 2 bgr16 guint16
|
|
.temp 2 t
|
|
.temp 2 r
|
|
.temp 2 g
|
|
.temp 2 b
|
|
.temp 4 ar
|
|
.temp 4 gb
|
|
.temp 8 t2
|
|
|
|
loadw t, bgr16
|
|
andw b, t, 0xf800
|
|
andw g, t, 0x07e0
|
|
andw r, t, 0x001f
|
|
shruw b, b, 6
|
|
shlw r, r, 5
|
|
mulhsw b, b, 0x4200
|
|
mulhsw g, g, 0x2080
|
|
mulhsw r, r, 0x4200
|
|
mergewl ar, 0xff, r
|
|
mergewl gb, g, b
|
|
mergelq t2, ar, gb
|
|
x4 convsuswb argb, t2
|
|
|
|
.function video_orc_unpack_BGR16_trunc
|
|
.dest 4 argb guint32
|
|
.source 2 bgr16 guint16
|
|
.temp 2 t
|
|
.temp 2 r
|
|
.temp 2 g
|
|
.temp 2 b
|
|
.temp 4 ar
|
|
.temp 4 gb
|
|
.temp 8 t2
|
|
|
|
loadw t, bgr16
|
|
andw b, t, 0xf800
|
|
andw g, t, 0x07e0
|
|
andw r, t, 0x001f
|
|
shruw b, b, 8
|
|
shruw g, g, 3
|
|
shlw r, r, 3
|
|
mergewl ar, 0xff, r
|
|
mergewl gb, g, b
|
|
mergelq t2, ar, gb
|
|
x4 convsuswb argb, t2
|
|
|
|
.function video_orc_pack_BGR16_le
|
|
.dest 2 rgb15 guint16
|
|
.source 4 argb guint32
|
|
.temp 4 t
|
|
.temp 4 r
|
|
.temp 4 g
|
|
.temp 4 b
|
|
.temp 4 t2
|
|
|
|
loadl t, argb
|
|
andl r, t, 0xf800
|
|
andl g, t, 0xfc0000
|
|
andl b, t, 0xf8000000
|
|
shrul r, r, 11
|
|
shrul g, g, 13
|
|
shrul b, b, 16
|
|
orl t2, r, g
|
|
orl t2, t2, b
|
|
select0lw rgb15, t2
|
|
|
|
.function video_orc_pack_BGR16_be
|
|
.dest 2 rgb15 guint16
|
|
.source 4 argb guint32
|
|
.temp 4 t
|
|
.temp 4 r
|
|
.temp 4 g
|
|
.temp 4 b
|
|
.temp 4 t2
|
|
|
|
loadl t, argb
|
|
andl r, t, 0xf80000
|
|
andl g, t, 0xfc00
|
|
andl b, t, 0xf8
|
|
shll b, b, 8
|
|
shrul g, g, 5
|
|
shrul r, r, 19
|
|
orl t2, r, g
|
|
orl t2, t2, b
|
|
select1lw rgb15, t2
|
|
|
|
.function video_orc_resample_bilinear_u32
|
|
.dest 4 d1 guint8
|
|
.source 4 s1 guint8
|
|
.param 4 p1
|
|
.param 4 p2
|
|
|
|
ldreslinl d1, s1, p1, p2
|
|
|
|
.function video_orc_merge_linear_u8
|
|
.dest 1 d1
|
|
.source 1 s1
|
|
.source 1 s2
|
|
.param 1 p1
|
|
.temp 2 t1
|
|
.temp 2 t2
|
|
.temp 1 a
|
|
.temp 1 t
|
|
|
|
loadb a, s1
|
|
convubw t1, s1
|
|
convubw t2, s2
|
|
subw t2, t2, t1
|
|
mullw t2, t2, p1
|
|
addw t2, t2, 128
|
|
convhwb t, t2
|
|
addb d1, t, a
|
|
|
|
|
|
.function video_orc_memset_2d
|
|
.flags 2d
|
|
.dest 1 d1 guint8
|
|
.param 1 p1
|
|
|
|
storeb d1, p1
|
|
|
|
.function video_orc_memcpy_2d
|
|
.flags 2d
|
|
.dest 1 d1 guint8
|
|
.source 1 s1 guint8
|
|
|
|
copyb d1, s1
|
|
|
|
.function video_orc_convert_u16_to_u8
|
|
.source 2 s guint16
|
|
.dest 1 d guint8
|
|
|
|
convhwb d, s
|
|
|
|
.function video_orc_convert_u8_to_u16
|
|
.source 1 s guint8
|
|
.dest 2 d guint16
|
|
|
|
mergebw d, s, s
|
|
|
|
.function video_orc_splat_u16
|
|
.dest 2 d1 guint8
|
|
.param 2 p1
|
|
|
|
storew d1, p1
|
|
|
|
.function video_orc_splat_u32
|
|
.dest 4 d1 guint8
|
|
.param 4 p1
|
|
|
|
storel d1, p1
|
|
|
|
.function video_orc_splat_u64
|
|
.dest 8 d1 guint8
|
|
.longparam 8 p1
|
|
|
|
storeq d1, p1
|
|
|
|
.function video_orc_splat2_u64
|
|
.dest 8 d1 guint8
|
|
.param 4 p1
|
|
.temp 4 p
|
|
|
|
loadpl p, p1
|
|
x4 mergebw d1, p, p
|
|
|
|
.function video_orc_convert_I420_UYVY
|
|
.dest 4 d1 guint8
|
|
.dest 4 d2 guint8
|
|
.source 2 y1 guint8
|
|
.source 2 y2 guint8
|
|
.source 1 u guint8
|
|
.source 1 v guint8
|
|
.temp 2 uv
|
|
|
|
mergebw uv, u, v
|
|
x2 mergebw d1, uv, y1
|
|
x2 mergebw d2, uv, y2
|
|
|
|
|
|
.function video_orc_convert_I420_YUY2
|
|
.dest 4 d1 guint8
|
|
.dest 4 d2 guint8
|
|
.source 2 y1 guint8
|
|
.source 2 y2 guint8
|
|
.source 1 u guint8
|
|
.source 1 v guint8
|
|
.temp 2 uv
|
|
|
|
mergebw uv, u, v
|
|
x2 mergebw d1, y1, uv
|
|
x2 mergebw d2, y2, uv
|
|
|
|
|
|
|
|
.function video_orc_convert_I420_AYUV
|
|
.dest 4 d1 guint8
|
|
.dest 4 d2 guint8
|
|
.source 1 y1 guint8
|
|
.source 1 y2 guint8
|
|
.source 1 u guint8
|
|
.source 1 v guint8
|
|
.param 1 alpha
|
|
.temp 2 uv
|
|
.temp 2 ay
|
|
.temp 1 tu
|
|
.temp 1 tv
|
|
|
|
loadupdb tu, u
|
|
loadupdb tv, v
|
|
mergebw uv, tu, tv
|
|
mergebw ay, alpha, y1
|
|
mergewl d1, ay, uv
|
|
mergebw ay, alpha, y2
|
|
mergewl d2, ay, uv
|
|
|
|
|
|
.function video_orc_convert_YUY2_I420
|
|
.dest 2 y1 guint8
|
|
.dest 2 y2 guint8
|
|
.dest 1 u guint8
|
|
.dest 1 v guint8
|
|
.source 4 yuv1 guint8
|
|
.source 4 yuv2 guint8
|
|
.temp 2 t1
|
|
.temp 2 t2
|
|
.temp 2 ty
|
|
|
|
x2 splitwb t1, ty, yuv1
|
|
storew y1, ty
|
|
x2 splitwb t2, ty, yuv2
|
|
storew y2, ty
|
|
x2 avgub t1, t1, t2
|
|
splitwb v, u, t1
|
|
|
|
|
|
.function video_orc_convert_UYVY_YUY2
|
|
.flags 2d
|
|
.dest 4 yuy2 guint8
|
|
.source 4 uyvy guint8
|
|
|
|
x2 swapw yuy2, uyvy
|
|
|
|
|
|
.function video_orc_planar_chroma_420_422
|
|
.flags 2d
|
|
.dest 1 d1 guint8
|
|
.dest 1 d2 guint8
|
|
.source 1 s guint8
|
|
|
|
copyb d1, s
|
|
copyb d2, s
|
|
|
|
|
|
.function video_orc_planar_chroma_420_444
|
|
.flags 2d
|
|
.dest 2 d1 guint8
|
|
.dest 2 d2 guint8
|
|
.source 1 s guint8
|
|
.temp 2 t
|
|
|
|
splatbw t, s
|
|
storew d1, t
|
|
storew d2, t
|
|
|
|
|
|
.function video_orc_planar_chroma_422_444
|
|
.flags 2d
|
|
.dest 2 d1 guint8
|
|
.source 1 s guint8
|
|
.temp 2 t
|
|
|
|
splatbw t, s
|
|
storew d1, t
|
|
|
|
|
|
.function video_orc_planar_chroma_444_422
|
|
.flags 2d
|
|
.dest 1 d guint8
|
|
.source 2 s guint8
|
|
.temp 1 t1
|
|
.temp 1 t2
|
|
|
|
splitwb t1, t2, s
|
|
avgub d, t1, t2
|
|
|
|
|
|
.function video_orc_planar_chroma_444_420
|
|
.flags 2d
|
|
.dest 1 d guint8
|
|
.source 2 s1 guint8
|
|
.source 2 s2 guint8
|
|
.temp 2 t
|
|
.temp 1 t1
|
|
.temp 1 t2
|
|
|
|
x2 avgub t, s1, s2
|
|
splitwb t1, t2, t
|
|
avgub d, t1, t2
|
|
|
|
|
|
.function video_orc_planar_chroma_422_420
|
|
.flags 2d
|
|
.dest 1 d guint8
|
|
.source 1 s1 guint8
|
|
.source 1 s2 guint8
|
|
|
|
avgub d, s1, s2
|
|
|
|
|
|
.function video_orc_convert_YUY2_AYUV
|
|
.flags 2d
|
|
.dest 8 ayuv guint8
|
|
.source 4 yuy2 guint8
|
|
.param 1 alpha
|
|
.temp 2 yy
|
|
.temp 2 uv
|
|
.temp 4 ayay
|
|
.temp 4 uvuv
|
|
|
|
x2 splitwb uv, yy, yuy2
|
|
x2 mergebw ayay, alpha, yy
|
|
mergewl uvuv, uv, uv
|
|
x2 mergewl ayuv, ayay, uvuv
|
|
|
|
|
|
.function video_orc_convert_UYVY_AYUV
|
|
.flags 2d
|
|
.dest 8 ayuv guint8
|
|
.source 4 uyvy guint8
|
|
.param 1 alpha
|
|
.temp 2 yy
|
|
.temp 2 uv
|
|
.temp 4 ayay
|
|
.temp 4 uvuv
|
|
|
|
x2 splitwb yy, uv, uyvy
|
|
x2 mergebw ayay, alpha, yy
|
|
mergewl uvuv, uv, uv
|
|
x2 mergewl ayuv, ayay, uvuv
|
|
|
|
|
|
.function video_orc_convert_YUY2_Y42B
|
|
.flags 2d
|
|
.dest 2 y guint8
|
|
.dest 1 u guint8
|
|
.dest 1 v guint8
|
|
.source 4 yuy2 guint8
|
|
.temp 2 uv
|
|
|
|
x2 splitwb uv, y, yuy2
|
|
splitwb v, u, uv
|
|
|
|
|
|
.function video_orc_convert_UYVY_Y42B
|
|
.flags 2d
|
|
.dest 2 y guint8
|
|
.dest 1 u guint8
|
|
.dest 1 v guint8
|
|
.source 4 uyvy guint8
|
|
.temp 2 uv
|
|
|
|
x2 splitwb y, uv, uyvy
|
|
splitwb v, u, uv
|
|
|
|
|
|
.function video_orc_convert_YUY2_Y444
|
|
.flags 2d
|
|
.dest 2 y guint8
|
|
.dest 2 uu guint8
|
|
.dest 2 vv guint8
|
|
.source 4 yuy2 guint8
|
|
.temp 2 uv
|
|
.temp 1 u
|
|
.temp 1 v
|
|
|
|
x2 splitwb uv, y, yuy2
|
|
splitwb v, u, uv
|
|
splatbw uu, u
|
|
splatbw vv, v
|
|
|
|
|
|
.function video_orc_convert_UYVY_Y444
|
|
.flags 2d
|
|
.dest 2 y guint8
|
|
.dest 2 uu guint8
|
|
.dest 2 vv guint8
|
|
.source 4 uyvy guint8
|
|
.temp 2 uv
|
|
.temp 1 u
|
|
.temp 1 v
|
|
|
|
x2 splitwb y, uv, uyvy
|
|
splitwb v, u, uv
|
|
splatbw uu, u
|
|
splatbw vv, v
|
|
|
|
|
|
.function video_orc_convert_UYVY_I420
|
|
.dest 2 y1 guint8
|
|
.dest 2 y2 guint8
|
|
.dest 1 u guint8
|
|
.dest 1 v guint8
|
|
.source 4 yuv1 guint8
|
|
.source 4 yuv2 guint8
|
|
.temp 2 t1
|
|
.temp 2 t2
|
|
.temp 2 ty
|
|
|
|
x2 splitwb ty, t1, yuv1
|
|
storew y1, ty
|
|
x2 splitwb ty, t2, yuv2
|
|
storew y2, ty
|
|
x2 avgub t1, t1, t2
|
|
splitwb v, u, t1
|
|
|
|
|
|
|
|
.function video_orc_convert_AYUV_I420
|
|
.flags 2d
|
|
.dest 2 y1 guint8
|
|
.dest 2 y2 guint8
|
|
.dest 1 u guint8
|
|
.dest 1 v guint8
|
|
.source 8 ayuv1 guint8
|
|
.source 8 ayuv2 guint8
|
|
.temp 4 ay
|
|
.temp 4 uv1
|
|
.temp 4 uv2
|
|
.temp 4 uv
|
|
.temp 2 uu
|
|
.temp 2 vv
|
|
.temp 1 t1
|
|
.temp 1 t2
|
|
|
|
x2 splitlw uv1, ay, ayuv1
|
|
x2 select1wb y1, ay
|
|
x2 splitlw uv2, ay, ayuv2
|
|
x2 select1wb y2, ay
|
|
x4 avgub uv, uv1, uv2
|
|
x2 splitwb vv, uu, uv
|
|
splitwb t1, t2, uu
|
|
avgub u, t1, t2
|
|
splitwb t1, t2, vv
|
|
avgub v, t1, t2
|
|
|
|
|
|
|
|
.function video_orc_convert_AYUV_YUY2
|
|
.flags 2d
|
|
.dest 4 yuy2 guint8
|
|
.source 8 ayuv guint8
|
|
.temp 2 yy
|
|
.temp 2 uv1
|
|
.temp 2 uv2
|
|
.temp 4 ayay
|
|
.temp 4 uvuv
|
|
|
|
x2 splitlw uvuv, ayay, ayuv
|
|
splitlw uv1, uv2, uvuv
|
|
x2 avgub uv1, uv1, uv2
|
|
x2 select1wb yy, ayay
|
|
x2 mergebw yuy2, yy, uv1
|
|
|
|
|
|
.function video_orc_convert_AYUV_UYVY
|
|
.flags 2d
|
|
.dest 4 yuy2 guint8
|
|
.source 8 ayuv guint8
|
|
.temp 2 yy
|
|
.temp 2 uv1
|
|
.temp 2 uv2
|
|
.temp 4 ayay
|
|
.temp 4 uvuv
|
|
|
|
x2 splitlw uvuv, ayay, ayuv
|
|
splitlw uv1, uv2, uvuv
|
|
x2 avgub uv1, uv1, uv2
|
|
x2 select1wb yy, ayay
|
|
x2 mergebw yuy2, uv1, yy
|
|
|
|
|
|
|
|
.function video_orc_convert_AYUV_Y42B
|
|
.flags 2d
|
|
.dest 2 y guint8
|
|
.dest 1 u guint8
|
|
.dest 1 v guint8
|
|
.source 8 ayuv guint8
|
|
.temp 4 ayay
|
|
.temp 4 uvuv
|
|
.temp 2 uv1
|
|
.temp 2 uv2
|
|
|
|
x2 splitlw uvuv, ayay, ayuv
|
|
splitlw uv1, uv2, uvuv
|
|
x2 avgub uv1, uv1, uv2
|
|
splitwb v, u, uv1
|
|
x2 select1wb y, ayay
|
|
|
|
|
|
.function video_orc_convert_AYUV_Y444
|
|
.flags 2d
|
|
.dest 1 y guint8
|
|
.dest 1 u guint8
|
|
.dest 1 v guint8
|
|
.source 4 ayuv guint8
|
|
.temp 2 ay
|
|
.temp 2 uv
|
|
|
|
splitlw uv, ay, ayuv
|
|
splitwb v, u, uv
|
|
select1wb y, ay
|
|
|
|
|
|
.function video_orc_convert_Y42B_YUY2
|
|
.flags 2d
|
|
.dest 4 yuy2 guint8
|
|
.source 2 y guint8
|
|
.source 1 u guint8
|
|
.source 1 v guint8
|
|
.temp 2 uv
|
|
|
|
mergebw uv, u, v
|
|
x2 mergebw yuy2, y, uv
|
|
|
|
|
|
.function video_orc_convert_Y42B_UYVY
|
|
.flags 2d
|
|
.dest 4 uyvy guint8
|
|
.source 2 y guint8
|
|
.source 1 u guint8
|
|
.source 1 v guint8
|
|
.temp 2 uv
|
|
|
|
mergebw uv, u, v
|
|
x2 mergebw uyvy, uv, y
|
|
|
|
|
|
.function video_orc_convert_Y42B_AYUV
|
|
.flags 2d
|
|
.dest 8 ayuv guint8
|
|
.source 2 yy guint8
|
|
.source 1 u guint8
|
|
.source 1 v guint8
|
|
.param 1 alpha
|
|
.temp 2 uv
|
|
.temp 2 ay
|
|
.temp 4 uvuv
|
|
.temp 4 ayay
|
|
|
|
mergebw uv, u, v
|
|
x2 mergebw ayay, alpha, yy
|
|
mergewl uvuv, uv, uv
|
|
x2 mergewl ayuv, ayay, uvuv
|
|
|
|
|
|
.function video_orc_convert_Y444_YUY2
|
|
.flags 2d
|
|
.dest 4 yuy2 guint8
|
|
.source 2 y guint8
|
|
.source 2 u guint8
|
|
.source 2 v guint8
|
|
.temp 2 uv
|
|
.temp 4 uvuv
|
|
.temp 2 uv1
|
|
.temp 2 uv2
|
|
|
|
x2 mergebw uvuv, u, v
|
|
splitlw uv1, uv2, uvuv
|
|
x2 avgub uv, uv1, uv2
|
|
x2 mergebw yuy2, y, uv
|
|
|
|
|
|
.function video_orc_convert_Y444_UYVY
|
|
.flags 2d
|
|
.dest 4 uyvy guint8
|
|
.source 2 y guint8
|
|
.source 2 u guint8
|
|
.source 2 v guint8
|
|
.temp 2 uv
|
|
.temp 4 uvuv
|
|
.temp 2 uv1
|
|
.temp 2 uv2
|
|
|
|
x2 mergebw uvuv, u, v
|
|
splitlw uv1, uv2, uvuv
|
|
x2 avgub uv, uv1, uv2
|
|
x2 mergebw uyvy, uv, y
|
|
|
|
|
|
.function video_orc_convert_Y444_AYUV
|
|
.flags 2d
|
|
.dest 4 ayuv guint8
|
|
.source 1 yy guint8
|
|
.source 1 u guint8
|
|
.source 1 v guint8
|
|
.param 1 alpha
|
|
.temp 2 uv
|
|
.temp 2 ay
|
|
|
|
mergebw uv, u, v
|
|
mergebw ay, alpha, yy
|
|
mergewl ayuv, ay, uv
|
|
|
|
|
|
|
|
.function video_orc_convert_AYUV_ARGB
|
|
.flags 2d
|
|
.dest 4 argb guint8
|
|
.source 4 ayuv guint8
|
|
.param 2 p1
|
|
.param 2 p2
|
|
.param 2 p3
|
|
.param 2 p4
|
|
.param 2 p5
|
|
.temp 1 a
|
|
.temp 1 y
|
|
.temp 1 u
|
|
.temp 1 v
|
|
.temp 2 wy
|
|
.temp 2 wu
|
|
.temp 2 wv
|
|
.temp 2 wr
|
|
.temp 2 wg
|
|
.temp 2 wb
|
|
.temp 1 r
|
|
.temp 1 g
|
|
.temp 1 b
|
|
.temp 4 x
|
|
.const 1 c128 128
|
|
|
|
x4 subb x, ayuv, c128
|
|
splitlw wv, wy, x
|
|
splitwb y, a, wy
|
|
splitwb v, u, wv
|
|
|
|
splatbw wy, y
|
|
splatbw wu, u
|
|
splatbw wv, v
|
|
|
|
mulhsw wy, wy, p1
|
|
|
|
mulhsw wr, wv, p2
|
|
addw wr, wy, wr
|
|
convssswb r, wr
|
|
mergebw wr, a, r
|
|
|
|
mulhsw wb, wu, p3
|
|
addw wb, wy, wb
|
|
convssswb b, wb
|
|
|
|
mulhsw wg, wu, p4
|
|
addw wg, wy, wg
|
|
mulhsw wy, wv, p5
|
|
addw wg, wg, wy
|
|
|
|
convssswb g, wg
|
|
|
|
mergebw wb, g, b
|
|
mergewl x, wr, wb
|
|
x4 addb argb, x, c128
|
|
|
|
.function video_orc_convert_AYUV_BGRA
|
|
.flags 2d
|
|
.dest 4 bgra guint8
|
|
.source 4 ayuv guint8
|
|
.param 2 p1
|
|
.param 2 p2
|
|
.param 2 p3
|
|
.param 2 p4
|
|
.param 2 p5
|
|
.temp 1 a
|
|
.temp 1 y
|
|
.temp 1 u
|
|
.temp 1 v
|
|
.temp 2 wy
|
|
.temp 2 wu
|
|
.temp 2 wv
|
|
.temp 2 wr
|
|
.temp 2 wg
|
|
.temp 2 wb
|
|
.temp 1 r
|
|
.temp 1 g
|
|
.temp 1 b
|
|
.temp 4 x
|
|
.const 1 c128 128
|
|
|
|
x4 subb x, ayuv, c128
|
|
splitlw wv, wy, x
|
|
splitwb y, a, wy
|
|
splitwb v, u, wv
|
|
|
|
splatbw wy, y
|
|
splatbw wu, u
|
|
splatbw wv, v
|
|
|
|
mulhsw wy, wy, p1
|
|
|
|
mulhsw wr, wv, p2
|
|
addw wr, wy, wr
|
|
convssswb r, wr
|
|
mergebw wr, r, a
|
|
|
|
mulhsw wb, wu, p3
|
|
addw wb, wy, wb
|
|
convssswb b, wb
|
|
|
|
mulhsw wg, wu, p4
|
|
addw wg, wy, wg
|
|
mulhsw wy, wv, p5
|
|
addw wg, wg, wy
|
|
|
|
convssswb g, wg
|
|
|
|
mergebw wb, b, g
|
|
mergewl x, wb, wr
|
|
x4 addb bgra, x, c128
|
|
|
|
|
|
.function video_orc_convert_AYUV_ABGR
|
|
.flags 2d
|
|
.dest 4 argb guint8
|
|
.source 4 ayuv guint8
|
|
.param 2 p1
|
|
.param 2 p2
|
|
.param 2 p3
|
|
.param 2 p4
|
|
.param 2 p5
|
|
.temp 1 a
|
|
.temp 1 y
|
|
.temp 1 u
|
|
.temp 1 v
|
|
.temp 2 wy
|
|
.temp 2 wu
|
|
.temp 2 wv
|
|
.temp 2 wr
|
|
.temp 2 wg
|
|
.temp 2 wb
|
|
.temp 1 r
|
|
.temp 1 g
|
|
.temp 1 b
|
|
.temp 4 x
|
|
.const 1 c128 128
|
|
|
|
x4 subb x, ayuv, c128
|
|
splitlw wv, wy, x
|
|
splitwb y, a, wy
|
|
splitwb v, u, wv
|
|
|
|
splatbw wy, y
|
|
splatbw wu, u
|
|
splatbw wv, v
|
|
|
|
mulhsw wy, wy, p1
|
|
|
|
mulhsw wr, wv, p2
|
|
addw wr, wy, wr
|
|
convssswb r, wr
|
|
|
|
mulhsw wb, wu, p3
|
|
addw wb, wy, wb
|
|
convssswb b, wb
|
|
mergebw wb, a, b
|
|
|
|
mulhsw wg, wu, p4
|
|
addw wg, wy, wg
|
|
mulhsw wy, wv, p5
|
|
addw wg, wg, wy
|
|
|
|
convssswb g, wg
|
|
|
|
mergebw wr, g, r
|
|
mergewl x, wb, wr
|
|
x4 addb argb, x, c128
|
|
|
|
.function video_orc_convert_AYUV_RGBA
|
|
.flags 2d
|
|
.dest 4 argb guint8
|
|
.source 4 ayuv guint8
|
|
.param 2 p1
|
|
.param 2 p2
|
|
.param 2 p3
|
|
.param 2 p4
|
|
.param 2 p5
|
|
.temp 1 a
|
|
.temp 1 y
|
|
.temp 1 u
|
|
.temp 1 v
|
|
.temp 2 wy
|
|
.temp 2 wu
|
|
.temp 2 wv
|
|
.temp 2 wr
|
|
.temp 2 wg
|
|
.temp 2 wb
|
|
.temp 1 r
|
|
.temp 1 g
|
|
.temp 1 b
|
|
.temp 4 x
|
|
.const 1 c128 128
|
|
|
|
x4 subb x, ayuv, c128
|
|
splitlw wv, wy, x
|
|
splitwb y, a, wy
|
|
splitwb v, u, wv
|
|
|
|
splatbw wy, y
|
|
splatbw wu, u
|
|
splatbw wv, v
|
|
|
|
mulhsw wy, wy, p1
|
|
|
|
mulhsw wr, wv, p2
|
|
addw wr, wy, wr
|
|
convssswb r, wr
|
|
|
|
mulhsw wb, wu, p3
|
|
addw wb, wy, wb
|
|
convssswb b, wb
|
|
mergebw wb, b, a
|
|
|
|
mulhsw wg, wu, p4
|
|
addw wg, wy, wg
|
|
mulhsw wy, wv, p5
|
|
addw wg, wg, wy
|
|
|
|
convssswb g, wg
|
|
|
|
mergebw wr, r, g
|
|
mergewl x, wr, wb
|
|
x4 addb argb, x, c128
|
|
|
|
.function video_orc_convert_I420_BGRA
|
|
.dest 4 argb guint8
|
|
.source 1 y guint8
|
|
.source 1 u guint8
|
|
.source 1 v guint8
|
|
.param 2 p1
|
|
.param 2 p2
|
|
.param 2 p3
|
|
.param 2 p4
|
|
.param 2 p5
|
|
.temp 2 wy
|
|
.temp 2 wu
|
|
.temp 2 wv
|
|
.temp 2 wr
|
|
.temp 2 wg
|
|
.temp 2 wb
|
|
.temp 1 r
|
|
.temp 1 g
|
|
.temp 1 b
|
|
.temp 4 x
|
|
.const 1 c128 128
|
|
.const 4 c4128 128
|
|
|
|
subb r, y, c128
|
|
splatbw wy, r
|
|
loadupdb r, u
|
|
subb r, r, c128
|
|
splatbw wu, r
|
|
loadupdb r, v
|
|
subb r, r, c128
|
|
splatbw wv, r
|
|
|
|
mulhsw wy, wy, p1
|
|
|
|
mulhsw wr, wv, p2
|
|
addw wr, wy, wr
|
|
convssswb r, wr
|
|
mergebw wr, r, 127
|
|
|
|
mulhsw wb, wu, p3
|
|
addw wb, wy, wb
|
|
convssswb b, wb
|
|
|
|
mulhsw wg, wu, p4
|
|
addw wg, wy, wg
|
|
mulhsw wy, wv, p5
|
|
addw wg, wg, wy
|
|
|
|
convssswb g, wg
|
|
|
|
mergebw wb, b, g
|
|
mergewl x, wb, wr
|
|
x4 addb argb, x, c4128
|
|
|
|
.function video_orc_convert_I420_ARGB
|
|
.dest 4 argb guint8
|
|
.source 1 y guint8
|
|
.source 1 u guint8
|
|
.source 1 v guint8
|
|
.param 2 p1
|
|
.param 2 p2
|
|
.param 2 p3
|
|
.param 2 p4
|
|
.param 2 p5
|
|
.temp 2 wy
|
|
.temp 2 wu
|
|
.temp 2 wv
|
|
.temp 2 wr
|
|
.temp 2 wg
|
|
.temp 2 wb
|
|
.temp 1 r
|
|
.temp 1 g
|
|
.temp 1 b
|
|
.temp 4 x
|
|
.const 1 c128 128
|
|
.const 4 c4128 128
|
|
|
|
subb r, y, c128
|
|
splatbw wy, r
|
|
loadupdb r, u
|
|
subb r, r, c128
|
|
splatbw wu, r
|
|
loadupdb r, v
|
|
subb r, r, c128
|
|
splatbw wv, r
|
|
|
|
mulhsw wy, wy, p1
|
|
|
|
mulhsw wr, wv, p2
|
|
addw wr, wy, wr
|
|
convssswb r, wr
|
|
mergebw wr, 127, r
|
|
|
|
mulhsw wb, wu, p3
|
|
addw wb, wy, wb
|
|
convssswb b, wb
|
|
|
|
mulhsw wg, wu, p4
|
|
addw wg, wy, wg
|
|
mulhsw wy, wv, p5
|
|
addw wg, wg, wy
|
|
|
|
convssswb g, wg
|
|
|
|
mergebw wb, g, b
|
|
mergewl x, wr, wb
|
|
x4 addb argb, x, c4128
|
|
|
|
.function video_orc_matrix8
|
|
.backup _custom_video_orc_matrix8
|
|
.source 4 argb guint8
|
|
.dest 4 ayuv guint8
|
|
.longparam 8 p1
|
|
.longparam 8 p2
|
|
.longparam 8 p3
|
|
.longparam 8 p4
|
|
.const 1 c128 128
|
|
.temp 2 w1
|
|
.temp 2 w2
|
|
.temp 1 b1
|
|
.temp 1 b2
|
|
.temp 4 l1
|
|
.temp 4 ayuv2
|
|
.temp 8 aq
|
|
.temp 8 q1
|
|
.temp 8 pr1
|
|
.temp 8 pr2
|
|
.temp 8 pr3
|
|
|
|
loadpq pr1, p1
|
|
loadpq pr2, p2
|
|
loadpq pr3, p3
|
|
|
|
x4 subb l1, argb, c128
|
|
|
|
select0lw w1, l1
|
|
select1lw w2, l1
|
|
select0wb b1, w1
|
|
select1wb b2, w1
|
|
|
|
convubw w1, b1
|
|
convuwl l1, w1
|
|
x4 mergebw aq, l1, l1
|
|
|
|
splatbl l1, b2
|
|
mergelq q1, l1, l1
|
|
x4 mulhsw q1, q1, pr1
|
|
x4 addw aq, aq, q1
|
|
|
|
select0wb b1, w2
|
|
splatbl l1,b1
|
|
mergelq q1, l1, l1
|
|
x4 mulhsw q1, q1, pr2
|
|
x4 addw aq, aq, q1
|
|
|
|
select1wb b2, w2
|
|
splatbl l1, b2
|
|
mergelq q1, l1, l1
|
|
x4 mulhsw q1, q1, pr3
|
|
x4 addw aq, aq, q1
|
|
|
|
x4 convssswb ayuv2, aq
|
|
x4 addb ayuv, ayuv2, c128
|
|
|
|
#.function video_orc_resample_h_near_u32
|
|
#.source 4 src guint32
|
|
#.source 4 idx
|
|
#.dest 4 dest guint32
|
|
#.temp 4 t
|
|
#
|
|
#loadidxl t, src, idx
|
|
#storel dest, t
|
|
|
|
.function video_orc_resample_h_near_u32_lq
|
|
.dest 4 d1 guint32
|
|
.source 4 s1 guint32
|
|
.param 4 p1
|
|
.param 4 p2
|
|
|
|
ldresnearl d1, s1, p1, p2
|
|
|
|
.function video_orc_resample_h_2tap_1u8_lq
|
|
.dest 1 d1 guint8
|
|
.source 1 s1 guint8
|
|
.param 4 p1
|
|
.param 4 p2
|
|
|
|
ldreslinb d1, s1, p1, p2
|
|
|
|
.function video_orc_resample_h_2tap_4u8_lq
|
|
.dest 4 d1 guint32
|
|
.source 4 s1 guint32
|
|
.param 4 p1
|
|
.param 4 p2
|
|
|
|
ldreslinl d1, s1, p1, p2
|
|
|
|
.function video_orc_resample_h_2tap_u8_lq
|
|
.source 1 s1 guint8
|
|
.source 1 s2 guint8
|
|
.source 2 t1 gint16
|
|
.source 2 t2 gint16
|
|
.dest 1 d guint8
|
|
.temp 2 w1
|
|
.temp 2 w2
|
|
|
|
convubw w1, s1
|
|
mullw w1, w1, t1
|
|
convubw w2, s2
|
|
mullw w2, w2, t2
|
|
addw w1, w1, w2
|
|
addw w1, w1, 32
|
|
shrsw w1, w1, 6
|
|
convsuswb d, w1
|
|
|
|
.function video_orc_resample_h_2tap_u16
|
|
.source 2 s1 guint16
|
|
.source 2 s2 guint16
|
|
.source 2 t1 gint16
|
|
.source 2 t2 gint16
|
|
.dest 2 d guint16
|
|
.temp 4 w1
|
|
.temp 4 w2
|
|
.temp 4 tl1
|
|
.temp 4 tl2
|
|
|
|
convuwl w1, s1
|
|
convswl tl1, t1
|
|
mulll w1, w1, tl1
|
|
convuwl w2, s2
|
|
convswl tl2, t2
|
|
mulll w2, w2, tl2
|
|
addl w1, w1, w2
|
|
addl w1, w1, 4096
|
|
shrsl w1, w1, 12
|
|
convsuslw d, w1
|
|
|
|
.function video_orc_resample_v_2tap_u8_lq
|
|
.source 1 src1 guint8
|
|
.source 1 src2 guint8
|
|
.dest 1 dest guint8
|
|
.param 2 p1 gint16
|
|
.temp 1 t
|
|
.temp 2 w1
|
|
.temp 2 w2
|
|
|
|
convubw w1, src1
|
|
convubw w2, src2
|
|
subw w2, w2, w1
|
|
mullw w2, w2, p1
|
|
addw w2, w2, 128
|
|
convhwb t, w2
|
|
addb dest, t, src1
|
|
|
|
.function video_orc_resample_v_2tap_u16
|
|
.source 2 src1 guint16
|
|
.source 2 src2 guint16
|
|
.dest 2 dest guint16
|
|
.param 2 p1 gint16
|
|
.temp 4 l1
|
|
.temp 4 l2
|
|
.temp 4 l3
|
|
|
|
convuwl l1, src1
|
|
convuwl l2, src2
|
|
subl l2, l2, l1
|
|
convuwl l3, p1
|
|
mulll l2, l2, l3
|
|
addl l2, l2, 4096
|
|
shrsl l2, l2, 12
|
|
addl l1, l1, l2
|
|
convsuslw dest, l1
|
|
|
|
.function video_orc_resample_v_2tap_u8
|
|
.source 1 s1 guint8
|
|
.source 1 s2 guint8
|
|
.dest 1 d1 guint8
|
|
.param 2 p1 gint16
|
|
.temp 1 t
|
|
.temp 2 w1
|
|
.temp 2 w2
|
|
.temp 4 t1
|
|
.temp 4 t2
|
|
|
|
convubw w1, s1
|
|
convubw w2, s2
|
|
subw w2, w2, w1
|
|
mulswl t2, w2, p1
|
|
addl t2, t2, 4095
|
|
shrsl t2, t2, 12
|
|
convlw w2, t2
|
|
addw w2, w2, w1
|
|
convsuswb d1, w2
|
|
|
|
.function video_orc_resample_v_4tap_u8_lq
|
|
.source 1 s1 guint8
|
|
.source 1 s2 guint8
|
|
.source 1 s3 guint8
|
|
.source 1 s4 guint8
|
|
.dest 1 d1 guint8
|
|
.param 2 p1 gint16
|
|
.param 2 p2 gint16
|
|
.param 2 p3 gint16
|
|
.param 2 p4 gint16
|
|
.temp 2 w1
|
|
.temp 2 w2
|
|
|
|
convubw w1, s1
|
|
mullw w1, w1, p1
|
|
convubw w2, s2
|
|
mullw w2, w2, p2
|
|
addw w1, w1, w2
|
|
convubw w2, s3
|
|
mullw w2, w2, p3
|
|
addw w1, w1, w2
|
|
convubw w2, s4
|
|
mullw w2, w2, p4
|
|
addw w1, w1, w2
|
|
addw w1, w1, 32
|
|
shrsw w1, w1, 6
|
|
convsuswb d1, w1
|
|
|
|
.function video_orc_resample_v_4tap_u8
|
|
.source 1 s1 guint8
|
|
.source 1 s2 guint8
|
|
.source 1 s3 guint8
|
|
.source 1 s4 guint8
|
|
.dest 1 d1 guint8
|
|
.param 2 p1 gint16
|
|
.param 2 p2 gint16
|
|
.param 2 p3 gint16
|
|
.param 2 p4 gint16
|
|
.temp 2 w1
|
|
.temp 2 w2
|
|
.temp 4 t1
|
|
.temp 4 t2
|
|
|
|
convubw w1, s1
|
|
mulswl t1, w1, p1
|
|
convubw w2, s2
|
|
mulswl t2, w2, p2
|
|
addl t1, t1, t2
|
|
convubw w2, s3
|
|
mulswl t2, w2, p3
|
|
addl t1, t1, t2
|
|
convubw w2, s4
|
|
mulswl t2, w2, p4
|
|
addl t1, t1, t2
|
|
addl t1, t1, 4095
|
|
shrsl t1, t1, 12
|
|
convsuslw w1, t1
|
|
convsuswb d1, w1
|
|
|
|
# crashes ORC for now but is potentially faster
|
|
#.function video_orc_resample_h_4tap_u8
|
|
#.source 1 s1 guint8
|
|
#.source 1 s2 guint8
|
|
#.source 1 s3 guint8
|
|
#.source 1 s4 guint8
|
|
#.source 2 t1 gint16
|
|
#.source 2 t2 gint16
|
|
#.source 2 t3 gint16
|
|
#.source 2 t4 gint16
|
|
#.dest 1 d1 guint8
|
|
#.temp 2 w1
|
|
#.temp 2 w2
|
|
#.temp 4 l1
|
|
#.temp 4 l2
|
|
#
|
|
#convubw w1, s1
|
|
#mulswl l1, w1, t1
|
|
#convubw w2, s2
|
|
#mulswl l2, w2, t2
|
|
#addl l1, l1, l2
|
|
#convubw w2, s3
|
|
#mulswl l2, w2, t3
|
|
#addl l1, l1, l2
|
|
#convubw w2, s4
|
|
#mulswl l2, w2, t4
|
|
#addl l1, l1, l2
|
|
#addl l1, l1, 4095
|
|
#shrsl l1, l1, 12
|
|
#convsuslw w1, l1
|
|
#convsuswb d1, w1
|
|
|
|
.function video_orc_resample_h_multaps_u8
|
|
.source 1 s guint8
|
|
.source 2 t gint16
|
|
.dest 4 d gint32
|
|
.temp 2 w1
|
|
|
|
convubw w1, s
|
|
mulswl d, w1, t
|
|
|
|
.function video_orc_resample_h_muladdtaps_u8
|
|
.flags 2d
|
|
.source 1 s guint8
|
|
.source 2 t gint16
|
|
.dest 4 d gint32
|
|
.temp 2 w1
|
|
.temp 4 t1
|
|
|
|
convubw w1, s
|
|
mulswl t1, w1, t
|
|
addl d, d, t1
|
|
|
|
.function video_orc_resample_scaletaps_u8
|
|
.source 4 s gint32
|
|
.dest 1 d guint8
|
|
.temp 2 w1
|
|
.temp 4 t1
|
|
|
|
addl t1, s, 4095
|
|
shrsl t1, t1, 12
|
|
convsuslw w1, t1
|
|
convsuswb d, w1
|
|
|
|
.function video_orc_resample_h_multaps_u8_lq
|
|
.source 1 s guint8
|
|
.source 2 t gint16
|
|
.dest 2 d gint16
|
|
.temp 2 w1
|
|
|
|
convubw w1, s
|
|
mullw d, w1, t
|
|
|
|
.function video_orc_resample_h_muladdtaps_u8_lq
|
|
.flags 2d
|
|
.source 1 s guint8
|
|
.source 2 t gint16
|
|
.dest 2 d gint16
|
|
.temp 2 w1
|
|
|
|
convubw w1, s
|
|
mullw w1, w1, t
|
|
addw d, d, w1
|
|
|
|
.function video_orc_resample_h_multaps3_u8_lq
|
|
.source 1 s1 guint8
|
|
.source 1 s2 guint8
|
|
.source 1 s3 guint8
|
|
.source 2 t1 gint16
|
|
.source 2 t2 gint16
|
|
.source 2 t3 gint16
|
|
.dest 2 d gint16
|
|
.temp 2 w1
|
|
.temp 2 w2
|
|
|
|
convubw w1, s1
|
|
mullw w1, w1, t1
|
|
convubw w2, s2
|
|
mullw w2, w2, t2
|
|
addw w1, w1, w2
|
|
convubw w2, s3
|
|
mullw w2, w2, t3
|
|
addw d, w1, w2
|
|
|
|
.function video_orc_resample_h_muladdtaps3_u8_lq
|
|
.source 1 s1 guint8
|
|
.source 1 s2 guint8
|
|
.source 1 s3 guint8
|
|
.source 2 t1 gint16
|
|
.source 2 t2 gint16
|
|
.source 2 t3 gint16
|
|
.dest 2 d gint16
|
|
.temp 2 w1
|
|
.temp 2 w2
|
|
|
|
convubw w1, s1
|
|
mullw w1, w1, t1
|
|
convubw w2, s2
|
|
mullw w2, w2, t2
|
|
addw w1, w1, w2
|
|
convubw w2, s3
|
|
mullw w2, w2, t3
|
|
addw w1, w1, w2
|
|
addw d, d, w1
|
|
|
|
.function video_orc_resample_h_muladdscaletaps3_u8_lq
|
|
.source 1 s1 guint8
|
|
.source 1 s2 guint8
|
|
.source 1 s3 guint8
|
|
.source 2 t1 gint16
|
|
.source 2 t2 gint16
|
|
.source 2 t3 gint16
|
|
.source 2 temp gint16
|
|
.dest 1 d guint8
|
|
.temp 2 w1
|
|
.temp 2 w2
|
|
|
|
convubw w1, s1
|
|
mullw w1, w1, t1
|
|
convubw w2, s2
|
|
mullw w2, w2, t2
|
|
addw w1, w1, w2
|
|
convubw w2, s3
|
|
mullw w2, w2, t3
|
|
addw w1, w1, w2
|
|
addw w1, w1, temp
|
|
addw w1, w1, 32
|
|
shrsw w1, w1, 6
|
|
convsuswb d, w1
|
|
|
|
.function video_orc_resample_scaletaps_u8_lq
|
|
.source 2 s gint16
|
|
.dest 1 d guint8
|
|
.temp 2 w1
|
|
|
|
addw w1, s, 32
|
|
shrsw w1, w1, 6
|
|
convsuswb d, w1
|
|
|
|
.function video_orc_resample_h_multaps_u16
|
|
.source 2 s guint16
|
|
.source 2 t gint16
|
|
.dest 4 d gint32
|
|
.temp 4 l1
|
|
.temp 4 l2
|
|
|
|
convuwl l1, s
|
|
convswl l2, t
|
|
mulll d, l1, l2
|
|
|
|
.function video_orc_resample_h_muladdtaps_u16
|
|
.flags 2d
|
|
.source 2 s guint16
|
|
.source 2 t gint16
|
|
.dest 4 d gint32
|
|
.temp 4 l1
|
|
.temp 4 l2
|
|
|
|
convuwl l1, s
|
|
convswl l2, t
|
|
mulll l1, l1, l2
|
|
addl d, d, l1
|
|
|
|
.function video_orc_resample_scaletaps_u16
|
|
.source 4 s gint32
|
|
.dest 2 d guint16
|
|
.temp 4 t1
|
|
|
|
addl t1, s, 4095
|
|
shrsl t1, t1, 12
|
|
convsuslw d, t1
|
|
|
|
.function video_orc_resample_v_multaps_u8
|
|
.source 1 s guint8
|
|
.param 2 t gint16
|
|
.dest 4 d gint32
|
|
.temp 2 w1
|
|
|
|
convubw w1, s
|
|
mulswl d, w1, t
|
|
|
|
.function video_orc_resample_v_muladdtaps_u8
|
|
.source 1 s guint8
|
|
.param 2 t gint16
|
|
.dest 4 d gint32
|
|
.temp 2 w1
|
|
.temp 4 t1
|
|
|
|
convubw w1, s
|
|
mulswl t1, w1, t
|
|
addl d, d, t1
|
|
|
|
.function video_orc_resample_v_multaps_u16
|
|
.source 2 s guint16
|
|
.param 2 t gint16
|
|
.dest 4 d gint32
|
|
.temp 4 l1
|
|
|
|
convuwl l1, s
|
|
mulll d, l1, t
|
|
|
|
.function video_orc_resample_v_muladdtaps_u16
|
|
.source 2 s guint16
|
|
.param 2 t gint16
|
|
.dest 4 d gint32
|
|
.temp 4 t1
|
|
.temp 4 t2
|
|
|
|
convuwl t1, s
|
|
convswl t2, t
|
|
mulll t1, t1, t2
|
|
addl d, d, t1
|
|
|
|
.function video_orc_resample_v_multaps_u8_lq
|
|
.source 1 s guint8
|
|
.param 2 t gint16
|
|
.dest 2 d gint16
|
|
.temp 2 w1
|
|
|
|
convubw w1, s
|
|
mullw d, w1, t
|
|
|
|
.function video_orc_resample_v_multaps4_u8_lq
|
|
.source 1 s1 guint8
|
|
.source 1 s2 guint8
|
|
.source 1 s3 guint8
|
|
.source 1 s4 guint8
|
|
.param 2 t1 gint16
|
|
.param 2 t2 gint16
|
|
.param 2 t3 gint16
|
|
.param 2 t4 gint16
|
|
.dest 2 d gint16
|
|
.temp 2 w1
|
|
.temp 2 w2
|
|
|
|
convubw w1, s1
|
|
mullw w1, w1, t1
|
|
convubw w2, s2
|
|
mullw w2, w2, t2
|
|
addw w1, w1, w2
|
|
convubw w2, s3
|
|
mullw w2, w2, t3
|
|
addw w1, w1, w2
|
|
convubw w2, s4
|
|
mullw w2, w2, t4
|
|
addw d, w1, w2
|
|
|
|
.function video_orc_resample_v_muladdtaps_u8_lq
|
|
.source 1 s guint8
|
|
.param 2 t gint16
|
|
.dest 2 d gint16
|
|
.temp 2 w1
|
|
|
|
convubw w1, s
|
|
mullw w1, w1, t
|
|
addw d, d, w1
|
|
|
|
.function video_orc_resample_v_muladdtaps4_u8_lq
|
|
.source 1 s1 guint8
|
|
.source 1 s2 guint8
|
|
.source 1 s3 guint8
|
|
.source 1 s4 guint8
|
|
.param 2 t1 gint16
|
|
.param 2 t2 gint16
|
|
.param 2 t3 gint16
|
|
.param 2 t4 gint16
|
|
.dest 2 d gint16
|
|
.temp 2 w1
|
|
.temp 2 w2
|
|
|
|
convubw w1, s1
|
|
mullw w1, w1, t1
|
|
convubw w2, s2
|
|
mullw w2, w2, t2
|
|
addw w1, w1, w2
|
|
convubw w2, s3
|
|
mullw w2, w2, t3
|
|
addw w1, w1, w2
|
|
convubw w2, s4
|
|
mullw w2, w2, t4
|
|
addw w1, w1, w2
|
|
addw d, d, w1
|
|
|
|
.function video_orc_resample_v_muladdscaletaps4_u8_lq
|
|
.source 1 s1 guint8
|
|
.source 1 s2 guint8
|
|
.source 1 s3 guint8
|
|
.source 1 s4 guint8
|
|
.source 2 temp gint16
|
|
.param 2 t1 gint16
|
|
.param 2 t2 gint16
|
|
.param 2 t3 gint16
|
|
.param 2 t4 gint16
|
|
.dest 1 d guint8
|
|
.temp 2 w1
|
|
.temp 2 w2
|
|
|
|
convubw w1, s1
|
|
mullw w1, w1, t1
|
|
convubw w2, s2
|
|
mullw w2, w2, t2
|
|
addw w1, w1, w2
|
|
convubw w2, s3
|
|
mullw w2, w2, t3
|
|
addw w1, w1, w2
|
|
convubw w2, s4
|
|
mullw w2, w2, t4
|
|
addw w1, w1, w2
|
|
addw w1, w1, temp
|
|
addw w1, w1, 32
|
|
shrsw w1, w1, 6
|
|
convsuswb d, w1
|
|
|
|
.function video_orc_chroma_down_h2_u8
|
|
.source 8 s guint8
|
|
.dest 8 d guint8
|
|
.temp 4 ayuv1
|
|
.temp 4 ayuv2
|
|
.temp 2 ay1
|
|
.temp 2 uv1
|
|
.temp 2 uv2
|
|
|
|
splitql ayuv2, ayuv1, s
|
|
splitlw uv1, ay1, ayuv1
|
|
select1lw uv2, ayuv2
|
|
x2 avgub uv1, uv1, uv2
|
|
mergewl ayuv1, ay1, uv1
|
|
mergelq d, ayuv1, ayuv2
|
|
|
|
#.function video_orc_chroma_up_h2_cs_u8
|
|
#.source 8 s guint8
|
|
#.source 4 s1 guint8
|
|
#.dest 8 d guint8
|
|
#.temp 4 ayuv1
|
|
#.temp 4 ayuv2
|
|
#.temp 4 ayuv3
|
|
#.temp 2 ay2
|
|
#.temp 2 uv2
|
|
#.temp 2 uv3
|
|
#
|
|
#splitql ayuv2, ayuv1, s
|
|
#ldresnearl ayuv3, s1, 0x20000, 0x20000
|
|
#splitlw uv2, ay2, ayuv2
|
|
#select1lw uv3, ayuv3
|
|
#x2 avgub uv2, uv2, uv3
|
|
#mergewl ayuv2, ay2, uv2
|
|
#mergelq d, ayuv1, ayuv2
|
|
|
|
.function video_orc_chroma_down_v2_u8
|
|
.source 4 s1 guint8
|
|
.source 4 s2 guint8
|
|
.dest 4 d guint8
|
|
.temp 2 ay1
|
|
.temp 2 uv1
|
|
.temp 2 uv2
|
|
|
|
splitlw uv1, ay1, s1
|
|
select1lw uv2, s2
|
|
x2 avgub uv1, uv1, uv2
|
|
mergewl d, ay1, uv1
|
|
|
|
.function video_orc_chroma_up_v2_u8
|
|
.source 4 s1 guint8
|
|
.source 4 s2 guint8
|
|
.dest 4 d1 guint8
|
|
.dest 4 d2 guint8
|
|
.temp 2 ay1
|
|
.temp 2 ay2
|
|
.temp 2 uv1
|
|
.temp 2 uv2
|
|
.temp 4 uuvv1
|
|
.temp 4 uuvv2
|
|
.temp 4 uuvv3
|
|
|
|
splitlw uv1, ay1, s1
|
|
splitlw uv2, ay2, s2
|
|
x2 convubw uuvv1, uv1
|
|
x2 convubw uuvv2, uv2
|
|
|
|
x2 mullw uuvv3, uuvv1, 3
|
|
x2 addw uuvv3, uuvv3, uuvv2
|
|
x2 addw uuvv3, uuvv3, 2
|
|
x2 shruw uuvv3, uuvv3, 2
|
|
x2 convsuswb uv1, uuvv3
|
|
mergewl d1, ay1, uv1
|
|
|
|
x2 mullw uuvv3, uuvv2, 3
|
|
x2 addw uuvv3, uuvv3, uuvv1
|
|
x2 addw uuvv3, uuvv3, 2
|
|
x2 shruw uuvv3, uuvv3, 2
|
|
x2 convsuswb uv2, uuvv3
|
|
mergewl d2, ay2, uv2
|
|
|
|
.function video_orc_chroma_up_v2_u16
|
|
.source 8 s1 guint16
|
|
.source 8 s2 guint16
|
|
.dest 8 d1 guint16
|
|
.dest 8 d2 guint16
|
|
.temp 4 ay1
|
|
.temp 4 ay2
|
|
.temp 4 uv1
|
|
.temp 4 uv2
|
|
.temp 8 uuvv1
|
|
.temp 8 uuvv2
|
|
.temp 8 uuvv3
|
|
|
|
splitql uv1, ay1, s1
|
|
splitql uv2, ay2, s2
|
|
x2 convuwl uuvv1, uv1
|
|
x2 convuwl uuvv2, uv2
|
|
|
|
x2 mulll uuvv3, uuvv1, 3
|
|
x2 addl uuvv3, uuvv3, uuvv2
|
|
x2 addl uuvv3, uuvv3, 2
|
|
x2 shrul uuvv3, uuvv3, 2
|
|
x2 convsuslw uv1, uuvv3
|
|
mergelq d1, ay1, uv1
|
|
|
|
x2 mulll uuvv3, uuvv2, 3
|
|
x2 addl uuvv3, uuvv3, uuvv1
|
|
x2 addl uuvv3, uuvv3, 2
|
|
x2 shrul uuvv3, uuvv3, 2
|
|
x2 convsuslw uv2, uuvv3
|
|
mergelq d2, ay2, uv2
|
|
|
|
.function video_orc_chroma_down_v2_u16
|
|
.source 8 s1 guint16
|
|
.source 8 s2 guint16
|
|
.dest 8 d guint16
|
|
.temp 4 ay1
|
|
.temp 4 uv1
|
|
.temp 4 uv2
|
|
|
|
splitql uv1, ay1, s1
|
|
select1ql uv2, s2
|
|
x2 avguw uv1, uv1, uv2
|
|
mergelq d, ay1, uv1
|
|
|
|
|
|
.function video_orc_chroma_down_v4_u8
|
|
.source 4 s1 guint8
|
|
.source 4 s2 guint8
|
|
.source 4 s3 guint8
|
|
.source 4 s4 guint8
|
|
.dest 4 d guint8
|
|
.temp 2 ay1
|
|
.temp 2 uv1
|
|
.temp 4 uuvv1
|
|
.temp 4 uuvv2
|
|
.temp 4 uuvv3
|
|
|
|
splitlw uv1, ay1, s1
|
|
x2 convubw uuvv1, uv1
|
|
select1lw uv1, s4
|
|
x2 convubw uuvv2, uv1
|
|
x2 addw uuvv3, uuvv1, uuvv2
|
|
select1lw uv1, s2
|
|
x2 convubw uuvv1, uv1
|
|
select1lw uv1, s3
|
|
x2 convubw uuvv2, uv1
|
|
x2 addw uuvv1, uuvv1, uuvv2
|
|
x2 shlw uuvv2, uuvv1, 1
|
|
x2 addw uuvv1, uuvv1, uuvv2
|
|
x2 addw uuvv3, uuvv3, uuvv1
|
|
x2 addw uuvv3, uuvv3, 4
|
|
x2 shruw uuvv3, uuvv3, 3
|
|
x2 convsuswb uv1, uuvv3
|
|
mergewl d, ay1, uv1
|
|
|
|
.function video_orc_chroma_down_v4_u16
|
|
.source 8 s1 guint16
|
|
.source 8 s2 guint16
|
|
.source 8 s3 guint16
|
|
.source 8 s4 guint16
|
|
.dest 8 d guint16
|
|
.temp 4 ay1
|
|
.temp 4 uv1
|
|
.temp 8 uuvv1
|
|
.temp 8 uuvv2
|
|
.temp 8 uuvv3
|
|
|
|
splitql uv1, ay1, s1
|
|
x2 convuwl uuvv1, uv1
|
|
select1ql uv1, s4
|
|
x2 convuwl uuvv2, uv1
|
|
x2 addl uuvv3, uuvv1, uuvv2
|
|
select1ql uv1, s2
|
|
x2 convuwl uuvv1, uv1
|
|
select1ql uv1, s3
|
|
x2 convuwl uuvv2, uv1
|
|
x2 addl uuvv1, uuvv1, uuvv2
|
|
x2 shll uuvv2, uuvv1, 1
|
|
x2 addl uuvv1, uuvv1, uuvv2
|
|
x2 addl uuvv3, uuvv3, uuvv1
|
|
x2 addl uuvv3, uuvv3, 4
|
|
x2 shrul uuvv3, uuvv3, 3
|
|
x2 convsuslw uv1, uuvv3
|
|
mergelq d, ay1, uv1
|
|
|
|
.function video_orc_dither_none_4u8_mask
|
|
.dest 4 p guint8
|
|
.param 4 masks
|
|
.temp 4 m
|
|
|
|
loadpl m, masks
|
|
x4 andnb p, m, p
|
|
|
|
.function video_orc_dither_none_4u16_mask
|
|
.dest 8 p guint16
|
|
.longparam 8 masks
|
|
.temp 8 m
|
|
|
|
loadpq m, masks
|
|
x4 andnw p, m, p
|
|
|
|
.function video_orc_dither_verterr_4u8_mask
|
|
.dest 4 p guint8
|
|
.dest 8 e guint16
|
|
.longparam 8 masks
|
|
.temp 8 m
|
|
.temp 8 t1
|
|
|
|
loadpq m, masks
|
|
x4 convubw t1, p
|
|
x4 addw t1, e, t1
|
|
x4 andw e, m, t1
|
|
x4 andnw t1, m, t1
|
|
x4 convsuswb p, t1
|
|
|
|
.function video_orc_dither_fs_muladd_u8
|
|
.dest 2 e guint16
|
|
.temp 2 t1
|
|
.temp 2 t2
|
|
|
|
loadoffw t2, e, 4
|
|
mullw t2, t2, 5
|
|
addw t1, t2, e
|
|
loadoffw t2, e, 8
|
|
mullw t2, t2, 3
|
|
addw e, t1, t2
|
|
|
|
# due to error propagation we should disable
|
|
# loop_shift for this function and only work on
|
|
# 4 pixels at a time.
|
|
#.function video_orc_dither_fs_add_4u8_mask
|
|
#.flags no-unroll
|
|
#.dest 4 d guint8
|
|
#.dest 8 e1 guint16
|
|
#.dest 8 e2 guint16
|
|
#.longparam 8 masks
|
|
#.temp 8 p
|
|
#.temp 8 t1
|
|
#.temp 8 t2
|
|
#
|
|
#x4 mullw t1, e1, 7
|
|
#x4 addw t1, t1, e2
|
|
#x4 shruw t1, t1, 4
|
|
#x4 convubw p, d
|
|
#x4 addw t1, t1, p
|
|
#x4 andnw p, masks, t1
|
|
#x4 convsuswb d, p
|
|
#x4 andw e2, t1, masks
|
|
|
|
.function video_orc_dither_ordered_u8
|
|
.source 1 e guint8
|
|
.dest 1 d guint8
|
|
|
|
addusb d, d, e
|
|
|
|
.function video_orc_dither_ordered_4u8_mask
|
|
.source 8 e1 guint16
|
|
.dest 4 d guint8
|
|
.longparam 8 masks
|
|
.temp 8 p
|
|
.temp 8 m
|
|
|
|
loadpq m, masks
|
|
x4 convubw p, d
|
|
x4 addw p, p, e1
|
|
x4 andnw p, m, p
|
|
x4 convsuswb d, p
|
|
|
|
.function video_orc_dither_ordered_4u16_mask
|
|
.source 8 e1 guint16
|
|
.dest 8 d guint16
|
|
.longparam 8 masks
|
|
.temp 8 p
|
|
.temp 8 m
|
|
|
|
loadpq m, masks
|
|
x4 addusw p, d, e1
|
|
x4 andnw d, m, p
|
|
|
|
.function video_orc_convert_UYVY_GRAY8
|
|
.flags 2d
|
|
.dest 1 d guint8
|
|
.source 2 s
|
|
.temp 1 t1
|
|
.temp 2 t2
|
|
|
|
loadw t2, s
|
|
convhwb t1, t2
|
|
storeb d, t1
|