c/: add core's plugins to the mix so that playbin works

Original commit message from CVS:

* check/Makefile.am:
* configure.ac:
add core's plugins to the mix so that playbin works
* check/generic/states.c: (GST_START_TEST):
set a 0 timeout on pipelines, so they don't force the next
state change
* gst/playback/gstplaybasebin.c: (setup_source), (prepare_output),
(gst_play_base_bin_change_state):
remove the crappy error handling and do GST error handling
This commit is contained in:
Thomas Vander Stichele 2005-08-24 18:03:12 +00:00
parent e520824f28
commit 2136419a0a
6 changed files with 37 additions and 29 deletions

View file

@ -8,7 +8,7 @@ REGISTRY_ENVIRONMENT = \
TESTS_ENVIRONMENT = \ TESTS_ENVIRONMENT = \
$(REGISTRY_ENVIRONMENT) \ $(REGISTRY_ENVIRONMENT) \
GST_PLUGIN_PATH_ONLY=yes \ GST_PLUGIN_PATH_ONLY=yes \
GST_PLUGIN_PATH=$(top_builddir)/gst:$(top_builddir)/ext GST_PLUGIN_PATH=$(top_builddir)/gst:$(top_builddir)/ext:$(GST_PLUGINS_DIR)
# ths core dumps of some machines have PIDs appended # ths core dumps of some machines have PIDs appended
CLEANFILES = core.* test-registry.xml CLEANFILES = core.* test-registry.xml

View file

@ -37,6 +37,10 @@ GST_START_TEST (test_state_changes)
GST_DEBUG ("testing element %s", name); GST_DEBUG ("testing element %s", name);
element = gst_element_factory_make (name, name); element = gst_element_factory_make (name, name);
if (GST_IS_PIPELINE (element)) {
GST_DEBUG ("element %s is a pipeline", name);
g_object_set (G_OBJECT (element), "play-timeout", (guint64) 0, NULL);
}
gst_element_set_state (element, GST_STATE_READY); gst_element_set_state (element, GST_STATE_READY);
gst_element_set_state (element, GST_STATE_PAUSED); gst_element_set_state (element, GST_STATE_PAUSED);

View file

@ -219,6 +219,13 @@ if test -z $GST_TOOLS_DIR; then
fi fi
AC_SUBST(GST_TOOLS_DIR) AC_SUBST(GST_TOOLS_DIR)
GST_PLUGINS_DIR=`pkg-config --variable=pluginsdir gstreamer-$GST_MAJORMINOR`
if test -z $GST_PLUGINS_DIR; then
AC_MSG_ERROR([no plugins dir defined in GStreamer pkg-config file; core upgrade needed.])
fi
AC_SUBST(GST_PLUGINS_DIR)
dnl check for gstreamer-dataprotocol; uninstalled is selected preferentially dnl check for gstreamer-dataprotocol; uninstalled is selected preferentially
PKG_CHECK_MODULES(GST_GDP, gstreamer-dataprotocol-$GST_MAJORMINOR >= $GST_REQ, PKG_CHECK_MODULES(GST_GDP, gstreamer-dataprotocol-$GST_MAJORMINOR >= $GST_REQ,
HAVE_GST_GDP="yes", HAVE_GST_GDP="no") HAVE_GST_GDP="yes", HAVE_GST_GDP="no")

View file

@ -21,6 +21,7 @@
#include "config.h" #include "config.h"
#endif #endif
#include <gst/gst-i18n-plugin.h>
#include <string.h> #include <string.h>
#include "gstplaybasebin.h" #include "gstplaybasebin.h"
#include "gststreamselector.h" #include "gststreamselector.h"
@ -1100,8 +1101,7 @@ setup_substreams (GstPlayBaseBin * play_base_bin)
* all the streams or until a preroll queue has been filled. * all the streams or until a preroll queue has been filled.
*/ */
static gboolean static gboolean
setup_source (GstPlayBaseBin * play_base_bin, setup_source (GstPlayBaseBin * play_base_bin, gchar ** new_location)
gchar ** new_location, GError ** error)
{ {
GstElement *subbin = NULL; GstElement *subbin = NULL;
@ -1110,7 +1110,7 @@ setup_source (GstPlayBaseBin * play_base_bin,
/* delete old src */ /* delete old src */
if (play_base_bin->source) { if (play_base_bin->source) {
GST_LOG ("removing old src element"); GST_DEBUG_OBJECT (play_base_bin, "removing old src element");
gst_element_set_state (play_base_bin->source, GST_STATE_NULL); gst_element_set_state (play_base_bin->source, GST_STATE_NULL);
gst_bin_remove (GST_BIN (play_base_bin), play_base_bin->source); gst_bin_remove (GST_BIN (play_base_bin), play_base_bin->source);
} }
@ -1127,7 +1127,7 @@ setup_source (GstPlayBaseBin * play_base_bin,
/* remove the old decoder now, if any */ /* remove the old decoder now, if any */
if (play_base_bin->decoder) { if (play_base_bin->decoder) {
GST_LOG ("removing old decoder element"); GST_DEBUG_OBJECT (play_base_bin, "removing old decoder element");
gst_bin_remove (GST_BIN (play_base_bin), play_base_bin->decoder); gst_bin_remove (GST_BIN (play_base_bin), play_base_bin->decoder);
play_base_bin->decoder = NULL; play_base_bin->decoder = NULL;
} }
@ -1291,26 +1291,32 @@ no_source:
gchar *prot; gchar *prot;
/* whoops, could not create the source element */ /* whoops, could not create the source element */
if (play_base_bin->uri == NULL) {
GST_ELEMENT_ERROR (play_base_bin, RESOURCE, NOT_FOUND,
(_("No URI specified to play from.")), (NULL));
return FALSE;
}
prot = gst_uri_get_protocol (play_base_bin->uri); prot = gst_uri_get_protocol (play_base_bin->uri);
if (prot) { if (prot) {
g_set_error (error, 0, 0, "No URI handler implemented for \"%s\"", prot); GST_ELEMENT_ERROR (play_base_bin, RESOURCE, NOT_FOUND,
(_("No URI handler implemented for \"%s\"."), prot), (NULL));
g_free (prot); g_free (prot);
} else { } else {
g_set_error (error, 0, 0, "Invalid URI \"%s\"", play_base_bin->uri); GST_ELEMENT_ERROR (play_base_bin, RESOURCE, NOT_FOUND,
(_("Invalid URI \"%s\"."), play_base_bin->uri), (NULL));
} }
GST_WARNING ("don't know how to read %s", play_base_bin->uri);
return FALSE; return FALSE;
} }
no_decodebin: no_decodebin:
{ {
g_set_error (error, 0, 0, "Could not create autoplugger element"); GST_ELEMENT_ERROR (play_base_bin, CORE, FAILED,
GST_WARNING ("can't find decoder element"); (_("Could not create \"decodebin\" element.")), (NULL));
return FALSE; return FALSE;
} }
could_not_link: could_not_link:
{ {
g_set_error (error, 0, 0, "Could not link source and autoplugger"); GST_ELEMENT_ERROR (play_base_bin, CORE, NEGOTIATION,
GST_WARNING ("can't link source to decoder element"); (NULL), ("Can't link source to decoder element"));
return FALSE; return FALSE;
} }
} }
@ -1370,11 +1376,10 @@ prepare_output (GstPlayBaseBin * play_base_bin)
if (!stream_found) { if (!stream_found) {
if (!no_media) { if (!no_media) {
GST_ELEMENT_ERROR (play_base_bin, STREAM, CODEC_NOT_FOUND, GST_ELEMENT_ERROR (play_base_bin, STREAM, CODEC_NOT_FOUND,
("You do not have decoders installed to handle this media file, " (_("You do not have a decoder installed to handle \"%s\". You might need to install the necessary plugins."), play_base_bin->uri), (NULL));
"you might need to install the corresponding plugins"), (NULL));
} else { } else {
GST_ELEMENT_ERROR (play_base_bin, STREAM, WRONG_TYPE, GST_ELEMENT_ERROR (play_base_bin, STREAM, WRONG_TYPE,
("This is not a media file"), (NULL)); (_("\"%s\" is not a media file")), (NULL));
} }
return FALSE; return FALSE;
} }
@ -1652,13 +1657,12 @@ gst_play_base_bin_change_state (GstElement * element)
GstPlayBaseBin *play_base_bin; GstPlayBaseBin *play_base_bin;
gint transition = GST_STATE_TRANSITION (element); gint transition = GST_STATE_TRANSITION (element);
gchar *new_location = NULL; gchar *new_location = NULL;
GError *error = NULL;
play_base_bin = GST_PLAY_BASE_BIN (element); play_base_bin = GST_PLAY_BASE_BIN (element);
switch (transition) { switch (transition) {
case GST_STATE_READY_TO_PAUSED: case GST_STATE_READY_TO_PAUSED:
if (!setup_source (play_base_bin, &new_location, &error) || error != NULL) if (!setup_source (play_base_bin, &new_location))
goto source_failed; goto source_failed;
break; break;
default: default:
@ -1689,17 +1693,6 @@ gst_play_base_bin_change_state (GstElement * element)
/* ERRORS */ /* ERRORS */
source_failed: source_failed:
{ {
if (!error) {
/* opening failed but no error - hellup */
GST_ELEMENT_ERROR (GST_ELEMENT (play_base_bin), STREAM,
NOT_IMPLEMENTED,
("cannot open file \"%s\"", play_base_bin->uri), (NULL));
} else {
/* just copy the cached error - type doesn't matter */
GST_ELEMENT_ERROR (play_base_bin, STREAM, TOO_LAZY,
(error->message), (NULL));
g_error_free (error);
}
play_base_bin->need_rebuild = TRUE; play_base_bin->need_rebuild = TRUE;
return GST_STATE_FAILURE; return GST_STATE_FAILURE;

View file

@ -8,7 +8,7 @@ REGISTRY_ENVIRONMENT = \
TESTS_ENVIRONMENT = \ TESTS_ENVIRONMENT = \
$(REGISTRY_ENVIRONMENT) \ $(REGISTRY_ENVIRONMENT) \
GST_PLUGIN_PATH_ONLY=yes \ GST_PLUGIN_PATH_ONLY=yes \
GST_PLUGIN_PATH=$(top_builddir)/gst:$(top_builddir)/ext GST_PLUGIN_PATH=$(top_builddir)/gst:$(top_builddir)/ext:$(GST_PLUGINS_DIR)
# ths core dumps of some machines have PIDs appended # ths core dumps of some machines have PIDs appended
CLEANFILES = core.* test-registry.xml CLEANFILES = core.* test-registry.xml

View file

@ -37,6 +37,10 @@ GST_START_TEST (test_state_changes)
GST_DEBUG ("testing element %s", name); GST_DEBUG ("testing element %s", name);
element = gst_element_factory_make (name, name); element = gst_element_factory_make (name, name);
if (GST_IS_PIPELINE (element)) {
GST_DEBUG ("element %s is a pipeline", name);
g_object_set (G_OBJECT (element), "play-timeout", (guint64) 0, NULL);
}
gst_element_set_state (element, GST_STATE_READY); gst_element_set_state (element, GST_STATE_READY);
gst_element_set_state (element, GST_STATE_PAUSED); gst_element_set_state (element, GST_STATE_PAUSED);