summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuis de Bethencourt <luis@debethencourt.com>2011-04-01 16:52:01 +0200
committerLuis de Bethencourt <luis@debethencourt.com>2011-04-01 16:55:25 +0200
commit1717bdd4099efe3c6654c0c179403b5d73372fe4 (patch)
tree6cbce1095446bdad80e8ffd359f51a52ef71d536
parent9cbca6f7e2f5ca9369a045574168336deb831022 (diff)
general: support for audio files
-rw-r--r--src/gst_engine.c28
-rw-r--r--src/gst_engine.h1
2 files changed, 27 insertions, 2 deletions
diff --git a/src/gst_engine.c b/src/gst_engine.c
index cded18b..cf7ea48 100644
--- a/src/gst_engine.c
+++ b/src/gst_engine.c
@@ -29,6 +29,21 @@
#define SAVE_POSITION_MIN_DURATION 300 * 1000 // don't save >5 minute files
#define SAVE_POSITION_THRESHOLD 0.05 // percentage threshold
+// GstPlayFlags flags from playbin2. It is the policy of GStreamer to
+// not publicly expose element-specific enums. That's why this
+// GstPlayFlags enum has been copied here.
+typedef enum {
+ GST_PLAY_FLAG_VIDEO = 0x00000001,
+ GST_PLAY_FLAG_AUDIO = 0x00000002,
+ GST_PLAY_FLAG_TEXT = 0x00000004,
+ GST_PLAY_FLAG_VIS = 0x00000008,
+ GST_PLAY_FLAG_SOFT_VOLUME = 0x00000010,
+ GST_PLAY_FLAG_NATIVE_AUDIO = 0x00000020,
+ GST_PLAY_FLAG_NATIVE_VIDEO = 0x00000040,
+ GST_PLAY_FLAG_DOWNLOAD = 0x00000080,
+ GST_PLAY_FLAG_BUFFERING = 0x000000100
+} GstPlayFlags;
+
/* -------------------- static functions --------------------- */
gboolean
@@ -86,6 +101,7 @@ discover (GstEngine * engine, gchar * uri)
GstDiscovererVideoInfo *v_info;
GError *error = NULL;
GList *list;
+ GstPlayFlags flags;
dc = gst_discoverer_new (timeout * GST_SECOND, &error);
if (G_UNLIKELY (error)) {
@@ -116,6 +132,12 @@ discover (GstEngine * engine, gchar * uri)
v_info = (GstDiscovererVideoInfo *) list->data;
engine->media_width = gst_discoverer_video_info_get_width (v_info);
engine->media_height = gst_discoverer_video_info_get_height (v_info);
+ } else {
+ engine->vis = gst_element_factory_make ("goom2k1", "goom2k1");
+
+ g_object_get (G_OBJECT (engine->player), "flags", &flags, NULL);
+ g_object_set (G_OBJECT (engine->player), "flags",
+ flags | GST_PLAY_FLAG_VIS, NULL);
}
gst_discoverer_info_unref (info);
@@ -276,8 +298,8 @@ bus_call (GstBus * bus, GstMessage * msg, gpointer data)
gboolean
engine_init (GstEngine * engine, GstElement * sink)
{
- engine->media_width = -1;
- engine->media_height = -1;
+ engine->media_width = 600;
+ engine->media_height = 400;
engine->media_duration = -1;
engine->direction_foward = TRUE;
engine->prev_done = TRUE;
@@ -296,6 +318,8 @@ engine_init (GstEngine * engine, GstElement * sink)
g_object_set (G_OBJECT (engine->player), "video-sink", engine->sink, NULL);
engine->bus = gst_pipeline_get_bus (GST_PIPELINE (engine->player));
+ engine->vis = NULL;
+
return TRUE;
}
diff --git a/src/gst_engine.h b/src/gst_engine.h
index a0c71a9..a8b147e 100644
--- a/src/gst_engine.h
+++ b/src/gst_engine.h
@@ -39,6 +39,7 @@ struct _GstEngine
GstElement *player;
GstElement *sink;
+ GstElement *vis;
GstBus *bus;
};