@@ -60,29 +60,120 @@ ComposedObjectImpl::~ComposedObjectImpl()
60
60
{
61
61
element = origElem;
62
62
63
- disconnectForwardSignals ();
63
+ disconnectBridgeSignals ();
64
64
}
65
65
66
66
67
67
68
68
69
69
void
70
- ComposedObjectImpl::disconnectForwardSignals ()
70
+ ComposedObjectImpl::disconnectBridgeSignals ()
71
71
{
72
72
connElementConnectedSrc.disconnect ();
73
73
connElementConnectedSink.disconnect ();
74
74
connElementDisconnectedSrc.disconnect ();
75
75
connElementDisconnectedSink.disconnect ();
76
+ connErrorSrc.disconnect ();
77
+ connErrorSink.disconnect ();
78
+ }
79
+
80
+ void
81
+ ComposedObjectImpl::disconnectElementSrcSignals ()
82
+ {
76
83
connMediaTranscodingStateChangeSrc.disconnect ();
77
- connMediaTranscodingStateChangeSink.disconnect ();
78
84
connMediaFlowOutStateChange.disconnect ();
85
+ connErrorlinkedSrc.disconnect ();
86
+ }
87
+
88
+ // This method should only be called from linkElement with the mutex held
89
+ void
90
+ ComposedObjectImpl::connectElementSrcSignals ()
91
+ {
92
+ std::weak_ptr<MediaObject> wt = shared_from_this ();
93
+
94
+ if (linkedSource == NULL )
95
+ return ;
96
+
97
+ connMediaTranscodingStateChangeSrc = std::dynamic_pointer_cast<MediaElementImpl>(linkedSource)->signalMediaTranscodingStateChange .connect ([ &, wt ] (
98
+ MediaTranscodingStateChange event) {
99
+ std::shared_ptr<MediaObject> sth = wt.lock ();
100
+ if (!sth)
101
+ return ;
102
+
103
+ raiseEvent<MediaTranscodingStateChange> (event, sth, signalMediaTranscodingStateChange);
104
+ });
105
+
106
+ connMediaFlowOutStateChange = std::dynamic_pointer_cast<MediaElementImpl>(linkedSource)->signalMediaFlowOutStateChange .connect ([ &, wt ] (
107
+ MediaFlowOutStateChange event) {
108
+ std::shared_ptr<MediaObject> sth = wt.lock ();
109
+ if (!sth)
110
+ return ;
111
+
112
+ raiseEvent<MediaFlowOutStateChange> (event, sth, signalMediaFlowOutStateChange);
113
+ });
114
+
115
+ connErrorlinkedSrc = std::dynamic_pointer_cast<MediaElementImpl>(linkedSource)->signalError .connect ([ &, wt ] (
116
+ Error event) {
117
+ std::shared_ptr<MediaObject> sth = wt.lock ();
118
+ if (!sth)
119
+ return ;
120
+
121
+ raiseEvent<Error> (event, sth, signalError);
122
+ });
123
+
124
+ }
125
+
126
+ void
127
+ ComposedObjectImpl::disconnectElementSinkSignals ()
128
+ {
129
+ connMediaTranscodingStateChangeSink.disconnect ();
79
130
connMediaFlowInStateChange.disconnect ();
80
- connErrorSrc.disconnect ();
81
- connErrorSink.disconnect ();
131
+ if (linkedSink != linkedSource)
132
+ connErrorlinkedSink.disconnect ();
133
+ }
134
+
135
+ void
136
+ ComposedObjectImpl::connectElementSinkSignals ()
137
+ {
138
+ std::weak_ptr<MediaObject> wt = shared_from_this ();
139
+
140
+ if (linkedSink == NULL )
141
+ return ;
142
+
143
+ connMediaTranscodingStateChangeSink = std::dynamic_pointer_cast<MediaElementImpl>(linkedSink)->signalMediaTranscodingStateChange .connect ([ &, wt ] (
144
+ MediaTranscodingStateChange event) {
145
+ std::shared_ptr<MediaObject> sth = wt.lock ();
146
+ if (!sth)
147
+ return ;
148
+
149
+ raiseEvent<MediaTranscodingStateChange> (event, sth, signalMediaTranscodingStateChange);
150
+ });
151
+
152
+ connMediaFlowInStateChange = std::dynamic_pointer_cast<MediaElementImpl>(linkedSink)->signalMediaFlowInStateChange .connect ([ &, wt ] (
153
+ MediaFlowInStateChange event) {
154
+ std::shared_ptr<MediaObject> sth = wt.lock ();
155
+ if (!sth)
156
+ return ;
157
+
158
+ raiseEvent<MediaFlowInStateChange> (event, sth, signalMediaFlowInStateChange);
159
+ });
160
+
161
+ if (linkedSink != linkedSource) {
162
+ connErrorlinkedSink = std::dynamic_pointer_cast<MediaElementImpl>(linkedSink)->signalError .connect ([ &, wt ] (
163
+ Error event) {
164
+ std::shared_ptr<MediaObject> sth = wt.lock ();
165
+ if (!sth)
166
+ return ;
167
+
168
+ raiseEvent<Error> (event, sth, signalError);
169
+ });
170
+ }
171
+
82
172
}
83
173
174
+
84
175
void
85
- ComposedObjectImpl::connectForwardSignals ()
176
+ ComposedObjectImpl::connectBridgeSignals ()
86
177
{
87
178
std::weak_ptr<MediaObject> wt = shared_from_this ();
88
179
@@ -150,42 +241,6 @@ ComposedObjectImpl::connectForwardSignals ()
150
241
}
151
242
});
152
243
153
- connMediaTranscodingStateChangeSrc = std::dynamic_pointer_cast<MediaElementImpl>(srcPt)->signalMediaTranscodingStateChange .connect ([ &, wt ] (
154
- MediaTranscodingStateChange event) {
155
- std::shared_ptr<MediaObject> sth = wt.lock ();
156
- if (!sth)
157
- return ;
158
-
159
- raiseEvent<MediaTranscodingStateChange> (event, sth, signalMediaTranscodingStateChange);
160
- });
161
-
162
- connMediaTranscodingStateChangeSink = std::dynamic_pointer_cast<MediaElementImpl>(sinkPt)->signalMediaTranscodingStateChange .connect ([ &, wt ] (
163
- MediaTranscodingStateChange event) {
164
- std::shared_ptr<MediaObject> sth = wt.lock ();
165
- if (!sth)
166
- return ;
167
-
168
- raiseEvent<MediaTranscodingStateChange> (event, sth, signalMediaTranscodingStateChange);
169
- });
170
-
171
- connMediaFlowOutStateChange = std::dynamic_pointer_cast<MediaElementImpl>(sinkPt)->signalMediaFlowOutStateChange .connect ([ &, wt ] (
172
- MediaFlowOutStateChange event) {
173
- std::shared_ptr<MediaObject> sth = wt.lock ();
174
- if (!sth)
175
- return ;
176
-
177
- raiseEvent<MediaFlowOutStateChange> (event, sth, signalMediaFlowOutStateChange);
178
- });
179
-
180
- connMediaFlowInStateChange = std::dynamic_pointer_cast<MediaElementImpl>(srcPt)->signalMediaFlowInStateChange .connect ([ &, wt ] (
181
- MediaFlowInStateChange event) {
182
- std::shared_ptr<MediaObject> sth = wt.lock ();
183
- if (!sth)
184
- return ;
185
-
186
- raiseEvent<MediaFlowInStateChange> (event, sth, signalMediaFlowInStateChange);
187
- });
188
-
189
244
connErrorSrc = std::dynamic_pointer_cast<MediaElementImpl>(srcPt)->signalError .connect ([ &, wt ] (
190
245
Error event) {
191
246
std::shared_ptr<MediaObject> sth = wt.lock ();
@@ -258,7 +313,7 @@ ComposedObjectImpl::postConstructor ()
258
313
origElem = getGstreamerElement ();
259
314
element = srcPt->getGstreamerElement ();
260
315
261
- connectForwardSignals ();
316
+ connectBridgeSignals ();
262
317
}
263
318
264
319
ComposedObjectImpl::StaticConstructor ComposedObjectImpl::staticConstructor;
@@ -280,52 +335,30 @@ void ComposedObjectImpl::linkMediaElement(std::shared_ptr<MediaElement> linkSrc,
280
335
// Unlink source
281
336
linkedSource->disconnect (sinkPt);
282
337
283
- connErrorlinkedSrc. disconnect ();
338
+ disconnectElementSrcSignals ();
284
339
}
285
340
if (linkedSink != NULL ) {
286
341
// Unlink sink
287
342
srcPt->disconnect (linkedSink);
288
343
289
- if (linkedSink != linkedSource)
290
- connErrorlinkedSink.disconnect ();
344
+ disconnectElementSinkSignals ();
291
345
}
292
346
293
347
linkedSource = linkSrc;
294
348
linkedSink = linkSink;
295
349
296
350
// Link source and sink from new composed object
297
351
if (linkedSource != NULL ) {
298
- std::weak_ptr<MediaObject> wt = shared_from_this ();
299
-
300
352
// Link Source
301
353
linkedSource->connect (sinkPt);
302
354
303
- connErrorlinkedSrc = std::dynamic_pointer_cast<MediaElementImpl>(linkedSource)->signalError .connect ([ &, wt ] (
304
- Error event) {
305
- std::shared_ptr<MediaObject> sth = wt.lock ();
306
- if (!sth)
307
- return ;
308
-
309
- raiseEvent<Error> (event, sth, signalError);
310
- });
311
-
355
+ connectElementSrcSignals ();
312
356
}
313
357
if (linkedSink != NULL ) {
314
- std::weak_ptr<MediaObject> wt = shared_from_this ();
315
-
316
358
// Link sink
317
359
srcPt->connect (linkedSink);
318
360
319
- if (linkedSink != linkedSource) {
320
- connErrorlinkedSink = std::dynamic_pointer_cast<MediaElementImpl>(linkedSink)->signalError .connect ([ &, wt ] (
321
- Error event) {
322
- std::shared_ptr<MediaObject> sth = wt.lock ();
323
- if (!sth)
324
- return ;
325
-
326
- raiseEvent<Error> (event, sth, signalError);
327
- });
328
- }
361
+ connectElementSinkSignals ();
329
362
}
330
363
331
364
linkMutex.unlock ();
0 commit comments