Use v4l2convert to connect decodebin
Use v4l2convert to invoke mdp for HW video decoder format conversion.
* Remove the branching of video source and image source
* Remove the extra videoconvert before the displaysink
* Remove the branching workaround in video_headless_pipeline
This will also eliminate the gstreamer error messages caused by the
mtkmdp element.
Bug: b/151393184, b/164147474
Change-Id: Icb1961161cf01d5236b5d688d1de39d5f61ecad2
diff --git a/debian/changelog b/debian/changelog
index 1eee24a..22585ec 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,6 +1,7 @@
edgetpuvision (6-4) mendel-eagle; urgency=medium
* Switch to native glbox.
+ * Switch to v4l2convert for HW decoder format conversion.
-- Coral Team <coral-support@google.com> Thu, 29 Oct 2020 13:04:30 -0700
diff --git a/debian/control b/debian/control
index 06da349..a393b05 100644
--- a/debian/control
+++ b/debian/control
@@ -14,7 +14,6 @@
gir1.2-gst-plugins-base-1.0,
gir1.2-gstreamer-1.0,
gir1.2-gtk-3.0,
- gst-mtkmdp,
gstreamer1.0-gl,
gstreamer1.0-plugins-bad,
gstreamer1.0-plugins-good,
diff --git a/edgetpuvision/pipelines.py b/edgetpuvision/pipelines.py
index 6646b8e..89978d7 100644
--- a/edgetpuvision/pipelines.py
+++ b/edgetpuvision/pipelines.py
@@ -14,22 +14,11 @@
from .gst import *
-#TODO: Use v4l2convert to run mdp.
def decoded_file_src(filename, render_size):
return [
Source('file', location=filename),
Filter('decodebin'),
- Filter('mtkmdp width=%d height=%d format=BGRA' % (render_size.width, render_size.height)),
- ]
-
-#TODO: Remove this function when v4l2convert is available.
-def decoded_img_file_src(filename, render_size):
- return [
- Source('file', location=filename),
- Filter('decodebin'),
- Filter('videoconvert'),
- Caps('video/x-raw,format=I420'),
- Filter('glfilterbin filter=glbox'),
+ Filter('v4l2convert'),
Caps('video/x-raw,width=%d,height=%d,format=BGRA' % (render_size.width, render_size.height)),
]
@@ -44,7 +33,6 @@
def display_sink():
return [
- Filter('videoconvert'),
Filter('rsvgoverlay', name='svg_overlay'),
Sink('wayland', name='glsink', sync=False)
]
@@ -63,7 +51,7 @@
# Display
def image_display_pipeline(filename, layout):
return (
- [decoded_img_file_src(filename, layout.render_size),
+ [decoded_file_src(filename, layout.render_size),
Filter('imagefreeze'),
Caps('video/x-raw', framerate='30/1'),
Tee(name='t')],
@@ -103,24 +91,17 @@
# Headless
def image_headless_pipeline(filename, layout):
return (
- [decoded_img_file_src(filename, layout.render_size),
+ [decoded_file_src(filename, layout.render_size),
Filter('imagefreeze'),
Filter('glupload'),
inference_pipeline(layout)],
)
-# MTKMDP can't be used directly with glbox.
-# TODO: Remove the branching when v4l2convert is used.
def video_headless_pipeline(filename, layout):
return (
- [decoded_file_src(filename, layout.render_size),
- Tee(name='t')],
- [Pad('t'),
- Queue(max_size_buffers=1, leaky='downstream'),
- Filter('fakesink sync=False')],
- [Pad('t'),
- Queue(max_size_buffers=1, leaky='downstream'),
- inference_pipeline(layout)],
+ [decoded_file_src(filename, layout.render_size),
+ Filter('glupload'),
+ inference_pipeline(layout)],
)
def camera_headless_pipeline(fmt, layout):
@@ -130,7 +111,7 @@
inference_pipeline(layout)],
)
-# Streaming
+# Streaming -- not supported yet.
def video_streaming_pipeline(filename, layout):
return (
[Source('file', location=filename),