2 * Copyright (C) 2006 Benjamin Otte <otte@gnome.org>
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin Street, Fifth Floor,
17 * Boston, MA 02110-1301 USA
24 #include "swfdec_player_manager.h"
25 #include "swfdec_source.h"
33 G_DEFINE_TYPE (SwfdecPlayerManager
, swfdec_player_manager
, G_TYPE_OBJECT
)
36 swfdec_player_manager_get_property (GObject
*object
, guint param_id
, GValue
*value
,
39 SwfdecPlayerManager
*manager
= SWFDEC_PLAYER_MANAGER (object
);
43 g_value_set_boolean (value
, swfdec_player_manager_get_playing (manager
));
46 g_value_set_double (value
, swfdec_player_manager_get_speed (manager
));
49 G_OBJECT_WARN_INVALID_PROPERTY_ID (object
, param_id
, pspec
);
55 swfdec_player_manager_set_property (GObject
*object
, guint param_id
, const GValue
*value
,
58 SwfdecPlayerManager
*manager
= SWFDEC_PLAYER_MANAGER (object
);
62 swfdec_player_manager_set_playing (manager
, g_value_get_boolean (value
));
65 swfdec_player_manager_set_speed (manager
, g_value_get_double (value
));
68 G_OBJECT_WARN_INVALID_PROPERTY_ID (object
, param_id
, pspec
);
74 swfdec_player_manager_dispose (GObject
*object
)
76 SwfdecPlayerManager
*manager
= SWFDEC_PLAYER_MANAGER (object
);
78 swfdec_player_manager_set_playing (manager
, FALSE
);
79 g_object_unref (manager
->player
);
81 G_OBJECT_CLASS (swfdec_player_manager_parent_class
)->dispose (object
);
85 swfdec_player_manager_class_init (SwfdecPlayerManagerClass
* g_class
)
87 GObjectClass
*object_class
= G_OBJECT_CLASS (g_class
);
89 object_class
->dispose
= swfdec_player_manager_dispose
;
90 object_class
->set_property
= swfdec_player_manager_set_property
;
91 object_class
->get_property
= swfdec_player_manager_get_property
;
93 g_object_class_install_property (object_class
, PROP_SPEED
,
94 g_param_spec_double ("speed", "speed", "playback speed of movie",
95 G_MINDOUBLE
, 16.0, 1.0, G_PARAM_READWRITE
));
96 g_object_class_install_property (object_class
, PROP_SPEED
,
97 g_param_spec_boolean ("playing", "playing", "if the movie is played back",
98 FALSE
, G_PARAM_READWRITE
));
102 swfdec_player_manager_init (SwfdecPlayerManager
*manager
)
104 manager
->speed
= 1.0;
108 swfdec_player_manager_set_player (SwfdecPlayerManager
*manager
, SwfdecPlayer
*player
)
110 if (manager
->player
== player
)
113 if (manager
->player
) {
114 g_object_unref (manager
->player
);
116 manager
->player
= player
;
118 g_object_ref (player
);
122 SwfdecPlayerManager
*
123 swfdec_player_manager_new (SwfdecPlayer
*player
)
125 SwfdecPlayerManager
*manager
;
127 g_return_val_if_fail (player
== NULL
|| SWFDEC_IS_PLAYER (player
), NULL
);
129 manager
= g_object_new (SWFDEC_TYPE_PLAYER_MANAGER
, 0);
130 swfdec_player_manager_set_player (manager
, player
);
136 swfdec_player_manager_set_speed (SwfdecPlayerManager
*manager
, double speed
)
138 g_return_if_fail (SWFDEC_IS_PLAYER_MANAGER (manager
));
139 g_return_if_fail (speed
> 0.0);
141 if (manager
->speed
== speed
)
143 if (manager
->source
) {
144 swfdec_player_manager_set_playing (manager
, FALSE
);
145 manager
->speed
= speed
;
146 swfdec_player_manager_set_playing (manager
, TRUE
);
148 manager
->speed
= speed
;
150 g_object_notify (G_OBJECT (manager
), "speed");
154 swfdec_player_manager_get_speed (SwfdecPlayerManager
*manager
)
156 g_return_val_if_fail (SWFDEC_IS_PLAYER_MANAGER (manager
), 1.0);
158 return manager
->speed
;
162 swfdec_player_manager_set_playing (SwfdecPlayerManager
*manager
, gboolean playing
)
164 g_return_if_fail (SWFDEC_IS_PLAYER_MANAGER (manager
));
166 if ((manager
->source
!= NULL
) == playing
)
169 g_assert (manager
->source
== NULL
);
170 manager
->source
= swfdec_iterate_source_new (manager
->player
);
171 g_source_attach (manager
->source
, NULL
);
173 g_assert (manager
->source
!= NULL
);
174 g_source_destroy (manager
->source
);
175 g_source_unref (manager
->source
);
176 manager
->source
= NULL
;
178 g_object_notify (G_OBJECT (manager
), "playing");
182 swfdec_player_manager_get_playing (SwfdecPlayerManager
*manager
)
184 g_return_val_if_fail (SWFDEC_IS_PLAYER_MANAGER (manager
), FALSE
);
186 return manager
->source
!= NULL
;