GstElement *playbin;
- gboolean playing;
+ GstState state;
} PlayerInternal;
static void prepare_xwindow_id_callback(GstBus *bus, GstMessage *message, PlayerInternal *priv)
gint64 pos, len;
char tmp[8];
- if (priv->playing)
+ if (priv->state != GST_STATE_NULL)
{
if (!gst_element_query_position(priv->playbin, &fmt, &pos))
pos = -1;
else
pos = len = -1;
- if (len != -1 && pos != -1)
+ if (pos != -1 && len > 0)
{
double fractional_pos = (double)pos / (double)len;
else
gtk_label_set_text(GTK_LABEL(priv->progressleft), "--:--");
- if (len != -1)
+ if (len > 0)
{
int secs = len / 1000000000;
gst_element_set_state(priv->playbin, GST_STATE_NULL);
- priv->playing = FALSE;
+ priv->state = GST_STATE_NULL;
gtk_widget_set_name(GTK_WIDGET(priv->playbutton), "play-button");
update_progress_callback(priv);
switch (new)
{
case GST_STATE_PLAYING:
- priv->playing = TRUE;
gtk_widget_set_name(GTK_WIDGET(priv->playbutton), "pause-button");
break;
case GST_STATE_NULL:
case GST_STATE_PAUSED:
- priv->playing = FALSE;
gtk_widget_set_name(GTK_WIDGET(priv->playbutton), "play-button");
break;
g_return_if_reached();
}
+ priv->state = new;
+
update_progress_callback(priv);
}
static void playbutton_clicked_callback(GtkButton *button, PlayerInternal *priv)
{
- if (priv->playing)
+ if (priv->state == GST_STATE_PLAYING)
gst_element_set_state(priv->playbin, GST_STATE_PAUSED);
else
gst_element_set_state(priv->playbin, GST_STATE_PLAYING);
setup_ui(priv);
+ priv->state = GST_STATE_NULL;
+
priv->playbin = gst_element_factory_make("playbin", "playbin");
g_object_set(G_OBJECT(priv->playbin), "uri", argv[1], NULL);