| .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 |
| .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 |
| 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 |
| |
| convssswb r, wr |
| convssswb g, wg |
| convssswb b, wb |
| |
| mergebw wr, a, r |
| mergebw wb, g, b |
| mergewl x, wr, wb |
| x4 addb argb, x, c128 |
| |
| .function videomixer_video_convert_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 |
| 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 |
| |
| convssswb r, wr |
| convssswb g, wg |
| convssswb b, wb |
| |
| mergebw wb, b, g |
| mergebw wr, r, a |
| mergewl x, wb, wr |
| x4 addb bgra, x, c128 |
| |
| |
| .function videomixer_video_convert_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 |
| 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 |
| |
| convssswb r, wr |
| convssswb g, wg |
| convssswb b, wb |
| |
| mergebw wb, a, b |
| mergebw wr, g, r |
| mergewl x, wb, wr |
| x4 addb argb, x, c128 |
| |
| .function videomixer_video_convert_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 |
| 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 |
| |
| convssswb r, wr |
| convssswb g, wg |
| convssswb b, wb |
| |
| mergebw wr, r, g |
| mergebw wb, b, a |
| mergewl x, wr, wb |
| x4 addb argb, x, c128 |
| |
| |
| |
| .function videomixer_video_convert_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 |
| |
| 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 |
| 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 |
| |
| convssswb r, wr |
| convssswb g, wg |
| convssswb b, wb |
| |
| mergebw wb, b, g |
| mergebw wr, r, 127 |
| mergewl x, wb, wr |
| x4 addb argb, x, c128 |
| |