update cin.po, goog xlat update xx.po
[goodguy/history.git] / cinelerra-5.1 / cinelerra / devicev4l2base.C
index f566e5028e9f5c9149168a50cddc7aceed610bf4..4cc01d4c04cb426918e81abc52e6c2a0815e910c 100644 (file)
@@ -126,6 +126,8 @@ DeviceV4L2Base::DeviceV4L2Base()
        qbfrs_lock = new Mutex("DeviceV4L2Base::qbfrs_lock");
        video_lock = new Condition(0, "DeviceV4L2Base::video_lock", 1);
        dev_fd = -1;
+       iwidth = 0;
+       iheight = 0;
        color_model = -1;
        device_buffers = 0;
        device_channel = 0;
@@ -302,7 +304,7 @@ int DeviceV4L2Base::v4l2_open(int color_model)
        unsigned int best_format = 0;
        int best_merit = 0;
        int best_color_model = -1;
-       int best_area = 1;
+       int best_area = INT_MAX;
        int driver = video_device->in_config->driver;
 
        for( int i=0; i<20; ++i ) {
@@ -319,15 +321,16 @@ int DeviceV4L2Base::v4l2_open(int color_model)
                int cmodel = -1;
                switch(fmt.pixelformat)
                {
-               case V4L2_PIX_FMT_UYVY:    cmodel = BC_UVY422;  merit = 4;  break;
                case V4L2_PIX_FMT_YUYV:    cmodel = BC_YUV422;  merit = 4;  break;
+               case V4L2_PIX_FMT_UYVY:    cmodel = BC_UVY422;  merit = 4;  break;
                case V4L2_PIX_FMT_Y41P:    cmodel = BC_YUV411P; merit = 1;  break;
                case V4L2_PIX_FMT_YVU420:  cmodel = BC_YUV420P; merit = 3;  break;
                case V4L2_PIX_FMT_YUV422P: cmodel = BC_YUV422P; merit = 4;  break;
                case V4L2_PIX_FMT_RGB24:   cmodel = BC_RGB888;  merit = 6;  break;
                case V4L2_PIX_FMT_MJPEG:
                        cmodel = BC_COMPRESSED;
-                       merit = driver == VIDEO4LINUX2JPEG ? 7 : 0;
+                       merit = driver == VIDEO4LINUX2JPEG ||
+                               driver == CAPTURE_JPEG_WEBCAM ? 7 : 0;
                        break;
                case V4L2_PIX_FMT_MPEG:
                        cmodel = BC_YUV420P;
@@ -352,12 +355,9 @@ int DeviceV4L2Base::v4l2_open(int color_model)
                        printf("%dx%d",w,h);
                        int area = w * h;
                        if( area > config_area ) continue;
-                       int diff0 = area - best_area;
-                       if( diff0 < 0 ) diff0 = -diff0;
-                       int diff1 = area - config_area;
-                       if( diff1 < 0 ) diff1 = -diff1;
-                       if( diff1 < diff0 ) {
-                               best_area = area;
+                       int diff = abs(area-config_area);
+                       if( diff < best_area ) {
+                               best_area = diff;
                                best_width = w;
                                best_height = h;
                        }
@@ -381,24 +381,28 @@ int DeviceV4L2Base::v4l2_open(int color_model)
                        best_format = cmodel_to_device(color_model);
                        break;
                }
-               printf(_("DeviceV4L2Base::v4l2_open "
-                       " attempting format %4.4s\n"), (char *)&best_format);
+               printf("DeviceV4L2Base::v4l2_open ");
+               printf(_(" attempting format %4.4s\n"),
+                       (char *)&best_format);
        }
        if(driver == VIDEO4LINUX2JPEG && best_format != V4L2_PIX_FMT_MJPEG)
        {
-               printf(_("DeviceV4L2Base::v4l2_open jpeg driver"
-                       " and best_format not mjpeg (%4.4s)\n"), (char *)&best_format);
+               printf("DeviceV4L2Base::v4l2_open ");
+               printf(_("jpeg driver and best_format not mjpeg (%4.4s)\n"),
+                       (char *)&best_format);
                return 1;
        }
        if(driver == VIDEO4LINUX2MPEG && best_format != V4L2_PIX_FMT_MPEG)
        {
-               printf(_("DeviceV4L2Base::v4l2_open mpeg driver"
-                       " and best_format not mpeg (%4.4s)\n"),(char *)&best_format);
+               printf("DeviceV4L2Base::v4l2_open ");
+               printf(_("mpeg driver and best_format not mpeg (%4.4s)\n"),
+                       (char *)&best_format);
                return 1;
        }
        if(config_width != best_width || config_height != best_height)
        {
-               printf(_("DeviceV4L2Base::v4l2_open  config geom %dx%d != %dx%d best_geom\n"),
+               printf("DeviceV4L2Base::v4l2_open ");
+               printf(_("config geom %dx%d != %dx%d best_geom\n"),
                        config_width, config_height, best_width, best_height);
        }
 
@@ -422,6 +426,7 @@ int DeviceV4L2Base::v4l2_open(int color_model)
                        perror("DeviceV4L2Base::v4l2_open VIDIOC_G_PARM");
        }
 
+       printf("v4l2 s_fmt %dx%d %4.4s\n", best_width, best_height, (char*)&best_format);
 // Set up data format
        struct v4l2_format v4l2_params;
        memset(&v4l2_params, 0, sizeof(v4l2_params));
@@ -443,12 +448,12 @@ int DeviceV4L2Base::v4l2_open(int color_model)
                         (char*)&v4l2_params.fmt.pix.pixelformat, (char*)&best_format);
                return 1;
        }
-       if( (int)v4l2_params.fmt.pix.width != best_width ||
-           (int)v4l2_params.fmt.pix.height != best_height )
+       iwidth = v4l2_params.fmt.pix.width;
+       iheight = v4l2_params.fmt.pix.height;
+       if( iwidth != best_width || iheight != best_height )
        {
                printf("DeviceV4L2Base::v4l2_open  set geom %dx%d != %dx%d best_geom\n",
-                       v4l2_params.fmt.pix.width, v4l2_params.fmt.pix.height,
-                       best_width, best_height);
+                       iwidth, iheight, best_width, best_height);
                return 1;
        }
 
@@ -790,8 +795,6 @@ int DeviceV4L2Base::start_dev()
        memset(device_buffers, 0, bfr_count*sizeof(device_buffers[0]));
 
 //printf("DeviceV4L2Base::start_dev color_model=%d\n", color_model);
-       int iwidth = video_device->in_config->w;
-       int iheight = video_device->in_config->h;
        int y_offset = 0, line_size = -1;
        int u_offset = 0, v_offset = 0;