frontends (tools/webrtc): Fix PIP merging.
This commit is contained in:
parent
d55315e75f
commit
40b1c93f4c
1 changed files with 33 additions and 17 deletions
|
|
@ -979,6 +979,7 @@ class WebRTC:
|
|||
f'Unhandled "sinks_data" value: {self.sinks_data!r}'
|
||||
)
|
||||
|
||||
|
||||
if adjust_resolution:
|
||||
log.debug("Applying adjust resolution pipeline.")
|
||||
videoscale = Gst.ElementFactory.make("videoscale")
|
||||
|
|
@ -988,9 +989,37 @@ class WebRTC:
|
|||
capsfilter = Gst.ElementFactory.make("capsfilter")
|
||||
capsfilter.set_property("caps", adjusted_caps)
|
||||
|
||||
self.pipeline.add(queue, convert, videoscale, capsfilter)
|
||||
# Add elements to pipeline
|
||||
if self.merge_pip:
|
||||
self.pipeline.add(queue, convert, videoscale, capsfilter)
|
||||
else:
|
||||
self.pipeline.add(queue, convert, videoscale, capsfilter, remote_video_sink)
|
||||
|
||||
self.pipeline.sync_children_states()
|
||||
ret = pad.link(queue.get_static_pad("sink"))
|
||||
if ret != Gst.PadLinkReturn.OK:
|
||||
log.error(f"Error linking pad to queue: {ret}")
|
||||
return
|
||||
|
||||
if not Gst.Element.link_many(queue, convert, videoscale, capsfilter):
|
||||
log.error("Failed to link adjustment pipeline chain")
|
||||
return
|
||||
|
||||
if not self.link_element_or_pad(capsfilter, remote_video_sink):
|
||||
log.error("Failed to link capsfilter to sink")
|
||||
return
|
||||
|
||||
queue.sync_state_with_parent()
|
||||
convert.sync_state_with_parent()
|
||||
videoscale.sync_state_with_parent()
|
||||
capsfilter.sync_state_with_parent()
|
||||
if not self.merge_pip:
|
||||
remote_video_sink.sync_state_with_parent()
|
||||
|
||||
else:
|
||||
if self.merge_pip:
|
||||
self.pipeline.add(queue, convert)
|
||||
else:
|
||||
self.pipeline.add(queue, convert, remote_video_sink)
|
||||
|
||||
ret = pad.link(queue.get_static_pad("sink"))
|
||||
if ret != Gst.PadLinkReturn.OK:
|
||||
|
|
@ -998,30 +1027,17 @@ class WebRTC:
|
|||
return
|
||||
|
||||
if not queue.link(convert):
|
||||
log.error("Failed to link queue to videoconvert")
|
||||
log.error("Failed to link queue to convert")
|
||||
return
|
||||
|
||||
if not convert.link(videoscale):
|
||||
log.error("Failed to link videoconvert to videoscale")
|
||||
if not self.link_element_or_pad(convert, remote_video_sink):
|
||||
log.error("Failed to link convert to sink")
|
||||
return
|
||||
|
||||
if not videoscale.link(capsfilter):
|
||||
log.error("Failed to link videoscale to capsfilter")
|
||||
return
|
||||
|
||||
if not self.link_element_or_pad(capsfilter.link, remote_video_sink):
|
||||
log.error("Failed to link capsfilter to sink")
|
||||
return
|
||||
|
||||
else:
|
||||
self.pipeline.add(queue, convert, remote_video_sink)
|
||||
|
||||
pad.link(queue.get_static_pad("sink"))
|
||||
Gst.Element.link_many(queue, convert, remote_video_sink)
|
||||
|
||||
queue.sync_state_with_parent()
|
||||
convert.sync_state_with_parent()
|
||||
remote_video_sink.sync_state_with_parent()
|
||||
if not self.merge_pip:
|
||||
remote_video_sink.sync_state_with_parent()
|
||||
|
||||
log.info("Successfully linked remote video stream.")
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue