diff options
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | gst/rawparse/gstrawparse.c | 11 |
2 files changed, 12 insertions, 5 deletions
@@ -1,5 +1,11 @@ 2008-01-19 Sebastian Dröge <slomo@circular-chaos.org> + * gst/rawparse/gstrawparse.c: (gst_raw_parse_loop): + Improve handling of unknown or too small upstream sizes in + pull mode. + +2008-01-19 Sebastian Dröge <slomo@circular-chaos.org> + * gst/rawparse/gstrawparse.c: (gst_raw_parse_loop), (gst_raw_parse_handle_seek_push): Improve debugging a bit and for handling multiple frames per buffer diff --git a/gst/rawparse/gstrawparse.c b/gst/rawparse/gstrawparse.c index 16a6b9f7..be7549b0 100644 --- a/gst/rawparse/gstrawparse.c +++ b/gst/rawparse/gstrawparse.c @@ -304,13 +304,14 @@ gst_raw_parse_loop (GstElement * element) if (rp->offset + size > rp->upstream_length) { GstFormat fmt = GST_FORMAT_BYTES; - if (!gst_pad_query_peer_duration (rp->sinkpad, &fmt, &rp->upstream_length) - || rp->upstream_length < rp->offset + rp->framesize) { + if (!gst_pad_query_peer_duration (rp->sinkpad, &fmt, &rp->upstream_length)) { + GST_WARNING_OBJECT (rp, + "Could not get upstream duration, trying to pull frame by frame"); + size = rp->framesize; + } else if (rp->upstream_length < rp->offset + rp->framesize) { ret = GST_FLOW_UNEXPECTED; goto pause; - } - - if (rp->offset + size > rp->upstream_length) { + } else if (rp->offset + size > rp->upstream_length) { size = rp->upstream_length - rp->offset; size -= size % rp->framesize; } |