diff --git a/sys/winks/gstksvideodevice.c b/sys/winks/gstksvideodevice.c
index db04d52..5eb5baf 100644
--- a/sys/winks/gstksvideodevice.c
+++ b/sys/winks/gstksvideodevice.c
@@ -77,6 +77,7 @@ typedef struct
   guint fps_d;
   guint8 *rgb_swap_buf;
   gboolean is_mjpeg;
+  gboolean is_stream;
 
   HANDLE pin_handle;
 
@@ -391,6 +392,7 @@ gst_ks_video_device_open (GstKsVideoDevice * self)
   return TRUE;
 
 error:
+  GST_ERROR("error code:0x%x",GetLastError());
   g_free (priv->dev_path);
   priv->dev_path = NULL;
 
@@ -662,7 +664,7 @@ gst_ks_video_device_set_caps (GstKsVideoDevice * self, GstCaps * caps)
 
   /* State to be committed on success */
   KsVideoMediaType *media_type = NULL;
-  guint width, height, fps_n, fps_d;
+  guint width=0, height=0, fps_n=1, fps_d=1;
   HANDLE pin_handle = INVALID_HANDLE_VALUE;
 
   /* Reset? */
@@ -685,9 +687,9 @@ gst_ks_video_device_set_caps (GstKsVideoDevice * self, GstCaps * caps)
     goto error;
   }
 
+  /* find matching caps */
   for (cur = priv->media_types; cur != NULL; cur = cur->next) {
     KsVideoMediaType *mt = cur->data;
-
     if (gst_caps_is_subset (caps, mt->translated_caps)) {
       media_type = ks_video_media_type_dup (mt);
       break;
@@ -698,11 +700,16 @@ gst_ks_video_device_set_caps (GstKsVideoDevice * self, GstCaps * caps)
     goto error;
 
   s = gst_caps_get_structure (caps, 0);
+  
   if (!gst_structure_get_int (s, "width", &width) ||
       !gst_structure_get_int (s, "height", &height) ||
       !gst_structure_get_fraction (s, "framerate", &fps_n, &fps_d)) {
-    GST_ERROR ("Failed to get width/height/fps");
-    goto error;
+          /*system stream does not need w,h,fps*/
+        gst_structure_get_boolean(s,"systemstream",&priv->is_stream);
+        if (!priv->is_stream){
+            GST_ERROR ("Failed to get width/height/fps");
+            goto error;
+        }
   }
 
   if (!ks_video_fixate_media_type (media_type->range,
@@ -871,7 +878,9 @@ gst_ks_video_device_request_frame (GstKsVideoDevice * self, ReadRequest * req,
   params = &req->params;
   memset (params, 0, sizeof (KSSTREAM_READ_PARAMS));
 
-  params->header.Size = sizeof (KSSTREAM_HEADER) + sizeof (KS_FRAME_INFO);
+  params->header.Size = sizeof (KSSTREAM_HEADER) ;
+  if (!priv->is_stream)
+      params->header.Size += sizeof (KS_FRAME_INFO);
   params->header.PresentationTime.Numerator = 1;
   params->header.PresentationTime.Denominator = 1;
   params->header.FrameExtent = gst_ks_video_device_get_frame_size (self);
@@ -1142,3 +1151,10 @@ gst_ks_video_device_cancel_stop (GstKsVideoDevice * self)
 
   ResetEvent (priv->cancel_event);
 }
+
+gboolean 
+gst_ks_video_device_is_stream (GstKsVideoDevice * self)
+{
+    GstKsVideoDevicePrivate *priv = GST_KS_VIDEO_DEVICE_GET_PRIVATE (self);
+    return priv->is_stream;
+}
\ No newline at end of file
diff --git a/sys/winks/gstksvideodevice.h b/sys/winks/gstksvideodevice.h
index 99024e1..aa878b2 100644
--- a/sys/winks/gstksvideodevice.h
+++ b/sys/winks/gstksvideodevice.h
@@ -60,6 +60,8 @@ GstCaps * gst_ks_video_device_get_available_caps (GstKsVideoDevice * self);
 gboolean gst_ks_video_device_has_caps (GstKsVideoDevice * self);
 gboolean gst_ks_video_device_set_caps (GstKsVideoDevice * self, GstCaps * caps);
 
+gboolean gst_ks_video_device_is_stream (GstKsVideoDevice * self);
+
 gboolean gst_ks_video_device_set_state (GstKsVideoDevice * self, KSSTATE state);
 
 guint gst_ks_video_device_get_frame_size (GstKsVideoDevice * self);
diff --git a/sys/winks/gstksvideosrc.c b/sys/winks/gstksvideosrc.c
index ed19162..66fbd25 100644
--- a/sys/winks/gstksvideosrc.c
+++ b/sys/winks/gstksvideosrc.c
@@ -758,95 +758,101 @@ gst_ks_video_src_timestamp_buffer (GstKsVideoSrc * self, GstBuffer * buf,
     GstClockTime presentation_time)
 {
   GstKsVideoSrcPrivate *priv = GST_KS_VIDEO_SRC_GET_PRIVATE (self);
-  GstClockTime duration;
+  GstClockTime duration=GST_CLOCK_TIME_NONE;
   GstClock *clock;
-  GstClockTime timestamp;
-
-  duration = gst_ks_video_device_get_duration (priv->device);
-
-  GST_OBJECT_LOCK (self);
-  clock = GST_ELEMENT_CLOCK (self);
-  if (clock != NULL) {
-    gst_object_ref (clock);
-    timestamp = GST_ELEMENT (self)->base_time;
-
-    if (GST_CLOCK_TIME_IS_VALID (presentation_time)) {
-      if (presentation_time > GST_ELEMENT (self)->base_time)
-        presentation_time -= GST_ELEMENT (self)->base_time;
-      else
-        presentation_time = 0;
-    }
-  } else {
-    timestamp = GST_CLOCK_TIME_NONE;
-  }
-  GST_OBJECT_UNLOCK (self);
-
-  if (clock != NULL) {
-
-    /* The time according to the current clock */
-    timestamp = gst_clock_get_time (clock) - timestamp;
-    if (timestamp > duration)
-      timestamp -= duration;
-    else
-      timestamp = 0;
-
-    if (GST_CLOCK_TIME_IS_VALID (presentation_time)) {
-      /*
-       * We don't use this for anything yet, need to ponder how to deal
-       * with pins that use an internal clock and timestamp from 0.
-       */
-      GstClockTimeDiff diff = GST_CLOCK_DIFF (presentation_time, timestamp);
-      GST_DEBUG_OBJECT (self, "diff between gst and driver timestamp: %"
-          G_GINT64_FORMAT, diff);
-    }
-
-    gst_object_unref (clock);
-    clock = NULL;
-
-    /* Unless it's the first frame, align the current timestamp on a multiple
-     * of duration since the previous */
-    if (GST_CLOCK_TIME_IS_VALID (priv->prev_ts)) {
-      GstClockTime delta;
-      guint delta_remainder, delta_offset;
-
-      /* REVISIT: I've seen this happen with the GstSystemClock on Windows,
-       *          scary... */
-      if (timestamp < priv->prev_ts) {
-        GST_WARNING_OBJECT (self, "clock is ticking backwards");
-        return FALSE;
+  GstClockTime timestamp=GST_CLOCK_TIME_NONE;
+
+  /*skip timestamping for stream type, because we don't now the exact timing yet
+    so leave this to the demuxer 
+  */
+  if (!gst_ks_video_device_is_stream(priv->device)){
+      duration = gst_ks_video_device_get_duration (priv->device);
+
+      GST_OBJECT_LOCK (self);
+      clock = GST_ELEMENT_CLOCK (self);
+      if (clock != NULL) {
+        gst_object_ref (clock);
+        timestamp = GST_ELEMENT (self)->base_time;
+
+        if (GST_CLOCK_TIME_IS_VALID (presentation_time)) {
+          if (presentation_time > GST_ELEMENT (self)->base_time)
+            presentation_time -= GST_ELEMENT (self)->base_time;
+          else
+            presentation_time = 0;
+        }
+      } else {
+        timestamp = GST_CLOCK_TIME_NONE;
       }
-
-      /* Round to a duration boundary */
-      delta = timestamp - priv->prev_ts;
-      delta_remainder = delta % duration;
-
-      if (delta_remainder < duration / 3)
-        timestamp -= delta_remainder;
-      else
-        timestamp += duration - delta_remainder;
-
-      /* How many frames are we off then? */
-      delta = timestamp - priv->prev_ts;
-      delta_offset = delta / duration;
-
-      if (delta_offset == 1)    /* perfect */
-        GST_BUFFER_FLAG_UNSET (buf, GST_BUFFER_FLAG_DISCONT);
-      else if (delta_offset > 1) {
-        guint lost = delta_offset - 1;
-        GST_INFO_OBJECT (self, "lost %d frame%s, setting discont flag",
-            lost, (lost > 1) ? "s" : "");
-        GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_DISCONT);
-      } else if (delta_offset == 0) {   /* overproduction, skip this frame */
-        GST_INFO_OBJECT (self, "skipping frame");
-        return FALSE;
+      GST_OBJECT_UNLOCK (self);
+
+      if (clock != NULL) {
+
+        /* The time according to the current clock */
+        timestamp = gst_clock_get_time (clock) - timestamp;
+        if (timestamp > duration)
+          timestamp -= duration;
+        else
+          timestamp = 0;
+
+        if (GST_CLOCK_TIME_IS_VALID (presentation_time)) {
+          /*
+           * We don't use this for anything yet, need to ponder how to deal
+           * with pins that use an internal clock and timestamp from 0.
+           */
+          GstClockTimeDiff diff = GST_CLOCK_DIFF (presentation_time, timestamp);
+          GST_DEBUG_OBJECT (self, "diff between gst and driver timestamp: %"
+              G_GINT64_FORMAT, diff);
+        }
+
+        gst_object_unref (clock);
+        clock = NULL;
+
+        /* Unless it's the first frame, align the current timestamp on a multiple
+         * of duration since the previous */
+        if (GST_CLOCK_TIME_IS_VALID (priv->prev_ts)) {
+          GstClockTime delta;
+          guint delta_remainder, delta_offset;
+
+          /* REVISIT: I've seen this happen with the GstSystemClock on Windows,
+           *          scary... */
+          if (timestamp < priv->prev_ts) {
+            GST_WARNING_OBJECT (self, "clock is ticking backwards");
+            return FALSE;
+          }
+
+          /* Round to a duration boundary */
+          delta = timestamp - priv->prev_ts;
+          delta_remainder = delta % duration;
+
+          if (delta_remainder < duration / 3)
+            timestamp -= delta_remainder;
+          else
+            timestamp += duration - delta_remainder;
+
+          /* How many frames are we off then? */
+          delta = timestamp - priv->prev_ts;
+          delta_offset = delta / duration;
+
+          if (delta_offset == 1)    /* perfect */
+            GST_BUFFER_FLAG_UNSET (buf, GST_BUFFER_FLAG_DISCONT);
+          else if (delta_offset > 1) {
+            guint lost = delta_offset - 1;
+            GST_INFO_OBJECT (self, "lost %d frame%s, setting discont flag",
+                lost, (lost > 1) ? "s" : "");
+            GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_DISCONT);
+          } else if (delta_offset == 0) {   /* overproduction, skip this frame */
+            GST_INFO_OBJECT (self, "skipping frame");
+            return FALSE;
+          }
+
+          priv->offset += delta_offset;
+        }
+
+        priv->prev_ts = timestamp;
       }
-
-      priv->offset += delta_offset;
-    }
-
-    priv->prev_ts = timestamp;
+  }else{
+      priv->offset++;
   }
-
   GST_BUFFER_OFFSET (buf) = priv->offset;
   GST_BUFFER_OFFSET_END (buf) = GST_BUFFER_OFFSET (buf) + 1;
   GST_BUFFER_TIMESTAMP (buf) = timestamp;
diff --git a/sys/winks/kshelpers.c b/sys/winks/kshelpers.c
index 6f61408..680e486 100644
--- a/sys/winks/kshelpers.c
+++ b/sys/winks/kshelpers.c
@@ -16,7 +16,6 @@
  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  * Boston, MA 02111-1307, USA.
  */
-
 #include "kshelpers.h"
 
 #include <ksmedia.h>
@@ -469,3 +468,5 @@ ks_property_set_to_string (const GUID * guid)
       guid->Data4[2], guid->Data4[3], guid->Data4[4], guid->Data4[5],
       guid->Data4[6], guid->Data4[7]);
 }
+
+EXTERN_C const GUID DECLSPEC_SELECTANY KSPROPSETID_MemoryTransport={STATIC_KSPROPSETID_MemoryTransport} ;
\ No newline at end of file
diff --git a/sys/winks/ksvideohelpers.c b/sys/winks/ksvideohelpers.c
index e85b05f..8163116 100644
--- a/sys/winks/ksvideohelpers.c
+++ b/sys/winks/ksvideohelpers.c
@@ -127,16 +127,21 @@ ks_video_format_to_structure (GUID subtype_guid, GUID format_guid)
         "blue_mask", G_TYPE_INT, b_mask,
         "endianness", G_TYPE_INT, endianness, NULL);
   } else if (IsEqualGUID (&subtype_guid, &MEDIASUBTYPE_dvsd)) {
-    if (IsEqualGUID (&format_guid, &FORMAT_DvInfo)) {
+    if (IsEqualGUID (&format_guid, &FORMAT_DvInfo)
+        || IsEqualGUID (&format_guid, &MEDIATYPE_Video)) {
       structure = gst_structure_new ("video/x-dv",
           "systemstream", G_TYPE_BOOLEAN, TRUE, NULL);
-    } else if (IsEqualGUID (&format_guid, &FORMAT_VideoInfo)) {
+    } else if (IsEqualGUID (&format_guid, &FORMAT_VideoInfo)){
       structure = gst_structure_new ("video/x-dv",
           "systemstream", G_TYPE_BOOLEAN, FALSE,
           "format", GST_TYPE_FOURCC, GST_MAKE_FOURCC ('d', 'v', 's', 'd'),
           NULL);
     }
-  } else if (memcmp (&subtype_guid.Data2, &MEDIASUBTYPE_FOURCC.Data2,
+  } else if (IsEqualGUID (&subtype_guid, &MEDIASUBTYPE_MPEG2_TRANSPORT_STRIDE)
+            || IsEqualGUID (&subtype_guid, &MEDIASUBTYPE_MPEG2_TRANSPORT)) {
+      structure = gst_structure_new ("video/mpegts",
+          "systemstream", G_TYPE_BOOLEAN, TRUE, NULL);
+  }else if (memcmp (&subtype_guid.Data2, &MEDIASUBTYPE_FOURCC.Data2,
           sizeof (subtype_guid) - sizeof (subtype_guid.Data1)) == 0) {
     guint8 *p = (guint8 *) & subtype_guid.Data1;
 
@@ -337,7 +342,8 @@ ks_video_probe_filter_for_caps (HANDLE filter_handle)
         guint i;
 
         for (i = 0; i < items->Count; i++) {
-          if (IsEqualGUID (&range->MajorFormat, &KSDATAFORMAT_TYPE_VIDEO)) {
+          if (IsEqualGUID (&range->MajorFormat, &KSDATAFORMAT_TYPE_VIDEO )
+           || IsEqualGUID (&range->MajorFormat, &KSDATAFORMAT_TYPE_STREAM)){
             KsVideoMediaType *entry;
             gpointer src_vscc, src_format;
             GstStructure *media_structure;
@@ -348,75 +354,116 @@ ks_video_probe_filter_for_caps (HANDLE filter_handle)
             entry->range = g_malloc (range->FormatSize);
             memcpy ((gpointer) entry->range, range, range->FormatSize);
 
-            if (IsEqualGUID (&range->Specifier, &FORMAT_VideoInfo)) {
-              KS_DATARANGE_VIDEO *vr = (KS_DATARANGE_VIDEO *) entry->range;
-
-              src_vscc = &vr->ConfigCaps;
-              src_format = &vr->VideoInfoHeader;
-
-              entry->format_size = sizeof (vr->VideoInfoHeader);
-              entry->sample_size = vr->VideoInfoHeader.bmiHeader.biSizeImage;
-            } else if (IsEqualGUID (&range->Specifier, &FORMAT_VideoInfo2)) {
-              KS_DATARANGE_VIDEO2 *vr = (KS_DATARANGE_VIDEO2 *) entry->range;
-
-              src_vscc = &vr->ConfigCaps;
-              src_format = &vr->VideoInfoHeader;
-
-              entry->format_size = sizeof (vr->VideoInfoHeader);
-              entry->sample_size = vr->VideoInfoHeader.bmiHeader.biSizeImage;
-            } else if (IsEqualGUID (&range->Specifier, &FORMAT_MPEGVideo)) {
-              /* Untested and probably wrong... */
-              KS_DATARANGE_MPEG1_VIDEO *vr =
-                  (KS_DATARANGE_MPEG1_VIDEO *) entry->range;
-
-              src_vscc = &vr->ConfigCaps;
-              src_format = &vr->VideoInfoHeader;
-
-              entry->format_size = sizeof (vr->VideoInfoHeader);
-              entry->sample_size =
-                  vr->VideoInfoHeader.hdr.bmiHeader.biSizeImage;
-            } else if (IsEqualGUID (&range->Specifier, &FORMAT_MPEG2Video)) {
-              /* Untested and probably wrong... */
-              KS_DATARANGE_MPEG2_VIDEO *vr =
-                  (KS_DATARANGE_MPEG2_VIDEO *) entry->range;
-
-              src_vscc = &vr->ConfigCaps;
-              src_format = &vr->VideoInfoHeader;
-
-              entry->format_size = sizeof (vr->VideoInfoHeader);
-              entry->sample_size =
-                  vr->VideoInfoHeader.hdr.bmiHeader.biSizeImage;
-            } else
-              g_assert_not_reached ();
-
-            g_assert (entry->sample_size != 0);
-
-            memcpy ((gpointer) & entry->vscc, src_vscc, sizeof (entry->vscc));
-
-            entry->format = g_malloc (entry->format_size);
-            memcpy (entry->format, src_format, entry->format_size);
-
-            media_structure =
-                ks_video_format_to_structure (range->SubFormat,
-                range->MajorFormat);
-
-            if (media_structure == NULL) {
-              g_warning ("ks_video_format_to_structure returned NULL");
-              ks_video_media_type_free (entry);
-              entry = NULL;
-            } else if (ks_video_append_video_stream_cfg_fields (media_structure,
-                    &entry->vscc)) {
-              entry->translated_caps = gst_caps_new_empty ();
-              gst_caps_append_structure (entry->translated_caps,
-                  media_structure);
-            } else {
-              gst_structure_free (media_structure);
-              ks_video_media_type_free (entry);
-              entry = NULL;
+            if (IsEqualGUID (&range->MajorFormat, &KSDATAFORMAT_TYPE_STREAM)) {
+                gint packet_size=0;
+                if (IsEqualGUID (&range->SubFormat,&MEDIASUBTYPE_MPEG2_TRANSPORT_STRIDE)){  
+                    packet_size=188;
+                    if(!IsEqualGUID(&range->Specifier,&FORMAT_None)){
+                        MPEG2_TRANSPORT_STRIDE
+                            *info=(MPEG2_TRANSPORT_STRIDE *) (entry->range + 1);
+                        src_format = info;
+                        packet_size=info->dwStride;
+                    }
+                    entry->format_size = entry->range->FormatSize-sizeof (KSDATAFORMAT);
+                    entry->sample_size = entry->range->SampleSize;
+                    entry->format = g_malloc (entry->format_size);
+                    memcpy (entry->format, src_format,entry->format_size);
+                }else if (IsEqualGUID (&range->SubFormat,&KSDATAFORMAT_TYPE_MPEG2_TRANSPORT)){
+                    packet_size=188;
+                    //src_format=(entry->range + 1);
+                    //entry->format_size = entry->range->FormatSize-sizeof (KSDATAFORMAT);
+                    entry->sample_size = entry->range->SampleSize;
+                    //entry->format = g_malloc (entry->format_size);
+                    //memcpy (entry->format, src_format,entry->format_size);
+                    
+                }else {
+                    GST_ERROR("unknown stream type");
+                }
+                media_structure =
+                        ks_video_format_to_structure (range->SubFormat,
+                        range->MajorFormat);
+                if (media_structure == NULL) {
+                  GST_WARNING ("ks_video_format_to_structure returned NULL");
+                  ks_video_media_type_free (entry);
+                  entry = NULL;
+                }else{
+                  if (packet_size){
+                        gst_structure_set (media_structure,
+                            "packetsize", G_TYPE_INT, packet_size, NULL);
+                  }
+                  entry->translated_caps = gst_caps_new_empty ();
+                  gst_caps_append_structure (entry->translated_caps, media_structure);
+                }
+                //ret = g_list_prepend (ret, entry);
+            }else{
+                  if (IsEqualGUID (&range->Specifier, &FORMAT_VideoInfo)) {
+                  KS_DATARANGE_VIDEO *vr = (KS_DATARANGE_VIDEO *) entry->range;
+
+                  src_vscc = &vr->ConfigCaps;
+                  src_format = &vr->VideoInfoHeader;
+
+                  entry->format_size = sizeof (vr->VideoInfoHeader);
+                  entry->sample_size = vr->VideoInfoHeader.bmiHeader.biSizeImage;
+                } else if (IsEqualGUID (&range->Specifier, &FORMAT_VideoInfo2)) {
+                  KS_DATARANGE_VIDEO2 *vr = (KS_DATARANGE_VIDEO2 *) entry->range;
+
+                  src_vscc = &vr->ConfigCaps;
+                  src_format = &vr->VideoInfoHeader;
+
+                  entry->format_size = sizeof (vr->VideoInfoHeader);
+                  entry->sample_size = vr->VideoInfoHeader.bmiHeader.biSizeImage;
+                } else if (IsEqualGUID (&range->Specifier, &FORMAT_MPEGVideo)) {
+                  /* Untested and probably wrong... */
+                  KS_DATARANGE_MPEG1_VIDEO *vr =
+                      (KS_DATARANGE_MPEG1_VIDEO *) entry->range;
+
+                  src_vscc = &vr->ConfigCaps;
+                  src_format = &vr->VideoInfoHeader;
+
+                  entry->format_size = sizeof (vr->VideoInfoHeader);
+                  entry->sample_size =
+                      vr->VideoInfoHeader.hdr.bmiHeader.biSizeImage;
+                } else if (IsEqualGUID (&range->Specifier, &FORMAT_MPEG2Video)) {
+                  /* Untested and probably wrong... */
+                  KS_DATARANGE_MPEG2_VIDEO *vr =
+                      (KS_DATARANGE_MPEG2_VIDEO *) entry->range;
+
+                  src_vscc = &vr->ConfigCaps;
+                  src_format = &vr->VideoInfoHeader;
+
+                  entry->format_size = sizeof (vr->VideoInfoHeader);
+                  entry->sample_size =
+                      vr->VideoInfoHeader.hdr.bmiHeader.biSizeImage;
+                }else
+                    g_assert_not_reached();
+                g_assert (entry->sample_size != 0);
+
+                memcpy ((gpointer) & entry->vscc, src_vscc, sizeof (entry->vscc));
+
+                entry->format = g_malloc (entry->format_size);
+                memcpy (entry->format, src_format, entry->format_size);
+            
+                media_structure =
+                    ks_video_format_to_structure (range->SubFormat,
+                    range->MajorFormat);
+
+                if (media_structure == NULL) {
+                  g_warning ("ks_video_format_to_structure returned NULL");
+                  ks_video_media_type_free (entry);
+                  entry = NULL;
+                } else if (ks_video_append_video_stream_cfg_fields (media_structure,
+                        &entry->vscc)) {
+                  entry->translated_caps = gst_caps_new_empty ();
+                  gst_caps_append_structure (entry->translated_caps,
+                      media_structure);
+                } else {
+                  gst_structure_free (media_structure);
+                  ks_video_media_type_free (entry);
+                  entry = NULL;
+                }
             }
-
             if (entry != NULL)
-              ret = g_list_prepend (ret, entry);
+                  ret = g_list_prepend (ret, entry);
           }
 
           /* REVISIT: Each KSDATARANGE should start on a 64-bit boundary */
@@ -476,6 +523,10 @@ ks_video_fixate_media_type (const KSDATARANGE * range,
 {
   DWORD dwRate = (width * height * fps_n) / fps_d;
 
+  if (IsEqualGUID (&range->MajorFormat, &MEDIATYPE_Stream)) {
+    return TRUE;
+  }
+
   g_return_val_if_fail (format != NULL, FALSE);
 
   if (IsEqualGUID (&range->Specifier, &FORMAT_VideoInfo)) {
@@ -514,7 +565,7 @@ ks_video_fixate_media_type (const KSDATARANGE * range,
     /* FIXME: set height and width? */
     g_assert (vih->hdr.bmiHeader.biWidth == width);
     g_assert (vih->hdr.bmiHeader.biHeight == height);
-  } else {
+  }else {
     return FALSE;
   }
 
@@ -585,6 +636,10 @@ ks_video_get_all_caps (void)
     structure =                 /* no variable video fields (width, height, framerate) */
         ks_video_format_to_structure (MEDIASUBTYPE_dvsd, FORMAT_DvInfo);
     gst_caps_append_structure (caps, structure);
+    
+    structure =                 
+        ks_video_format_to_structure (MEDIASUBTYPE_MPEG2_TRANSPORT_STRIDE, GUID_NULL);
+    gst_caps_append_structure (caps, structure);
   }
 
   return caps;
diff --git a/sys/winks/ksvideohelpers.h b/sys/winks/ksvideohelpers.h
index 7be539a..5d06664 100644
--- a/sys/winks/ksvideohelpers.h
+++ b/sys/winks/ksvideohelpers.h
@@ -25,6 +25,8 @@
 #include <windows.h>
 #include <ks.h>
 #include <ksmedia.h>
+#include <bdatypes.h>
+#include <bdamedia.h>
 
 G_BEGIN_DECLS
 
