Re: [PATCH] omap3isp: Add support for interlaced input data

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Em Tue, 25 Dec 2012 22:05:48 +0100
Laurent Pinchart <laurent.pinchart@xxxxxxxxxxxxxxxx> escreveu:

> Hi William,
> 
> Thanks for the patch.

Btw, you missed to add a Signed-off-by: line on it.

> 
> On Monday 17 December 2012 18:12:19 William Swanson wrote:
> > If the remote video sensor reports an interlaced video mode, the CCDC block
> > should configure itself appropriately.
> 
> What will the CCDC do in that case ? Will it capture fields or frames to 
> memory ? If frames, what's the field layout ? You will most likely need to 
> modify ispvideo.c as well, to support interlacing in the V4L2 API, and 
> possibly add interlaced formats support to the media bus API.
> 
> > ---
> >  drivers/media/platform/omap3isp/ispccdc.c |   16 ++++++++++++++--
> >  include/media/omap3isp.h                  |    3 +++
> >  2 files changed, 17 insertions(+), 2 deletions(-)
> > 
> > diff --git a/drivers/media/platform/omap3isp/ispccdc.c
> > b/drivers/media/platform/omap3isp/ispccdc.c index 60e60aa..5443ef4 100644
> > --- a/drivers/media/platform/omap3isp/ispccdc.c
> > +++ b/drivers/media/platform/omap3isp/ispccdc.c
> > @@ -970,10 +970,11 @@ void omap3isp_ccdc_max_rate(struct isp_ccdc_device
> > *ccdc, * @ccdc: Pointer to ISP CCDC device.
> >   * @pdata: Parallel interface platform data (may be NULL)
> >   * @data_size: Data size
> > + * @interlaced: Use interlaced mode instead of progressive mode
> >   */
> >  static void ccdc_config_sync_if(struct isp_ccdc_device *ccdc,
> >  				struct isp_parallel_platform_data *pdata,
> > -				unsigned int data_size)
> > +				unsigned int data_size, bool interlaced)
> >  {
> >  	struct isp_device *isp = to_isp_device(ccdc);
> >  	const struct v4l2_mbus_framefmt *format;
> > @@ -1004,9 +1005,15 @@ static void ccdc_config_sync_if(struct
> > isp_ccdc_device *ccdc, break;
> >  	}
> > 
> > +	if (interlaced)
> > +		syn_mode |= ISPCCDC_SYN_MODE_FLDMODE;
> > +
> >  	if (pdata && pdata->data_pol)
> >  		syn_mode |= ISPCCDC_SYN_MODE_DATAPOL;
> > 
> > +	if (pdata && pdata->fld_pol)
> > +		syn_mode |= ISPCCDC_SYN_MODE_FLDPOL;
> > +
> >  	if (pdata && pdata->hs_pol)
> >  		syn_mode |= ISPCCDC_SYN_MODE_HDPOL;
> > 
> > @@ -1111,6 +1118,7 @@ static void ccdc_configure(struct isp_ccdc_device
> > *ccdc) const struct v4l2_rect *crop;
> >  	const struct isp_format_info *fmt_info;
> >  	struct v4l2_subdev_format fmt_src;
> > +	bool src_interlaced = false;
> >  	unsigned int depth_out;
> >  	unsigned int depth_in = 0;
> >  	struct media_pad *pad;
> > @@ -1132,6 +1140,10 @@ static void ccdc_configure(struct isp_ccdc_device
> > *ccdc) fmt_src.pad = pad->index;
> >  	fmt_src.which = V4L2_SUBDEV_FORMAT_ACTIVE;
> >  	if (!v4l2_subdev_call(sensor, pad, get_fmt, NULL, &fmt_src)) {
> > +		if (fmt_src.format.field == V4L2_FIELD_INTERLACED ||
> > +		    fmt_src.format.field == V4L2_FIELD_INTERLACED_TB ||
> > +		    fmt_src.format.field == V4L2_FIELD_INTERLACED_BT)
> > +			src_interlaced = true;
> >  		fmt_info = omap3isp_video_format_info(fmt_src.format.code);
> >  		depth_in = fmt_info->width;
> >  	}
> > @@ -1150,7 +1162,7 @@ static void ccdc_configure(struct isp_ccdc_device
> > *ccdc)
> > 
> >  	omap3isp_configure_bridge(isp, ccdc->input, pdata, shift, bridge);
> > 
> > -	ccdc_config_sync_if(ccdc, pdata, depth_out);
> > +	ccdc_config_sync_if(ccdc, pdata, depth_out, src_interlaced);
> > 
> >  	syn_mode = isp_reg_readl(isp, OMAP3_ISP_IOMEM_CCDC, ISPCCDC_SYN_MODE);
> > 
> > diff --git a/include/media/omap3isp.h b/include/media/omap3isp.h
> > index 9584269..32d85c2 100644
> > --- a/include/media/omap3isp.h
> > +++ b/include/media/omap3isp.h
> > @@ -57,6 +57,8 @@ enum {
> >   *		ISP_LANE_SHIFT_6 - CAMEXT[13:6] -> CAM[7:0]
> >   * @clk_pol: Pixel clock polarity
> >   *		0 - Sample on rising edge, 1 - Sample on falling edge
> > + * @fld_pol: Field identification signal polarity
> > + *		0 - Active high, 1 - Active low
> >   * @hs_pol: Horizontal synchronization polarity
> >   *		0 - Active high, 1 - Active low
> >   * @vs_pol: Vertical synchronization polarity
> > @@ -67,6 +69,7 @@ enum {
> >  struct isp_parallel_platform_data {
> >  	unsigned int data_lane_shift:2;
> >  	unsigned int clk_pol:1;
> > +	unsigned int fld_pol:1;
> >  	unsigned int hs_pol:1;
> >  	unsigned int vs_pol:1;
> >  	unsigned int data_pol:1;


-- 

Cheers,
Mauro
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux