staging: media/platform/bcm2835: remove gstreamer workaround
authorKevin Wern <kevin.m.wern@gmail.com>
Tue, 11 Apr 2017 22:17:02 +0000 (18:17 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 18 Apr 2017 11:54:24 +0000 (13:54 +0200)
Gstreamer's v4l2src reacted poorly to certain outputs from the bcm2835
video driver's ioctl ops function vidioc_enum_framesizes, so a
workaround was created that could be activated by user input. This
workaround would replace the driver's ioctl ops struct with another,
similar struct--only with no function pointed to by
vidioc_enum_framesizes. With no response, gstreamer would attempt to
continue with some default settings that happened to work better.

However, this bug has been fixed in gstreamer since 2014, so we
shouldn't include this workaround in the stable version of the driver.

Signed-off-by: Kevin Wern <kevin.m.wern@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/vc04_services/bcm2835-camera/TODO
drivers/staging/vc04_services/bcm2835-camera/bcm2835-camera.c

index 61a509992b9a4ac68162addfa0171b199842fb1a..0ab9e88d769ac8e4cbee3f9bf542829c9b098c02 100644 (file)
@@ -32,8 +32,3 @@ We should have VCHI create a platform device once it's initialized,
 and have this driver bind to it, so that we automatically load the
 v4l2 module after VCHI loads.
 
-5) Drop the gstreamer workaround.
-
-This was a temporary workaround for a bug that was fixed mid-2014, and
-we should remove it before stabilizing the driver.
-
index 86bbd6e899a88f7dd0bbafd3344456536e775e7a..a11e047734f954b9e9d3f1ec3ed24dfa5596b118 100644 (file)
@@ -66,19 +66,6 @@ MODULE_PARM_DESC(max_video_width, "Threshold for video mode");
 module_param(max_video_height, int, 0644);
 MODULE_PARM_DESC(max_video_height, "Threshold for video mode");
 
-/* Gstreamer bug https://bugzilla.gnome.org/show_bug.cgi?id=726521
- * v4l2src does bad (and actually wrong) things when the vidioc_enum_framesizes
- * function says type V4L2_FRMSIZE_TYPE_STEPWISE, which we do by default.
- * It's happier if we just don't say anything at all, when it then
- * sets up a load of defaults that it thinks might work.
- * If gst_v4l2src_is_broken is non-zero, then we remove the function from
- * our function table list (actually switch to an alternate set, but same
- * result).
- */
-static int gst_v4l2src_is_broken;
-module_param(gst_v4l2src_is_broken, int, 0644);
-MODULE_PARM_DESC(gst_v4l2src_is_broken, "If non-zero, enable workaround for Gstreamer");
-
 /* global device data array */
 static struct bm2835_mmal_dev *gdev[MAX_BCM2835_CAMERAS];
 
@@ -1454,48 +1441,6 @@ static const struct v4l2_ioctl_ops camera0_ioctl_ops = {
        .vidioc_unsubscribe_event = v4l2_event_unsubscribe,
 };
 
-static const struct v4l2_ioctl_ops camera0_ioctl_ops_gstreamer = {
-       /* overlay */
-       .vidioc_enum_fmt_vid_overlay = vidioc_enum_fmt_vid_overlay,
-       .vidioc_g_fmt_vid_overlay = vidioc_g_fmt_vid_overlay,
-       .vidioc_try_fmt_vid_overlay = vidioc_try_fmt_vid_overlay,
-       .vidioc_s_fmt_vid_overlay = vidioc_s_fmt_vid_overlay,
-       .vidioc_overlay = vidioc_overlay,
-       .vidioc_g_fbuf = vidioc_g_fbuf,
-
-       /* inputs */
-       .vidioc_enum_input = vidioc_enum_input,
-       .vidioc_g_input = vidioc_g_input,
-       .vidioc_s_input = vidioc_s_input,
-
-       /* capture */
-       .vidioc_querycap = vidioc_querycap,
-       .vidioc_enum_fmt_vid_cap = vidioc_enum_fmt_vid_cap,
-       .vidioc_g_fmt_vid_cap = vidioc_g_fmt_vid_cap,
-       .vidioc_try_fmt_vid_cap = vidioc_try_fmt_vid_cap,
-       .vidioc_s_fmt_vid_cap = vidioc_s_fmt_vid_cap,
-
-       /* buffer management */
-       .vidioc_reqbufs = vb2_ioctl_reqbufs,
-       .vidioc_create_bufs = vb2_ioctl_create_bufs,
-       .vidioc_prepare_buf = vb2_ioctl_prepare_buf,
-       .vidioc_querybuf = vb2_ioctl_querybuf,
-       .vidioc_qbuf = vb2_ioctl_qbuf,
-       .vidioc_dqbuf = vb2_ioctl_dqbuf,
-       /* Remove this function ptr to fix gstreamer bug
-        * .vidioc_enum_framesizes = vidioc_enum_framesizes,
-        */
-       .vidioc_enum_frameintervals = vidioc_enum_frameintervals,
-       .vidioc_g_parm        = vidioc_g_parm,
-       .vidioc_s_parm        = vidioc_s_parm,
-       .vidioc_streamon = vb2_ioctl_streamon,
-       .vidioc_streamoff = vb2_ioctl_streamoff,
-
-       .vidioc_log_status = v4l2_ctrl_log_status,
-       .vidioc_subscribe_event = v4l2_ctrl_subscribe_event,
-       .vidioc_unsubscribe_event = v4l2_event_unsubscribe,
-};
-
 /* ------------------------------------------------------------------
  *     Driver init/finalise
  * ------------------------------------------------------------------
@@ -1811,11 +1756,6 @@ static int __init bm2835_mmal_init_device(struct bm2835_mmal_dev *dev,
        int ret;
 
        *vfd = vdev_template;
-       if (gst_v4l2src_is_broken) {
-               v4l2_info(&dev->v4l2_dev,
-                         "Work-around for gstreamer issue is active.\n");
-               vfd->ioctl_ops = &camera0_ioctl_ops_gstreamer;
-       }
 
        vfd->v4l2_dev = &dev->v4l2_dev;