mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-18 22:36:33 +00:00
Some cleanups
Original commit message from CVS: Some cleanups Fix EOS on the src
This commit is contained in:
parent
bb5a2fc43b
commit
169d6b64a3
2 changed files with 20 additions and 67 deletions
|
@ -24,6 +24,8 @@
|
||||||
|
|
||||||
#include <gst/gst.h>
|
#include <gst/gst.h>
|
||||||
#include <libgnomevfs/gnome-vfs.h>
|
#include <libgnomevfs/gnome-vfs.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <errno.h>
|
||||||
|
|
||||||
GstElementDetails gst_gnomevfssink_details;
|
GstElementDetails gst_gnomevfssink_details;
|
||||||
|
|
||||||
|
@ -243,8 +245,7 @@ gst_gnomevfssink_open_file (GstGnomeVFSSink *sink)
|
||||||
/* create the GnomeVFSURI from the url */
|
/* create the GnomeVFSURI from the url */
|
||||||
sink->uri = gnome_vfs_uri_new(sink->filename);
|
sink->uri = gnome_vfs_uri_new(sink->filename);
|
||||||
if (!sink->uri) {
|
if (!sink->uri) {
|
||||||
perror ("open");
|
gst_element_error (GST_ELEMENT (sink), "opening file \"%s\" (%s)", sink->filename, strerror (errno));
|
||||||
gst_element_error (GST_ELEMENT (sink), g_strconcat("opening file \"", sink->filename, "\"", NULL));
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -260,8 +261,7 @@ gst_gnomevfssink_open_file (GstGnomeVFSSink *sink)
|
||||||
gst_gnomevfssink_signals[SIGNAL_ERASE_ASK], 0,
|
gst_gnomevfssink_signals[SIGNAL_ERASE_ASK], 0,
|
||||||
sink->erase);
|
sink->erase);
|
||||||
}
|
}
|
||||||
perror ("open");
|
gst_element_error (GST_ELEMENT (sink), "opening file \"%s\" (%s)", sink->filename, strerror (errno));
|
||||||
gst_element_error (GST_ELEMENT (sink), g_strconcat("opening file \"", sink->filename, "\"", NULL));
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -286,8 +286,7 @@ gst_gnomevfssink_close_file (GstGnomeVFSSink *sink)
|
||||||
|
|
||||||
if (result != GNOME_VFS_OK)
|
if (result != GNOME_VFS_OK)
|
||||||
{
|
{
|
||||||
perror ("close");
|
gst_element_error (GST_ELEMENT (sink), "closing file \"%s\" (%s)", sink->filename, strerror (errno));
|
||||||
gst_element_error (GST_ELEMENT (sink), g_strconcat("closing file \"", sink->filename, "\"", NULL));
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
GST_FLAG_UNSET (sink, GST_GNOMEVFSSINK_OPEN);
|
GST_FLAG_UNSET (sink, GST_GNOMEVFSSINK_OPEN);
|
||||||
|
|
|
@ -29,6 +29,8 @@
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <sys/mman.h>
|
#include <sys/mman.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
#include <gst/gst.h>
|
#include <gst/gst.h>
|
||||||
#include <libgnomevfs/gnome-vfs.h>
|
#include <libgnomevfs/gnome-vfs.h>
|
||||||
|
@ -86,9 +88,6 @@ struct _GstGnomeVFSSrc {
|
||||||
|
|
||||||
struct _GstGnomeVFSSrcClass {
|
struct _GstGnomeVFSSrcClass {
|
||||||
GstElementClass parent_class;
|
GstElementClass parent_class;
|
||||||
#ifdef BROKEN_SIG
|
|
||||||
void (*eos_hack) (GstGnomeVFSSrc * src);
|
|
||||||
#endif
|
|
||||||
};
|
};
|
||||||
|
|
||||||
GstElementDetails gst_gnomevfssrc_details = {
|
GstElementDetails gst_gnomevfssrc_details = {
|
||||||
|
@ -102,9 +101,6 @@ GstElementDetails gst_gnomevfssrc_details = {
|
||||||
|
|
||||||
/* GnomeVFSSrc signals and args */
|
/* GnomeVFSSrc signals and args */
|
||||||
enum {
|
enum {
|
||||||
#ifdef BROKEN_SIG
|
|
||||||
EOS_HACK,
|
|
||||||
#endif
|
|
||||||
LAST_SIGNAL
|
LAST_SIGNAL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -133,9 +129,6 @@ static gboolean gst_gnomevfssrc_open_file(GstGnomeVFSSrc *src);
|
||||||
|
|
||||||
|
|
||||||
static GstElementClass *parent_class = NULL;
|
static GstElementClass *parent_class = NULL;
|
||||||
#ifdef BROKEN_SIG
|
|
||||||
static guint gst_gnomevfssrc_signals[LAST_SIGNAL] = { 0 };
|
|
||||||
#endif
|
|
||||||
|
|
||||||
GType gst_gnomevfssrc_get_type(void)
|
GType gst_gnomevfssrc_get_type(void)
|
||||||
{
|
{
|
||||||
|
@ -176,14 +169,6 @@ static void gst_gnomevfssrc_class_init(GstGnomeVFSSrcClass *klass)
|
||||||
"location", ARG_LOCATION, G_PARAM_READWRITE,
|
"location", ARG_LOCATION, G_PARAM_READWRITE,
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
#ifdef BROKEN_SIG
|
|
||||||
gst_gnomevfssrc_signals[EOS_HACK] =
|
|
||||||
g_signal_new("eos-hack", G_TYPE_FROM_CLASS(klass), G_SIGNAL_RUN_FIRST,
|
|
||||||
G_STRUCT_OFFSET(GstGnomeVFSSrcClass, eos_hack), NULL, NULL,
|
|
||||||
g_cclosure_marshal_VOID__VOID, G_TYPE_NONE,0);
|
|
||||||
|
|
||||||
#endif /* BROKEN_SIG */
|
|
||||||
|
|
||||||
gstelement_class->set_property = gst_gnomevfssrc_set_property;
|
gstelement_class->set_property = gst_gnomevfssrc_set_property;
|
||||||
gstelement_class->get_property = gst_gnomevfssrc_get_property;
|
gstelement_class->get_property = gst_gnomevfssrc_get_property;
|
||||||
|
|
||||||
|
@ -196,7 +181,6 @@ static void gst_gnomevfssrc_class_init(GstGnomeVFSSrcClass *klass)
|
||||||
|
|
||||||
static void gst_gnomevfssrc_init(GstGnomeVFSSrc *gnomevfssrc)
|
static void gst_gnomevfssrc_init(GstGnomeVFSSrc *gnomevfssrc)
|
||||||
{
|
{
|
||||||
/* GST_FLAG_SET (gnomevfssrc, GST_SRC_); */
|
|
||||||
|
|
||||||
gnomevfssrc->srcpad = gst_pad_new("src", GST_PAD_SRC);
|
gnomevfssrc->srcpad = gst_pad_new("src", GST_PAD_SRC);
|
||||||
gst_pad_set_get_function(gnomevfssrc->srcpad, gst_gnomevfssrc_get);
|
gst_pad_set_get_function(gnomevfssrc->srcpad, gst_gnomevfssrc_get);
|
||||||
|
@ -308,12 +292,8 @@ static GstBuffer *gst_gnomevfssrc_get(GstPad *pad)
|
||||||
/* deal with EOF state */
|
/* deal with EOF state */
|
||||||
if ((src->curoffset >= src->size) && (src->size != 0))
|
if ((src->curoffset >= src->size) && (src->size != 0))
|
||||||
{
|
{
|
||||||
#ifdef BROKEN_SIG
|
gst_element_set_state (GST_ELEMENT (src), GST_STATE_PAUSED);
|
||||||
g_signal_emit(G_OBJECT(src),
|
return GST_BUFFER (gst_event_new (GST_EVENT_EOS));
|
||||||
gst_gnomevfssrc_signals[EOS_HACK], 0);
|
|
||||||
#endif /* BROKEN_SIG */
|
|
||||||
/*gst_pad_set_eos (pad); */
|
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* create the buffer */
|
/* create the buffer */
|
||||||
|
@ -333,12 +313,6 @@ static GstBuffer *gst_gnomevfssrc_get(GstPad *pad)
|
||||||
if ((src->curoffset + src->bytes_per_read) > src->size)
|
if ((src->curoffset + src->bytes_per_read) > src->size)
|
||||||
{
|
{
|
||||||
GST_BUFFER_SIZE (buf) = src->size - src->curoffset;
|
GST_BUFFER_SIZE (buf) = src->size - src->curoffset;
|
||||||
/* set the buffer's EOF bit here */
|
|
||||||
#ifdef BROKEN_SIG
|
|
||||||
g_signal_emit(G_OBJECT(src),
|
|
||||||
gst_gnomevfssrc_signals[EOS_HACK], 0);
|
|
||||||
#endif /* BROKEN_SIG */
|
|
||||||
GST_BUFFER_FLAG_SET(buf, GST_BUFFER_EOS);
|
|
||||||
} else {
|
} else {
|
||||||
GST_BUFFER_SIZE (buf) = src->bytes_per_read;
|
GST_BUFFER_SIZE (buf) = src->bytes_per_read;
|
||||||
}
|
}
|
||||||
|
@ -375,30 +349,15 @@ static GstBuffer *gst_gnomevfssrc_get(GstPad *pad)
|
||||||
if (readbytes == 0)
|
if (readbytes == 0)
|
||||||
{
|
{
|
||||||
gst_buffer_unref(buf);
|
gst_buffer_unref(buf);
|
||||||
GST_BUFFER_FLAG_SET(buf, GST_BUFFER_EOS);
|
|
||||||
gst_element_signal_eos(GST_ELEMENT(src));
|
gst_element_set_state (GST_ELEMENT (src), GST_STATE_PAUSED);
|
||||||
#ifdef BROKEN_SIG
|
|
||||||
g_signal_emit(G_OBJECT(src),
|
return GST_BUFFER (gst_event_new (GST_EVENT_EOS));
|
||||||
gst_gnomevfssrc_signals[EOS_HACK], 0);
|
|
||||||
#endif /* BROKEN_SIG */
|
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* if we didn't get as many bytes as we asked for, we're at
|
|
||||||
* EOF */
|
|
||||||
if (readbytes < src->bytes_per_read)
|
|
||||||
{
|
|
||||||
/* set the buffer's EOF bit here */
|
|
||||||
GST_BUFFER_FLAG_SET(buf, GST_BUFFER_EOS);
|
|
||||||
#ifdef BROKEN_SIG
|
|
||||||
g_signal_emit(G_OBJECT(src),
|
|
||||||
gst_gnomevfssrc_signals[EOS_HACK], 0);
|
|
||||||
#endif /* BROKEN_SIG */
|
|
||||||
}
|
|
||||||
GST_BUFFER_OFFSET(buf) = src->curoffset;
|
GST_BUFFER_OFFSET(buf) = src->curoffset;
|
||||||
GST_BUFFER_SIZE(buf) = readbytes;
|
GST_BUFFER_SIZE(buf) = readbytes;
|
||||||
src->curoffset += readbytes;
|
src->curoffset += readbytes;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* we're done, return the buffer */
|
/* we're done, return the buffer */
|
||||||
|
@ -416,10 +375,9 @@ static gboolean gst_gnomevfssrc_open_file(GstGnomeVFSSrc *src)
|
||||||
/* create the uri */
|
/* create the uri */
|
||||||
src->uri = gnome_vfs_uri_new(src->filename);
|
src->uri = gnome_vfs_uri_new(src->filename);
|
||||||
if (!src->uri) {
|
if (!src->uri) {
|
||||||
perror("open");
|
|
||||||
gst_element_error(GST_ELEMENT(src),
|
gst_element_error(GST_ELEMENT(src),
|
||||||
g_strconcat("creating uri \"",
|
"creating uri \"%s\" (%s)",
|
||||||
src->filename, "\"", NULL));
|
src->filename, strerror (errno));
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -432,11 +390,9 @@ static gboolean gst_gnomevfssrc_open_file(GstGnomeVFSSrc *src)
|
||||||
src->fd = open(src->local_name, O_RDONLY);
|
src->fd = open(src->local_name, O_RDONLY);
|
||||||
if (src->fd < 0)
|
if (src->fd < 0)
|
||||||
{
|
{
|
||||||
perror("open");
|
|
||||||
gst_element_error(GST_ELEMENT(src),
|
gst_element_error(GST_ELEMENT(src),
|
||||||
g_strconcat("opening local file \"",
|
"opening local file \"%s\" (%s)",
|
||||||
src->filename, "\"",
|
src->filename, strerror (errno));
|
||||||
NULL));
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -461,12 +417,10 @@ static gboolean gst_gnomevfssrc_open_file(GstGnomeVFSSrc *src)
|
||||||
GNOME_VFS_OPEN_READ);
|
GNOME_VFS_OPEN_READ);
|
||||||
if (result != GNOME_VFS_OK)
|
if (result != GNOME_VFS_OK)
|
||||||
{
|
{
|
||||||
perror("open");
|
|
||||||
gst_element_error(GST_ELEMENT(src),
|
gst_element_error(GST_ELEMENT(src),
|
||||||
g_strconcat("opening vfs file \"",
|
"opening vfs file \"%s\" (%s)",
|
||||||
src->filename, "\": ",
|
src->filename,
|
||||||
gnome_vfs_result_to_string(result),
|
gnome_vfs_result_to_string(result));
|
||||||
NULL));
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue