+2004-01-18 Thomas Vander Stichele <thomas at apestaart dot org>
+
+ * gst/Makefile.am:
+ * gst/autoplug/gstspideridentity.c:
+ (gst_spider_identity_sink_loop_type_finding):
+ * gst/elements/gstfakesink.c: (gst_fakesink_change_state):
+ * gst/elements/gstfilesink.c: (gst_filesink_open_file),
+ (gst_filesink_close_file), (gst_filesink_handle_event),
+ (gst_filesink_chain):
+ * gst/elements/gstfilesrc.c: (gst_filesrc_set_property),
+ (gst_filesrc_map_region), (gst_filesrc_get_read),
+ (gst_filesrc_open_file):
+ * gst/elements/gstidentity.c: (gst_identity_chain):
+ * gst/elements/gstmultidisksrc.c: (gst_multidisksrc_open_file):
+ * gst/elements/gstpipefilter.c: (gst_pipefilter_get),
+ (gst_pipefilter_chain), (gst_pipefilter_open_file):
+ * gst/elements/gsttypefindelement.c: (gst_type_find_element_chain):
+ * gst/gst.h:
+ * gst/gst_private.h:
+ * gst/gstelement.c: (gst_element_class_init),
+ (gst_element_default_error), (gst_element_error_func),
+ (gst_element_error_extended):
+ * gst/gstelement.h:
+ * gst/gsterror.c: (_gst_core_errors_init),
+ (_gst_library_errors_init), (_gst_resource_errors_init),
+ (_gst_stream_errors_init), (gst_error_get_message):
+ * gst/gsterror.h:
+ * gst/gstinfo.c: (_gst_debug_init):
+ * gst/gstmarshal.list:
+ * gst/gstpad.c: (gst_pad_set_explicit_caps),
+ (gst_pad_recover_caps_error), (gst_pad_pull):
+ * gst/gstqueue.c: (gst_queue_chain), (gst_queue_get):
+ * gst/schedulers/gstbasicscheduler.c:
+ (gst_basic_scheduler_chainhandler_proxy),
+ (gst_basic_scheduler_gethandler_proxy),
+ (gst_basic_scheduler_cothreaded_chain):
+ * po/POTFILES.in:
+ * po/fr.po:
+ * po/nl.po:
+ change error signal
+ add error categories
+
2004-01-18 Jeremy Simon <jesimon@libertysurf.fr>
* gst/gsttag.c: (_gst_tag_initialize):
gstdata.c \
gstelement.c \
gstelementfactory.c \
+ gsterror.c \
gstevent.c \
gstfilter.c \
gstformat.c \
gstcpu.h \
gstdata.h \
gstelement.h \
+ gsterror.h \
gstevent.h \
gstfilter.h \
gstformat.h \
}
if (find.best_probability > 0)
goto plug;
- gst_element_error(GST_ELEMENT(ident), "Could not find media type", NULL);
+ gst_element_error (ident, STREAM, TYPE_NOT_FOUND, NULL, NULL);
find.buffer = GST_BUFFER (gst_event_new (GST_EVENT_EOS));
end:
return GST_STATE_SUCCESS;
error:
- gst_element_error (element, "failed state change as requested");
+ gst_element_error (element, CORE, STATE_CHANGE,
+ NULL, NULL);
return GST_STATE_FAILURE;
}
# include "config.h"
#endif
+#include "../gst-i18n-lib.h"
+
#include <gst/gst.h>
#include <errno.h>
#include "gstfilesink.h"
#include <sys/types.h>
#include <unistd.h>
+
GST_DEBUG_CATEGORY_STATIC (gst_filesink_debug);
#define GST_CAT_DEFAULT gst_filesink_debug
/* open the file */
if (!sink->filename)
{
- gst_element_error (GST_ELEMENT (sink),
- "Error opening file: no file given");
+ gst_element_error (sink, RESOURCE, NOT_FOUND,
+ (_("No filename specified")), NULL);
return FALSE;
}
sink->file = fopen (sink->filename, "w");
if (sink->file == NULL) {
- gst_element_error (GST_ELEMENT (sink),
- "Error opening file %s: %s",
- sink->filename, g_strerror(errno));
+ gst_element_error (sink, RESOURCE, OPEN_WRITE,
+ (_("Could not open file \"%s\" for writing"), sink->filename),
+ ("system error: %s", strerror (errno)));
return FALSE;
- }
+ }
GST_FLAG_SET (sink, GST_FILESINK_OPEN);
if (fclose (sink->file) != 0)
{
- gst_element_error (GST_ELEMENT (sink),
- "Error closing file %s: %s",
- sink->filename, g_strerror(errno));
+ gst_element_error (sink, RESOURCE, CLOSE,
+ (_("Error closing file \"%s\""), sink->filename),
+ GST_ERROR_SYSTEM);
}
else {
GST_FLAG_UNSET (sink, GST_FILESINK_OPEN);
if (GST_EVENT_SEEK_FLAGS (event) & GST_SEEK_FLAG_FLUSH)
if (fflush (filesink->file))
- gst_element_error (GST_ELEMENT (filesink),
- "Error flushing file %s: %s",
- filesink->filename, g_strerror(errno));
+ gst_element_error (filesink, RESOURCE, WRITE,
+ (_("Error while writing to file \"%s\""), filesink->filename),
+ GST_ERROR_SYSTEM);
switch (GST_EVENT_SEEK_METHOD(event))
{
}
case GST_EVENT_FLUSH:
if (fflush (filesink->file)) {
- gst_element_error (GST_ELEMENT (filesink),
- "Error flushing file %s: %s",
- filesink->filename, g_strerror(errno));
+ gst_element_error (filesink, RESOURCE, WRITE,
+ (_("Error while writing to file \"%s\""), filesink->filename),
+ GST_ERROR_SYSTEM);
}
break;
case GST_EVENT_EOS:
GST_BUFFER_SIZE (buf) - bytes_written,
filesink->file);
if (wrote <= 0) {
- gst_element_error (GST_ELEMENT (filesink),
- "Only %d of %d bytes written: %s",
- bytes_written, GST_BUFFER_SIZE (buf),
- strerror (errno));
+ gst_element_error (filesink, RESOURCE, WRITE,
+ (_("Error while writing to file \"%s\""), filesink->filename),
+ ("Only %d of %d bytes written: %s",
+ bytes_written, GST_BUFFER_SIZE (buf),
+ strerror (errno)));
break;
}
bytes_written += wrote;
#include <errno.h>
#include <string.h>
+#include "../gst-i18n-lib.h"
+
/**********************************************************************
* GStreamer Default File Source
src->mapsize = g_value_get_ulong (value);
g_object_notify (G_OBJECT (src), "mmapsize");
} else {
- GST_INFO_OBJECT (src, "invalid mapsize, must a multiple of pagesize, which is %d",
+ GST_INFO_OBJECT (src, "invalid mapsize, must be a multiple of pagesize, which is %d",
src->pagesize);
}
break;
mmapregion = mmap (NULL, size, PROT_READ, MAP_SHARED, src->fd, offset);
if (mmapregion == NULL) {
- gst_element_error (GST_ELEMENT (src), "couldn't map file");
+ gst_element_error (src, RESOURCE, TOO_LAZY,
+ NULL,
+ ("mmap call failed"));
return NULL;
}
else if (mmapregion == MAP_FAILED) {
ret = read (src->fd, GST_BUFFER_DATA (buf), readsize);
if (ret < 0){
- gst_element_error (GST_ELEMENT (src), "reading file (%s)",
- strerror (errno), NULL);
+ gst_element_error (src, RESOURCE, READ,
+ NULL,
+ ("system error: %s", strerror (errno)));
return NULL;
}
if (ret < readsize) {
- gst_element_error (GST_ELEMENT (src), "unexpected end of file", NULL);
+ gst_element_error (src, RESOURCE, READ,
+ NULL,
+ ("unexpected end of file"));
return NULL;
}
return TRUE;
}
/* open the file and mmap it, necessary to go to READY state */
-static gboolean
+static gboolean
gst_filesrc_open_file (GstFileSrc *src)
{
g_return_val_if_fail (!GST_FLAG_IS_SET (src ,GST_FILESRC_OPEN), FALSE);
+ if (src->filename == NULL)
+ {
+ gst_element_error (src, RESOURCE, NOT_FOUND,
+ (_("No filename specified")),
+ NULL);
+ return FALSE;
+ }
+
+ if (src->filename == NULL)
+ {
+ gst_element_error (src, RESOURCE, NOT_FOUND,
+ (_("No file specified for reading")),
+ NULL);
+ return FALSE;
+ }
+
+
GST_INFO_OBJECT (src, "opening file %s",src->filename);
/* open the file */
src->fd = open (src->filename, O_RDONLY);
- if (src->fd < 0) {
- gst_element_error (GST_ELEMENT (src), "opening file \"%s\" (%s)",
- src->filename, strerror (errno), NULL);
+ if (src->fd < 0)
+ {
+ if (errno == ENOENT)
+ gst_element_error (src, RESOURCE, NOT_FOUND,
+ NULL,
+ NULL);
+/* thomas
+ gst_element_error (src, RESOURCE, NOT_FOUND,
+ (_("File \"%s\" does not exist"), src->filename),
+ NULL);
+*/
+ else
+ gst_element_error (src, RESOURCE, OPEN_READ,
+ (_("Could not open file \"%s\" for reading"), src->filename),
+ GST_ERROR_SYSTEM);
return FALSE;
} else {
/* check if it is a regular file, otherwise bail out */
fstat(src->fd, &stat_results);
if (!S_ISREG(stat_results.st_mode)) {
- gst_element_error (GST_ELEMENT (src), "opening file \"%s\" failed. it isn't a regular file",
- src->filename, NULL);
+ gst_element_error (src, RESOURCE, OPEN_READ,
+ (_("File \"%s\" isn't a regular file"), src->filename),
+ NULL);
close(src->fd);
return FALSE;
}
# include "config.h"
#endif
+#include "../gst-i18n-lib.h"
#include "gstidentity.h"
GST_DEBUG_CATEGORY_STATIC (gst_identity_debug);
identity->error_after--;
if (identity->error_after == 0) {
gst_buffer_unref (buf);
- gst_element_error (GST_ELEMENT (identity), "errored after iterations as requested");
+ gst_element_error (identity, CORE, FAILED,
+ (_("Failed after iterations as requested")),
+ NULL);
return;
}
}
#include <fcntl.h>
#include <unistd.h>
#include <sys/mman.h>
+#include <errno.h>
+#include <string.h>
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
+#include "../gst-i18n-lib.h"
+
#include "gstmultidisksrc.h"
GST_DEBUG_CATEGORY_STATIC (gst_multidisksrc_debug);
src->fd = open ((const char *) src->currentfilename, O_RDONLY);
if (src->fd < 0) {
- perror ("open");
- gst_element_error (GST_ELEMENT (src), g_strconcat("opening file \"", src->currentfilename, "\"", NULL));
+ gst_element_error (src, RESOURCE, OPEN_READ,
+ (_("Could not open file \"%s\" for reading"), src->currentfilename),
+ ("system error: %s", strerror (errno)));
return FALSE;
+
} else {
/* find the file length */
src->size = lseek (src->fd, 0, SEEK_END);
/* collapse state if that failed */
if (src->map == NULL) {
close (src->fd);
- gst_element_error (GST_ELEMENT (src),"mmapping file");
+ gst_element_error (src, RESOURCE, TOO_LAZY,
+ NULL,
+ ("mmap call failed"));
return FALSE;
}
GST_FLAG_SET (src, GST_MULTIDISKSRC_OPEN);
#include <fcntl.h>
#include <unistd.h>
#include <sys/mman.h>
+#include <errno.h>
+#include <string.h>
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
+#include "../gst-i18n-lib.h"
+
#include "gstmultidisksrc.h"
GST_DEBUG_CATEGORY_STATIC (gst_multidisksrc_debug);
src->fd = open ((const char *) src->currentfilename, O_RDONLY);
if (src->fd < 0) {
- perror ("open");
- gst_element_error (GST_ELEMENT (src), g_strconcat("opening file \"", src->currentfilename, "\"", NULL));
+ gst_element_error (src, RESOURCE, OPEN_READ,
+ (_("Could not open file \"%s\" for reading"), src->currentfilename),
+ ("system error: %s", strerror (errno)));
return FALSE;
+
} else {
/* find the file length */
src->size = lseek (src->fd, 0, SEEK_END);
/* collapse state if that failed */
if (src->map == NULL) {
close (src->fd);
- gst_element_error (GST_ELEMENT (src),"mmapping file");
+ gst_element_error (src, RESOURCE, TOO_LAZY,
+ NULL,
+ ("mmap call failed"));
return FALSE;
}
GST_FLAG_SET (src, GST_MULTIDISKSRC_OPEN);
* Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
* 2000 Wim Taymans <wtay@chello.be>
*
- * gstpipefilter.c:
+ * gstpipefilter.c:
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
+#include <string.h>
#include <unistd.h>
#include <errno.h>
# include "config.h"
#endif
+#include "../gst-i18n-lib.h"
#include "gstpipefilter.h"
GST_DEBUG_CATEGORY_STATIC (gst_pipefilter_debug);
readbytes = read(pipefilter->fdout[0], GST_BUFFER_DATA(newbuf), pipefilter->bytes_per_read);
GST_DEBUG ("read %ld bytes", readbytes);
if (readbytes < 0) {
- perror("read");
- gst_element_error(GST_ELEMENT(pipefilter),"reading");
+ gst_element_error (pipefilter, RESOURCE, READ,
+ NULL, ("system error: %s", strerror (errno)));
return NULL;
}
/* if we didn't get as many bytes as we asked for, we're at EOF */
writebytes = write(pipefilter->fdin[1],data,size);
GST_DEBUG ("written %ld bytes", writebytes);
if (writebytes < 0) {
- perror("write");
- gst_element_error(GST_ELEMENT(pipefilter),"writing");
+ gst_element_error (pipefilter, RESOURCE, WRITE,
+ NULL, ("system error: %s", strerror (errno)));
return;
}
gst_buffer_unref(buf);
if((src->childpid = fork()) == -1)
{
- perror("fork");
- gst_element_error(GST_ELEMENT(src),"forking");
+ gst_element_error (src, RESOURCE, TOO_LAZY,
+ NULL, ("system error: %s", strerror (errno)));
return FALSE;
}
dup2(src->fdin[0], STDIN_FILENO); /* set the childs input stream */
dup2(src->fdout[1], STDOUT_FILENO); /* set the childs output stream */
execvp(src->command[0], &src->command[0]);
- /* will only reach if error */
- perror("exec");
- gst_element_error(GST_ELEMENT(src),"starting child process");
+ /* will only be reached if execvp has an error */
+ gst_element_error (src, RESOURCE, TOO_LAZY,
+ NULL, ("system error: %s", strerror (errno)));
return FALSE;
}
#include <gst/gsttypefind.h>
#include <gst/gstutils.h>
+#include <gst/gsterror.h>
GST_DEBUG_CATEGORY_STATIC (gst_type_find_element_debug);
#define GST_CAT_DEFAULT gst_type_find_element_debug
if (typefind->caps) {
stop_typefinding (typefind);
} else if (typefind->possibilities == NULL) {
- gst_element_error (GST_ELEMENT (typefind), "media type could not be detected");
+ gst_element_error (typefind, STREAM, TYPE_NOT_FOUND,
+ NULL, NULL);
} else {
/* set up typefind element for next iteration */
typefind->possibilities = g_list_sort (typefind->possibilities, compare_type_find_entry);
#include <gst/gsttypefind.h>
#include <gst/gstutils.h>
+#include <gst/gsterror.h>
GST_DEBUG_CATEGORY_STATIC (gst_type_find_element_debug);
#define GST_CAT_DEFAULT gst_type_find_element_debug
if (typefind->caps) {
stop_typefinding (typefind);
} else if (typefind->possibilities == NULL) {
- gst_element_error (GST_ELEMENT (typefind), "media type could not be detected");
+ gst_element_error (typefind, STREAM, TYPE_NOT_FOUND,
+ NULL, NULL);
} else {
/* set up typefind element for next iteration */
typefind->possibilities = g_list_sort (typefind->possibilities, compare_type_find_entry);
#include <gst/gstclock.h>
#include <gst/gstcpu.h>
#include <gst/gstelement.h>
+#include <gst/gsterror.h>
#include <gst/gstevent.h>
#include <gst/gstindex.h>
#include <gst/gstinfo.h>
extern GstDebugCategory *GST_CAT_XML;
extern GstDebugCategory *GST_CAT_NEGOTIATION;
extern GstDebugCategory *GST_CAT_REFCOUNTING;
+extern GstDebugCategory *GST_CAT_ERROR_SYSTEM;
extern GstDebugCategory *GST_CAT_EVENT;
extern GstDebugCategory *GST_CAT_PARAMS;
extern GstDebugCategory *GST_CAT_CALL_TRACE;
#include "gstelement.h"
#include "gstbin.h"
+#include "gsterror.h"
#include "gstscheduler.h"
#include "gstevent.h"
#include "gstutils.h"
#include "gstinfo.h"
+#include "gst-i18n-lib.h"
/* Element signals and args */
enum {
static void gst_element_dispose (GObject *object);
static GstElementStateReturn gst_element_change_state (GstElement *element);
-static void gst_element_error_func (GstElement* element, GstElement *source, gchar *errormsg);
+static void gst_element_error_func (GstElement* element, GstElement *source, GError *error, gchar *debug);
static void gst_element_found_tag_func (GstElement* element, GstElement *source, GstTagList *tag_list);
#ifndef GST_DISABLE_LOADSAVE
gst_element_signals[ERROR] =
g_signal_new ("error", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GstElementClass, error), NULL, NULL,
- gst_marshal_VOID__OBJECT_STRING, G_TYPE_NONE, 2,
- GST_TYPE_ELEMENT, G_TYPE_STRING);
- gst_element_signals[EOS] =
+ gst_marshal_VOID__OBJECT_POINTER_STRING, G_TYPE_NONE, 3,
+ GST_TYPE_ELEMENT, G_TYPE_POINTER, G_TYPE_STRING);
+ gst_element_signals[EOS] =
g_signal_new ("eos", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GstElementClass, eos), NULL, NULL,
gst_marshal_VOID__VOID, G_TYPE_NONE, 0);
#endif
klass->change_state = GST_DEBUG_FUNCPTR (gst_element_change_state);
- klass->error = GST_DEBUG_FUNCPTR (gst_element_error_func);
+ klass->error = GST_DEBUG_FUNCPTR (gst_element_error_func);
klass->found_tag = GST_DEBUG_FUNCPTR (gst_element_found_tag_func);
klass->numpadtemplates = 0;
* gst_element_default_error:
* @object: a #GObject that signalled the error.
* @orig: the #GstObject that initiated the error.
- * @error: the error message.
+ * @error: the GError.
+ * @debug: an additional debug information string, or NULL.
*
- * Adds a default error signal callback to an
- * element. The user data passed to the g_signal_connect is
- * ignored.
- * The default handler will simply print the error string
- * using g_print.
+ * A default error signal callback to attach to an element.
+ * The user data passed to the g_signal_connect is ignored.
+ *
+ * The default handler will simply print the error string using g_print.
*/
void
-gst_element_default_error (GObject *object, GstObject *orig, gchar *error)
-{
- gchar *name = gst_object_get_path_string (orig);
- g_print ("ERROR: %s: %s\n", name, error);
+gst_element_default_error (GObject *object, GstObject *source, GError *error, gchar *debug)
+{
+ gchar *name = gst_object_get_path_string (source);
+
+ g_print (_("ERROR: from element %s: %s.\n"), name, error->message);
+ if (debug)
+ g_print (_("Additional debug info:\n%s\n"), debug);
+
g_free (name);
-}
+}
typedef struct {
const GParamSpec *pspec;
}
static void
-gst_element_error_func (GstElement* element, GstElement *source,
- gchar *errormsg)
+gst_element_error_func (GstElement* element, GstElement *source,
+ GError *error, gchar *debug)
{
/* tell the parent */
if (GST_OBJECT_PARENT (element)) {
- GST_CAT_DEBUG (GST_CAT_EVENT, "forwarding error \"%s\" from %s to %s",
- errormsg, GST_ELEMENT_NAME (element),
- GST_OBJECT_NAME (GST_OBJECT_PARENT (element)));
+ GST_CAT_DEBUG (GST_CAT_ERROR_SYSTEM, "forwarding error \"%s\" from %s to %s",
+ error->message, GST_ELEMENT_NAME (element),
+ GST_OBJECT_NAME (GST_OBJECT_PARENT (element)));
gst_object_ref (GST_OBJECT (element));
- g_signal_emit (G_OBJECT (GST_OBJECT_PARENT (element)),
- gst_element_signals[ERROR], 0, source, errormsg);
+ g_signal_emit (G_OBJECT (GST_OBJECT_PARENT (element)),
+ gst_element_signals[ERROR], 0, source, error, debug);
gst_object_unref (GST_OBJECT (element));
+ GST_CAT_DEBUG (GST_CAT_ERROR_SYSTEM, "forwarded error \"%s\" from %s to %s",
+ error->message, GST_ELEMENT_NAME (element),
+ GST_OBJECT_NAME (GST_OBJECT_PARENT (element)));
}
}
}
/**
- * gst_element_error:
+ * gst_element_error_extended:
* @element: a #GstElement with the error.
- * @error: the printf-style string describing the error.
- * @...: the optional arguments for the string.
+ * @domain: the GStreamer error domain this error belongs to.
+ * @code: the error code belonging to the domain
+ * @message: an allocated message to be used as a replacement for the default
+ * message connected to code, or NULL
+ * debug: an allocated debug message to be used as a replacement for the
+ * default debugging information, or NULL
*
* signals an error condition on an element.
* This function is used internally by elements.
- * It results in the "error" signal.
+ * It results in the "error_2" signal.
*/
void
-gst_element_error (GstElement *element, const gchar *error, ...)
+gst_element_error_extended
+(GstElement *element, GQuark domain, gint code, gchar *message, gchar *debug,
+ const gchar *file, const gchar *function, gint line)
{
- va_list var_args;
- gchar *string;
-
+ GError *error = NULL;
+ gchar *sent_message;
+ gchar *sent_debug;
+
/* checks */
g_return_if_fail (GST_IS_ELEMENT (element));
- g_return_if_fail (error != NULL);
+
+ /* check if we send the given message or the default error message */
+ if ((message == NULL) || (message[0] == 0))
+ {
+ /* we got this message from g_strdup_printf (NULL); */
+ g_free (message);
+ sent_message = gst_error_get_message (domain, code);
+ }
+ else
+ sent_message = message;
/* create error message */
- va_start (var_args, error);
- string = g_strdup_vprintf (error, var_args);
- va_end (var_args);
- GST_CAT_INFO (GST_CAT_EVENT, "ERROR in %s: %s", GST_ELEMENT_NAME (element), string);
+ GST_CAT_INFO (GST_CAT_ERROR_SYSTEM, "signaling error in %s: %s",
+ GST_ELEMENT_NAME (element),
+ sent_message);
+ error = g_error_new (domain, code, sent_message);
/* if the element was already in error, stop now */
if (GST_FLAG_IS_SET (element, GST_ELEMENT_ERROR)) {
- GST_CAT_INFO (GST_CAT_EVENT, "recursive ERROR detected in %s", GST_ELEMENT_NAME (element));
- g_free (string);
+ GST_CAT_INFO (GST_CAT_ERROR_SYSTEM, "recursive ERROR detected in %s",
+ GST_ELEMENT_NAME (element));
+ g_free (sent_message);
+ if (debug) g_free (debug);
return;
}
-
+
GST_FLAG_SET (element, GST_ELEMENT_ERROR);
/* emit the signal, make sure the element stays available */
gst_object_ref (GST_OBJECT (element));
- g_signal_emit (G_OBJECT (element), gst_element_signals[ERROR], 0, element, string);
-
+ if (debug)
+ sent_debug = g_strdup_printf ("%s(%d):%s:\n%s",
+ file, line, function,
+ debug ? debug : "");
+ else
+ sent_debug = NULL;
+ g_free (debug);
+ g_signal_emit (G_OBJECT (element), gst_element_signals[ERROR], 0, element,
+ error, sent_debug);
+ GST_CAT_INFO (GST_CAT_ERROR_SYSTEM, "signalled error in %s: %s",
+ GST_ELEMENT_NAME (element),
+ sent_message);
+
/* tell the scheduler */
if (element->sched) {
- gst_scheduler_error (element->sched, element);
- }
+ gst_scheduler_error (element->sched, element);
+ }
- if (GST_STATE (element) == GST_STATE_PLAYING) {
+ if (GST_STATE (element) == GST_STATE_PLAYING) {
GstElementStateReturn ret;
-
+
ret = gst_element_set_state (element, GST_STATE_PAUSED);
if (ret != GST_STATE_SUCCESS) {
- g_warning ("could not PAUSE element \"%s\" after error, help!", GST_ELEMENT_NAME (element));
+ g_warning ("could not PAUSE element \"%s\" after error, help!",
+ GST_ELEMENT_NAME (element));
}
}
/* cleanup */
gst_object_unref (GST_OBJECT (element));
- g_free (string);
+ g_free (sent_message);
+ g_free (sent_debug);
+ g_error_free (error);
}
/**
#define GST_ELEMENT_CLOCK(obj) (((GstElement*)(obj))->clock)
#define GST_ELEMENT_PADS(obj) ((obj)->pads)
+#define gst_element_error(el, domain, code, message, debug) \
+ gst_element_error_extended (GST_ELEMENT(el), \
+ GST_ ## domain ## _ERROR, GST_ ## domain ## _ERROR_ ## code, \
+ g_strdup_printf message, \
+ g_strdup_printf debug, \
+ __FILE__, GST_FUNCTION, __LINE__)
+
typedef struct _GstElementFactory GstElementFactory;
typedef struct _GstElementFactoryClass GstElementFactoryClass;
void (*state_change) (GstElement *element, GstElementState old, GstElementState state);
void (*new_pad) (GstElement *element, GstPad *pad);
void (*pad_removed) (GstElement *element, GstPad *pad);
- void (*error) (GstElement *element, GstElement *source, gchar *error);
+ void (*error) (GstElement *element, GstElement *source, GError *error, gchar *debug);
void (*eos) (GstElement *element);
void (*found_tag) (GstElement *element, GstElement *source, GstTagList *tag_list);
#define gst_element_default_deep_notify gst_object_default_deep_notify
-void gst_element_default_error (GObject *object, GstObject *orig, gchar *error);
+void gst_element_default_error (GObject *object, GstObject *orig, GError *error, gchar *debug);
GType gst_element_get_type (void);
void gst_element_set_loop_function (GstElement *element,
void gst_element_set_eos (GstElement *element);
-void gst_element_error (GstElement *element, const gchar *error, ...);
+void gst_element_error_extended (GstElement *element, GQuark domain, gint code, gchar *message, gchar *debug, const gchar *file, const gchar *function, gint line);
gboolean gst_element_is_locked_state (GstElement *element);
void gst_element_set_locked_state (GstElement *element, gboolean locked_state);
--- /dev/null
+/* GStreamer
+ * Copyright (C) <2003> David A. Schleef <ds@schleef.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gst/gst.h>
+#include "gst_private.h"
+#include "gst-i18n-lib.h"
+
+#define TABLE(t, d, a, b) t[GST_ ## d ## _ERROR_ ## a] = g_strdup (b)
+#define QUARK_FUNC(string) \
+GQuark gst_ ## string ## _error_quark (void) { \
+ static GQuark quark; \
+ if (!quark) \
+ quark = g_quark_from_static_string ("gst-" # string "-error-quark"); \
+ return quark; }
+
+/* initialize the dynamic table of translated core errors */
+static gchar ** _gst_core_errors_init ()
+{
+ gchar **t = NULL;
+
+ t = g_new0 (gchar *, GST_CORE_ERROR_NUM_ERRORS);
+
+ TABLE (t, CORE, FAILED,
+ N_("GStreamer encountered a general core library error."));
+ TABLE (t, CORE, TOO_LAZY,
+ N_("GStreamer developers were too lazy to assign an error code "
+ "to this error. Please file a bug."));
+ TABLE (t, CORE, NOT_IMPLEMENTED,
+ N_("Internal GStreamer error: code not implemented. File a bug."));
+ TABLE (t, CORE, STATE_CHANGE,
+ N_("Internal GStreamer error: state change failed. File a bug."));
+ TABLE (t, CORE, PAD,
+ N_("Internal GStreamer error: pad problem. File a bug."));
+ TABLE (t, CORE, THREAD,
+ N_("Internal GStreamer error: thread problem. File a bug."));
+ TABLE (t, CORE, SCHEDULER,
+ N_("Internal GStreamer error: scheduler problem. File a bug."));
+ TABLE (t, CORE, NEGOTIATION,
+ N_("Internal GStreamer error: negotiation problem. File a bug."));
+ TABLE (t, CORE, EVENT,
+ N_("Internal GStreamer error: event problem. File a bug."));
+ TABLE (t, CORE, SEEK,
+ N_("Internal GStreamer error: seek problem. File a bug."));
+ TABLE (t, CORE, CAPS,
+ N_("Internal GStreamer error: caps problem. File a bug."));
+ TABLE (t, CORE, TAG,
+ N_("Internal GStreamer error: tag problem. File a bug."));
+
+ return t;
+}
+
+/* initialize the dynamic table of translated library errors */
+static gchar ** _gst_library_errors_init ()
+{
+ gchar **t = NULL;
+
+ t = g_new0 (gchar *, GST_LIBRARY_ERROR_NUM_ERRORS);
+
+ TABLE (t, LIBRARY, FAILED,
+ N_("GStreamer encountered a general supporting library error."));
+ TABLE (t, LIBRARY, TOO_LAZY,
+ N_("GStreamer developers were too lazy to assign an error code "
+ "to this error. Please file a bug."));
+ TABLE (t, LIBRARY, INIT,
+ N_("Could not initialize supporting library."));
+ TABLE (t, LIBRARY, SHUTDOWN,
+ N_("Could not close supporting library."));
+ TABLE (t, LIBRARY, SETTINGS,
+ N_("Could not close supporting library."));
+
+ return t;
+}
+
+/* initialize the dynamic table of translated resource errors */
+static gchar ** _gst_resource_errors_init ()
+{
+ gchar **t = NULL;
+
+ t = g_new0 (gchar *, GST_RESOURCE_ERROR_NUM_ERRORS);
+
+ TABLE (t, RESOURCE, FAILED,
+ N_("GStreamer encountered a general supporting library error."));
+ TABLE (t, RESOURCE, TOO_LAZY,
+ N_("GStreamer developers were too lazy to assign an error code "
+ "to this error. Please file a bug."));
+ TABLE (t, RESOURCE, NOT_FOUND,
+ N_("Resource not found."));
+ TABLE (t, RESOURCE, BUSY,
+ N_("Resource busy or not available."));
+ TABLE (t, RESOURCE, OPEN_READ,
+ N_("Could not open resource for reading."));
+ TABLE (t, RESOURCE, OPEN_WRITE,
+ N_("Could not open resource for writing."));
+ TABLE (t, RESOURCE, OPEN_READ_WRITE,
+ N_("Could not open resource for reading and writing."));
+ TABLE (t, RESOURCE, CLOSE,
+ N_("Could not close resource."));
+ TABLE (t, RESOURCE, READ,
+ N_("Could not read from resource."));
+ TABLE (t, RESOURCE, WRITE,
+ N_("Could not write to resource."));
+ TABLE (t, RESOURCE, SEEK,
+ N_("Could not perform seek on resource."));
+ TABLE (t, RESOURCE, SYNC,
+ N_("Could not synchronize on resource."));
+ TABLE (t, RESOURCE, SETTINGS,
+ N_("Could not get/set settings from/on resource."));
+
+ return t;
+}
+
+/* initialize the dynamic table of translated stream errors */
+static gchar ** _gst_stream_errors_init ()
+{
+ gchar **t = NULL;
+
+ t = g_new0 (gchar *, GST_STREAM_ERROR_NUM_ERRORS);
+
+ TABLE (t, STREAM, FAILED,
+ N_("GStreamer encountered a general supporting library error."));
+ TABLE (t, STREAM, TOO_LAZY,
+ N_("GStreamer developers were too lazy to assign an error code "
+ "to this error. Please file a bug."));
+ TABLE (t, STREAM, NOT_IMPLEMENTED,
+ N_("Element doesn't implement handling of this stream. "
+ "Please file a bug."));
+ TABLE (t, STREAM, TYPE_NOT_FOUND,
+ N_("Could not determine type of stream."));
+ TABLE (t, STREAM, WRONG_TYPE,
+ N_("The stream is of a different type than handled by this element."));
+ TABLE (t, STREAM, DECODE,
+ N_("Could not decode stream."));
+ TABLE (t, STREAM, ENCODE,
+ N_("Could not encode stream."));
+ TABLE (t, STREAM, DEMUX,
+ N_("Could not demultiplex stream."));
+ TABLE (t, STREAM, MUX,
+ N_("Could not multiplex stream."));
+ TABLE (t, STREAM, FORMAT,
+ N_("Stream is of the wrong format."));
+
+ return t;
+}
+
+QUARK_FUNC (core)
+QUARK_FUNC (library)
+QUARK_FUNC (resource)
+QUARK_FUNC (stream)
+
+/**
+ * gst_error_get_message:
+ * @domain: the GStreamer error domain this error belongs to.
+ * @code: the error code belonging to the domain.
+ *
+ * Returns: a newly allocated string describing the error message in the
+ * current locale.
+ */
+
+gchar *
+gst_error_get_message (GQuark domain, gint code)
+{
+ static gchar **gst_core_errors = NULL;
+ static gchar **gst_library_errors = NULL;
+ static gchar **gst_resource_errors = NULL;
+ static gchar **gst_stream_errors = NULL;
+
+ gchar *message = NULL;
+
+ /* initialize error message tables if necessary */
+ if (gst_core_errors == NULL)
+ gst_core_errors = _gst_core_errors_init ();
+ if (gst_library_errors == NULL)
+ gst_library_errors = _gst_library_errors_init ();
+ if (gst_resource_errors == NULL)
+ gst_resource_errors = _gst_resource_errors_init ();
+ if (gst_stream_errors == NULL)
+ gst_stream_errors = _gst_stream_errors_init ();
+
+
+ if (domain == GST_CORE_ERROR) message = gst_core_errors [code];
+ else if (domain == GST_LIBRARY_ERROR) message = gst_library_errors [code];
+ else if (domain == GST_RESOURCE_ERROR) message = gst_resource_errors[code];
+ else if (domain == GST_STREAM_ERROR) message = gst_stream_errors [code];
+ else
+ {
+ g_warning ("No error messages for domain %s", g_quark_to_string (domain));
+ return g_strdup_printf (_("No error message for domain %s"), g_quark_to_string (domain));
+ }
+ if (message)
+ return g_strdup (_(message));
+ else
+ return g_strdup_printf (_("No standard error message for domain %s and code %d"),
+ g_quark_to_string (domain), code);
+}
--- /dev/null
+/* GStreamer
+ * Copyright (C) 2004 Thomas Vander Stichele <thomas at apestaart dot org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_ERROR_H__
+#define __GST_ERROR_H__
+
+G_BEGIN_DECLS
+
+/*
+ * we define FIXME error domains:
+ * GST_CORE_ERROR
+ * GST_LIBRARY_ERROR
+ * GST_RESOURCE_ERROR
+ * GST_STREAM_ERROR
+ *
+ * Check GError API docs for rationale for naming.
+ */
+
+/* Core errors are anything that can go wrong in or using
+ * the core GStreamer library */
+/* FIXME: should we divide in numerical blocks so we can easily add
+ for example PAD errors later ? */
+typedef enum {
+ GST_CORE_ERROR_FAILED = 1,
+ GST_CORE_ERROR_TOO_LAZY,
+ GST_CORE_ERROR_NOT_IMPLEMENTED,
+ GST_CORE_ERROR_STATE_CHANGE,
+ GST_CORE_ERROR_PAD,
+ GST_CORE_ERROR_THREAD,
+ GST_CORE_ERROR_SCHEDULER,
+ GST_CORE_ERROR_NEGOTIATION,
+ GST_CORE_ERROR_EVENT,
+ GST_CORE_ERROR_SEEK,
+ GST_CORE_ERROR_CAPS,
+ GST_CORE_ERROR_TAG,
+ GST_CORE_ERROR_NUM_ERRORS
+}
+GstCoreError;
+
+#define GST_CORE_ERROR gst_core_error_quark ()
+GQuark gst_core_error_quark (void);
+
+/* Library errors are for errors from the library being used by elements
+ initializing, closing, ... */
+typedef enum {
+ GST_LIBRARY_ERROR_FAILED = 1,
+ GST_LIBRARY_ERROR_TOO_LAZY,
+ GST_LIBRARY_ERROR_INIT,
+ GST_LIBRARY_ERROR_SHUTDOWN,
+ GST_LIBRARY_ERROR_SETTINGS,
+ GST_LIBRARY_ERROR_NUM_ERRORS
+}
+GstLibraryError;
+
+#define GST_LIBRARY_ERROR gst_library_error_quark ()
+GQuark gst_library_error_quark (void);
+
+
+/* Resource errors are for anything external used by an element:
+ memory, files, network connections, process space, ...
+ They're typically used by source and sink elements */
+typedef enum {
+ GST_RESOURCE_ERROR_FAILED = 1,
+ GST_RESOURCE_ERROR_TOO_LAZY,
+ GST_RESOURCE_ERROR_NOT_FOUND,
+ GST_RESOURCE_ERROR_BUSY,
+ GST_RESOURCE_ERROR_OPEN_READ,
+ GST_RESOURCE_ERROR_OPEN_WRITE,
+ GST_RESOURCE_ERROR_OPEN_READ_WRITE,
+ GST_RESOURCE_ERROR_CLOSE,
+ GST_RESOURCE_ERROR_READ,
+ GST_RESOURCE_ERROR_WRITE,
+ GST_RESOURCE_ERROR_SEEK,
+ GST_RESOURCE_ERROR_SYNC,
+ GST_RESOURCE_ERROR_SETTINGS,
+ GST_RESOURCE_ERROR_NUM_ERRORS
+}
+GstResourceError;
+
+#define GST_RESOURCE_ERROR gst_resource_error_quark ()
+GQuark gst_resource_error_quark (void);
+
+/* Stream errors are for anything related to the stream being processed:
+ format errors, media type errors, ...
+ They're typically used by decoders, demuxers, converters, ... */
+typedef enum {
+ GST_STREAM_ERROR_FAILED = 1,
+ GST_STREAM_ERROR_TOO_LAZY,
+ GST_STREAM_ERROR_NOT_IMPLEMENTED,
+ GST_STREAM_ERROR_TYPE_NOT_FOUND,
+ GST_STREAM_ERROR_WRONG_TYPE,
+ GST_STREAM_ERROR_DECODE,
+ GST_STREAM_ERROR_ENCODE,
+ GST_STREAM_ERROR_DEMUX,
+ GST_STREAM_ERROR_MUX,
+ GST_STREAM_ERROR_FORMAT,
+ GST_STREAM_ERROR_NUM_ERRORS
+}
+GstStreamError;
+
+#define GST_STREAM_ERROR gst_stream_error_quark ()
+GQuark gst_stream_error_quark (void);
+
+
+#define GST_ERROR_SYSTEM ("system error: %s", g_strerror (errno))
+gchar * gst_error_get_message (GQuark domain, gint code);
+
+G_END_DECLS
+
+#endif /* __GST_ERROR_H__ */
+
+
GstDebugCategory *GST_CAT_XML = NULL;
GstDebugCategory *GST_CAT_NEGOTIATION = NULL;
GstDebugCategory *GST_CAT_REFCOUNTING = NULL;
+GstDebugCategory *GST_CAT_ERROR_SYSTEM = NULL;
GstDebugCategory *GST_CAT_EVENT = NULL;
GstDebugCategory *GST_CAT_PARAMS = NULL;
GstDebugCategory *GST_CAT_CALL_TRACE = NULL;
GST_CAT_REFCOUNTING = _gst_debug_category_new ("GST_REFCOUNTING",
GST_DEBUG_BOLD | GST_DEBUG_FG_BLUE | GST_DEBUG_BG_GREEN,
NULL);
+ GST_CAT_ERROR_SYSTEM = _gst_debug_category_new ("GST_ERROR_SYSTEM",
+ GST_DEBUG_BOLD | GST_DEBUG_FG_RED | GST_DEBUG_BG_WHITE,
+ NULL);
+
GST_CAT_EVENT = _gst_debug_category_new ("GST_EVENT",
GST_DEBUG_BOLD | GST_DEBUG_FG_WHITE | GST_DEBUG_BG_RED,
NULL);
VOID:OBJECT
VOID:OBJECT,PARAM
VOID:OBJECT,POINTER
+VOID:OBJECT,POINTER,STRING
VOID:OBJECT,STRING
VOID:INT,INT
VOID:INT64
#include "gstscheduler.h"
#include "gstevent.h"
#include "gstinfo.h"
+#include "gsterror.h"
#include "gstvalue.h"
#define GST_CAT_DEFAULT GST_CAT_PADS
/**
* gst_pad_link_try:
- * @link link to try
+ * @link: link to try
*
* Tries to (re)link the pads with the given link. The function takes ownership
* of the supplied link. If the function returns FALSE and an old link existed,
* unset.
*
* This function calls gst_pad_try_set_caps() on the pad. If that
- * call fails, gst_element_error() is called to indicate a negotiation
+ * call fails, GST_ELEMENT_ERROR() is called to indicate a negotiation
* failure.
*
* Returns: TRUE if the caps were set correctly, otherwise FALSE
}
link_ret = gst_pad_try_set_caps (pad, caps);
if (link_ret == GST_PAD_LINK_REFUSED) {
- gst_element_error (gst_pad_get_parent (pad), "negotiation failed");
+ gst_element_error (gst_pad_get_parent (pad), CORE, PAD,
+ NULL,
+ ("failed to negotiate (try_set_caps returned REFUSED)"));
return FALSE;
}
/* report error */
parent = gst_pad_get_parent (pad);
- gst_element_error (parent, "negotiation failed on pad %s:%s",
- GST_DEBUG_PAD_NAME (pad));
+ gst_element_error (parent, CORE, PAD,
+ NULL,
+ ("negotiation failed on pad %s:%s", GST_DEBUG_PAD_NAME (pad)));
#endif
return FALSE;
}
GST_CAT_LOG_OBJECT (GST_CAT_DATAFLOW, pad, "pulling");
- g_return_val_if_fail (GST_PAD_DIRECTION (pad) == GST_PAD_SINK,
+ g_return_val_if_fail (GST_PAD_DIRECTION (pad) == GST_PAD_SINK,
GST_DATA (gst_event_new (GST_EVENT_INTERRUPT)));
peer = GST_RPAD_PEER (pad);
if (!peer) {
- gst_element_error (GST_PAD_PARENT (pad),
- "pull on pad %s:%s but it was unlinked",
- GST_ELEMENT_NAME (GST_PAD_PARENT (pad)),
- GST_PAD_NAME (pad), NULL);
+ gst_element_error (GST_PAD_PARENT (pad), CORE, PAD, NULL,
+ ("pull on pad %s:%s but it was unlinked", GST_DEBUG_PAD_NAME (pad)));
}
else {
restart:
if (peer->gethandler) {
GstData *data;
- GST_CAT_LOG_OBJECT (GST_CAT_DATAFLOW, pad,
+ GST_CAT_LOG_OBJECT (GST_CAT_DATAFLOW, pad,
"calling gethandler %s of peer pad %s:%s",
GST_DEBUG_FUNCPTR_NAME (peer->gethandler),
GST_DEBUG_PAD_NAME (peer));
}
/* no null buffers allowed */
- gst_element_error (GST_PAD_PARENT (pad),
- "NULL buffer during pull on %s:%s",
- GST_DEBUG_PAD_NAME (pad));
-
+ gst_element_error (GST_PAD_PARENT (pad), CORE, PAD, NULL,
+ ("NULL buffer during pull on %s:%s", GST_DEBUG_PAD_NAME (pad)));
} else {
- gst_element_error (GST_PAD_PARENT (pad),
- "internal error: pull on pad %s:%s "
- "but the peer pad %s:%s has no gethandler",
- GST_DEBUG_PAD_NAME (pad), GST_DEBUG_PAD_NAME (peer));
+ gst_element_error (GST_PAD_PARENT (pad), CORE, PAD, NULL,
+ ("pull on pad %s:%s but the peer pad %s:%s has no gethandler",
+ GST_DEBUG_PAD_NAME (pad), GST_DEBUG_PAD_NAME (peer)));
}
}
return GST_DATA (gst_event_new (GST_EVENT_INTERRUPT));
#include "gstscheduler.h"
#include "gstevent.h"
#include "gstinfo.h"
+#include "gsterror.h"
static GstElementDetails gst_queue_details = GST_ELEMENT_DETAILS (
"Queue",
if (!queue->may_deadlock) {
g_mutex_unlock (queue->qlock);
gst_data_unref (data);
- gst_element_error (GST_ELEMENT (queue),
- "deadlock found, source pad elements are shut down");
+ gst_element_error (queue, CORE, THREAD, NULL,
+ ("deadlock found, shutting down source pad elements"));
/* we don't go to out_unref here, since we want to
- * unref the buffer *before* calling gst_element_error */
+ * unref the buffer *before* calling GST_ELEMENT_ERROR */
return;
} else {
GST_CAT_WARNING_OBJECT (GST_CAT_DATAFLOW, queue,
/* this means the other end is shut down */
if (!queue->may_deadlock) {
g_mutex_unlock (queue->qlock);
- gst_element_error (GST_ELEMENT (queue),
- "deadlock found, sink pad elements are shut down");
+ gst_element_error (queue, CORE, THREAD, NULL,
+ ("deadlock found, shutting down sink pad elements"));
goto restart;
} else {
GST_CAT_WARNING_OBJECT (GST_CAT_DATAFLOW, queue,
}
if (loop_count == 0) {
- gst_element_error (parent,
- "(internal error) basic: maximum number of switches exceeded");
+ gst_element_error (parent, CORE, SCHEDULER, NULL,
+ ("(internal error) basic: maximum number of switches exceeded"));
return;
}
GST_CAT_DEBUG (debug_dataflow, "new pad in mid-switch!");
pad = (GstPad *) GST_RPAD_PEER (peer);
if (!pad) {
- gst_element_error (parent, "pad unlinked");
+ gst_element_error (parent, CORE, PAD, NULL, ("pad unlinked"));
}
parent = GST_PAD_PARENT (pad);
peer = GST_RPAD_PEER (pad);
* either, we have an error */
if (different_sched && !peer_decoupled)
{
- gst_element_error (element,
- "element \"%s\" is not decoupled but has pads "
- "in different schedulers",
- GST_ELEMENT_NAME (element), NULL);
+ gst_element_error (element, CORE, SCHEDULER, NULL,
+ ("element \"%s\" is not decoupled but has pads in different schedulers",
+ GST_ELEMENT_NAME (element)));
return FALSE;
}
/* ok, the peer is in a different scheduler and is decoupled,
chain->sched->context,
wrapper_function, 0, (char **) element);
if (GST_ELEMENT_THREADSTATE (element) == NULL) {
- gst_element_error (element, "could not create cothread for \"%s\"",
- GST_ELEMENT_NAME (element), NULL);
+ gst_element_error (element, RESOURCE, TOO_LAZY, NULL, ("could not create cothread for \"%s\"",
+ GST_ELEMENT_NAME (element)));
return FALSE;
}
GST_DEBUG ("created cothread %p for '%s'",
return GST_STATE_SUCCESS;
error:
- gst_element_error (element, "failed state change as requested");
+ gst_element_error (element, CORE, STATE_CHANGE,
+ NULL, NULL);
return GST_STATE_FAILURE;
}
# include "config.h"
#endif
+#include "../gst-i18n-lib.h"
+
#include <gst/gst.h>
#include <errno.h>
#include "gstfilesink.h"
#include <sys/types.h>
#include <unistd.h>
+
GST_DEBUG_CATEGORY_STATIC (gst_filesink_debug);
#define GST_CAT_DEFAULT gst_filesink_debug
/* open the file */
if (!sink->filename)
{
- gst_element_error (GST_ELEMENT (sink),
- "Error opening file: no file given");
+ gst_element_error (sink, RESOURCE, NOT_FOUND,
+ (_("No filename specified")), NULL);
return FALSE;
}
sink->file = fopen (sink->filename, "w");
if (sink->file == NULL) {
- gst_element_error (GST_ELEMENT (sink),
- "Error opening file %s: %s",
- sink->filename, g_strerror(errno));
+ gst_element_error (sink, RESOURCE, OPEN_WRITE,
+ (_("Could not open file \"%s\" for writing"), sink->filename),
+ ("system error: %s", strerror (errno)));
return FALSE;
- }
+ }
GST_FLAG_SET (sink, GST_FILESINK_OPEN);
if (fclose (sink->file) != 0)
{
- gst_element_error (GST_ELEMENT (sink),
- "Error closing file %s: %s",
- sink->filename, g_strerror(errno));
+ gst_element_error (sink, RESOURCE, CLOSE,
+ (_("Error closing file \"%s\""), sink->filename),
+ GST_ERROR_SYSTEM);
}
else {
GST_FLAG_UNSET (sink, GST_FILESINK_OPEN);
if (GST_EVENT_SEEK_FLAGS (event) & GST_SEEK_FLAG_FLUSH)
if (fflush (filesink->file))
- gst_element_error (GST_ELEMENT (filesink),
- "Error flushing file %s: %s",
- filesink->filename, g_strerror(errno));
+ gst_element_error (filesink, RESOURCE, WRITE,
+ (_("Error while writing to file \"%s\""), filesink->filename),
+ GST_ERROR_SYSTEM);
switch (GST_EVENT_SEEK_METHOD(event))
{
}
case GST_EVENT_FLUSH:
if (fflush (filesink->file)) {
- gst_element_error (GST_ELEMENT (filesink),
- "Error flushing file %s: %s",
- filesink->filename, g_strerror(errno));
+ gst_element_error (filesink, RESOURCE, WRITE,
+ (_("Error while writing to file \"%s\""), filesink->filename),
+ GST_ERROR_SYSTEM);
}
break;
case GST_EVENT_EOS:
GST_BUFFER_SIZE (buf) - bytes_written,
filesink->file);
if (wrote <= 0) {
- gst_element_error (GST_ELEMENT (filesink),
- "Only %d of %d bytes written: %s",
- bytes_written, GST_BUFFER_SIZE (buf),
- strerror (errno));
+ gst_element_error (filesink, RESOURCE, WRITE,
+ (_("Error while writing to file \"%s\""), filesink->filename),
+ ("Only %d of %d bytes written: %s",
+ bytes_written, GST_BUFFER_SIZE (buf),
+ strerror (errno)));
break;
}
bytes_written += wrote;
#include <errno.h>
#include <string.h>
+#include "../gst-i18n-lib.h"
+
/**********************************************************************
* GStreamer Default File Source
src->mapsize = g_value_get_ulong (value);
g_object_notify (G_OBJECT (src), "mmapsize");
} else {
- GST_INFO_OBJECT (src, "invalid mapsize, must a multiple of pagesize, which is %d",
+ GST_INFO_OBJECT (src, "invalid mapsize, must be a multiple of pagesize, which is %d",
src->pagesize);
}
break;
mmapregion = mmap (NULL, size, PROT_READ, MAP_SHARED, src->fd, offset);
if (mmapregion == NULL) {
- gst_element_error (GST_ELEMENT (src), "couldn't map file");
+ gst_element_error (src, RESOURCE, TOO_LAZY,
+ NULL,
+ ("mmap call failed"));
return NULL;
}
else if (mmapregion == MAP_FAILED) {
ret = read (src->fd, GST_BUFFER_DATA (buf), readsize);
if (ret < 0){
- gst_element_error (GST_ELEMENT (src), "reading file (%s)",
- strerror (errno), NULL);
+ gst_element_error (src, RESOURCE, READ,
+ NULL,
+ ("system error: %s", strerror (errno)));
return NULL;
}
if (ret < readsize) {
- gst_element_error (GST_ELEMENT (src), "unexpected end of file", NULL);
+ gst_element_error (src, RESOURCE, READ,
+ NULL,
+ ("unexpected end of file"));
return NULL;
}
return TRUE;
}
/* open the file and mmap it, necessary to go to READY state */
-static gboolean
+static gboolean
gst_filesrc_open_file (GstFileSrc *src)
{
g_return_val_if_fail (!GST_FLAG_IS_SET (src ,GST_FILESRC_OPEN), FALSE);
+ if (src->filename == NULL)
+ {
+ gst_element_error (src, RESOURCE, NOT_FOUND,
+ (_("No filename specified")),
+ NULL);
+ return FALSE;
+ }
+
+ if (src->filename == NULL)
+ {
+ gst_element_error (src, RESOURCE, NOT_FOUND,
+ (_("No file specified for reading")),
+ NULL);
+ return FALSE;
+ }
+
+
GST_INFO_OBJECT (src, "opening file %s",src->filename);
/* open the file */
src->fd = open (src->filename, O_RDONLY);
- if (src->fd < 0) {
- gst_element_error (GST_ELEMENT (src), "opening file \"%s\" (%s)",
- src->filename, strerror (errno), NULL);
+ if (src->fd < 0)
+ {
+ if (errno == ENOENT)
+ gst_element_error (src, RESOURCE, NOT_FOUND,
+ NULL,
+ NULL);
+/* thomas
+ gst_element_error (src, RESOURCE, NOT_FOUND,
+ (_("File \"%s\" does not exist"), src->filename),
+ NULL);
+*/
+ else
+ gst_element_error (src, RESOURCE, OPEN_READ,
+ (_("Could not open file \"%s\" for reading"), src->filename),
+ GST_ERROR_SYSTEM);
return FALSE;
} else {
/* check if it is a regular file, otherwise bail out */
fstat(src->fd, &stat_results);
if (!S_ISREG(stat_results.st_mode)) {
- gst_element_error (GST_ELEMENT (src), "opening file \"%s\" failed. it isn't a regular file",
- src->filename, NULL);
+ gst_element_error (src, RESOURCE, OPEN_READ,
+ (_("File \"%s\" isn't a regular file"), src->filename),
+ NULL);
close(src->fd);
return FALSE;
}
# include "config.h"
#endif
+#include "../gst-i18n-lib.h"
#include "gstidentity.h"
GST_DEBUG_CATEGORY_STATIC (gst_identity_debug);
identity->error_after--;
if (identity->error_after == 0) {
gst_buffer_unref (buf);
- gst_element_error (GST_ELEMENT (identity), "errored after iterations as requested");
+ gst_element_error (identity, CORE, FAILED,
+ (_("Failed after iterations as requested")),
+ NULL);
return;
}
}
#include <fcntl.h>
#include <unistd.h>
#include <sys/mman.h>
+#include <errno.h>
+#include <string.h>
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
+#include "../gst-i18n-lib.h"
+
#include "gstmultidisksrc.h"
GST_DEBUG_CATEGORY_STATIC (gst_multidisksrc_debug);
src->fd = open ((const char *) src->currentfilename, O_RDONLY);
if (src->fd < 0) {
- perror ("open");
- gst_element_error (GST_ELEMENT (src), g_strconcat("opening file \"", src->currentfilename, "\"", NULL));
+ gst_element_error (src, RESOURCE, OPEN_READ,
+ (_("Could not open file \"%s\" for reading"), src->currentfilename),
+ ("system error: %s", strerror (errno)));
return FALSE;
+
} else {
/* find the file length */
src->size = lseek (src->fd, 0, SEEK_END);
/* collapse state if that failed */
if (src->map == NULL) {
close (src->fd);
- gst_element_error (GST_ELEMENT (src),"mmapping file");
+ gst_element_error (src, RESOURCE, TOO_LAZY,
+ NULL,
+ ("mmap call failed"));
return FALSE;
}
GST_FLAG_SET (src, GST_MULTIDISKSRC_OPEN);
#include <fcntl.h>
#include <unistd.h>
#include <sys/mman.h>
+#include <errno.h>
+#include <string.h>
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
+#include "../gst-i18n-lib.h"
+
#include "gstmultidisksrc.h"
GST_DEBUG_CATEGORY_STATIC (gst_multidisksrc_debug);
src->fd = open ((const char *) src->currentfilename, O_RDONLY);
if (src->fd < 0) {
- perror ("open");
- gst_element_error (GST_ELEMENT (src), g_strconcat("opening file \"", src->currentfilename, "\"", NULL));
+ gst_element_error (src, RESOURCE, OPEN_READ,
+ (_("Could not open file \"%s\" for reading"), src->currentfilename),
+ ("system error: %s", strerror (errno)));
return FALSE;
+
} else {
/* find the file length */
src->size = lseek (src->fd, 0, SEEK_END);
/* collapse state if that failed */
if (src->map == NULL) {
close (src->fd);
- gst_element_error (GST_ELEMENT (src),"mmapping file");
+ gst_element_error (src, RESOURCE, TOO_LAZY,
+ NULL,
+ ("mmap call failed"));
return FALSE;
}
GST_FLAG_SET (src, GST_MULTIDISKSRC_OPEN);
* Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
* 2000 Wim Taymans <wtay@chello.be>
*
- * gstpipefilter.c:
+ * gstpipefilter.c:
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
+#include <string.h>
#include <unistd.h>
#include <errno.h>
# include "config.h"
#endif
+#include "../gst-i18n-lib.h"
#include "gstpipefilter.h"
GST_DEBUG_CATEGORY_STATIC (gst_pipefilter_debug);
readbytes = read(pipefilter->fdout[0], GST_BUFFER_DATA(newbuf), pipefilter->bytes_per_read);
GST_DEBUG ("read %ld bytes", readbytes);
if (readbytes < 0) {
- perror("read");
- gst_element_error(GST_ELEMENT(pipefilter),"reading");
+ gst_element_error (pipefilter, RESOURCE, READ,
+ NULL, ("system error: %s", strerror (errno)));
return NULL;
}
/* if we didn't get as many bytes as we asked for, we're at EOF */
writebytes = write(pipefilter->fdin[1],data,size);
GST_DEBUG ("written %ld bytes", writebytes);
if (writebytes < 0) {
- perror("write");
- gst_element_error(GST_ELEMENT(pipefilter),"writing");
+ gst_element_error (pipefilter, RESOURCE, WRITE,
+ NULL, ("system error: %s", strerror (errno)));
return;
}
gst_buffer_unref(buf);
if((src->childpid = fork()) == -1)
{
- perror("fork");
- gst_element_error(GST_ELEMENT(src),"forking");
+ gst_element_error (src, RESOURCE, TOO_LAZY,
+ NULL, ("system error: %s", strerror (errno)));
return FALSE;
}
dup2(src->fdin[0], STDIN_FILENO); /* set the childs input stream */
dup2(src->fdout[1], STDOUT_FILENO); /* set the childs output stream */
execvp(src->command[0], &src->command[0]);
- /* will only reach if error */
- perror("exec");
- gst_element_error(GST_ELEMENT(src),"starting child process");
+ /* will only be reached if execvp has an error */
+ gst_element_error (src, RESOURCE, TOO_LAZY,
+ NULL, ("system error: %s", strerror (errno)));
return FALSE;
}
#include "gstscheduler.h"
#include "gstevent.h"
#include "gstinfo.h"
+#include "gsterror.h"
static GstElementDetails gst_queue_details = GST_ELEMENT_DETAILS (
"Queue",
if (!queue->may_deadlock) {
g_mutex_unlock (queue->qlock);
gst_data_unref (data);
- gst_element_error (GST_ELEMENT (queue),
- "deadlock found, source pad elements are shut down");
+ gst_element_error (queue, CORE, THREAD, NULL,
+ ("deadlock found, shutting down source pad elements"));
/* we don't go to out_unref here, since we want to
- * unref the buffer *before* calling gst_element_error */
+ * unref the buffer *before* calling GST_ELEMENT_ERROR */
return;
} else {
GST_CAT_WARNING_OBJECT (GST_CAT_DATAFLOW, queue,
/* this means the other end is shut down */
if (!queue->may_deadlock) {
g_mutex_unlock (queue->qlock);
- gst_element_error (GST_ELEMENT (queue),
- "deadlock found, sink pad elements are shut down");
+ gst_element_error (queue, CORE, THREAD, NULL,
+ ("deadlock found, shutting down sink pad elements"));
goto restart;
} else {
GST_CAT_WARNING_OBJECT (GST_CAT_DATAFLOW, queue,
#include <gst/gsttypefind.h>
#include <gst/gstutils.h>
+#include <gst/gsterror.h>
GST_DEBUG_CATEGORY_STATIC (gst_type_find_element_debug);
#define GST_CAT_DEFAULT gst_type_find_element_debug
if (typefind->caps) {
stop_typefinding (typefind);
} else if (typefind->possibilities == NULL) {
- gst_element_error (GST_ELEMENT (typefind), "media type could not be detected");
+ gst_element_error (typefind, STREAM, TYPE_NOT_FOUND,
+ NULL, NULL);
} else {
/* set up typefind element for next iteration */
typefind->possibilities = g_list_sort (typefind->possibilities, compare_type_find_entry);
#include <gst/gsttypefind.h>
#include <gst/gstutils.h>
+#include <gst/gsterror.h>
GST_DEBUG_CATEGORY_STATIC (gst_type_find_element_debug);
#define GST_CAT_DEFAULT gst_type_find_element_debug
if (typefind->caps) {
stop_typefinding (typefind);
} else if (typefind->possibilities == NULL) {
- gst_element_error (GST_ELEMENT (typefind), "media type could not be detected");
+ gst_element_error (typefind, STREAM, TYPE_NOT_FOUND,
+ NULL, NULL);
} else {
/* set up typefind element for next iteration */
typefind->possibilities = g_list_sort (typefind->possibilities, compare_type_find_entry);
# Files from the GStreamer distribution which have already been
# marked to allow runtime translations of messages
gst/gst.c
+gst/gsterror.c
gst/gsttag.c
+gst/elements/gstfakesink.c
+gst/elements/gstfilesink.c
+gst/elements/gstfilesrc.c
+gst/elements/gstidentity.c
+gst/elements/gstmultidisksrc.c
+gst/elements/gstpipefilter.c
gst/elements/gsttypefindelement.c
gst/parse/grammar.y
tools/gst-launch.c
msgid ""
msgstr ""
"Project-Id-Version: GStreamer\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2004-01-13 17:56+0100\n"
+"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
+"POT-Creation-Date: 2004-01-14 12:48+0100\n"
"PO-Revision-Date: 2004-01-13 16:52+0100\n"
"Last-Translator: Julien Moutte <julien@moutte.net>\n"
"Language-Team: French <fr@li.org>\n"
msgid ""
"Default debug level from 1 (only error) to 5 (anything) or 0 for no output"
msgstr ""
-"Niveau de deboguage par defaut de 1 (que les erreurs) a 5 (tout) ou 0 "
-"pour n'avoir aucun affichage"
+"Niveau de deboguage par defaut de 1 (que les erreurs) a 5 (tout) ou 0 pour "
+"n'avoir aucun affichage"
#: gst/gst.c:121
msgid "LEVEL"
"the individual categories.\n"
"Example: GST_AUTOPLUG:5,GST_ELEMENT_*:3"
msgstr ""
-"Liste séparée par des virgules de paires nom_catégorie:niveau definissant des "
-"niveaux spécifiques pour chaque catégorie.\n"
+"Liste séparée par des virgules de paires nom_catégorie:niveau definissant "
+"des niveaux spécifiques pour chaque catégorie.\n"
"Exemple: GST_AUTOPLUG:5,GST_ELEMENT_*:3"
#: gst/gst.c:122
"Comma-separated list of plugins to preload in addition to the list stored in "
"env variable GST_PLUGIN_PATH"
msgstr ""
-"Liste séparée par des virgules de plugins a precharger en plus de la "
-"liste contenue dans la variable d'environnement GST_PLUGIN_PATH"
+"Liste séparée par des virgules de plugins a precharger en plus de la liste "
+"contenue dans la variable d'environnement GST_PLUGIN_PATH"
#: gst/gst.c:130
msgid "PLUGINS"
msgid "REGISTRY"
msgstr "REGISTRE"
+#: gst/gsterror.c:43
+msgid "Resource not found."
+msgstr ""
+
+#: gst/gsterror.c:44
+msgid ""
+"GStreamer developers were too lazy to assign an error code to this error. "
+"Please kick them."
+msgstr ""
+
+#: gst/gsterror.c:56
+msgid "Failed to change state"
+msgstr "Echoué a changer d'état"
+
+#: gst/gsterror.c:68
+msgid "Could not determine type of stream"
+msgstr "Echoué a déterminer le type du flux"
+
#: gst/gsttag.c:61
msgid "title"
msgstr "titre"
msgid ", "
msgstr ", "
-#: gst/elements/gsttypefindelement.c:152
+#: gst/elements/gstfilesink.c:237 gst/elements/gstfilesrc.c:729
+msgid "No filename specified"
+msgstr ""
+
+#: gst/elements/gstfilesink.c:244
+#, c-format
+msgid "Could not open file \"%s\" for writing"
+msgstr ""
+
+#: gst/elements/gstfilesink.c:264
+#, c-format
+msgid "Error closing file \"%s\""
+msgstr ""
+
+#: gst/elements/gstfilesink.c:331 gst/elements/gstfilesink.c:363
+#: gst/elements/gstfilesink.c:415
+#, c-format
+msgid "Error while writing to file \"%s\""
+msgstr ""
+
+#: gst/elements/gstfilesrc.c:737 gst/elements/gstfilesrc.c:752
+#, c-format
+msgid "File \"%s\" does not exist"
+msgstr ""
+
+#: gst/elements/gstfilesrc.c:755 gst/elements/gstmultidisksrc.c:244
+#, c-format
+msgid "Could not open file \"%s\" for reading"
+msgstr ""
+
+#: gst/elements/gstfilesrc.c:766
+#, c-format
+msgid "File \"%s\" isn't a regular file"
+msgstr ""
+
+#: gst/elements/gstidentity.c:170
+msgid "Failed after iterations as requested"
+msgstr ""
+
+#: gst/elements/gsttypefindelement.c:153
msgid "caps"
msgstr "capacités"
-#: gst/elements/gsttypefindelement.c:152
+#: gst/elements/gsttypefindelement.c:153
msgid "detected capabilities in stream"
msgstr "capacités detectées dans le flux"
-#: gst/elements/gsttypefindelement.c:155
+#: gst/elements/gsttypefindelement.c:156
msgid "minimum"
msgstr "minimum"
-#: gst/elements/gsttypefindelement.c:158
+#: gst/elements/gsttypefindelement.c:159
msgid "maximum"
msgstr "maximum"
msgstr "ERREUR: pas d'element tube de plus haut niveau dans le fichier '%s'.\n"
#: tools/gst-launch.c:99
-#, c-format
msgid "WARNING: only one toplevel element is supported at this time."
msgstr ""
"AVERTISSEMENT: actuellement seul un element tube de plus haut niveau est "
#: tools/gst-launch.c:109
#, c-format
msgid "ERROR: could not parse command line argument %d: %s.\n"
-msgstr "ERREUR: impossible d'interpreter l'argument de la ligne de"
-" commande numero %d: %s.\n"
+msgstr ""
+"ERREUR: impossible d'interpreter l'argument de la ligne de commande numero %"
+"d: %s.\n"
#: tools/gst-launch.c:119
#, c-format
msgid "FOUND TAG : found by element \"%s\".\n"
msgstr "TAG DECOUVERT : decouvert par l'element \"%s\".\n"
-#: tools/gst-launch.c:331
+#: tools/gst-launch.c:263
+#, fuzzy, c-format
+msgid "ERROR: from element %s: %s.\n"
+msgstr ""
+"ERREUR: impossible d'interpreter l'argument de la ligne de commande numero %"
+"d: %s.\n"
+
+#: tools/gst-launch.c:265
+#, c-format
+msgid ""
+"Additional debug info:\n"
+"%s\n"
+msgstr ""
+
+#: tools/gst-launch.c:340
msgid "Output tags (also known as metadata)"
msgstr "tags de sortie (aussi connus sous le nom de metadata)"
-#: tools/gst-launch.c:333
+#: tools/gst-launch.c:342
msgid "Output status information and property notifications"
msgstr ""
"Afficher des informations sur le status et les notifications de proprietés"
-#: tools/gst-launch.c:335
+#: tools/gst-launch.c:344
msgid "Do not output status information of TYPE"
msgstr "Ne pas afficher d'informations sur les status de TYPE"
-#: tools/gst-launch.c:335
+#: tools/gst-launch.c:344
msgid "TYPE1,TYPE2,..."
msgstr "TYPE1,TYPE2,..."
-#: tools/gst-launch.c:338
+#: tools/gst-launch.c:347
msgid "Save xml representation of pipeline to FILE and exit"
msgstr "Sauvegarder la representation xml du tube dans FICHIER et quitter"
-#: tools/gst-launch.c:338
+#: tools/gst-launch.c:347
msgid "FILE"
msgstr "FICHIER"
-#: tools/gst-launch.c:341
+#: tools/gst-launch.c:350
msgid "Do not install a fault handler"
msgstr "Ne pas installer un gestionaire de dysfonctionement"
-#: tools/gst-launch.c:343
+#: tools/gst-launch.c:352
msgid "Print alloc trace (if enabled at compile time)"
msgstr "Imprimer les traces d'allocations (si activées lors de la compilation)"
-#: tools/gst-launch.c:345
+#: tools/gst-launch.c:354
msgid "Number of times to iterate pipeline"
msgstr "Nombres d'iterations du tube a accomplir"
-#: tools/gst-launch.c:410
+#: tools/gst-launch.c:419
#, c-format
msgid "ERROR: pipeline could not be constructed: %s.\n"
msgstr "ERREUR: le tube n'a pas pu etre construit: %s.\n"
-#: tools/gst-launch.c:414
-#, c-format
+#: tools/gst-launch.c:423
msgid "ERROR: pipeline could not be constructed.\n"
msgstr "ERREUR: le tube n'a pas pu etre construit.\n"
-#: tools/gst-launch.c:418
+#: tools/gst-launch.c:427
#, c-format
msgid "WARNING: erroneous pipeline: %s\n"
msgstr "AVERTISSEMENT: tube erroné: %s\n"
-#: tools/gst-launch.c:419
-#, c-format
+#: tools/gst-launch.c:428
msgid " Trying to run anyway.\n"
msgstr " Tentative d'execution malgrè tout.\n"
-#: tools/gst-launch.c:443
-#, c-format
+#: tools/gst-launch.c:453
msgid "ERROR: the 'pipeline' element wasn't found.\n"
msgstr "ERREUR: l'element 'tube' est introuvable.\n"
-#: tools/gst-launch.c:450
-#, c-format
+#: tools/gst-launch.c:460
msgid "RUNNING pipeline ...\n"
msgstr "EXECUTION du tube en cours ...\n"
-#: tools/gst-launch.c:452
-#, c-format
+#: tools/gst-launch.c:462
msgid "ERROR: pipeline doesn't want to play.\n"
msgstr "ERREUR: le tube refuse de s'executer.\n"
msgstr ""
"Project-Id-Version: GStreamer\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/\n"
-"POT-Creation-Date: 2004-01-13 15:14+0100\n"
+"POT-Creation-Date: 2004-01-14 12:48+0100\n"
"PO-Revision-Date: 2004-01-13 12:03+0100\n"
"Last-Translator: Thomas Vander Stichele <thomas@apestaart.org>\n"
"Language-Team: Dutch <nl@li.org>\n"
msgid "REGISTRY"
msgstr "REGISTER"
+#: gst/gsterror.c:43
+msgid "Resource not found."
+msgstr "Bron niet gevonden."
+
+#: gst/gsterror.c:44
+msgid ""
+"GStreamer developers were too lazy to assign an error code to this error. "
+"Please kick them."
+msgstr ""
+"GStreamer ontwikkelaars waren te lui om een foutcode te geven aan deze fout. "
+"Gelieve hen te schoppen."
+
+#: gst/gsterror.c:56
+msgid "Failed to change state"
+msgstr ""
+
+#: gst/gsterror.c:68
+msgid "Could not determine type of stream"
+msgstr ""
+
#: gst/gsttag.c:61
msgid "title"
msgstr "titel"
msgid ", "
msgstr ", "
-#: gst/elements/gsttypefindelement.c:152
+#: gst/elements/gstfilesink.c:237 gst/elements/gstfilesrc.c:729
+msgid "No filename specified"
+msgstr "Geen bestandsnaam gegeven"
+
+#: gst/elements/gstfilesink.c:244
+#, c-format
+msgid "Could not open file \"%s\" for writing"
+msgstr "Kon bestand \"%s\" niet openen om te schrijven"
+
+#: gst/elements/gstfilesink.c:264
+#, c-format
+msgid "Error closing file \"%s\""
+msgstr "Fout bij het sluiten van bestand \"%s\""
+
+#: gst/elements/gstfilesink.c:331 gst/elements/gstfilesink.c:363
+#: gst/elements/gstfilesink.c:415
+#, c-format
+msgid "Error while writing to file \"%s\""
+msgstr "Fout bij het schrijven naar bestand \"%s\""
+
+#: gst/elements/gstfilesrc.c:737 gst/elements/gstfilesrc.c:752
+#, c-format
+msgid "File \"%s\" does not exist"
+msgstr "Bestand \"%s\" bestaat niet"
+
+#: gst/elements/gstfilesrc.c:755 gst/elements/gstmultidisksrc.c:244
+#, c-format
+msgid "Could not open file \"%s\" for reading"
+msgstr "Kon bestand \"%s\" niet openen om te lezen lezen"
+
+#: gst/elements/gstfilesrc.c:766
+#, c-format
+msgid "File \"%s\" isn't a regular file"
+msgstr "Bestand \"%s\" is geen gewoon bestand"
+
+#: gst/elements/gstidentity.c:170
+msgid "Failed after iterations as requested"
+msgstr ""
+
+#: gst/elements/gsttypefindelement.c:153
msgid "caps"
msgstr "mogelijkheden"
-#: gst/elements/gsttypefindelement.c:152
+#: gst/elements/gsttypefindelement.c:153
msgid "detected capabilities in stream"
msgstr "gedetecteerde mogelijkheden in stroom"
-#: gst/elements/gsttypefindelement.c:155
+#: gst/elements/gsttypefindelement.c:156
msgid "minimum"
msgstr "minimum"
-#: gst/elements/gsttypefindelement.c:158
+#: gst/elements/gsttypefindelement.c:159
msgid "maximum"
msgstr "maximum"
-#: gst/parse/grammar.y:164
+#: gst/parse/grammar.y:169
#, c-format
msgid "specified empty bin \"%s\", not allowed"
msgstr "lege ton \"%s\", niet toegelaten"
-#: gst/parse/grammar.y:169
+#: gst/parse/grammar.y:174
#, c-format
msgid "no bin \"%s\", skipping"
msgstr "geen ton \"%s\", overgeslagen"
-#: gst/parse/grammar.y:313
+#: gst/parse/grammar.y:318
#, c-format
msgid "no property \"%s\" in element \"%s\""
msgstr "geen eigenschap \"%s\" in element \"%s\""
-#: gst/parse/grammar.y:322
+#: gst/parse/grammar.y:327
#, c-format
msgid "could not set property \"%s\" in element \"%s\" to \"%s\""
msgstr "kon eigenschap \"%s\" in element \"%s\" niet op \"%s\" instellen"
-#: gst/parse/grammar.y:327
+#: gst/parse/grammar.y:332
#, c-format
msgid ""
"could not convert \"%s\" so that it fits property \"%s\" in element \"%s\""
"kon \"%s\" niet omzetten zodat het in eigenschap \"%s\" in element \"%s\" "
"past"
-#: gst/parse/grammar.y:506
+#: gst/parse/grammar.y:511
#, c-format
msgid "could not link %s to %s"
msgstr "kon %s niet verbinden met %s"
-#: gst/parse/grammar.y:551
+#: gst/parse/grammar.y:556
#, c-format
msgid "no element \"%s\""
msgstr "geen element \"%s\""
-#: gst/parse/grammar.y:602
+#: gst/parse/grammar.y:607
#, c-format
msgid "could not parse caps \"%s\""
msgstr "kon mogelijkheden \"%s\" niet verwerken"
-#: gst/parse/grammar.y:624 gst/parse/grammar.y:678 gst/parse/grammar.y:694
-#: gst/parse/grammar.y:752
+#: gst/parse/grammar.y:629 gst/parse/grammar.y:683 gst/parse/grammar.y:699
+#: gst/parse/grammar.y:757
msgid "link without source element"
msgstr "verbinding zonder bronelement"
-#: gst/parse/grammar.y:630 gst/parse/grammar.y:675 gst/parse/grammar.y:761
+#: gst/parse/grammar.y:635 gst/parse/grammar.y:680 gst/parse/grammar.y:766
msgid "link without sink element"
msgstr "verbinding zonder doelelement"
-#: gst/parse/grammar.y:712
+#: gst/parse/grammar.y:717
#, c-format
msgid "no source element for URI \"%s\""
msgstr "geen bronelement voor URI \"%s\""
-#: gst/parse/grammar.y:722
+#: gst/parse/grammar.y:727
#, c-format
msgid "no element to link URI \"%s\" to"
msgstr "geen element om URI \"%s\" mee te verbinden"
-#: gst/parse/grammar.y:730
+#: gst/parse/grammar.y:735
#, c-format
msgid "no sink element for URI \"%s\""
msgstr "geen doelelement voor URI \"%s\""
-#: gst/parse/grammar.y:734
+#: gst/parse/grammar.y:739
#, c-format
msgid "could not link sink element for URI \"%s\""
msgstr "kon doelelement niet verbinden voor URI \"%s\""
-#: gst/parse/grammar.y:746
+#: gst/parse/grammar.y:751
msgid "empty pipeline not allowed"
msgstr "lege pijplijn niet toegelaten"
"moment."
#: tools/gst-launch.c:109
+#, c-format
msgid "ERROR: could not parse command line argument %d: %s.\n"
msgstr "FOUT: versta argument %d op commandoregel niet: %s.\n"
msgid "FOUND TAG : found by element \"%s\".\n"
msgstr "TAG GEVONDEN : gevonden door element \"%s\".\n"
-#: tools/gst-launch.c:331
+#: tools/gst-launch.c:263
+#, c-format
+msgid "ERROR: from element %s: %s.\n"
+msgstr "FOUT: van element %s: %s.\n"
+
+#: tools/gst-launch.c:265
+#, c-format
+msgid ""
+"Additional debug info:\n"
+"%s\n"
+msgstr ""
+"Extra debug-informatie:\n"
+"%s\n"
+
+#: tools/gst-launch.c:340
msgid "Output tags (also known as metadata)"
msgstr "Druk tags (ofte metadata) af"
-#: tools/gst-launch.c:333
+#: tools/gst-launch.c:342
msgid "Output status information and property notifications"
msgstr "Druk statusinformatie en eigenschapsnotificatie af"
-#: tools/gst-launch.c:335
+#: tools/gst-launch.c:344
msgid "Do not output status information of TYPE"
msgstr "Druk statusinformatie van type TYPE niet af"
-#: tools/gst-launch.c:335
+#: tools/gst-launch.c:344
msgid "TYPE1,TYPE2,..."
msgstr "TYPE1,TYPE2,..."
-#: tools/gst-launch.c:338
+#: tools/gst-launch.c:347
msgid "Save xml representation of pipeline to FILE and exit"
msgstr "Bewaar xml-representatie van pijplijn in BESTAND en stop"
-#: tools/gst-launch.c:338
+#: tools/gst-launch.c:347
msgid "FILE"
msgstr "BESTAND"
-#: tools/gst-launch.c:341
+#: tools/gst-launch.c:350
msgid "Do not install a fault handler"
msgstr "Installeer geen foutafhandelaar"
-#: tools/gst-launch.c:343
+#: tools/gst-launch.c:352
msgid "Print alloc trace (if enabled at compile time)"
msgstr "Druk allocatiespoor af indien aangezet tijdens compileren"
-#: tools/gst-launch.c:345
+#: tools/gst-launch.c:354
msgid "Number of times to iterate pipeline"
msgstr "Aantal keren om de pijplijn te herhalen"
-#: tools/gst-launch.c:410
+#: tools/gst-launch.c:419
#, c-format
msgid "ERROR: pipeline could not be constructed: %s.\n"
msgstr "FOUT: pijplijn kon niet gemaakt worden: %s.\n"
-#: tools/gst-launch.c:414
+#: tools/gst-launch.c:423
msgid "ERROR: pipeline could not be constructed.\n"
msgstr "FOUT: pijplijn kon niet gemaakt worden.\n"
-#: tools/gst-launch.c:418
+#: tools/gst-launch.c:427
#, c-format
msgid "WARNING: erroneous pipeline: %s\n"
msgstr "WAARSCHUWING: foutieve pijplijn: %s\n"
-#: tools/gst-launch.c:419
+#: tools/gst-launch.c:428
msgid " Trying to run anyway.\n"
msgstr " Probeer toch uit te voeren.\n"
-#: tools/gst-launch.c:443
+#: tools/gst-launch.c:453
msgid "ERROR: the 'pipeline' element wasn't found.\n"
msgstr "FOUT: het 'pijplijn' element werd niet gevonden.\n"
-#: tools/gst-launch.c:450
+#: tools/gst-launch.c:460
msgid "RUNNING pipeline ...\n"
msgstr "BEZIG met pijplijn ...\n"
-#: tools/gst-launch.c:452
+#: tools/gst-launch.c:462
msgid "ERROR: pipeline doesn't want to play.\n"
msgstr "FOUT: pijplijn wil niet spelen.\n"