summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 2bd5f3a)
raw | patch | inline | side by side (parent: 2bd5f3a)
author | Benjamin Otte <otte@gnome.org> | |
Thu, 29 Jul 2004 15:34:25 +0000 (15:34 +0000) | ||
committer | Benjamin Otte <otte@gnome.org> | |
Thu, 29 Jul 2004 15:34:25 +0000 (15:34 +0000) |
Original commit message from CVS:
* gst/elements/gstfilesrc.c: (gst_filesrc_open_file),
(gst_filesrc_srcpad_event):
make seek events to before start/after end of file not fail, but
seek to start/end instead
* testsuite/caps/fraction-convert.c: (check_from_double_convert):
add more output
* gst/elements/gstfilesrc.c: (gst_filesrc_open_file),
(gst_filesrc_srcpad_event):
make seek events to before start/after end of file not fail, but
seek to start/end instead
* testsuite/caps/fraction-convert.c: (check_from_double_convert):
add more output
diff --git a/ChangeLog b/ChangeLog
index 40984f0021386032e08a4b0273c0dfe3a3bb6a95..26001d05f8b9095b96333674168cf667a70b9ab4 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
+2004-07-29 Benjamin Otte <otte@gnome.org>
+
+ * gst/elements/gstfilesrc.c: (gst_filesrc_open_file),
+ (gst_filesrc_srcpad_event):
+ make seek events to before start/after end of file not fail, but
+ seek to start/end instead
+ * testsuite/caps/fraction-convert.c: (check_from_double_convert):
+ add more output
+
2004-07-29 Benjamin Otte <otte@gnome.org>
* gst/gstpad.c: (gst_pad_set_explicit_caps):
index 45714b0de50d1d6b98da4aca04ac194478a11905..b03ecf5a626b0cda53e645011ac50980db2f841f 100644 (file)
#define O_BINARY (0)
#endif
+
/**********************************************************************
* GStreamer Default File Source
* Theory of Operation
{
gint64 offset;
- if (GST_EVENT_SEEK_FORMAT (event) != GST_FORMAT_BYTES) {
+ if (GST_EVENT_SEEK_FORMAT (event) != GST_FORMAT_BYTES &&
+ GST_EVENT_SEEK_FORMAT (event) != GST_FORMAT_DEFAULT) {
goto error;
}
if (!src->is_regular) {
switch (GST_EVENT_SEEK_METHOD (event)) {
case GST_SEEK_METHOD_SET:
- if (offset < 0 ||
- (offset > src->filelen && (!gst_filesrc_check_filesize (src)
- || offset > src->filelen))) {
+ if (offset < 0) {
goto error;
+ } else if (offset > src->filelen && (!gst_filesrc_check_filesize (src)
+ || offset > src->filelen)) {
+ src->curoffset = src->filelen;
+ } else {
+ src->curoffset = offset;
}
- src->curoffset = offset;
GST_DEBUG_OBJECT (src, "seek set pending to %" G_GINT64_FORMAT,
src->curoffset);
break;
case GST_SEEK_METHOD_CUR:
- if (offset + src->curoffset > src->filelen)
- if (!gst_filesrc_check_filesize (src)
- || offset + src->curoffset > src->filelen)
- goto error;
- src->curoffset += offset;
+ if (offset + src->curoffset > src->filelen &&
+ (!gst_filesrc_check_filesize (src)
+ || offset + src->curoffset > src->filelen)) {
+ src->curoffset = src->filelen;
+ } else if (offset + src->curoffset < 0) {
+ src->curoffset = 0;
+ } else {
+ src->curoffset += offset;
+ }
GST_DEBUG_OBJECT (src, "seek cur pending to %" G_GINT64_FORMAT,
src->curoffset);
break;
case GST_SEEK_METHOD_END:
- if (ABS (offset) > src->filelen) {
- if (!gst_filesrc_check_filesize (src)
- || ABS (offset) > src->filelen)
- goto error;
+ if (offset > 0) {
goto error;
+ } else if (offset > src->filelen && (!gst_filesrc_check_filesize (src)
+ || offset > src->filelen)) {
+ src->curoffset = 0;
+ } else {
+ src->curoffset = src->filelen + offset;
}
- src->curoffset = src->filelen - ABS (offset);
GST_DEBUG_OBJECT (src, "seek end pending to %" G_GINT64_FORMAT,
src->curoffset);
break;
index 45714b0de50d1d6b98da4aca04ac194478a11905..b03ecf5a626b0cda53e645011ac50980db2f841f 100644 (file)
#define O_BINARY (0)
#endif
+
/**********************************************************************
* GStreamer Default File Source
* Theory of Operation
{
gint64 offset;
- if (GST_EVENT_SEEK_FORMAT (event) != GST_FORMAT_BYTES) {
+ if (GST_EVENT_SEEK_FORMAT (event) != GST_FORMAT_BYTES &&
+ GST_EVENT_SEEK_FORMAT (event) != GST_FORMAT_DEFAULT) {
goto error;
}
if (!src->is_regular) {
switch (GST_EVENT_SEEK_METHOD (event)) {
case GST_SEEK_METHOD_SET:
- if (offset < 0 ||
- (offset > src->filelen && (!gst_filesrc_check_filesize (src)
- || offset > src->filelen))) {
+ if (offset < 0) {
goto error;
+ } else if (offset > src->filelen && (!gst_filesrc_check_filesize (src)
+ || offset > src->filelen)) {
+ src->curoffset = src->filelen;
+ } else {
+ src->curoffset = offset;
}
- src->curoffset = offset;
GST_DEBUG_OBJECT (src, "seek set pending to %" G_GINT64_FORMAT,
src->curoffset);
break;
case GST_SEEK_METHOD_CUR:
- if (offset + src->curoffset > src->filelen)
- if (!gst_filesrc_check_filesize (src)
- || offset + src->curoffset > src->filelen)
- goto error;
- src->curoffset += offset;
+ if (offset + src->curoffset > src->filelen &&
+ (!gst_filesrc_check_filesize (src)
+ || offset + src->curoffset > src->filelen)) {
+ src->curoffset = src->filelen;
+ } else if (offset + src->curoffset < 0) {
+ src->curoffset = 0;
+ } else {
+ src->curoffset += offset;
+ }
GST_DEBUG_OBJECT (src, "seek cur pending to %" G_GINT64_FORMAT,
src->curoffset);
break;
case GST_SEEK_METHOD_END:
- if (ABS (offset) > src->filelen) {
- if (!gst_filesrc_check_filesize (src)
- || ABS (offset) > src->filelen)
- goto error;
+ if (offset > 0) {
goto error;
+ } else if (offset > src->filelen && (!gst_filesrc_check_filesize (src)
+ || offset > src->filelen)) {
+ src->curoffset = 0;
+ } else {
+ src->curoffset = src->filelen + offset;
}
- src->curoffset = src->filelen - ABS (offset);
GST_DEBUG_OBJECT (src, "seek end pending to %" G_GINT64_FORMAT,
src->curoffset);
break;
diff --git a/tests/old/testsuite/caps/fraction-convert.c b/tests/old/testsuite/caps/fraction-convert.c
index 41aae4047678b31d846f395c56c73ee2d4e91063..f7e9f0d012112f67f9f440570d365acb4ad3c087 100644 (file)
g_value_set_double (&value1, value);
g_value_transform (&value1, &value2);
- g_print ("%s = %s\n",
- gst_value_serialize (&value1), gst_value_serialize (&value2));
+ g_print ("%s = %s ? (expected: %d/%d )\n",
+ gst_value_serialize (&value1), gst_value_serialize (&value2), nom, denom);
g_assert (gst_value_get_fraction_numerator (&value2) == nom);
g_assert (gst_value_get_fraction_denominator (&value2) == denom);
g_value_transform (&value2, &value1);
index 41aae4047678b31d846f395c56c73ee2d4e91063..f7e9f0d012112f67f9f440570d365acb4ad3c087 100644 (file)
g_value_set_double (&value1, value);
g_value_transform (&value1, &value2);
- g_print ("%s = %s\n",
- gst_value_serialize (&value1), gst_value_serialize (&value2));
+ g_print ("%s = %s ? (expected: %d/%d )\n",
+ gst_value_serialize (&value1), gst_value_serialize (&value2), nom, denom);
g_assert (gst_value_get_fraction_numerator (&value2) == nom);
g_assert (gst_value_get_fraction_denominator (&value2) == denom);
g_value_transform (&value2, &value1);