1use glib::{prelude::*, subclass::prelude::*, translate::*};
4
5use crate::{RTSPClient, ffi};
6
7pub trait RTSPClientImpl: ObjectImpl + ObjectSubclass<Type: IsA<RTSPClient>> + Send + Sync {
8 fn create_sdp(&self, media: &crate::RTSPMedia) -> Option<gst_sdp::SDPMessage> {
9 self.parent_create_sdp(media)
10 }
11
12 fn configure_client_media(
13 &self,
14 media: &crate::RTSPMedia,
15 stream: &crate::RTSPStream,
16 ctx: &crate::RTSPContext,
17 ) -> Result<(), gst::LoggableError> {
18 self.parent_configure_client_media(media, stream, ctx)
19 }
20
21 fn params_set(&self, ctx: &crate::RTSPContext) -> gst_rtsp::RTSPResult {
24 self.parent_params_set(ctx)
25 }
26
27 fn params_get(&self, ctx: &crate::RTSPContext) -> gst_rtsp::RTSPResult {
28 self.parent_params_get(ctx)
29 }
30
31 fn make_path_from_uri(&self, url: &gst_rtsp::RTSPUrl) -> Option<glib::GString> {
32 self.parent_make_path_from_uri(url)
33 }
34
35 fn closed(&self) {
36 self.parent_closed();
37 }
38
39 fn new_session(&self, session: &crate::RTSPSession) {
40 self.parent_new_session(session);
41 }
42
43 fn options_request(&self, ctx: &crate::RTSPContext) {
44 self.parent_options_request(ctx);
45 }
46
47 fn describe_request(&self, ctx: &crate::RTSPContext) {
48 self.parent_describe_request(ctx);
49 }
50
51 fn setup_request(&self, ctx: &crate::RTSPContext) {
52 self.parent_setup_request(ctx);
53 }
54
55 fn play_request(&self, ctx: &crate::RTSPContext) {
56 self.parent_play_request(ctx);
57 }
58
59 fn pause_request(&self, ctx: &crate::RTSPContext) {
60 self.parent_pause_request(ctx);
61 }
62
63 fn teardown_request(&self, ctx: &crate::RTSPContext) {
64 self.parent_teardown_request(ctx);
65 }
66
67 fn set_parameter_request(&self, ctx: &crate::RTSPContext) {
68 self.parent_set_parameter_request(ctx);
69 }
70
71 fn parameter_request(&self, ctx: &crate::RTSPContext) {
72 self.parent_parameter_request(ctx);
73 }
74
75 fn announce_request(&self, ctx: &crate::RTSPContext) {
76 self.parent_announce_request(ctx);
77 }
78
79 fn record_request(&self, ctx: &crate::RTSPContext) {
80 self.parent_record_request(ctx);
81 }
82
83 fn handle_response(&self, ctx: &crate::RTSPContext) {
84 self.parent_handle_response(ctx);
85 }
86
87 fn handle_sdp(
91 &self,
92 ctx: &crate::RTSPContext,
93 media: &crate::RTSPMedia,
94 sdp: &gst_sdp::SDPMessageRef,
95 ) -> Result<(), gst::LoggableError> {
96 self.parent_handle_sdp(ctx, media, sdp)
97 }
98
99 fn check_requirements(
100 &self,
101 ctx: &crate::RTSPContext,
102 arr: &[String],
103 ) -> Option<glib::GString> {
104 self.parent_check_requirements(ctx, arr)
105 }
106
107 fn pre_options_request(&self, ctx: &crate::RTSPContext) -> gst_rtsp::RTSPStatusCode {
108 self.parent_pre_options_request(ctx)
109 }
110
111 fn pre_describe_request(&self, ctx: &crate::RTSPContext) -> gst_rtsp::RTSPStatusCode {
112 self.parent_pre_describe_request(ctx)
113 }
114
115 fn pre_setup_request(&self, ctx: &crate::RTSPContext) -> gst_rtsp::RTSPStatusCode {
116 self.parent_pre_setup_request(ctx)
117 }
118
119 fn pre_play_request(&self, ctx: &crate::RTSPContext) -> gst_rtsp::RTSPStatusCode {
120 self.parent_pre_play_request(ctx)
121 }
122
123 fn pre_pause_request(&self, ctx: &crate::RTSPContext) -> gst_rtsp::RTSPStatusCode {
124 self.parent_pre_pause_request(ctx)
125 }
126
127 fn pre_teardown_request(&self, ctx: &crate::RTSPContext) -> gst_rtsp::RTSPStatusCode {
128 self.parent_pre_teardown_request(ctx)
129 }
130
131 fn pre_set_parameter_request(&self, ctx: &crate::RTSPContext) -> gst_rtsp::RTSPStatusCode {
132 self.parent_pre_set_parameter_request(ctx)
133 }
134
135 fn pre_get_parameter_request(&self, ctx: &crate::RTSPContext) -> gst_rtsp::RTSPStatusCode {
136 self.parent_pre_get_parameter_request(ctx)
137 }
138
139 fn pre_announce_request(&self, ctx: &crate::RTSPContext) -> gst_rtsp::RTSPStatusCode {
140 self.parent_pre_announce_request(ctx)
141 }
142
143 fn pre_record_request(&self, ctx: &crate::RTSPContext) -> gst_rtsp::RTSPStatusCode {
144 self.parent_pre_record_request(ctx)
145 }
146
147 #[cfg(feature = "v1_22")]
148 #[cfg_attr(docsrs, doc(cfg(feature = "v1_22")))]
149 fn adjust_error_code(
150 &self,
151 ctx: &crate::RTSPContext,
152 status_code: gst_rtsp::RTSPStatusCode,
153 ) -> gst_rtsp::RTSPStatusCode {
154 self.parent_adjust_error_code(ctx, status_code)
155 }
156}
157
158pub trait RTSPClientImplExt: RTSPClientImpl {
159 fn parent_create_sdp(&self, media: &crate::RTSPMedia) -> Option<gst_sdp::SDPMessage> {
160 unsafe {
161 let data = Self::type_data();
162 let parent_class = data.as_ref().parent_class() as *mut ffi::GstRTSPClientClass;
163 let f = (*parent_class)
164 .create_sdp
165 .expect("No `create_rtpbin` virtual method implementation in parent class");
166
167 from_glib_full(f(
168 self.obj().unsafe_cast_ref::<RTSPClient>().to_glib_none().0,
169 media.to_glib_none().0,
170 ))
171 }
172 }
173
174 fn parent_configure_client_media(
175 &self,
176 media: &crate::RTSPMedia,
177 stream: &crate::RTSPStream,
178 ctx: &crate::RTSPContext,
179 ) -> Result<(), gst::LoggableError> {
180 unsafe {
181 let data = Self::type_data();
182 let parent_class = data.as_ref().parent_class() as *mut ffi::GstRTSPClientClass;
183 let f = (*parent_class).configure_client_media.expect(
184 "No `configure_client_media` virtual method implementation in parent class",
185 );
186
187 gst::result_from_gboolean!(
188 f(
189 self.obj().unsafe_cast_ref::<RTSPClient>().to_glib_none().0,
190 media.to_glib_none().0,
191 stream.to_glib_none().0,
192 ctx.to_glib_none().0
193 ),
194 gst::CAT_RUST,
195 "Parent function `configure_client_media` failed"
196 )
197 }
198 }
199
200 fn parent_params_set(&self, ctx: &crate::RTSPContext) -> gst_rtsp::RTSPResult {
203 unsafe {
204 let data = Self::type_data();
205 let parent_class = data.as_ref().parent_class() as *mut ffi::GstRTSPClientClass;
206 let f = (*parent_class)
207 .params_set
208 .expect("No `params_set` virtual method implementation in parent class");
209
210 from_glib(f(
211 self.obj().unsafe_cast_ref::<RTSPClient>().to_glib_none().0,
212 ctx.to_glib_none().0,
213 ))
214 }
215 }
216
217 fn parent_params_get(&self, ctx: &crate::RTSPContext) -> gst_rtsp::RTSPResult {
218 unsafe {
219 let data = Self::type_data();
220 let parent_class = data.as_ref().parent_class() as *mut ffi::GstRTSPClientClass;
221 let f = (*parent_class)
222 .params_get
223 .expect("No `params_get` virtual method implementation in parent class");
224
225 from_glib(f(
226 self.obj().unsafe_cast_ref::<RTSPClient>().to_glib_none().0,
227 ctx.to_glib_none().0,
228 ))
229 }
230 }
231
232 fn parent_make_path_from_uri(&self, url: &gst_rtsp::RTSPUrl) -> Option<glib::GString> {
233 unsafe {
234 let data = Self::type_data();
235 let parent_class = data.as_ref().parent_class() as *mut ffi::GstRTSPClientClass;
236 let f = (*parent_class)
237 .make_path_from_uri
238 .expect("No `make_path_from_uri` virtual method implementation in parent class");
239
240 from_glib_full(f(
241 self.obj().unsafe_cast_ref::<RTSPClient>().to_glib_none().0,
242 url.to_glib_none().0,
243 ))
244 }
245 }
246
247 fn parent_closed(&self) {
248 unsafe {
249 let data = Self::type_data();
250 let parent_class = data.as_ref().parent_class() as *mut ffi::GstRTSPClientClass;
251 if let Some(f) = (*parent_class).closed {
252 f(self.obj().unsafe_cast_ref::<RTSPClient>().to_glib_none().0);
253 }
254 }
255 }
256
257 fn parent_new_session(&self, session: &crate::RTSPSession) {
258 unsafe {
259 let data = Self::type_data();
260 let parent_class = data.as_ref().parent_class() as *mut ffi::GstRTSPClientClass;
261 if let Some(f) = (*parent_class).new_session {
262 f(
263 self.obj().unsafe_cast_ref::<RTSPClient>().to_glib_none().0,
264 session.to_glib_none().0,
265 );
266 }
267 }
268 }
269
270 fn parent_options_request(&self, ctx: &crate::RTSPContext) {
271 unsafe {
272 let data = Self::type_data();
273 let parent_class = data.as_ref().parent_class() as *mut ffi::GstRTSPClientClass;
274 if let Some(f) = (*parent_class).options_request {
275 f(
276 self.obj().unsafe_cast_ref::<RTSPClient>().to_glib_none().0,
277 ctx.to_glib_none().0,
278 );
279 }
280 }
281 }
282
283 fn parent_describe_request(&self, ctx: &crate::RTSPContext) {
284 unsafe {
285 let data = Self::type_data();
286 let parent_class = data.as_ref().parent_class() as *mut ffi::GstRTSPClientClass;
287 if let Some(f) = (*parent_class).describe_request {
288 f(
289 self.obj().unsafe_cast_ref::<RTSPClient>().to_glib_none().0,
290 ctx.to_glib_none().0,
291 );
292 }
293 }
294 }
295
296 fn parent_setup_request(&self, ctx: &crate::RTSPContext) {
297 unsafe {
298 let data = Self::type_data();
299 let parent_class = data.as_ref().parent_class() as *mut ffi::GstRTSPClientClass;
300 if let Some(f) = (*parent_class).setup_request {
301 f(
302 self.obj().unsafe_cast_ref::<RTSPClient>().to_glib_none().0,
303 ctx.to_glib_none().0,
304 );
305 }
306 }
307 }
308
309 fn parent_play_request(&self, ctx: &crate::RTSPContext) {
310 unsafe {
311 let data = Self::type_data();
312 let parent_class = data.as_ref().parent_class() as *mut ffi::GstRTSPClientClass;
313 if let Some(f) = (*parent_class).play_request {
314 f(
315 self.obj().unsafe_cast_ref::<RTSPClient>().to_glib_none().0,
316 ctx.to_glib_none().0,
317 );
318 }
319 }
320 }
321
322 fn parent_pause_request(&self, ctx: &crate::RTSPContext) {
323 unsafe {
324 let data = Self::type_data();
325 let parent_class = data.as_ref().parent_class() as *mut ffi::GstRTSPClientClass;
326 if let Some(f) = (*parent_class).pause_request {
327 f(
328 self.obj().unsafe_cast_ref::<RTSPClient>().to_glib_none().0,
329 ctx.to_glib_none().0,
330 );
331 }
332 }
333 }
334
335 fn parent_teardown_request(&self, ctx: &crate::RTSPContext) {
336 unsafe {
337 let data = Self::type_data();
338 let parent_class = data.as_ref().parent_class() as *mut ffi::GstRTSPClientClass;
339 if let Some(f) = (*parent_class).teardown_request {
340 f(
341 self.obj().unsafe_cast_ref::<RTSPClient>().to_glib_none().0,
342 ctx.to_glib_none().0,
343 );
344 }
345 }
346 }
347
348 fn parent_set_parameter_request(&self, ctx: &crate::RTSPContext) {
349 unsafe {
350 let data = Self::type_data();
351 let parent_class = data.as_ref().parent_class() as *mut ffi::GstRTSPClientClass;
352 if let Some(f) = (*parent_class).set_parameter_request {
353 f(
354 self.obj().unsafe_cast_ref::<RTSPClient>().to_glib_none().0,
355 ctx.to_glib_none().0,
356 );
357 }
358 }
359 }
360
361 fn parent_parameter_request(&self, ctx: &crate::RTSPContext) {
362 unsafe {
363 let data = Self::type_data();
364 let parent_class = data.as_ref().parent_class() as *mut ffi::GstRTSPClientClass;
365 if let Some(f) = (*parent_class).get_parameter_request {
366 f(
367 self.obj().unsafe_cast_ref::<RTSPClient>().to_glib_none().0,
368 ctx.to_glib_none().0,
369 );
370 }
371 }
372 }
373
374 fn parent_announce_request(&self, ctx: &crate::RTSPContext) {
375 unsafe {
376 let data = Self::type_data();
377 let parent_class = data.as_ref().parent_class() as *mut ffi::GstRTSPClientClass;
378 if let Some(f) = (*parent_class).announce_request {
379 f(
380 self.obj().unsafe_cast_ref::<RTSPClient>().to_glib_none().0,
381 ctx.to_glib_none().0,
382 );
383 }
384 }
385 }
386
387 fn parent_record_request(&self, ctx: &crate::RTSPContext) {
388 unsafe {
389 let data = Self::type_data();
390 let parent_class = data.as_ref().parent_class() as *mut ffi::GstRTSPClientClass;
391 if let Some(f) = (*parent_class).record_request {
392 f(
393 self.obj().unsafe_cast_ref::<RTSPClient>().to_glib_none().0,
394 ctx.to_glib_none().0,
395 );
396 }
397 }
398 }
399
400 fn parent_handle_response(&self, ctx: &crate::RTSPContext) {
401 unsafe {
402 let data = Self::type_data();
403 let parent_class = data.as_ref().parent_class() as *mut ffi::GstRTSPClientClass;
404 if let Some(f) = (*parent_class).handle_response {
405 f(
406 self.obj().unsafe_cast_ref::<RTSPClient>().to_glib_none().0,
407 ctx.to_glib_none().0,
408 );
409 }
410 }
411 }
412
413 fn parent_handle_sdp(
417 &self,
418 ctx: &crate::RTSPContext,
419 media: &crate::RTSPMedia,
420 sdp: &gst_sdp::SDPMessageRef,
421 ) -> Result<(), gst::LoggableError> {
422 unsafe {
423 let data = Self::type_data();
424 let parent_class = data.as_ref().parent_class() as *mut ffi::GstRTSPClientClass;
425 let f = (*parent_class)
426 .handle_sdp
427 .expect("No `handle_sdp` virtual method implementation in parent class");
428
429 gst::result_from_gboolean!(
430 f(
431 self.obj().unsafe_cast_ref::<RTSPClient>().to_glib_none().0,
432 ctx.to_glib_none().0,
433 media.to_glib_none().0,
434 sdp as *const _ as *mut _
435 ),
436 gst::CAT_RUST,
437 "Parent function `handle_sdp` failed"
438 )
439 }
440 }
441
442 fn parent_check_requirements(
443 &self,
444 ctx: &crate::RTSPContext,
445 arr: &[String],
446 ) -> Option<glib::GString> {
447 unsafe {
448 let data = Self::type_data();
449 let parent_class = data.as_ref().parent_class() as *mut ffi::GstRTSPClientClass;
450 if let Some(f) = (*parent_class).check_requirements {
451 from_glib_full(f(
452 self.obj().unsafe_cast_ref::<RTSPClient>().to_glib_none().0,
453 ctx.to_glib_none().0,
454 arr.to_glib_none().0,
455 ))
456 } else {
457 None
458 }
459 }
460 }
461
462 fn parent_pre_options_request(&self, ctx: &crate::RTSPContext) -> gst_rtsp::RTSPStatusCode {
463 unsafe {
464 let data = Self::type_data();
465 let parent_class = data.as_ref().parent_class() as *mut ffi::GstRTSPClientClass;
466 if let Some(f) = (*parent_class).pre_options_request {
467 from_glib(f(
468 self.obj().unsafe_cast_ref::<RTSPClient>().to_glib_none().0,
469 ctx.to_glib_none().0,
470 ))
471 } else {
472 gst_rtsp::RTSPStatusCode::Ok
473 }
474 }
475 }
476
477 fn parent_pre_describe_request(&self, ctx: &crate::RTSPContext) -> gst_rtsp::RTSPStatusCode {
478 unsafe {
479 let data = Self::type_data();
480 let parent_class = data.as_ref().parent_class() as *mut ffi::GstRTSPClientClass;
481 if let Some(f) = (*parent_class).pre_describe_request {
482 from_glib(f(
483 self.obj().unsafe_cast_ref::<RTSPClient>().to_glib_none().0,
484 ctx.to_glib_none().0,
485 ))
486 } else {
487 gst_rtsp::RTSPStatusCode::Ok
488 }
489 }
490 }
491
492 fn parent_pre_setup_request(&self, ctx: &crate::RTSPContext) -> gst_rtsp::RTSPStatusCode {
493 unsafe {
494 let data = Self::type_data();
495 let parent_class = data.as_ref().parent_class() as *mut ffi::GstRTSPClientClass;
496 if let Some(f) = (*parent_class).pre_setup_request {
497 from_glib(f(
498 self.obj().unsafe_cast_ref::<RTSPClient>().to_glib_none().0,
499 ctx.to_glib_none().0,
500 ))
501 } else {
502 gst_rtsp::RTSPStatusCode::Ok
503 }
504 }
505 }
506
507 fn parent_pre_play_request(&self, ctx: &crate::RTSPContext) -> gst_rtsp::RTSPStatusCode {
508 unsafe {
509 let data = Self::type_data();
510 let parent_class = data.as_ref().parent_class() as *mut ffi::GstRTSPClientClass;
511 if let Some(f) = (*parent_class).pre_play_request {
512 from_glib(f(
513 self.obj().unsafe_cast_ref::<RTSPClient>().to_glib_none().0,
514 ctx.to_glib_none().0,
515 ))
516 } else {
517 gst_rtsp::RTSPStatusCode::Ok
518 }
519 }
520 }
521
522 fn parent_pre_pause_request(&self, ctx: &crate::RTSPContext) -> gst_rtsp::RTSPStatusCode {
523 unsafe {
524 let data = Self::type_data();
525 let parent_class = data.as_ref().parent_class() as *mut ffi::GstRTSPClientClass;
526 if let Some(f) = (*parent_class).pre_pause_request {
527 from_glib(f(
528 self.obj().unsafe_cast_ref::<RTSPClient>().to_glib_none().0,
529 ctx.to_glib_none().0,
530 ))
531 } else {
532 gst_rtsp::RTSPStatusCode::Ok
533 }
534 }
535 }
536
537 fn parent_pre_teardown_request(&self, ctx: &crate::RTSPContext) -> gst_rtsp::RTSPStatusCode {
538 unsafe {
539 let data = Self::type_data();
540 let parent_class = data.as_ref().parent_class() as *mut ffi::GstRTSPClientClass;
541 if let Some(f) = (*parent_class).pre_teardown_request {
542 from_glib(f(
543 self.obj().unsafe_cast_ref::<RTSPClient>().to_glib_none().0,
544 ctx.to_glib_none().0,
545 ))
546 } else {
547 gst_rtsp::RTSPStatusCode::Ok
548 }
549 }
550 }
551
552 fn parent_pre_set_parameter_request(
553 &self,
554 ctx: &crate::RTSPContext,
555 ) -> gst_rtsp::RTSPStatusCode {
556 unsafe {
557 let data = Self::type_data();
558 let parent_class = data.as_ref().parent_class() as *mut ffi::GstRTSPClientClass;
559 if let Some(f) = (*parent_class).pre_set_parameter_request {
560 from_glib(f(
561 self.obj().unsafe_cast_ref::<RTSPClient>().to_glib_none().0,
562 ctx.to_glib_none().0,
563 ))
564 } else {
565 gst_rtsp::RTSPStatusCode::Ok
566 }
567 }
568 }
569
570 fn parent_pre_get_parameter_request(
571 &self,
572 ctx: &crate::RTSPContext,
573 ) -> gst_rtsp::RTSPStatusCode {
574 unsafe {
575 let data = Self::type_data();
576 let parent_class = data.as_ref().parent_class() as *mut ffi::GstRTSPClientClass;
577 if let Some(f) = (*parent_class).pre_get_parameter_request {
578 from_glib(f(
579 self.obj().unsafe_cast_ref::<RTSPClient>().to_glib_none().0,
580 ctx.to_glib_none().0,
581 ))
582 } else {
583 gst_rtsp::RTSPStatusCode::Ok
584 }
585 }
586 }
587
588 fn parent_pre_announce_request(&self, ctx: &crate::RTSPContext) -> gst_rtsp::RTSPStatusCode {
589 unsafe {
590 let data = Self::type_data();
591 let parent_class = data.as_ref().parent_class() as *mut ffi::GstRTSPClientClass;
592 if let Some(f) = (*parent_class).pre_announce_request {
593 from_glib(f(
594 self.obj().unsafe_cast_ref::<RTSPClient>().to_glib_none().0,
595 ctx.to_glib_none().0,
596 ))
597 } else {
598 gst_rtsp::RTSPStatusCode::Ok
599 }
600 }
601 }
602
603 fn parent_pre_record_request(&self, ctx: &crate::RTSPContext) -> gst_rtsp::RTSPStatusCode {
604 unsafe {
605 let data = Self::type_data();
606 let parent_class = data.as_ref().parent_class() as *mut ffi::GstRTSPClientClass;
607 if let Some(f) = (*parent_class).pre_record_request {
608 from_glib(f(
609 self.obj().unsafe_cast_ref::<RTSPClient>().to_glib_none().0,
610 ctx.to_glib_none().0,
611 ))
612 } else {
613 gst_rtsp::RTSPStatusCode::Ok
614 }
615 }
616 }
617
618 #[cfg(feature = "v1_22")]
619 #[cfg_attr(docsrs, doc(cfg(feature = "v1_22")))]
620 fn parent_adjust_error_code(
621 &self,
622 ctx: &crate::RTSPContext,
623 status_code: gst_rtsp::RTSPStatusCode,
624 ) -> gst_rtsp::RTSPStatusCode {
625 unsafe {
626 let data = Self::type_data();
627 let parent_class = data.as_ref().parent_class() as *mut ffi::GstRTSPClientClass;
628 if let Some(f) = (*parent_class).adjust_error_code {
629 from_glib(f(
630 self.obj().unsafe_cast_ref::<RTSPClient>().to_glib_none().0,
631 ctx.to_glib_none().0,
632 status_code.into_glib(),
633 ))
634 } else {
635 gst_rtsp::RTSPStatusCode::Ok
636 }
637 }
638 }
639}
640
641impl<T: RTSPClientImpl> RTSPClientImplExt for T {}
642
643unsafe impl<T: RTSPClientImpl> IsSubclassable<T> for RTSPClient {
644 fn class_init(klass: &mut glib::Class<Self>) {
645 Self::parent_class_init::<T>(klass);
646 let klass = klass.as_mut();
647
648 #[cfg(not(feature = "v1_18"))]
651 {
652 if gst::version() < (1, 18, 0, 0) {
653 #[derive(Copy, Clone)]
654 #[repr(C)]
655 pub struct CompatClass {
656 pub parent_class: glib::gobject_ffi::GObjectClass,
657 pub create_sdp: Option<
658 unsafe extern "C" fn(
659 *mut ffi::GstRTSPClient,
660 *mut ffi::GstRTSPMedia,
661 )
662 -> *mut gst_sdp::ffi::GstSDPMessage,
663 >,
664 pub configure_client_media: Option<
665 unsafe extern "C" fn(
666 *mut ffi::GstRTSPClient,
667 *mut ffi::GstRTSPMedia,
668 *mut ffi::GstRTSPStream,
669 *mut ffi::GstRTSPContext,
670 ) -> glib::ffi::gboolean,
671 >,
672 pub configure_client_transport: Option<
673 unsafe extern "C" fn(
674 *mut ffi::GstRTSPClient,
675 *mut ffi::GstRTSPContext,
676 *mut gst_rtsp::ffi::GstRTSPTransport,
677 ) -> glib::ffi::gboolean,
678 >,
679 pub params_set: Option<
680 unsafe extern "C" fn(
681 *mut ffi::GstRTSPClient,
682 *mut ffi::GstRTSPContext,
683 )
684 -> gst_rtsp::ffi::GstRTSPResult,
685 >,
686 pub params_get: Option<
687 unsafe extern "C" fn(
688 *mut ffi::GstRTSPClient,
689 *mut ffi::GstRTSPContext,
690 )
691 -> gst_rtsp::ffi::GstRTSPResult,
692 >,
693 pub make_path_from_uri: Option<
694 unsafe extern "C" fn(
695 *mut ffi::GstRTSPClient,
696 *const gst_rtsp::ffi::GstRTSPUrl,
697 ) -> *mut libc::c_char,
698 >,
699 pub closed: Option<unsafe extern "C" fn(*mut ffi::GstRTSPClient)>,
700 pub new_session: Option<
701 unsafe extern "C" fn(*mut ffi::GstRTSPClient, *mut ffi::GstRTSPSession),
702 >,
703 pub options_request: Option<
704 unsafe extern "C" fn(*mut ffi::GstRTSPClient, *mut ffi::GstRTSPContext),
705 >,
706 pub describe_request: Option<
707 unsafe extern "C" fn(*mut ffi::GstRTSPClient, *mut ffi::GstRTSPContext),
708 >,
709 pub setup_request: Option<
710 unsafe extern "C" fn(*mut ffi::GstRTSPClient, *mut ffi::GstRTSPContext),
711 >,
712 pub play_request: Option<
713 unsafe extern "C" fn(*mut ffi::GstRTSPClient, *mut ffi::GstRTSPContext),
714 >,
715 pub pause_request: Option<
716 unsafe extern "C" fn(*mut ffi::GstRTSPClient, *mut ffi::GstRTSPContext),
717 >,
718 pub teardown_request: Option<
719 unsafe extern "C" fn(*mut ffi::GstRTSPClient, *mut ffi::GstRTSPContext),
720 >,
721 pub set_parameter_request: Option<
722 unsafe extern "C" fn(*mut ffi::GstRTSPClient, *mut ffi::GstRTSPContext),
723 >,
724 pub get_parameter_request: Option<
725 unsafe extern "C" fn(*mut ffi::GstRTSPClient, *mut ffi::GstRTSPContext),
726 >,
727 pub handle_response: Option<
728 unsafe extern "C" fn(*mut ffi::GstRTSPClient, *mut ffi::GstRTSPContext),
729 >,
730 pub tunnel_http_response: Option<
731 unsafe extern "C" fn(
732 *mut ffi::GstRTSPClient,
733 *mut gst_rtsp::ffi::GstRTSPMessage,
734 *mut gst_rtsp::ffi::GstRTSPMessage,
735 ),
736 >,
737 pub send_message: Option<
738 unsafe extern "C" fn(
739 *mut ffi::GstRTSPClient,
740 *mut ffi::GstRTSPContext,
741 *mut gst_rtsp::ffi::GstRTSPMessage,
742 ),
743 >,
744 pub handle_sdp: Option<
745 unsafe extern "C" fn(
746 *mut ffi::GstRTSPClient,
747 *mut ffi::GstRTSPContext,
748 *mut ffi::GstRTSPMedia,
749 *mut gst_sdp::ffi::GstSDPMessage,
750 ) -> glib::ffi::gboolean,
751 >,
752 pub announce_request: Option<
753 unsafe extern "C" fn(*mut ffi::GstRTSPClient, *mut ffi::GstRTSPContext),
754 >,
755 pub record_request: Option<
756 unsafe extern "C" fn(*mut ffi::GstRTSPClient, *mut ffi::GstRTSPContext),
757 >,
758 pub check_requirements: Option<
759 unsafe extern "C" fn(
760 *mut ffi::GstRTSPClient,
761 *mut ffi::GstRTSPContext,
762 *mut *mut libc::c_char,
763 ) -> *mut libc::c_char,
764 >,
765 pub pre_options_request: Option<
766 unsafe extern "C" fn(
767 *mut ffi::GstRTSPClient,
768 *mut ffi::GstRTSPContext,
769 )
770 -> gst_rtsp::ffi::GstRTSPStatusCode,
771 >,
772 pub pre_describe_request: Option<
773 unsafe extern "C" fn(
774 *mut ffi::GstRTSPClient,
775 *mut ffi::GstRTSPContext,
776 )
777 -> gst_rtsp::ffi::GstRTSPStatusCode,
778 >,
779 pub pre_setup_request: Option<
780 unsafe extern "C" fn(
781 *mut ffi::GstRTSPClient,
782 *mut ffi::GstRTSPContext,
783 )
784 -> gst_rtsp::ffi::GstRTSPStatusCode,
785 >,
786 pub pre_play_request: Option<
787 unsafe extern "C" fn(
788 *mut ffi::GstRTSPClient,
789 *mut ffi::GstRTSPContext,
790 )
791 -> gst_rtsp::ffi::GstRTSPStatusCode,
792 >,
793 pub pre_pause_request: Option<
794 unsafe extern "C" fn(
795 *mut ffi::GstRTSPClient,
796 *mut ffi::GstRTSPContext,
797 )
798 -> gst_rtsp::ffi::GstRTSPStatusCode,
799 >,
800 pub pre_teardown_request: Option<
801 unsafe extern "C" fn(
802 *mut ffi::GstRTSPClient,
803 *mut ffi::GstRTSPContext,
804 )
805 -> gst_rtsp::ffi::GstRTSPStatusCode,
806 >,
807 pub pre_set_parameter_request: Option<
808 unsafe extern "C" fn(
809 *mut ffi::GstRTSPClient,
810 *mut ffi::GstRTSPContext,
811 )
812 -> gst_rtsp::ffi::GstRTSPStatusCode,
813 >,
814 pub pre_get_parameter_request: Option<
815 unsafe extern "C" fn(
816 *mut ffi::GstRTSPClient,
817 *mut ffi::GstRTSPContext,
818 )
819 -> gst_rtsp::ffi::GstRTSPStatusCode,
820 >,
821 pub pre_announce_request: Option<
822 unsafe extern "C" fn(
823 *mut ffi::GstRTSPClient,
824 *mut ffi::GstRTSPContext,
825 )
826 -> gst_rtsp::ffi::GstRTSPStatusCode,
827 >,
828 pub pre_record_request: Option<
829 unsafe extern "C" fn(
830 *mut ffi::GstRTSPClient,
831 *mut ffi::GstRTSPContext,
832 )
833 -> gst_rtsp::ffi::GstRTSPStatusCode,
834 >,
835 pub _gst_reserved: [glib::ffi::gpointer; 4],
836 }
837
838 let klass = unsafe {
839 std::mem::transmute::<&mut ffi::GstRTSPClientClass, &mut CompatClass>(klass)
840 };
841
842 klass.create_sdp = Some(client_create_sdp::<T>);
843 klass.configure_client_media = Some(client_configure_client_media::<T>);
844 klass.params_set = Some(client_params_set::<T>);
845 klass.params_get = Some(client_params_get::<T>);
846 klass.make_path_from_uri = Some(client_make_path_from_uri::<T>);
847 klass.closed = Some(client_closed::<T>);
848 klass.new_session = Some(client_new_session::<T>);
849 klass.options_request = Some(client_options_request::<T>);
850 klass.describe_request = Some(client_describe_request::<T>);
851 klass.setup_request = Some(client_setup_request::<T>);
852 klass.play_request = Some(client_play_request::<T>);
853 klass.pause_request = Some(client_pause_request::<T>);
854 klass.teardown_request = Some(client_teardown_request::<T>);
855 klass.set_parameter_request = Some(client_set_parameter_request::<T>);
856 klass.get_parameter_request = Some(client_get_parameter_request::<T>);
857 klass.announce_request = Some(client_announce_request::<T>);
858 klass.record_request = Some(client_record_request::<T>);
859 klass.handle_response = Some(client_handle_response::<T>);
860 klass.handle_sdp = Some(client_handle_sdp::<T>);
861 klass.check_requirements = Some(client_check_requirements::<T>);
862 klass.pre_options_request = Some(client_pre_options_request::<T>);
863 klass.pre_describe_request = Some(client_pre_describe_request::<T>);
864 klass.pre_setup_request = Some(client_pre_setup_request::<T>);
865 klass.pre_play_request = Some(client_pre_play_request::<T>);
866 klass.pre_pause_request = Some(client_pre_pause_request::<T>);
867 klass.pre_teardown_request = Some(client_pre_teardown_request::<T>);
868 klass.pre_set_parameter_request = Some(client_pre_set_parameter_request::<T>);
869 klass.pre_get_parameter_request = Some(client_pre_get_parameter_request::<T>);
870 klass.pre_announce_request = Some(client_pre_announce_request::<T>);
871 klass.pre_record_request = Some(client_pre_record_request::<T>);
872
873 return;
874 }
875 }
876
877 klass.create_sdp = Some(client_create_sdp::<T>);
878 klass.configure_client_media = Some(client_configure_client_media::<T>);
879 klass.params_set = Some(client_params_set::<T>);
880 klass.params_get = Some(client_params_get::<T>);
881 klass.make_path_from_uri = Some(client_make_path_from_uri::<T>);
882 klass.closed = Some(client_closed::<T>);
883 klass.new_session = Some(client_new_session::<T>);
884 klass.options_request = Some(client_options_request::<T>);
885 klass.describe_request = Some(client_describe_request::<T>);
886 klass.setup_request = Some(client_setup_request::<T>);
887 klass.play_request = Some(client_play_request::<T>);
888 klass.pause_request = Some(client_pause_request::<T>);
889 klass.teardown_request = Some(client_teardown_request::<T>);
890 klass.set_parameter_request = Some(client_set_parameter_request::<T>);
891 klass.get_parameter_request = Some(client_get_parameter_request::<T>);
892 klass.announce_request = Some(client_announce_request::<T>);
893 klass.record_request = Some(client_record_request::<T>);
894 klass.handle_response = Some(client_handle_response::<T>);
895 klass.handle_sdp = Some(client_handle_sdp::<T>);
896 klass.check_requirements = Some(client_check_requirements::<T>);
897 klass.pre_options_request = Some(client_pre_options_request::<T>);
898 klass.pre_describe_request = Some(client_pre_describe_request::<T>);
899 klass.pre_setup_request = Some(client_pre_setup_request::<T>);
900 klass.pre_play_request = Some(client_pre_play_request::<T>);
901 klass.pre_pause_request = Some(client_pre_pause_request::<T>);
902 klass.pre_teardown_request = Some(client_pre_teardown_request::<T>);
903 klass.pre_set_parameter_request = Some(client_pre_set_parameter_request::<T>);
904 klass.pre_get_parameter_request = Some(client_pre_get_parameter_request::<T>);
905 klass.pre_announce_request = Some(client_pre_announce_request::<T>);
906 klass.pre_record_request = Some(client_pre_record_request::<T>);
907 #[cfg(feature = "v1_22")]
908 #[cfg_attr(docsrs, doc(cfg(feature = "v1_22")))]
909 {
910 klass.adjust_error_code = Some(client_adjust_error_code::<T>);
911 }
912 }
913}
914
915unsafe extern "C" fn client_create_sdp<T: RTSPClientImpl>(
916 ptr: *mut ffi::GstRTSPClient,
917 media: *mut ffi::GstRTSPMedia,
918) -> *mut gst_sdp::ffi::GstSDPMessage {
919 unsafe {
920 let instance = &*(ptr as *mut T::Instance);
921 let imp = instance.imp();
922
923 imp.create_sdp(&from_glib_borrow(media)).into_glib_ptr()
924 }
925}
926
927unsafe extern "C" fn client_configure_client_media<T: RTSPClientImpl>(
928 ptr: *mut ffi::GstRTSPClient,
929 media: *mut ffi::GstRTSPMedia,
930 stream: *mut ffi::GstRTSPStream,
931 ctx: *mut ffi::GstRTSPContext,
932) -> glib::ffi::gboolean {
933 unsafe {
934 let instance = &*(ptr as *mut T::Instance);
935 let imp = instance.imp();
936
937 match imp.configure_client_media(
938 &from_glib_borrow(media),
939 &from_glib_borrow(stream),
940 &from_glib_borrow(ctx),
941 ) {
942 Ok(()) => glib::ffi::GTRUE,
943 Err(err) => {
944 err.log_with_imp(imp);
945 glib::ffi::GFALSE
946 }
947 }
948 }
949}
950
951unsafe extern "C" fn client_params_set<T: RTSPClientImpl>(
952 ptr: *mut ffi::GstRTSPClient,
953 ctx: *mut ffi::GstRTSPContext,
954) -> gst_rtsp::ffi::GstRTSPResult {
955 unsafe {
956 let instance = &*(ptr as *mut T::Instance);
957 let imp = instance.imp();
958
959 imp.params_set(&from_glib_borrow(ctx)).into_glib()
960 }
961}
962
963unsafe extern "C" fn client_params_get<T: RTSPClientImpl>(
964 ptr: *mut ffi::GstRTSPClient,
965 ctx: *mut ffi::GstRTSPContext,
966) -> gst_rtsp::ffi::GstRTSPResult {
967 unsafe {
968 let instance = &*(ptr as *mut T::Instance);
969 let imp = instance.imp();
970
971 imp.params_get(&from_glib_borrow(ctx)).into_glib()
972 }
973}
974
975unsafe extern "C" fn client_make_path_from_uri<T: RTSPClientImpl>(
976 ptr: *mut ffi::GstRTSPClient,
977 url: *const gst_rtsp::ffi::GstRTSPUrl,
978) -> *mut std::os::raw::c_char {
979 unsafe {
980 let instance = &*(ptr as *mut T::Instance);
981 let imp = instance.imp();
982
983 imp.make_path_from_uri(&from_glib_borrow(url))
984 .into_glib_ptr()
985 }
986}
987
988unsafe extern "C" fn client_closed<T: RTSPClientImpl>(ptr: *mut ffi::GstRTSPClient) {
989 unsafe {
990 let instance = &*(ptr as *mut T::Instance);
991 let imp = instance.imp();
992
993 imp.closed();
994 }
995}
996
997unsafe extern "C" fn client_new_session<T: RTSPClientImpl>(
998 ptr: *mut ffi::GstRTSPClient,
999 session: *mut ffi::GstRTSPSession,
1000) {
1001 unsafe {
1002 let instance = &*(ptr as *mut T::Instance);
1003 let imp = instance.imp();
1004
1005 imp.new_session(&from_glib_borrow(session));
1006 }
1007}
1008
1009unsafe extern "C" fn client_options_request<T: RTSPClientImpl>(
1010 ptr: *mut ffi::GstRTSPClient,
1011 ctx: *mut ffi::GstRTSPContext,
1012) {
1013 unsafe {
1014 let instance = &*(ptr as *mut T::Instance);
1015 let imp = instance.imp();
1016
1017 imp.options_request(&from_glib_borrow(ctx));
1018 }
1019}
1020
1021unsafe extern "C" fn client_describe_request<T: RTSPClientImpl>(
1022 ptr: *mut ffi::GstRTSPClient,
1023 ctx: *mut ffi::GstRTSPContext,
1024) {
1025 unsafe {
1026 let instance = &*(ptr as *mut T::Instance);
1027 let imp = instance.imp();
1028
1029 imp.describe_request(&from_glib_borrow(ctx));
1030 }
1031}
1032
1033unsafe extern "C" fn client_setup_request<T: RTSPClientImpl>(
1034 ptr: *mut ffi::GstRTSPClient,
1035 ctx: *mut ffi::GstRTSPContext,
1036) {
1037 unsafe {
1038 let instance = &*(ptr as *mut T::Instance);
1039 let imp = instance.imp();
1040
1041 imp.setup_request(&from_glib_borrow(ctx));
1042 }
1043}
1044
1045unsafe extern "C" fn client_play_request<T: RTSPClientImpl>(
1046 ptr: *mut ffi::GstRTSPClient,
1047 ctx: *mut ffi::GstRTSPContext,
1048) {
1049 unsafe {
1050 let instance = &*(ptr as *mut T::Instance);
1051 let imp = instance.imp();
1052
1053 imp.play_request(&from_glib_borrow(ctx));
1054 }
1055}
1056
1057unsafe extern "C" fn client_pause_request<T: RTSPClientImpl>(
1058 ptr: *mut ffi::GstRTSPClient,
1059 ctx: *mut ffi::GstRTSPContext,
1060) {
1061 unsafe {
1062 let instance = &*(ptr as *mut T::Instance);
1063 let imp = instance.imp();
1064
1065 imp.pause_request(&from_glib_borrow(ctx));
1066 }
1067}
1068
1069unsafe extern "C" fn client_teardown_request<T: RTSPClientImpl>(
1070 ptr: *mut ffi::GstRTSPClient,
1071 ctx: *mut ffi::GstRTSPContext,
1072) {
1073 unsafe {
1074 let instance = &*(ptr as *mut T::Instance);
1075 let imp = instance.imp();
1076
1077 imp.teardown_request(&from_glib_borrow(ctx));
1078 }
1079}
1080
1081unsafe extern "C" fn client_set_parameter_request<T: RTSPClientImpl>(
1082 ptr: *mut ffi::GstRTSPClient,
1083 ctx: *mut ffi::GstRTSPContext,
1084) {
1085 unsafe {
1086 let instance = &*(ptr as *mut T::Instance);
1087 let imp = instance.imp();
1088
1089 imp.set_parameter_request(&from_glib_borrow(ctx));
1090 }
1091}
1092
1093unsafe extern "C" fn client_get_parameter_request<T: RTSPClientImpl>(
1094 ptr: *mut ffi::GstRTSPClient,
1095 ctx: *mut ffi::GstRTSPContext,
1096) {
1097 unsafe {
1098 let instance = &*(ptr as *mut T::Instance);
1099 let imp = instance.imp();
1100
1101 imp.parameter_request(&from_glib_borrow(ctx));
1102 }
1103}
1104
1105unsafe extern "C" fn client_announce_request<T: RTSPClientImpl>(
1106 ptr: *mut ffi::GstRTSPClient,
1107 ctx: *mut ffi::GstRTSPContext,
1108) {
1109 unsafe {
1110 let instance = &*(ptr as *mut T::Instance);
1111 let imp = instance.imp();
1112
1113 imp.announce_request(&from_glib_borrow(ctx));
1114 }
1115}
1116
1117unsafe extern "C" fn client_record_request<T: RTSPClientImpl>(
1118 ptr: *mut ffi::GstRTSPClient,
1119 ctx: *mut ffi::GstRTSPContext,
1120) {
1121 unsafe {
1122 let instance = &*(ptr as *mut T::Instance);
1123 let imp = instance.imp();
1124
1125 imp.record_request(&from_glib_borrow(ctx));
1126 }
1127}
1128
1129unsafe extern "C" fn client_handle_response<T: RTSPClientImpl>(
1130 ptr: *mut ffi::GstRTSPClient,
1131 ctx: *mut ffi::GstRTSPContext,
1132) {
1133 unsafe {
1134 let instance = &*(ptr as *mut T::Instance);
1135 let imp = instance.imp();
1136
1137 imp.handle_response(&from_glib_borrow(ctx));
1138 }
1139}
1140
1141unsafe extern "C" fn client_handle_sdp<T: RTSPClientImpl>(
1142 ptr: *mut ffi::GstRTSPClient,
1143 ctx: *mut ffi::GstRTSPContext,
1144 media: *mut ffi::GstRTSPMedia,
1145 sdp: *mut gst_sdp::ffi::GstSDPMessage,
1146) -> glib::ffi::gboolean {
1147 unsafe {
1148 let instance = &*(ptr as *mut T::Instance);
1149 let imp = instance.imp();
1150
1151 match imp.handle_sdp(
1152 &from_glib_borrow(ctx),
1153 &from_glib_borrow(media),
1154 &*(sdp as *mut _),
1155 ) {
1156 Ok(()) => glib::ffi::GTRUE,
1157 Err(err) => {
1158 err.log_with_imp(imp);
1159 glib::ffi::GFALSE
1160 }
1161 }
1162 }
1163}
1164
1165unsafe extern "C" fn client_check_requirements<T: RTSPClientImpl>(
1166 ptr: *mut ffi::GstRTSPClient,
1167 ctx: *mut ffi::GstRTSPContext,
1168 arr: *mut *mut std::os::raw::c_char,
1169) -> *mut std::os::raw::c_char {
1170 unsafe {
1171 let instance = &*(ptr as *mut T::Instance);
1172 let imp = instance.imp();
1173
1174 imp.check_requirements(&from_glib_borrow(ctx), Vec::from_glib_none(arr).as_slice())
1175 .into_glib_ptr()
1176 }
1177}
1178
1179unsafe extern "C" fn client_pre_options_request<T: RTSPClientImpl>(
1180 ptr: *mut ffi::GstRTSPClient,
1181 ctx: *mut ffi::GstRTSPContext,
1182) -> gst_rtsp::ffi::GstRTSPStatusCode {
1183 unsafe {
1184 let instance = &*(ptr as *mut T::Instance);
1185 let imp = instance.imp();
1186
1187 imp.pre_options_request(&from_glib_borrow(ctx)).into_glib()
1188 }
1189}
1190
1191unsafe extern "C" fn client_pre_describe_request<T: RTSPClientImpl>(
1192 ptr: *mut ffi::GstRTSPClient,
1193 ctx: *mut ffi::GstRTSPContext,
1194) -> gst_rtsp::ffi::GstRTSPStatusCode {
1195 unsafe {
1196 let instance = &*(ptr as *mut T::Instance);
1197 let imp = instance.imp();
1198
1199 imp.pre_describe_request(&from_glib_borrow(ctx)).into_glib()
1200 }
1201}
1202
1203unsafe extern "C" fn client_pre_setup_request<T: RTSPClientImpl>(
1204 ptr: *mut ffi::GstRTSPClient,
1205 ctx: *mut ffi::GstRTSPContext,
1206) -> gst_rtsp::ffi::GstRTSPStatusCode {
1207 unsafe {
1208 let instance = &*(ptr as *mut T::Instance);
1209 let imp = instance.imp();
1210
1211 imp.pre_setup_request(&from_glib_borrow(ctx)).into_glib()
1212 }
1213}
1214
1215unsafe extern "C" fn client_pre_play_request<T: RTSPClientImpl>(
1216 ptr: *mut ffi::GstRTSPClient,
1217 ctx: *mut ffi::GstRTSPContext,
1218) -> gst_rtsp::ffi::GstRTSPStatusCode {
1219 unsafe {
1220 let instance = &*(ptr as *mut T::Instance);
1221 let imp = instance.imp();
1222
1223 imp.pre_play_request(&from_glib_borrow(ctx)).into_glib()
1224 }
1225}
1226
1227unsafe extern "C" fn client_pre_pause_request<T: RTSPClientImpl>(
1228 ptr: *mut ffi::GstRTSPClient,
1229 ctx: *mut ffi::GstRTSPContext,
1230) -> gst_rtsp::ffi::GstRTSPStatusCode {
1231 unsafe {
1232 let instance = &*(ptr as *mut T::Instance);
1233 let imp = instance.imp();
1234
1235 imp.pre_pause_request(&from_glib_borrow(ctx)).into_glib()
1236 }
1237}
1238
1239unsafe extern "C" fn client_pre_teardown_request<T: RTSPClientImpl>(
1240 ptr: *mut ffi::GstRTSPClient,
1241 ctx: *mut ffi::GstRTSPContext,
1242) -> gst_rtsp::ffi::GstRTSPStatusCode {
1243 unsafe {
1244 let instance = &*(ptr as *mut T::Instance);
1245 let imp = instance.imp();
1246
1247 imp.pre_teardown_request(&from_glib_borrow(ctx)).into_glib()
1248 }
1249}
1250
1251unsafe extern "C" fn client_pre_set_parameter_request<T: RTSPClientImpl>(
1252 ptr: *mut ffi::GstRTSPClient,
1253 ctx: *mut ffi::GstRTSPContext,
1254) -> gst_rtsp::ffi::GstRTSPStatusCode {
1255 unsafe {
1256 let instance = &*(ptr as *mut T::Instance);
1257 let imp = instance.imp();
1258
1259 imp.pre_set_parameter_request(&from_glib_borrow(ctx))
1260 .into_glib()
1261 }
1262}
1263
1264unsafe extern "C" fn client_pre_get_parameter_request<T: RTSPClientImpl>(
1265 ptr: *mut ffi::GstRTSPClient,
1266 ctx: *mut ffi::GstRTSPContext,
1267) -> gst_rtsp::ffi::GstRTSPStatusCode {
1268 unsafe {
1269 let instance = &*(ptr as *mut T::Instance);
1270 let imp = instance.imp();
1271
1272 imp.pre_get_parameter_request(&from_glib_borrow(ctx))
1273 .into_glib()
1274 }
1275}
1276
1277unsafe extern "C" fn client_pre_announce_request<T: RTSPClientImpl>(
1278 ptr: *mut ffi::GstRTSPClient,
1279 ctx: *mut ffi::GstRTSPContext,
1280) -> gst_rtsp::ffi::GstRTSPStatusCode {
1281 unsafe {
1282 let instance = &*(ptr as *mut T::Instance);
1283 let imp = instance.imp();
1284
1285 imp.pre_announce_request(&from_glib_borrow(ctx)).into_glib()
1286 }
1287}
1288
1289unsafe extern "C" fn client_pre_record_request<T: RTSPClientImpl>(
1290 ptr: *mut ffi::GstRTSPClient,
1291 ctx: *mut ffi::GstRTSPContext,
1292) -> gst_rtsp::ffi::GstRTSPStatusCode {
1293 unsafe {
1294 let instance = &*(ptr as *mut T::Instance);
1295 let imp = instance.imp();
1296
1297 imp.pre_record_request(&from_glib_borrow(ctx)).into_glib()
1298 }
1299}
1300
1301#[cfg(feature = "v1_22")]
1302#[cfg_attr(docsrs, doc(cfg(feature = "v1_22")))]
1303unsafe extern "C" fn client_adjust_error_code<T: RTSPClientImpl>(
1304 ptr: *mut ffi::GstRTSPClient,
1305 ctx: *mut ffi::GstRTSPContext,
1306 status_code: gst_rtsp::ffi::GstRTSPStatusCode,
1307) -> gst_rtsp::ffi::GstRTSPStatusCode {
1308 unsafe {
1309 let instance = &*(ptr as *mut T::Instance);
1310 let imp = instance.imp();
1311
1312 imp.adjust_error_code(&from_glib_borrow(ctx), from_glib(status_code))
1313 .into_glib()
1314 }
1315}