From dce0ace4ef3420f870729fc88c01e114b1f732f6 Mon Sep 17 00:00:00 2001 From: f4exb Date: Mon, 3 Oct 2016 15:55:16 +0200 Subject: [PATCH] RxTx semantic move: renamed ThreadedSampleSink to ThreadedBasebandSampleSink --- CMakeLists.txt | 4 +- doc/model/SDRangelFlow.odg | Bin 16357 -> 18007 bytes .../channelrx/chanalyzer/chanalyzergui.cpp | 5 +- plugins/channelrx/chanalyzer/chanalyzergui.h | 4 +- plugins/channelrx/demodam/amdemodgui.cpp | 5 +- plugins/channelrx/demodam/amdemodgui.h | 4 +- plugins/channelrx/demodbfm/bfmdemodgui.cpp | 4 +- plugins/channelrx/demodbfm/bfmdemodgui.h | 4 +- plugins/channelrx/demoddsd/dsddemodgui.cpp | 5 +- plugins/channelrx/demoddsd/dsddemodgui.h | 4 +- plugins/channelrx/demodlora/lorademodgui.cpp | 5 +- plugins/channelrx/demodlora/lorademodgui.h | 4 +- plugins/channelrx/demodnfm/nfmdemodgui.cpp | 5 +- plugins/channelrx/demodnfm/nfmdemodgui.h | 4 +- plugins/channelrx/demodssb/ssbdemodgui.cpp | 5 +- plugins/channelrx/demodssb/ssbdemodgui.h | 4 +- plugins/channelrx/demodwfm/wfmdemodgui.cpp | 5 +- plugins/channelrx/demodwfm/wfmdemodgui.h | 4 +- plugins/channelrx/tcpsrc/tcpsrcgui.cpp | 4 +- plugins/channelrx/tcpsrc/tcpsrcgui.h | 4 +- plugins/channelrx/udpsrc/udpsrcgui.cpp | 4 +- plugins/channelrx/udpsrc/udpsrcgui.h | 4 +- sdrbase/device/deviceapi.cpp | 4 +- sdrbase/device/deviceapi.h | 6 +- sdrbase/dsp/dspcommands.h | 14 +- sdrbase/dsp/dspdeviceengine.cpp | 10 +- sdrbase/dsp/dspdeviceengine.h | 8 +- sdrbase/dsp/dspengine.h | 194 +++++++++--------- ...ink.cpp => threadedbasebandsamplesink.cpp} | 27 +-- ...plesink.h => threadedbasebandsamplesink.h} | 14 +- sdrbase/sdrbase.pro | 4 +- 31 files changed, 190 insertions(+), 182 deletions(-) rename sdrbase/dsp/{threadedsamplesink.cpp => threadedbasebandsamplesink.cpp} (70%) rename sdrbase/dsp/{threadedsamplesink.h => threadedbasebandsamplesink.h} (87%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 956d719ed..1f5d6b0dc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -120,7 +120,7 @@ set(sdrbase_SOURCES sdrbase/dsp/spectrumscopecombovis.cpp sdrbase/dsp/scopevis.cpp sdrbase/dsp/spectrumvis.cpp - sdrbase/dsp/threadedsamplesink.cpp + sdrbase/dsp/threadedbasebandsamplesink.cpp sdrbase/gui/aboutdialog.cpp sdrbase/gui/addpresetdialog.cpp @@ -209,7 +209,7 @@ set(sdrbase_HEADERS sdrbase/dsp/nullsink.h sdrbase/dsp/scopevis.h sdrbase/dsp/spectrumvis.h - sdrbase/dsp/threadedsamplesink.h + sdrbase/dsp/threadedbasebandsamplesink.h sdrbase/gui/aboutdialog.h sdrbase/gui/addpresetdialog.h diff --git a/doc/model/SDRangelFlow.odg b/doc/model/SDRangelFlow.odg index b68d5f00f6d6fe44782ee7c55529927b265b3cb3..aa6ad094f662741bb1c1d66ee8eb64a6506cdd4a 100644 GIT binary patch literal 18007 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 WUJ4BS&t-_eH`d>SGmPM$qyG=h$Rxr5 literal 16357 zcmb7r1ymhtvUMNa-GT-80KpxC6P%y{g1fs*aM$4OuECuU+}$O(yX#Npz5DK+d3R>L zzj~eSK7D%c)m`7}?^IXql9L37zyJUk0C3?HlE?t3|49n~!0*rNA;7}K!oc3e+CazJ z+T27>$KJ%slEKkZpWaHx&cu%1%G$tE-%8KH!obp=-pE$R+So+TPVS!w)x=b5bTI+o z_Xp>dP|?`ILf2Bq#N3X-{*PUHYfGbGITc1n)sc}>i;_u$iP#p7)ESplhm_Qe zgWR2*%#)eJoPo)dnbDJs&{T#&P?`IaIj^!Usf7ZAt0ae;q9zFB00H5FN9jyS=fol< zCMKq?t}dwQs_CdHrt2nW;OHr-Z*Qh%WMph$;bdv!YHw!j?4;}LvWLbb$;QU@GBQn{4f3sQIy6-}G_`-|tN*kxi}eWZcJ=f1F$)TEjtw=6jkHaV zHcm`%{#s$>_uV-=-K{v+ZPeE}ARsU>EIuM3A~Yr`COkAD(LXUEAtXNYYvT9B)SQ3@ zf1k#fv`pW)ytv@PqSWld^x}rJmd1jJh|-Ycyp-VF)Wqtvw4%h4g2I5poTReKu+r-2 z>N3CY#R>JbVGWJn3JVJgORLIj%1f*3Ys!l1a=+JAmo_&wea#z*u9%3enks7kk=Zog z(DEa)Bd(<*x#eeeOJ{Rw=Z~hY-um9z=Hd0BfZ(6?VLi=Joh=O=tv!7|lLm%zyE|J3 zCo4u~s>erir+RAVX9{N)>sNQ$Hs%H7tetsU@+1}ngx;#3+IX&FFzdCq+exCon zy$Jwl1QNm@6rC52(hxQ9c078woYMnSaKMywll>LH)YPi`Xi|Cvr^MZMg>VecokPKB zZcKNRmy-WrNaCg>z=FXjI+OR?pL-K*VP45J?U?330TmWbR%scLgNi%~KWAS=VD|wH zngqKr7yVL(p#yf0%#X}3_r=a>f?%}OgN@jV*wcMF#3?#`25hF(x- z(9Ih;THOxDIqxLYlI7FJVH{+DB>}HC8UCTd6k0L)82;Ukm)(_>l68rvSH0-PLw+;| zFves)Q8FFmqCFQz1QSv$1;b>%FLs5a>wm@p2&9t+eA?OQgKlXs82qG;zwv3Zzp?MV z$NOzisYHHlMGv<(D=Z`#MwFa@JFtcU;_)Wc-eQ`Z7jPAQq}KkPc`7FOWhI@b6UjP7 z4#f*jJD+LtB8dkJ*krs=JM=>qp91@Dv<>6z_`Z42nyvQAH}n|So6c}a zt;pbgGPD8KBF6&lyfy}IIy>JyFc!+q#S3P543bb2X#>#P@ExQWbsp3-Ac%7BLr5AR zQUNkIcc*}YvH(SoX?8xfS4w8P5*!TJj8Ri)J4`f;TC^!2F(^QLt92z0G2yZ|q))WE zoLaLBx0avo(rhdSTcH7fZ8b|e#l;`dfEw4*A9X9WPc~`*KZ8eJ^2hUK{}XR+zn}Y7 zzIojK%{MRt<(1}EJ-Ba0yhk?@j+Z~d9dBQR4u(i#FGHKt)6p*sVQ%`SW~co?(-unt zhPHe%Q6S*pJX1e{dFxPmOV2~o(9j?$MgiZbKmddj+~7If$58*p`gp8ucz+)4lF9~- z0)Xxp)+m%WZB-HpkZTDADI!3~P=P|X9xt4N?0joeOzHdZ3o#73`U`iWX7p3pVTISx zV#@PzZQDwlK^SJSSnIdVZ+psTn_|J{BYws>VR1V-)6g8(Naq~pmY$aM83`&sb&SkM z`bKqRAG}MAnog0mZcD5z21ZsATCG+=3Lx6=VUseI7;~vzgOGKWqgz(10~=M_Tpu0= zMD3MX8>R-pK1z2pJ%BJFm$Q5px4VAX;^D zsIe9xdZV=$sSh1J5P*(mrPvRavojFAK47KBV|d3G)#kVB9f)%*EyhP)7tq?sgg{t> zLc1ARez;n=+5;Y5#$v?;>8W>{?CLCk+6TQzQ9!Q~{B#?v=RHDgq}uQb54>S`6$vBb z=wl&kPlz`k1wbbNI-P(x{Z#z4NxuI`o&4@;ixlGl&EYz_{aU}7CwS&LwJwHrsA@b4 z=!oUfJ6HPFNNHThGRiJoTC#h=FX1#r8qaA6g9z}8)dGN7JcM_DZY2mN4UDbu5W+i> zzsafoYU;=>K0VU&rr$pphI;M2D?m-&VviNuzYYU@_)H%QnOk*XYo|68=1(iYoasaf zrMKmVHCXjs<+STcd`ZM(ysu~{E*E8k(t57c2}9nW3Z{z{svI30BK<%V0OUg_S5 zJDJ030Gn_J5;2vj%Jfkaaa!1&ZzdnmZ-PcU-Lk+KIqeiR2xH@*tP>lh3_UwUGNXq3 z0b5nG3pF~Tj8-;YXw|`CNY%}*Y}Ot+gx(`lUbu}|;UDzw@I+kbW*zk3e~K-@YkIrs>hM`LqGXv5-iX3bt2WyKOg?2gt>MMq6F%P%7W?T?HpyZ(1P?~;YWYRg4BEA99 z&3yJA9_T{{8aXdOQ9mSC)Si)46juD!dior3l}Au=pM#u+UXBq&Sk0WMWd} zcOp)%Y?#jpd4prKOt5{$=V2ca?w^OHy5%mzwE{87;e#GL zeWuoT#Yz(Tp9$wh<-NqV9-XPdrZXQD$bO+hMq!M}LxO8dR{|}E#ZG-G;r?}4Fs$C0 zm}`0RmVN8p6g|3hI`Q5;6CMx?p<-<_ARhvS-*Hlt3oqQJlI=y)caXh%k+f9 zcE+}}^=UvoBLK>KuqnR+oO$@EXGkh+8(g5WZlQME$Gx&LvjOEXaPv`9kZ+N|gIw*1 z{!?A)}TO|TK?+b2Y zPZV=2O-#SKMT4)^;SXr2Vyq3GvrDw(f)pF;h1)1P z9t5UJa02+qck~76__2U<;%L~(g8(5N+L=(I4GM@(xtwurA5_{iO)JDAuojojEIBY$ z5vw+kaZQ55>Pg#FnX7EUL}AT7-O(OJc)oP~S^lU}&5p*kbj9$-U@Hg*jv2u3l55&* z{;|iVExvm5{yS{vy_~-LmA-0rZ z%S!2#`72J*u&;plN*Cs#1U4Ler)D>U71UtICQp|2#VU3TJJRZ5`?yyQo*^TfF}}#! zM(_?-L#ReV;ZV8+?==%!uwK2u@K7_;*vL~u8klR(~C7Omj zBnYP+AuD96e_#b8)%%WYW@4baSfEk;(U@Nm{OtIXUXy=`4);5usNHlMz zX|Dm#nF=LMaRUb)7MdO&eG=2&mYGG^Y9W9qU(TG!e(C6R&rvR^MlK=7kGcBW>Cz%{ zZ5@b88Ude3cs{?bfcGCbpjti@FHj%Ne96W;4Ys2}(3q{m0uSn)~z| zJ;3deG<a$9+57VjS-%FZGE@#@s z0Z-!WT8ELzR%M&hOgHNn`?`;ttA^e6bq<$mUZ{CM>bu+(Pi~DjfVY~gqIotstbo29 z$k`FeyVwOxH5<+v#8FvF!iQNoa%X<%Tftn7T?p{FV#>XN59j^TkuxTrqUpFf4s-T_3^5E4YXG-U}> zg0_Y6w=|UT)5_>@a(v&-!F^hkqdgcOrj6L6VZIE0?lks8ZKzfzR>F^8jTy9>o)v-< zx0Ng}jGd*C5nyV>SD5Oz>=%A%^Ql5`d_K-G69q*fD4>)~zb&r_g#&(4(-Mh)z-P44 zfDxH* z&}sNbFXdX#c=Q^jaU)N?D$77IQBeZlNy`=dB#Ru<3Ia+K~Z%#$v%S{eIhl`b#MLzlQGxD$q^1D^>pXgd~fa`cjf z8Cb1cdiin?7m*|OnezDU%gT8A3=EBSw7d684vf35iNy)eip$>d+L7ezE7^}MZ`^7R z83odF=hew}Ffz1gRZ*F~+Mle`x;G0-pY#tn`Su<`V2}VA#koo-S(GqY5|nqniMt=h zFMFSg(Hf;e1O3GYDS8$0%?ml8O0-NW*BdD|e7zncN`u&`&QXQ0YYw`x?4A1eeW!pjo*S%9X5 zyi%es5dNny*oRzv{8 zdaS}M+G%jTHjj?O39O=oLF@{w(+vpbS(UPq&su6qYF8S|owmr-x-iKCSgt1R2^nSGfTshcI3YTPF+9^lNuBSxjEsSySqcIZ z)1^qPB|uwDIFsM1s%3g?#r08D$V^CR^hlC`fLCncgvA|$1d>CVz1}r@E=%rSXQ(w{ z-!!;EnI>AITenD%B)$?vf{TlI;+3HLYvqhorn zcM)#gImlQPY}RH+#>^*)pv*&ZxFI6**=9W#6s)O+~;DV8xXEmE)|xae2F!B z^g>tptj-;g-a5vJY72OnA}-~do657Bq&y@~4PeDp%P;4e^~2rp%YGL7Vv$snt}Wo+ zx25YZs7#A0sXvXf331x-v1Iy?3hZVvviABCzulvb^%8EZ=+|*wJOza1xD##4B{;UC zDQ5Nrak%v@=Grh>`TNPdLAPJmApJGYhx*d%s-nKc43!;{9SH0}CUEdIc|_d4EOrV2 zqR{&kS`Zcp)t5DzSeSf|3}n>A2H#f7dfAcdb{xHj1B9kPM%ngo7CJ z`z}e)5CQuI(&ZD!_Ppsroz|x2Jc$y|c8R+cE3tKGfXi~9J6P>Kx+O~_p7hN7W*dCw z#SJL$@3#ySo;icC6ad-3EW#ttFnLbhR!&Yp2dF$rF^NBCLnavfm=VKX-H#!7KR^qk-0qtqa1BO+n-c$J$149h#04p9> zmc|n7tZ;fUU0OK}BaVoJUS3}Do?l*s{4zZ2r(HB@v791X%e;HduNfm(7(XWWzNJnG zr;z>>k?%Nj46t?VzVbB@!!VMoA>mLBLPsz%7k9QQ^wt#J53hW#v(fu>JgI6M|M~NQ z*{(neE~6+VjDa=RsPSU|^_O1n@T6nc6BlC@UW;#s$8oT8>_w3Q7uPcdw?ovInpPU< z?H_Gik(KpMUuLmpXTS7lzjub1y7=aQQaE__DG^n#ZVoRbnJBdvryJ(vG=M}H_9N4w ze?4apc}pi1XO0=oe3lQIpiOcvhvXz8g$bK2xf(%v=#u-Oj)HRw57qlu9<3^0m~SUTMimLc=Wh zEMK?3X3yy%0N|gK@qY~X@9pnoypWZpp^1@$?LYGRc1#S0=2klP2DS|Uf2h~&zk{yM z|1Zkk%F6sdqwxRc3axFejBE|;?EW(n_ivDP_B!?sf5H9TgFyK=I2}Db19O8{7g^ad z=sDQh{w{UAJ}0lmh*wv?o)3WiUcK7CciP`w&hOi|*0D4&{}0aoJDjzZwS)C8*=;l+dYu%E?QY-a zi$BMD9aFF$tt?4ZBv|ZJ&(7j~&Ne?*$PUO}=g`WIeDZuEgA|v~Ht&yS?>A&lOr);WRqM&~amtrp!ZAfx zBIwj2wA7fJCxXdRs($prCpN7Y;n2EkofBbxpsV(ws>|u-HM-lO^(s@Wg6SGIw5v`^ zgK31LOh`z`%4dV?Mbwg)C~u76$W2|>HQ?Y(@{4EB2??75JRDon1Dqaat~e(vFxFj<{wXUUG<2V_H!%45m#%ttFgW4LyYly6+uk zDAVdUKm6Rc_?0HU6vra}m*bW{N_a7qwvT2BcX+moaU1tiitiy_KSmsqn|l;51&<{P zw%S|c4tChDq?t~;=i$q5Hgd|KRzQ@*oOp=5=f{o3!l%&hco50o`6(h2?cL_Wmq?|2 zt5SaRR_2X(Z7FRMS!-$L2%X<0s1tALebe2@Nh(wz!7tlhRC`koDPiWu#+%FzGPvjh zSS{=D>&&QG1btW@rYJ_7~eC+XKYmPlf$bwJJ6=Ao8DUd9OZ!C_O*w;*zm!Z(VW6 zmZj*7x{HxlJZjgyt!;0nd*C6YK){Tv?duH z-O?q`h$&>+LKBT)&iN2 zO#ILfw8W8`GQb|~jjJNPh1%9HZ%i)T;tIm-;AqVP{Nf-f7c&QUYc-zkhmrQ{*>IE2 z?jG@pl2S8VCg=Ce!}$q6zepH=r1_#k;fQQDt16*Ts&=Tpa_=T5u$`;$zEEGzS3%+| z>Bsm8q{f%_l;KgC{uVamGGnTp$w8KY%jl49sC+nKo${ham{YeB#SdiTp$_pAWKu1l zqHk32KHcb&g^ZokxfUvI&H|$kBKGqMXkR9v=r|lfit^ufAG-`$4~=KjYn3Fx3%$^) zU@zBMV?HX^LUwejKJsha&V}LC^HJ%@uGB%myns?S=GB;Kv_$Y+*#&Z zxL8{b>M0izmt$Ae1lHzFm8kuAKz=Y==Z&6x5L32jaGkX%G^=a26}o?bZePxjp_>c0 z0q^S2paHwVNV@F}42^(AXJCw6D@8ix@?)dxOePOuei`p$QiHPhk10asNy^^kXw*js>QVU_ypBZF1wpp=?Js=pM`U`p06K*PsqKahDR zeo&&A{G`}JOy{qlnszzPAsxr2oj^2idL%alRVtB9OBGLs1B_?`z48)D)~g~pl1tZU zWk=Yk&(I8Gn&=|~mbS}h#0lX-Hraw4*3C`1A>Fcc$VXtU;CMm*)9&_exCW5aTp^GqDc3S( z!?h){ybG}W>I26P=TVYz_`U34hBHvJLfM1I_P!Id@FulO_>H6^X3eMk+c&!HO&3G)jy9(*O6A~!9|oFb|NtUU4pTsF69 z@wa2uPnlC)O}v%)qMm3Xs|WJo_>+hbUH4S^O_2dhjZtrY9npOhR5MRk-y$i3c)-SRQ{$6jUn!dbF zVCj2f3US(S}~Or+-nsp!+3&ee`IJJq&TGjc#FRdtYUooO=;tJ)?FM5hvAr8G6~; z)?v#LSm}1ll+VA7mmgb1YEZNPGF7}WiLdz9YX{70UE>z7#uWPfN-5%U0k0u0^3JL4 zudEvA?Av)v*UmmB*!57Gj@0wsF5(-e&IKCttb#BkzVKVu8AQ$U zVbW&Ht`}qGVgI{D*7G2^Y;|C++LR1m>P$r%K@Z=BkAEO~Jh$I$j^*~2hDmH*g^#UQ zEV?l$Y&l}@Z1KIv+4qLVcOpl2jU$A)Ciq%kJk{M8Df)(Kn!|l!`vpoei7yXN5**-% z@<$`Mq-MU6Rd{USKzf94yK_P8*fSC4Y=Cv?UeXlpUkU89Ntp-gQ9Il6*fV@nZd2Rc z=53|OC+gcMAW4>2P(C;NdEj~WL`UwpnnKZP3w~0-;b!)Ui|mrdsJMKz_jtU90osq- zihM@vtd-gQjt7aZbG;=SH02=I=jgbn#U8!dW!G^96%m}KV+TmPA`@{J&z5{m`H~zT zKv2hPax^rfLIy79r+<_YX>A?HMB%S)#%YM)wj-@@XwZMp-~yJK3F;HwZDk%Cf&%<`H%^ptl7Yd)6aeK3s4Q@%wEYHnuS(~1-)I$!w zVR)xR-WoK=KACrtlAV9EBaWP@9_mJ#O2O5ErA4(dL5+h}3c>y7JNblz^tncWJT%v{ zfE$lYE!Vg?1*$oPWLG*f+C)8=?oG_$*(SN`{LMk^rCf}G0@}Oz{GHyUR-DCkViAv> z44$dBJKN?kQM_bB9kkVmXv;7$7Ni&xoKdS@e)nf(yI!rfr{xrVHh6GXW@(?Rn4U%~ zG8?1}(p>^0c7uZ>=d>R7;0*tH=|ct+$5?3g{*a#LFYG*5(l!<6ALIFjeVeg=x}T(4 zUSy@cDI1$@$Mf9rNj%||etLL4@XmX{DT7>y+v>Y`3c2^a?beQt9@ZjNm{%hK!@0Wy zbJEi4>cNe$?8F^}OFBFC=L1-1)@9Q)QOIeQ#Id026a)0!oc;($2|KUdN1S*3dCsjZ zIeXg1k4siI4sjC*;%hcZ+DLdoC!~F|hJ30`Y<93ioj+uu2h~2%g}@~tVPi6FJih*Mx>7YP?pzyOy;-iX0@+?9!q7#@kwuW9! zUqbYfU)2o39#5JKw}cLtKG-%wSa2Qe-V?T7CpQ6>R0VOOf6>W-0?Jw2nl`k)6pplo zjDX@z1Z~=En?ro*hDm=Qnn080IE%itr=oo`s_0rHCOIX7+MS*yM5ly5%Ys_@eKc2~ z1e!(CS0djZ6eW1&^}81nTaI(qQWCLyrJTB5+K_6Z=kzYOk2XIRShmkQiq;W!!rk2)g--@v-s#s<@S(&DSNdgf0r`+;P}V~VWiT*eZSeOP2LfFDE@)< zt!1y*sfxsP0+gnU4G&s?;pIYV4*-$a#G-azB~S%-0i<^J$aV?dQ*;$T35`GvhokcK zY_5!FJb9HN>-CHyBr04-ZP~kwq_#;@$4Ld5HEklaNuK9AuZ**Mz4Y!*vgbtFw?#ZE z!bO+*GPO`JApWDTd=X*poDD!3FV*fBK{pU1(+)eY8<2bnt27^RcQf^AT|DD z2pZwgER+nF2H?75$5{Cn}(D^4=J-#anH)NgPE?+GA8I-6fqy?tO- zjddm*&!{|`*Bpl3iPS??h{7|K(13qVtOaPs70k?>AKzJSDJKTz3P8UCL z&T{8(Ynjn?6ao%*GLE{H9257}k8=s*P0xv2)p54x*)8b?YAb_vMA_#y_$LFjdd=gb z+x}L@COM4?aY9Hl*R*rzEQDWF=nr9OGt^P(Q7Wn1heoFiFzHzALiNG3J&1dC4!PgO zD9I>P0`X=LFU02v-^IH0R1z->^%n2tx37+ox zRVDn3hkq~faX+E$jUvck(Ozt+9@F9c=3PB;q*_@^MaXb_#*oEv-T4GY$5& z_?*G;sDPS&xH&st_F}OM2US_anT8?H_Z_otr{4Fi3T@~vysr+>-WTpHRY*QS8B)%* zPp@;#o16tH(z3Wp!Fn00)_^5mu=si z^^963myI3mn#|0qMlRaG{5s>ye9QPiGE?!{Ag#N=%&B6r1oU}S3nNraN7(@dzGN(s zGH5qIbh^RGtS{wUe!j1~3!!Igv|2)My0d=c<>`i>)o_Uj-&W);)|}WgLCsWff+o~$ z;IEalZS+mz48nLPiJC6$Gv3aqEMVx@^@ILPjs`Jhp$C}YWBrsR!aTQ{6$=9 zprYW#qbR2~4>5M{L&}UT;fxpu+_4bJ(!mJ566WKty;cum45wLVJ_Pz0Na;_*AM zRgjZS7?v&@@A6U9V-+2pmX4%K*spjBTe&-{VUp5$9PAEDw?CwP?*i@*4*TOPJt=-f zL={*h48;Ln2U9+(A6t=Y|1QB}UXUnQB(RU!6z4t`>b1SQrM0C z5MJ}A%eXbfMCpfA_{(e%2=CHx=p(ZVxf64CeWJvPg?k0WuTi)dJEI}%H5$@x8ws^< z6;DA}eY`LkI2Ko(MugCB_X0FprO_98|Ezj*FYHtWZ40#H^{u0aJMPa zFqlc|Drw*p}iRtIAD*GlBy9dP#$WKYr3aT&%#4($8*M;y^s17=Z& zG=;Gj;YqY-l1H+t2&>g8jub^?O=qkVV(MmigA8!-M#<8UI>5~w9T)b*tI*bo^kGQ8 zyzr21P+Z>|EICMh=|Ln&slz31--p@7N3{|aXm&r7gYYZH=6@BPaFY`0i@VEnL;PU; z9=^S>j2dNz4D0QR(LrFi9-Y{n^StSyN~3)MbAh|I_mfWxRJVAfQuUVi@#Ez9TYk%z z%WBLIsL4KP@k(#)ayE z-6WN-($OX)1M@~ZD7 zb*aT3Z3}f_{iK0e>p({zTGzUeoQ%_LZd$S$jIlm6pOFwBzIW=AO-u3(IVg0WnsT*&4XD5TiB(vsDeevz|1 z3LN4wcEemw9aBHIb5utexarF#2APt!0t2Sc{+Ao-?v(8PCSJ1(S@; zZr`+PiMoP;Mao2AvENCfE>@NdYJi9a;hVc`2Re%Y9kKA!4E#Z#sl^t~w4=U7YgB}} zdZXL3DKBCyKek2t^5^`)LkLdo?|#E0Gq@VQ1tMyJpUjJ$4o0g&t+5iyI2e;mtA^i) zg^N~pwK>EQqo98a(N_67(pMH)$h?lkzrVWPyVO&qXn?T%U4t02>U19WBAPxnHKH2+ z(5nqUd~c(<hN9BHPai^hZ_raD$g#oyg+atJ9gDZ6?DGMDvE8jzZ>9BHd@Ws)4nW|0b^1^1PEb9j zs&vhrPX_E=x~v_uwNnMO6`c!t-|{=Fm=@0%w`=oJ$F9oX%}%gX?#63r^gu~Lqv0j~ z5ENn)#1l+iS5N3B#@Rq6roj;NoDfySulfSq%)(c`a1=Sr^q1c+eL>E6zjU>?W%I{H^b4rFa}2N zIkA0-;Dnp){DPciu)}`Z1$J;qf)ZpZNcjDkcXPvEMGZs5yUQ7G4tb;l%BqRXy*8Tl zo81DwY*dEKTriGMsM##t%B?e*ENNHw>dJA(x9sLt;7j&J#kH(#gPqjtP}^U5;tked zB^xx-KP)&XU@q{S8L$_qT~pJ_@E02&RB_lp+nAHp=Tc_$(mN}r_12-_fQ4dch12K2 zS;RYYJg`s@^piB&M8B=V(br(y3lc#1VdQj(5GMC25C>9T`-{&xB-7rtoc;oyADbxm zw2UTJDfOr%S35MXOZ_Z)+|1 zkd_rS@&skw2ZqP0R)J41;Oc@BDd}A~pM!aCBH-#%nGn_Fr~pmc(x5=%?#;75Jl) z2_6SkK|YT{I*N-b@)e3lv*qo^TCy{uA&PLdJMPXhz6)Ef*2-2QWSJGVoBAGVCM`7L z1N&f|yX0l)4F=PxAayg`6H$?@cT(XTrY(!3kk6U`oun%z1$oAYs^>PCqYJVMn*`o30=L%yizj&Mo;78ONRv5Kq{ z9?MYptq=7fIGc#yj#&2dHOkju3^AO1yd7?Pk(Gm<&W0G9rk2zSyOp<_n0$-qa$HZti{im2cHAHi{O z$;K0l4R9p>^w~U^I=ZQk(CvI$d6P`vBy$0;kYqxKoiR7{k9!t{AXYz(moy#zxMP7@Utw+%1I>#na+mV%*AqZRU~j=ex4S388P# z&%)n?5keD{@{Xve`Ns_W2NGqSHW8tW5YN41zdmH|~^*l86%e z_uOweuEleWguJ@!X^CbXMq;z;c~f9-KLq)IV@885C%d|yz9iVK-K~mL>CVJm_pc}`qWndlWwA*2Z;&O=#a&@Pw-dQk8>i6-rX0$MTidZ!2p4(2R!}F458`-W2gQUV|d6! z>nHqTMrQeA=YGm@1^NnBAzivl#eHeZ9ObCvW7)hkbYmDAQbKSh`q4cR+56r zox0?ONEm;mKHHl$TbF>Sm2hKm*O>Q}n-_oK%3pG5tBYU;_gVW_-FrtbV_C#@9y<>P zYj-=Spr4u&d$g^vHHux_72)_hs|=bW`}9`J5LE!&Zj95oA4g!;iYZZuRt*ETe;YVKVuj zjcYBWyNNak-wbz-RUbGs=doKfudpA@=djMCY`N4E6aX}n|EIs1*OpH}T14@~I|&(41`8ca6GH>Le~2f_Ub{-Vh)_gs zIQ_d<#tfB+xz!Z+VJE=lcpRg&1sH|TjzUSvZIl{A7LN_Jw_ge(jjxT2O3;7m^VA(C z@mImgJ&df4Ro`@}KmE9FmfpZfCPeEulaJ$-s;@KP%)X>aB9rG7kEyu?RbFs$3&d#c zY<2I=32`b`u8lqp!}M42 z(tq*%F*3h#e<+ZC%a{JN^S|NwH)5v$G;sfXaT0I-x6A)3W%|F~?q)z|rvA@>mev6&{wCh*0Kc!E9IOPvd|24G!UA_C$G)e!dmiMo~zfP9F wBkw #include #include + +#include "../../../sdrbase/dsp/threadedbasebandsamplesink.h" #include "ui_chanalyzergui.h" -#include "dsp/threadedsamplesink.h" #include "dsp/spectrumscopecombovis.h" #include "dsp/spectrumvis.h" #include "dsp/scopevis.h" @@ -327,7 +328,7 @@ ChannelAnalyzerGUI::ChannelAnalyzerGUI(PluginAPI* pluginAPI, DeviceAPI *deviceAP m_spectrumScopeComboVis = new SpectrumScopeComboVis(m_spectrumVis, m_scopeVis); m_channelAnalyzer = new ChannelAnalyzer(m_spectrumScopeComboVis); m_channelizer = new DownChannelizer(m_channelAnalyzer); - m_threadedChannelizer = new ThreadedSampleSink(m_channelizer, this); + m_threadedChannelizer = new ThreadedBasebandSampleSink(m_channelizer, this); connect(m_channelizer, SIGNAL(inputSampleRateChanged()), this, SLOT(channelSampleRateChanged())); m_deviceAPI->addThreadedSink(m_threadedChannelizer); diff --git a/plugins/channelrx/chanalyzer/chanalyzergui.h b/plugins/channelrx/chanalyzer/chanalyzergui.h index ba8db688a..b94671793 100644 --- a/plugins/channelrx/chanalyzer/chanalyzergui.h +++ b/plugins/channelrx/chanalyzer/chanalyzergui.h @@ -25,7 +25,7 @@ class PluginAPI; class DeviceAPI; -class ThreadedSampleSink; +class ThreadedBasebandSampleSink; class DownChannelizer; class ChannelAnalyzer; class SpectrumScopeComboVis; @@ -80,7 +80,7 @@ private: int m_spanLog2; MovingAverage m_channelPowerDbAvg; - ThreadedSampleSink* m_threadedChannelizer; + ThreadedBasebandSampleSink* m_threadedChannelizer; DownChannelizer* m_channelizer; ChannelAnalyzer* m_channelAnalyzer; SpectrumScopeComboVis* m_spectrumScopeComboVis; diff --git a/plugins/channelrx/demodam/amdemodgui.cpp b/plugins/channelrx/demodam/amdemodgui.cpp index 5a166f705..62ac7bf1b 100644 --- a/plugins/channelrx/demodam/amdemodgui.cpp +++ b/plugins/channelrx/demodam/amdemodgui.cpp @@ -3,8 +3,9 @@ #include #include #include + +#include "../../../sdrbase/dsp/threadedbasebandsamplesink.h" #include "ui_amdemodgui.h" -#include "dsp/threadedsamplesink.h" #include "plugin/pluginapi.h" #include "device/deviceapi.h" #include "util/simpleserializer.h" @@ -221,7 +222,7 @@ AMDemodGUI::AMDemodGUI(PluginAPI* pluginAPI, DeviceAPI *deviceAPI, QWidget* pare m_amDemod = new AMDemod(); m_channelizer = new DownChannelizer(m_amDemod); - m_threadedChannelizer = new ThreadedSampleSink(m_channelizer, this); + m_threadedChannelizer = new ThreadedBasebandSampleSink(m_channelizer, this); //m_pluginAPI->addThreadedSink(m_threadedChannelizer); m_deviceAPI->addThreadedSink(m_threadedChannelizer); diff --git a/plugins/channelrx/demodam/amdemodgui.h b/plugins/channelrx/demodam/amdemodgui.h index 37fe5c2a6..99facaa59 100644 --- a/plugins/channelrx/demodam/amdemodgui.h +++ b/plugins/channelrx/demodam/amdemodgui.h @@ -9,7 +9,7 @@ class PluginAPI; class DeviceAPI; -class ThreadedSampleSink; +class ThreadedBasebandSampleSink; class DownChannelizer; class AMDemod; @@ -58,7 +58,7 @@ private: bool m_basicSettingsShown; bool m_doApplySettings; - ThreadedSampleSink* m_threadedChannelizer; + ThreadedBasebandSampleSink* m_threadedChannelizer; DownChannelizer* m_channelizer; AMDemod* m_amDemod; MovingAverage m_channelPowerDbAvg; diff --git a/plugins/channelrx/demodbfm/bfmdemodgui.cpp b/plugins/channelrx/demodbfm/bfmdemodgui.cpp index 0c1556e98..a84d7d0ea 100644 --- a/plugins/channelrx/demodbfm/bfmdemodgui.cpp +++ b/plugins/channelrx/demodbfm/bfmdemodgui.cpp @@ -26,7 +26,7 @@ #include #include -#include "dsp/threadedsamplesink.h" +#include "../../../sdrbase/dsp/threadedbasebandsamplesink.h" #include "dsp/dspengine.h" #include "dsp/spectrumvis.h" #include "gui/glspectrum.h" @@ -382,7 +382,7 @@ BFMDemodGUI::BFMDemodGUI(PluginAPI* pluginAPI, DeviceAPI *deviceAPI, QWidget* pa m_spectrumVis = new SpectrumVis(ui->glSpectrum); m_bfmDemod = new BFMDemod(m_spectrumVis, &m_rdsParser); m_channelizer = new DownChannelizer(m_bfmDemod); - m_threadedChannelizer = new ThreadedSampleSink(m_channelizer, this); + m_threadedChannelizer = new ThreadedBasebandSampleSink(m_channelizer, this); connect(m_channelizer, SIGNAL(inputSampleRateChanged()), this, SLOT(channelSampleRateChanged())); m_deviceAPI->addThreadedSink(m_threadedChannelizer); diff --git a/plugins/channelrx/demodbfm/bfmdemodgui.h b/plugins/channelrx/demodbfm/bfmdemodgui.h index 6c079bbcd..892868efe 100644 --- a/plugins/channelrx/demodbfm/bfmdemodgui.h +++ b/plugins/channelrx/demodbfm/bfmdemodgui.h @@ -28,7 +28,7 @@ class PluginAPI; class DeviceAPI; -class ThreadedSampleSink; +class ThreadedBasebandSampleSink; class DownChannelizer; class SpectrumVis; class BFMDemod; @@ -88,7 +88,7 @@ private: bool m_doApplySettings; int m_rdsTimerCount; - ThreadedSampleSink* m_threadedChannelizer; + ThreadedBasebandSampleSink* m_threadedChannelizer; DownChannelizer* m_channelizer; SpectrumVis* m_spectrumVis; RDSParser m_rdsParser; diff --git a/plugins/channelrx/demoddsd/dsddemodgui.cpp b/plugins/channelrx/demoddsd/dsddemodgui.cpp index f3207bb22..bc9643493 100644 --- a/plugins/channelrx/demoddsd/dsddemodgui.cpp +++ b/plugins/channelrx/demoddsd/dsddemodgui.cpp @@ -21,8 +21,9 @@ #include #include #include + +#include "../../../sdrbase/dsp/threadedbasebandsamplesink.h" #include "ui_dsddemodgui.h" -#include "dsp/threadedsamplesink.h" #include "dsp/scopevis.h" #include "gui/glscope.h" #include "plugin/pluginapi.h" @@ -371,7 +372,7 @@ DSDDemodGUI::DSDDemodGUI(PluginAPI* pluginAPI, DeviceAPI *deviceAPI, QWidget* pa ui->deltaFrequency->setColorMapper(ColorMapper(ColorMapper::ReverseGold)); m_channelizer = new DownChannelizer(m_dsdDemod); - m_threadedChannelizer = new ThreadedSampleSink(m_channelizer, this); + m_threadedChannelizer = new ThreadedBasebandSampleSink(m_channelizer, this); m_deviceAPI->addThreadedSink(m_threadedChannelizer); //m_channelMarker = new ChannelMarker(this); diff --git a/plugins/channelrx/demoddsd/dsddemodgui.h b/plugins/channelrx/demoddsd/dsddemodgui.h index 193ac03ca..20c533c0b 100644 --- a/plugins/channelrx/demoddsd/dsddemodgui.h +++ b/plugins/channelrx/demoddsd/dsddemodgui.h @@ -27,7 +27,7 @@ class PluginAPI; class DeviceAPI; -class ThreadedSampleSink; +class ThreadedBasebandSampleSink; class DownChannelizer; class ScopeVis; class DSDDemod; @@ -97,7 +97,7 @@ private: char m_formatStatusText[82+1]; //!< Fixed signal format dependent status text SignalFormat m_signalFormat; - ThreadedSampleSink* m_threadedChannelizer; + ThreadedBasebandSampleSink* m_threadedChannelizer; DownChannelizer* m_channelizer; ScopeVis* m_scopeVis; diff --git a/plugins/channelrx/demodlora/lorademodgui.cpp b/plugins/channelrx/demodlora/lorademodgui.cpp index b40addf69..3feb0a68b 100644 --- a/plugins/channelrx/demodlora/lorademodgui.cpp +++ b/plugins/channelrx/demodlora/lorademodgui.cpp @@ -4,9 +4,10 @@ #include #include #include + +#include "../../../sdrbase/dsp/threadedbasebandsamplesink.h" #include "ui_lorademodgui.h" #include "ui_lorademodgui.h" -#include "dsp/threadedsamplesink.h" #include "dsp/spectrumvis.h" #include "gui/glspectrum.h" #include "plugin/pluginapi.h" @@ -167,7 +168,7 @@ LoRaDemodGUI::LoRaDemodGUI(PluginAPI* pluginAPI, DeviceAPI *deviceAPI, QWidget* m_spectrumVis = new SpectrumVis(ui->glSpectrum); m_LoRaDemod = new LoRaDemod(m_spectrumVis); m_channelizer = new DownChannelizer(m_LoRaDemod); - m_threadedChannelizer = new ThreadedSampleSink(m_channelizer); + m_threadedChannelizer = new ThreadedBasebandSampleSink(m_channelizer); m_deviceAPI->addThreadedSink(m_threadedChannelizer); ui->glSpectrum->setCenterFrequency(16000); diff --git a/plugins/channelrx/demodlora/lorademodgui.h b/plugins/channelrx/demodlora/lorademodgui.h index 7e69721f0..6026b203d 100644 --- a/plugins/channelrx/demodlora/lorademodgui.h +++ b/plugins/channelrx/demodlora/lorademodgui.h @@ -9,7 +9,7 @@ class PluginAPI; class DeviceAPI; -class ThreadedSampleSink; +class ThreadedBasebandSampleSink; class DownChannelizer; class LoRaDemod; class SpectrumVis; @@ -53,7 +53,7 @@ private: bool m_basicSettingsShown; bool m_doApplySettings; - ThreadedSampleSink* m_threadedChannelizer; + ThreadedBasebandSampleSink* m_threadedChannelizer; DownChannelizer* m_channelizer; LoRaDemod* m_LoRaDemod; SpectrumVis* m_spectrumVis; diff --git a/plugins/channelrx/demodnfm/nfmdemodgui.cpp b/plugins/channelrx/demodnfm/nfmdemodgui.cpp index e045b746e..5050f5646 100644 --- a/plugins/channelrx/demodnfm/nfmdemodgui.cpp +++ b/plugins/channelrx/demodnfm/nfmdemodgui.cpp @@ -4,8 +4,9 @@ #include #include #include + +#include "../../../sdrbase/dsp/threadedbasebandsamplesink.h" #include "ui_nfmdemodgui.h" -#include "dsp/threadedsamplesink.h" #include "dsp/nullsink.h" #include "plugin/pluginapi.h" #include "device/deviceapi.h" @@ -293,7 +294,7 @@ NFMDemodGUI::NFMDemodGUI(PluginAPI* pluginAPI, DeviceAPI *deviceAPI, QWidget* pa ui->deltaFrequency->setColorMapper(ColorMapper(ColorMapper::ReverseGold)); m_channelizer = new DownChannelizer(m_nfmDemod); - m_threadedChannelizer = new ThreadedSampleSink(m_channelizer, this); + m_threadedChannelizer = new ThreadedBasebandSampleSink(m_channelizer, this); m_deviceAPI->addThreadedSink(m_threadedChannelizer); //m_channelMarker = new ChannelMarker(this); diff --git a/plugins/channelrx/demodnfm/nfmdemodgui.h b/plugins/channelrx/demodnfm/nfmdemodgui.h index 43df1d9a0..c7254191c 100644 --- a/plugins/channelrx/demodnfm/nfmdemodgui.h +++ b/plugins/channelrx/demodnfm/nfmdemodgui.h @@ -10,7 +10,7 @@ class PluginAPI; class DeviceAPI; -class ThreadedSampleSink; +class ThreadedBasebandSampleSink; class DownChannelizer; class NFMDemod; @@ -63,7 +63,7 @@ private: bool m_basicSettingsShown; bool m_doApplySettings; - ThreadedSampleSink* m_threadedChannelizer; + ThreadedBasebandSampleSink* m_threadedChannelizer; DownChannelizer* m_channelizer; NFMDemod* m_nfmDemod; bool m_ctcssOn; diff --git a/plugins/channelrx/demodssb/ssbdemodgui.cpp b/plugins/channelrx/demodssb/ssbdemodgui.cpp index d573a045b..b8326e80e 100644 --- a/plugins/channelrx/demodssb/ssbdemodgui.cpp +++ b/plugins/channelrx/demodssb/ssbdemodgui.cpp @@ -4,9 +4,10 @@ #include #include #include + +#include "../../../sdrbase/dsp/threadedbasebandsamplesink.h" #include "ui_ssbdemodgui.h" #include "ui_ssbdemodgui.h" -#include "dsp/threadedsamplesink.h" #include "dsp/spectrumvis.h" #include "gui/glspectrum.h" #include "plugin/pluginapi.h" @@ -342,7 +343,7 @@ SSBDemodGUI::SSBDemodGUI(PluginAPI* pluginAPI, DeviceAPI *deviceAPI, QWidget* pa m_spectrumVis = new SpectrumVis(ui->glSpectrum); m_ssbDemod = new SSBDemod(m_spectrumVis); m_channelizer = new DownChannelizer(m_ssbDemod); - m_threadedChannelizer = new ThreadedSampleSink(m_channelizer, this); + m_threadedChannelizer = new ThreadedBasebandSampleSink(m_channelizer, this); m_deviceAPI->addThreadedSink(m_threadedChannelizer); ui->deltaFrequency->setColorMapper(ColorMapper(ColorMapper::ReverseGold)); diff --git a/plugins/channelrx/demodssb/ssbdemodgui.h b/plugins/channelrx/demodssb/ssbdemodgui.h index 6b649379a..227ad8a48 100644 --- a/plugins/channelrx/demodssb/ssbdemodgui.h +++ b/plugins/channelrx/demodssb/ssbdemodgui.h @@ -10,7 +10,7 @@ class PluginAPI; class DeviceAPI; class AudioFifo; -class ThreadedSampleSink; +class ThreadedBasebandSampleSink; class DownChannelizer; class SSBDemod; class SpectrumVis; @@ -70,7 +70,7 @@ private: bool m_audioMute; MovingAverage m_channelPowerDbAvg; - ThreadedSampleSink* m_threadedChannelizer; + ThreadedBasebandSampleSink* m_threadedChannelizer; DownChannelizer* m_channelizer; SSBDemod* m_ssbDemod; SpectrumVis* m_spectrumVis; diff --git a/plugins/channelrx/demodwfm/wfmdemodgui.cpp b/plugins/channelrx/demodwfm/wfmdemodgui.cpp index 257d7902f..d143ace95 100644 --- a/plugins/channelrx/demodwfm/wfmdemodgui.cpp +++ b/plugins/channelrx/demodwfm/wfmdemodgui.cpp @@ -4,8 +4,9 @@ #include #include #include + +#include "../../../sdrbase/dsp/threadedbasebandsamplesink.h" #include "ui_wfmdemodgui.h" -#include "dsp/threadedsamplesink.h" #include "dsp/dspengine.h" #include "plugin/pluginapi.h" #include "device/deviceapi.h" @@ -236,7 +237,7 @@ WFMDemodGUI::WFMDemodGUI(PluginAPI* pluginAPI, DeviceAPI *deviceAPI, QWidget* pa m_wfmDemod = new WFMDemod(0); m_channelizer = new DownChannelizer(m_wfmDemod); - m_threadedChannelizer = new ThreadedSampleSink(m_channelizer, this); + m_threadedChannelizer = new ThreadedBasebandSampleSink(m_channelizer, this); m_deviceAPI->addThreadedSink(m_threadedChannelizer); connect(&m_pluginAPI->getMainWindow()->getMasterTimer(), SIGNAL(timeout()), this, SLOT(tick())); diff --git a/plugins/channelrx/demodwfm/wfmdemodgui.h b/plugins/channelrx/demodwfm/wfmdemodgui.h index 66396fafb..96cf76345 100644 --- a/plugins/channelrx/demodwfm/wfmdemodgui.h +++ b/plugins/channelrx/demodwfm/wfmdemodgui.h @@ -9,7 +9,7 @@ class PluginAPI; class DeviceAPI; -class ThreadedSampleSink; +class ThreadedBasebandSampleSink; class DownChannelizer; class WFMDemod; @@ -57,7 +57,7 @@ private: bool m_basicSettingsShown; bool m_doApplySettings; - ThreadedSampleSink* m_threadedChannelizer; + ThreadedBasebandSampleSink* m_threadedChannelizer; DownChannelizer* m_channelizer; WFMDemod* m_wfmDemod; MovingAverage m_channelPowerDbAvg; diff --git a/plugins/channelrx/tcpsrc/tcpsrcgui.cpp b/plugins/channelrx/tcpsrc/tcpsrcgui.cpp index d5dab99ae..f3f05118d 100644 --- a/plugins/channelrx/tcpsrc/tcpsrcgui.cpp +++ b/plugins/channelrx/tcpsrc/tcpsrcgui.cpp @@ -1,9 +1,9 @@ #include "../../channelrx/tcpsrc/tcpsrcgui.h" #include +#include "../../../sdrbase/dsp/threadedbasebandsamplesink.h" #include "plugin/pluginapi.h" #include "device/deviceapi.h" -#include "dsp/threadedsamplesink.h" #include "dsp/spectrumvis.h" #include "dsp/dspengine.h" #include "util/simpleserializer.h" @@ -203,7 +203,7 @@ TCPSrcGUI::TCPSrcGUI(PluginAPI* pluginAPI, DeviceAPI *deviceAPI, QWidget* parent m_spectrumVis = new SpectrumVis(ui->glSpectrum); m_tcpSrc = new TCPSrc(m_pluginAPI->getMainWindowMessageQueue(), this, m_spectrumVis); m_channelizer = new DownChannelizer(m_tcpSrc); - m_threadedChannelizer = new ThreadedSampleSink(m_channelizer, this); + m_threadedChannelizer = new ThreadedBasebandSampleSink(m_channelizer, this); m_deviceAPI->addThreadedSink(m_threadedChannelizer); ui->deltaFrequency->setColorMapper(ColorMapper(ColorMapper::ReverseGold)); diff --git a/plugins/channelrx/tcpsrc/tcpsrcgui.h b/plugins/channelrx/tcpsrc/tcpsrcgui.h index 6da22ac3e..4a313ebbf 100644 --- a/plugins/channelrx/tcpsrc/tcpsrcgui.h +++ b/plugins/channelrx/tcpsrc/tcpsrcgui.h @@ -11,7 +11,7 @@ class PluginAPI; class DeviceAPI; -class ThreadedSampleSink; +class ThreadedBasebandSampleSink; class DownChannelizer; class TCPSrc; class SpectrumVis; @@ -72,7 +72,7 @@ private: bool m_doApplySettings; // RF path - ThreadedSampleSink* m_threadedChannelizer; + ThreadedBasebandSampleSink* m_threadedChannelizer; DownChannelizer* m_channelizer; SpectrumVis* m_spectrumVis; diff --git a/plugins/channelrx/udpsrc/udpsrcgui.cpp b/plugins/channelrx/udpsrc/udpsrcgui.cpp index adbe21037..69336ffbe 100644 --- a/plugins/channelrx/udpsrc/udpsrcgui.cpp +++ b/plugins/channelrx/udpsrc/udpsrcgui.cpp @@ -18,9 +18,9 @@ #include "../../channelrx/udpsrc/udpsrcgui.h" #include +#include "../../../sdrbase/dsp/threadedbasebandsamplesink.h" #include "plugin/pluginapi.h" #include "device/deviceapi.h" -#include "dsp/threadedsamplesink.h" #include "dsp/spectrumvis.h" #include "dsp/dspengine.h" #include "util/simpleserializer.h" @@ -241,7 +241,7 @@ UDPSrcGUI::UDPSrcGUI(PluginAPI* pluginAPI, DeviceAPI *deviceAPI, QWidget* parent m_spectrumVis = new SpectrumVis(ui->glSpectrum); m_udpSrc = new UDPSrc(m_pluginAPI->getMainWindowMessageQueue(), this, m_spectrumVis); m_channelizer = new DownChannelizer(m_udpSrc); - m_threadedChannelizer = new ThreadedSampleSink(m_channelizer, this); + m_threadedChannelizer = new ThreadedBasebandSampleSink(m_channelizer, this); m_deviceAPI->addThreadedSink(m_threadedChannelizer); ui->fmDeviation->setEnabled(false); diff --git a/plugins/channelrx/udpsrc/udpsrcgui.h b/plugins/channelrx/udpsrc/udpsrcgui.h index edb99df72..e1b851f80 100644 --- a/plugins/channelrx/udpsrc/udpsrcgui.h +++ b/plugins/channelrx/udpsrc/udpsrcgui.h @@ -28,7 +28,7 @@ class PluginAPI; class DeviceAPI; -class ThreadedSampleSink; +class ThreadedBasebandSampleSink; class DownChannelizer; class UDPSrc; class SpectrumVis; @@ -101,7 +101,7 @@ private: bool m_doApplySettings; // RF path - ThreadedSampleSink* m_threadedChannelizer; + ThreadedBasebandSampleSink* m_threadedChannelizer; DownChannelizer* m_channelizer; SpectrumVis* m_spectrumVis; diff --git a/sdrbase/device/deviceapi.cpp b/sdrbase/device/deviceapi.cpp index 94d65cf75..ca9004689 100644 --- a/sdrbase/device/deviceapi.cpp +++ b/sdrbase/device/deviceapi.cpp @@ -52,12 +52,12 @@ void DeviceAPI::removeSink(BasebandSampleSink* sink) m_deviceEngine->removeSink(sink); } -void DeviceAPI::addThreadedSink(ThreadedSampleSink* sink) +void DeviceAPI::addThreadedSink(ThreadedBasebandSampleSink* sink) { m_deviceEngine->addThreadedSink(sink); } -void DeviceAPI::removeThreadedSink(ThreadedSampleSink* sink) +void DeviceAPI::removeThreadedSink(ThreadedBasebandSampleSink* sink) { m_deviceEngine->removeThreadedSink(sink); } diff --git a/sdrbase/device/deviceapi.h b/sdrbase/device/deviceapi.h index 2a5ae9053..c155d1d7f 100644 --- a/sdrbase/device/deviceapi.h +++ b/sdrbase/device/deviceapi.h @@ -29,7 +29,7 @@ class DSPDeviceEngine; class GLSpectrum; class ChannelWindow; class BasebandSampleSink; -class ThreadedSampleSink; +class ThreadedBasebandSampleSink; class DeviceSampleSource; class MessageQueue; class ChannelMarker; @@ -45,8 +45,8 @@ public: // Device engine stuff void addSink(BasebandSampleSink* sink); //!< Add a sample sink to device engine void removeSink(BasebandSampleSink* sink); //!< Remove a sample sink from device engine - void addThreadedSink(ThreadedSampleSink* sink); //!< Add a sample sink that will run on its own thread to device engine - void removeThreadedSink(ThreadedSampleSink* sink); //!< Remove a sample sink that runs on its own thread from device engine + void addThreadedSink(ThreadedBasebandSampleSink* sink); //!< Add a sample sink that will run on its own thread to device engine + void removeThreadedSink(ThreadedBasebandSampleSink* sink); //!< Remove a sample sink that runs on its own thread from device engine void setSource(DeviceSampleSource* source); //!< Set device engine sample source type bool initAcquisition(); //!< Initialize device engine acquisition sequence bool startAcquisition(); //!< Start device engine acquisition sequence diff --git a/sdrbase/dsp/dspcommands.h b/sdrbase/dsp/dspcommands.h index bdbf699e6..a6a585f2c 100644 --- a/sdrbase/dsp/dspcommands.h +++ b/sdrbase/dsp/dspcommands.h @@ -25,7 +25,7 @@ class DeviceSampleSource; class BasebandSampleSink; -class ThreadedSampleSink; +class ThreadedBasebandSampleSink; class AudioFifo; class SDRANGEL_API DSPExit : public Message { @@ -106,24 +106,24 @@ class SDRANGEL_API DSPAddThreadedSampleSink : public Message { MESSAGE_CLASS_DECLARATION public: - DSPAddThreadedSampleSink(ThreadedSampleSink* threadedSampleSink) : Message(), m_threadedSampleSink(threadedSampleSink) { } + DSPAddThreadedSampleSink(ThreadedBasebandSampleSink* threadedSampleSink) : Message(), m_threadedSampleSink(threadedSampleSink) { } - ThreadedSampleSink* getThreadedSampleSink() const { return m_threadedSampleSink; } + ThreadedBasebandSampleSink* getThreadedSampleSink() const { return m_threadedSampleSink; } private: - ThreadedSampleSink* m_threadedSampleSink; + ThreadedBasebandSampleSink* m_threadedSampleSink; }; class SDRANGEL_API DSPRemoveThreadedSampleSink : public Message { MESSAGE_CLASS_DECLARATION public: - DSPRemoveThreadedSampleSink(ThreadedSampleSink* threadedSampleSink) : Message(), m_threadedSampleSink(threadedSampleSink) { } + DSPRemoveThreadedSampleSink(ThreadedBasebandSampleSink* threadedSampleSink) : Message(), m_threadedSampleSink(threadedSampleSink) { } - ThreadedSampleSink* getThreadedSampleSink() const { return m_threadedSampleSink; } + ThreadedBasebandSampleSink* getThreadedSampleSink() const { return m_threadedSampleSink; } private: - ThreadedSampleSink* m_threadedSampleSink; + ThreadedBasebandSampleSink* m_threadedSampleSink; }; class SDRANGEL_API DSPAddAudioSink : public Message { diff --git a/sdrbase/dsp/dspdeviceengine.cpp b/sdrbase/dsp/dspdeviceengine.cpp index 0fa476101..371ba0ff2 100644 --- a/sdrbase/dsp/dspdeviceengine.cpp +++ b/sdrbase/dsp/dspdeviceengine.cpp @@ -22,8 +22,8 @@ #include #include "dsp/dspdeviceengine.h" #include "dsp/samplefifo.h" -#include "dsp/threadedsamplesink.h" #include "dsp/dspcommands.h" +#include "threadedbasebandsamplesink.h" DSPDeviceEngine::DSPDeviceEngine(uint uid, QObject* parent) : m_uid(uid), @@ -132,14 +132,14 @@ void DSPDeviceEngine::removeSink(BasebandSampleSink* sink) m_syncMessenger.sendWait(cmd); } -void DSPDeviceEngine::addThreadedSink(ThreadedSampleSink* sink) +void DSPDeviceEngine::addThreadedSink(ThreadedBasebandSampleSink* sink) { qDebug() << "DSPDeviceEngine::addThreadedSink: " << sink->objectName().toStdString().c_str(); DSPAddThreadedSampleSink cmd(sink); m_syncMessenger.sendWait(cmd); } -void DSPDeviceEngine::removeThreadedSink(ThreadedSampleSink* sink) +void DSPDeviceEngine::removeThreadedSink(ThreadedBasebandSampleSink* sink) { qDebug() << "DSPDeviceEngine::removeThreadedSink: " << sink->objectName().toStdString().c_str(); DSPRemoveThreadedSampleSink cmd(sink); @@ -562,13 +562,13 @@ void DSPDeviceEngine::handleSynchronousMessages() } else if (DSPAddThreadedSampleSink::match(*message)) { - ThreadedSampleSink *threadedSink = ((DSPAddThreadedSampleSink*) message)->getThreadedSampleSink(); + ThreadedBasebandSampleSink *threadedSink = ((DSPAddThreadedSampleSink*) message)->getThreadedSampleSink(); m_threadedSampleSinks.push_back(threadedSink); threadedSink->start(); } else if (DSPRemoveThreadedSampleSink::match(*message)) { - ThreadedSampleSink* threadedSink = ((DSPRemoveThreadedSampleSink*) message)->getThreadedSampleSink(); + ThreadedBasebandSampleSink* threadedSink = ((DSPRemoveThreadedSampleSink*) message)->getThreadedSampleSink(); threadedSink->stop(); m_threadedSampleSinks.remove(threadedSink); } diff --git a/sdrbase/dsp/dspdeviceengine.h b/sdrbase/dsp/dspdeviceengine.h index ce8441155..c46b039fd 100644 --- a/sdrbase/dsp/dspdeviceengine.h +++ b/sdrbase/dsp/dspdeviceengine.h @@ -31,7 +31,7 @@ class DeviceSampleSource; class BasebandSampleSink; -class ThreadedSampleSink; +class ThreadedBasebandSampleSink; class SDRANGEL_API DSPDeviceEngine : public QThread { Q_OBJECT @@ -66,8 +66,8 @@ public: void addSink(BasebandSampleSink* sink); //!< Add a sample sink void removeSink(BasebandSampleSink* sink); //!< Remove a sample sink - void addThreadedSink(ThreadedSampleSink* sink); //!< Add a sample sink that will run on its own thread - void removeThreadedSink(ThreadedSampleSink* sink); //!< Remove a sample sink that runs on its own thread + void addThreadedSink(ThreadedBasebandSampleSink* sink); //!< Add a sample sink that will run on its own thread + void removeThreadedSink(ThreadedBasebandSampleSink* sink); //!< Remove a sample sink that runs on its own thread void configureCorrections(bool dcOffsetCorrection, bool iqImbalanceCorrection); //!< Configure DSP corrections @@ -94,7 +94,7 @@ private: typedef std::list SampleSinks; SampleSinks m_sampleSinks; //!< sample sinks within main thread (usually spectrum, file output) - typedef std::list ThreadedSampleSinks; + typedef std::list ThreadedSampleSinks; ThreadedSampleSinks m_threadedSampleSinks; //!< sample sinks on their own threads (usually channels) uint m_sampleRate; diff --git a/sdrbase/dsp/dspengine.h b/sdrbase/dsp/dspengine.h index bf3228ff6..90593fab5 100644 --- a/sdrbase/dsp/dspengine.h +++ b/sdrbase/dsp/dspengine.h @@ -1,97 +1,97 @@ -/////////////////////////////////////////////////////////////////////////////////// -// Copyright (C) 2015 F4EXB // -// written by Edouard Griffiths // -// // -// This program is free software; you can redistribute it and/or modify // -// it under the terms of the GNU General Public License as published by // -// the Free Software Foundation as version 3 of the License, or // -// // -// This program is distributed in the hope that it will be useful, // -// but WITHOUT ANY WARRANTY; without even the implied warranty of // -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // -// GNU General Public License V3 for more details. // -// // -// You should have received a copy of the GNU General Public License // -// along with this program. If not, see . // -/////////////////////////////////////////////////////////////////////////////////// - -#ifndef INCLUDE_DSPENGINE_H -#define INCLUDE_DSPENGINE_H - -#include -#include -#include "dsp/dspdeviceengine.h" -#include "audio/audiooutput.h" -#include "util/export.h" -#ifdef DSD_USE_SERIALDV -#include "dsp/dvserialengine.h" -#endif - -class DSPDeviceEngine; -class ThreadedSampleSink; - -class SDRANGEL_API DSPEngine : public QObject { - Q_OBJECT -public: - DSPEngine(); - ~DSPEngine(); - - static DSPEngine *instance(); - - uint getAudioSampleRate() const { return m_audioSampleRate; } - - DSPDeviceEngine *addDeviceEngine(); - void removeLastDeviceEngine(); - void stopAllAcquisitions(); - void stopAllDeviceEngines(); - - void startAudio(); - void stopAudio(); - void startAudioImmediate(); - void stopAudioImmediate(); - - DSPDeviceEngine *getDeviceEngineByIndex(uint deviceIndex) { return m_deviceEngines[deviceIndex]; } - DSPDeviceEngine *getDeviceEngineByUID(uint uid); - - void addAudioSink(AudioFifo* audioFifo); //!< Add the audio sink - void removeAudioSink(AudioFifo* audioFifo); //!< Remove the audio sink - - // Serial DV methods: - - bool hasDVSerialSupport() - { -#ifdef DSD_USE_SERIALDV - return m_dvSerialSupport; -#else - return false; -#endif - } - - void setDVSerialSupport(bool support); - - void getDVSerialNames(std::vector& deviceNames) - { -#ifdef DSD_USE_SERIALDV - m_dvSerialEngine.getDevicesNames(deviceNames); -#endif - } - - void pushMbeFrame(const unsigned char *mbeFrame, int mbeRateIndex, int mbeVolumeIndex, unsigned char channels, AudioFifo *audioFifo) - { -#ifdef DSD_USE_SERIALDV - m_dvSerialEngine.pushMbeFrame(mbeFrame, mbeRateIndex, mbeVolumeIndex, channels, audioFifo); -#endif - } - -private: - std::vector m_deviceEngines; - uint m_deviceEnginesUIDSequence; - AudioOutput m_audioOutput; - uint m_audioSampleRate; - bool m_dvSerialSupport; -#ifdef DSD_USE_SERIALDV - DVSerialEngine m_dvSerialEngine; -#endif -}; - -#endif // INCLUDE_DSPENGINE_H +/////////////////////////////////////////////////////////////////////////////////// +// Copyright (C) 2015 F4EXB // +// written by Edouard Griffiths // +// // +// This program is free software; you can redistribute it and/or modify // +// it under the terms of the GNU General Public License as published by // +// the Free Software Foundation as version 3 of the License, or // +// // +// This program is distributed in the hope that it will be useful, // +// but WITHOUT ANY WARRANTY; without even the implied warranty of // +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // +// GNU General Public License V3 for more details. // +// // +// You should have received a copy of the GNU General Public License // +// along with this program. If not, see . // +/////////////////////////////////////////////////////////////////////////////////// + +#ifndef INCLUDE_DSPENGINE_H +#define INCLUDE_DSPENGINE_H + +#include +#include +#include "dsp/dspdeviceengine.h" +#include "audio/audiooutput.h" +#include "util/export.h" +#ifdef DSD_USE_SERIALDV +#include "dsp/dvserialengine.h" +#endif + +class DSPDeviceEngine; +class ThreadedBasebandSampleSink; + +class SDRANGEL_API DSPEngine : public QObject { + Q_OBJECT +public: + DSPEngine(); + ~DSPEngine(); + + static DSPEngine *instance(); + + uint getAudioSampleRate() const { return m_audioSampleRate; } + + DSPDeviceEngine *addDeviceEngine(); + void removeLastDeviceEngine(); + void stopAllAcquisitions(); + void stopAllDeviceEngines(); + + void startAudio(); + void stopAudio(); + void startAudioImmediate(); + void stopAudioImmediate(); + + DSPDeviceEngine *getDeviceEngineByIndex(uint deviceIndex) { return m_deviceEngines[deviceIndex]; } + DSPDeviceEngine *getDeviceEngineByUID(uint uid); + + void addAudioSink(AudioFifo* audioFifo); //!< Add the audio sink + void removeAudioSink(AudioFifo* audioFifo); //!< Remove the audio sink + + // Serial DV methods: + + bool hasDVSerialSupport() + { +#ifdef DSD_USE_SERIALDV + return m_dvSerialSupport; +#else + return false; +#endif + } + + void setDVSerialSupport(bool support); + + void getDVSerialNames(std::vector& deviceNames) + { +#ifdef DSD_USE_SERIALDV + m_dvSerialEngine.getDevicesNames(deviceNames); +#endif + } + + void pushMbeFrame(const unsigned char *mbeFrame, int mbeRateIndex, int mbeVolumeIndex, unsigned char channels, AudioFifo *audioFifo) + { +#ifdef DSD_USE_SERIALDV + m_dvSerialEngine.pushMbeFrame(mbeFrame, mbeRateIndex, mbeVolumeIndex, channels, audioFifo); +#endif + } + +private: + std::vector m_deviceEngines; + uint m_deviceEnginesUIDSequence; + AudioOutput m_audioOutput; + uint m_audioSampleRate; + bool m_dvSerialSupport; +#ifdef DSD_USE_SERIALDV + DVSerialEngine m_dvSerialEngine; +#endif +}; + +#endif // INCLUDE_DSPENGINE_H diff --git a/sdrbase/dsp/threadedsamplesink.cpp b/sdrbase/dsp/threadedbasebandsamplesink.cpp similarity index 70% rename from sdrbase/dsp/threadedsamplesink.cpp rename to sdrbase/dsp/threadedbasebandsamplesink.cpp index b17aadce3..4db107ca4 100644 --- a/sdrbase/dsp/threadedsamplesink.cpp +++ b/sdrbase/dsp/threadedbasebandsamplesink.cpp @@ -1,27 +1,28 @@ +#include "threadedbasebandsamplesink.h" + #include #include -#include "dsp/threadedsamplesink.h" #include "dsp/dspcommands.h" #include "util/message.h" -ThreadedSampleFifo::ThreadedSampleFifo(BasebandSampleSink *sampleSink, std::size_t size) : +ThreadedBasebandSampleFifo::ThreadedBasebandSampleFifo(BasebandSampleSink *sampleSink, std::size_t size) : m_sampleSink(sampleSink) { connect(&m_sampleFifo, SIGNAL(dataReady()), this, SLOT(handleFifoData())); m_sampleFifo.setSize(size); } -ThreadedSampleFifo::~ThreadedSampleFifo() +ThreadedBasebandSampleFifo::~ThreadedBasebandSampleFifo() { m_sampleFifo.readCommit(m_sampleFifo.fill()); } -void ThreadedSampleFifo::writeToFifo(SampleVector::const_iterator& begin, SampleVector::const_iterator& end) +void ThreadedBasebandSampleFifo::writeToFifo(SampleVector::const_iterator& begin, SampleVector::const_iterator& end) { m_sampleFifo.write(begin, end); } -void ThreadedSampleFifo::handleFifoData() // FIXME: Fixed? Move it to the new threadable sink class +void ThreadedBasebandSampleFifo::handleFifoData() // FIXME: Fixed? Move it to the new threadable sink class { bool positiveOnly = false; @@ -62,7 +63,7 @@ void ThreadedSampleFifo::handleFifoData() // FIXME: Fixed? Move it to the new th } } -ThreadedSampleSink::ThreadedSampleSink(BasebandSampleSink* sampleSink, QObject *parent) : +ThreadedBasebandSampleSink::ThreadedBasebandSampleSink(BasebandSampleSink* sampleSink, QObject *parent) : m_sampleSink(sampleSink) { QString name = "ThreadedSampleSink(" + m_sampleSink->objectName() + ")"; @@ -71,7 +72,7 @@ ThreadedSampleSink::ThreadedSampleSink(BasebandSampleSink* sampleSink, QObject * qDebug() << "ThreadedSampleSink::ThreadedSampleSink: " << name; m_thread = new QThread(parent); - m_threadedSampleFifo = new ThreadedSampleFifo(m_sampleSink); + m_threadedSampleFifo = new ThreadedBasebandSampleFifo(m_sampleSink); //moveToThread(m_thread); // FIXME: Fixed? the intermediate FIFO should be handled within the sink. Define a new type of sink that is compatible with threading m_sampleSink->moveToThread(m_thread); m_threadedSampleFifo->moveToThread(m_thread); @@ -82,20 +83,20 @@ ThreadedSampleSink::ThreadedSampleSink(BasebandSampleSink* sampleSink, QObject * qDebug() << "ThreadedSampleSink::ThreadedSampleSink: thread: " << thread() << " m_thread: " << m_thread; } -ThreadedSampleSink::~ThreadedSampleSink() +ThreadedBasebandSampleSink::~ThreadedBasebandSampleSink() { delete m_threadedSampleFifo; // Valgrind memcheck delete m_thread; } -void ThreadedSampleSink::start() +void ThreadedBasebandSampleSink::start() { qDebug() << "ThreadedSampleSink::start"; m_thread->start(); m_sampleSink->start(); } -void ThreadedSampleSink::stop() +void ThreadedBasebandSampleSink::stop() { qDebug() << "ThreadedSampleSink::stop"; m_sampleSink->stop(); @@ -103,19 +104,19 @@ void ThreadedSampleSink::stop() m_thread->wait(); } -void ThreadedSampleSink::feed(SampleVector::const_iterator begin, SampleVector::const_iterator end, bool positiveOnly) +void ThreadedBasebandSampleSink::feed(SampleVector::const_iterator begin, SampleVector::const_iterator end, bool positiveOnly) { //m_sampleSink->feed(begin, end, positiveOnly); //m_sampleFifo.write(begin, end); m_threadedSampleFifo->writeToFifo(begin, end); } -bool ThreadedSampleSink::handleSinkMessage(const Message& cmd) +bool ThreadedBasebandSampleSink::handleSinkMessage(const Message& cmd) { return m_sampleSink->handleMessage(cmd); } -QString ThreadedSampleSink::getSampleSinkObjectName() const +QString ThreadedBasebandSampleSink::getSampleSinkObjectName() const { return m_sampleSink->objectName(); } diff --git a/sdrbase/dsp/threadedsamplesink.h b/sdrbase/dsp/threadedbasebandsamplesink.h similarity index 87% rename from sdrbase/dsp/threadedsamplesink.h rename to sdrbase/dsp/threadedbasebandsamplesink.h index 5184fe1c7..2d19cc4a2 100644 --- a/sdrbase/dsp/threadedsamplesink.h +++ b/sdrbase/dsp/threadedbasebandsamplesink.h @@ -31,12 +31,12 @@ class QThread; * Because Qt is a piece of shit this class cannot be a nested protected class of ThreadedSampleSink * So let's make everything public */ -class ThreadedSampleFifo : public QObject { +class ThreadedBasebandSampleFifo : public QObject { Q_OBJECT public: - ThreadedSampleFifo(BasebandSampleSink* sampleSink, std::size_t size = 1<<18); - ~ThreadedSampleFifo(); + ThreadedBasebandSampleFifo(BasebandSampleSink* sampleSink, std::size_t size = 1<<18); + ~ThreadedBasebandSampleFifo(); void writeToFifo(SampleVector::const_iterator& begin, SampleVector::const_iterator& end); BasebandSampleSink* m_sampleSink; @@ -49,12 +49,12 @@ public slots: /** * This class is a wrapper for SampleSink that runs the SampleSink object in its own thread */ -class SDRANGEL_API ThreadedSampleSink : public QObject { +class SDRANGEL_API ThreadedBasebandSampleSink : public QObject { Q_OBJECT public: - ThreadedSampleSink(BasebandSampleSink* sampleSink, QObject *parent = 0); - ~ThreadedSampleSink(); + ThreadedBasebandSampleSink(BasebandSampleSink* sampleSink, QObject *parent = 0); + ~ThreadedBasebandSampleSink(); const BasebandSampleSink *getSink() const { return m_sampleSink; } MessageQueue* getInputMessageQueue() { return m_sampleSink->getInputMessageQueue(); } //!< Return pointer to sample sink's input message queue @@ -71,7 +71,7 @@ public: protected: QThread *m_thread; //!< The thead object - ThreadedSampleFifo *m_threadedSampleFifo; + ThreadedBasebandSampleFifo *m_threadedSampleFifo; BasebandSampleSink* m_sampleSink; }; diff --git a/sdrbase/sdrbase.pro b/sdrbase/sdrbase.pro index e165fa63d..2aa2681ac 100644 --- a/sdrbase/sdrbase.pro +++ b/sdrbase/sdrbase.pro @@ -61,7 +61,7 @@ SOURCES += mainwindow.cpp\ dsp/spectrumscopecombovis.cpp\ dsp/scopevis.cpp\ dsp/spectrumvis.cpp\ - dsp/threadedsamplesink.cpp\ + dsp/threadedbasebandsamplesink.cpp\ gui/aboutdialog.cpp\ gui/addpresetdialog.cpp\ gui/basicchannelsettingswidget.cpp\ @@ -140,7 +140,7 @@ HEADERS += mainwindow.h\ dsp/nullsink.h\ dsp/scopevis.h\ dsp/spectrumvis.h\ - dsp/threadedsamplesink.h\ + dsp/threadedbasebandsamplesink.h\ gui/aboutdialog.h\ gui/addpresetdialog.h\ gui/audiodialog.h\