Index: gst-libs/gst/dshow/gstdshowfakesrc.h
===================================================================
RCS file: /cvs/gstreamer/gst-plugins-bad/gst-libs/gst/dshow/gstdshowfakesrc.h,v
retrieving revision 1.1
diff -u -r1.1 gstdshowfakesrc.h
--- gst-libs/gst/dshow/gstdshowfakesrc.h	23 May 2007 22:44:12 -0000	1.1
+++ gst-libs/gst/dshow/gstdshowfakesrc.h	4 Jul 2008 21:08:30 -0000
@@ -20,7 +20,6 @@
  */
 
 #include "gstdshowinterface.h"
-#include <gst/gst.h>
 
 class CDshowFakeOutputPin : public CBaseOutputPin
 {
Index: sys/dshowsrcwrapper/gstdshowaudiosrc.c
===================================================================
RCS file: /cvs/gstreamer/gst-plugins-bad/sys/dshowsrcwrapper/gstdshowaudiosrc.c,v
retrieving revision 1.4
diff -u -r1.4 gstdshowaudiosrc.c
--- sys/dshowsrcwrapper/gstdshowaudiosrc.c	7 Feb 2008 21:02:17 -0000	1.4
+++ sys/dshowsrcwrapper/gstdshowaudiosrc.c	4 Jul 2008 22:00:12 -0000
@@ -374,6 +374,17 @@
       }
       break;
     }
+    case PROP_DEVICE_NAME:
+    {
+      if (src->device_name) {
+        g_free (src->device_name);
+        src->device_name = NULL;
+      }
+      if (g_value_get_string (value)) {
+        src->device_name = g_strdup (g_value_get_string (value));
+      }
+      break;
+    }
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -657,7 +668,7 @@
 
         hres =
             IFilterGraph_ConnectDirect (src->filter_graph,
-            pin_mediatype->capture_pin, input_pin, NULL);
+            pin_mediatype->capture_pin, input_pin, pin_mediatype->mediatype);
         IPin_Release (input_pin);
 
         if (hres != S_OK) {
@@ -668,7 +679,16 @@
         }
 
         spec->segsize = spec->rate * spec->channels;
-        spec->segtotal = 1;
+        spec->segtotal = (gint)(spec->width * 1000000.0/spec->buffer_time);
+
+        spec->silence_sample[0] = 0;
+        spec->silence_sample[1] = 0;
+        spec->silence_sample[2] = 0;
+        spec->silence_sample[3] = 0;
+
+
+        GST_DEBUG ("segsize: %d, segtotal: %d\n", 
+          spec->segsize, spec->segtotal);
       }
     }
   }
Index: sys/dshowsrcwrapper/gstdshowvideosrc.c
===================================================================
RCS file: /cvs/gstreamer/gst-plugins-bad/sys/dshowsrcwrapper/gstdshowvideosrc.c,v
retrieving revision 1.5
diff -u -r1.5 gstdshowvideosrc.c
--- sys/dshowsrcwrapper/gstdshowvideosrc.c	11 Apr 2008 19:33:53 -0000	1.5
+++ sys/dshowsrcwrapper/gstdshowvideosrc.c	19 Jun 2008 11:17:58 -0000
@@ -48,6 +48,21 @@
         "width = (int) [ 1, MAX ],"
         "height = (int) [ 1, MAX ],"
         "framerate = (fraction) [ 0, MAX ];"
+        "video/x-raw-yuv,"
+        "width = (int) [ 1, MAX ],"
+        "height = (int) [ 1, MAX ],"
+        "framerate = (fraction) [ 0, MAX ]," 
+        "format = (fourcc) I420;"
+        "video/x-raw-yuv,"
+        "width = (int) [ 1, MAX ],"
+        "height = (int) [ 1, MAX ],"
+        "framerate = (fraction) [ 0, MAX ]," 
+        "format = (fourcc) UYVY;"
+        "video/x-raw-yuv,"
+        "width = (int) [ 1, MAX ],"
+        "height = (int) [ 1, MAX ],"
+        "framerate = (fraction) [ 0, MAX ]," 
+        "format = (fourcc) YUY2;"
         "video/x-dv,"
         "systemstream = (boolean) FALSE,"
         "width = (int) [ 1, MAX ],"
@@ -55,11 +70,7 @@
         "framerate = (fraction) [ 0, MAX ],"
         "format = (fourcc) dvsd;"
         "video/x-dv,"
-        "systemstream = (boolean) TRUE;"
-        "video/x-raw-yuv,"
-        "width = (int) [ 1, MAX ],"
-        "height = (int) [ 1, MAX ],"
-        "framerate = (fraction) [ 0, MAX ]," "format = (fourcc) I420")
+        "systemstream = (boolean) TRUE")
     );
 
 static void gst_dshowvideosrc_init_interfaces (GType type);
@@ -104,6 +115,7 @@
 static gboolean gst_dshowvideosrc_unlock_stop (GstBaseSrc * bsrc);
 static gboolean gst_dshowvideosrc_set_caps (GstBaseSrc * bsrc, GstCaps * caps);
 static GstCaps *gst_dshowvideosrc_get_caps (GstBaseSrc * bsrc);
+static void gst_dshowvideosrc_src_fixate (GstBaseSrc * bsrc, GstCaps * caps);
 static GstFlowReturn gst_dshowvideosrc_create (GstPushSrc * psrc,
     GstBuffer ** buf);
 
@@ -170,6 +182,7 @@
 
   gstbasesrc_class->get_caps = GST_DEBUG_FUNCPTR (gst_dshowvideosrc_get_caps);
   gstbasesrc_class->set_caps = GST_DEBUG_FUNCPTR (gst_dshowvideosrc_set_caps);
+  gstbasesrc_class->fixate = GST_DEBUG_FUNCPTR (gst_dshowvideosrc_src_fixate);
   gstbasesrc_class->start = GST_DEBUG_FUNCPTR (gst_dshowvideosrc_start);
   gstbasesrc_class->stop = GST_DEBUG_FUNCPTR (gst_dshowvideosrc_stop);
   gstbasesrc_class->unlock = GST_DEBUG_FUNCPTR (gst_dshowvideosrc_unlock);
@@ -186,7 +199,7 @@
   g_object_class_install_property
       (gobject_class, PROP_DEVICE_NAME,
       g_param_spec_string ("device_name", "Device name",
-          "Human-readable name of the sound device", NULL, G_PARAM_READWRITE));
+          "Human-readable name of the video device", NULL, G_PARAM_READWRITE));
 
   GST_DEBUG_CATEGORY_INIT (dshowvideosrc_debug, "dshowvideosrc", 0,
       "Directshow video source");
@@ -203,6 +216,7 @@
   src->media_filter = NULL;
   src->filter_graph = NULL;
   src->caps = NULL;
+  src->video_defaults = NULL;
   src->pins_mediatypes = NULL;
   src->is_rgb = FALSE;
 
@@ -217,6 +231,36 @@
 }
 
 static void
+gst_dshowvideosrc_src_fixate (GstBaseSrc * bsrc, GstCaps * caps)
+{ 
+  /* If there is no desired video size, set default video size to device preffered video size */
+
+  GstDshowVideoSrc *src = GST_DSHOWVIDEOSRC (bsrc);
+  GstStructure *structure = gst_caps_get_structure (caps, 0);
+  guint i = 0;
+  gint res = -1;
+
+  for (; i < gst_caps_get_size (src->caps) && res == -1; i++) {
+    GstCaps *capstmp = gst_caps_copy_nth (src->caps, i);
+
+    if (gst_caps_is_subset (caps, capstmp)) {
+      res = i;
+    }
+    gst_caps_unref (capstmp);
+  }
+
+  if (res != -1) {
+    GList *type_video_default = g_list_nth (src->video_defaults, res);
+    if (type_video_default) {
+      GstCaptureVideoDefault *video_default = (GstCaptureVideoDefault *) type_video_default->data;
+      gst_structure_fixate_field_nearest_int (structure, "width", video_default->defaultWidth);
+      gst_structure_fixate_field_nearest_int (structure, "height", video_default->defaultHeight);
+      gst_structure_fixate_field_nearest_fraction (structure, "framerate", video_default->defaultFPS, 1);
+    }
+  }
+}
+
+static void
 gst_dshowvideosrc_dispose (GObject * gobject)
 {
   GstDshowVideoSrc *src = GST_DSHOWVIDEOSRC (gobject);
@@ -235,6 +279,11 @@
     gst_caps_unref (src->caps);
     src->caps = NULL;
   }
+  
+  if (src->video_defaults) {
+    g_list_free (src->video_defaults);
+    src->video_defaults = NULL;
+  }
 
   if (src->pins_mediatypes) {
     gst_dshow_free_pins_mediatypes (src->pins_mediatypes);
@@ -694,11 +743,50 @@
       /* get the corresponding media type and build the dshow graph */
       GstCapturePinMediaType *pin_mediatype = NULL;
       gchar *caps_string = NULL;
+      gchar *src_caps_string = NULL;
       GList *type = g_list_nth (src->pins_mediatypes, res);
 
-      if (type) {
+      //will be removed when GST_TYPE_INT_RANGE_STEP exits
+      GList *type_video_default = g_list_nth (src->video_defaults, res); 
+
+      if (type && type_video_default) {
+
+        //will be removed when GST_TYPE_INT_RANGE_STEP exits
+        GstCaptureVideoDefault *video_default = (GstCaptureVideoDefault *) type_video_default->data;
+       
+        /* retrieve the desired video size */
+        VIDEOINFOHEADER *video_info = NULL;
+        gint width = 0;
+        gint height = 0;
+        gint numerator = 0;
+        gint denominator = 0;
+        gst_structure_get_int (s, "width", &width);
+        gst_structure_get_int (s, "height", &height);
+        gst_structure_get_fraction (s, "framerate", &numerator, &denominator);
+
+        /* check if the desired video size is valid about granularity  */
+		/* This check will be removed when GST_TYPE_INT_RANGE_STEP exits */
+        /* See remarks in gst_dshowvideosrc_getcaps_from_streamcaps function */
+        if (width % video_default->granularityWidth != 0)
+          g_warning ("your desired video size is not valid : %d mod %d !=0\n", width, video_default->granularityWidth) ;
+        if (height % video_default->granularityHeight != 0) 
+          g_warning ("your desired video size is not valid : %d mod %d !=0\n", height, video_default->granularityHeight) ;
+
+        /* display all capabilities when using --gst-debug-level=3 */
+        src_caps_string = gst_caps_to_string (src->caps);
+        GST_CAT_LEVEL_LOG (dshowvideosrc_debug, GST_LEVEL_INFO, src, src_caps_string);
+        g_free (src_caps_string);
+
         pin_mediatype = (GstCapturePinMediaType *) type->data;
 
+        /* update mediatype */
+        video_info = (VIDEOINFOHEADER *) pin_mediatype->mediatype->pbFormat;
+        video_info->bmiHeader.biWidth = width; 
+        video_info->bmiHeader.biHeight = height;
+        video_info->AvgTimePerFrame = (LONGLONG) (10000000 * denominator / (double)numerator);
+        video_info->bmiHeader.biSizeImage = DIBSIZE(video_info->bmiHeader);
+        pin_mediatype->mediatype->lSampleSize = DIBSIZE(video_info->bmiHeader);
+
         hres =
             IBaseFilter_QueryInterface (src->dshow_fakesink,
             &IID_IGstDshowInterface, (void **) &srcinterface);
@@ -727,9 +815,10 @@
           goto error;
         }
 
+        /* connection using the updated mediatype */
         hres =
             IFilterGraph_ConnectDirect (src->filter_graph,
-            pin_mediatype->capture_pin, input_pin, NULL);
+            pin_mediatype->capture_pin, input_pin, pin_mediatype->mediatype);
         IPin_Release (input_pin);
 
         if (hres != S_OK) {
@@ -883,6 +972,7 @@
 
   for (; i < icount; i++) {
     GstCapturePinMediaType *pin_mediatype = g_new0 (GstCapturePinMediaType, 1);
+    GstCaptureVideoDefault *video_default = g_new0 (GstCaptureVideoDefault, 1);
 
     IPin_AddRef (pin);
     pin_mediatype->capture_pin = pin;
@@ -897,6 +987,17 @@
       if (!caps)
         caps = gst_caps_new_empty ();
 
+      /* some remarks: */
+      /* Hope GST_TYPE_INT_RANGE_STEP will exits in future gstreamer releases  */
+      /* because we could use :  */
+      /* "width", GST_TYPE_INT_RANGE_STEP, video_default->minWidth, video_default->maxWidth,  video_default->granularityWidth */
+      /* instead of : */
+      /* "width", GST_TYPE_INT_RANGE, video_default->minWidth, video_default->maxWidth */
+
+      /* For framerate we do not need a step (granularity) because  */
+      /* "The IAMStreamConfig::SetFormat method will set the frame rate to the closest  */
+      /* value that the filter supports" as it said in the VIDEO_STREAM_CONFIG_CAPS dshwo doc */
+
       /* I420 */
       if ((UuidCompare (&pin_mediatype->mediatype->subtype, &MEDIASUBTYPE_I420,
                   &rpcstatus) == 0 && rpcstatus == RPC_S_OK)
@@ -905,19 +1006,99 @@
               && rpcstatus == RPC_S_OK)) {
         video_info = (VIDEOINFOHEADER *) pin_mediatype->mediatype->pbFormat;
 
+        video_default->defaultWidth = video_info->bmiHeader.biWidth;
+        video_default->defaultHeight = video_info->bmiHeader.biHeight;
+        video_default->defaultFPS = (int) (10000000 / video_info->AvgTimePerFrame);
+        video_default->granularityWidth = vscc.OutputGranularityX;
+        video_default->granularityHeight = vscc.OutputGranularityY;
+
         mediacaps = gst_caps_new_simple ("video/x-raw-yuv",
-            "width", G_TYPE_INT, video_info->bmiHeader.biWidth,
-            "height", G_TYPE_INT, video_info->bmiHeader.biHeight,
-            "framerate", GST_TYPE_FRACTION,
-            (int) (10000000 / video_info->AvgTimePerFrame), 1, "format",
-            GST_TYPE_FOURCC, MAKEFOURCC ('I', '4', '2', '0'), NULL);
+            "width", GST_TYPE_INT_RANGE, vscc.MinOutputSize.cx, vscc.MaxOutputSize.cx,
+            "height", GST_TYPE_INT_RANGE, vscc.MinOutputSize.cy, vscc.MaxOutputSize.cy,
+            "framerate", GST_TYPE_FRACTION_RANGE,
+            (int) (10000000 / vscc.MaxFrameInterval), 1,
+            (int) (10000000 / vscc.MinFrameInterval), 1,
+            "format", GST_TYPE_FOURCC, MAKEFOURCC ('I', '4', '2', '0'), NULL);
 
         if (mediacaps) {
           src->pins_mediatypes =
               g_list_append (src->pins_mediatypes, pin_mediatype);
+          src->video_defaults =
+            g_list_append (src->video_defaults, video_default);
           gst_caps_append (caps, mediacaps);
         } else {
           gst_dshow_free_pin_mediatype (pin_mediatype);
+          g_free (video_default);
+        }
+        continue;
+      }
+
+      /* UYVY */
+      if ((UuidCompare (&pin_mediatype->mediatype->subtype, &MEDIASUBTYPE_UYVY,
+                  &rpcstatus) == 0 && rpcstatus == RPC_S_OK)
+          && (UuidCompare (&pin_mediatype->mediatype->formattype,
+                  &FORMAT_VideoInfo, &rpcstatus) == 0
+              && rpcstatus == RPC_S_OK)) {
+        video_info = (VIDEOINFOHEADER *) pin_mediatype->mediatype->pbFormat;
+
+        video_default->defaultWidth = video_info->bmiHeader.biWidth;
+        video_default->defaultHeight = video_info->bmiHeader.biHeight;
+        video_default->defaultFPS = (int) (10000000 / video_info->AvgTimePerFrame);
+        video_default->granularityWidth = vscc.OutputGranularityX;
+        video_default->granularityHeight = vscc.OutputGranularityY; 
+
+        mediacaps = gst_caps_new_simple ("video/x-raw-yuv",
+            "width", GST_TYPE_INT_RANGE, vscc.MinOutputSize.cx, vscc.MaxOutputSize.cx,
+            "height", GST_TYPE_INT_RANGE, vscc.MinOutputSize.cy, vscc.MaxOutputSize.cy,
+            "framerate", GST_TYPE_FRACTION_RANGE, 
+            (int) (10000000 / vscc.MaxFrameInterval), 1,
+            (int) (10000000 / vscc.MinFrameInterval), 1,
+            "format", GST_TYPE_FOURCC, MAKEFOURCC ('U', 'Y', 'V', 'Y'), NULL);
+
+        if (mediacaps) {
+          src->pins_mediatypes =
+              g_list_append (src->pins_mediatypes, pin_mediatype);
+          src->video_defaults =
+            g_list_append (src->video_defaults, video_default);
+          gst_caps_append (caps, mediacaps);
+        } else {
+          gst_dshow_free_pin_mediatype (pin_mediatype);
+          g_free (video_default);
+        }
+        continue;
+      }
+
+      /* YUY2 */
+      if ((UuidCompare (&pin_mediatype->mediatype->subtype, &MEDIASUBTYPE_YUY2,
+                  &rpcstatus) == 0 && rpcstatus == RPC_S_OK)
+          && (UuidCompare (&pin_mediatype->mediatype->formattype,
+                  &FORMAT_VideoInfo, &rpcstatus) == 0
+              && rpcstatus == RPC_S_OK)) {
+        video_info = (VIDEOINFOHEADER *) pin_mediatype->mediatype->pbFormat;
+
+        video_default->defaultWidth = video_info->bmiHeader.biWidth;
+        video_default->defaultHeight = video_info->bmiHeader.biHeight;
+        video_default->defaultFPS = (int) (10000000 / video_info->AvgTimePerFrame);
+        video_default->granularityWidth = vscc.OutputGranularityX;
+        video_default->granularityHeight = vscc.OutputGranularityY;
+
+        mediacaps = gst_caps_new_simple ("video/x-raw-yuv",
+            "width", GST_TYPE_INT_RANGE, vscc.MinOutputSize.cx, vscc.MaxOutputSize.cx,
+            "height", GST_TYPE_INT_RANGE, vscc.MinOutputSize.cy, vscc.MaxOutputSize.cy,
+            "framerate", GST_TYPE_FRACTION_RANGE,
+            (int) (10000000 / vscc.MaxFrameInterval), 1,
+            (int) (10000000 / vscc.MinFrameInterval), 1,
+            "format", GST_TYPE_FOURCC, MAKEFOURCC ('Y', 'U', 'Y', '2'), NULL);
+
+        if (mediacaps) {
+          src->pins_mediatypes =
+              g_list_append (src->pins_mediatypes, pin_mediatype);
+          src->video_defaults =
+            g_list_append (src->video_defaults, video_default);
+          gst_caps_append (caps, mediacaps);
+        } else {
+          gst_dshow_free_pin_mediatype (pin_mediatype);
+          g_free (video_default);
         }
         continue;
       }
@@ -930,23 +1111,35 @@
               && rpcstatus == RPC_S_OK)) {
         video_info = (VIDEOINFOHEADER *) pin_mediatype->mediatype->pbFormat;
 
+        video_default->defaultWidth = video_info->bmiHeader.biWidth;
+        video_default->defaultHeight = video_info->bmiHeader.biHeight;
+        video_default->defaultFPS = (int) (10000000 / video_info->AvgTimePerFrame);
+        video_default->granularityWidth = vscc.OutputGranularityX;
+        video_default->granularityHeight = vscc.OutputGranularityY; 
+
         /* ffmpegcolorspace handles RGB24 in BIG_ENDIAN */
         mediacaps = gst_caps_new_simple ("video/x-raw-rgb",
             "bpp", G_TYPE_INT, 24,
             "depth", G_TYPE_INT, 24,
-            "width", G_TYPE_INT, video_info->bmiHeader.biWidth,
-            "height", G_TYPE_INT, video_info->bmiHeader.biHeight,
-            "framerate", GST_TYPE_FRACTION,
-            (int) (10000000 / video_info->AvgTimePerFrame), 1, "endianness",
-            G_TYPE_INT, G_BIG_ENDIAN, "red_mask", G_TYPE_INT, 255, "green_mask",
-            G_TYPE_INT, 65280, "blue_mask", G_TYPE_INT, 16711680, NULL);
+            "width", GST_TYPE_INT_RANGE, vscc.MinOutputSize.cx, vscc.MaxOutputSize.cx,
+            "height", GST_TYPE_INT_RANGE, vscc.MinOutputSize.cy, vscc.MaxOutputSize.cy,
+            "framerate", GST_TYPE_FRACTION_RANGE,
+            (int) (10000000 / vscc.MaxFrameInterval), 1,
+            (int) (10000000 / vscc.MinFrameInterval), 1,
+            "endianness", G_TYPE_INT, G_BIG_ENDIAN, 
+            "red_mask", G_TYPE_INT, 255, 
+            "green_mask", G_TYPE_INT, 65280, 
+            "blue_mask", G_TYPE_INT, 16711680, NULL);
 
         if (mediacaps) {
           src->pins_mediatypes =
               g_list_append (src->pins_mediatypes, pin_mediatype);
+          src->video_defaults =
+            g_list_append (src->video_defaults, video_default);
           gst_caps_append (caps, mediacaps);
         } else {
           gst_dshow_free_pin_mediatype (pin_mediatype);
+          g_free (video_default);
         }
         continue;
       }
@@ -959,20 +1152,30 @@
               && rpcstatus == RPC_S_OK)) {
         video_info = (VIDEOINFOHEADER *) pin_mediatype->mediatype->pbFormat;
 
+        video_default->defaultWidth = video_info->bmiHeader.biWidth;
+        video_default->defaultHeight = video_info->bmiHeader.biHeight;
+        video_default->defaultFPS = (int) (10000000 / video_info->AvgTimePerFrame);
+        video_default->granularityWidth = vscc.OutputGranularityX;
+        video_default->granularityHeight = vscc.OutputGranularityY;      
+
         mediacaps = gst_caps_new_simple ("video/x-dv",
             "systemstream", G_TYPE_BOOLEAN, FALSE,
             "format", GST_TYPE_FOURCC, GST_MAKE_FOURCC ('d', 'v', 's', 'd'),
-            "framerate", GST_TYPE_FRACTION,
-            (int) (10000000 / video_info->AvgTimePerFrame), 1, "width",
-            G_TYPE_INT, video_info->bmiHeader.biWidth, "height", G_TYPE_INT,
-            video_info->bmiHeader.biHeight, NULL);
+            "framerate", GST_TYPE_FRACTION_RANGE,
+            (int) (10000000 / vscc.MaxFrameInterval), 1,
+            (int) (10000000 / vscc.MinFrameInterval), 1, 
+            "width", GST_TYPE_INT_RANGE, vscc.MinOutputSize.cx, vscc.MaxOutputSize.cx,
+            "height", GST_TYPE_INT_RANGE, vscc.MinOutputSize.cy, vscc.MaxOutputSize.cy, NULL);
 
         if (mediacaps) {
           src->pins_mediatypes =
               g_list_append (src->pins_mediatypes, pin_mediatype);
+          src->video_defaults =
+            g_list_append (src->video_defaults, video_default);
           gst_caps_append (caps, mediacaps);
         } else {
           gst_dshow_free_pin_mediatype (pin_mediatype);
+          g_free (video_default);
         }
         continue;
       }
@@ -983,15 +1186,27 @@
           && (UuidCompare (&pin_mediatype->mediatype->formattype,
                   &FORMAT_DvInfo, &rpcstatus) == 0 && rpcstatus == RPC_S_OK)) {
 
+        video_info = (VIDEOINFOHEADER *) pin_mediatype->mediatype->pbFormat;
+
+        //No video size in caps when stream ? I do know if the following fields exist
+        video_default->defaultWidth = video_info->bmiHeader.biWidth;
+        video_default->defaultHeight = video_info->bmiHeader.biHeight;
+        video_default->defaultFPS = (int) (10000000 / video_info->AvgTimePerFrame);
+        video_default->granularityWidth = vscc.OutputGranularityX;
+        video_default->granularityHeight = vscc.OutputGranularityY;  
+
         mediacaps = gst_caps_new_simple ("video/x-dv",
             "systemstream", G_TYPE_BOOLEAN, TRUE, NULL);
 
         if (mediacaps) {
           src->pins_mediatypes =
               g_list_append (src->pins_mediatypes, pin_mediatype);
+          src->video_defaults =
+            g_list_append (src->video_defaults, video_default);
           gst_caps_append (caps, mediacaps);
         } else {
           gst_dshow_free_pin_mediatype (pin_mediatype);
+          g_free (video_default);
         }
         continue;
       }
Index: sys/dshowsrcwrapper/gstdshowvideosrc.h
===================================================================
RCS file: /cvs/gstreamer/gst-plugins-bad/sys/dshowsrcwrapper/gstdshowvideosrc.h,v
retrieving revision 1.2
diff -u -r1.2 gstdshowvideosrc.h
--- sys/dshowsrcwrapper/gstdshowvideosrc.h	11 Apr 2008 19:33:53 -0000	1.2
+++ sys/dshowsrcwrapper/gstdshowvideosrc.h	19 Jun 2008 11:17:52 -0000
@@ -40,6 +40,18 @@
 typedef struct _GstDshowVideoSrc GstDshowVideoSrc;
 typedef struct _GstDshowVideoSrcClass GstDshowVideoSrcClass;
 
+/* video default properties associated to a video format (YUY2, I420, RGB24 ...) */
+typedef struct _GstCaptureVideoDefault
+{
+  gint defaultWidth;
+  gint defaultHeight;
+  gint defaultFPS;
+
+  gint granularityWidth; //will be removed when GST_TYPE_INT_RANGE_STEP exits
+  gint granularityHeight; //will be removed when GST_TYPE_INT_RANGE_STEP exits
+
+} GstCaptureVideoDefault;
+
 struct _GstDshowVideoSrc
 {
   GstPushSrc src;
@@ -53,6 +65,9 @@
   /* list of caps created from the list of supported media types of the dshow capture filter */
   GstCaps *caps;
 
+  /* list of dshow default video properties from filter's capture pins */
+  GList *video_defaults;
+  
   /* list of dshow media types from the filter's capture pins */
   GList *pins_mediatypes;
 

