diff --git a/gst/jpegformat/gstjpegformat.c b/gst/jpegformat/gstjpegformat.c
index b410466..1faf1ce 100644
--- a/gst/jpegformat/gstjpegformat.c
+++ b/gst/jpegformat/gstjpegformat.c
@@ -30,7 +30,7 @@
 static gboolean
 plugin_init (GstPlugin * plugin)
 {
-  if (!gst_element_register (plugin, "jpegparse", GST_RANK_NONE,
+  if (!gst_element_register (plugin, "jpegparse", GST_RANK_PRIMARY,
           GST_TYPE_JPEG_PARSE))
     return FALSE;
   if (!gst_element_register (plugin, "jifmux", GST_RANK_SECONDARY,
diff --git a/gst/jpegformat/gstjpegparse.c b/gst/jpegformat/gstjpegparse.c
index 0bfdc80..b9f1853 100644
--- a/gst/jpegformat/gstjpegparse.c
+++ b/gst/jpegformat/gstjpegparse.c
@@ -151,7 +151,7 @@
 
   gst_element_class_set_static_metadata (gstelement_class,
       "JPEG stream parser",
-      "Video/Parser",
+      "Video/Parser/Codec",
       "Parse JPEG images into single-frame buffers",
       "Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>");
 
diff --git a/gst/videoparsers/gsth264parse.c b/gst/videoparsers/gsth264parse.c
index 7751ea2..ceb2f58 100644
--- a/gst/videoparsers/gsth264parse.c
+++ b/gst/videoparsers/gsth264parse.c
@@ -167,6 +167,7 @@
 
   h264parse->aud_needed = TRUE;
   h264parse->aud_insert = TRUE;
+  h264parse->caps_flag = FALSE;
 }
 
 
@@ -1835,13 +1836,21 @@
       caps = gst_caps_copy (sink_caps);
 
       /* sps should give this but upstream overrides */
-      if (s && gst_structure_has_field (s, "width"))
-        gst_structure_get_int (s, "width", &width);
+      if (s && gst_structure_has_field (s, "width")) {
+         gst_structure_get_int (s, "width", &width);
+		 if (width != h264parse->width) {
+          width = h264parse->width;
+        }
+      }
       else
         width = h264parse->width;
 
-      if (s && gst_structure_has_field (s, "height"))
-        gst_structure_get_int (s, "height", &height);
+      if (s && gst_structure_has_field (s, "height")) {
+          gst_structure_get_int (s, "height", &height);
+		  if (height != h264parse->height) {
+          height = h264parse->height;
+        }
+      }
       else
         height = h264parse->height;
 
@@ -1988,7 +1997,10 @@
         gst_buffer_replace (&h264parse->codec_data, NULL);
       }
 
-      gst_pad_set_caps (GST_BASE_PARSE_SRC_PAD (h264parse), caps);
+      if (sps && !h264parse->caps_flag) {
+        h264parse->caps_flag = TRUE;
+        gst_pad_set_caps (GST_BASE_PARSE_SRC_PAD (h264parse), caps);
+      }
     }
 
     if (src_caps)
@@ -2581,11 +2593,11 @@
   if (format == GST_H264_PARSE_FORMAT_NONE) {
     /* codec_data implies avc */
     if (codec_data_value != NULL) {
-      GST_ERROR ("video/x-h264 caps with codec_data but no stream-format=avc");
+      GST_LOG ("video/x-h264 caps with codec_data but no stream-format=avc");
       format = GST_H264_PARSE_FORMAT_AVC;
     } else {
       /* otherwise assume bytestream input */
-      GST_ERROR ("video/x-h264 caps without codec_data or stream-format");
+      GST_LOG ("video/x-h264 caps without codec_data or stream-format");
       format = GST_H264_PARSE_FORMAT_BYTE;
     }
   }
diff --git a/gst/videoparsers/gsth264parse.h b/gst/videoparsers/gsth264parse.h
index 137c2cd..997c0e3 100644
--- a/gst/videoparsers/gsth264parse.h
+++ b/gst/videoparsers/gsth264parse.h
@@ -132,6 +132,7 @@
   /* For insertion of AU Delimiter */
   gboolean aud_needed;
   gboolean aud_insert;
+  gboolean caps_flag;
 };
 
 struct _GstH264ParseClass
diff --git a/gst/videoparsers/gsth265parse.c b/gst/videoparsers/gsth265parse.c
index 775cd24..13c93ea 100644
--- a/gst/videoparsers/gsth265parse.c
+++ b/gst/videoparsers/gsth265parse.c
@@ -154,6 +154,7 @@
 gst_h265_parse_init (GstH265Parse * h265parse)
 {
   h265parse->frame_out = gst_adapter_new ();
+  h265parse->has_caps_flag = FALSE;
   gst_base_parse_set_pts_interpolation (GST_BASE_PARSE (h265parse), FALSE);
   GST_PAD_SET_ACCEPT_INTERSECT (GST_BASE_PARSE_SINK_PAD (h265parse));
   GST_PAD_SET_ACCEPT_TEMPLATE (GST_BASE_PARSE_SINK_PAD (h265parse));
@@ -1761,7 +1762,12 @@
         gst_buffer_replace (&h265parse->codec_data, NULL);
       }
 
-      gst_pad_set_caps (GST_BASE_PARSE_SRC_PAD (h265parse), caps);
+      if (h265parse->has_caps_flag == FALSE) {
+        GST_INFO_OBJECT (h265parse, "h265parse->has_caps_flag=FALSE");
+        gst_pad_set_caps (GST_BASE_PARSE_SRC_PAD (h265parse), caps);
+        h265parse->has_caps_flag = TRUE;
+      }
+
     }
 
     if (src_caps)
diff --git a/gst/videoparsers/gsth265parse.h b/gst/videoparsers/gsth265parse.h
index eb82f6f..0d6be87 100644
--- a/gst/videoparsers/gsth265parse.h
+++ b/gst/videoparsers/gsth265parse.h
@@ -86,6 +86,7 @@
   /* frame parsing */
   gint idr_pos, sei_pos;
   gboolean update_caps;
+  gboolean has_caps_flag;
   GstAdapter *frame_out;
   gboolean keyframe;
   gboolean header;
diff --git a/gst/videoparsers/gstmpeg4videoparse.c b/gst/videoparsers/gstmpeg4videoparse.c
index 38e1f45..780d2db 100644
--- a/gst/videoparsers/gstmpeg4videoparse.c
+++ b/gst/videoparsers/gstmpeg4videoparse.c
@@ -210,6 +210,7 @@
   mp4vparse->pending_key_unit_ts = GST_CLOCK_TIME_NONE;
   mp4vparse->force_key_unit_event = NULL;
   mp4vparse->discont = FALSE;
+  mp4vparse->vop_flag = FALSE;
 
   gst_buffer_replace (&mp4vparse->config, NULL);
   memset (&mp4vparse->vol, 0, sizeof (mp4vparse->vol));
@@ -338,6 +339,7 @@
       if (packet->type == GST_MPEG4_VIDEO_OBJ_PLANE) {
         GST_LOG_OBJECT (mp4vparse, "startcode is VOP");
         mp4vparse->vop_offset = packet->offset;
+		mp4vparse->vop_flag = TRUE;
       } else if (packet->type == GST_MPEG4_GROUP_OF_VOP) {
         GST_LOG_OBJECT (mp4vparse, "startcode is GOP");
       } else {
@@ -527,6 +529,7 @@
       GST_BUFFER_FLAG_SET (frame->buffer, GST_BUFFER_FLAG_DISCONT);
       mp4vparse->discont = FALSE;
     }
+	mp4vparse->vop_flag = FALSE;
     return gst_base_parse_finish_frame (parse, frame, framesize);
   }
 
@@ -540,8 +543,8 @@
   GstStructure *s = NULL;
 
   /* only update if no src caps yet or explicitly triggered */
-  if (G_LIKELY (gst_pad_has_current_caps (GST_BASE_PARSE_SRC_PAD (mp4vparse)) &&
-          !mp4vparse->update_caps))
+  if (G_LIKELY (gst_pad_has_current_caps (GST_BASE_PARSE_SRC_PAD (mp4vparse)) ||
+    !mp4vparse->update_caps || (mp4vparse->vop_flag == FALSE)))
     return;
 
   GST_LOG_OBJECT (mp4vparse, "Updating caps");
@@ -641,7 +644,7 @@
   else
     GST_BUFFER_FLAG_SET (buffer, GST_BUFFER_FLAG_DELTA_UNIT);
 
-  if (G_UNLIKELY (mp4vparse->drop && !mp4vparse->config)) {
+  if (G_UNLIKELY (mp4vparse->drop && !mp4vparse->config && (mp4vparse->vop_flag == FALSE))) {
     GST_LOG_OBJECT (mp4vparse, "dropping frame as no config yet");
     return GST_BASE_PARSE_FLOW_DROPPED;
   } else
diff --git a/gst/videoparsers/gstmpeg4videoparse.h b/gst/videoparsers/gstmpeg4videoparse.h
index 149289a..73e4407 100644
--- a/gst/videoparsers/gstmpeg4videoparse.h
+++ b/gst/videoparsers/gstmpeg4videoparse.h
@@ -54,6 +54,7 @@
   gboolean config_found;
   gboolean update_caps;
   gboolean sent_codec_tag;
+  gboolean vop_flag;
 
   GstMpeg4VisualObject vo;
   gint vo_offset;
diff --git a/gst/videoparsers/gstmpegvideoparse.c b/gst/videoparsers/gstmpegvideoparse.c
index 6896339..6547517 100644
--- a/gst/videoparsers/gstmpegvideoparse.c
+++ b/gst/videoparsers/gstmpegvideoparse.c
@@ -561,10 +561,10 @@
         ret = FALSE;
       } else {
         /* TSN is stored in first 10 bits */
-        int tsn = info->data[off] << 2 | (info->data[off + 1] & 0xC0) >> 6;
+        //int tsn = info->data[off] << 2 | (info->data[off + 1] & 0xC0) >> 6;
 
-        if (tsn == mpvparse->pichdr.tsn)        /* prevent termination if TSN is same */
-          ret = FALSE;
+        //if (tsn == mpvparse->pichdr.tsn)        /* prevent termination if TSN is same */
+        //  ret = FALSE;
       }
     }
   }
@@ -731,12 +731,18 @@
 {
   GstCaps *caps = NULL;
   GstStructure *s = NULL;
+  static gboolean is_first_in=TRUE;
 
   /* only update if no src caps yet or explicitly triggered */
   if (G_LIKELY (gst_pad_has_current_caps (GST_BASE_PARSE_SRC_PAD (mpvparse)) &&
           !mpvparse->update_caps))
     return;
 
+  if (!is_first_in) {
+    return;
+  }
+  is_first_in = FALSE;
+
   /* carry over input caps as much as possible; override with our own stuff */
   caps = gst_pad_get_current_caps (GST_BASE_PARSE_SINK_PAD (mpvparse));
   if (caps) {
@@ -758,24 +764,12 @@
       "parsed", G_TYPE_BOOLEAN, TRUE, NULL);
 
   if (mpvparse->sequencehdr.width > 0 && mpvparse->sequencehdr.height > 0) {
-    GstMpegVideoSequenceDisplayExt *seqdispext;
+
     gint width, height;
 
     width = mpvparse->sequencehdr.width;
     height = mpvparse->sequencehdr.height;
 
-    if (mpvparse->config_flags & FLAG_SEQUENCE_DISPLAY_EXT) {
-      seqdispext = &mpvparse->sequencedispext;
-
-      if (seqdispext->display_horizontal_size <= width
-          && seqdispext->display_vertical_size <= height) {
-        width = seqdispext->display_horizontal_size;
-        height = seqdispext->display_vertical_size;
-        GST_INFO_OBJECT (mpvparse,
-            "stream has display extension: display_width=%d display_height=%d",
-            width, height);
-      }
-    }
     gst_caps_set_simple (caps, "width", G_TYPE_INT, width,
         "height", G_TYPE_INT, height, NULL);
   }
@@ -927,6 +921,61 @@
 }
 
 static GstFlowReturn
+gst_mpegv_parse_frame_max_slice_no (const GstBuffer * buf, guint * max_slice_no)
+{
+  GstFlowReturn ret = GST_FLOW_OK;
+  GstBuffer *buffer = buf;
+  GstMapInfo map;
+  guint8 *data = NULL;
+  size_t size = 0;
+  size_t offset = 0;
+  guint max_no = 0;
+
+  gst_buffer_map (buffer, &map, GST_MAP_READ);
+  data = map.data;
+  size = map.size;
+
+  for (offset=0; offset + 3 < size; offset++) {
+    if (!memcmp(data+offset, "\x00\x00\x01", 3)) {
+      guint currentStartCode = data[offset+3];
+
+      if ((currentStartCode <= GST_MPEG_VIDEO_PACKET_SLICE_MAX) && (currentStartCode > max_no)) {
+        max_no = currentStartCode;
+      }
+    }
+  }
+
+  gst_buffer_unmap (buffer, &map);
+
+  *max_slice_no = max_no;
+  return ret;
+}
+
+static gboolean
+gst_mpegv_parse_frame_is_invalid (GstBaseParse * parse, GstBaseParseFrame * frame)
+{
+  GstMpegvParse *mpvparse = GST_MPEGVIDEO_PARSE (parse);
+  GstBuffer *buffer = frame->buffer;
+  static guint preFrameMaxSliceNo = 0;
+  guint curFrameMaxSliceNo = 0;
+  static gboolean shouldDrop = FALSE;
+
+  if (G_UNLIKELY (mpvparse->pichdr.pic_type != GST_MPEG_VIDEO_PICTURE_TYPE_I)) {
+    return shouldDrop;
+  }
+
+  gst_mpegv_parse_frame_max_slice_no (buffer, &curFrameMaxSliceNo);
+  if ((curFrameMaxSliceNo + 13) <= preFrameMaxSliceNo) {
+    shouldDrop = TRUE;
+  } else {
+    shouldDrop = FALSE;
+  }
+
+  preFrameMaxSliceNo = curFrameMaxSliceNo;
+  return shouldDrop;
+}
+
+static GstFlowReturn
 gst_mpegv_parse_pre_push_frame (GstBaseParse * parse, GstBaseParseFrame * frame)
 {
   GstMpegvParse *mpvparse = GST_MPEGVIDEO_PARSE (parse);
@@ -939,6 +988,16 @@
   GstMpegVideoPictureExt *pic_ext = NULL;
   GstMpegVideoQuantMatrixExt *quant_ext = NULL;
 
+  if (gst_mpegv_parse_frame_is_invalid (parse, frame)) {
+    frame->flags |= GST_BASE_PARSE_FRAME_FLAG_DROP;
+    return GST_FLOW_OK;
+  }
+
+  GstBuffer *buffer = frame->buffer;
+  if (!GST_BUFFER_PTS_IS_VALID (buffer)) {
+    GST_BUFFER_PTS (buffer) = GST_BUFFER_DTS (buffer);
+  }
+
   /* tag sending done late enough in hook to ensure pending events
    * have already been sent */
 
