V4L/DVB (3973): Cx88-blackbird: pause the encoder during frequency change
authorValentin Zagura <puthre@gmail.com>
Mon, 22 May 2006 13:31:59 +0000 (10:31 -0300)
committerMauro Carvalho Chehab <mchehab@infradead.org>
Sun, 25 Jun 2006 05:00:04 +0000 (02:00 -0300)
Added code to cx88-blackbird.c to treat the VIDIOC_S_FREQUENCY ioctl
to stop mpeg stream before changing the frequency and restart it after.
It seems that the mpeg stream needs to be paused while changing the
channel frequency, otherwise the mpeg encoder enters into a bad state,
producing artifacts.

Signed-off-by: Valentin Zagura <puthre@gmail.com>
Signed-off-by: Michael Krufky <mkrufky@linuxtv.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
drivers/media/video/cx88/cx88-blackbird.c

index 997b9b87b542e8640122663d0cab69d632550614..036f87643e139483d464c0c6778a3ce8dc282991 100644 (file)
@@ -1456,6 +1456,20 @@ static int mpeg_do_ioctl(struct inode *inode, struct file *file,
                blackbird_set_params(dev, f);
                return 0;
        }
+       case VIDIOC_S_FREQUENCY:
+       {
+               blackbird_api_cmd(fh->dev, CX2341X_ENC_STOP_CAPTURE, 3, 0,
+                                 BLACKBIRD_END_NOW,
+                                 BLACKBIRD_MPEG_CAPTURE,
+                                 BLACKBIRD_RAW_BITS_NONE);
+
+               cx88_do_ioctl( inode, file, 0, dev->core, cmd, arg, cx88_ioctl_hook );
+
+               blackbird_initialize_codec(dev);
+               cx88_set_scale(dev->core, dev->width, dev->height,
+                              fh->mpegq.field);
+               return 0;
+       }
 
        default:
                return cx88_do_ioctl( inode, file, 0, dev->core, cmd, arg, cx88_ioctl_hook );