From 4ce167e70915de93b7f185820090c84870596d89 Mon Sep 17 00:00:00 2001 From: lordmulder Date: Fri, 6 May 2011 17:51:49 +0200 Subject: [PATCH] Fix AC-3 encoding with non-standard sampling rates. Aften needs input at 48, 44.1 or 32 kHz, so insert Resampling filter, if needed. --- etc/Translation/Blank.ts | 16 ++++++--- etc/Translation/LameXP_DE.ts | 16 ++++++--- etc/Translation/LameXP_ES.ts | 16 ++++++--- etc/Translation/LameXP_FR.ts | 16 ++++++--- etc/Translation/LameXP_IT.ts | 16 ++++++--- etc/Translation/LameXP_KR.ts | 16 ++++++--- etc/Translation/LameXP_RU.ts | 16 ++++++--- etc/Translation/LameXP_UK.ts | 16 ++++++--- res/localization/LameXP_DE.qm | Bin 58623 -> 58579 bytes res/localization/LameXP_ES.qm | Bin 58363 -> 58375 bytes res/localization/LameXP_FR.qm | Bin 57718 -> 57728 bytes res/localization/LameXP_IT.qm | Bin 40395 -> 40461 bytes res/localization/LameXP_KR.qm | Bin 43052 -> 42998 bytes res/localization/LameXP_UK.qm | Bin 21636 -> 21582 bytes src/Config.h | 4 +-- src/Encoder_AC3.cpp | 6 ++++ src/Encoder_AC3.h | 1 + src/Encoder_Abstract.cpp | 8 +++++ src/Encoder_Abstract.h | 1 + src/Thread_Process.cpp | 60 +++++++++++++++++++++++++++++++++- src/Thread_Process.h | 1 + 21 files changed, 174 insertions(+), 35 deletions(-) diff --git a/etc/Translation/Blank.ts b/etc/Translation/Blank.ts index 1c1895fe..ddb82243 100644 --- a/etc/Translation/Blank.ts +++ b/etc/Translation/Blank.ts @@ -199,6 +199,10 @@ n/a + + Aften &minus; A/52 audio encoder + + AudioFileModel @@ -596,10 +600,6 @@ Custom Encoder Parameters - - LAME: - - OggEnc2: @@ -1276,6 +1276,14 @@ Aften A/52 + + Lame MP3: + + + + Aften A/52: + + MetaInfo diff --git a/etc/Translation/LameXP_DE.ts b/etc/Translation/LameXP_DE.ts index cf374a41..93e8808a 100644 --- a/etc/Translation/LameXP_DE.ts +++ b/etc/Translation/LameXP_DE.ts @@ -199,6 +199,10 @@ Note: This demo (pre-release) version of LameXP will expire at %1. Still %2 days left. Hinweise: Diese Demo (Test) Version von LameXP läuft am %1 ab. Noch %2 Tage übrig. + + Aften &minus; A/52 audio encoder + + AudioFileModel @@ -1133,10 +1137,6 @@ Custom Encoder Parameters Benutzerdefinierte Parameter - - LAME: - - OggEnc2: @@ -1277,6 +1277,14 @@ Aften A/52 + + Lame MP3: + + + + Aften A/52: + + MetaInfo diff --git a/etc/Translation/LameXP_ES.ts b/etc/Translation/LameXP_ES.ts index a400b29e..c7de8712 100644 --- a/etc/Translation/LameXP_ES.ts +++ b/etc/Translation/LameXP_ES.ts @@ -199,6 +199,10 @@ Note: This demo (pre-release) version of LameXP will expire at %1. Still %2 days left. Nota: Esta es una versión demo (pre-final) de LameXP que expirará el %1. Quedan %2 días restantes. + + Aften &minus; A/52 audio encoder + + AudioFileModel @@ -1132,10 +1136,6 @@ Custom Encoder Parameters Personalizar parámetros de codificación - - LAME: - LAME: - OggEnc2: QggEnc2: @@ -1276,6 +1276,14 @@ Aften A/52 + + Lame MP3: + Lame MP3: + + + Aften A/52: + + MetaInfo diff --git a/etc/Translation/LameXP_FR.ts b/etc/Translation/LameXP_FR.ts index 545b18cd..1a70a382 100644 --- a/etc/Translation/LameXP_FR.ts +++ b/etc/Translation/LameXP_FR.ts @@ -203,6 +203,10 @@ Note: This demo (pre-release) version of LameXP will expire at %1. Still %2 days left. + + Aften &minus; A/52 audio encoder + + AudioFileModel @@ -1141,10 +1145,6 @@ Sélection automatique (par défaut) Custom Encoder Parameters Paramètres d'encodage personnalisés - - LAME: - LAME : - OggEnc2: OggEnc2 : @@ -1286,6 +1286,14 @@ Ouvrir le dossier récursivement... Aften A/52 + + Lame MP3: + Lame MP3: + + + Aften A/52: + + MetaInfo diff --git a/etc/Translation/LameXP_IT.ts b/etc/Translation/LameXP_IT.ts index 7ab0fe7d..ad2d1043 100644 --- a/etc/Translation/LameXP_IT.ts +++ b/etc/Translation/LameXP_IT.ts @@ -199,6 +199,10 @@ Note: This demo (pre-release) version of LameXP will expire at %1. Still %2 days left. + + Aften &minus; A/52 audio encoder + + AudioFileModel @@ -1133,10 +1137,6 @@ Custom Encoder Parameters - - LAME: - - OggEnc2: @@ -1277,6 +1277,14 @@ Aften A/52 + + Lame MP3: + Lame MP3: + + + Aften A/52: + + MetaInfo diff --git a/etc/Translation/LameXP_KR.ts b/etc/Translation/LameXP_KR.ts index fc2923a9..330f8f3b 100644 --- a/etc/Translation/LameXP_KR.ts +++ b/etc/Translation/LameXP_KR.ts @@ -199,6 +199,10 @@ Note: This demo (pre-release) version of LameXP will expire at %1. Still %2 days left. + + Aften &minus; A/52 audio encoder + + AudioFileModel @@ -596,10 +600,6 @@ Custom Encoder Parameters 인코더 사용자 매개 변수 - - LAME: - LAME: - OggEnc2: OggEnc2: @@ -1276,6 +1276,14 @@ Aften A/52 + + Lame MP3: + + + + Aften A/52: + + MetaInfo diff --git a/etc/Translation/LameXP_RU.ts b/etc/Translation/LameXP_RU.ts index 6541ec4b..33b1b010 100644 --- a/etc/Translation/LameXP_RU.ts +++ b/etc/Translation/LameXP_RU.ts @@ -199,6 +199,10 @@ Note: This demo (pre-release) version of LameXP will expire at %1. Still %2 days left. + + Aften &minus; A/52 audio encoder + + AudioFileModel @@ -596,10 +600,6 @@ Custom Encoder Parameters Пользовательские параметры кодера - - LAME: - - OggEnc2: @@ -1278,6 +1278,14 @@ Aften A/52 + + Lame MP3: + + + + Aften A/52: + + MetaInfo diff --git a/etc/Translation/LameXP_UK.ts b/etc/Translation/LameXP_UK.ts index 3cfd6033..58384439 100644 --- a/etc/Translation/LameXP_UK.ts +++ b/etc/Translation/LameXP_UK.ts @@ -199,6 +199,10 @@ Note: This demo (pre-release) version of LameXP will expire at %1. Still %2 days left. + + Aften &minus; A/52 audio encoder + + AudioFileModel @@ -1132,10 +1136,6 @@ Custom Encoder Parameters Користувацькі параметри кодування - - LAME: - LAME: - OggEnc2: OggEnc2: @@ -1276,6 +1276,14 @@ Aften A/52 + + Lame MP3: + + + + Aften A/52: + + MetaInfo diff --git a/res/localization/LameXP_DE.qm b/res/localization/LameXP_DE.qm index 34523e29de83a9c8437901843c9cb8cd83cc6966..9e5b5a239173ab3bed427957d884d2a34c3d6066 100644 GIT binary patch delta 2806 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 diff --git a/res/localization/LameXP_ES.qm b/res/localization/LameXP_ES.qm index 86284ae90a410bb5a361fe0a25ffebb9bc1de3e2..18feb6cff0e75c0f0822ccaffe4790d0ac1b88ff 100644 GIT binary patch delta 2744 zcmXX|eO!%q8~>hj?zeNF`YK4n$7~oL}-(5R_ieyZ8 ztOoY9!>`5;XcXZ;g7$k|hyR3ZV0Ug`G@tnYi>7{(JITF2;h6O%BtD{a8FlR zC*1`u3{Xuu=mZ?8Q!c5D7OtwI*ZY9P0jd_=b2^$)-l#@fOjW&Hegs&nR?9oT1(Xen zhuYe_MQtCvhU))NJzf42NHwXKCY%GVoK~-39|7u9>h)m+JEc>-O-mVKJk>>>(ZD2I zb!mDx@by@Axy=C5#ZFzZcsr1@U0u1vmd+_t-?v{zG@R{=g+1y={vQ#hrRp~;sgkfE z8sQ#c8~EKP8hI2Ytc%wSTHgya$Qrx%C?5Z>@>uPvYFF$vj(ox@f-?W25}>g*duTG5 z$H0;~nj))GI5M9Z9nvezjFo#K&$=cplOxjmeu{+0Xt@s+) zt7dZis(>j>U)=ivvuEKspx%?&UzSD%e9nBcsF(>Y)Z7TkZF&i{)%#7uFfg}CPXpUloWDWgObk} zwR73Gf_6~47fJ(ToNHnoUR?xSZ?nVQ+kgcO>m2foTph-`j5Gnc&a6jw4KOm24e_U< za__OGq@SsOHSDSvQ-JJ&Y|=0)YE~|r)LlU~IL4;?G*IkPJXmY#+vb_7F{z>EWE0v*98%0_dyej}~&e&&AlC!~|NaKA_N0@E&Y-3x~T>x+2N<6Cm+ z9R4kFG9{FFD{U>A#*KGaK;~1x4=;2BwyxzJ``rg@@9^V(r#wT(@a}I;0H$61Bp;Ov zaKMva)Ug7X(ZWXtQ2zzr;}d5sCaQe+#H<%I*2eIksW$*g2l%XQku-pl6qYyodGf_| zqXGXee&0L)qNZHVf1_;%Chp)XlE#o7e&dfBNTA|o{!CX4@TJ5zk9Gpem+-e9lHehK z@wd;X0E_-sVtEI1qcHFR$zrixuFIqrBw(O$QE8DLegtudzxQg+F=SIQHue^>#q z?uK?oEUnu7j&^YY75UXhZB#22|Bb6Q`Y5G4Bx;u@5M|@Dv>S#c0Pl{_ZgMpMXWr3% zSx)h!UVC62nP%YtZRvA@t98*<`7b5Pv$bunmjJ%i+G{ZxboV{g-i!$%Ejt7YbFuc# z3>%;`QDl4CfzQ7bU3wy@Gp>pr+)a|@ZE?z@4jRLsi9VTQK{|>{d_?lmIWcmQ6?N1~ zG5S>|;1?{$ITEEYSH&&6LV>|wh&v|40h_|aoxLY%Sha}--a~;cZen2=U6cNvVoCRE zT7Pb^SQ`E{b;@|LG>5cFJ1ZVN-3uHm70>w*DP?QL^PR;&)djJMqarWWiEV@Y0h>$W z4-fAG%lC^nZ3h5B!^Jy0=FCz5qxPblm83Z=j3F!ZIaw;(R%iuQv4m-n_DQYYkmS~(xjvjMAPB#q%CFioIhI1@+7>Guce$% zNwR)UQm)lpVDTr?f!sVolq(%vdW5R}P%3-rPPhfdTW54Dm3}nd20rzc?wP17q(JGJ zfechxBfU!P55!sOg-&`-h|~|XeNG08*NRrYqAwl@zT(hO|4zb$@=O;baQN$hr}e&?Gh#1p3ML{66I07L^EG12V2L} z#XkG}ei(&t!R7Za=`%sY8wqZ6ZgRvmeDHC@^zFzq^eIFi|Z)glaYo~mtiq`9Q%MVv?r3=X- z8n_m9B2T}2z7ihoYHx{|h(Ih%7=i%I!Z^6o*8o|Ne%hH4v8Evbv&Jd4-u)HN+02Q& I=!kXy01jeG2LJ#7 delta 2768 zcmX9=dt8n8AAg^7p38Zj^PKaDXtX*c61grl(X^#nhoUyC=pst1pE8m*Kb%~WNXb(a zO6A&(_@YVxeO!v{XTp3$9a9ubI$X9KA+F~^7%Yz7c||?nyvPZ zn*nwvurM452m~7JfQUw5^Fv@s05If5Z`?6H+t14U4VboJz-JS{defn(m0&X%VDXn= z>!X38E?}=T0~_Xp?OqF%UV}LMIPgV1^z+UFGm0>Boh@*p9?m|L(ETKQw&ws<$@ti@ z7TDDU-+FtXsRyP}bl&p@OfI>=jxD{>e5|$iOEZJ%Y#i{Z8q=dz1LYIo*OUqrHDgxf zCSb0D;FfPGu`PmI^MOl7%&DislQS__N713DHy(1u+=cG}>&GF~cn>J{LFl>@RCqC> zt0n+@tnn`wD)j1OEVoI(P(*qodEi9g)UVi*Pz;QJA3M`81CH_7Gl*hhsIp3Bbo@od z@(F-BOw~6p68JVzWm)S0xMirUQtkj3^s1?cMgoUVDorY*#VA$Lo4vqty{c9B1ZewP zd9E63c2T`pbQt*Zg<8%z11L+?77AVWxvRE$cPk(~SKH(h1PfNGhs{nVtY)e|mj41$ zL)0-zb-Ky-1Dcp%k&AAIamGm3u-RhQlq^~<$e>Pk;hQNb1@q0 zRXs$WMq@veV)YH>p4wH_q}XU26@SeD^LR}bL#kR}(iB;i(sOb&dv9g|Irf^0Mjzs^ zQ&V|uJn-E-&8cn+AfunArR^#($4PUsNDB;a)3kp=&t3hK=6*&duq>WY#U+wbr!(w7 z&y51ZO$!IUI>8to`;xd8Gku=y1dgOKULz(E86m?NFE=-!vfkKygjr;7p(CEzUuSlZ? z7BdItktV8VGUefZyNTjM#htY>x3NSw5bVPi`3xhhr?3YvQ$@S)vSpiTIy3~Z4HK^smuj{# z{%c_NcDDVx0>u2tc1&6Uluco8nCbpJ2lj_b4`A$e_I3evS|7sR@%#dC@@Km$Nqm_c z+w)h`qs`P`6+#iuWz_iQU>#!lfsvKT)KSL@t@%_XPC?R-Dp@Bp*iFXJk@ooEyAF+qj zm>$nN_PGbx-R9r>gYpa>$Gg2f21IY-r+BNJfrHNcy!OSw^j1E~k8C&lF28)%e1gi2 zU!MJxM&CI8OZ93XWfz~lDT;>lGKJ-hzRrB{xv_xh6~FhL56O)4_ya-R$It6gs-XE+SdX1zTJ)UMLz<{SmG25IwuWq>ms+FhNkB!?X#+VY588d{m! zmR5?~4DAhXLO=bGGFt0kz9ZOoKBKksNHB#L0xK>F)8px`4U#awkeb|<9~&lae*|F+qD+vT;c6>Tc9IOWV^2d|6U_HcSn*l&WrBcO`=5< zr*^f|_+2D=XH5X{C@%08Nk`RU)D%l{RFoL|G7IpXEhab;q;coPjoX6(o0Z~LmjqyK zpqSHhoQ74KSm-qb*f?6;6Hcqt z5-1h%;@OU3pr%G_=BUX_C&e~v6JUEu{QmwOU{St!({3OTI6}O=m9~)gS+Uc1ErIw% z{Bt)sYV!NyGbaLbf249rFgk|nChI8+$LKtrnt;e1I-d+GGu1{H@X!7`maGeZL|M=7 zQ~HYzL%MV&x9Q*WV|4o~extGQNY~JpM*pxky2jiNa%-s)CR#cEr0Wi(Gahb|=A1KN zZ7M9>eL(~Le)Ip^{bQR*Hz|S&iOP*0~iB4J4qG$EBC4{ec8dukE1gq+tCZyC)>D82z}` z1e!8yl>(iWMY=x0ntruErBBQxs`ut9P4vuA{oyLoblw$xjVJy3`2cX{NP8C5Y#s$?{K8}_dc zA_^WF?pUt|Rz@4TI@^FTYYY$d;qql>6_@Y1HZ!4clCT5cBQwcGX&?w(H z`9FGxtd@V&7=Vixqc;GO9evmt ZANqMI4PO0~@v*LoM*wr|Ky2iS{{!9WQzrlb diff --git a/res/localization/LameXP_FR.qm b/res/localization/LameXP_FR.qm index cb94d297d6cf92eedb413ae97c0e1461c40b46ac..fb5753ba83930d5ba22aab39fd3032b001dfd0a8 100644 GIT binary patch delta 2739 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 diff --git a/res/localization/LameXP_IT.qm b/res/localization/LameXP_IT.qm index 2df7e9cfbda3895721df4090fd40d8c805f09a88..373a3f2e6cef0393a4b65924a5479c619cd1b249 100644 GIT binary patch delta 2156 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 P(>Qb3TTM-qmd5@M6OSW~ delta 2664 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 diff --git a/res/localization/LameXP_UK.qm b/res/localization/LameXP_UK.qm index e9d8d5c82067f867a14b45646472dd3f341aaad9..ca60b84228bdca44a43d6c0e00fd82358d3b27ea 100644 GIT binary patch delta 1210 zcmXAodr(wm7{;GHmp!|O-8~q@vN_8N!Yms%iHop6TvS*VDA5Q7k{FReCP||({%Amj zDUfE^4meTK-d(Jy${GN1`0=j-RB$$`syig(*c10P4KC7D6|)R zBL_q^gC9HsC{n>s-2##-z;B$UpE*RP9Ri;G2{y|BV0#tzAlmmXfjznfNWJ8$nLAuH z%Zd!X4Dh>+tkF8aK8^$5+ytWIkvB+vQ>+=tccTw(%vCckAipGn1c)d&^EpjFfl6aJ z5M;o+> zI+Bh8o&`*=kAcL+FxLs{4;mRYjz2dpY~>sy;7c7lzl>jd1bY`Vt| zKzo6GVOBvTAF(+eHME{!bN}DpWb;m4CnNlvc+$KL_-5I4F^YM)Kv zZe^TtyMEWYf4WZ64LCPPNX}+{3<*!9V(2%eE>m^?x?yz7k zuu?qCLSTC=*?vW^xGz#p9}3og`bdW)R60oKc2RIN6azbLLi0)Dz-k}pNt0k0~`SCn?fc@Gf(&_0f)jH+XG7Qa9sHd+o*>Z{M`UK#tD zo^hA%v~iG5#p&wy(rl>FwLQ^CK0MHURGUk$Yg)H-pAsWFbSv6$U{9uQz2(1LZAjXI zZc0>-l%ua8e^;c^R(C*1l&TyS;F+(b>X)gjFe803{v0tWl|~v)k?&s8sFT>}BOgfL jU4Kl$u}Z(ZUJv+Oqj#89CSTni+@};$0{be%bOHYYSKdW+ delta 1184 zcmX9-drVtZ9R6;5&TYAr796Z1g9?m5x3P{#VU!_-QXZv%Oc6I;Aus~O#}tENGKmfn z#)w;YhhdSI1~WG#vLRCwAUs7;8Ela)=wfCvUDy!fG=?>xzl1+-zTA7y`JL}|=06ph zE(vFSjpG240qrEf6M^hn!aTsV3FIFJoacbDDIjgym85Un1X~CLc29$+)1v)9gSRoj zJPAI23=q=6ug?P3kHFpU(dKBxW|RVczai5&3S@S{v6sF-Sp`R2JCMG(jn2|-%&A5; zCjueAAZMl-a6HDd<*h(OEnfU?8i+Cn1~L#%#i>7!q<2#V3bJg&XyO zuK;^9T$_5~bJ?5mxXfpkGpC>i#CClA_gP4-k{4=(W}WzQu}xAb(O+ zrMOlRLjSWB_rj{_pi|rE_*${zc#a6fDFaSykwUjJrnwLBwkWf9900sJmCxT0fCC}& zk3w=|kMf6JHK1%_LTw$HxQlVNO1>2_?RpmZ(#7l%2|&0Xdnq87^!2inx(&d;hn*Uv zshJC`BWncM*|&{Z8rEOB8_*@PfhqFGy1+*6{zdyI*vx}@;F;rWHlJi4dY3I$QFs>9 zBwLc3$jD~)$CwAnn`B!r(8lllGnBN|-0-iR0 z*LECGcZwmpX~5Vh9{tb-gsq8XS1CJ3g4o-?pRzh9_P=HZV)MlBBZ zd{|Bv`xl9iOM=OqM3*YO*g~x-P(}2RYpKgBqxU_k@0!Z8IYgCBQq{Z2jZjJDYOMs~ z>*Z0UNm!Rxm4@I)>iEJPB(OuBuxo-y<*5^`xkP4AoqP2kV9$gc$@Kn>>L!B^Q_)6mLMe_Kf6zeXhOhct4ahXolO35oX zsfw>lm4|%Eu5{^a9LY&~M>@at1rVr}y6q$eoM#^VZ?h=Fa zX1(s#wg1Rji|+m#r+}aJec>i{B5XaXiH3u@R#633UXkFg{}u6(!-r8Id(b9 L;x}Y9X~X^pel|Y< diff --git a/src/Config.h b/src/Config.h index 86eccd7d..9b8f8f3e 100644 --- a/src/Config.h +++ b/src/Config.h @@ -29,8 +29,8 @@ #define VER_LAMEXP_MINOR_HI 0 #define VER_LAMEXP_MINOR_LO 2 #define VER_LAMEXP_TYPE Alpha -#define VER_LAMEXP_PATCH 10 -#define VER_LAMEXP_BUILD 485 +#define VER_LAMEXP_PATCH 12 +#define VER_LAMEXP_BUILD 488 /////////////////////////////////////////////////////////////////////////////// // Tools versions diff --git a/src/Encoder_AC3.cpp b/src/Encoder_AC3.cpp index 7627cb6d..98196f6d 100644 --- a/src/Encoder_AC3.cpp +++ b/src/Encoder_AC3.cpp @@ -135,6 +135,12 @@ QString AC3Encoder::extension(void) return "ac3"; } +const unsigned int *AC3Encoder::requiresDownsample(void) +{ + static const unsigned int supportedRates[] = {48000, 44100, 32000, NULL}; + return supportedRates; +} + bool AC3Encoder::isFormatSupported(const QString &containerType, const QString &containerProfile, const QString &formatType, const QString &formatProfile, const QString &formatVersion) { if(containerType.compare("Wave", Qt::CaseInsensitive) == 0) diff --git a/src/Encoder_AC3.h b/src/Encoder_AC3.h index 47503fa1..679279aa 100644 --- a/src/Encoder_AC3.h +++ b/src/Encoder_AC3.h @@ -36,6 +36,7 @@ public: virtual bool encode(const QString &sourceFile, const AudioFileModel &metaInfo, const QString &outputFile, volatile bool *abortFlag); virtual bool isFormatSupported(const QString &containerType, const QString &containerProfile, const QString &formatType, const QString &formatProfile, const QString &formatVersion); virtual QString extension(void); + virtual const unsigned int *requiresDownsample(void); private: const QString m_binary; diff --git a/src/Encoder_Abstract.cpp b/src/Encoder_Abstract.cpp index 791dcd6e..9f6786f5 100644 --- a/src/Encoder_Abstract.cpp +++ b/src/Encoder_Abstract.cpp @@ -45,11 +45,19 @@ void AbstractEncoder::setCustomParams(const QString &customParams) { m_configCus /* * Default implementation */ + +// Does encoder require the input to be downmixed to stereo? bool AbstractEncoder::requiresDownmix(void) { return false; } +// Does encoder require the input to be downsampled? (NULL-terminated array of supported sampling rates) +const unsigned int *AbstractEncoder::requiresDownsample(void) +{ + return NULL; +} + /* * Helper functions */ diff --git a/src/Encoder_Abstract.h b/src/Encoder_Abstract.h index cb9fe6ec..6b6cd102 100644 --- a/src/Encoder_Abstract.h +++ b/src/Encoder_Abstract.h @@ -41,6 +41,7 @@ public: virtual bool isFormatSupported(const QString &containerType, const QString &containerProfile, const QString &formatType, const QString &formatProfile, const QString &formatVersion) = 0; virtual QString extension(void) = 0; virtual bool requiresDownmix(void); + virtual const unsigned int *requiresDownsample(void); //Common setter methods void setBitrate(int bitrate); diff --git a/src/Thread_Process.cpp b/src/Thread_Process.cpp index 20d748c0..be4f6089 100644 --- a/src/Thread_Process.cpp +++ b/src/Thread_Process.cpp @@ -28,6 +28,7 @@ #include "Decoder_Abstract.h" #include "Filter_Abstract.h" #include "Filter_Downmix.h" +#include "Filter_Resample.h" #include "Registry_Decoder.h" #include "Model_Settings.h" @@ -40,6 +41,9 @@ #include #include +#include + +#define DIFF(X,Y) ((X > Y) ? (X-Y) : (Y-X)) QMutex *ProcessThread::m_mutex_genFileName = NULL; @@ -83,6 +87,10 @@ ProcessThread::~ProcessThread(void) LAMEXP_DELETE(m_encoder); } +//////////////////////////////////////////////////////////// +// Thread Entry Point +//////////////////////////////////////////////////////////// + void ProcessThread::run() { try @@ -117,7 +125,13 @@ void ProcessThread::processFile() emit processStateFinished(m_jobId, outFileName, false); return; } - + + //Do we need to take of downsampling the input? + if(m_encoder->requiresDownsample()) + { + insertDownsampleFilter(); + } + //Do we need Stereo downmix? if(m_audioFile.formatAudioChannels() > 2 && m_encoder->requiresDownmix()) { @@ -324,6 +338,50 @@ QString ProcessThread::generateTempFileName(void) return tempFileName; } +void ProcessThread::insertDownsampleFilter(void) +{ + bool applyDownsampling = true; + + //Check if downsampling filter is already in the chain + for(int i = 0; i < m_filters.count(); i++) + { + if(dynamic_cast(m_filters.at(i))) + { + qWarning("Encoder requires downsampling, but user has already set resamling filter!"); + applyDownsampling = false; + } + } + + //Now add the downsampling filter, if needed + if(applyDownsampling) + { + const unsigned int *supportedRates = m_encoder->requiresDownsample(); + const unsigned int inputRate = m_audioFile.formatAudioSamplerate(); + unsigned int currentDiff = UINT_MAX, minimumDiff = UINT_MAX, bestRate = UINT_MAX; + + //Find the most suitable supported sampling rate + for(int i = 0; supportedRates[i]; i++) + { + currentDiff = DIFF(inputRate, supportedRates[i]); + if(currentDiff < minimumDiff) + { + bestRate = supportedRates[i]; + minimumDiff = currentDiff; + if(!(minimumDiff > 0)) break; + } + } + + if(bestRate != inputRate) + { + m_filters.prepend(new ResampleFilter((bestRate != UINT_MAX) ? bestRate : supportedRates[0])); + } + } +} + +//////////////////////////////////////////////////////////// +// PUBLIC FUNCTIONS +//////////////////////////////////////////////////////////// + void ProcessThread::addFilter(AbstractFilter *filter) { m_filters.append(filter); diff --git a/src/Thread_Process.h b/src/Thread_Process.h index c10e8c72..f9f5eb7b 100644 --- a/src/Thread_Process.h +++ b/src/Thread_Process.h @@ -67,6 +67,7 @@ private: void processFile(); QString generateOutFileName(void); QString generateTempFileName(void); + void insertDownsampleFilter(void); const QUuid m_jobId; AudioFileModel m_audioFile;