PACKm@xSMo0W̽MM R!LY{;;m* r|$D"TSfY*I*R2m S,cqP#M"ӂdR4lbĶB%Je0j  H +k YfR+)eRI`toBΝ;fO;Yeec!ֈEj:èBhdMkc0L^R0:4bŃfI "pTFvPSPfY=U)i߲UͰp=G_9-(pCzasK6|04x7^ \9x?n7r}Z<-{q+b5lJqeRi]fq6+ҊRL5%\8[C¡0|8nqy:`tU%Wg1iɯ^i'5#C?AϥO/<;otSga8xRn0+آD=L(&@MCQX[ R HjE޸3JBLeEJ1O*Ԃ3Ei|@a% S$5S`3fӜ:[;g] w\rǍoO]saW HNIN{roMCmͥ( eD'%Z(}EwCztH7ޡ { G3Q!kt\.mi M©CD,ZĂQ e{\5O:t?׽^JB^-=Y*b_$Kl 0[Q^wܴکv$%#U"8 mHJ0aiH;'T9w=NaɱO(F;Z[V޷eAD[ƁPl._7 %@xS[k0~ׯ{q,[oeʚ0Ɛu-,]d'tݣ>w9: H Ij) Dw4c\DeI@Ug LVI U""'9ۚ~Anie,vGmB 2Y#A/x@L|0^.?~\Y\0F{uT@ZV Urh uƴr-J8I"ơ=^^Й9ck%,ZC̽JZ7$PwnލJNeSpkkGto'ַ cڝ]ɳp"r+5tWxG\fs'iZpbxD6x!0}I0lY+cŰ.8'"Iz,_skdm;'VuNg_z]V3~.v, 7[4xRn0+آL1C|d֒hT K;N)'bgwvgD As23&"f& gJNPqUU>y5Q5c%VP!k&9@v}68ծ{YAHQ2B\AHΆ' Bɨgtv$z@l^Zo-{[[<`{lX$Vآ. -7vAM=ld+vrGџ:PCS%_0f :صӱnzå#zX3G݄|={4H9h۝fDm$Qp`ɢWDM5Eʂ YxFPD"M_h&`®Jf7֩N<Ǵak(ON`z2xF*r}9l;tn_[dܠƯg~^3qZ xmA bf#үFŶ!oK= 4a쬃_H!'t:P0)15Bh!g軯^}H9no姻iNx/O xA @=IPc4q(eJ c ]x{`ZqjpwʪD~&ΙhcLz\:+ܹ3<)90w/wn?\@9OzAz)k ̈́1F3 xm̱ ᝧݤ^4gz4Сoŭ\(ߓNz~ɢcF.:)f%DR5\^[g~9%x֘+p7 ACd(ğ&3n xm̽ @ᝧ r!BobgHiLo'N[pC+QR[Vx$mǰ&i+;96R-crX \G-qK׵^1 2d4Iy}ź2 xM @=I•b AKg-/o.$fQIY;Ϩ'C884;7MVN`9XE-)y+J̟ex 7s Ԭ8j=8I#L9C2V6ӓ?xSMO0W'Ѫ.DR&$1$v;u(͛FHiֲ5 9P 1gyCEM0@ЌeˠC2ʔ Yۙ|C80l3qp#0Ae^rrBF83k kɥVǭ;=%(J+JhQM!L]E@]NiCVR(FP =տIO8h SLѻ,6+:MG(#:AEJt]v{i*مs :: pu\U\QZ<^ ѢUx<}$&U + (R%X&- Z6E+hx!Բ&S$4j<`c]'霏aq#$iŲFLBP},+}x;(µm%# -?~@tfe30v5x {C5HؿsxSv@xSn0+frIGWKi+"X $nvZqhKQr9ppU1˻FT\1]eL.!xAܡ P0Ϊ3Q-Eil*^6ےgT sǯM?F54iVWYHD':8?;kk77z ZS"e!Njᓖ|y@P(r8v 8?iToB !e틤1p=zѐk2XU>q]g݄%og=*Dy\.6}O^)VO kX鼮nl 919Q-uI3TMɲLfyYUr)9[wQ˚maLPXo=a{m|L_["'눢XڿSHNqZ 7q\;}3ԏqq=7vy/EZ&{k© vHQ;'7<a9xRn0+'-(&'@8E{("WctI*tmwΎPem7,KdR!rV7UQ!Dfd-jmF$M!hÄ@,D)iPF Fi$O7>#Zt=\r l: 32W%hT#,d(mxDRV*RBR0G(~.p !^#wWƣ:GՀwZ;iCXܝ֚-Z?<턳0:th[cG50AwCYU ʹ Ylw`}v7Bz;V\m dis3RƋcy52HY5o8 b?`cqwGav/0>y5/SrW"Zj>r5\q^bX3žm5,,;K?3+雛87cH&Dzz `5>xRn0+Ȣd=H(&@8z("W4DTq (zbf8;;~D:e %TfPFL& LXNhhYSA6x>s,=Yq|V=xxd'Pzv>Cʴ/4z9힒9gĻ<G| 38v*i>RS:x[k0+=x-ٱ,tyBPJĖIN_9W ͜!(e (+((YUumǕJ¡ =nl J2J(H˸B(:d"0X?΄^ Geu|{\I;}Z9g HY$XӟZ gzkWzzy*^F&$Iv~iވC4**lIG}x> Zs.h+[vv`^&6Q,%z*]lϳM|?F]P]^ٟE}o o<ǹ_&T5KUSRIDMbirwcKkB7Y]=(=[YCh1; ^Eڦ=4D(oc Y+$WA-Mk| KbYo> 7K}AgˡL;?xSMo0 W^$e50 Djl)bX||D9jr$%ϥ u)yMDT:ز$qZBJQƜqgTqJI6 q@2`;!581H&"ixWwF7a!|b|eBsz$Q+bͰ vJ*X+;d8UYŏ{aGcY::noF})yje]&y3,l\p*ͽh | (XC{qt'2<>`T?x6p(0v:9O$[,$xN0E#*NBJ } UxZMvT)b<νw#^ˬc:+.s)j,RqIL&Gtd#Jȋ lY-2O)I:yp]- j{`aIƒ8=_d$af 'M: x340031QL+*f(/ao['ܰJ22SSRRSR2N/XٰfCk^k֡(-)l~Ӄn^xsI4R]4xD100644 imp.rsğUE%E2 @100644 mod.rsctí3[Ie X Xkx%40000 unifiedbinȣvYet@z؅`xv100644 lib.rs Ap;VOZ40000 unifieddecodebin.J *ՆeU.=40000 unifiedsinkbinwE&z-.1}.xD100644 imp.rsˊF_uln=K100644 mod.rs$kmdi$-,kA֎]x340031Q-+*f~cn, v5McQR\rx-7gF/'RU0x%40000 unifiedbin_LƩcau {K Nxv100644 lib.rs Ap;VOZ40000 unifieddecodebin% Dڢ]'>(v0m0. 40000 unifiedsinkbinwE&z-.1,פxD100644 imp.rs?IF)2H V100644 mod.rs$kmdi$-,kA<%x%40000 unifiedbin_ęO'.Fnmxv100644 lib.rs Ap;VOZ40000 unifieddecodebin z.[dNab%L}M*צxv100644 lib.rs Ap;VOZ40000 unifieddecodebinB󃷘)Aתu40000 unifiedsinkbinwE&z-.1(<2$x340031Q-+*fx&ζKJkkfL?2NC{˫ l7K/y3 Ix%40000 unifiedbinbS.tajP0h˦xv100644 lib.rs Ap;VOZ40000 unifieddecodebin/E [%^1\40000 unifiedsinkbinwE&z-.1D-x340031Q-+*fQ+o}pt[$_ɮ B) KK1WAn^h=fx%40000 unifiedbinG<](mim|x31Ҽ̴ԔsZ#zѯ|+ 5'x Z~bt[*t nxxqqN[ T|(b3eWׯ ~xrn&I0@x`8, ɓK )x߹>Ia Q0QR*Rxq>4Ltד9; ˬ8RxXt"˒12&l>*xxqq.Y]n+wk yEhS^ccY.v*p}J | xȘ"rY;Xo/Vk^. S^ccY.v*p}J | xȘ"sOW6D-K/^ S^ccY.v*p}J | xȘ"v{3&߅L!a>} (xhhT0ll2, (xȘ"\)>\Y?8.ʖ %xhhT֔3x7P6QQd# dxȘ"2Y$TwӶ3i|8Yb>  xȘ")cY0ZMk7K04z 40xȘ"Қ^w9ư& &xhhTgq/:H(ȳj D MxhhTR  v 7+2qU XNxhhT[$leGq_Bm NxȘ"IĪYӓY|}]as 7}~-8#u0OV'g UxSj@$ !<_[Jڎq$yl5ҳPKAhgΜ9~]MbgHTad.)ýTJ*{lF -:No0aPRV2*m!I!-J4턡꽮 CeAgXL浯U*c 82k ^F9&#RdDY,eaE[h 5wNjI>p%cΩߑ16 nYwRq΅YfO[ V0!e%We94z>̺fFNҞE[Yf(Ėx)ɭ_ \6KVm2.HӞ>wg6%>EBqEJC\ynu^[UNݾkw[_qDž9~RϷo>^t}.$7xGdecodebin; mod unifiedsink7>">a::9:L w x!R=>vx^#[cfg(feature = "unifieddecodebin")] mod unifieddecodebin; #[cfg(feature = "unifiedsinkbin")]-#[cfg(feature = "unifiedsinkbin")] { +6} #[cfg(feature = "unifieddecodebin")] { -} OF9zԹ:l]L`pxSj@Ż. . 8~6b8wSU4taGSgGNBwc/d0Qةǜ>S"+J3A˸0AR׆t2Dx|I*4WM8&<lV Y8pgZ2\)7g1h6koF^7k0 Gt#/6+V^C?gKcu~^: -2SzԹ:l]L`px[]lulٖ(ْE_QD$J+dK-ˢq̈ISQ3ܙPmҢbKmҷm@t})h6} Z/Т]9w)1 {9szӟ~7uYڕuW ʦ"ȼ\+Jx[QJFhb#wʾlm$q'I'/BY.*E#EbSm+)+290M3d_].)+US&I$4aW+)XWUQ#s[&Dd{pOVe]*FY)bJQV H`->zse] $H3DVߓuȴ-sLM' !D`$OgXး-0*0m`C}dC&UCެSSjny {J٭љ0*]R}9<\X]r,=]Z[^G$GVrkKwVʣB,v djΛtWkdSRʆ h,'NjZJzMo5u :!&Q53E Ԑ'vxzYpr`7.e&*tifH0G&S&z>ٴDێ Oխl6΄{0K٬V1yY7ʱ^剅P0OV OVKĥ#WYTS%6S7tVkœ_iȋNOtŊTʒ-fmV9?0d[0\aw! M+ϥ,F0XPT@BA@Xܖ-Q :Sօ]M*ZY >`>:U*P{4=mJen^^'KUe,TLap2o*_qtaKۺ=R4wON`^豖'-ӛ-jZ>i`_}!D,<K^CmPL2 WM;Cg6A Ƈ9# gqy)C- b$ؔ WWȥ=;,|Rjf_Zr)ȕHxzyNʐp"i]?'66)!P7j$u{0`ouEze0-02gl ¤r,c xЕ-y|Mْ!Lβ``5% $=8WNjm d:E貮˴)mѫj gcѓ0 `O:1te2F@i֝kT+ޙps[v.$қlie,Ǒ>tqnO*W!T`ub+k;"뺦;qI{uKp$#uW/:cώO/mks"PaP@ ܭ\7ݕH g}8Kmjw_@p]91@gLwm]覟]~P^jݫ- 陡! Ò0Ud('P :c2A@s"6N7BO鎢 ljӛ:`[~C>5PL5o ;~u($lA[S]=Hn1 $7?Eˋ--\| f+cc<׬7*@Cbfd>ץJ7`g?imҸeH㦀6u̳JJSaWY6r&CXU$D{6:%U)퐅<"UIJSx0"XbMdjnF"LP`J[4nPXVMnjЪƹֆB:pL ԑb]e5Pkl}IQU0qfglc#_t. nGϿwfs+#ހ #}Kovl:|բ~ea|&LW-~jzXl@?]. ˽kњfbI'=3>ûqj  EԆwrk)\l)Vp[_eO Lh|b,0RU:7//=lH{]nܓ5ov "oaC6 LP&3=c0g!Zo .=!\^Q*ug? jqk`=EtxuH,"bI9L#a3`pM8~o\_;2=H`1.={4~΃xmR@mm um>lX̟m X2Tx|[}|x؃go۵r_.}?QEEx{1܉D 8km b-<~z7W/Vbկ[?w`wk{  LgϪu,(q9VnL~:{7p[k{ޫlj/2zh#gaP}0кR4+[`jsG$r7L}5BSWc†, ܿ2{Z™v[O?DxǝcǺ+.y@rN 哳'Xqѱ ?Cci9rel;/A m±m@mː<磲bi񜐍j@x$N [6 tz2p 3uBIf|)s}S5~ӌ'gHnt6ŶO#F'bDS}==8jb="s 9LĊb/?oC*<$ M.MmRG9V"b׌0p>WwcL<$Dؗt|Dl ([j!;`\lʔml>.j_%+>je6/`ƐMq{fA8ol2VӴٛ/1o, ?9x GѰ5%^m;;EMFz)QC1m4(J[!289-hd~FǹpCުVk?؍) >dѠ ,D ,ӕ\36u`nƗ?8h9`_ߌ;Q_ }aj"u;av5#񓉉G 9 \YQwp yKЖ?9;\O\1%``1LT]FI>ƒ 6m ߥ ̸}˪H^RQ4ߟ/|{Κg6MY쐛V{_!z7_ 8^9t ;cG?!πяk5G+L͉H+x b={  2b<.`qz͉X] 'C.-*Ɲ_8N%9tz%^J]ϋQ'vv`/U]"% @ ȰT IUfUޒ_}/ca߳}v&)D՝WI!`ӚDy\t!XMҞ˃'?|u0Leh&9pzԹ:l]L`pxUoEӴ$%4}ĩc;N%n'&v0]33vd'TR\ q N !.p¥:jyޛv")Q!$;̨k䭺L׵p9g7*D_ȸgLRlo@֦Lc;*`',sJ-ܲ<"6$pj1!9+5$&8VC͵Xe G#U m6vasu('65J6363#(u-UjL5B xu@{7)(Tp_c \D8umE- a Z kUU!zlJvL@e+n9;F>oҨ,.&]ZĨ8qd k&vxXw=#_e()7*.expect("decoder-element-added signal arg"7// Print the element added logP;,"Element {} is added to bin", element.name()7 })n !decoder"(// Set the default handler of the signal.class_handler(|_, args|&7'// Get the first argument as an elementlet element = args[1]70gst::Element>()7,.expect("decoder-element-removed signal arg"7 // Print the element removed logP;0"Element {} is removed from bin", element.name()7 })n !forced-preroll"la"action()"bool;"&(// Set the default handler of the signal.class_handler(|_, args|&76let decodebin = args[0].get::7let imp = decodebin.im<7*// Get the first argument as boolean valueElet value: bool = args[1].get::().expect("forced-preroll error"7%// Print the forced-preroll value logP;"forced-preroll {}", value); let curr_decoder = imp.decoder"7$let tmp_decoder = curr_decoder.deref167match tmp_decoder&: Some(decoder*:6decoder.emit_by_name::<()>("forced-preroll", &[&value]: @B;,+ @B; None})n ! vp-handle"9action()"u32;"&(// Set the default handler of the signal.class_handler(|_, args|&76let decodebin = args[0].get::7let imp = decodebin.im<7)// Get the first argument as unsigned intDlet value: u32 = args[1].get::().expect("svp-handle signal arg"7!// Print the svp-handle value logP;"svp-handle {}", value); let curr_decoder = imp.decoder"7$let tmp_decoder = curr_decoder.deref167match tmp_decoder&: Some(decoder*:2decoder.emit_by_name::<()>("svp-handle", &[&value]: @B;,+ @B; None})n !corrupted-frame"9action()(// Set the default handler of the signal.class_handler(|_, args|&76let decodebin = args[0].get::7let imp = decodebin.im<7// Print the corrupted-frameP;$"corrupted-frame signal received"); let curr_decoder = imp.decoder"7$let tmp_decoder = curr_decoder.deref167match tmp_decoder&: Some(decoder*:1decoder.emit_by_name::<()>("corrupted-frame", &[]: @B;,+ @B; None})n?#- DecodeBin$,ctivate ghost padsC{( =Dself.src.D($// And finally add the two ghostpads&p%dD obj.add_pad(&self.srcpad).unwrap (IdecodeX(ng(rcx(<rcpadAD( Cdecryptor element */ if *self.req_decryptor.lock().unwrap()1="let cur_decryptor = self.decryptorKlet tmp_decryptor = cur_decryptor.deref(); match tmp_decryptor&Some(decryptor*let _ = decryptor)&B( (decryptor@B;,+ 3 /* remove decoder(cur_decoder = self.decoder1&"Tdecoder = cur_decoder.deref(); match tmp_decoder { Some(decoder*decoder)&B( (decoderA' ғserver-side-trick"nick("Server Side Trick"Server Side Trick enabled?"OH dish-trick"nick("Dish Trick"Dish Trick Enabled?"OHdish-trick-ignore-rate"nick("Dish Trick Ignore Rate"Dish Trick Ignore Rate Enabled?"OHchange-buffer-meta"nick("Change Buffer Meta"Change Buffer Meta Enabled?"OHvdec-monopolize"nick("Vdec Monopolize"Vdec Monopolize Enabled?"OHuse-8k-external"nick("Use 8k External"Use 8k External Enabled?"OH req-decryptor"nick("Req Decryptor"Req Decryptor Enabled?"OHUInt::builder("vdec-handle"nick("Vdec Handle" Vdec Handle"OX/SvpVersion>("svp-version", DEFAULT_SVP_VERSION).nick("SVP Version" SVP Version"OHUInt64::builder("current-pts"nick("Current pts" Current pts"OHString::builder("app-type"nick("App Type"App Type"OHString::builder("drmtype"nick("DRM Type"DRM Type"OHFactory>("factory" nick("factory"factoryfactory)" write_only()n?#/ server-side-tric0 )server_side_trick = self.server_side_tricFMnew_server_side_trick_enable = value.get::().expect("server side trick"AYserver side trick switch+rver_side_tricknew_server_side_trick_enable`%0server_side_trick = new_server_side_trick_enablecurr_decoder = self.decoder& tmp_decoder = curr_decoder.deref16match tmp_decoder&7 decoder*7!// check if the property is foundP= 2prop) = decoder.find_property("server-side-trick")&: _gst::info!(CAT, imp: self, "Decoder is already created so setting property: server-side-trick!": let _ = decoder: ?.set_property("server-side-trick", new_server_side_trick_enable7@B;@B;,+ AE  dish-tric0 dish_trick = self.dish_tricF?new_dish_trick_enable = value.get::().expect("dish trick"AYdish_trick switch) dish_tricknew_dish_trick_enable`%"dish_trick = new_dish_trick_enablecurr_decoder = self.decoder& tmp_decoder = curr_decoder.deref16match tmp_decoder&7 decoder*7!// check if the property is foundP= +prop) = decoder.find_property("dish-trick")&: Xgst::info!(CAT, imp: self, "Decoder is already created so setting property: dish-trick!": @let _ = decoder.set_property("dish-trick", new_dish_trick_enable7@B;@B;,+ AE dish-trick-ignore-rate13dish_trick_ignore_rate = self.dish_trick_ignore_rat+dish_trick_ignore_rate_enable =1value.get::().expect("dish trick ignore rat;AYdish trick ignore rate switch)dish_trick_ignore_rate!new_dish_trick_ignore_rate_enable`%:dish_trick_ignore_rate = new_dish_trick_ignore_rate_enablecurr_decoder = self.decoder& tmp_decoder = curr_decoder.deref16match tmp_decoder&7 decoder*7!// check if the property is foundP= 7prop) = decoder.find_property("dish-trick-ignore-rate")&: dgst::info!(CAT, imp: self, "Decoder is already created so setting property: dish-trick-ignore-rate!": let _ = decoder.set_property(: "dish-trick-ignore-rate: !new_dish_trick_ignore_rate_enable77@B;@B;,+ AE change-buffer-meta1,change_buffer_meta = self.change_buffer_meta*change_buffer_meta_enable =/value.get::().expect("change buffer meta"AYchange buffer meta switch)change_buffer_metanew_change_buffer_meta_enable`%2change_buffer_meta = new_change_buffer_meta_enablecurr_decoder = self.decoder& tmp_decoder = curr_decoder.deref16match tmp_decoder&7 decoder*7!// check if the property is foundP= 3prop) = decoder.find_property("change-buffer-meta")&: `gst::info!(CAT, imp: self, "Decoder is already created so setting property: change-buffer-meta!": let _ = decoder: A.set_property("change-buffer-meta", new_change_buffer_meta_enable7@B;@B;,+ AE dec-monopolize1%vdec_monopolize = self.vdec_monopoliz+Cvdec_monopolize_enable = value.get::().expect("vdec monopoliz;AYvdec monopolize switch)vdec_monopolizenew_vdec_monopolize_enable`%,vdec_monopolize = new_vdec_monopolize_enablecurr_decoder = self.decoder& tmp_decoder = curr_decoder.deref16match tmp_decoder&7 decoder*7!// check if the property is foundP= 0prop) = decoder.find_property("vdec-monopolize")&: ]gst::info!(CAT, imp: self, "Decoder is already created so setting property: vdec-monopolize!": let _ =: Bdecoder.set_property("vdec-monopolize", new_vdec_monopolize_enable7@B;@B;,+ AE use-8k-external1&use_8k_external = self.use_8k_external*>use_8k_external = value.get::().expect("use 8k external"AYuse-8k-external switch)use_8k_externalnew_use_8k_external`%%use_8k_external = new_use_8k_externalA"req-decryptor1"req_decryptor = self.req_decryptor,?q_decryptor_enable = value.get::().expect("req decryptor"AYreq-decryptor switch) req_decryptornew_req_decryptor_enable`%)req_decryptor = new_req_decryptor_enable;  q_decryptor1=&gst_unifieddecode_bin_create_decryptor= vdec-handle1vdec_handle = self.vdec_handl+3vdec_handle = value.get::().expect("vdec handl;AYvdec-handle modified) vdec_handlenew_vdec_handle`%vdec_handle = new_vdec_handle"req_decryptor = self.req_decryptor"if *req_decryptor1="let cur_decryptor = self.decryptor"'let tmp_decryptor = cur_decryptor.deref16match tmp_decryptor&7Some(decryptor*: !// check if the property is found7P= .prop) = decryptor.find_property("vdec-handle")&:5decryptor.set_property("vdec-handle", new_vdec_handle: @B; @B; ,+ @B;@B svp-version1svp_version = self.svp_version*().expect("SVP Version"AYsvp-version modified. svp_versionnew_svp_version`%svp_version = new_svp_versionA "current-pts1current_pts = self.current_pts*5current_pts = value.get::().expect("Current pts"AYcurrent-pts modified) current_ptsnew_current_pts`%current_pts = new_current_pts"req_decryptor = self.req_decryptor"if *req_decryptor1="let cur_decryptor = self.decryptor"'let tmp_decryptor = cur_decryptor.deref16match tmp_decryptor&7Some(decryptor*: !// check if the property is found7P= .prop) = decryptor.find_property("current-pts")&:5decryptor.set_property("current-pts", new_current_pts: @B; @B; ,+ @B;@Bapp?$app_type = self.app|/.app_type = value.get::().expect("App T;AYapp-type modified)app_type new_app_type`%app_type = new_app_type.clone16let curr_decoder = self.decoder& tmp_decoder = curr_decoder.deref16match tmp_decoder&7 decoder*7!// check if the property is foundP= )prop) = decoder.find_property("app-type")&: Vgst::info!(CAT, imp: self, "Decoder is already created so setting property: app-type!": 5let _ = decoder.set_property("app-type", new_app_type7@B;@B;,+ AE drm@#drmtype = self.drm}.-drmtype = value.get::().expect("DRM T;AYdrmtype modified)drmtype new_drmtype`%drmtype = new_drmtype.clone16&let req_decryptor = self.req_decryptor"if *req_decryptor1="let cur_decryptor = self.decryptor"'let tmp_decryptor = cur_decryptor.deref16match tmp_decryptor&7Some(decryptor*: !// check if the property is found7P= *prop) = decryptor.find_property("drmtype")&:-decryptor.set_property("drmtype", new_drmtype: @B; @B; ,+ @B;@Bfactory1factory = self.factory*=factory = value.get::().expect("factory"Wgst::info!(CAT, imp: self,"factory modified from {:?} to {:?}", factory, new_factory); 5 new_decoder@ create(&new_factory)mdecoder-in-rsunifieddecodebin"o  '*factory = Some(new_factory); 5$'#let mut curr_decoder = self.decoder& tmp_decoder = curr_decoder.deref16match tmp_decoder&7 decoder*7Egst::info!(CAT, imp: self, "Remove existing decoder element from bin"7let _ = decoder)&7obj.remove(decoder@B;,+ AE# // Add the decoderL& &new_decoderAD' ,sync with parent new_decoderM) 2$ *curr_decoder = Some(new_decoderA")Q)aserver-side-tric0)server_side_trick = self.server_side_tricF server_side_tric ( dish-tric0dish_trick = self.dish_tricF dish_tric (dish-trick-ignore-rate13dish_trick_ignore_rate = self.dish_trick_ignore_rat#dish_trick_ignore_rate 'change-buffer-meta1,change_buffer_meta = self.change_buffer_meta"change_buffer_meta 'vdec-monopolize1%vdec_monopolize = self.vdec_monopoliz#vdec_monopolize 'use-8k-external1&use_8k_external = self.use_8k_external"use_8k_external ' req-decryptor1"req_decryptor = self.req_decryptor" req_decryptor ' vdec-handle1vdec_handle = self.vdec_handl# vdec_handle ' svp-version1svp_version = self.svp_version" svp_version ' current-pts1current_pts = self.current_pts" current_pts 'app? app_type = self.app|'app,drm@drmtype = self.drm}&drm+factory1factory = self.factory"factory & 'H+!0DecodeBin {} impl ElementImpl for UnifiedDecode+M,iDecode Bin", "decoder", "decoder the encoded data", "Veeresh KadasaniWNimpl BinImpl for UnifiedDecodeBin { // Implement the handle_message method>;5// Delegate the message handling to the parent class zA-Edecode_bin_create_decryptor_element(decodebin: &UnifiedDecodeBin) { let mut decryptor_name = "inplacedecryptor"; let mu%t cur_decryptor = decodebin.decryptor[let tmp_decryptor = cur_decryptor.deref(); match tmp_decryptor { Some(decryptorG)%decodebin, "Remove existing decryptorG' decryptor)&$ decodebin.obj().remove(decryptorIH } if *decodebin.svp_version.lock().unwrap() != SvpVersion::SvpNone && *decodebin.use_8k_external.lock().unwrap() == true { decryptor_name = "dtcp2usb"; } else { let curr_decoder = decodebin.decoder.lock().unwrap(@&Tdecoder = curr_decoder.deref(); match tmp_decoder { Some(decoder*!// check if the property is found 1let Some(_prop) = decoder.find_property("is-svp")&#decoder.set_property("is-svp", true/' 3if *decodebin.svp_version.lock().unwrap() >= SvpVersion::SvpVersion30 { if *decodebin.svp_version.lock().unwrap() < SvpVersion::SvpVersion40&*decryptor_name = "svp"; } else&'decryptor_name = "passthroughdecryptor"+( let new_decryptor@ Rdecryptor_name) .name("decryptor-in-rsunifieddecodebin") .build() i// add decryptor to unifieddecodebin decodebin.obj().add(&new_decryptor).unwrap(); new_decryptorM)'*cur_decryptor = Some(new_decryptor); P;decodeWN6decodebin", decryptor_name); } sF,)xb?I!cZ' AI6l2Nl8  y ^2- 65  x"3'w&Wp*~' PBP+E2M_q*S3,3/,cE&3BN5 ;5N5$A6 ||&7;7_-8^&: 8 9=: 9$ else&:':8 D:6& &: DEFAULT_RENDER_TYPE:} else&:&J5File:}: :;i  7? YBretN7_CoCG C {( =Do D>&_ =>E,, TE E^H  sink_name = "fakesink", J;Video =>I, JE sink_name = "waylandsink", J;File => sink_name = "filesink",KQ0`K=K .build() KD {pL!NLqx{1o1ӆ[i%EovhȤ&Uy JP̂͟:̘%FIJ\'JM6feׅ4nNc9Y#jr^OҢ瓤SK EE% 9٩ yœ}d'?al/3yg0HLO+ύ/.)P(QQPL-*_fn*G*]BRjZ>ІT֓?Ol'DH߫3yf, J'I!&7cMaxiHlxvideopHw7 P%x ̉$fn dispose(&self) { /* remove ghost pad in unifieddecodebin */ let _ = self.sinkpad.set_active(false); self.obj().removez$&@let _ = self.srcpad.set_active(false); self.obj().remove${ /* remove~*/ if *QM"TYDR+ C^~YHw~PY J~00hself-+`96;@ 6} /* remove decoder element */ let cu@>2j]L_ Ah7 self.obj()h'! E}$EXMk fn change_state( &self, transition: gst::StateChange, ) -> Result { ~Cself, "Changing state {:?}", transition); match transition~fStateChange::NullToReady => { } gst::StateChange::ReadyToPaused => { if *QM"LYf9 ^~YHw~I,linking decryptor with decoder1 @69 .clone0%decryptor.link(&h'>Vjdecryptoj:c >Vjk/=6;P; @r/99 @]49(H+Ilink decoder pads with bin padWc >Vjj@c >Vjk/=6;P;67gst::StateChange::PausedToPlaying => { } gst::StateChange::PlayingToPaused => { } _ => {} } ) self.parent_change_state(transition`|lΨM=Bx"̉c gst::Element~OptionOep*// Create the decode element. let emake("v4l2h264dec") 6f?}f let factory = None ; imp.Q0limp.10limp.!00:* ]"6R::new() to the // element so that GStreamer is aware of their existence. f'h/obj.add(&self.;i!j\# $ .set_target(Some(&self.j%,W $ $ .set_target(Some(&self.k$#self.;o60 );T7self.;GT7 m'@`;Jself.; m X@2T@Xself.;DfE.TJo*@`3F self.;9J;T7LJself.q_偬x .0] eLW=x]9 yx Cifɼ-&ɲ:U7z35IDLZzĀm8Rs;L#~V`5e:p`i3;B'mT׫ɩj'Mj]BlRxYcKt.=G"y- 7V+7v}s> 8 9ZL[Vnbݰ82?n>]WTc󵀨7qBeG@]sq_p$],KAs{׹-9,C{ ;|1ȤQNF};x{r^{7obr>q~8S p!x. nP mod imp; // The public Rust wrapper type for our element glib::wrapper! { (ObjectSubclass) @extends gst::Bin, gst::Element, gst::Object; } // Registers the type for our element, and then registers in GStreamer under // the name "rsunifiedsinkbin" for being able to instantiate it via e.g. // gst::Element; ). pub fn register(plugin: &gst::Plugin) -> Result<(), glib::BoolError> { gst::Element::register( Some(plugin),  " Rank::Primary, a static_type(), ) } ;U/x1q, μqLS*OIK)VR@zy( & N@˙P4q6H\X*2xRK@f4x  Ba%H$FYvE;n'*W \;p"@u>d;ޫ^׿n?'ޒؐRBR/2'[-eD꯸ U=Kno~t[e:=-k+l ,,)^X62a)[decode# 1DecodeX 훟x$Decrypt/Decoder,$U,`qSvpVersion")] pub enum SvpVersion { SvpNone = 0, // none svp SvpVersion10 = 10, // buffer based SvpVersion20 = 20, // address based SvpVersion25 = 25, // address/size based SvpVersion30 = 30, // gstreamer svp element based SvpVersion35 = 35, // gstreamer svp element, address/size based SvpVersion40 = 40, // gstreamer adaptivedecryptor element, address/size based[Decode Decode.4 Cdecode# 1DecodeX գExvvb"wz~Zԥ4$\: ~ x340031QK,L/Je/ų*Z\<!D@;É=3ym{-e}6ɢ$(=_/'?9!RY}l?>Z5ܲn ?t\CNm\]|]rSr[ٶ*RT0tƒ{M @!D&&w.ٗ/`ޥ),vk[}|3^D(%3SvHS|Z37=[#ԭ-پgxTn6 O%:Fj, ++6AgD $WZ{؎YAlw}wJSXע:Zy[ȱ` &FOpeKVNJ,4?taC'9jG떕5 J›5\ݭj~^_hmtJONz6C E>a pOBFDRs%#R"fKZK-&pFhXRY(J 14E0GYZ`e4Oe,$oQgF4i3ku ZmeRɽAQscb#\{!\tYVբ BFȇBH:uW NZ%sT]AcEӒ`Z'鋞֣I "kGC|w!&Uo ӑ#`*M9" `Wa>)UVz@s&lsČ~a0oTn4hg \h,m݃J5D[ICUIA#w[٠7cҶԊ99LH ',~N1 ~d:<5.p5uð9@e0'0gCE/tD ,mLGZ5 V4 i3^=wEyfJNo|$מCxΖ׻~f/wzqFf8P3"}؊3׋L@飴.?v*|J񩳻E=ynfFvUeOփܛm.r}q݇_T' f(u ? x\rȑO1Uy)Dm6:Vz-H;wbAHB >e~{X~`%r"0ޞ:Jכ,)h[}SMeQիB'E-8Ƌtuloi^2YL7Z.Ɏz Dߏ~U}|4!leyiΊ[;3orُqx NѫumæJ.JPITuiز}6<-rQ$q,'lN-"|./C[Nfs/ΊG"%,đLrp`p:\Z0!y4 |-h,4RVlUndBBPE>L 1 ,n8*T\jU,;pT *L6N}&Hmf"~]3v=y\< -CkDWb5bq3O2Mc =d2ƙ# ct"5 S%?2֯FdO*ǘk BQDߍ˿hrj.ytbZpLh7j *ء1Qo0 v- ,GԛZa$~] ϨAAhjdF}{7VA0t)ys„{*u ްLXx+, C tqjVbAbh8+0%H ZSa ̟3T]k#Ԇvv@!6;*e+WAeVz1U۶=_Y ֆ[4u TrMO L3{ qUٔ)b&Hd.ݑ0p6r!&j47>e@ \-PR2˕( iu%Ft|@8Mo1M\(+SGï3@8@/Gۊdj1ω 4wmӭqÔ`z?ȇnN _y!vr"$! /ydWvpQx* ![l1NBWy% { b_Q R5aC[xx[{ُ{0:6Nv ވęVk4p0/]k{ȅp5ƶ< x&5%NP?DH$w38qzgA.+xzϰ}UZ.梣Qmd`-UG^&G޲ӼYmyJlf1nZ$4yσ%"I ]e̷s<-PnF<>4g\,*3zDQ)0w Dj~Fd=f<ueEjm/sya ! gd|[\ ^WΎu঄Z/>xVCg瓋djzlv0Ӌ?W"d!lFƂvت0'vTd˸.G[bd7GC}z#*3h rZ.t2ZV`u\+I? LaŮ (Fsfh!-K]kxv{!@}k7?IUspO]T іQmtaT|&1]M qYXqa5zr<9{}qx R-α!!|M, s;bN29|pV%XqDeg"$5Z`s$A#R]u,SXj)BXchN)  H\O(^?v YQdGsfx= Er S\>懮 s&yP8BI0#(q e(bBPe$TɍuAinXFF |q˼ޏW[^Ix%WQ/6HuU'#DE۩#fV3K1O0^È6hQ:ؗI'_C2fl\طAS޳yu,{gK?HbZ< AsXU8ՓOCȇ/TmHOsUt ,]=2'\~{xڍS&dlêݵfoW2q̯,/Z8IW壟ۙZRgnUuTЧ[pCF`Otn;2e&Ƃ PͲ|hC-Q84\LNWJTs=R?Pr&(o͏>K*^C[`EW aY:멸݈/II~a%UqGR|iTC$]4<Ɩ 2Rlg CO"*QqG@aYR®2> YT\e:g"Wռ #1F܌õ 8:GփDwT`{jn Vڻ}*3,#I;6:ӦOKi,3E`nDꇬJGKi"E7)Ic%Y aQKLqdׇAO=%zV= ^ LܫhEހ6ɃL^@}DwzdR5z"p97B)C!"ez$m?QN*J GN @X M S4@_*~Fz(Nt/*ZU6IPc V%w Bj mLaoKl$V΁. =|8&P%bweIKi@z15D6p`РEH.~Ѡ 8?Qc5Na{M&9l@K݄wO8[%rct0Vh7-O6#^+$L[NLo&١ߦޖ=r ?#a\$!n߲u\"v暑 O%^41t{8M'!, V1T}2[vcu k-;OZlDj$|ZWCZpZƸBlmD1jH*4Rs%C)zҕ:+W[aI"{z(:˜){._W>nxI>5,s2 #^e4xBRY1er 0? Pn .qo:D݊PPCZֹN*7<\!DYcmM},b.amfe= iMG[rL# 9D'zH9+:ӏ zZ97> C 8Qf˻#_k9#!XJם= Zlc|%)z }%uzf^T/GM;4 2w_͘"?w0Xf"!q%:p}%mm(X+ϴO~[%Ѷċ$!q1+.2ZھɤV_arѝ'f/Ԟa9 o;,K=eMI1*/֨FAn2'uE=YYlɼMw^f=ӣ4;AsvW//캄zb [ di7b79 ݊x2߽# m TgUa8:W']qc Y W8?~PWIa /NXD^L% /2ۊJ+fV& dy/Ѡ5Ykl7tbm9/,Cy(f c F#K.J I8۝Py+~smS ~@+7αxRʵqDQXܧ>> DQ4`V. m;W%zQ/GUM)csy K:/*}f trMɘ!'HʴL!Xq̫#1A.jk @ri :חkYbL0n#:%X-PIޘb F6W`~2ݡ8^ ՜K4_5/?jAr9eU魚ŸT}^=+8ȿݚmmw~U%pI7^M}aux-* ̆{2'mk:_ JrMb^zh[h+!p}NHQTskNǬyAi)|4?;wxUs7AO$}ih*eZ@ҵ]Ju*%lՅzL/p97f9p:n x`Rw EW)7ZƙyaNn,p+=D)^mT*ZN )뮼#7 Q xUnF}WL% ]\v8HkrAa,ebE([X.)ra-gϜ9NiR4V cRWtnoe\[-3W =T5L' 9:gMvtш ?Έ>6Rt:9Oϫby1 =&NwDiB f8.#CT )3>FDlDj,(Nn# eT=RʔFr>JrV!zr[ƍ%eJ.*Tɲ1>lu)3ΡG y7vcd:8.MYh.]I`N$+\*s@IP/E}9V_ۗ>hldӶ/^y_{Ko.F F55<H]u u!P`]fEtΙ]4+1簨$9YL=7y0mGuO-ԙo΋AQQp D?S>f n{7/Pz/T*!yԔ@ F%kcM҃ē"SW"~ UIuO&j.©e03f\iϣ[*Z+={tl]DkX|CْZ'{a["R&Ij>cx)&AV.73Yw+mAjwʳڰ\愢me30,70vmD