From: Wim Taymans Date: Thu, 21 Aug 2008 12:12:00 +0000 (+0000) Subject: sys/v4l2/gstv4l2src.c: Add S910 and PWC formats with a low priority. X-Git-Tag: RELEASE-0_10_11~79 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=713e8000265bd190dd0940eed6889e4eb33d52e7;p=platform%2Fupstream%2Fgst-plugins-good.git sys/v4l2/gstv4l2src.c: Add S910 and PWC formats with a low priority. Original commit message from CVS: * sys/v4l2/gstv4l2src.c: (gst_v4l2src_v4l2fourcc_to_structure), (gst_v4l2_get_caps_info): Add S910 and PWC formats with a low priority. * sys/v4l2/v4l2src_calls.c: (gst_v4l2src_format_get_rank), (gst_v4l2src_probe_caps_for_format): Add more debugging. --- diff --git a/ChangeLog b/ChangeLog index d27a94e..6858b60 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2008-08-21 Wim Taymans + + * sys/v4l2/gstv4l2src.c: (gst_v4l2src_v4l2fourcc_to_structure), + (gst_v4l2_get_caps_info): + Add S910 and PWC formats with a low priority. + + * sys/v4l2/v4l2src_calls.c: (gst_v4l2src_format_get_rank), + (gst_v4l2src_probe_caps_for_format): + Add more debugging. + 2008-08-20 Tim-Philipp Müller * ext/flac/gstflacenc.c: diff --git a/sys/v4l2/gstv4l2src.c b/sys/v4l2/gstv4l2src.c index fd61242..ce93ee7 100644 --- a/sys/v4l2/gstv4l2src.c +++ b/sys/v4l2/gstv4l2src.c @@ -581,15 +581,6 @@ gst_v4l2src_v4l2fourcc_to_structure (guint32 fourcc) { GstStructure *structure = NULL; - /* FIXME: new FourCCs - camera: ZC0301 PC Camera - driver: zc0301 - BA81, S910, PWC1, PWC2 - - camera: - driver: - */ - switch (fourcc) { case V4L2_PIX_FMT_MJPEG: /* Motion-JPEG */ case V4L2_PIX_FMT_JPEG: /* JFIF JPEG */ @@ -748,9 +739,26 @@ gst_v4l2src_v4l2fourcc_to_structure (guint32 fourcc) break; case V4L2_PIX_FMT_WNVA: /* Winnov hw compres */ break; +#ifdef V4L2_PIX_FMT_SBGGR8 case V4L2_PIX_FMT_SBGGR8: structure = gst_structure_new ("video/x-raw-bayer", NULL); break; +#endif +#ifdef V4L2_PIX_FMT_SN9C10X + case V4L2_PIX_FMT_SN9C10X: + structure = gst_structure_new ("video/x-sonix", NULL); + break; +#endif +#ifdef V4L2_PIX_FMT_PWC1 + case V4L2_PIX_FMT_PWC1: + structure = gst_structure_new ("video/x-pwc1", NULL); + break; +#endif +#ifdef V4L2_PIX_FMT_PWC2 + case V4L2_PIX_FMT_PWC2: + structure = gst_structure_new ("video/x-pwc2", NULL); + break; +#endif default: GST_DEBUG ("Unknown fourcc 0x%08x %" GST_FOURCC_FORMAT, fourcc, GST_FOURCC_ARGS (fourcc)); @@ -988,8 +996,22 @@ gst_v4l2_get_caps_info (GstV4l2Src * v4l2src, GstCaps * caps, fourcc = V4L2_PIX_FMT_DV; } else if (strcmp (mimetype, "image/jpeg") == 0) { fourcc = V4L2_PIX_FMT_JPEG; +#ifdef V4L2_PIX_FMT_SBGGR8 } else if (strcmp (mimetype, "video/x-raw-bayer") == 0) { fourcc = V4L2_PIX_FMT_SBGGR8; +#endif +#ifdef V4L2_PIX_FMT_SN9C10X + } else if (strcmp (mimetype, "video/x-sonix") == 0) { + fourcc = V4L2_PIX_FMT_SN9C10X; +#endif +#ifdef V4L2_PIX_FMT_PWC1 + } else if (strcmp (mimetype, "video/x-pwc1") == 0) { + fourcc = V4L2_PIX_FMT_PWC1; +#endif +#ifdef V4L2_PIX_FMT_PWC2 + } else if (strcmp (mimetype, "video/x-pwc2") == 0) { + fourcc = V4L2_PIX_FMT_PWC2; +#endif } if (fourcc == 0) diff --git a/sys/v4l2/v4l2src_calls.c b/sys/v4l2/v4l2src_calls.c index 035c80d..f7e1705 100644 --- a/sys/v4l2/v4l2src_calls.c +++ b/sys/v4l2/v4l2src_calls.c @@ -406,7 +406,9 @@ gst_v4l2_buffer_pool_destroy (GstV4l2BufferPool * pool) #define YUV_ODD_BASE_RANK 50 #define RGB_ODD_BASE_RANK 25 #define BAYER_BASE_RANK 15 +#define S910_BASE_RANK 10 #define GREY_BASE_RANK 5 +#define PWC_BASE_RANK 1 static gint gst_v4l2src_format_get_rank (guint32 fourcc) @@ -470,6 +472,14 @@ gst_v4l2src_format_get_rank (guint32 fourcc) case V4L2_PIX_FMT_SBGGR8: return BAYER_BASE_RANK; + case V4L2_PIX_FMT_SN9C10X: + return S910_BASE_RANK; + + case V4L2_PIX_FMT_PWC1: + return PWC_BASE_RANK; + case V4L2_PIX_FMT_PWC2: + return PWC_BASE_RANK; + default: break; } @@ -770,11 +780,16 @@ gst_v4l2src_probe_caps_for_format (GstV4l2Src * v4l2src, guint32 pixelformat, size.index = 0; size.pixel_format = pixelformat; + GST_DEBUG_OBJECT (v4l2src, "Enumerating frame sizes"); + if (ioctl (fd, VIDIOC_ENUM_FRAMESIZES, &size) < 0) goto enum_framesizes_failed; if (size.type == V4L2_FRMSIZE_TYPE_DISCRETE) { do { + GST_LOG_OBJECT (v4l2src, "got discrete frame size %dx%d", + size.discrete.width, size.discrete.height); + w = MIN (size.discrete.width, G_MAXINT); h = MIN (size.discrete.height, G_MAXINT); @@ -788,7 +803,16 @@ gst_v4l2src_probe_caps_for_format (GstV4l2Src * v4l2src, guint32 pixelformat, size.index++; } while (ioctl (fd, VIDIOC_ENUM_FRAMESIZES, &size) >= 0); + GST_DEBUG_OBJECT (v4l2src, "done iterating discrete frame sizes"); } else if (size.type == V4L2_FRMSIZE_TYPE_STEPWISE) { + GST_DEBUG_OBJECT (v4l2src, "we have stepwise frame sizes:"); + GST_DEBUG_OBJECT (v4l2src, "min width: %d", size.stepwise.min_width); + GST_DEBUG_OBJECT (v4l2src, "min height: %d", size.stepwise.min_height); + GST_DEBUG_OBJECT (v4l2src, "max width: %d", size.stepwise.max_width); + GST_DEBUG_OBJECT (v4l2src, "min height: %d", size.stepwise.max_height); + GST_DEBUG_OBJECT (v4l2src, "step width: %d", size.stepwise.step_width); + GST_DEBUG_OBJECT (v4l2src, "step height: %d", size.stepwise.step_height); + for (w = size.stepwise.min_width, h = size.stepwise.min_height; w < size.stepwise.max_width && h < size.stepwise.max_height; w += size.stepwise.step_width, h += size.stepwise.step_height) { @@ -803,9 +827,16 @@ gst_v4l2src_probe_caps_for_format (GstV4l2Src * v4l2src, guint32 pixelformat, if (tmp) results = g_list_prepend (results, tmp); } + GST_DEBUG_OBJECT (v4l2src, "done iterating stepwise frame sizes"); } else if (size.type == V4L2_FRMSIZE_TYPE_CONTINUOUS) { guint32 maxw, maxh; + GST_DEBUG_OBJECT (v4l2src, "we have continuous frame sizes:"); + GST_DEBUG_OBJECT (v4l2src, "min width: %d", size.stepwise.min_width); + GST_DEBUG_OBJECT (v4l2src, "min height: %d", size.stepwise.min_height); + GST_DEBUG_OBJECT (v4l2src, "max width: %d", size.stepwise.max_width); + GST_DEBUG_OBJECT (v4l2src, "min height: %d", size.stepwise.max_height); + w = MAX (size.stepwise.min_width, 1); h = MAX (size.stepwise.min_height, 1); maxw = MIN (size.stepwise.max_width, G_MAXINT);