mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-25 01:30:38 +00:00
52cb42f4bb
Add C implementation for high bitdepth planar YUV formats Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1476>
144 lines
2 KiB
Text
144 lines
2 KiB
Text
|
|
.function deinterlace_line_vfir
|
|
.dest 1 d1 guint8
|
|
.source 1 s1 guint8
|
|
.source 1 s2 guint8
|
|
.source 1 s3 guint8
|
|
.source 1 s4 guint8
|
|
.source 1 s5 guint8
|
|
.temp 2 t1
|
|
.temp 2 t2
|
|
.temp 2 t3
|
|
|
|
convubw t1, s1
|
|
convubw t2, s5
|
|
addw t1, t1, t2
|
|
convubw t2, s2
|
|
convubw t3, s4
|
|
addw t2, t2, t3
|
|
shlw t2, t2, 2
|
|
convubw t3, s3
|
|
shlw t3, t3, 1
|
|
subw t2, t2, t1
|
|
addw t2, t2, t3
|
|
addw t2, t2, 4
|
|
shrsw t2, t2, 3
|
|
convsuswb d1, t2
|
|
|
|
|
|
.function deinterlace_line_vfir_16bits
|
|
.dest 2 d1 guint16
|
|
.source 2 s1 guint16
|
|
.source 2 s2 guint16
|
|
.source 2 s3 guint16
|
|
.source 2 s4 guint16
|
|
.source 2 s5 guint16
|
|
.temp 4 t1
|
|
.temp 4 t2
|
|
.temp 4 t3
|
|
|
|
convuwl t1, s1
|
|
convuwl t2, s5
|
|
addl t1, t1, t2
|
|
convuwl t2, s2
|
|
convuwl t3, s4
|
|
addl t2, t2, t3
|
|
shll t2, t2, 2
|
|
convuwl t3, s3
|
|
shll t3, t3, 1
|
|
subl t2, t2, t1
|
|
addl t2, t2, t3
|
|
addl t2, t2, 4
|
|
shrsl t2, t2, 3
|
|
convsuslw d1, t2
|
|
|
|
|
|
.function deinterlace_line_linear
|
|
.dest 1 d1 guint8
|
|
.source 1 s1 guint8
|
|
.source 1 s2 guint8
|
|
|
|
avgub d1, s1, s2
|
|
|
|
|
|
.function deinterlace_line_linear_16bits
|
|
.dest 2 d1 guint16
|
|
.source 2 s1 guint16
|
|
.source 2 s2 guint16
|
|
|
|
avguw d1, s1, s2
|
|
|
|
|
|
.function deinterlace_line_linear_blend
|
|
.dest 1 d1 guint8
|
|
.source 1 s1 guint8
|
|
.source 1 s2 guint8
|
|
.source 1 s3 guint8
|
|
.temp 2 t1
|
|
.temp 2 t2
|
|
.temp 2 t3
|
|
|
|
convubw t1, s1
|
|
convubw t2, s2
|
|
convubw t3, s3
|
|
addw t1, t1, t2
|
|
addw t3, t3, t3
|
|
addw t1, t1, t3
|
|
addw t1, t1, 2
|
|
shrsw t1, t1, 2
|
|
convsuswb d1, t1
|
|
|
|
|
|
.function deinterlace_line_greedy
|
|
.dest 1 d1
|
|
.source 1 m0
|
|
.source 1 t1
|
|
.source 1 b1
|
|
.source 1 m2
|
|
.param 1 max_comb
|
|
.temp 1 tm0
|
|
.temp 1 tm2
|
|
.temp 1 tb1
|
|
.temp 1 tt1
|
|
.temp 1 avg
|
|
.temp 1 l2_diff
|
|
.temp 1 lp2_diff
|
|
.temp 1 t2
|
|
.temp 1 t3
|
|
.temp 1 best
|
|
.temp 1 min
|
|
.temp 1 max
|
|
|
|
|
|
loadb tm0, m0
|
|
loadb tm2, m2
|
|
|
|
loadb tb1, b1
|
|
loadb tt1, t1
|
|
avgub avg, tt1, tb1
|
|
|
|
maxub t2, tm0, avg
|
|
minub t3, tm0, avg
|
|
subb l2_diff, t2, t3
|
|
|
|
maxub t2, tm2, avg
|
|
minub t3, tm2, avg
|
|
subb lp2_diff, t2, t3
|
|
|
|
xorb l2_diff, l2_diff, 0x80
|
|
xorb lp2_diff, lp2_diff, 0x80
|
|
cmpgtsb t3, l2_diff, lp2_diff
|
|
|
|
andb t2, tm2, t3
|
|
andnb t3, t3, tm0
|
|
orb best, t2, t3
|
|
|
|
maxub max, tt1, tb1
|
|
minub min, tt1, tb1
|
|
addusb max, max, max_comb
|
|
subusb min, min, max_comb
|
|
minub best, best, max
|
|
maxub d1, best, min
|
|
|
|
|
|
|