Hi Sakari,

Thanks for the patch.

On Monday 07 May 2012 16:46:36 Sakari Ailus wrote:
> Signed-off-by: Sakari Ailus <sakari.ai...@iki.fi>

Acked-by: Laurent Pinchart <laurent.pinch...@ideasonboard.com>

> ---
>  src/main.c       |   14 ++++++++++++++
>  src/options.c    |    6 ++++--
>  src/v4l2subdev.c |   32 +++++++++++++++++++++++---------
>  3 files changed, 41 insertions(+), 11 deletions(-)
> 
> diff --git a/src/main.c b/src/main.c
> index 2f57352..a989669 100644
> --- a/src/main.c
> +++ b/src/main.c
> @@ -77,6 +77,20 @@ static void v4l2_subdev_print_format(struct media_entity
> *entity, printf("\n\t\t crop:%u,%u/%ux%u", rect.left, rect.top,
>                      rect.width, rect.height);
> 
> +     ret = v4l2_subdev_get_selection(entity, &rect, pad,
> +                                     V4L2_SUBDEV_SEL_TGT_COMPOSE_BOUNDS,
> +                                     which);
> +     if (ret == 0)
> +             printf("\n\t\t compose.bounds:%u,%u/%ux%u",
> +                    rect.left, rect.top, rect.width, rect.height);
> +
> +     ret = v4l2_subdev_get_selection(entity, &rect, pad,
> +                                     V4L2_SUBDEV_SEL_TGT_COMPOSE_ACTUAL,
> +                                     which);
> +     if (ret == 0)
> +             printf("\n\t\t compose:%u,%u/%ux%u",
> +                    rect.left, rect.top, rect.width, rect.height);
> +
>       printf("]");
>  }
> 
> diff --git a/src/options.c b/src/options.c
> index 46f6bef..8e80bd0 100644
> --- a/src/options.c
> +++ b/src/options.c
> @@ -56,12 +56,14 @@ static void usage(const char *argv0, int verbose)
>       printf("\tv4l2                = pad, '[', v4l2-cfgs ']' ;\n");
>       printf("\tv4l2-cfgs           = v4l2-cfg [ ',' v4l2-cfg ] ;\n");
>       printf("\tv4l2-cfg            = v4l2-mbusfmt | v4l2-crop\n");
> -     printf("\t                      | v4l2 frame interval ;\n");
> +     printf("\t                      | v4l2-compose | v4l2 frame interval
> ;\n"); printf("\tv4l2-mbusfmt        = 'fmt:', fcc, '/', size ;\n");
>       printf("\tpad                 = entity, ':', pad number ;\n");
>       printf("\tentity              = entity number | ( '\"', entity name, 
> '\"'
> ) ;\n"); printf("\tsize                = width, 'x', height ;\n");
> -     printf("\tv4l2-crop           = 'crop:(', left, ',', top, ')/', size
> ;\n"); +      printf("\tv4l2-crop           = 'crop:', v4l2-rectangle ;\n");
> +     printf("\tv4l2-compose        = 'compose:', v4l2-rectangle ;\n");
> +     printf("\tv4l2-rectangle      = '(', left, ',', top, ')/', size ;\n");
>       printf("\tv4l2 frame interval = '@', numerator, '/', denominator ;\n");
>       printf("where the fields are\n");
>       printf("\tentity number   Entity numeric identifier\n");
> diff --git a/src/v4l2subdev.c b/src/v4l2subdev.c
> index 6881553..0abb4f4 100644
> --- a/src/v4l2subdev.c
> +++ b/src/v4l2subdev.c
> @@ -320,8 +320,8 @@ static int strhazit(const char *str, const char **p)
> 
>  static struct media_pad *v4l2_subdev_parse_pad_format(
>       struct media_device *media, struct v4l2_mbus_framefmt *format,
> -     struct v4l2_rect *crop, struct v4l2_fract *interval, const char *p,
> -     char **endp)
> +     struct v4l2_rect *crop, struct v4l2_rect *compose,
> +     struct v4l2_fract *interval, const char *p, char **endp)
>  {
>       struct media_pad *pad;
>       char *end;
> @@ -358,6 +358,15 @@ static struct media_pad *v4l2_subdev_parse_pad_format(
>                       continue;
>               }
> 
> +             if (!strhazit("compose:", &p)) {
> +                     ret = v4l2_subdev_parse_rectangle(compose, p, &end);
> +                     if (ret < 0)
> +                             return NULL;
> +
> +                     for (p = end; isspace(*p); p++);
> +                     continue;
> +             }
> +
>               if (*p == '@') {
>                       ret = v4l2_subdev_parse_frame_interval(interval, ++p, 
> &end);
>                       if (ret < 0)
> @@ -471,30 +480,35 @@ static int v4l2_subdev_parse_setup_format(struct
> media_device *media, struct v4l2_mbus_framefmt format = { 0, 0, 0 };
>       struct media_pad *pad;
>       struct v4l2_rect crop = { -1, -1, -1, -1 };
> +     struct v4l2_rect compose = crop;
>       struct v4l2_fract interval = { 0, 0 };
>       unsigned int i;
>       char *end;
>       int ret;
> 
> -     pad = v4l2_subdev_parse_pad_format(media, &format, &crop, &interval,
> -                                        p, &end);
> +     pad = v4l2_subdev_parse_pad_format(media, &format, &crop, &compose,
> +                                        &interval, p, &end);
>       if (pad == NULL) {
>               media_dbg(media, "Unable to parse format\n");
>               return -EINVAL;
>       }
> 
> -     if (pad->flags & MEDIA_PAD_FL_SOURCE) {
> -             ret = set_selection(pad, V4L2_SUBDEV_SEL_TGT_CROP_ACTUAL, 
> &crop);
> +     if (pad->flags & MEDIA_PAD_FL_SINK) {
> +             ret = set_format(pad, &format);
>               if (ret < 0)
>                       return ret;
>       }
> 
> -     ret = set_format(pad, &format);
> +     ret = set_selection(pad, V4L2_SUBDEV_SEL_TGT_CROP_ACTUAL, &crop);
>       if (ret < 0)
>               return ret;
> 
> -     if (pad->flags & MEDIA_PAD_FL_SINK) {
> -             ret = set_selection(pad, V4L2_SUBDEV_SEL_TGT_CROP_ACTUAL, 
> &crop);
> +     ret = set_selection(pad, V4L2_SUBDEV_SEL_TGT_COMPOSE_ACTUAL, &compose);
> +     if (ret < 0)
> +             return ret;
> +
> +     if (pad->flags & MEDIA_PAD_FL_SOURCE) {
> +             ret = set_format(pad, &format);
>               if (ret < 0)
>                       return ret;
>       }
-- 
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

Reply via email to