2013-07-25 11:49:57 +00:00
|
|
|
.function video_mixer_orc_splat_u32
|
|
|
|
.dest 4 d1 guint32
|
|
|
|
.param 4 p1 guint32
|
|
|
|
|
|
|
|
copyl d1, p1
|
|
|
|
|
|
|
|
.function video_mixer_orc_memcpy_u32
|
|
|
|
.dest 4 d1 guint32
|
|
|
|
.source 4 s1 guint32
|
|
|
|
|
|
|
|
copyl d1, s1
|
|
|
|
|
|
|
|
.function video_mixer_orc_blend_u8
|
|
|
|
.flags 2d
|
|
|
|
.dest 1 d1 guint8
|
|
|
|
.source 1 s1 guint8
|
|
|
|
.param 2 p1
|
|
|
|
.temp 2 t1
|
|
|
|
.temp 2 t2
|
|
|
|
.const 1 c1 8
|
|
|
|
|
|
|
|
convubw t1, d1
|
|
|
|
convubw t2, s1
|
|
|
|
subw t2, t2, t1
|
|
|
|
mullw t2, t2, p1
|
|
|
|
shlw t1, t1, c1
|
|
|
|
addw t2, t1, t2
|
|
|
|
shruw t2, t2, c1
|
|
|
|
convsuswb d1, t2
|
|
|
|
|
|
|
|
|
|
|
|
.function video_mixer_orc_blend_argb
|
|
|
|
.flags 2d
|
|
|
|
.dest 4 d guint8
|
|
|
|
.source 4 s guint8
|
|
|
|
.param 2 alpha
|
|
|
|
.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 mullw a_wide, a_wide, alpha
|
|
|
|
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_mixer_orc_blend_bgra
|
|
|
|
.flags 2d
|
|
|
|
.dest 4 d guint8
|
|
|
|
.source 4 s guint8
|
|
|
|
.param 2 alpha
|
|
|
|
.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 mullw a_wide, a_wide, alpha
|
|
|
|
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_mixer_orc_overlay_argb
|
|
|
|
.flags 2d
|
|
|
|
.dest 4 d guint8
|
|
|
|
.source 4 s guint8
|
|
|
|
.param 2 alpha
|
|
|
|
.temp 4 t
|
|
|
|
.temp 2 tw
|
|
|
|
.temp 1 tb
|
|
|
|
.temp 8 alpha_s
|
|
|
|
.temp 8 alpha_s_inv
|
|
|
|
.temp 8 alpha_d
|
|
|
|
.temp 4 a
|
|
|
|
.temp 8 d_wide
|
|
|
|
.temp 8 s_wide
|
|
|
|
.const 4 xfs 0xffffffff
|
|
|
|
.const 4 a_alpha 0x000000ff
|
|
|
|
.const 4 a_alpha_inv 0xffffff00
|
|
|
|
|
|
|
|
# calc source alpha as alpha_s = alpha_s * alpha / 256
|
|
|
|
loadl t, s
|
|
|
|
convlw tw, t
|
|
|
|
convwb tb, tw
|
|
|
|
splatbl a, tb
|
|
|
|
x4 convubw alpha_s, a
|
|
|
|
x4 mullw alpha_s, alpha_s, alpha
|
|
|
|
x4 shruw alpha_s, alpha_s, 8
|
|
|
|
x4 convubw s_wide, t
|
|
|
|
x4 mullw s_wide, s_wide, alpha_s
|
|
|
|
|
|
|
|
# calc destination alpha as alpha_d = (255-alpha_s) * alpha_d / 255
|
|
|
|
loadpl a, xfs
|
|
|
|
x4 convubw alpha_s_inv, a
|
|
|
|
x4 subw alpha_s_inv, alpha_s_inv, alpha_s
|
|
|
|
loadl t, d
|
|
|
|
convlw tw, t
|
|
|
|
convwb tb, tw
|
|
|
|
splatbl a, tb
|
|
|
|
x4 convubw alpha_d, a
|
|
|
|
x4 mullw alpha_d, alpha_d, alpha_s_inv
|
|
|
|
x4 div255w alpha_d, alpha_d
|
|
|
|
x4 convubw d_wide, t
|
|
|
|
x4 mullw d_wide, d_wide, alpha_d
|
|
|
|
|
|
|
|
# calc final pixel as pix_d = pix_s*alpha_s + pix_d*alpha_d*(255-alpha_s)/255
|
|
|
|
x4 addw d_wide, d_wide, s_wide
|
|
|
|
|
|
|
|
# calc the final destination alpha_d = alpha_s + alpha_d * (255-alpha_s)/255
|
|
|
|
x4 addw alpha_d, alpha_d, alpha_s
|
|
|
|
|
|
|
|
# now normalize the pix_d by the final alpha to make it associative
|
|
|
|
x4 divluw, d_wide, d_wide, alpha_d
|
|
|
|
|
|
|
|
# pack the new alpha into the correct spot
|
|
|
|
x4 convwb t, d_wide
|
|
|
|
andl t, t, a_alpha_inv
|
|
|
|
x4 convwb a, alpha_d
|
|
|
|
andl a, a, a_alpha
|
|
|
|
orl t, t, a
|
|
|
|
storel d, t
|
|
|
|
|
|
|
|
.function video_mixer_orc_overlay_bgra
|
|
|
|
.flags 2d
|
|
|
|
.dest 4 d guint8
|
|
|
|
.source 4 s guint8
|
|
|
|
.param 2 alpha
|
|
|
|
.temp 4 t
|
|
|
|
.temp 4 t2
|
|
|
|
.temp 2 tw
|
|
|
|
.temp 1 tb
|
|
|
|
.temp 8 alpha_s
|
|
|
|
.temp 8 alpha_s_inv
|
|
|
|
.temp 8 alpha_d
|
|
|
|
.temp 4 a
|
|
|
|
.temp 8 d_wide
|
|
|
|
.temp 8 s_wide
|
|
|
|
.const 4 xfs 0xffffffff
|
|
|
|
.const 4 a_alpha 0xff000000
|
|
|
|
.const 4 a_alpha_inv 0x00ffffff
|
|
|
|
|
|
|
|
# calc source alpha as alpha_s = alpha_s * alpha / 256
|
|
|
|
loadl t, s
|
|
|
|
shrul t2, t, 24
|
|
|
|
convlw tw, t2
|
|
|
|
convwb tb, tw
|
|
|
|
splatbl a, tb
|
|
|
|
x4 convubw alpha_s, a
|
|
|
|
x4 mullw alpha_s, alpha_s, alpha
|
|
|
|
x4 shruw alpha_s, alpha_s, 8
|
|
|
|
x4 convubw s_wide, t
|
|
|
|
x4 mullw s_wide, s_wide, alpha_s
|
|
|
|
|
|
|
|
# calc destination alpha as alpha_d = (255-alpha_s) * alpha_d / 255
|
|
|
|
loadpl a, xfs
|
|
|
|
x4 convubw alpha_s_inv, a
|
|
|
|
x4 subw alpha_s_inv, alpha_s_inv, alpha_s
|
|
|
|
loadl t, d
|
|
|
|
shrul t2, t, 24
|
|
|
|
convlw tw, t2
|
|
|
|
convwb tb, tw
|
|
|
|
splatbl a, tb
|
|
|
|
x4 convubw alpha_d, a
|
|
|
|
x4 mullw alpha_d, alpha_d, alpha_s_inv
|
|
|
|
x4 div255w alpha_d, alpha_d
|
|
|
|
x4 convubw d_wide, t
|
|
|
|
x4 mullw d_wide, d_wide, alpha_d
|
|
|
|
|
|
|
|
# calc final pixel as pix_d = pix_s*alpha_s + pix_d*alpha_d*(255-alpha_s)/255
|
|
|
|
x4 addw d_wide, d_wide, s_wide
|
|
|
|
|
|
|
|
# calc the final destination alpha_d = alpha_s + alpha_d * (255-alpha_s)/255
|
|
|
|
x4 addw alpha_d, alpha_d, alpha_s
|
|
|
|
|
|
|
|
# now normalize the pix_d by the final alpha to make it associative
|
|
|
|
x4 divluw, d_wide, d_wide, alpha_d
|
|
|
|
|
|
|
|
# pack the new alpha into the correct spot
|
|
|
|
x4 convwb t, d_wide
|
|
|
|
andl t, t, a_alpha_inv
|
|
|
|
x4 convwb a, alpha_d
|
|
|
|
andl a, a, a_alpha
|
|
|
|
orl t, t, a
|
|
|
|
storel d, t
|
|
|
|
|
|
|
|
# Videoconvert logic, copy from videomixer_videoconvert.
|
|
|
|
# Remove that when videomixer_videoconvert lands in libgstvideo.
|
|
|
|
|
|
|
|
.function videomixer_video_convert_orc_memcpy_2d
|
|
|
|
.flags 2d
|
|
|
|
.dest 1 d1 guint8
|
|
|
|
.source 1 s1 guint8
|
|
|
|
|
|
|
|
copyb d1, s1
|
|
|
|
|
|
|
|
.function videomixer_video_convert_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 videomixer_video_convert_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 videomixer_video_convert_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
|
|
|
|
.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, y1
|
|
|
|
mergewl d1, ay, uv
|
|
|
|
mergebw ay, c255, y2
|
|
|
|
mergewl d2, ay, uv
|
|
|
|
|
|
|
|
|
|
|
|
.function videomixer_video_convert_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 videomixer_video_convert_orc_convert_UYVY_YUY2
|
|
|
|
.flags 2d
|
|
|
|
.dest 4 yuy2 guint8
|
|
|
|
.source 4 uyvy guint8
|
|
|
|
|
|
|
|
x2 swapw yuy2, uyvy
|
|
|
|
|
|
|
|
|
|
|
|
.function videomixer_video_convert_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 videomixer_video_convert_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 videomixer_video_convert_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 videomixer_video_convert_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 videomixer_video_convert_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 videomixer_video_convert_orc_planar_chroma_422_420
|
|
|
|
.flags 2d
|
|
|
|
.dest 1 d guint8
|
|
|
|
.source 1 s1 guint8
|
|
|
|
.source 1 s2 guint8
|
|
|
|
|
|
|
|
avgub d, s1, s2
|
|
|
|
|
|
|
|
|
|
|
|
.function videomixer_video_convert_orc_convert_YUY2_AYUV
|
|
|
|
.flags 2d
|
|
|
|
.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 videomixer_video_convert_orc_convert_UYVY_AYUV
|
|
|
|
.flags 2d
|
|
|
|
.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 videomixer_video_convert_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 videomixer_video_convert_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 videomixer_video_convert_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 videomixer_video_convert_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 videomixer_video_convert_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 videomixer_video_convert_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 videomixer_video_convert_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 videomixer_video_convert_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 videomixer_video_convert_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 videomixer_video_convert_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 videomixer_video_convert_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 videomixer_video_convert_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 videomixer_video_convert_orc_convert_Y42B_AYUV
|
|
|
|
.flags 2d
|
|
|
|
.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 videomixer_video_convert_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 videomixer_video_convert_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 videomixer_video_convert_orc_convert_Y444_AYUV
|
|
|
|
.flags 2d
|
|
|
|
.dest 4 ayuv guint8
|
|
|
|
.source 1 yy 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, yy
|
|
|
|
mergewl ayuv, ay, uv
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.function videomixer_video_convert_orc_convert_AYUV_ARGB
|
|
|
|
.flags 2d
|
|
|
|
.dest 4 argb guint8
|
|
|
|
.source 4 ayuv guint8
|
2014-06-28 14:48:13 +00:00
|
|
|
.param 2 p1
|
|
|
|
.param 2 p2
|
|
|
|
.param 2 p3
|
|
|
|
.param 2 p4
|
|
|
|
.param 2 p5
|
2013-07-25 11:49:57 +00:00
|
|
|
.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
|
2014-06-28 14:48:13 +00:00
|
|
|
.const 1 c128 128
|
2013-07-25 11:49:57 +00:00
|
|
|
|
2014-06-28 14:48:13 +00:00
|
|
|
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
|
|
|
|
addssw wr, wy, wr
|
|
|
|
|
|
|
|
mulhsw wb, wu, p3
|
|
|
|
addssw wb, wy, wb
|
|
|
|
|
|
|
|
mulhsw wg, wu, p4
|
|
|
|
addssw wg, wy, wg
|
|
|
|
mulhsw wy, wv, p5
|
|
|
|
addssw wg, wg, wy
|
2013-07-25 11:49:57 +00:00
|
|
|
|
|
|
|
convssswb r, wr
|
|
|
|
convssswb g, wg
|
|
|
|
convssswb b, wb
|
|
|
|
|
2014-06-28 14:48:13 +00:00
|
|
|
mergebw wr, a, r
|
|
|
|
mergebw wb, g, b
|
|
|
|
mergewl x, wr, wb
|
|
|
|
x4 addb argb, x, c128
|
2013-07-25 11:49:57 +00:00
|
|
|
|
|
|
|
.function videomixer_video_convert_orc_convert_AYUV_BGRA
|
|
|
|
.flags 2d
|
2014-06-28 14:48:13 +00:00
|
|
|
.dest 4 bgra guint8
|
2013-07-25 11:49:57 +00:00
|
|
|
.source 4 ayuv guint8
|
2014-06-28 14:48:13 +00:00
|
|
|
.param 2 p1
|
|
|
|
.param 2 p2
|
|
|
|
.param 2 p3
|
|
|
|
.param 2 p4
|
|
|
|
.param 2 p5
|
2013-07-25 11:49:57 +00:00
|
|
|
.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
|
2014-06-28 14:48:13 +00:00
|
|
|
.const 1 c128 128
|
2013-07-25 11:49:57 +00:00
|
|
|
|
2014-06-28 14:48:13 +00:00
|
|
|
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
|
|
|
|
addssw wr, wy, wr
|
|
|
|
|
|
|
|
mulhsw wb, wu, p3
|
|
|
|
addssw wb, wy, wb
|
|
|
|
|
|
|
|
mulhsw wg, wu, p4
|
|
|
|
addssw wg, wy, wg
|
|
|
|
mulhsw wy, wv, p5
|
|
|
|
addssw wg, wg, wy
|
2013-07-25 11:49:57 +00:00
|
|
|
|
|
|
|
convssswb r, wr
|
|
|
|
convssswb g, wg
|
|
|
|
convssswb b, wb
|
|
|
|
|
2014-06-28 14:48:13 +00:00
|
|
|
mergebw wb, b, g
|
|
|
|
mergebw wr, r, a
|
|
|
|
mergewl x, wb, wr
|
|
|
|
x4 addb bgra, x, c128
|
2013-07-25 11:49:57 +00:00
|
|
|
|
|
|
|
|
|
|
|
.function videomixer_video_convert_orc_convert_AYUV_ABGR
|
|
|
|
.flags 2d
|
|
|
|
.dest 4 argb guint8
|
|
|
|
.source 4 ayuv guint8
|
2014-06-28 14:48:13 +00:00
|
|
|
.param 2 p1
|
|
|
|
.param 2 p2
|
|
|
|
.param 2 p3
|
|
|
|
.param 2 p4
|
|
|
|
.param 2 p5
|
2013-07-25 11:49:57 +00:00
|
|
|
.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
|
2014-06-28 14:48:13 +00:00
|
|
|
.const 1 c128 128
|
2013-07-25 11:49:57 +00:00
|
|
|
|
2014-06-28 14:48:13 +00:00
|
|
|
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
|
|
|
|
addssw wr, wy, wr
|
|
|
|
|
|
|
|
mulhsw wb, wu, p3
|
|
|
|
addssw wb, wy, wb
|
|
|
|
|
|
|
|
mulhsw wg, wu, p4
|
|
|
|
addssw wg, wy, wg
|
|
|
|
mulhsw wy, wv, p5
|
|
|
|
addssw wg, wg, wy
|
2013-07-25 11:49:57 +00:00
|
|
|
|
|
|
|
convssswb r, wr
|
|
|
|
convssswb g, wg
|
|
|
|
convssswb b, wb
|
|
|
|
|
2014-06-28 14:48:13 +00:00
|
|
|
mergebw wb, a, b
|
|
|
|
mergebw wr, g, r
|
|
|
|
mergewl x, wb, wr
|
|
|
|
x4 addb argb, x, c128
|
2013-07-25 11:49:57 +00:00
|
|
|
|
|
|
|
.function videomixer_video_convert_orc_convert_AYUV_RGBA
|
|
|
|
.flags 2d
|
|
|
|
.dest 4 argb guint8
|
|
|
|
.source 4 ayuv guint8
|
2014-06-28 14:48:13 +00:00
|
|
|
.param 2 p1
|
|
|
|
.param 2 p2
|
|
|
|
.param 2 p3
|
|
|
|
.param 2 p4
|
|
|
|
.param 2 p5
|
2013-07-25 11:49:57 +00:00
|
|
|
.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
|
2014-06-28 14:48:13 +00:00
|
|
|
.const 1 c128 128
|
2013-07-25 11:49:57 +00:00
|
|
|
|
2014-06-28 14:48:13 +00:00
|
|
|
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
|
|
|
|
addssw wr, wy, wr
|
|
|
|
|
|
|
|
mulhsw wb, wu, p3
|
|
|
|
addssw wb, wy, wb
|
|
|
|
|
|
|
|
mulhsw wg, wu, p4
|
|
|
|
addssw wg, wy, wg
|
|
|
|
mulhsw wy, wv, p5
|
|
|
|
addssw wg, wg, wy
|
2013-07-25 11:49:57 +00:00
|
|
|
|
|
|
|
convssswb r, wr
|
|
|
|
convssswb g, wg
|
|
|
|
convssswb b, wb
|
|
|
|
|
2014-06-28 14:48:13 +00:00
|
|
|
mergebw wr, r, g
|
|
|
|
mergebw wb, b, a
|
|
|
|
mergewl x, wr, wb
|
|
|
|
x4 addb argb, x, c128
|
2013-07-25 11:49:57 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.function videomixer_video_convert_orc_convert_I420_BGRA
|
|
|
|
.dest 4 argb guint8
|
|
|
|
.source 1 y guint8
|
|
|
|
.source 1 u guint8
|
|
|
|
.source 1 v guint8
|
2014-06-28 14:48:13 +00:00
|
|
|
.param 2 p1
|
|
|
|
.param 2 p2
|
|
|
|
.param 2 p3
|
|
|
|
.param 2 p4
|
|
|
|
.param 2 p5
|
2013-07-25 11:49:57 +00:00
|
|
|
.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
|
|
|
|
|
2014-06-28 14:48:13 +00:00
|
|
|
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
|
2013-07-25 11:49:57 +00:00
|
|
|
|
2014-06-28 14:48:13 +00:00
|
|
|
mulhsw wy, wy, p1
|
2013-07-25 11:49:57 +00:00
|
|
|
|
2014-06-28 14:48:13 +00:00
|
|
|
mulhsw wr, wv, p2
|
|
|
|
addssw wr, wy, wr
|
2013-07-25 11:49:57 +00:00
|
|
|
|
2014-06-28 14:48:13 +00:00
|
|
|
mulhsw wb, wu, p3
|
|
|
|
addssw wb, wy, wb
|
2013-07-25 11:49:57 +00:00
|
|
|
|
2014-06-28 14:48:13 +00:00
|
|
|
mulhsw wg, wu, p4
|
|
|
|
addssw wg, wy, wg
|
|
|
|
mulhsw wy, wv, p5
|
|
|
|
addssw wg, wg, wy
|
2013-07-25 11:49:57 +00:00
|
|
|
|
|
|
|
convssswb r, wr
|
|
|
|
convssswb g, wg
|
|
|
|
convssswb b, wb
|
|
|
|
|
2014-06-28 14:48:13 +00:00
|
|
|
mergebw wb, b, g
|
|
|
|
mergebw wr, r, 127
|
|
|
|
mergewl x, wb, wr
|
2013-07-25 11:49:57 +00:00
|
|
|
x4 addb argb, x, c128
|
|
|
|
|