From: Arnaud Vrac <avrac@freebox.fr>
Date: Wed, 23 Jan 2013 23:39:24 +0100
Subject: mpeg4videoparse: always parse config when visual starts


diff --git a/gst/videoparsers/gstmpeg4videoparse.c b/gst/videoparsers/gstmpeg4videoparse.c
--- a/gst/videoparsers/gstmpeg4videoparse.c
+++ b/gst/videoparsers/gstmpeg4videoparse.c
@@ -196,7 +196,6 @@ gst_mpeg4vparse_reset_frame (GstMpeg4VParse * mp4vparse)
   mp4vparse->last_sc = -1;
   mp4vparse->vop_offset = -1;
   mp4vparse->vo_found = FALSE;
-  mp4vparse->config_found = FALSE;
   mp4vparse->vol_offset = -1;
   mp4vparse->vo_offset = -1;
 }
@@ -376,24 +375,22 @@ gst_mpeg4vparse_process_sc (GstMpeg4VParse * mp4vparse, GstMpeg4Packet * packet,
       } else {
         GST_LOG_OBJECT (mp4vparse, "startcode is User Data");
       }
-      /* parse config data ending here if proper startcodes found earlier;
-       * we should have received a visual object before. */
-      if (mp4vparse->config_found) {
-        /*Do not take care startcode into account */
-        gst_mpeg4vparse_process_config (mp4vparse,
-            packet->data, packet->offset, packet->offset - 3);
-        mp4vparse->vo_found = FALSE;
-      }
+      /* parse config data ending here if proper startcodes found earlier */
+      gst_mpeg4vparse_process_config (mp4vparse,
+          packet->data, packet->offset, packet->offset - 3);
       break;
     }
     case GST_MPEG4_VISUAL_OBJ_SEQ_START:
       GST_LOG_OBJECT (mp4vparse, "Visual Sequence Start");
-      mp4vparse->config_found = TRUE;
       mp4vparse->profile = gst_codec_utils_mpeg4video_get_profile (packet->data
           + packet->offset + 1, packet->offset);
       mp4vparse->level = gst_codec_utils_mpeg4video_get_level (packet->data
           + packet->offset + 1, packet->offset);
       break;
+    case GST_MPEG4_VISUAL_OBJ_SEQ_END:
+      GST_LOG_OBJECT (mp4vparse, "Visual Sequence End");
+      mp4vparse->vo_found = FALSE;
+      break;
     case GST_MPEG4_VISUAL_OBJ:
       GST_LOG_OBJECT (mp4vparse, "Visual Object");
       mp4vparse->vo_offset = packet->offset;
@@ -411,7 +408,6 @@ gst_mpeg4vparse_process_sc (GstMpeg4VParse * mp4vparse, GstMpeg4Packet * packet,
         /* VO (video object) cases */
       } else if (packet->type <= GST_MPEG4_VIDEO_OBJ_LAST) {
         GST_LOG_OBJECT (mp4vparse, "Video object");
-        mp4vparse->config_found = TRUE;
       }
       break;
   }
diff --git a/gst/videoparsers/gstmpeg4videoparse.h b/gst/videoparsers/gstmpeg4videoparse.h
--- a/gst/videoparsers/gstmpeg4videoparse.h
+++ b/gst/videoparsers/gstmpeg4videoparse.h
@@ -51,7 +51,6 @@ struct _GstMpeg4VParse {
   gint last_sc;
   gint vop_offset;
   gboolean vo_found;
-  gboolean config_found;
   gboolean intra_frame;
   gboolean vop_coded;
   gboolean update_caps;
