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'),
