]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - sitara-linux/dual-camera-demo.git/commitdiff
Cleaned up v4l2/fbdev init and touched up PiP Settings
authorJosh Elliott <jelliott@ti.com>
Tue, 29 Apr 2014 15:40:41 +0000 (10:40 -0500)
committerJosh Elliott <jelliott@ti.com>
Tue, 29 Apr 2014 15:40:41 +0000 (10:40 -0500)
loopback.cpp
mainwindow.cpp

index 09dee7312e5820e9ea0f771f83cdfb24c6e97162..4a8f746b603db029f0b0344f3bedb86b9068170f 100644 (file)
@@ -79,12 +79,6 @@ static int v4l2_init_device(struct v4l2_device_info *device)
 
     printf("\n%s: Opened Channel\n", device->name);
 
-    /* Set the format of the capture device */
-    device->fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_YUYV;
-
-    device->width = 800;
-    device->height = 600;
-
     /* Check if the device is capable of streaming */
     if (ioctl(device->fd, VIDIOC_QUERYCAP, &capability) < 0) {
         perror("VIDIOC_QUERYCAP");
@@ -293,10 +287,10 @@ static int fbdev_init_device(struct fbdev_device_info *device)
     /* Set the input resolution of the video framebuffer to be the size
      * of the camera image.  Later, the output size will be matched to
      * the display to allow for up/down scaling */
-    device->varinfo.xres = 800;
-    device->varinfo.yres = 600;
-    device->varinfo.xres_virtual = 800;
-    device->varinfo.yres_virtual = 600;
+    device->varinfo.xres = device->width;
+    device->varinfo.yres = device->height;
+    device->varinfo.xres_virtual = device->width;
+    device->varinfo.yres_virtual = device->height;
 
     device->varinfo.bits_per_pixel = 16;
     device->varinfo.nonstd = OMAPFB_COLOR_YUY422;
@@ -397,10 +391,12 @@ static int fbdev_init_pip(void)
     fprintf(f,"%d", 1);
     fclose(f);
 
-    /* Set scalar for PiP video plane to 1/2 */
+    /* Set scalar for PiP video plane to 1/4 of main video plane */
     fb2_device.pi.enabled = 0;
-    fb2_device.pi.out_width = fb1_device.pi.out_width/2;
-    fb2_device.pi.out_height = fb1_device.pi.out_height/2;
+    fb2_device.pi.out_width = fb1_device.pi.out_width/3;
+    fb2_device.pi.out_height = fb1_device.pi.out_height/3;
+    fb2_device.pi.pos_x = 25;
+    fb2_device.pi.pos_y = 25;
     fb2_device.pi.enabled = 1;
 
     if (ioctl(fb2_device.fd, OMAPFB_SETUP_PLANE, &fb2_device.pi)) {
@@ -498,23 +494,37 @@ static int display_frame(struct v4l2_device_info *v4l2_device, struct fbdev_devi
 
 void default_parameters(void)
 {
+    /* Main camera display */
     strcpy(fb1_device.dev_name,"/dev/fb1");
     strcpy(fb1_device.name,"fb1");
+    fb1_device.width=800;
+    fb1_device.height=600;
 
+    /* PiP camera display */
     strcpy(fb2_device.dev_name,"/dev/fb2");
     strcpy(fb2_device.name,"fb2");
+    fb2_device.width=800;
+    fb2_device.height=600;
 
+    /* Main camera */
     cap0_device.memory_mode = V4L2_MEMORY_MMAP;
     cap0_device.num_buffers = 3;
     strcpy(cap0_device.dev_name,"/dev/video0");
     strcpy(cap0_device.name,"Capture 0");
     cap0_device.buffers = NULL;
+    cap0_device.fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_YUYV;
+    cap0_device.width = 800;
+    cap0_device.height = 600;
 
+    /* PiP camera */
     cap1_device.memory_mode = V4L2_MEMORY_MMAP;
     cap1_device.num_buffers = 3;
     strcpy(cap1_device.dev_name,"/dev/video1");
     strcpy(cap1_device.name,"Capture 1");
     cap1_device.buffers = NULL;
+    cap1_device.fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_YUYV;
+    cap1_device.width = 800;
+    cap1_device.height = 600;
 
     /* Set the default parameters for device options */
     status.main_cam=0;
@@ -558,20 +568,12 @@ int init_loopback(void)
     /* Declare properties for video and capture devices */
     default_parameters();
 
-    /* Initialize the fbdev display devices */
-    if (fbdev_init_device(&fb1_device)) goto Error;
-    if (fbdev_init_device(&fb2_device)) goto Error;
-
-    /* Set the scalar for PiP */
-    if (fbdev_init_pip() < 0 ) goto Error;
-
     /* Initialize the v4l2 capture devices */
     if (v4l2_init_device(&cap0_device) < 0) goto Error;
     if (v4l2_init_device(&cap1_device) < 0) {
         /* If there is not a second camera, program can still continue */
         status.num_cams=1;
         status.pip=false;
-        fbdev_disable_pip();
         printf("Only one camera detected\n");
     }
 
@@ -581,6 +583,17 @@ int init_loopback(void)
         if (v4l2_stream_on(&cap1_device) < 0) goto Error;
     }
 
+    /* Initialize the fbdev display devices */
+    if (fbdev_init_device(&fb1_device)) goto Error;
+    if (fbdev_init_device(&fb2_device)) goto Error;
+
+    if (status.pip==false)
+        fbdev_disable_pip();
+    else {
+        /* Set the scalar for PiP */
+        if (fbdev_init_pip() < 0 ) goto Error;
+    }
+
     return 0;
 
 Error:
index 92e8646f86c61ac64e5ef61ad21e2c1c377f16b7..4e07c82d21a809e47e7c3528f547614401699dd2 100644 (file)
@@ -30,7 +30,7 @@ MainWindow::MainWindow(QWidget *parent) :
     /* Configure GUI */
     this->setFixedSize(status.display_xres, status.display_yres);
     ui->frame->setGeometry(0, 0, status.display_xres, status.display_yres);
-    ui->frame_pip->setGeometry(0, 0, status.display_xres/2, status.display_yres/2);
+    ui->frame_pip->setGeometry(25, 25, status.display_xres/3, status.display_yres/3);
     ui->capture->setGeometry(status.display_xres/2 - 210,
                              status.display_yres - 50,
                              91, 41);