1use glib::{prelude::*, subclass::prelude::*, translate::*};
4
5use crate::{ffi, RTSPClient};
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 let instance = &*(ptr as *mut T::Instance);
920 let imp = instance.imp();
921
922 imp.create_sdp(&from_glib_borrow(media)).into_glib_ptr()
923}
924
925unsafe extern "C" fn client_configure_client_media<T: RTSPClientImpl>(
926 ptr: *mut ffi::GstRTSPClient,
927 media: *mut ffi::GstRTSPMedia,
928 stream: *mut ffi::GstRTSPStream,
929 ctx: *mut ffi::GstRTSPContext,
930) -> glib::ffi::gboolean {
931 let instance = &*(ptr as *mut T::Instance);
932 let imp = instance.imp();
933
934 match imp.configure_client_media(
935 &from_glib_borrow(media),
936 &from_glib_borrow(stream),
937 &from_glib_borrow(ctx),
938 ) {
939 Ok(()) => glib::ffi::GTRUE,
940 Err(err) => {
941 err.log_with_imp(imp);
942 glib::ffi::GFALSE
943 }
944 }
945}
946
947unsafe extern "C" fn client_params_set<T: RTSPClientImpl>(
948 ptr: *mut ffi::GstRTSPClient,
949 ctx: *mut ffi::GstRTSPContext,
950) -> gst_rtsp::ffi::GstRTSPResult {
951 let instance = &*(ptr as *mut T::Instance);
952 let imp = instance.imp();
953
954 imp.params_set(&from_glib_borrow(ctx)).into_glib()
955}
956
957unsafe extern "C" fn client_params_get<T: RTSPClientImpl>(
958 ptr: *mut ffi::GstRTSPClient,
959 ctx: *mut ffi::GstRTSPContext,
960) -> gst_rtsp::ffi::GstRTSPResult {
961 let instance = &*(ptr as *mut T::Instance);
962 let imp = instance.imp();
963
964 imp.params_get(&from_glib_borrow(ctx)).into_glib()
965}
966
967unsafe extern "C" fn client_make_path_from_uri<T: RTSPClientImpl>(
968 ptr: *mut ffi::GstRTSPClient,
969 url: *const gst_rtsp::ffi::GstRTSPUrl,
970) -> *mut std::os::raw::c_char {
971 let instance = &*(ptr as *mut T::Instance);
972 let imp = instance.imp();
973
974 imp.make_path_from_uri(&from_glib_borrow(url))
975 .into_glib_ptr()
976}
977
978unsafe extern "C" fn client_closed<T: RTSPClientImpl>(ptr: *mut ffi::GstRTSPClient) {
979 let instance = &*(ptr as *mut T::Instance);
980 let imp = instance.imp();
981
982 imp.closed();
983}
984
985unsafe extern "C" fn client_new_session<T: RTSPClientImpl>(
986 ptr: *mut ffi::GstRTSPClient,
987 session: *mut ffi::GstRTSPSession,
988) {
989 let instance = &*(ptr as *mut T::Instance);
990 let imp = instance.imp();
991
992 imp.new_session(&from_glib_borrow(session));
993}
994
995unsafe extern "C" fn client_options_request<T: RTSPClientImpl>(
996 ptr: *mut ffi::GstRTSPClient,
997 ctx: *mut ffi::GstRTSPContext,
998) {
999 let instance = &*(ptr as *mut T::Instance);
1000 let imp = instance.imp();
1001
1002 imp.options_request(&from_glib_borrow(ctx));
1003}
1004
1005unsafe extern "C" fn client_describe_request<T: RTSPClientImpl>(
1006 ptr: *mut ffi::GstRTSPClient,
1007 ctx: *mut ffi::GstRTSPContext,
1008) {
1009 let instance = &*(ptr as *mut T::Instance);
1010 let imp = instance.imp();
1011
1012 imp.describe_request(&from_glib_borrow(ctx));
1013}
1014
1015unsafe extern "C" fn client_setup_request<T: RTSPClientImpl>(
1016 ptr: *mut ffi::GstRTSPClient,
1017 ctx: *mut ffi::GstRTSPContext,
1018) {
1019 let instance = &*(ptr as *mut T::Instance);
1020 let imp = instance.imp();
1021
1022 imp.setup_request(&from_glib_borrow(ctx));
1023}
1024
1025unsafe extern "C" fn client_play_request<T: RTSPClientImpl>(
1026 ptr: *mut ffi::GstRTSPClient,
1027 ctx: *mut ffi::GstRTSPContext,
1028) {
1029 let instance = &*(ptr as *mut T::Instance);
1030 let imp = instance.imp();
1031
1032 imp.play_request(&from_glib_borrow(ctx));
1033}
1034
1035unsafe extern "C" fn client_pause_request<T: RTSPClientImpl>(
1036 ptr: *mut ffi::GstRTSPClient,
1037 ctx: *mut ffi::GstRTSPContext,
1038) {
1039 let instance = &*(ptr as *mut T::Instance);
1040 let imp = instance.imp();
1041
1042 imp.pause_request(&from_glib_borrow(ctx));
1043}
1044
1045unsafe extern "C" fn client_teardown_request<T: RTSPClientImpl>(
1046 ptr: *mut ffi::GstRTSPClient,
1047 ctx: *mut ffi::GstRTSPContext,
1048) {
1049 let instance = &*(ptr as *mut T::Instance);
1050 let imp = instance.imp();
1051
1052 imp.teardown_request(&from_glib_borrow(ctx));
1053}
1054
1055unsafe extern "C" fn client_set_parameter_request<T: RTSPClientImpl>(
1056 ptr: *mut ffi::GstRTSPClient,
1057 ctx: *mut ffi::GstRTSPContext,
1058) {
1059 let instance = &*(ptr as *mut T::Instance);
1060 let imp = instance.imp();
1061
1062 imp.set_parameter_request(&from_glib_borrow(ctx));
1063}
1064
1065unsafe extern "C" fn client_get_parameter_request<T: RTSPClientImpl>(
1066 ptr: *mut ffi::GstRTSPClient,
1067 ctx: *mut ffi::GstRTSPContext,
1068) {
1069 let instance = &*(ptr as *mut T::Instance);
1070 let imp = instance.imp();
1071
1072 imp.parameter_request(&from_glib_borrow(ctx));
1073}
1074
1075unsafe extern "C" fn client_announce_request<T: RTSPClientImpl>(
1076 ptr: *mut ffi::GstRTSPClient,
1077 ctx: *mut ffi::GstRTSPContext,
1078) {
1079 let instance = &*(ptr as *mut T::Instance);
1080 let imp = instance.imp();
1081
1082 imp.announce_request(&from_glib_borrow(ctx));
1083}
1084
1085unsafe extern "C" fn client_record_request<T: RTSPClientImpl>(
1086 ptr: *mut ffi::GstRTSPClient,
1087 ctx: *mut ffi::GstRTSPContext,
1088) {
1089 let instance = &*(ptr as *mut T::Instance);
1090 let imp = instance.imp();
1091
1092 imp.record_request(&from_glib_borrow(ctx));
1093}
1094
1095unsafe extern "C" fn client_handle_response<T: RTSPClientImpl>(
1096 ptr: *mut ffi::GstRTSPClient,
1097 ctx: *mut ffi::GstRTSPContext,
1098) {
1099 let instance = &*(ptr as *mut T::Instance);
1100 let imp = instance.imp();
1101
1102 imp.handle_response(&from_glib_borrow(ctx));
1103}
1104
1105unsafe extern "C" fn client_handle_sdp<T: RTSPClientImpl>(
1106 ptr: *mut ffi::GstRTSPClient,
1107 ctx: *mut ffi::GstRTSPContext,
1108 media: *mut ffi::GstRTSPMedia,
1109 sdp: *mut gst_sdp::ffi::GstSDPMessage,
1110) -> glib::ffi::gboolean {
1111 let instance = &*(ptr as *mut T::Instance);
1112 let imp = instance.imp();
1113
1114 match imp.handle_sdp(
1115 &from_glib_borrow(ctx),
1116 &from_glib_borrow(media),
1117 &*(sdp as *mut _),
1118 ) {
1119 Ok(()) => glib::ffi::GTRUE,
1120 Err(err) => {
1121 err.log_with_imp(imp);
1122 glib::ffi::GFALSE
1123 }
1124 }
1125}
1126
1127unsafe extern "C" fn client_check_requirements<T: RTSPClientImpl>(
1128 ptr: *mut ffi::GstRTSPClient,
1129 ctx: *mut ffi::GstRTSPContext,
1130 arr: *mut *mut std::os::raw::c_char,
1131) -> *mut std::os::raw::c_char {
1132 let instance = &*(ptr as *mut T::Instance);
1133 let imp = instance.imp();
1134
1135 imp.check_requirements(&from_glib_borrow(ctx), Vec::from_glib_none(arr).as_slice())
1136 .into_glib_ptr()
1137}
1138
1139unsafe extern "C" fn client_pre_options_request<T: RTSPClientImpl>(
1140 ptr: *mut ffi::GstRTSPClient,
1141 ctx: *mut ffi::GstRTSPContext,
1142) -> gst_rtsp::ffi::GstRTSPStatusCode {
1143 let instance = &*(ptr as *mut T::Instance);
1144 let imp = instance.imp();
1145
1146 imp.pre_options_request(&from_glib_borrow(ctx)).into_glib()
1147}
1148
1149unsafe extern "C" fn client_pre_describe_request<T: RTSPClientImpl>(
1150 ptr: *mut ffi::GstRTSPClient,
1151 ctx: *mut ffi::GstRTSPContext,
1152) -> gst_rtsp::ffi::GstRTSPStatusCode {
1153 let instance = &*(ptr as *mut T::Instance);
1154 let imp = instance.imp();
1155
1156 imp.pre_describe_request(&from_glib_borrow(ctx)).into_glib()
1157}
1158
1159unsafe extern "C" fn client_pre_setup_request<T: RTSPClientImpl>(
1160 ptr: *mut ffi::GstRTSPClient,
1161 ctx: *mut ffi::GstRTSPContext,
1162) -> gst_rtsp::ffi::GstRTSPStatusCode {
1163 let instance = &*(ptr as *mut T::Instance);
1164 let imp = instance.imp();
1165
1166 imp.pre_setup_request(&from_glib_borrow(ctx)).into_glib()
1167}
1168
1169unsafe extern "C" fn client_pre_play_request<T: RTSPClientImpl>(
1170 ptr: *mut ffi::GstRTSPClient,
1171 ctx: *mut ffi::GstRTSPContext,
1172) -> gst_rtsp::ffi::GstRTSPStatusCode {
1173 let instance = &*(ptr as *mut T::Instance);
1174 let imp = instance.imp();
1175
1176 imp.pre_play_request(&from_glib_borrow(ctx)).into_glib()
1177}
1178
1179unsafe extern "C" fn client_pre_pause_request<T: RTSPClientImpl>(
1180 ptr: *mut ffi::GstRTSPClient,
1181 ctx: *mut ffi::GstRTSPContext,
1182) -> gst_rtsp::ffi::GstRTSPStatusCode {
1183 let instance = &*(ptr as *mut T::Instance);
1184 let imp = instance.imp();
1185
1186 imp.pre_pause_request(&from_glib_borrow(ctx)).into_glib()
1187}
1188
1189unsafe extern "C" fn client_pre_teardown_request<T: RTSPClientImpl>(
1190 ptr: *mut ffi::GstRTSPClient,
1191 ctx: *mut ffi::GstRTSPContext,
1192) -> gst_rtsp::ffi::GstRTSPStatusCode {
1193 let instance = &*(ptr as *mut T::Instance);
1194 let imp = instance.imp();
1195
1196 imp.pre_teardown_request(&from_glib_borrow(ctx)).into_glib()
1197}
1198
1199unsafe extern "C" fn client_pre_set_parameter_request<T: RTSPClientImpl>(
1200 ptr: *mut ffi::GstRTSPClient,
1201 ctx: *mut ffi::GstRTSPContext,
1202) -> gst_rtsp::ffi::GstRTSPStatusCode {
1203 let instance = &*(ptr as *mut T::Instance);
1204 let imp = instance.imp();
1205
1206 imp.pre_set_parameter_request(&from_glib_borrow(ctx))
1207 .into_glib()
1208}
1209
1210unsafe extern "C" fn client_pre_get_parameter_request<T: RTSPClientImpl>(
1211 ptr: *mut ffi::GstRTSPClient,
1212 ctx: *mut ffi::GstRTSPContext,
1213) -> gst_rtsp::ffi::GstRTSPStatusCode {
1214 let instance = &*(ptr as *mut T::Instance);
1215 let imp = instance.imp();
1216
1217 imp.pre_get_parameter_request(&from_glib_borrow(ctx))
1218 .into_glib()
1219}
1220
1221unsafe extern "C" fn client_pre_announce_request<T: RTSPClientImpl>(
1222 ptr: *mut ffi::GstRTSPClient,
1223 ctx: *mut ffi::GstRTSPContext,
1224) -> gst_rtsp::ffi::GstRTSPStatusCode {
1225 let instance = &*(ptr as *mut T::Instance);
1226 let imp = instance.imp();
1227
1228 imp.pre_announce_request(&from_glib_borrow(ctx)).into_glib()
1229}
1230
1231unsafe extern "C" fn client_pre_record_request<T: RTSPClientImpl>(
1232 ptr: *mut ffi::GstRTSPClient,
1233 ctx: *mut ffi::GstRTSPContext,
1234) -> gst_rtsp::ffi::GstRTSPStatusCode {
1235 let instance = &*(ptr as *mut T::Instance);
1236 let imp = instance.imp();
1237
1238 imp.pre_record_request(&from_glib_borrow(ctx)).into_glib()
1239}
1240
1241#[cfg(feature = "v1_22")]
1242#[cfg_attr(docsrs, doc(cfg(feature = "v1_22")))]
1243unsafe extern "C" fn client_adjust_error_code<T: RTSPClientImpl>(
1244 ptr: *mut ffi::GstRTSPClient,
1245 ctx: *mut ffi::GstRTSPContext,
1246 status_code: gst_rtsp::ffi::GstRTSPStatusCode,
1247) -> gst_rtsp::ffi::GstRTSPStatusCode {
1248 let instance = &*(ptr as *mut T::Instance);
1249 let imp = instance.imp();
1250
1251 imp.adjust_error_code(&from_glib_borrow(ctx), from_glib(status_code))
1252 .into_glib()
1253}