Configure cropping on output pads before setting the format
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Sun, 1 Aug 2010 19:09:55 +0000 (21:09 +0200)
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Sun, 1 Aug 2010 19:09:55 +0000 (21:09 +0200)
Image size on output pads depend on the cropping parameters. Cropping
must be configured before setting the image size on those pads.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
main.c

diff --git a/main.c b/main.c
index 62277b0..15ccfb2 100644 (file)
--- a/main.c
+++ b/main.c
@@ -321,6 +321,9 @@ static int set_crop(struct media_entity_pad *pad, struct v4l2_rect *crop)
 {
        int ret;
 
 {
        int ret;
 
+       if (crop->left == -1 || crop->top == -1)
+               return 0;
+
        printf("Setting up crop rectangle %u,%u/%ux%u on pad %s/%u\n",
                crop->left, crop->top, crop->width, crop->height,
                pad->entity->info.name, pad->index);
        printf("Setting up crop rectangle %u,%u/%ux%u on pad %s/%u\n",
                crop->left, crop->top, crop->width, crop->height,
                pad->entity->info.name, pad->index);
@@ -374,18 +377,20 @@ static int setup_format(struct media_device *media, const char *p, char **endp)
                return -EINVAL;
        }
 
                return -EINVAL;
        }
 
+       if (pad->type == MEDIA_PAD_TYPE_OUTPUT) {
+               ret = set_crop(pad, &crop);
+               if (ret < 0)
+                       return ret;
+       }
+
        ret = set_format(pad, &format);
        ret = set_format(pad, &format);
-       if (ret < 0) {
-               printf("Unable to set format\n");
+       if (ret < 0)
                return ret;
                return ret;
-       }
 
 
-       if (crop.left != -1 && crop.top != -1) {
+       if (pad->type == MEDIA_PAD_TYPE_INPUT) {
                ret = set_crop(pad, &crop);
                ret = set_crop(pad, &crop);
-               if (ret < 0) {
-                       printf("Unable to set crop rectangle\n");
+               if (ret < 0)
                        return ret;
                        return ret;
-               }
        }
 
        if (interval.numerator != 0) {
        }
 
        if (interval.numerator != 0) {