Re: [PATCH 09/20] media: rcar_vin: Use correct pad number in try_fmt

2015-05-23 Thread Laurent Pinchart
Hi Hans,

On Thursday 21 May 2015 07:58:18 Hans Verkuil wrote:
 On 05/20/2015 06:39 PM, William Towle wrote:
  From: Rob Taylor rob.tay...@codethink.co.uk
  
  Fix rcar_vin_try_fmt to use the correct pad number when calling the
  subdev set_fmt. Previously pad number 0 was always used, resulting in
  EINVAL if the subdev cares about the pad number (e.g. ADV7612).
  
  Signed-off-by: William Towle  Taylor rob.tay...@codethink.co.uk
  Reviewed-by: Rob Taylor rob.tay...@codethink.co.uk
  ---
  
   drivers/media/platform/soc_camera/rcar_vin.c |   29 +---
   1 file changed, 19 insertions(+), 10 deletions(-)
  
  diff --git a/drivers/media/platform/soc_camera/rcar_vin.c
  b/drivers/media/platform/soc_camera/rcar_vin.c index b4e9b43..571ab20
  100644
  --- a/drivers/media/platform/soc_camera/rcar_vin.c
  +++ b/drivers/media/platform/soc_camera/rcar_vin.c
  @@ -1707,12 +1707,13 @@ static int rcar_vin_try_fmt(struct
  soc_camera_device *icd, 
  const struct soc_camera_format_xlate *xlate;
  struct v4l2_pix_format *pix = f-fmt.pix;
  struct v4l2_subdev *sd = soc_camera_to_subdev(icd);
  
  -   struct v4l2_subdev_pad_config pad_cfg;
  +   struct v4l2_subdev_pad_config pad_cfg[sd-entity.num_pads];
 
 Same problem: this relies on the presence of CONFIG_MEDIA_CONTROLLER.
 This array can also get large which is bad when it is on the stack.
 
 Laurent, I remember that you had plans to add an op that would allocate
 and initialize this for you. Any progress on that?

You have it in your mailbox :-)

  struct v4l2_subdev_format format = {
  .which = V4L2_SUBDEV_FORMAT_TRY,
  };
  struct v4l2_mbus_framefmt *mf = format.format;
  __u32 pixfmt = pix-pixelformat;
  +   struct media_pad *remote_pad;
  int width, height;
  int ret;
  
  @@ -1744,17 +1745,24 @@ static int rcar_vin_try_fmt(struct
  soc_camera_device *icd,
  mf-code = xlate-code;
  mf-colorspace = pix-colorspace;
  
  -   ret = v4l2_device_call_until_err(sd-v4l2_dev, 
soc_camera_grp_id(icd),
  -pad, set_fmt, pad_cfg, format);
  +   remote_pad = media_entity_remote_pad(
  +   icd-vdev-entity.pads[0]);
  +   format.pad = remote_pad-index;
  +
  +   ret = v4l2_device_call_until_err(sd-v4l2_dev,
  +   soc_camera_grp_id(icd), pad,
  +   set_fmt, pad_cfg,
  +   format);
  if (ret  0)
  return ret;
  
  -   /* Adjust only if VIN cannot scale */
  -   if (pix-width  mf-width * 2)
  -   pix-width = mf-width * 2;
  -   if (pix-height  mf-height * 3)
  -   pix-height = mf-height * 3;
  -
  +   /*  In case the driver has adjusted 'fmt' to match the
  +*  resolution of the live stream, 'pix' needs to pass this
  +*  change out so that the buffer userland creates for the
  +*  captured image/video has these dimensions
  +*/
  +   pix-width = mf-width;
  +   pix-height = mf-height;
  pix-field = mf-field;
  pix-colorspace = mf-colorspace;
  
  @@ -1769,9 +1777,10 @@ static int rcar_vin_try_fmt(struct
  soc_camera_device *icd,
   */
  mf-width = VIN_MAX_WIDTH;
  mf-height = VIN_MAX_HEIGHT;
  +   format.pad = remote_pad-index;
  ret = v4l2_device_call_until_err(sd-v4l2_dev,
   soc_camera_grp_id(icd),
  -pad, set_fmt, pad_cfg,
  +pad, set_fmt, pad_cfg,
   format);
  if (ret  0) {
  dev_err(icd-parent,

-- 
Regards,

Laurent Pinchart

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


Re: [PATCH 09/20] media: rcar_vin: Use correct pad number in try_fmt

2015-05-20 Thread Hans Verkuil
On 05/20/2015 06:39 PM, William Towle wrote:
 From: Rob Taylor rob.tay...@codethink.co.uk
 
 Fix rcar_vin_try_fmt to use the correct pad number when calling the
 subdev set_fmt. Previously pad number 0 was always used, resulting in
 EINVAL if the subdev cares about the pad number (e.g. ADV7612).
 
 Signed-off-by: William Towle  Taylor rob.tay...@codethink.co.uk
 Reviewed-by: Rob Taylor rob.tay...@codethink.co.uk
 ---
  drivers/media/platform/soc_camera/rcar_vin.c |   29 
 +-
  1 file changed, 19 insertions(+), 10 deletions(-)
 
 diff --git a/drivers/media/platform/soc_camera/rcar_vin.c 
 b/drivers/media/platform/soc_camera/rcar_vin.c
 index b4e9b43..571ab20 100644
 --- a/drivers/media/platform/soc_camera/rcar_vin.c
 +++ b/drivers/media/platform/soc_camera/rcar_vin.c
 @@ -1707,12 +1707,13 @@ static int rcar_vin_try_fmt(struct soc_camera_device 
 *icd,
   const struct soc_camera_format_xlate *xlate;
   struct v4l2_pix_format *pix = f-fmt.pix;
   struct v4l2_subdev *sd = soc_camera_to_subdev(icd);
 - struct v4l2_subdev_pad_config pad_cfg;
 + struct v4l2_subdev_pad_config pad_cfg[sd-entity.num_pads];

Same problem: this relies on the presence of CONFIG_MEDIA_CONTROLLER.
This array can also get large which is bad when it is on the stack.

Laurent, I remember that you had plans to add an op that would allocate
and initialize this for you. Any progress on that?

Regards,

Hans

   struct v4l2_subdev_format format = {
   .which = V4L2_SUBDEV_FORMAT_TRY,
   };
   struct v4l2_mbus_framefmt *mf = format.format;
   __u32 pixfmt = pix-pixelformat;
 + struct media_pad *remote_pad;
   int width, height;
   int ret;
  
 @@ -1744,17 +1745,24 @@ static int rcar_vin_try_fmt(struct soc_camera_device 
 *icd,
   mf-code = xlate-code;
   mf-colorspace = pix-colorspace;
  
 - ret = v4l2_device_call_until_err(sd-v4l2_dev, soc_camera_grp_id(icd),
 -  pad, set_fmt, pad_cfg, format);
 + remote_pad = media_entity_remote_pad(
 + icd-vdev-entity.pads[0]);
 + format.pad = remote_pad-index;
 +
 + ret = v4l2_device_call_until_err(sd-v4l2_dev,
 + soc_camera_grp_id(icd), pad,
 + set_fmt, pad_cfg,
 + format);
   if (ret  0)
   return ret;
  
 - /* Adjust only if VIN cannot scale */
 - if (pix-width  mf-width * 2)
 - pix-width = mf-width * 2;
 - if (pix-height  mf-height * 3)
 - pix-height = mf-height * 3;
 -
 + /*  In case the driver has adjusted 'fmt' to match the
 +  *  resolution of the live stream, 'pix' needs to pass this
 +  *  change out so that the buffer userland creates for the
 +  *  captured image/video has these dimensions
 +  */
 + pix-width = mf-width;
 + pix-height = mf-height;
   pix-field = mf-field;
   pix-colorspace = mf-colorspace;
  
 @@ -1769,9 +1777,10 @@ static int rcar_vin_try_fmt(struct soc_camera_device 
 *icd,
*/
   mf-width = VIN_MAX_WIDTH;
   mf-height = VIN_MAX_HEIGHT;
 + format.pad = remote_pad-index;
   ret = v4l2_device_call_until_err(sd-v4l2_dev,
soc_camera_grp_id(icd),
 -  pad, set_fmt, pad_cfg,
 +  pad, set_fmt, pad_cfg,
format);
   if (ret  0) {
   dev_err(icd-parent,
 

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