~ubuntu-branches/ubuntu/trusty/rhythmbox/trusty-proposed

1.1.14 by Sebastien Bacher
Import upstream version 0.10.90
1
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
2
 *
3
 *  Copyright (C) 2006  James Livingston  <doclivingston@gmail.com>
4
 *
5
 *  This program is free software; you can redistribute it and/or modify
6
 *  it under the terms of the GNU General Public License as published by
7
 *  the Free Software Foundation; either version 2 of the License, or
8
 *  (at your option) any later version.
9
 *
1.1.30 by Sebastien Bacher
Import upstream version 0.11.6svn20081008
10
 *  The Rhythmbox authors hereby grant permission for non-GPL compatible
1.1.22 by Sebastien Bacher
Import upstream version 0.11.5.90
11
 *  GStreamer plugins to be used and distributed together with GStreamer
12
 *  and Rhythmbox. This permission is above and beyond the permissions granted
13
 *  by the GPL license by which Rhythmbox is covered. If you modify this code
14
 *  you may extend this exception to your version of the code, but you are not
15
 *  obligated to do so. If you do not wish to do so, delete this exception
16
 *  statement from your version.
17
 *
1.1.14 by Sebastien Bacher
Import upstream version 0.10.90
18
 *  This program is distributed in the hope that it will be useful,
19
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
20
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
21
 *  GNU General Public License for more details.
22
 *
23
 *  You should have received a copy of the GNU General Public License
24
 *  along with this program; if not, write to the Free Software
25
 *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26
 *
27
 */
28
29
#include <config.h>
30
31
#include "rb-player-gst-filter.h"
32
#include "rb-marshal.h"
33
1.1.22 by Sebastien Bacher
Import upstream version 0.11.5.90
34
/**
35
 * SECTION:rb-player-gst-filter
36
 * @short_description: player interface for inserting filter elements
37
 * @include: rb-player-gst-filter.h
38
 *
39
 * This interface allows a caller to add filter elements to the GStreamer playback
40
 * pipeline.
41
 */
42
1.1.16 by Sebastien Bacher
Import upstream version 0.11.1
43
enum {
44
	FILTER_INSERTED,
45
	FILTER_PRE_REMOVE,
46
	LAST_SIGNAL
47
};
48
49
static guint signals[LAST_SIGNAL] = { 0 };
50
1.1.14 by Sebastien Bacher
Import upstream version 0.10.90
51
static void
52
rb_player_gst_filter_interface_init (RBPlayerGstFilterIface *iface)
53
{
1.1.16 by Sebastien Bacher
Import upstream version 0.11.1
54
	/**
1.1.22 by Sebastien Bacher
Import upstream version 0.11.5.90
55
	 * RBPlayerGstFilter::filter-inserted:
56
	 * @player: the #RBPlayerGstFilter implementation
1.1.16 by Sebastien Bacher
Import upstream version 0.11.1
57
	 * @filter: the element which has been inserted
58
	 *
59
	 * The 'filter-inserted' signal is emitted when the tee element has been
60
	 * inserted into the pipeline and fully linked
61
	 **/
62
	signals[FILTER_INSERTED] =
63
		g_signal_new ("filter-inserted",
64
			      G_TYPE_FROM_INTERFACE (iface),
65
			      G_SIGNAL_RUN_LAST | G_SIGNAL_NO_RECURSE,
66
			      G_STRUCT_OFFSET (RBPlayerGstFilterIface, filter_inserted),
67
			      NULL, NULL,
68
			      g_cclosure_marshal_VOID__OBJECT,
69
			      G_TYPE_NONE,
70
			      1, G_TYPE_OBJECT);
71
72
	/**
1.1.22 by Sebastien Bacher
Import upstream version 0.11.5.90
73
	 * RBPlayerGstFilter::filter-pre-remove:
74
	 * @player: the #RBPlayerGstFilter implementation
1.1.16 by Sebastien Bacher
Import upstream version 0.11.1
75
	 * @filter: the element which is about to be removed
76
	 *
77
	 * The 'filter-pre-remove' signal is emitted immediately before the element
78
	 * is unlinked and removed from the pipeline
79
	 **/
80
	signals[FILTER_PRE_REMOVE] =
81
		g_signal_new ("filter-pre-remove",
82
			      G_TYPE_FROM_INTERFACE (iface),
83
			      G_SIGNAL_RUN_LAST | G_SIGNAL_NO_RECURSE,
84
			      G_STRUCT_OFFSET (RBPlayerGstFilterIface, filter_pre_remove),
85
			      NULL, NULL,
86
			      g_cclosure_marshal_VOID__OBJECT,
87
			      G_TYPE_NONE,
88
			      1, G_TYPE_OBJECT);
1.1.14 by Sebastien Bacher
Import upstream version 0.10.90
89
90
}
91
92
GType
93
rb_player_gst_filter_get_type (void)
94
{
95
	static GType our_type = 0;
96
97
	if (!our_type) {
98
		static const GTypeInfo our_info = {
99
			sizeof (RBPlayerGstFilterIface),
100
			NULL,	/* base_init */
101
			NULL,	/* base_finalize */
102
			(GClassInitFunc)rb_player_gst_filter_interface_init,
103
			NULL,	/* class_finalize */
104
			NULL,	/* class_data */
105
			0,
106
			0,
107
			NULL
108
		};
109
110
		our_type = g_type_register_static (G_TYPE_INTERFACE, "RBPlayerGstFilter", &our_info, 0);
111
	}
112
113
	return our_type;
114
}
115
1.1.22 by Sebastien Bacher
Import upstream version 0.11.5.90
116
/**
117
 * rb_player_gst_filter_add_filter:
118
 * @player: #RBPlayerGstFilter implementation
119
 * @element: new filter element (or bin) to add
120
 *
121
 * Adds a new filter to the playback pipeline.  The filter may not be
122
 * inserted immediately.  The 'filter-inserted' signal will be emitted
123
 * when this actually happens.
124
 *
125
 * Return value: TRUE if the filter will be added
126
 */
1.1.14 by Sebastien Bacher
Import upstream version 0.10.90
127
gboolean
128
rb_player_gst_filter_add_filter (RBPlayerGstFilter *player, GstElement *element)
129
{
130
	RBPlayerGstFilterIface *iface = RB_PLAYER_GST_FILTER_GET_IFACE (player);
131
132
	return iface->add_filter (player, element);
133
}
134
1.1.22 by Sebastien Bacher
Import upstream version 0.11.5.90
135
/**
136
 * rb_player_gst_filter_remove_filter:
137
 * @player: #RBPlayerGstFilter implementation
138
 * @element: the filter element (or bin) to remove
139
 *
140
 * Removes a filter from the playback pipeline.  The filter may not be
141
 * removed immediately.  The 'filter-pre-remove' signal will be emitted
142
 * immediately before this actually happens.
143
 *
144
 * Return value: TRUE if the filter was found and will be removed
145
 */
1.1.14 by Sebastien Bacher
Import upstream version 0.10.90
146
gboolean
147
rb_player_gst_filter_remove_filter (RBPlayerGstFilter *player, GstElement *element)
148
{
149
	RBPlayerGstFilterIface *iface = RB_PLAYER_GST_FILTER_GET_IFACE (player);
150
151
	return iface->remove_filter (player, element);
152
}
153
1.1.16 by Sebastien Bacher
Import upstream version 0.11.1
154
void
155
_rb_player_gst_filter_emit_filter_inserted (RBPlayerGstFilter *player, GstElement *filter)
156
{
157
	g_signal_emit (player, signals[FILTER_INSERTED], 0, filter);
158
}
159
160
void
161
_rb_player_gst_filter_emit_filter_pre_remove (RBPlayerGstFilter *player, GstElement *filter)
162
{
163
	g_signal_emit (player, signals[FILTER_PRE_REMOVE], 0, filter);
164
}
165