summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWim Taymans <wim.taymans@gmail.com>2003-01-19 13:42:43 +0000
committerWim Taymans <wim.taymans@gmail.com>2003-01-19 13:42:43 +0000
commit3438f4f4599d9e8aa1bc32115e5a8a41dd6f0a6e (patch)
tree2ba23e6cc633c3abbc726550a531ffbaab7be4a1
parentdd96efe6f1b34927de5172f1bccf26c035aa36eb (diff)
- Small cleanups
Original commit message from CVS: - Small cleanups - parse even the last few bytes of the stream
-rw-r--r--gst/mpegstream/gstmpegpacketize.c63
-rw-r--r--gst/mpegstream/gstmpegparse.c6
-rw-r--r--gst/mpegstream/gstmpegparse.h7
3 files changed, 42 insertions, 34 deletions
diff --git a/gst/mpegstream/gstmpegpacketize.c b/gst/mpegstream/gstmpegpacketize.c
index b93a7307..92efd9cc 100644
--- a/gst/mpegstream/gstmpegpacketize.c
+++ b/gst/mpegstream/gstmpegpacketize.c
@@ -64,7 +64,8 @@ parse_packhead (GstMPEGPacketize * packetize)
GST_DEBUG (0, "packetize: in parse_packhead");
got_bytes = gst_bytestream_peek_bytes (packetize->bs, &buf, length);
- if (got_bytes < length) return NULL;
+ if (got_bytes < length)
+ return NULL;
buf += 4;
GST_DEBUG (0, "code %02x", *buf);
@@ -75,7 +76,8 @@ parse_packhead (GstMPEGPacketize * packetize)
packetize->MPEG2 = TRUE;
length += 2;
got_bytes = gst_bytestream_peek_bytes (packetize->bs, &buf, length);
- if (got_bytes < length) return NULL;
+ if (got_bytes < length)
+ return NULL;
}
else {
GST_DEBUG (0, "packetize::parse_packhead setting mpeg1");
@@ -83,7 +85,8 @@ parse_packhead (GstMPEGPacketize * packetize)
}
got_bytes = gst_bytestream_read (packetize->bs, &outbuf, length);
- if (got_bytes < length) return NULL;
+ if (got_bytes < length)
+ return NULL;
return GST_DATA (outbuf);
}
@@ -91,23 +94,25 @@ parse_packhead (GstMPEGPacketize * packetize)
static inline GstData*
parse_generic (GstMPEGPacketize *packetize)
{
- guint16 length;
GstByteStream *bs = packetize->bs;
guchar *buf;
GstBuffer *outbuf;
guint32 got_bytes;
+ gint16 length = 6;
GST_DEBUG (0, "packetize: in parse_generic");
- got_bytes = gst_bytestream_peek_bytes (bs, (guint8**)&buf, 2 + 4);
- if (got_bytes < 6) return NULL;
+ got_bytes = gst_bytestream_peek_bytes (bs, (guint8**)&buf, length);
+ if (got_bytes < 6)
+ return NULL;
buf += 4;
- length = GUINT16_FROM_BE (*(guint16 *) buf);
+ length += GUINT16_FROM_BE (*(guint16 *) buf);
GST_DEBUG (0, "packetize: header_length %d", length);
- got_bytes = gst_bytestream_read (packetize->bs, &outbuf, 2 + length + 4);
- if (got_bytes < 2 + length + 4) return NULL;
+ got_bytes = gst_bytestream_read (packetize->bs, &outbuf, length);
+ if (got_bytes < length)
+ return NULL;
return GST_DATA (outbuf);
}
@@ -119,12 +124,11 @@ parse_chunk (GstMPEGPacketize *packetize)
guchar *buf;
gint offset;
guint32 code;
- const gint chunksize = 4096;
+ gint chunksize;
GstBuffer *outbuf = NULL;
- guint32 got_bytes;
- got_bytes = gst_bytestream_peek_bytes (bs, (guint8**)&buf, chunksize);
- if (got_bytes < chunksize)
+ chunksize = gst_bytestream_peek_bytes (bs, (guint8**)&buf, 4096);
+ if (chunksize == 0)
return FALSE;
offset = 4;
@@ -137,14 +141,17 @@ parse_chunk (GstMPEGPacketize *packetize)
GST_DEBUG (0, " code = %08x", code);
- if ((offset % chunksize) == 0) {
- got_bytes = gst_bytestream_peek_bytes (bs, (guint8**)&buf, offset + chunksize);
- if (got_bytes < offset + chunksize)
+ if (offset == chunksize) {
+ chunksize = gst_bytestream_peek_bytes (bs, (guint8**)&buf, offset + 4096);
+ if (chunksize == 0)
return NULL;
+ chunksize += offset;
}
}
if (offset > 4) {
- got_bytes = gst_bytestream_read (bs, &outbuf, offset-4);
+ chunksize = gst_bytestream_read (bs, &outbuf, offset-4);
+ if (chunksize == 0)
+ return NULL;
}
return GST_DATA (outbuf);
}
@@ -158,11 +165,10 @@ find_start_code (GstMPEGPacketize *packetize)
guchar *buf;
gint offset;
guint32 code;
- const gint chunksize = 4096;
- guint32 got_bytes;
+ gint chunksize;
- got_bytes = gst_bytestream_peek_bytes (bs, (guint8**)&buf, chunksize);
- if (got_bytes < chunksize)
+ chunksize = gst_bytestream_peek_bytes (bs, (guint8**)&buf, 4096);
+ if (chunksize == 0)
return FALSE;
offset = 4;
@@ -176,18 +182,18 @@ find_start_code (GstMPEGPacketize *packetize)
GST_DEBUG (0, " code = %08x", code);
if (offset == chunksize) {
- if (!gst_bytestream_flush (bs, offset))
- return FALSE;
- got_bytes = gst_bytestream_peek_bytes (bs, (guint8**)&buf, chunksize);
- if (got_bytes < chunksize)
+ gst_bytestream_flush_fast (bs, offset);
+
+ chunksize = gst_bytestream_peek_bytes (bs, (guint8**)&buf, 4096);
+ if (chunksize == 0)
return FALSE;
+
offset = 0;
}
}
packetize->id = code & 0xff;
if (offset > 4) {
- if (!gst_bytestream_flush (bs, offset - 4))
- return FALSE;
+ gst_bytestream_flush_fast (bs, offset - 4);
}
return TRUE;
}
@@ -206,8 +212,7 @@ gst_mpeg_packetize_read (GstMPEGPacketize *packetize)
if (packetize->type == GST_MPEG_PACKETIZE_SYSTEM) {
if (packetize->resync) {
if (packetize->id != PACK_START_CODE) {
- if (!gst_bytestream_flush (packetize->bs, 4))
- got_event = TRUE;
+ gst_bytestream_flush_fast (packetize->bs, 4);
continue;
}
diff --git a/gst/mpegstream/gstmpegparse.c b/gst/mpegstream/gstmpegparse.c
index db8f339d..3dfb7485 100644
--- a/gst/mpegstream/gstmpegparse.c
+++ b/gst/mpegstream/gstmpegparse.c
@@ -540,13 +540,13 @@ gst_mpeg_parse_loop (GstElement *element)
/*
* The mpeg spec says something like this, but that doesn't really work:
*
- * mpeg_parse->next_scr = (scr * br + bss * 90000LL) / (90000LL + br);
+ * mpeg_parse->next_scr = (scr * br + bss * CLOCK_FREQ) / (CLOCK_FREQ + br);
*/
- mpeg_parse->next_scr = scr + (bss * 90000LL) / br;
+ mpeg_parse->next_scr = scr + (bss * CLOCK_FREQ) / br;
}
else {
/* we are interpolating the scr here */
- mpeg_parse->next_scr = scr + (bss * 90000LL) / br;
+ mpeg_parse->next_scr = scr + (bss * CLOCK_FREQ) / br;
}
}
else {
diff --git a/gst/mpegstream/gstmpegparse.h b/gst/mpegstream/gstmpegparse.h
index 764b6b92..03757f3d 100644
--- a/gst/mpegstream/gstmpegparse.h
+++ b/gst/mpegstream/gstmpegparse.h
@@ -43,8 +43,11 @@ extern "C" {
#define GST_MPEG_PARSE_IS_MPEG2(parse) (GST_MPEG_PACKETIZE_IS_MPEG2 (GST_MPEG_PARSE (parse)->packetize))
-#define MPEGTIME_TO_GSTTIME(time) (((time) * (GST_MSECOND/10)) / 9LL)
-#define GSTTIME_TO_MPEGTIME(time) (((time) * 9) / (GST_MSECOND/10))
+#define CLOCK_BASE 9LL
+#define CLOCK_FREQ CLOCK_BASE * 10000
+
+#define MPEGTIME_TO_GSTTIME(time) (((time) * (GST_MSECOND/10)) / CLOCK_BASE)
+#define GSTTIME_TO_MPEGTIME(time) (((time) * CLOCK_BASE) / (GST_MSECOND/10))
typedef struct _GstMPEGParse GstMPEGParse;
typedef struct _GstMPEGParseClass GstMPEGParseClass;