asfdemux: mo_size check bug fix. mo_size is not mandatory field.
authorHyeJin Choi <meeshel@meeshel78@hotmail.com>
Tue, 22 Oct 2013 07:02:04 +0000 (16:02 +0900)
committerThiago Santos <ts.santos@partner.samsung.com>
Tue, 29 Oct 2013 15:05:56 +0000 (12:05 -0300)
So, don't need to check previous payload's mo_size and current
payload's mo_size when merging it.

https://bugzilla.gnome.org/show_bug.cgi?id=710609

gst/asfdemux/asfpacket.c [changed mode: 0644->0755]

old mode 100644 (file)
new mode 100755 (executable)
index ecf1e05..7379d86
@@ -374,6 +374,8 @@ gst_asf_demux_parse_payload (GstASFDemux * demux, AsfPacket * packet,
           GST_TIME_ARGS (payload.ts));
       GST_LOG_OBJECT (demux, "media object dur    : %" GST_TIME_FORMAT,
           GST_TIME_ARGS (payload.duration));
+    } else if (payload.rep_data_len == 0) {
+      payload.mo_size = 0;
     } else if (payload.rep_data_len != 0) {
       GST_WARNING_OBJECT (demux, "invalid replicated data length, very bad");
       *p_data += payload_len;
@@ -407,9 +409,10 @@ gst_asf_demux_parse_payload (GstASFDemux * demux, AsfPacket * packet,
         AsfPayload *prev;
 
         if ((prev = asf_payload_find_previous_fragment (&payload, stream))) {
-          if (prev->buf == NULL || payload.mo_size != prev->mo_size ||
-              payload.mo_offset >= gst_buffer_get_size (prev->buf) ||
-              payload.mo_offset + payload_len >
+          if (prev->buf == NULL || (payload.mo_size > 0
+                  && payload.mo_size != prev->mo_size)
+              || payload.mo_offset >= gst_buffer_get_size (prev->buf)
+              || payload.mo_offset + payload_len >
               gst_buffer_get_size (prev->buf)) {
             GST_WARNING_OBJECT (demux, "Offset doesn't match previous data?!");
           } else {