summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Kost <ensonic@users.sf.net>2009-02-27 11:24:37 +0200
committerStefan Kost <ensonic@users.sf.net>2009-02-27 12:27:14 +0200
commit5f2d5aa5a547427e5f564ab4b309cfc8f26fba18 (patch)
tree61aabd9fea182b250e0869238c1742d0c4d7d90e
parent3aecf7e2572dd43d450d1c21d65958680ede1f2b (diff)
baseparse: revert last change and properly fix
Baseparse internaly breaks the semantics of a _chain function by calling it with buffer==NULL. The reson I belived it was okay to remove it was that there is also an unchecked access to buffer later in _chain. Actually that code is wrong, as it most probably wants to set discont on the outgoing buffer.
-rw-r--r--gst/aacparse/gstbaseparse.c10
-rw-r--r--gst/amrparse/gstbaseparse.c10
-rw-r--r--gst/flacparse/gstbaseparse.c10
3 files changed, 18 insertions, 12 deletions
diff --git a/gst/aacparse/gstbaseparse.c b/gst/aacparse/gstbaseparse.c
index 5f9a949ee..6d0e7f8d4 100644
--- a/gst/aacparse/gstbaseparse.c
+++ b/gst/aacparse/gstbaseparse.c
@@ -864,9 +864,11 @@ gst_base_parse_chain (GstPad * pad, GstBuffer * buffer)
parse->priv->pending_events = NULL;
}
- GST_LOG_OBJECT (parse, "buffer size: %d, offset = %lld",
- GST_BUFFER_SIZE (buffer), GST_BUFFER_OFFSET (buffer));
- gst_adapter_push (parse->adapter, buffer);
+ if (G_LIKELY (buffer)) {
+ GST_LOG_OBJECT (parse, "buffer size: %d, offset = %lld",
+ GST_BUFFER_SIZE (buffer), GST_BUFFER_OFFSET (buffer));
+ gst_adapter_push (parse->adapter, buffer);
+ }
/* Parse and push as many frames as possible */
/* Stop either when adapter is empty or we are flushing */
@@ -895,7 +897,7 @@ gst_base_parse_chain (GstPad * pad, GstBuffer * buffer)
if (parse->priv->discont) {
GST_DEBUG_OBJECT (parse, "marking DISCONT");
- GST_BUFFER_FLAG_SET (buffer, GST_BUFFER_FLAG_DISCONT);
+ GST_BUFFER_FLAG_SET (tmpbuf, GST_BUFFER_FLAG_DISCONT);
}
skip = -1;
diff --git a/gst/amrparse/gstbaseparse.c b/gst/amrparse/gstbaseparse.c
index 4d7b03aa3..673f7169c 100644
--- a/gst/amrparse/gstbaseparse.c
+++ b/gst/amrparse/gstbaseparse.c
@@ -864,9 +864,11 @@ gst_base_parse_chain (GstPad * pad, GstBuffer * buffer)
parse->priv->pending_events = NULL;
}
- GST_LOG_OBJECT (parse, "buffer size: %d, offset = %lld",
- GST_BUFFER_SIZE (buffer), GST_BUFFER_OFFSET (buffer));
- gst_adapter_push (parse->adapter, buffer);
+ if (G_LIKELY (buffer)) {
+ GST_LOG_OBJECT (parse, "buffer size: %d, offset = %lld",
+ GST_BUFFER_SIZE (buffer), GST_BUFFER_OFFSET (buffer));
+ gst_adapter_push (parse->adapter, buffer);
+ }
/* Parse and push as many frames as possible */
/* Stop either when adapter is empty or we are flushing */
@@ -895,7 +897,7 @@ gst_base_parse_chain (GstPad * pad, GstBuffer * buffer)
if (parse->priv->discont) {
GST_DEBUG_OBJECT (parse, "marking DISCONT");
- GST_BUFFER_FLAG_SET (buffer, GST_BUFFER_FLAG_DISCONT);
+ GST_BUFFER_FLAG_SET (tmpbuf, GST_BUFFER_FLAG_DISCONT);
}
skip = -1;
diff --git a/gst/flacparse/gstbaseparse.c b/gst/flacparse/gstbaseparse.c
index 5f35d9171..ea06474ee 100644
--- a/gst/flacparse/gstbaseparse.c
+++ b/gst/flacparse/gstbaseparse.c
@@ -989,9 +989,11 @@ gst_base_parse_chain (GstPad * pad, GstBuffer * buffer)
gst_base_parse_update_upstream_durations (parse);
- GST_LOG_OBJECT (parse, "buffer size: %d, offset = %lld",
- GST_BUFFER_SIZE (buffer), GST_BUFFER_OFFSET (buffer));
- gst_adapter_push (parse->priv->adapter, buffer);
+ if (G_LIKELY (buffer)) {
+ GST_LOG_OBJECT (parse, "buffer size: %d, offset = %lld",
+ GST_BUFFER_SIZE (buffer), GST_BUFFER_OFFSET (buffer));
+ gst_adapter_push (parse->priv->adapter, buffer);
+ }
/* Parse and push as many frames as possible */
/* Stop either when adapter is empty or we are flushing */
@@ -1021,7 +1023,7 @@ gst_base_parse_chain (GstPad * pad, GstBuffer * buffer)
if (parse->priv->discont) {
GST_DEBUG_OBJECT (parse, "marking DISCONT");
- GST_BUFFER_FLAG_SET (buffer, GST_BUFFER_FLAG_DISCONT);
+ GST_BUFFER_FLAG_SET (tmpbuf, GST_BUFFER_FLAG_DISCONT);
}
skip = -1;