Get rid of explicit use of vpudec filter.

Change-Id: Ia6f8476ea79783d12dba63b1c6d3009e0efba9df
diff --git a/edgetpuvision/gstreamer.py b/edgetpuvision/gstreamer.py
index b4ecb6c..80b68a7 100644
--- a/edgetpuvision/gstreamer.py
+++ b/edgetpuvision/gstreamer.py
@@ -225,11 +225,6 @@
         display=display)
 
 def run(inference_size, render_overlay, *, source, downscale, display):
-    reg = Gst.Registry.get()
-    for feature in reg.get_feature_list_by_plugin('vpu.imx'):
-        # Otherwise decodebin uses vpudec to decode JPEG images and fails.
-        feature.set_rank(Gst.Rank.MARGINAL)
-
     fmt = parse_format(source)
     if fmt:
         run_camera(inference_size, render_overlay, fmt, display)
diff --git a/edgetpuvision/pipelines.py b/edgetpuvision/pipelines.py
index fb06a4a..2c049e2 100644
--- a/edgetpuvision/pipelines.py
+++ b/edgetpuvision/pipelines.py
@@ -1,20 +1,12 @@
 from .gst import *
 
-def image_file(filename):
+def decoded_file_src(filename):
     return (
         Filter('filesrc', location=filename),
         Filter('decodebin'),
     )
 
-def video_file(filename):
-    return (
-        Filter('filesrc', location=filename),
-        Filter('qtdemux'),
-        Filter('h264parse'),
-        Filter('vpudec'),
-    )
-
-def v4l2_camera(fmt):
+def v4l2_src(fmt):
     return (
         Filter('v4l2src', device=fmt.device),
         Caps('video/x-raw', format=fmt.pixel, width=fmt.size.width, height=fmt.size.height,
@@ -24,16 +16,8 @@
 def display_sink(fullscreen, sync=False):
     return Filter('kmssink' if fullscreen else 'waylandsink', sync=sync),
 
-def h264_sink(display_decoded=False):
-    appsink = Filter('appsink', name='h264sink', emit_signals=True, max_buffers=1, drop=False, sync=False),
-
-    if display_decoded:
-        return Tee(pads=(
-                   (Queue(), appsink),
-                   (Queue(), Filter('vpudec'), Filter('kmssink', sync=False))
-               ))
-
-    return appsink
+def h264_sink():
+    return Filter('appsink', name='h264sink', emit_signals=True, max_buffers=1, drop=False, sync=False)
 
 def inference_pipeline(render_size, inference_size):
     size = max_inner_size(render_size, inference_size)
@@ -51,7 +35,7 @@
 def image_display_pipeline(filename, render_size, inference_size, fullscreen):
     size = max_inner_size(render_size, inference_size)
     return (
-        image_file(filename),
+        decoded_file_src(filename),
         Tee(pads=((
             Queue(),
             Filter('imagefreeze'),
@@ -63,18 +47,14 @@
         ),(
             Queue(),
             Filter('imagefreeze'),
-            Filter('videoconvert'),
-            Filter('videoscale'),
-            Caps('video/x-raw', format='RGB', width=size.width, height=size.height),
-            Filter('videobox', autocrop=True),
-            Caps('video/x-raw', width=inference_size.width, height=inference_size.height),
-            Filter('appsink', name='appsink', emit_signals=True, max_buffers=1, drop=True, sync=False)
+            Filter('glupload'),
+            inference_pipeline(render_size, inference_size),
         )))
     )
 
 def video_display_pipeline(filename, render_size, inference_size, fullscreen):
     return (
-        video_file(filename),
+        decoded_file_src(filename),
         Filter('glupload'),
         Tee(pads=((
             Queue(max_size_buffers=1),
@@ -90,7 +70,7 @@
 
 def camera_display_pipeline(fmt, render_size, inference_size, fullscreen):
     return (
-        v4l2_camera(fmt),
+        v4l2_src(fmt),
         Filter('glupload'),
         Tee(pads=((
             Queue(max_size_buffers=1, leaky='downstream'),
@@ -106,7 +86,7 @@
 # Headless
 def image_headless_pipeline(filename, render_size, inference_size):
     return (
-      image_file(filename),
+      decoded_file_src(filename),
       Filter('imagefreeze'),
       Filter('glupload'),
       inference_pipeline(render_size, inference_size),
@@ -114,14 +94,14 @@
 
 def video_headless_pipeline(filename, render_size, inference_size):
     return (
-        video_file(filename),
+        decoded_file_src(filename),
         Filter('glupload'),
         inference_pipeline(render_size, inference_size),
     )
 
 def camera_headless_pipeline(fmt, render_size, inference_size):
     return (
-        v4l2_camera(fmt),
+        v4l2_src(fmt),
         Filter('glupload'),
         inference_pipeline(render_size, inference_size),
     )
@@ -138,8 +118,7 @@
           h264_sink()
         ), (
           Queue(max_size_buffers=1),
-          Filter('h264parse'),
-          Filter('vpudec'),
+          Filter('decodebin'),
           inference_pipeline(render_size, inference_size),
         )))
     )
@@ -147,7 +126,7 @@
 def camera_streaming_pipeline(fmt, profile, bitrate, render_size, inference_size):
     size = max_inner_size(render_size, inference_size)
     return (
-        v4l2_camera(fmt),
+        v4l2_src(fmt),
         Tee(pads=((
           Queue(max_size_buffers=1, leaky='downstream'),
           Filter('videoconvert'),