mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-18 12:15:19 +00:00
video: add some internal helper functions for image blending
This could be improved if we decide we don't need it to be this generic/flexible.
This commit is contained in:
parent
b0f4085f22
commit
80054a3b1e
5 changed files with 2028 additions and 10 deletions
1
gst-libs/gst/video/.gitignore
vendored
1
gst-libs/gst/video/.gitignore
vendored
|
@ -1,2 +1,3 @@
|
||||||
video-enumtypes.c
|
video-enumtypes.c
|
||||||
video-enumtypes.h
|
video-enumtypes.h
|
||||||
|
videoblendorc.h
|
||||||
|
|
|
@ -4,26 +4,45 @@ glib_enum_define = GST_VIDEO
|
||||||
glib_gen_prefix = gst_video
|
glib_gen_prefix = gst_video
|
||||||
glib_gen_basename = video
|
glib_gen_basename = video
|
||||||
|
|
||||||
|
lib_LTLIBRARIES = libgstvideo-@GST_MAJORMINOR@.la
|
||||||
|
|
||||||
|
ORC_SOURCE=videoblendorc
|
||||||
|
include $(top_srcdir)/common/orc.mak
|
||||||
|
|
||||||
built_sources = video-enumtypes.c
|
built_sources = video-enumtypes.c
|
||||||
built_headers = video-enumtypes.h
|
built_headers = video-enumtypes.h
|
||||||
BUILT_SOURCES = $(built_sources) $(built_headers)
|
|
||||||
|
|
||||||
lib_LTLIBRARIES = libgstvideo-@GST_MAJORMINOR@.la
|
# orc.mak sets BUILT_SOURCES as well
|
||||||
|
BUILT_SOURCES += $(built_sources) $(built_headers)
|
||||||
|
|
||||||
CLEANFILES = $(BUILT_SOURCES)
|
CLEANFILES = $(BUILT_SOURCES)
|
||||||
|
|
||||||
|
# video-blend.h should be disted but not installed into the includedir
|
||||||
libgstvideo_@GST_MAJORMINOR@_la_SOURCES = \
|
libgstvideo_@GST_MAJORMINOR@_la_SOURCES = \
|
||||||
video.c gstvideosink.c gstvideofilter.c convertframe.c
|
video.c gstvideosink.c gstvideofilter.c convertframe.c \
|
||||||
nodist_libgstvideo_@GST_MAJORMINOR@_la_SOURCES = $(BUILT_SOURCES)
|
video-blend.c video-blend.h
|
||||||
|
nodist_libgstvideo_@GST_MAJORMINOR@_la_SOURCES = \
|
||||||
|
$(built_sources) $(built_headers) \
|
||||||
|
$(ORC_NODIST_SOURCES)
|
||||||
libgstvideo_@GST_MAJORMINOR@includedir = $(includedir)/gstreamer-@GST_MAJORMINOR@/gst/video
|
libgstvideo_@GST_MAJORMINOR@includedir = $(includedir)/gstreamer-@GST_MAJORMINOR@/gst/video
|
||||||
libgstvideo_@GST_MAJORMINOR@include_HEADERS = \
|
libgstvideo_@GST_MAJORMINOR@include_HEADERS = \
|
||||||
video.h gstvideosink.h gstvideofilter.h
|
video.h gstvideosink.h gstvideofilter.h
|
||||||
nodist_libgstvideo_@GST_MAJORMINOR@include_HEADERS = $(built_headers)
|
nodist_libgstvideo_@GST_MAJORMINOR@include_HEADERS = $(built_headers)
|
||||||
|
|
||||||
libgstvideo_@GST_MAJORMINOR@_la_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(GST_CFLAGS)
|
libgstvideo_@GST_MAJORMINOR@_la_CFLAGS = \
|
||||||
libgstvideo_@GST_MAJORMINOR@_la_LIBADD = $(GST_BASE_LIBS) $(GST_LIBS)
|
$(GST_PLUGINS_BASE_CFLAGS)\
|
||||||
libgstvideo_@GST_MAJORMINOR@_la_LDFLAGS = $(GST_LIB_LDFLAGS) $(GST_ALL_LDFLAGS) $(GST_LT_LDFLAGS)
|
$(GST_BASE_CFLAGS) \
|
||||||
|
$(GST_CFLAGS) \
|
||||||
|
$(ORC_CFLAGS)
|
||||||
|
|
||||||
|
libgstvideo_@GST_MAJORMINOR@_la_LIBADD = $(GST_BASE_LIBS) \
|
||||||
|
$(GST_LIBS) \
|
||||||
|
$(ORC_LIBS)
|
||||||
|
|
||||||
|
libgstvideo_@GST_MAJORMINOR@_la_LDFLAGS = \
|
||||||
|
$(GST_LIB_LDFLAGS) \
|
||||||
|
$(GST_ALL_LDFLAGS) \
|
||||||
|
$(GST_LT_LDFLAGS)
|
||||||
|
|
||||||
include $(top_srcdir)/common/gst-glib-gen.mak
|
include $(top_srcdir)/common/gst-glib-gen.mak
|
||||||
|
|
||||||
|
@ -31,9 +50,9 @@ if HAVE_INTROSPECTION
|
||||||
BUILT_GIRSOURCES = GstVideo-@GST_MAJORMINOR@.gir
|
BUILT_GIRSOURCES = GstVideo-@GST_MAJORMINOR@.gir
|
||||||
|
|
||||||
gir_headers=$(patsubst %,$(srcdir)/%, $(libgstvideo_@GST_MAJORMINOR@include_HEADERS))
|
gir_headers=$(patsubst %,$(srcdir)/%, $(libgstvideo_@GST_MAJORMINOR@include_HEADERS))
|
||||||
gir_headers+=$(patsubst %,$(builddir)/%, $(nodist_libgstvideo_@GST_MAJORMINOR@include_HEADERS))
|
gir_headers+=$(patsubst %,$(builddir)/%, $(built_headers))
|
||||||
gir_sources=$(patsubst %,$(srcdir)/%, $(libgstvideo_@GST_MAJORMINOR@_la_SOURCES))
|
gir_sources=$(patsubst %,$(srcdir)/%, $(libgstvideo_@GST_MAJORMINOR@_la_SOURCES))
|
||||||
gir_sources+=$(patsubst %,$(builddir)/%, $(nodist_libgstvideo_@GST_MAJORMINOR@_la_SOURCES))
|
gir_sources+=$(patsubst %,$(builddir)/%, $(built_sources))
|
||||||
gir_cincludes=$(patsubst %,--c-include='gst/video/%',$(libgstvideo_@GST_MAJORMINOR@include_HEADERS))
|
gir_cincludes=$(patsubst %,--c-include='gst/video/%',$(libgstvideo_@GST_MAJORMINOR@include_HEADERS))
|
||||||
gir_cincludes+=$(patsubst %,--c-include='gst/video/%',$(nodist_libgstvideo_@GST_MAJORMINOR@include_HEADERS))
|
gir_cincludes+=$(patsubst %,--c-include='gst/video/%',$(nodist_libgstvideo_@GST_MAJORMINOR@include_HEADERS))
|
||||||
|
|
||||||
|
|
1423
gst-libs/gst/video/video-blend.c
Normal file
1423
gst-libs/gst/video/video-blend.c
Normal file
File diff suppressed because it is too large
Load diff
77
gst-libs/gst/video/video-blend.h
Normal file
77
gst-libs/gst/video/video-blend.h
Normal file
|
@ -0,0 +1,77 @@
|
||||||
|
/* Gstreamer video blending utility functions
|
||||||
|
*
|
||||||
|
* Copyright (C) <2011> Intel Corporation
|
||||||
|
* Copyright (C) <2011> Collabora Ltd.
|
||||||
|
* Copyright (C) <2011> Thibault Saunier <thibault.saunier@collabora.com>
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Library General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Library General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Library General Public
|
||||||
|
* License along with this library; if not, write to the
|
||||||
|
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
|
* Boston, MA 02111-1307, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef __GST_VIDEO_BLEND__
|
||||||
|
#define __GST_VIDEO_BLEND__
|
||||||
|
|
||||||
|
#include <gst/gst.h>
|
||||||
|
#include <gst/video/video.h>
|
||||||
|
|
||||||
|
#define MAX_VIDEO_PLANES 4
|
||||||
|
|
||||||
|
typedef struct _GstBlendVideoFormatInfo GstBlendVideoFormatInfo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* GstBlendVideoFormatInfo:
|
||||||
|
* @fmt: The #GstVideoFormat describing the video format
|
||||||
|
* @width: The width of the video
|
||||||
|
* @height: The height of the video
|
||||||
|
* @pixels: The buffer containing the pixels of the video
|
||||||
|
* @size: The size in byte of @pixels
|
||||||
|
* @offset: The offsets of the different component of the video
|
||||||
|
* @stride: The stride of the different component of the video
|
||||||
|
*
|
||||||
|
* Information describing image properties containing necessary
|
||||||
|
* fields to do video blending.
|
||||||
|
*/
|
||||||
|
struct _GstBlendVideoFormatInfo
|
||||||
|
{
|
||||||
|
GstVideoFormat fmt;
|
||||||
|
|
||||||
|
gint width;
|
||||||
|
gint height;
|
||||||
|
|
||||||
|
gint dest_width;
|
||||||
|
gint dest_height;
|
||||||
|
|
||||||
|
guint8 * pixels;
|
||||||
|
gsize size;
|
||||||
|
|
||||||
|
/* YUV components: Y=0, U=1, V=2, A=3
|
||||||
|
* RGB components: R=0, G=1, B=2, A=3 */
|
||||||
|
gint offset[MAX_VIDEO_PLANES];
|
||||||
|
gint stride[MAX_VIDEO_PLANES];
|
||||||
|
};
|
||||||
|
|
||||||
|
void video_blend_format_info_init (GstBlendVideoFormatInfo * info,
|
||||||
|
guint8 *pixels, guint height,
|
||||||
|
guint width, GstVideoFormat fmt);
|
||||||
|
|
||||||
|
void video_blend_scale_linear_RGBA (GstBlendVideoFormatInfo * src,
|
||||||
|
gint dest_height, gint dest_width);
|
||||||
|
|
||||||
|
gboolean video_blend (GstBlendVideoFormatInfo * dest,
|
||||||
|
GstBlendVideoFormatInfo * src,
|
||||||
|
guint x, guint y);
|
||||||
|
|
||||||
|
#endif
|
498
gst-libs/gst/video/videoblendorc.orc
Normal file
498
gst-libs/gst/video/videoblendorc.orc
Normal file
|
@ -0,0 +1,498 @@
|
||||||
|
.function 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 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 cogorc_getline_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 cogorc_putline_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
|
||||||
|
splitwb t1, t2, uu
|
||||||
|
avgub u, t1, t2
|
||||||
|
splitwb t1, t2, vv
|
||||||
|
avgub v, t1, t2
|
||||||
|
|
||||||
|
.function cogorc_getline_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 cogorc_putline_YUY2
|
||||||
|
.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 cogorc_putline_UYVY
|
||||||
|
.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 cogorc_getline_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 cogorc_getline_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 cogorc_getline_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 cogorc_putline_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 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 cogorc_getline_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 cogorc_putline_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 cogorc_getline_Y800
|
||||||
|
.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 cogorc_putline_Y800
|
||||||
|
.dest 1 y guint8
|
||||||
|
.source 4 ayuv guint8
|
||||||
|
.temp 2 ay
|
||||||
|
|
||||||
|
select0lw ay, ayuv
|
||||||
|
select1wb y, ay
|
||||||
|
|
||||||
|
|
||||||
|
.function cogorc_putline_Y16
|
||||||
|
.dest 2 y guint8
|
||||||
|
.source 4 ayuv guint8
|
||||||
|
.temp 2 ay
|
||||||
|
.temp 1 yb
|
||||||
|
|
||||||
|
select0lw ay, ayuv
|
||||||
|
select1wb yb, ay
|
||||||
|
convubw ay, yb
|
||||||
|
shlw y, ay, 8
|
||||||
|
|
||||||
|
|
||||||
|
.function cogorc_getline_Y16
|
||||||
|
.dest 4 ayuv guint8
|
||||||
|
.source 2 y guint8
|
||||||
|
.const 1 c255 255
|
||||||
|
.const 2 c0x8080 0x8080
|
||||||
|
.temp 2 ay
|
||||||
|
.temp 1 yb
|
||||||
|
|
||||||
|
convhwb yb, y
|
||||||
|
mergebw ay, c255, yb
|
||||||
|
mergewl ayuv, ay, c0x8080
|
||||||
|
|
||||||
|
.function cogorc_getline_BGRA
|
||||||
|
.dest 4 argb guint8
|
||||||
|
.source 4 bgra guint8
|
||||||
|
|
||||||
|
swapl argb, bgra
|
||||||
|
|
||||||
|
.function cogorc_putline_BGRA
|
||||||
|
.dest 4 bgra guint8
|
||||||
|
.source 4 argb guint8
|
||||||
|
|
||||||
|
swapl bgra, argb
|
||||||
|
|
||||||
|
.function cogorc_putline_RGBA
|
||||||
|
.dest 4 rgba guint8
|
||||||
|
.source 4 argb guint8
|
||||||
|
.temp 1 a
|
||||||
|
.temp 1 r
|
||||||
|
.temp 1 g
|
||||||
|
.temp 1 b
|
||||||
|
.temp 2 rg
|
||||||
|
.temp 2 ba
|
||||||
|
.temp 2 ar
|
||||||
|
.temp 2 gb
|
||||||
|
|
||||||
|
splitlw gb, ar, argb
|
||||||
|
splitwb b, g, gb
|
||||||
|
splitwb r, a, ar
|
||||||
|
mergebw ba, b, a
|
||||||
|
mergebw rg, r, g
|
||||||
|
mergewl rgba, rg, ba
|
||||||
|
|
||||||
|
.function cogorc_getline_RGBA
|
||||||
|
.dest 4 argb guint8
|
||||||
|
.source 4 rgba guint8
|
||||||
|
.temp 1 a
|
||||||
|
.temp 1 r
|
||||||
|
.temp 1 g
|
||||||
|
.temp 1 b
|
||||||
|
.temp 2 rg
|
||||||
|
.temp 2 ba
|
||||||
|
.temp 2 ar
|
||||||
|
.temp 2 gb
|
||||||
|
|
||||||
|
splitlw ba, rg, rgba
|
||||||
|
splitwb g, r, rg
|
||||||
|
splitwb a, b, ba
|
||||||
|
mergebw ar, a, r
|
||||||
|
mergebw gb, g, b
|
||||||
|
mergewl argb, ar, gb
|
||||||
|
|
||||||
|
|
||||||
|
.function cogorc_getline_ABGR
|
||||||
|
.dest 4 argb guint8
|
||||||
|
.source 4 abgr guint8
|
||||||
|
.temp 1 a
|
||||||
|
.temp 1 r
|
||||||
|
.temp 1 g
|
||||||
|
.temp 1 b
|
||||||
|
.temp 2 gr
|
||||||
|
.temp 2 ab
|
||||||
|
.temp 2 ar
|
||||||
|
.temp 2 gb
|
||||||
|
|
||||||
|
splitlw gr, ab, abgr
|
||||||
|
splitwb r, g, gr
|
||||||
|
splitwb b, a, ab
|
||||||
|
mergebw ar, a, r
|
||||||
|
mergebw gb, g, b
|
||||||
|
mergewl argb, ar, gb
|
||||||
|
|
||||||
|
|
||||||
|
.function cogorc_putline_ABGR
|
||||||
|
.dest 4 abgr guint8
|
||||||
|
.source 4 argb guint8
|
||||||
|
.temp 1 a
|
||||||
|
.temp 1 r
|
||||||
|
.temp 1 g
|
||||||
|
.temp 1 b
|
||||||
|
.temp 2 gr
|
||||||
|
.temp 2 ab
|
||||||
|
.temp 2 ar
|
||||||
|
.temp 2 gb
|
||||||
|
|
||||||
|
splitlw gb, ar, argb
|
||||||
|
splitwb b, g, gb
|
||||||
|
splitwb r, a, ar
|
||||||
|
mergebw ab, a, b
|
||||||
|
mergebw gr, g, r
|
||||||
|
mergewl abgr, ab, gr
|
||||||
|
|
||||||
|
.function cogorc_getline_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 cogorc_putline_NV12
|
||||||
|
.dest 2 y guint8
|
||||||
|
.dest 2 uv guint8
|
||||||
|
.source 8 ayuv guint8
|
||||||
|
.temp 4 ay
|
||||||
|
.temp 4 uvuv
|
||||||
|
.temp 2 uv1
|
||||||
|
.temp 2 uv2
|
||||||
|
|
||||||
|
x2 splitlw uvuv, ay, ayuv
|
||||||
|
x2 select1wb y, ay
|
||||||
|
splitlw uv1, uv2, uvuv
|
||||||
|
x2 avgub uv, uv1, uv2
|
||||||
|
|
||||||
|
.function cogorc_getline_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 cogorc_putline_NV21
|
||||||
|
.dest 2 y guint8
|
||||||
|
.dest 2 vu guint8
|
||||||
|
.source 8 ayuv guint8
|
||||||
|
.temp 4 ay
|
||||||
|
.temp 4 uvuv
|
||||||
|
.temp 2 uv1
|
||||||
|
.temp 2 uv2
|
||||||
|
.temp 2 uv
|
||||||
|
|
||||||
|
x2 splitlw uvuv, ay, ayuv
|
||||||
|
x2 select1wb y, ay
|
||||||
|
splitlw uv1, uv2, uvuv
|
||||||
|
x2 avgub uv, uv1, uv2
|
||||||
|
swapw vu, uv
|
||||||
|
|
||||||
|
|
||||||
|
.function cogorc_getline_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 cogorc_putline_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
|
||||||
|
.temp 1 t1
|
||||||
|
.temp 1 t2
|
||||||
|
|
||||||
|
x2 splitlw uv, ay, ayuv
|
||||||
|
x2 select1wb y, ay
|
||||||
|
x2 select0wb a, ay
|
||||||
|
x2 splitwb vv, uu, uv
|
||||||
|
splitwb t1, t2, uu
|
||||||
|
avgub u, t1, t2
|
||||||
|
splitwb t1, t2, vv
|
||||||
|
avgub v, t1, t2
|
||||||
|
|
||||||
|
.function orc_resample_bilinear_u32
|
||||||
|
.dest 4 d1 guint8
|
||||||
|
.source 4 s1 guint8
|
||||||
|
.param 4 p1
|
||||||
|
.param 4 p2
|
||||||
|
|
||||||
|
ldreslinl d1, s1, p1, p2
|
||||||
|
|
||||||
|
.function 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
|
Loading…
Reference in a new issue