Message ID | 1367574783-19090-1-git-send-email-prabhakar.csengg@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Hello. On 03-05-2013 13:53, Prabhakar Lad wrote: > From: Lad, Prabhakar <prabhakar.csengg@gmail.com> > For NV12 format, even if display data is single image, > both VIDWIN0 and VIDWIN1 parameters must be used. The start > address of Y data plane and C data plane is configured in > VIDEOWIN0ADH/L and VIDEOWIN1ADH/L respectively. > cuurently only one layer was requested, which is suffice > for yuv422, but for yuv420(NV12) two layers are required and > fix the same by requesting for other layer if pix fmt is NV12 > during set_fmt. > Signed-off-by: Lad, Prabhakar <prabhakar.csengg@gmail.com> > --- > drivers/media/platform/davinci/vpbe_display.c | 16 ++++++++++++++++ > 1 files changed, 16 insertions(+), 0 deletions(-) > diff --git a/drivers/media/platform/davinci/vpbe_display.c b/drivers/media/platform/davinci/vpbe_display.c > index 0341dcc..f2ee07b 100644 > --- a/drivers/media/platform/davinci/vpbe_display.c > +++ b/drivers/media/platform/davinci/vpbe_display.c > @@ -922,6 +922,22 @@ static int vpbe_display_s_fmt(struct file *file, void *priv, > other video window */ > > layer->pix_fmt = *pixfmt; > + if (pixfmt->pixelformat == V4L2_PIX_FMT_NV12 && > + cpu_is_davinci_dm365()) { cpu_is_*() shouldn't be used in the drivers. > + struct vpbe_layer *otherlayer; > + > + otherlayer = _vpbe_display_get_other_win_layer(disp_dev, layer); > + /* if other layer is available, only > + * claim it, do not configure it > + */ > + ret = osd_device->ops.request_layer(osd_device, > + otherlayer->layer_info.id); > + if (ret < 0) { > + v4l2_err(&vpbe_dev->v4l2_dev, > + "Display Manager failed to allocate layer\n"); > + return -EBUSY; > + } > + } WBR, Sergei
diff --git a/drivers/media/platform/davinci/vpbe_display.c b/drivers/media/platform/davinci/vpbe_display.c index 0341dcc..f2ee07b 100644 --- a/drivers/media/platform/davinci/vpbe_display.c +++ b/drivers/media/platform/davinci/vpbe_display.c @@ -922,6 +922,22 @@ static int vpbe_display_s_fmt(struct file *file, void *priv, other video window */ layer->pix_fmt = *pixfmt; + if (pixfmt->pixelformat == V4L2_PIX_FMT_NV12 && + cpu_is_davinci_dm365()) { + struct vpbe_layer *otherlayer; + + otherlayer = _vpbe_display_get_other_win_layer(disp_dev, layer); + /* if other layer is available, only + * claim it, do not configure it + */ + ret = osd_device->ops.request_layer(osd_device, + otherlayer->layer_info.id); + if (ret < 0) { + v4l2_err(&vpbe_dev->v4l2_dev, + "Display Manager failed to allocate layer\n"); + return -EBUSY; + } + } /* Get osd layer config */ osd_device->ops.get_layer_config(osd_device,