mpegtsmux: set non-0 payload length in PES header if video ES packet is small enough
authorHyunjun Ko <zzoon.ko@samsung.com>
Tue, 14 Jul 2015 04:40:46 +0000 (13:40 +0900)
committerTim-Philipp Müller <tim@centricular.com>
Tue, 19 Jan 2016 19:32:27 +0000 (19:32 +0000)
https://bugzilla.gnome.org/show_bug.cgi?id=748507

gst/mpegtsmux/tsmux/tsmuxstream.c

index 391b079..6b7c17e 100644 (file)
@@ -411,11 +411,6 @@ tsmux_stream_initialize_pes_packet (TsMuxStream * stream)
     stream->cur_pes_payload_size = stream->pes_payload_size;
     tsmux_stream_find_pts_dts_within (stream, stream->cur_pes_payload_size,
         &stream->pts, &stream->dts);
-  } else if (stream->is_video_stream) {
-    /* Unbounded for video streams */
-    stream->cur_pes_payload_size = 0;
-    tsmux_stream_find_pts_dts_within (stream, stream->bytes_avail, &stream->pts,
-        &stream->dts);
   } else {
     /* Output a PES packet of all currently available bytes otherwise */
     stream->cur_pes_payload_size = stream->bytes_avail;
@@ -443,6 +438,16 @@ tsmux_stream_initialize_pes_packet (TsMuxStream * stream)
     }
   }
 
+  if (stream->is_video_stream) {
+    guint8 hdr_len;
+
+    hdr_len = tsmux_stream_pes_header_length (stream);
+
+    /* Unbounded for video streams if pes packet length is over 16 bit */
+    if ((stream->cur_pes_payload_size + hdr_len - 6) > G_MAXUINT16)
+      stream->cur_pes_payload_size = 0;
+  }
+
   return TRUE;
 }