Hi Laurent You are very fast on implementing new features in omap3-isp-live. I appreciate much the new panning-feature - thank you! On my beagleboard I use omap-vout with vrfb-rotation. As I already configured omapfb to rotate the screen upon start (kernel-argument omapfb.rotate), I thought it might be useful to rotate omap-vout accordingly in your application. This is what the following patch does. The patch is a diff against your latest commit 619164a994c8d878249d6c1b8b16c27074a04209. I hope it is useful. Greetings, Florian diff -rupN '--exclude=.git' omap3-isp-live/live.c omap3-isp-live-voisee/live.c --- omap3-isp-live/live.c 2012-10-24 18:14:58.830555741 +0200 +++ omap3-isp-live-voisee/live.c 2012-10-24 22:28:49.278056954 +0200 @@ -661,7 +674,36 @@ struct color_rgb24 { unsigned int value:24; } __attribute__((__packed__)); -static int fb_init(struct v4l2_rect *rect) +/* + * Convert DSS rotation to V4L2 rotation + * V4L2 understand 0, 90, 180, 270 degrees. + */ +static int dss_rot_to_v4l2_rot(int dss_rotation, + int *v4l2_rotation) +{ + int ret = 0; + + switch (dss_rotation) { + case 1: + *v4l2_rotation = 90; + break; + case 2: + *v4l2_rotation = 180; + break; + case 3: + *v4l2_rotation = 270; + break; + case 0: + *v4l2_rotation = 0; + break; + default: + ret = -EINVAL; + break; + } + return ret; +} + +static int fb_init(struct v4l2_rect *rect, int *rotation) { struct color_24bpp ; @@ -745,6 +787,8 @@ static int fb_init(struct v4l2_rect *rec rect->width = var.xres; rect->height = var.yres; + /* Return the rotation (if any) in degrees */ + dss_rot_to_v4l2_rot(var.rotate, rotation); done: if (mem != NULL) munmap(mem, fix.smem_len); @@ -812,6 +858,7 @@ int main(int argc __attribute__((__unuse unsigned int colorkey; bool enable_aewb = true; float fps; + int rotation; int ret; int c; @@ -851,10 +898,10 @@ int main(int argc __attribute__((__unuse } events_init(&events); input_init(&input); memset(&rect, 0, sizeof rect); - ret = fb_init(&rect); + ret = fb_init(&rect, &rotation); if (ret < 0) { printf("error: unable to initialize frame buffer\n"); goto cleanup; @@ -879,7 +929,7 @@ int main(int argc __attribute__((__unuse format.pixelformat = V4L2_PIX_FMT_YUYV; format.width = rect.width; format.height = rect.height; - vo = vo_init(vo_devname, &vo_ops, buffers, &format); + vo = vo_init(vo_devname, &vo_ops, buffers, &format, rotation); if (vo == NULL) { printf("error: unable to initialize video output\n"); goto cleanup; diff -rupN '--exclude=.git' omap3-isp-live/snapshot.c omap3-isp-live-voisee/snapshot.c --- omap3-isp-live/snapshot.c 2012-10-24 18:14:58.830555741 +0200 +++ omap3-isp-live-voisee/snapshot.c 2012-10-24 22:28:49.274057063 +0200 @@ -45,6 +45,7 @@ #if USE_LIBJPEG #include <jpeglib.h> #include <setjmp.h> +#include "jpeg.h" #endif #include "isp/list.h" @@ -55,7 +56,6 @@ #include "events.h" #include "iq.h" -#include "jpeg.h" #define MEDIA_DEVICE "/dev/media0" diff -rupN '--exclude=.git' omap3-isp-live/videoout.c omap3-isp-live-voisee/videoout.c --- omap3-isp-live/videoout.c 2012-09-28 14:43:53.978198906 +0200 +++ omap3-isp-live-voisee/videoout.c 2012-10-24 22:28:49.278056954 +0200 @@ -54,7 +54,8 @@ struct videoout struct videoout *vo_init(const char *devname, const struct video_out_operations *ops, unsigned int buffers, - struct v4l2_pix_format *format) + struct v4l2_pix_format *format, + int rotation) { struct v4l2_pix_format pixfmt; struct v4l2_format fmt; @@ -76,6 +77,14 @@ struct videoout *vo_init(const char *dev goto error; } + /* setup the rotation here, we have to do it BEFORE + * setting the format. */ + ret = v4l2_set_control(vo->dev, V4L2_CID_ROTATE, &rotation); + if (ret < 0){ + perror("Failed to setup rotation\n"); + goto error; + } + pixfmt.pixelformat = format->pixelformat; pixfmt.width = format->width; pixfmt.height = format->height; diff -rupN '--exclude=.git' omap3-isp-live/videoout.h omap3-isp-live-voisee/videoout.h --- omap3-isp-live/videoout.h 2012-09-28 14:43:53.978198906 +0200 +++ omap3-isp-live-voisee/videoout.h 2012-10-24 22:28:49.274057063 +0200 @@ -34,10 +34,13 @@ struct video_out_operations { void (*unwatch_fd)(int fd); }; +int vo_set_rotation(struct videoout *vo, int rotation); + struct videoout *vo_init(const char *devname, const struct video_out_operations *ops, unsigned int buffers, - struct v4l2_pix_format *format); + struct v4l2_pix_format *format, + int rotation); void vo_cleanup(struct videoout *vo); int vo_enable_colorkey(struct videoout *vo, unsigned int val); -- 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