Skip to content

Commit 7eb181b

Browse files
committed
add optional perspective transform
1 parent 808ce7a commit 7eb181b

File tree

2 files changed

+13
-3
lines changed

2 files changed

+13
-3
lines changed

gst_helpers.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ def connect_bus(msgtype, callback, *args):
123123
bus.connect(msgtype, callback, *args)
124124

125125
# test sources as stream placeholders
126-
def add_test_sources(frontdev="",surfdev="",fake=False,bgcol=0xFF00FF00,wave="ticks"):
126+
def add_test_sources(frontdev="",surfdev="",fake=False,bgcol=0xFF00FF00,wave="ticks",perspective=None):
127127

128128
if fake:
129129
frontsrc = "videotestsrc is-live=true pattern=smpte ! timeoverlay" if frontdev == "" else frontdev
@@ -136,6 +136,9 @@ def add_test_sources(frontdev="",surfdev="",fake=False,bgcol=0xFF00FF00,wave="ti
136136
surfsrc = "v4l2src do-timestamp=true device="+surfdev+" ! videorate ! videoconvert"
137137
audiosrc = "alsasrc do-timestamp=true" # "audiorate ! audioconvert"
138138

139+
# FIXME still a bit hackish, maybe solveable without double videoconvert?
140+
vc = None if perspective == None else new_element("videoconvert")
141+
139142
logging.debug(" Front Source: "+frontsrc)
140143
logging.debug("Surface Source: "+surfsrc)
141144
logging.debug(" Audio Source: "+audiosrc)
@@ -145,7 +148,7 @@ def add_test_sources(frontdev="",surfdev="",fake=False,bgcol=0xFF00FF00,wave="ti
145148
new_element("tee",{"allow-not-linked":True},"fronttestsource")
146149
])
147150

148-
add_and_link([ Gst.parse_bin_from_description( surfsrc, True ),
151+
add_and_link([ Gst.parse_bin_from_description( surfsrc, True ), perspective, vc, # <-- NOTE
149152
new_element("capsfilter",{"caps":Gst.Caps.from_string("video/x-raw,format=YV12,width=1280,height=720,framerate=15/1")}),
150153
new_element("tee",{"allow-not-linked":True},"surfacetestsource")
151154
])

webrtc_client.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ def on_element_added(thebin, element):
6464
parser.add_argument("-t","--target", help="server to connect to (%(default)s)", default="127.0.0.1")
6565
parser.add_argument("-f","--front", help="front image source (device or pipeline)",default="" )
6666
parser.add_argument("-s","--surface",help="surface image source (device or pipeline)",default="" )
67+
parser.add_argument("-p","--perspective",help="perspective (9 floats: \"1,0,0,...\")",default="" )
6768

6869
args = parser.parse_args()
6970
print("Option",args,"\n")
@@ -74,7 +75,13 @@ def on_element_added(thebin, element):
7475
if not args.fake and (args.front == "" or args.surface == ""):
7576
logging.warning("Need to either specify --fake for test sources, or -f/-s for source devices/pipelines.")
7677

77-
add_test_sources(args.front,args.surface,args.fake)
78+
if args.perspective != "":
79+
params = [ float(f) for f in args.perspective.split(",") ]
80+
pt = new_element("perspective",{"matrix":params})
81+
else:
82+
pt = None
83+
84+
add_test_sources(args.front,args.surface,args.fake,perspective=pt)
7885

7986
session = Soup.Session()
8087
session.set_property("ssl-strict", False)

0 commit comments

Comments
 (0)