summaryrefslogtreecommitdiff
path: root/gst/bayer/gstbayerorc.orc
diff options
context:
space:
mode:
authorDavid Schleef <ds@schleef.org>2011-05-30 23:43:39 -0700
committerDavid Schleef <ds@schleef.org>2011-05-30 23:50:30 -0700
commitdb7fe611edcaf03ac9d86d3fb0d96c28c4859fd7 (patch)
treebe025306c0b8ee2a43abeb94f77c4eee674685ae /gst/bayer/gstbayerorc.orc
parentf0c75b06a7f3374338bbb643de057e4ea3080cc0 (diff)
downloadgstreamer-plugins-bad-db7fe611edcaf03ac9d86d3fb0d96c28c4859fd7.tar.gz
bayer2rgb: Convert to Orc
Seriously faster. Algorithm is nearly the same as bilinear, which given the speed of this code, should be considered the baseline of quality. Speed appears to be limited by memory bandwidth, so I didn't bother trying to make it any faster.
Diffstat (limited to 'gst/bayer/gstbayerorc.orc')
-rw-r--r--gst/bayer/gstbayerorc.orc252
1 files changed, 252 insertions, 0 deletions
diff --git a/gst/bayer/gstbayerorc.orc b/gst/bayer/gstbayerorc.orc
new file mode 100644
index 000000000..e57436b7f
--- /dev/null
+++ b/gst/bayer/gstbayerorc.orc
@@ -0,0 +1,252 @@
+
+
+.function gst_bayer_horiz_upsample_unaligned
+.dest 2 d0 guint8
+.dest 2 d1 guint8
+.source 2 s guint8
+.temp 2 t
+.temp 1 b
+.temp 1 c
+.temp 1 d
+.temp 1 e
+
+splitwb c, b, s
+loadoffw t, s, 1
+splitwb e, d, t
+avgub e, c, e
+mergebw d0, c, e
+avgub b, b, d
+mergebw d1, b, d
+
+
+.function gst_bayer_horiz_upsample
+.dest 2 d0 guint8
+.dest 2 d1 guint8
+.source 2 s guint8
+.temp 2 t
+.temp 1 a
+.temp 1 b
+.temp 1 c
+.temp 1 d
+.temp 1 e
+.temp 1 f
+
+loadoffw t, s, -1
+splitwb b, a, t
+splitwb d, c, s
+loadoffw t, s, 1
+splitwb f, e, t
+avgub e, c, e
+mergebw d0, c, e
+avgub b, b, d
+mergebw d1, b, d
+
+
+.function gst_bayer_merge_bg_bgra
+.dest 8 d guint8
+.source 2 g0 guint8
+.source 2 r0 guint8
+.source 2 b1 guint8
+.source 2 g1 guint8
+.source 2 g2 guint8
+.source 2 r2 guint8
+.temp 4 ra
+.temp 4 bg
+.temp 2 r
+.temp 2 g
+.temp 2 t
+
+x2 avgub r, r0, r2
+x2 avgub g, g0, g2
+copyw t, g1
+x2 avgub g, g, t
+andw g, g, 255
+andw t, t, 65280
+orw g, t, g
+x2 mergebw bg, b1, g
+x2 mergebw ra, r, 255
+x2 mergewl d, bg, ra
+
+
+.function gst_bayer_merge_gr_bgra
+.dest 8 d guint8
+.source 2 b0 guint8
+.source 2 g0 guint8
+.source 2 g1 guint8
+.source 2 r1 guint8
+.source 2 b2 guint8
+.source 2 g2 guint8
+.temp 4 ra
+.temp 4 bg
+.temp 2 b
+.temp 2 g
+.temp 2 t
+
+x2 avgub b, b0, b2
+x2 avgub g, g0, g2
+copyw t, g1
+x2 avgub g, g, t
+andw g, g, 65280
+andw t, t, 255
+orw g, t, g
+x2 mergebw bg, b, g
+x2 mergebw ra, r1, 255
+x2 mergewl d, bg, ra
+
+
+.function gst_bayer_merge_bg_abgr
+.dest 8 d guint8
+.source 2 g0 guint8
+.source 2 r0 guint8
+.source 2 b1 guint8
+.source 2 g1 guint8
+.source 2 g2 guint8
+.source 2 r2 guint8
+.temp 4 ab
+.temp 4 gr
+.temp 2 r
+.temp 2 g
+.temp 2 t
+
+x2 avgub r, r0, r2
+x2 avgub g, g0, g2
+copyw t, g1
+x2 avgub g, g, t
+andw g, g, 255
+andw t, t, 65280
+orw g, t, g
+x2 mergebw ab, 255, b1
+x2 mergebw gr, g, r
+x2 mergewl d, ab, gr
+
+
+.function gst_bayer_merge_gr_abgr
+.dest 8 d guint8
+.source 2 b0 guint8
+.source 2 g0 guint8
+.source 2 g1 guint8
+.source 2 r1 guint8
+.source 2 b2 guint8
+.source 2 g2 guint8
+.temp 4 ab
+.temp 4 gr
+.temp 2 b
+.temp 2 g
+.temp 2 t
+
+x2 avgub b, b0, b2
+x2 avgub g, g0, g2
+copyw t, g1
+x2 avgub g, g, t
+andw g, g, 65280
+andw t, t, 255
+orw g, t, g
+x2 mergebw ab, 255, b
+x2 mergebw gr, g, r1
+x2 mergewl d, ab, gr
+
+
+.function gst_bayer_merge_bg_rgba
+.dest 8 d guint8
+.source 2 g0 guint8
+.source 2 r0 guint8
+.source 2 b1 guint8
+.source 2 g1 guint8
+.source 2 g2 guint8
+.source 2 r2 guint8
+.temp 4 rg
+.temp 4 ba
+.temp 2 r
+.temp 2 g
+.temp 2 t
+
+x2 avgub r, r0, r2
+x2 avgub g, g0, g2
+copyw t, g1
+x2 avgub g, g, t
+andw g, g, 255
+andw t, t, 65280
+orw g, t, g
+x2 mergebw rg, r, g
+x2 mergebw ba, b1, 255
+x2 mergewl d, rg, ba
+
+
+.function gst_bayer_merge_gr_rgba
+.dest 8 d guint8
+.source 2 b0 guint8
+.source 2 g0 guint8
+.source 2 g1 guint8
+.source 2 r1 guint8
+.source 2 b2 guint8
+.source 2 g2 guint8
+.temp 4 rg
+.temp 4 ba
+.temp 2 b
+.temp 2 g
+.temp 2 t
+
+x2 avgub b, b0, b2
+x2 avgub g, g0, g2
+copyw t, g1
+x2 avgub g, g, t
+andw g, g, 65280
+andw t, t, 255
+orw g, t, g
+x2 mergebw rg, r1, g
+x2 mergebw ba, b, 255
+x2 mergewl d, rg, ba
+
+
+.function gst_bayer_merge_bg_argb
+.dest 8 d guint8
+.source 2 g0 guint8
+.source 2 r0 guint8
+.source 2 b1 guint8
+.source 2 g1 guint8
+.source 2 g2 guint8
+.source 2 r2 guint8
+.temp 4 ar
+.temp 4 gb
+.temp 2 r
+.temp 2 g
+.temp 2 t
+
+x2 avgub r, r0, r2
+x2 avgub g, g0, g2
+copyw t, g1
+x2 avgub g, g, t
+andw g, g, 255
+andw t, t, 65280
+orw g, t, g
+x2 mergebw ar, 255, r
+x2 mergebw gb, g, b1
+x2 mergewl d, ar, gb
+
+
+.function gst_bayer_merge_gr_argb
+.dest 8 d guint8
+.source 2 b0 guint8
+.source 2 g0 guint8
+.source 2 g1 guint8
+.source 2 r1 guint8
+.source 2 b2 guint8
+.source 2 g2 guint8
+.temp 4 ar
+.temp 4 gb
+.temp 2 b
+.temp 2 g
+.temp 2 t
+
+x2 avgub b, b0, b2
+x2 avgub g, g0, g2
+copyw t, g1
+x2 avgub g, g, t
+andw g, g, 65280
+andw t, t, 255
+orw g, t, g
+x2 mergebw ar, 255, r1
+x2 mergebw gb, g, b
+x2 mergewl d, ar, gb
+
+