summaryrefslogtreecommitdiff
path: root/gst/mpegtsdemux/mpegtspacketizer.c
diff options
context:
space:
mode:
Diffstat (limited to 'gst/mpegtsdemux/mpegtspacketizer.c')
-rw-r--r--gst/mpegtsdemux/mpegtspacketizer.c31
1 files changed, 18 insertions, 13 deletions
diff --git a/gst/mpegtsdemux/mpegtspacketizer.c b/gst/mpegtsdemux/mpegtspacketizer.c
index 25d75cfa8..d88fd1919 100644
--- a/gst/mpegtsdemux/mpegtspacketizer.c
+++ b/gst/mpegtsdemux/mpegtspacketizer.c
@@ -1,7 +1,7 @@
/*
- * mpegtspacketizer.c -
+ * mpegtspacketizer.c -
* Copyright (C) 2007, 2008 Alessandro Decina, Zaheer Merali
- *
+ *
* Authors:
* Zaheer Merali <zaheerabbas at merali dot org>
* Alessandro Decina <alessandro@nnva.org>
@@ -78,6 +78,7 @@ static gchar *get_encoding_and_convert (const gchar * text, guint length);
#define MAX_CONTINUITY 15
#define VERSION_NUMBER_UNSET 255
#define TABLE_ID_UNSET 0xFF
+#define PACKET_SYNC_BYTE 0x47
static gint
mpegts_packetizer_stream_subtable_compare (gconstpointer a, gconstpointer b)
@@ -396,7 +397,7 @@ mpegts_packetizer_parse_descriptors (MpegTSPacketizer2 * packetizer,
/* include length */
desc = g_string_new_len ((gchar *) data - 2, length + 2);
data += length;
- /* G_TYPE_GSTING is a GBoxed type and is used so properly marshalled from python */
+ /* G_TYPE_GSTRING is a GBoxed type and is used so properly marshalled from python */
g_value_init (&value, G_TYPE_GSTRING);
g_value_take_boxed (&value, desc);
g_value_array_append (descriptors, &value);
@@ -521,6 +522,8 @@ mpegts_packetizer_parse_pmt (MpegTSPacketizer2 * packetizer,
program_number = GST_READ_UINT16_BE (data);
data += 2;
+ GST_DEBUG ("Parsing %d Program Map Table", program_number);
+
tmp = *data++;
section->version_number = (tmp >> 1) & 0x1F;
section->current_next_indicator = tmp & 0x01;
@@ -565,6 +568,7 @@ mpegts_packetizer_parse_pmt (MpegTSPacketizer2 * packetizer,
* bytes) plus the CRC */
while (data <= end - 4 - 5) {
stream_type = *data++;
+ GST_DEBUG ("Stream type 0x%02x found", stream_type);
pid = GST_READ_UINT16_BE (data) & 0x1FFF;
data += 2;
@@ -2159,13 +2163,14 @@ mpegts_try_discover_packet_size (MpegTSPacketizer2 * packetizer)
/* find first sync byte */
pos = -1;
for (i = 0; i < MPEGTS_MAX_PACKETSIZE; i++) {
- if (dest[i] == 0x47) {
+ if (dest[i] == PACKET_SYNC_BYTE) {
for (j = 0; j < 4; j++) {
guint packetsize = psizes[j];
/* check each of the packet size possibilities in turn */
- if (dest[i] == 0x47 && dest[i + packetsize] == 0x47 &&
- dest[i + packetsize * 2] == 0x47 &&
- dest[i + packetsize * 3] == 0x47) {
+ if (dest[i] == PACKET_SYNC_BYTE
+ && dest[i + packetsize] == PACKET_SYNC_BYTE
+ && dest[i + packetsize * 2] == PACKET_SYNC_BYTE
+ && dest[i + packetsize * 3] == PACKET_SYNC_BYTE) {
packetizer->know_packet_size = TRUE;
packetizer->packet_size = packetsize;
packetizer->caps = gst_caps_new_simple ("video/mpegts",
@@ -2200,10 +2205,10 @@ mpegts_try_discover_packet_size (MpegTSPacketizer2 * packetizer)
GST_DEBUG ("Flushing out %d bytes", pos);
gst_adapter_flush (packetizer->adapter, pos);
packetizer->offset += pos;
- } else if (!packetizer->know_packet_size) {
- /* drop invalid data and move to the next possible packets */
- gst_adapter_flush (packetizer->adapter, MPEGTS_MAX_PACKETSIZE);
}
+ } else {
+ /* drop invalid data and move to the next possible packets */
+ GST_DEBUG ("Could not determine packet size");
}
return packetizer->know_packet_size;
@@ -2235,6 +2240,7 @@ mpegts_packetizer_next_packet (MpegTSPacketizer2 * packetizer,
while ((avail = packetizer->adapter->size) >= packetizer->packet_size) {
packet->buffer = gst_adapter_take_buffer (packetizer->adapter,
packetizer->packet_size);
+
/* M2TS packets don't start with the sync byte, all other variants do */
if (packetizer->packet_size == MPEGTS_M2TS_PACKETSIZE) {
packet->data_start = GST_BUFFER_DATA (packet->buffer) + 4;
@@ -2347,7 +2353,6 @@ mpegts_packetizer_push_section (MpegTSPacketizer2 * packetizer,
sub_buf = gst_buffer_create_sub (packet->buffer,
data - GST_BUFFER_DATA (packet->buffer), packet->data_end - data);
-
stream = packetizer->streams[packet->pid];
if (stream == NULL) {
stream = mpegts_packetizer_stream_new ();
@@ -2356,7 +2361,7 @@ mpegts_packetizer_push_section (MpegTSPacketizer2 * packetizer,
if (packet->payload_unit_start_indicator) {
table_id = *data++;
- /* subtable_extension should be read from 4th and 5th bytes only if
+ /* subtable_extension should be read from 4th and 5th bytes only if
* section_syntax_indicator is 1 */
if ((data[0] & 0x80) == 0)
subtable_extension = 0;
@@ -2481,7 +2486,7 @@ _init_local (void)
* @is_multibyte: Location where information whether it's a multibyte encoding
* or not is stored
* @returns: Name of encoding or NULL of encoding could not be detected.
- *
+ *
* The returned string should be freed with g_free () when no longer needed.
*/
static gchar *