diff --git a/doc/Changelog.html b/doc/Changelog.html
index cef8eaef..7d250d95 100644
--- a/doc/Changelog.html
+++ b/doc/Changelog.html
@@ -34,7 +34,7 @@
LameXP v4.xx History
-LameXP v4.13 [2016-??-??]
+LameXP v4.14 [2016-??-??]
- Fixed the location of temporary intermediate files for SoX-based audio effects
+- Enabled the "built-in" resampler for QAAC encoder
+- The "Algorithm Quality" slider now also effects the QAAC encoder
+- Updated MediaInfo to v0.7.82 (2016-01-27), compiled with ICL 15.0 and MSVC 12.0
+- Updated QAAC add-in to the to QAAC v2.58 (2016-01-05)
+- Updated FhgAacEnc add-in to "Case" edition (2015-10-24)
+- Updated ALAC decoder to refalac v1.58 (2016-01-05)
LameXP v4.13 [2015-12-12]
diff --git a/doc/Changelog.md b/doc/Changelog.md
index 50c86a1f..b565193e 100644
--- a/doc/Changelog.md
+++ b/doc/Changelog.md
@@ -2,9 +2,16 @@
# LameXP v4.xx History #
-## LameXP v4.13 [2016-??-??] ## {-}
+## LameXP v4.14 [2016-??-??] ## {-}
* Fixed the location of temporary intermediate files for SoX-based audio effects
+* Enabled the "built-in" resampler for QAAC encoder
+* The "Algorithm Quality" slider now also effects the QAAC encoder
+* Updated MediaInfo to v0.7.82 (2016-01-27), compiled with ICL 15.0 and MSVC 12.0
+* Updated QAAC add-in to the to QAAC v2.58 (2016-01-05)
+* Updated FhgAacEnc add-in to "Case" edition (2015-10-24)
+* Updated ALAC decoder to refalac v1.58 (2016-01-05)
+
## LameXP v4.13 [2015-12-12] ## {-}
diff --git a/etc/Translation/Blank.ts b/etc/Translation/Blank.ts
index 0e0fd298..644a53aa 100644
--- a/etc/Translation/Blank.ts
+++ b/etc/Translation/Blank.ts
@@ -3217,149 +3217,149 @@
-
+
Aborted! Waiting for running jobs to terminate...
-
+
Encoding: %n file(s) of %1 completed so far, please wait...
-
+
Creating the playlist file, please wait...
-
+
Process was aborted by the user after %n file(s)!
-
+
Process was aborted prematurely by the user!
-
+
LameXP - Aborted
-
+
Process was aborted by the user.
-
+
Process finished after %1.
-
+
Error: %1 of %n file(s) failed (%2). Double-click failed items for detailed information!
-
+
%n file(s) skipped
-
+
Error: %1 of %n file(s) failed. Double-click failed items for detailed information!
-
+
LameXP - Error
-
+
At least one file has failed!
-
+
All files completed successfully. Skipped %n file(s).
-
-
+
+
All files completed successfully.
-
+
LameXP - Done
-
+
None of the items matches the current filtering rules
-
+
Playlist creation failed
-
+
The playlist file could not be created:
-
+
Warning: Computer will shutdown in %1 seconds...
-
-
+
+
Cancel Shutdown
-
+
%n hour(s)
-
-
+
+
%n minute(s)
-
-
+
+
%n second(s)
-
+
%n millisecond(s)
diff --git a/etc/Translation/LameXP_DE.ts b/etc/Translation/LameXP_DE.ts
index 09eb7d83..0d4f4d6b 100644
--- a/etc/Translation/LameXP_DE.ts
+++ b/etc/Translation/LameXP_DE.ts
@@ -3163,58 +3163,58 @@
Dateien werden kodiert, bitte warten...
-
+
Aborted! Waiting for running jobs to terminate...
Abbruch! Laufende Jobs werden beendet...
-
+
Creating the playlist file, please wait...
Erzeuge Wiedergabeliste, bitte warten...
-
+
LameXP - Aborted
LameXP - Abgebrochen
-
+
Process was aborted by the user.
Der Vorgang wurde vom Benutzer abgebrochen.
-
+
LameXP - Error
LameXP - Fehler
-
+
At least one file has failed!
Mindestens eine Datei ist fehlgeschlagen!
-
-
+
+
All files completed successfully.
Alle Dateien wurden erfolgreich umgewandelt.
-
+
LameXP - Done
LameXP - Fertig
-
+
Playlist creation failed
Wiedergabeliste konnte nicht erstellt werden
-
+
The playlist file could not be created:
Die Wiedergabeliste konnte nicht erstellt werden:
-
+
Process was aborted prematurely by the user!
Der Vorgang wurde vom Benutzer abgebrochen!
@@ -3234,13 +3234,13 @@
Computer herunterfahren sobald alle Dateien fertiggestellt sind
-
+
Warning: Computer will shutdown in %1 seconds...
Achtung: Computer wird in %1 Sekunden heruntergefahren...
-
-
+
+
Cancel Shutdown
Herunterfahren abbrechen
@@ -3263,7 +3263,7 @@
Freier Festplattenspeicher (Temp Ordner)
-
+
Process finished after %1.
Vorgang abgeschlossen nach %1.
@@ -3298,12 +3298,12 @@
Alle Einträge anzeigen
-
+
None of the items matches the current filtering rules
Keiner der Einträge entspricht den aktuellen Filterregeln
-
+
Process was aborted by the user after %n file(s)!
Der Vorgang wurde vom Benutzter nach %n Track abgebrochen!
@@ -3311,7 +3311,7 @@
-
+
%n hour(s)
%n Stunde
@@ -3319,8 +3319,8 @@
-
-
+
+
%n minute(s)
%n Minute
@@ -3328,8 +3328,8 @@
-
-
+
+
%n second(s)
%n Sekunde
@@ -3337,7 +3337,7 @@
-
+
%n millisecond(s)
%n Millisekunde
@@ -3345,7 +3345,7 @@
-
+
Encoding: %n file(s) of %1 completed so far, please wait...
Kodiere: %n Datei von %1 abgeschlossen. Bitte warten...
@@ -3353,7 +3353,7 @@
-
+
Error: %1 of %n file(s) failed (%2). Double-click failed items for detailed information!
Fehler: %1 von %n Datei fehlgeschlagen (%2). Doppelklicken um Details anzuzeigen!
@@ -3361,7 +3361,7 @@
-
+
%n file(s) skipped
%n Datei übersprungen
@@ -3369,7 +3369,7 @@
-
+
Error: %1 of %n file(s) failed. Double-click failed items for detailed information!
Fehler: %1 von %n Datei fehlgeschlagen. Doppelklicken um detaillierte Informationen anzuzeigen!
@@ -3377,7 +3377,7 @@
-
+
All files completed successfully. Skipped %n file(s).
Alle Dateien wurden erfolgreich umgewandelt. %n Datei wurde übersprungen.
diff --git a/etc/Translation/LameXP_EN.ts b/etc/Translation/LameXP_EN.ts
index 73121ac0..95af8226 100644
--- a/etc/Translation/LameXP_EN.ts
+++ b/etc/Translation/LameXP_EN.ts
@@ -74,7 +74,7 @@
ProcessingDialog
-
+
Encoding: %n file(s) of %1 completed so far, please wait...
Encoding: %n file of %1 completed so far, please wait...
@@ -82,7 +82,7 @@
-
+
Process was aborted by the user after %n file(s)!
Process was aborted by the user after %n file!
@@ -90,7 +90,7 @@
-
+
Error: %1 of %n file(s) failed (%2). Double-click failed items for detailed information!
Error: %1 of %n file failed (%2). Double-click failed items for detailed information!
@@ -98,7 +98,7 @@
-
+
%n file(s) skipped
%n file skipped
@@ -106,7 +106,7 @@
-
+
Error: %1 of %n file(s) failed. Double-click failed items for detailed information!
Error: %1 of %n file failed. Double-click failed items for detailed information!
@@ -114,7 +114,7 @@
-
+
All files completed successfully. Skipped %n file(s).
All files completed successfully. Skipped %n file.
@@ -122,7 +122,7 @@
-
+
%n hour(s)
%n hour
@@ -130,8 +130,8 @@
-
-
+
+
%n minute(s)
%n minute
@@ -139,8 +139,8 @@
-
-
+
+
%n second(s)
%n second
@@ -148,7 +148,7 @@
-
+
%n millisecond(s)
%n millisecond
diff --git a/etc/Translation/LameXP_ES.ts b/etc/Translation/LameXP_ES.ts
index 561fafe9..16735b74 100644
--- a/etc/Translation/LameXP_ES.ts
+++ b/etc/Translation/LameXP_ES.ts
@@ -3163,58 +3163,58 @@
Codificando archivos, espere por favor...
-
+
Aborted! Waiting for running jobs to terminate...
¡Cancelado! Esperando a que finalicen las tareas que se están ejecutando...
-
+
Creating the playlist file, please wait...
Creando el archivo de lista de reproducción, espere por favor...
-
+
LameXP - Aborted
LameXP - Cancelado
-
+
Process was aborted by the user.
El proceso ha sido cancelado por el usuario.
-
+
LameXP - Error
LameXP - Error
-
+
At least one file has failed!
¡Se ha producido al menos un error!
-
-
+
+
All files completed successfully.
Todos los archivos han sido codificados correctamente.
-
+
LameXP - Done
LameXP - Finalizado
-
+
Playlist creation failed
Error al crear la lista de reproducción
-
+
The playlist file could not be created:
No ha podido crearse la lista de reproducción:
-
+
Process was aborted prematurely by the user!
¡El proceso fue cancelado prematuramente por el usuario!
@@ -3234,13 +3234,13 @@
Apagar el ordenador cuando todos los archivos hayan sido convertidos
-
+
Warning: Computer will shutdown in %1 seconds...
Aviso: El ordenador de apagará en %1 segundos...
-
-
+
+
Cancel Shutdown
Cancelar apagado
@@ -3263,7 +3263,7 @@
Espcaio libre en disco (Carpeta temporal)
-
+
Process finished after %1.
Finalizado en %1.
@@ -3298,12 +3298,12 @@
Mostrar todos los archivos
-
+
None of the items matches the current filtering rules
Ninguno de los archivos concuerda con las reglas de filtrado
-
+
Process was aborted by the user after %n file(s)!
¡El proceso fue abortado por el usuario tras %n archivo!
@@ -3311,7 +3311,7 @@
-
+
%n hour(s)
%n hora
@@ -3319,8 +3319,8 @@
-
-
+
+
%n minute(s)
%n minuto
@@ -3328,8 +3328,8 @@
-
-
+
+
%n second(s)
%n segundo
@@ -3337,7 +3337,7 @@
-
+
%n millisecond(s)
%n milisegundo
@@ -3345,7 +3345,7 @@
-
+
Encoding: %n file(s) of %1 completed so far, please wait...
Codificando: %n de %1 archivo completado, espere por favor...
@@ -3353,7 +3353,7 @@
-
+
Error: %1 of %n file(s) failed (%2). Double-click failed items for detailed information!
Error: %1 de %n archivo fallido (%2). ¡Haga doble clic en el archivo para obtener información más detallada!
@@ -3361,7 +3361,7 @@
-
+
%n file(s) skipped
%n archivo omitido
@@ -3369,7 +3369,7 @@
-
+
Error: %1 of %n file(s) failed. Double-click failed items for detailed information!
Error: %1 de %n archivo fallido. ¡Haga doble clic en el archivo para obtener información más detallada!
@@ -3377,7 +3377,7 @@
-
+
All files completed successfully. Skipped %n file(s).
Todos los archivos han sido procesados. Se ha omitido %n archivo.
diff --git a/etc/Translation/LameXP_FR.ts b/etc/Translation/LameXP_FR.ts
index 1261550c..8ccaad49 100644
--- a/etc/Translation/LameXP_FR.ts
+++ b/etc/Translation/LameXP_FR.ts
@@ -3172,58 +3172,58 @@ Ouvrir le dossier récursivement...
Encodage des fichiers, patientez...
-
+
Aborted! Waiting for running jobs to terminate...
Abandonné ! En attente pour la fin de l'exécution des travaux...
-
+
Creating the playlist file, please wait...
Création de la liste de lecture, patientez...
-
+
LameXP - Aborted
LameXP - Abandonné
-
+
Process was aborted by the user.
Le processus a été abandonné par l'utilisateur.
-
+
LameXP - Error
LameXP - Erreur
-
+
At least one file has failed!
Au moins un fichier n'a pas réussi!
-
-
+
+
All files completed successfully.
Tous les fichiers terminés avec succès.
-
+
LameXP - Done
LameXP - -Fait
-
+
Playlist creation failed
La création de liste de lecture a échoué
-
+
The playlist file could not be created:
La liste de lecture n'a pas pu être créée:
-
+
Process was aborted prematurely by the user!
Le processus a été abandonné prématurément par l'utilisateur !
@@ -3243,13 +3243,13 @@ Ouvrir le dossier récursivement...
Arrêter l'ordinateur dès que tous les fichiers ont été convertis
-
+
Warning: Computer will shutdown in %1 seconds...
Avertissement : l'ordinateur s'éteindra dans %1 secondes...
-
-
+
+
Cancel Shutdown
Annuler l'extinction
@@ -3272,7 +3272,7 @@ Ouvrir le dossier récursivement...
Espace disque libre (dossier Temp)
-
+
Process finished after %1.
Processus terminé après %1.
@@ -3308,12 +3308,12 @@ Ouvrir le dossier récursivement...
Afficher tous les éléments
-
+
None of the items matches the current filtering rules
Les règles de filtrage actuelles ne correspondent à aucun des éléments
-
+
Process was aborted by the user after %n file(s)!
Le processus a été interrompu par l'utilisateur après %n fichier !
@@ -3321,7 +3321,7 @@ Ouvrir le dossier récursivement...
-
+
%n hour(s)
%n heure
@@ -3329,8 +3329,8 @@ Ouvrir le dossier récursivement...
-
-
+
+
%n minute(s)
%n minute
@@ -3338,8 +3338,8 @@ Ouvrir le dossier récursivement...
-
-
+
+
%n second(s)
%n seconde
@@ -3347,7 +3347,7 @@ Ouvrir le dossier récursivement...
-
+
%n millisecond(s)
%n milliseconde
@@ -3355,7 +3355,7 @@ Ouvrir le dossier récursivement...
-
+
Encoding: %n file(s) of %1 completed so far, please wait...
Encodage : %n fichier sur %1 terminé pour l'instant, veuillez patienter...
@@ -3363,7 +3363,7 @@ Ouvrir le dossier récursivement...
-
+
Error: %1 of %n file(s) failed (%2). Double-click failed items for detailed information!
Erreur : %1 sur %n fichier échoué (%2). Double-cliquez sur l'élément défaillant pour plus d'informations !
@@ -3371,7 +3371,7 @@ Ouvrir le dossier récursivement...
-
+
%n file(s) skipped
%n fichier ignoré
@@ -3379,7 +3379,7 @@ Ouvrir le dossier récursivement...
-
+
Error: %1 of %n file(s) failed. Double-click failed items for detailed information!
Erreur : %1 sur %n fichier échoué. Double-cliquez sur l'élément défaillant pour plus d'informations !
@@ -3387,7 +3387,7 @@ Ouvrir le dossier récursivement...
-
+
All files completed successfully. Skipped %n file(s).
Tous les fichiers terminés avec succès. %n fichier ignoré.
diff --git a/etc/Translation/LameXP_HU.ts b/etc/Translation/LameXP_HU.ts
index 01ba64c0..5b518108 100644
--- a/etc/Translation/LameXP_HU.ts
+++ b/etc/Translation/LameXP_HU.ts
@@ -3217,149 +3217,149 @@
Többszálú feldolgozás engedélyezve: %1 példány fut párhuzamosan!
-
+
Aborted! Waiting for running jobs to terminate...
Megszakítva! Várakozás a futó feladatok lezárására...
-
+
Encoding: %n file(s) of %1 completed so far, please wait...
Kódolás: %1 - %n fájl került feldolgozásra eddig, kis türelmet...
-
+
Creating the playlist file, please wait...
Lejátszási lista fájl létrehozása, kis türelmet...
-
+
Process was aborted by the user after %n file(s)!
A folyamatot a felhasználó megszakította %n fájl után!
-
+
Process was aborted prematurely by the user!
A folyamat idő előtt meg lett szakítva a felhasználó által!
-
+
LameXP - Aborted
LameXP - Megszakítva
-
+
Process was aborted by the user.
A folyamat meg lett szakítva a felhasználó által.
-
+
Process finished after %1.
A folyamat befejeződött %1 után.
-
+
Error: %1 of %n file(s) failed (%2). Double-click failed items for detailed information!
Hiba: %n - %1 fájl feldolgozási hiba (%2). Kattintson duplán a hibás tételekre a részletes információkért!
-
+
%n file(s) skipped
%n fájl kihagyva
-
+
Error: %1 of %n file(s) failed. Double-click failed items for detailed information!
Hiba: %n - %1 fájlnál hiba lépett fel. Kattintson duplán a hibás tételekre a részletes információkért!
-
+
LameXP - Error
LameXP - Hiba
-
+
At least one file has failed!
Legalább egy fájlnál hiba lépett fel!
-
+
All files completed successfully. Skipped %n file(s).
Az összes fájl feldolgozása sikeresen befejeződött. Kihagyva %n fájl.
-
-
+
+
All files completed successfully.
Az összes fájl feldolgozása sikeresen befejeződött.
-
+
LameXP - Done
LameXP - Kész
-
+
None of the items matches the current filtering rules
Az elemek egyike sem egyezik a jelenlegi szűrési szabályokkal
-
+
Playlist creation failed
Lejátszási lista létrehozási hiba
-
+
The playlist file could not be created:
A lejátszási lista fájlt nem lehet létrehozni:
-
+
Warning: Computer will shutdown in %1 seconds...
Figyelem: a számítógép %1 másodperc múlva le fog állni...
-
-
+
+
Cancel Shutdown
Leállítás megszakítása
-
+
%n hour(s)
%n óra
-
-
+
+
%n minute(s)
%n perc
-
-
+
+
%n second(s)
%n másodperc
-
+
%n millisecond(s)
%n ezredmásodperc
diff --git a/etc/Translation/LameXP_IT.ts b/etc/Translation/LameXP_IT.ts
index d2389fcb..3e2c146e 100644
--- a/etc/Translation/LameXP_IT.ts
+++ b/etc/Translation/LameXP_IT.ts
@@ -3231,59 +3231,59 @@
Codifica File in Corso, attendi, prego...
-
+
Aborted! Waiting for running jobs to terminate...
Attendi la conclusione del lavoro in corso...
Annullato Tutto! Attendi la conclusione dei lavori in corso...
-
+
LameXP - Aborted
Annullato Tutto - LameXP
-
+
Process was aborted by the user.
Il processo è stato annullato dall'utente.
-
+
LameXP - Error
Errore - LameXP
-
+
At least one file has failed!
Almeno un file ha fallito!
-
-
+
+
All files completed successfully.
Tutti i files sono stati completati con successo.
-
+
LameXP - Done
Fatto . LameXP
-
+
Playlist creation failed
Creazione della playlist fallita
-
+
The playlist file could not be created:
Il file di playlist non può essere creato:
-
+
Creating the playlist file, please wait...
Creazione del file di playlist, attendi, prego...
-
+
Process was aborted prematurely by the user!
Il processo è stato interrotto prematuramente dall'utente!
@@ -3303,13 +3303,13 @@
Il computer sarà spento non appena tutti i file saranno stati convertiti
-
+
Warning: Computer will shutdown in %1 seconds...
Attenzione: Il Computer sarà spento tra %1 secondi...
-
-
+
+
Cancel Shutdown
Annulla Spegnimento
@@ -3332,7 +3332,7 @@
Spazio Libero su Disco (Cartella Temp)
-
+
Process finished after %1.
Processo Completato in %1.
@@ -3367,12 +3367,12 @@
Mostra Tutte le Voci
-
+
None of the items matches the current filtering rules
Nessuno degli elementi corrisponde alle regole di filtraggio attuali
-
+
Process was aborted by the user after %n file(s)!
Il processo è stato annullato dall'utente dopo %n file.
@@ -3380,7 +3380,7 @@
-
+
%n hour(s)
%n ora
@@ -3388,8 +3388,8 @@
-
-
+
+
%n minute(s)
%n minuto
@@ -3397,8 +3397,8 @@
-
-
+
+
%n second(s)
%n secondo
@@ -3406,7 +3406,7 @@
-
+
%n millisecond(s)
%n millisecondo
@@ -3414,7 +3414,7 @@
-
+
Encoding: %n file(s) of %1 completed so far, please wait...
Codifica: %n file di %1 completato finora, attendi, prego...
@@ -3422,7 +3422,7 @@
-
+
Error: %1 of %n file(s) failed (%2). Double-click failed items for detailed information!
Errore: %1 di %n file fallito (%2). Doppio clic su elementi falliti per informazioni dettagliate.
@@ -3430,7 +3430,7 @@
-
+
%n file(s) skipped
%n file saltato
@@ -3438,7 +3438,7 @@
-
+
Error: %1 of %n file(s) failed. Double-click failed items for detailed information!
Errore: %1 su %n file fallito. Doppio clic su elementi falliti per informazioni dettagliate.
@@ -3446,7 +3446,7 @@
-
+
All files completed successfully. Skipped %n file(s).
Tutti i file completati con successo. Saltato %n file.
diff --git a/etc/Translation/LameXP_KR.ts b/etc/Translation/LameXP_KR.ts
index 753df1d7..b86b96a7 100644
--- a/etc/Translation/LameXP_KR.ts
+++ b/etc/Translation/LameXP_KR.ts
@@ -3169,69 +3169,69 @@
멀티-쓰레딩 활성화: %1 인스턴스 동시 실행!
-
+
Aborted! Waiting for running jobs to terminate...
중단됨! 종료를 위해 실행중인 작업을 대기 중...
-
+
Creating the playlist file, please wait...
재생 목록 파일 생성 중, 잠시 기다려 주십시오...
-
+
Process was aborted prematurely by the user!
처리가 사용자에 의해 완전히 중단되었습니다!
-
+
LameXP - Aborted
LameXP - 중단됨
-
+
Process was aborted by the user.
처리가 사용자에 의해 중단되었습니다.
-
+
LameXP - Error
LameXP - 오류
-
+
At least one file has failed!
최소한 한 개의 파일이 실패되었습니다!
-
-
+
+
All files completed successfully.
모든 파일을 성공적으로 인코딩 완료하였습니다.
-
+
LameXP - Done
LameXP - 완료
-
+
Playlist creation failed
재생 목록 생성 실패
-
+
The playlist file could not be created:
재생 목록 파일을 생성할 수 없음:
-
+
Warning: Computer will shutdown in %1 seconds...
경고: 컴퓨터가 %1초 후 종료됩니다...
-
-
+
+
Cancel Shutdown
컴퓨터 종료 취소
@@ -3254,7 +3254,7 @@
여유 디스크 공간(임시 폴더)
-
+
Process finished after %1.
작업 경과 시간: %1 소요됨.
@@ -3289,77 +3289,77 @@
모든 항목 표시
-
+
None of the items matches the current filtering rules
현재 필터링 규칙과 일치하지 항목이 없습니다.
-
+
Process was aborted by the user after %n file(s)!
%n 파일 후 사용자에 의해 작업이 취소되었습니다!
-
+
%n hour(s)
%n 시간
-
-
+
+
%n minute(s)
%n 분
-
-
+
+
%n second(s)
%n 초
-
+
%n millisecond(s)
%n ms
-
+
Encoding: %n file(s) of %1 completed so far, please wait...
인코딩: 현재 %n / %1 파일 완료됨, 잠시만 기다려 주십시오...
-
+
Error: %1 of %n file(s) failed (%2). Double-click failed items for detailed information!
오류: %1/%n 파일 실패 (%2). 자세한 정보를 보려면 실패 항목을 더블 클릭하십시오!
-
+
%n file(s) skipped
%n 파일 건너뜀
-
+
Error: %1 of %n file(s) failed. Double-click failed items for detailed information!
오류: : %1 / %n 파일 실패. 자세한 정보를 보려면 실패 항목을 더블 클릭하십시오!
-
+
All files completed successfully. Skipped %n file(s).
모든 파일들이 성공적으로 완료되었습니다. %n 파일 건너뜀.
diff --git a/etc/Translation/LameXP_PL.ts b/etc/Translation/LameXP_PL.ts
index f7b7e32f..4ef2503c 100644
--- a/etc/Translation/LameXP_PL.ts
+++ b/etc/Translation/LameXP_PL.ts
@@ -3234,12 +3234,12 @@
Wielowątkowosć włączona: Równolegle wykonywanych jest %1 kodowań!
-
+
Aborted! Waiting for running jobs to terminate...
Przerwano! Czekanie na wyłączenie procesu...
-
+
Encoding: %n file(s) of %1 completed so far, please wait...
Kompresowanie: %n plik z %1 został do tej pory zakończony, proszę czekać...
@@ -3248,17 +3248,17 @@
-
+
Creating the playlist file, please wait...
Tworzenie pliku playlisty, proszę czekać...
-
+
Process was aborted prematurely by the user!
Proces został przedwcześnie zakończony przez użytkownika!
-
+
Process was aborted by the user after %n file(s)!
Proces został zakończony przez użytkownika po zakończeniu %n pliku!
@@ -3267,22 +3267,22 @@
-
+
LameXP - Aborted
LameXP - Przerwano
-
+
Process was aborted by the user.
Proces został przerwany przez użytkownika.
-
+
Process finished after %1.
Proces został zakończony po %1.
-
+
Error: %1 of %n file(s) failed (%2). Double-click failed items for detailed information!
Błąd: %1 z %n pliku zakończono niepowodzeniem (%2). Kliknij dwukrotnie aby uzyskać więcej informacji!
@@ -3291,7 +3291,7 @@
-
+
%n file(s) skipped
pominięto %n plik
@@ -3300,7 +3300,7 @@
-
+
Error: %1 of %n file(s) failed. Double-click failed items for detailed information!
Błąd: %1 z %n pliku zakończono niepowodzeniem. Kliknij dwukrotnie aby uzyskać więcej informacji!
@@ -3309,7 +3309,7 @@
-
+
All files completed successfully. Skipped %n file(s).
Wszystkie zadania wykonano pomyślnie. Pominięto %n plik.
@@ -3318,54 +3318,54 @@
-
+
LameXP - Error
LameXP - Błąd
-
+
At least one file has failed!
Przynajmniej jeden plik nie został skompresowany!
-
-
+
+
All files completed successfully.
Kompresja wszystkich plików zakończona powodzeniem.
-
+
LameXP - Done
LameXP - Zrobione
-
+
None of the items matches the current filtering rules
Żadna z pozycji nie spełnia reguł filtra
-
+
Playlist creation failed
Tworzenie playlisty zakończone niepowodzeniem
-
+
The playlist file could not be created:
Playlista nie mogła zostać utworzona:
-
+
Warning: Computer will shutdown in %1 seconds...
Ostrzeżenie: Komputer zostanie zamknięty za %1 sekund/y...
-
-
+
+
Cancel Shutdown
Anuluj wyłączenie komputera
-
+
%n hour(s)
%n godzina
@@ -3374,8 +3374,8 @@
-
-
+
+
%n minute(s)
%n minuta
@@ -3384,8 +3384,8 @@
-
-
+
+
%n second(s)
%n sekunda
@@ -3394,7 +3394,7 @@
-
+
%n millisecond(s)
%n milisekunda
diff --git a/etc/Translation/LameXP_RU.ts b/etc/Translation/LameXP_RU.ts
index 4829fa32..d53a26b0 100644
--- a/etc/Translation/LameXP_RU.ts
+++ b/etc/Translation/LameXP_RU.ts
@@ -3188,58 +3188,58 @@
Многопоточность включена: Выполняется %1 экземпляра(ов) параллельно!
-
+
Aborted! Waiting for running jobs to terminate...
Отменено! Ожидание завершения запущенных заданий...
-
+
Creating the playlist file, please wait...
Создаю плэйлист, пожалуйста, подождите...
-
+
Process was aborted prematurely by the user!
Процесс был преждевременно прерван пользователем!
-
+
LameXP - Aborted
LameXP - Отменено
-
+
Process was aborted by the user.
Процесс был прерван пользователем.
-
+
LameXP - Error
LameXP - Ошибка
-
+
At least one file has failed!
Ошибка как минимум с 1 файлом!
-
+
LameXP - Done
LameXP - Завершено
-
-
+
+
All files completed successfully.
Все файлы преобразовались успешно.
-
+
Playlist creation failed
Не могу создать плэйлист
-
+
The playlist file could not be created:
Плэйлист не может быть создан:
@@ -3249,13 +3249,13 @@
Выключить компьютер после завершения преобразования всех файлов
-
+
Warning: Computer will shutdown in %1 seconds...
Внимание: Компьютер выключится через %1 секунд...
-
-
+
+
Cancel Shutdown
Отменить выключение
@@ -3278,7 +3278,7 @@
Свободное место на диске (Временная папка)
-
+
Process finished after %1.
Процесс завершился спустя %1.
@@ -3313,12 +3313,12 @@
Показать все
-
+
None of the items matches the current filtering rules
Ни один из элементов не удовлетворяет правилам фильтра
-
+
Process was aborted by the user after %n file(s)!
Процесс был прерван пользователем после %n файла!
@@ -3327,7 +3327,7 @@
-
+
%n hour(s)
%n час
@@ -3336,8 +3336,8 @@
-
-
+
+
%n minute(s)
%n минута
@@ -3346,8 +3346,8 @@
-
-
+
+
%n second(s)
%n секунда
@@ -3356,7 +3356,7 @@
-
+
%n millisecond(s)
%n миллисекунда
@@ -3365,7 +3365,7 @@
-
+
Encoding: %n file(s) of %1 completed so far, please wait...
Кодирование: %n файл из %1 завершено, пожалуйста ждите...
@@ -3374,7 +3374,7 @@
-
+
Error: %1 of %n file(s) failed (%2). Double-click failed items for detailed information!
Ошибка в: %1 из %n файла (%2). Узнайте подробности по двойному щелчку на элементе с ошибкой!
@@ -3383,7 +3383,7 @@
-
+
%n file(s) skipped
%n файл пропущен
@@ -3392,7 +3392,7 @@
-
+
Error: %1 of %n file(s) failed. Double-click failed items for detailed information!
Ошибка в: %1 из %n файла. Узнайте подробности по двойному щелчку на элементе с ошибкой!
@@ -3401,7 +3401,7 @@
-
+
All files completed successfully. Skipped %n file(s).
Все файлы успешно преобразованы. Пропущен %n файл.
diff --git a/etc/Translation/LameXP_SV.ts b/etc/Translation/LameXP_SV.ts
index 072a1730..2b9ce045 100644
--- a/etc/Translation/LameXP_SV.ts
+++ b/etc/Translation/LameXP_SV.ts
@@ -3227,12 +3227,12 @@
Flertrådskörning aktiverad: Kör %1 parallella instanser!
-
+
Aborted! Waiting for running jobs to terminate...
Avbrutet! Väntar på att aktiva processer skall avslutas...
-
+
Encoding: %n file(s) of %1 completed so far, please wait...
Kodar! %n fil av%1 slutförd. vänta...
@@ -3240,17 +3240,17 @@
-
+
Creating the playlist file, please wait...
Skapar spelningslista, vänta...
-
+
Process was aborted prematurely by the user!
Åtgärden avbröts i förtid av användaren!
-
+
Process was aborted by the user after %n file(s)!
Åtgärden avbröts av användaren efter %n fil!
@@ -3258,22 +3258,22 @@
-
+
LameXP - Aborted
LameXP - Avbrutet
-
+
Process was aborted by the user.
Åtgärden avbröts av användaren.
-
+
Process finished after %1.
Åtgärden slutförd efter %1.
-
+
Error: %1 of %n file(s) failed (%2). Double-click failed items for detailed information!
Fel! %1 av %n filer misslyckades (%2). Dubbelklicka på misslyckat objekt för info!
@@ -3281,7 +3281,7 @@
-
+
%n file(s) skipped
%n fil hoppades över
@@ -3289,7 +3289,7 @@
-
+
Error: %1 of %n file(s) failed. Double-click failed items for detailed information!
Fel! %1 av %n filer misslyckades. Dubbelklicka på misslyckat objekt för info!
@@ -3297,7 +3297,7 @@
-
+
All files completed successfully. Skipped %n file(s).
Alla filer korrekt slutförda. %n fil hoppades över.
@@ -3305,54 +3305,54 @@
-
+
LameXP - Error
LameXP - Fel
-
+
At least one file has failed!
Minst en fil har misslyckats!
-
-
+
+
All files completed successfully.
Alla filer korrekt omkodade.
-
+
LameXP - Done
LameXP - Klar
-
+
None of the items matches the current filtering rules
Inga objekt matchar aktuell filtrering
-
+
Playlist creation failed
Kunde inte skapa spelningslista
-
+
The playlist file could not be created:
Spelningslistan kunde inte skapas:
-
+
Warning: Computer will shutdown in %1 seconds...
Varning! Datorn kommer att stängas av om %1 sekunder...
-
-
+
+
Cancel Shutdown
Avbryt avstängning
-
+
%n hour(s)
%n timma
@@ -3360,8 +3360,8 @@
-
-
+
+
%n minute(s)
%n minut
@@ -3369,8 +3369,8 @@
-
-
+
+
%n second(s)
%n sekund
@@ -3378,7 +3378,7 @@
-
+
%n millisecond(s)
%n millisekund
diff --git a/etc/Translation/LameXP_TW.ts b/etc/Translation/LameXP_TW.ts
index 07a1c284..95db3f70 100644
--- a/etc/Translation/LameXP_TW.ts
+++ b/etc/Translation/LameXP_TW.ts
@@ -3154,58 +3154,58 @@
正在編碼文件,請稍候...
-
+
Aborted! Waiting for running jobs to terminate...
中止! 正在等待運行項目終止...
-
+
Creating the playlist file, please wait...
創建播放列表文件,請稍候...
-
+
LameXP - Aborted
LameXP - 中止
-
+
Process was aborted by the user.
進程被用戶終止.
-
+
LameXP - Error
LameXP - 錯誤
-
+
At least one file has failed!
至少一個文件失敗 !
-
-
+
+
All files completed successfully.
已成功完成的所有文件.
-
+
LameXP - Done
LameXP - 完成了
-
+
Playlist creation failed
播放列表創建失敗
-
+
The playlist file could not be created:
無法創建播放列表文件:
-
+
Process was aborted prematurely by the user!
用戶提前中止了進程 !
@@ -3225,13 +3225,13 @@
所有文件都轉換后自動關閉計算機
-
+
Warning: Computer will shutdown in %1 seconds...
警告:計算機將在 %1 秒關機...
-
-
+
+
Cancel Shutdown
取消關機
@@ -3254,7 +3254,7 @@
可用的磁盤空間(Temp文件夾)
-
+
Process finished after %1.
過程執行了 %1.
@@ -3289,77 +3289,77 @@
顯示所有項目
-
+
None of the items matches the current filtering rules
此項目都不匹配當前的過濾規則
-
+
Process was aborted by the user after %n file(s)!
用戶在第 %n 個文件時進程被中止!
-
+
%n hour(s)
%n 小時
-
-
+
+
%n minute(s)
%n 分鐘
-
-
+
+
%n second(s)
%n 秒
-
+
%n millisecond(s)
%n 毫秒
-
+
Encoding: %n file(s) of %1 completed so far, please wait...
編碼: %1 個文件迄今已完成 %n 個文件 , 請稍候...
-
+
Error: %1 of %n file(s) failed (%2). Double-click failed items for detailed information!
錯誤: %n 個文件 %1 失敗 %2. 雙擊失敗的項目的詳細信息!
-
+
%n file(s) skipped
跳過 %n 個文件
-
+
Error: %1 of %n file(s) failed. Double-click failed items for detailed information!
錯誤: 總 %n 個文件 %1 個失敗. 雙擊失敗的項目的詳細信息!
-
+
All files completed successfully. Skipped %n file(s).
所有文件已成功完成. 跳過 %n 個文件.
diff --git a/etc/Translation/LameXP_UK.ts b/etc/Translation/LameXP_UK.ts
index 00e5feb0..e406f8f1 100644
--- a/etc/Translation/LameXP_UK.ts
+++ b/etc/Translation/LameXP_UK.ts
@@ -3176,58 +3176,58 @@
Багатопотоковість увімкнено: Паралельно запущено %1 копій!
-
+
Aborted! Waiting for running jobs to terminate...
Перервано! Чекаємо на завершення запущених завдань...
-
+
Creating the playlist file, please wait...
Йде створення списку відтворення, будь ласка, зачекайте...
-
+
Process was aborted prematurely by the user!
Процес було перервано користувачем завчасно!
-
+
LameXP - Aborted
LameXP - Перервано
-
+
Process was aborted by the user.
Процес було перервано користувачем.
-
+
LameXP - Error
LameXP - Помилка
-
+
At least one file has failed!
Стався збій при обробці щонайменше одного файла!
-
+
LameXP - Done
LameXP - Виконано
-
-
+
+
All files completed successfully.
Обробка усіх файлів успішно завершена.
-
+
Playlist creation failed
Збій створення списка відтворення
-
+
The playlist file could not be created:
Неможливо створити файл списка відтворення:
@@ -3242,13 +3242,13 @@
Вимкнути комп'ютер після завершення конвертації усіх файлів
-
+
Warning: Computer will shutdown in %1 seconds...
Попередження: Комп'ютер буде вимкнено через %1 секунд...
-
-
+
+
Cancel Shutdown
Відмінити Вимкнення
@@ -3271,7 +3271,7 @@
Вільне місце на диску (тека тимчасових файлів)
-
+
Process finished after %1.
Процес тривав %1.
@@ -3306,12 +3306,12 @@
Відображати всі записи
-
+
None of the items matches the current filtering rules
Жодного запису не підпадає під поточні правила фільтрування
-
+
Process was aborted by the user after %n file(s)!
Процес було перервано користувачем після %n файлу!
@@ -3320,7 +3320,7 @@
-
+
%n hour(s)
%n годину
@@ -3329,8 +3329,8 @@
-
-
+
+
%n minute(s)
%n хвилину
@@ -3339,8 +3339,8 @@
-
-
+
+
%n second(s)
%n секунду
@@ -3349,7 +3349,7 @@
-
+
%n millisecond(s)
%n мілісекунду
@@ -3358,7 +3358,7 @@
-
+
Encoding: %n file(s) of %1 completed so far, please wait...
Кодування: %n файл з %1 поки що оброблено, будь ласка, зачекайте...
@@ -3367,7 +3367,7 @@
-
+
Error: %1 of %n file(s) failed (%2). Double-click failed items for detailed information!
Помилка: збій обробки %1 з %n файлів (%2). Для детальної інформації необхідно зробити подвійний клік на потрібних елементах!
@@ -3376,7 +3376,7 @@
-
+
%n file(s) skipped
%n файл пропущено
@@ -3385,7 +3385,7 @@
-
+
Error: %1 of %n file(s) failed. Double-click failed items for detailed information!
Помилка: збій обробки %1 з %n файлів. Для детальної інформації необхідно зробити подвійний клік на потрібних елементах!
@@ -3394,7 +3394,7 @@
-
+
All files completed successfully. Skipped %n file(s).
Всі файли оброблено успішно. Пропущено %n файл.
diff --git a/etc/Translation/LameXP_ZH.ts b/etc/Translation/LameXP_ZH.ts
index d45f4a0e..e3075ad8 100644
--- a/etc/Translation/LameXP_ZH.ts
+++ b/etc/Translation/LameXP_ZH.ts
@@ -3154,58 +3154,58 @@
正在编码文件,请稍候...
-
+
Aborted! Waiting for running jobs to terminate...
中止! 正在等待运行项目终止...
-
+
Creating the playlist file, please wait...
创建播放列表文件,请稍候...
-
+
LameXP - Aborted
LameXP - 中止
-
+
Process was aborted by the user.
进程被用户中止。
-
+
LameXP - Error
LameXP - 错误
-
+
At least one file has failed!
至少一个文件失败 !
-
-
+
+
All files completed successfully.
已成功完成所有文件。
-
+
LameXP - Done
LameXP - 完成
-
+
Playlist creation failed
播放列表创建失败
-
+
The playlist file could not be created:
无法创建播放列表文件:
-
+
Process was aborted prematurely by the user!
用户提前中止了进程!
@@ -3225,13 +3225,13 @@
所有文件都转换后自动关闭计算机
-
+
Warning: Computer will shutdown in %1 seconds...
警告:计算机将在 %1 秒后关机...
-
-
+
+
Cancel Shutdown
取消关机
@@ -3254,7 +3254,7 @@
可用磁盘空间(Temp文件夹)
-
+
Process finished after %1.
过程执行了 %1。
@@ -3289,77 +3289,77 @@
显示所有项目
-
+
None of the items matches the current filtering rules
所有项目都不匹配当前的筛选规则
-
+
Process was aborted by the user after %n file(s)!
用户在第 %n 个文件时中止进程!
-
+
%n hour(s)
%n 小时
-
-
+
+
%n minute(s)
%n 分钟
-
-
+
+
%n second(s)
%n 秒
-
+
%n millisecond(s)
%n 毫秒
-
+
Encoding: %n file(s) of %1 completed so far, please wait...
编码: %1 个文件迄今已完成 %n 个文件 , 请稍候...
-
+
Error: %1 of %n file(s) failed (%2). Double-click failed items for detailed information!
错误: %n 个文件中 %1 个失败 (%2). 双击查看失败项目的详细信息!
-
+
%n file(s) skipped
跳过 %n 个文件
-
+
Error: %1 of %n file(s) failed. Double-click failed items for detailed information!
错误: %n 个文件中 %1 个失败。 双击失败的项目的详细信息!
-
+
All files completed successfully. Skipped %n file(s).
所有文件已成功完成。 跳过 %n 个文件。
diff --git a/res/Tools_Decd_A.qrc b/res/Tools_Decd_A.qrc
index f1ea73bf..5bc0e703 100644
--- a/res/Tools_Decd_A.qrc
+++ b/res/Tools_Decd_A.qrc
@@ -10,6 +10,7 @@
tools/oggdec.exe
tools/opusdec.i386.exe
tools/opusdec.sse2.exe
- tools/refalac.exe
+ tools/refalac.i386.exe
+ tools/refalac.x64.exe
diff --git a/res/tools/mediainfo.i386.exe b/res/tools/mediainfo.i386.exe
index 95f5b605..45fb3c5a 100644
Binary files a/res/tools/mediainfo.i386.exe and b/res/tools/mediainfo.i386.exe differ
diff --git a/res/tools/mediainfo.x64.exe b/res/tools/mediainfo.x64.exe
index 36aafb67..73dde5ee 100644
Binary files a/res/tools/mediainfo.x64.exe and b/res/tools/mediainfo.x64.exe differ
diff --git a/res/tools/refalac.exe b/res/tools/refalac.exe
deleted file mode 100644
index 6629f264..00000000
Binary files a/res/tools/refalac.exe and /dev/null differ
diff --git a/res/tools/refalac.i386.exe b/res/tools/refalac.i386.exe
new file mode 100644
index 00000000..e2e39da4
Binary files /dev/null and b/res/tools/refalac.i386.exe differ
diff --git a/res/tools/refalac.x64.exe b/res/tools/refalac.x64.exe
new file mode 100644
index 00000000..d55f8e08
Binary files /dev/null and b/res/tools/refalac.x64.exe differ
diff --git a/src/Config.h b/src/Config.h
index fd47c601..eac58720 100644
--- a/src/Config.h
+++ b/src/Config.h
@@ -34,8 +34,8 @@
#define VER_LAMEXP_MINOR_HI 1
#define VER_LAMEXP_MINOR_LO 4
#define VER_LAMEXP_TYPE Alpha
-#define VER_LAMEXP_PATCH 1
-#define VER_LAMEXP_BUILD 1856
+#define VER_LAMEXP_PATCH 4
+#define VER_LAMEXP_BUILD 1866
#define VER_LAMEXP_CONFG 1818
///////////////////////////////////////////////////////////////////////////////
@@ -50,10 +50,9 @@
///////////////////////////////////////////////////////////////////////////////
#define VER_LAMEXP_TOOL_NEROAAC 1540
-#define VER_LAMEXP_TOOL_FHGAACENC 20120806
+#define VER_LAMEXP_TOOL_FHGAACENC 20151024
#define VER_LAMEXP_TOOL_FDKAACENC 62
-#define VER_LAMEXP_TOOL_QAAC 244
-#define VER_LAMEXP_TOOL_COREAUDIO 7980
+#define VER_LAMEXP_TOOL_QAAC 258
///////////////////////////////////////////////////////////////////////////////
// Helper macros (aka: having fun with the C pre-processor)
diff --git a/src/Dialog_Processing.cpp b/src/Dialog_Processing.cpp
index d65757c0..4334f4c8 100644
--- a/src/Dialog_Processing.cpp
+++ b/src/Dialog_Processing.cpp
@@ -569,10 +569,9 @@ void ProcessingDialog::startNextJob(void)
m_runningThreads++;
AudioFileModel currentFile = updateMetaInfo(m_pendingJobs.takeFirst());
- bool nativeResampling = false;
//Create encoder instance
- AbstractEncoder *encoder = EncoderRegistry::createInstance(m_settings->compressionEncoder(), m_settings, &nativeResampling);
+ AbstractEncoder *encoder = EncoderRegistry::createInstance(m_settings->compressionEncoder(), m_settings);
//Create processing thread
ProcessThread *thread = new ProcessThread
@@ -589,11 +588,19 @@ void ProcessingDialog::startNextJob(void)
{
thread->addFilter(new DownmixFilter());
}
- if((m_settings->samplingRate() > 0) && !nativeResampling)
+ if(m_settings->samplingRate() > 0)
{
- if(SettingsModel::samplingRates[m_settings->samplingRate()] != currentFile.techInfo().audioSamplerate() || currentFile.techInfo().audioSamplerate() == 0)
+ const int targetRate = SettingsModel::samplingRates[qBound(1, m_settings->samplingRate(), 6)];
+ if((targetRate != currentFile.techInfo().audioSamplerate()) || (currentFile.techInfo().audioSamplerate() == 0))
{
- thread->addFilter(new ResampleFilter(SettingsModel::samplingRates[m_settings->samplingRate()]));
+ if (encoder->toEncoderInfo()->isResamplingSupported())
+ {
+ encoder->setSamplingRate(targetRate);
+ }
+ else
+ {
+ thread->addFilter(new ResampleFilter(targetRate));
+ }
}
}
if((m_settings->toneAdjustBass() != 0) || (m_settings->toneAdjustTreble() != 0))
diff --git a/src/Encoder_AAC.cpp b/src/Encoder_AAC.cpp
index 9322e393..8407d910 100644
--- a/src/Encoder_AAC.cpp
+++ b/src/Encoder_AAC.cpp
@@ -114,6 +114,11 @@ class AACEncoderInfo : public AbstractEncoderInfo
static const char* s_extension = "mp4";
return s_extension;
}
+
+ virtual bool isResamplingSupported(void) const
+ {
+ return false;
+ }
}
static const g_aacEncoderInfo;
diff --git a/src/Encoder_AAC_FDK.cpp b/src/Encoder_AAC_FDK.cpp
index cc4c4bb5..c06d8dd1 100644
--- a/src/Encoder_AAC_FDK.cpp
+++ b/src/Encoder_AAC_FDK.cpp
@@ -120,6 +120,11 @@ class FDKAACEncoderInfo : public AbstractEncoderInfo
static const char* s_extension = "mp4";
return s_extension;
}
+
+ virtual bool isResamplingSupported(void) const
+ {
+ return false;
+ }
}
static const g_fdkAacEncoderInfo;
diff --git a/src/Encoder_AAC_FHG.cpp b/src/Encoder_AAC_FHG.cpp
index 238c9b6e..3c942528 100644
--- a/src/Encoder_AAC_FHG.cpp
+++ b/src/Encoder_AAC_FHG.cpp
@@ -117,6 +117,11 @@ class FHGAACEncoderInfo : public AbstractEncoderInfo
static const char* s_extension = "mp4";
return s_extension;
}
+
+ virtual bool isResamplingSupported(void) const
+ {
+ return false;
+ }
}
static const g_fhgAacEncoderInfo;
@@ -179,7 +184,7 @@ bool FHGAACEncoder::encode(const QString &sourceFile, const AudioFileModel_MetaI
break;
}
- args << "--dll" << m_binary_dll;
+ //args << "--dll" << m_binary_dll;
if(!m_configCustomParams.isEmpty()) args << m_configCustomParams.split(" ", QString::SkipEmptyParts);
diff --git a/src/Encoder_AAC_QAAC.cpp b/src/Encoder_AAC_QAAC.cpp
index b033d4f6..55b8df32 100644
--- a/src/Encoder_AAC_QAAC.cpp
+++ b/src/Encoder_AAC_QAAC.cpp
@@ -44,6 +44,8 @@ static int index2bitrate(const int index)
static const int g_qaacVBRQualityLUT[16] = {0 ,9, 18, 27, 36, 45, 54, 63, 73, 82, 91, 100, 109, 118, 127, INT_MAX};
+static const int RESAMPLING_QUALITY = 127;
+
///////////////////////////////////////////////////////////////////////////////
// Encoder Info
///////////////////////////////////////////////////////////////////////////////
@@ -125,6 +127,11 @@ class QAACEncoderInfo : public AbstractEncoderInfo
static const char* s_extension = "mp4";
return s_extension;
}
+
+ virtual bool isResamplingSupported(void) const
+ {
+ return true;
+ }
}
static const g_qaacEncoderInfo;
@@ -143,6 +150,7 @@ QAACEncoder::QAACEncoder(void)
}
m_configProfile = 0;
+ m_algorithmQuality = 2;
}
QAACEncoder::~QAACEncoder(void)
@@ -187,6 +195,13 @@ bool QAACEncoder::encode(const QString &sourceFile, const AudioFileModel_MetaInf
break;
}
+ args << "--quality" << QString::number(qBound(0, m_algorithmQuality, 2));
+ if (m_configSamplingRate > 0)
+ {
+ args << QString("--native-resampler=bats,%0").arg(QString::number(RESAMPLING_QUALITY));
+ args << "--rate" << QString::number(m_configSamplingRate);
+ }
+
if(!m_configCustomParams.isEmpty()) args << m_configCustomParams.split(" ", QString::SkipEmptyParts);
if(!metaInfo.title().isEmpty()) args << "--title" << cleanTag(metaInfo.title());
@@ -288,6 +303,11 @@ void QAACEncoder::setProfile(int profile)
m_configProfile = profile;
}
+void QAACEncoder::setAlgoQuality(int value)
+{
+ m_algorithmQuality = qBound(0, value, 2);
+}
+
const AbstractEncoderInfo *QAACEncoder::getEncoderInfo(void)
{
return &g_qaacEncoderInfo;
diff --git a/src/Encoder_AAC_QAAC.h b/src/Encoder_AAC_QAAC.h
index a1041725..cddda352 100644
--- a/src/Encoder_AAC_QAAC.h
+++ b/src/Encoder_AAC_QAAC.h
@@ -39,6 +39,7 @@ public:
//Advanced options
virtual void setProfile(int profile);
+ virtual void setAlgoQuality(int value);
//Encoder info
virtual const AbstractEncoderInfo *toEncoderInfo(void) const { return getEncoderInfo(); }
@@ -48,4 +49,5 @@ private:
const QString m_binary_qaac32;
const QString m_binary_qaac64;
int m_configProfile;
+ int m_algorithmQuality;
};
diff --git a/src/Encoder_AC3.cpp b/src/Encoder_AC3.cpp
index 4068cdfd..ee26b535 100644
--- a/src/Encoder_AC3.cpp
+++ b/src/Encoder_AC3.cpp
@@ -113,6 +113,11 @@ class AC3EncoderInfo : public AbstractEncoderInfo
static const char* s_extension = "ac3";
return s_extension;
}
+
+ virtual bool isResamplingSupported(void) const
+ {
+ return false;
+ }
}
static const g_aftenEncoderInfo;
diff --git a/src/Encoder_Abstract.cpp b/src/Encoder_Abstract.cpp
index 2f99bc53..47947de3 100644
--- a/src/Encoder_Abstract.cpp
+++ b/src/Encoder_Abstract.cpp
@@ -33,19 +33,51 @@ AbstractEncoder::AbstractEncoder(void)
m_configBitrate = 0;
m_configRCMode = 0;
m_configCustomParams.clear();
+ m_configSamplingRate = 0;
}
AbstractEncoder::~AbstractEncoder(void)
{
}
+
/*
* Setters
*/
-void AbstractEncoder::setBitrate(int bitrate) { m_configBitrate = qMax(0, bitrate); }
-void AbstractEncoder::setRCMode(int mode) { m_configRCMode = qMax(0, mode); }
-void AbstractEncoder::setCustomParams(const QString &customParams) { m_configCustomParams = customParams.trimmed(); }
+void AbstractEncoder::setRCMode(const int &mode)
+{
+ if (!toEncoderInfo()->isModeSupported(qMax(0, mode)))
+ {
+ MUTILS_THROW("This RC mode is not supported by the encoder!");
+ }
+ m_configRCMode = qMax(0, mode);
+ m_configBitrate = qBound(0, m_configBitrate, toEncoderInfo()->valueCount(m_configRCMode) - 1);
+}
+
+void AbstractEncoder::setBitrate(const int &bitrate)
+{
+ if (qMax(0, bitrate) >= toEncoderInfo()->valueCount(m_configRCMode))
+ {
+ MUTILS_THROW("The specified bitrate/quality is out of range!");
+ }
+ m_configBitrate = qMax(0, bitrate);
+}
+
+void AbstractEncoder::setCustomParams(const QString &customParams)
+{
+ m_configCustomParams = customParams.trimmed();
+}
+
+void AbstractEncoder::setSamplingRate(const int &value)
+{
+ if (!toEncoderInfo()->isResamplingSupported())
+ {
+ MUTILS_THROW("This encoder does *not* support native resampling!");
+ }
+ m_configSamplingRate = qBound(0, value, 48000);
+};
+
/*
* Default implementation
@@ -75,6 +107,7 @@ const bool AbstractEncoder::needsTimingInfo(void)
return false;
}
+
/*
* Helper functions
*/
diff --git a/src/Encoder_Abstract.h b/src/Encoder_Abstract.h
index f688a266..c84d428c 100644
--- a/src/Encoder_Abstract.h
+++ b/src/Encoder_Abstract.h
@@ -49,6 +49,7 @@ public:
value_type_t;
virtual bool isModeSupported(int mode) const = 0; //Returns whether the encoder does support the current RC mode
+ virtual bool isResamplingSupported(void) const = 0; //Returns whether the encoder has "native" resampling support
virtual int valueCount(int mode) const = 0; //The number of bitrate/quality values for current RC mode
virtual int valueAt(int mode, int index) const = 0; //The bitrate/quality value at 'index' for the current RC mode
virtual int valueType(int mode) const = 0; //The display type of the values for the current RC mode
@@ -73,8 +74,9 @@ public:
virtual const bool needsTimingInfo(void);
//Common setter methods
- virtual void setBitrate(int bitrate);
- virtual void setRCMode(int mode);
+ virtual void setBitrate(const int &bitrate);
+ virtual void setRCMode(const int &mode);
+ virtual void setSamplingRate(const int &value);
virtual void setCustomParams(const QString &customParams);
//Encoder info
@@ -88,6 +90,7 @@ public:
protected:
int m_configBitrate; //Bitrate *or* VBR-quality-level
int m_configRCMode; //Rate-control mode
+ int m_configSamplingRate; //Target sampling rate
QString m_configCustomParams; //Custom parameters, if any
//Helper functions
diff --git a/src/Encoder_DCA.cpp b/src/Encoder_DCA.cpp
index 61a20973..2c2ecfc5 100644
--- a/src/Encoder_DCA.cpp
+++ b/src/Encoder_DCA.cpp
@@ -115,6 +115,11 @@ class DCAEncoderInfo : public AbstractEncoderInfo
static const char* s_extension = "dts";
return s_extension;
}
+
+ virtual bool isResamplingSupported(void) const
+ {
+ return false;
+ }
}
static const g_dcaEncoderInfo;
diff --git a/src/Encoder_FLAC.cpp b/src/Encoder_FLAC.cpp
index 4cea9b04..3f63e3ab 100644
--- a/src/Encoder_FLAC.cpp
+++ b/src/Encoder_FLAC.cpp
@@ -109,6 +109,11 @@ public:
static const char* s_extension = "flac";
return s_extension;
}
+
+ virtual bool isResamplingSupported(void) const
+ {
+ return false;
+ }
}
static const g_flacEncoderInfo;
diff --git a/src/Encoder_MAC.cpp b/src/Encoder_MAC.cpp
index 05018cc3..5778a9f9 100644
--- a/src/Encoder_MAC.cpp
+++ b/src/Encoder_MAC.cpp
@@ -109,6 +109,11 @@ class MACEncoderInfo : public AbstractEncoderInfo
static const char* s_extension = "ape";
return s_extension;
}
+
+ virtual bool isResamplingSupported(void) const
+ {
+ return false;
+ }
}
static const g_macEncoderInfo;
diff --git a/src/Encoder_MP3.cpp b/src/Encoder_MP3.cpp
index 3e7f77d6..bd5c86da 100644
--- a/src/Encoder_MP3.cpp
+++ b/src/Encoder_MP3.cpp
@@ -114,6 +114,11 @@ class MP3EncoderInfo : public AbstractEncoderInfo
static const char* s_extension = "mp3";
return s_extension;
}
+
+ virtual bool isResamplingSupported(void) const
+ {
+ return true;
+ }
}
static const g_mp3EncoderInfo;
@@ -334,11 +339,6 @@ void MP3Encoder::setBitrateLimits(int minimumBitrate, int maximumBitrate)
m_configBitrateMaximum = maximumBitrate;
}
-void MP3Encoder::setSamplingRate(int value)
-{
- m_configSamplingRate = value;
-}
-
void MP3Encoder::setChannelMode(int value)
{
m_configChannelMode = value;
diff --git a/src/Encoder_MP3.h b/src/Encoder_MP3.h
index 13e89e46..0bf4c710 100644
--- a/src/Encoder_MP3.h
+++ b/src/Encoder_MP3.h
@@ -41,7 +41,6 @@ public:
//Advanced options
virtual void setAlgoQuality(int value);
virtual void setBitrateLimits(int minimumBitrate, int maximumBitrate);
- virtual void setSamplingRate(int value);
virtual void setChannelMode(int value);
//Encoder info
@@ -53,7 +52,6 @@ private:
int m_algorithmQuality;
int m_configBitrateMaximum;
int m_configBitrateMinimum;
- int m_configSamplingRate;
int m_configChannelMode;
int clipBitrate(int bitrate);
diff --git a/src/Encoder_Opus.cpp b/src/Encoder_Opus.cpp
index 3a5898f5..eeb01224 100644
--- a/src/Encoder_Opus.cpp
+++ b/src/Encoder_Opus.cpp
@@ -110,6 +110,11 @@ class OpusEncoderInfo : public AbstractEncoderInfo
static const char* s_extension = "opus";
return s_extension;
}
+
+ virtual bool isResamplingSupported(void) const
+ {
+ return false;
+ }
}
static const g_opusEncoderInfo;
diff --git a/src/Encoder_Vorbis.cpp b/src/Encoder_Vorbis.cpp
index 6d4873b1..0c6ffbb2 100644
--- a/src/Encoder_Vorbis.cpp
+++ b/src/Encoder_Vorbis.cpp
@@ -111,6 +111,11 @@ class VorbisEncoderInfo : public AbstractEncoderInfo
static const char* s_extension = "ogg";
return s_extension;
}
+
+ virtual bool isResamplingSupported(void) const
+ {
+ return true;
+ }
}
static const g_vorbisEncoderInfo;
@@ -275,11 +280,6 @@ void VorbisEncoder::setBitrateLimits(int minimumBitrate, int maximumBitrate)
m_configBitrateMaximum = maximumBitrate;
}
-void VorbisEncoder::setSamplingRate(int value)
-{
- m_configSamplingRate = value;
-}
-
const AbstractEncoderInfo *VorbisEncoder::getEncoderInfo(void)
{
return &g_vorbisEncoderInfo;
diff --git a/src/Encoder_Vorbis.h b/src/Encoder_Vorbis.h
index 4efc2e73..24ac3f77 100644
--- a/src/Encoder_Vorbis.h
+++ b/src/Encoder_Vorbis.h
@@ -37,7 +37,6 @@ public:
virtual bool encode(const QString &sourceFile, const AudioFileModel_MetaInfo &metaInfo, const unsigned int duration, 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 void setBitrateLimits(int minimumBitrate, int maximumBitrate);
- virtual void setSamplingRate(int value);
//Encoder info
virtual const AbstractEncoderInfo *toEncoderInfo(void) const { return getEncoderInfo(); }
@@ -47,5 +46,4 @@ private:
const QString m_binary;
int m_configBitrateMaximum;
int m_configBitrateMinimum;
- int m_configSamplingRate;
};
diff --git a/src/Encoder_Wave.cpp b/src/Encoder_Wave.cpp
index a6eaa170..809bddbc 100644
--- a/src/Encoder_Wave.cpp
+++ b/src/Encoder_Wave.cpp
@@ -111,6 +111,11 @@ public:
static const char* s_extension = "wav";
return s_extension;
}
+
+ virtual bool isResamplingSupported(void) const
+ {
+ return false;
+ }
}
static const g_waveEncoderInfo;
diff --git a/src/Global_Version.cpp b/src/Global_Version.cpp
index b886a898..cec8b06c 100644
--- a/src/Global_Version.cpp
+++ b/src/Global_Version.cpp
@@ -69,7 +69,6 @@ static const unsigned int g_lamexp_toolver_neroaac = VER_LAMEXP_TOOL_NEROAAC;
static const unsigned int g_lamexp_toolver_fhgaacenc = VER_LAMEXP_TOOL_FHGAACENC;
static const unsigned int g_lamexp_toolver_fdkaacenc = VER_LAMEXP_TOOL_FDKAACENC;
static const unsigned int g_lamexp_toolver_qaacenc = VER_LAMEXP_TOOL_QAAC;
-static const unsigned int g_lamexp_toolver_coreaudio = VER_LAMEXP_TOOL_COREAUDIO;
///////////////////////////////////////////////////////////////////////////////
// GLOBAL FUNCTIONS
@@ -87,7 +86,6 @@ unsigned int lamexp_toolver_neroaac(void) { return g_lamexp_toolver_neroaac;
unsigned int lamexp_toolver_fhgaacenc(void) { return g_lamexp_toolver_fhgaacenc; }
unsigned int lamexp_toolver_fdkaacenc(void) { return g_lamexp_toolver_fdkaacenc; }
unsigned int lamexp_toolver_qaacenc(void) { return g_lamexp_toolver_qaacenc; }
-unsigned int lamexp_toolver_coreaudio(void) { return g_lamexp_toolver_coreaudio; }
/*
* URL getters
diff --git a/src/Registry_Encoder.cpp b/src/Registry_Encoder.cpp
index 77777a22..d694476c 100644
--- a/src/Registry_Encoder.cpp
+++ b/src/Registry_Encoder.cpp
@@ -45,11 +45,10 @@
// Create encoder instance
////////////////////////////////////////////////////////////
-AbstractEncoder *EncoderRegistry::createInstance(const int encoderId, const SettingsModel *settings, bool *nativeResampling)
+AbstractEncoder *EncoderRegistry::createInstance(const int encoderId, const SettingsModel *settings)
{
int rcMode = -1;
AbstractEncoder *encoder = NULL;
- *nativeResampling = false;
//Create new encoder instance and apply encoder-specific settings
switch(encoderId)
@@ -57,17 +56,12 @@ AbstractEncoder *EncoderRegistry::createInstance(const int encoderId, const Sett
/*-------- MP3Encoder /*--------*/
case SettingsModel::MP3Encoder:
{
- MP3Encoder *mp3Encoder = new MP3Encoder();
+ MP3Encoder *const mp3Encoder = new MP3Encoder();
mp3Encoder->setAlgoQuality(settings->lameAlgoQuality());
if(settings->bitrateManagementEnabled())
{
mp3Encoder->setBitrateLimits(settings->bitrateManagementMinRate(), settings->bitrateManagementMaxRate());
}
- if(settings->samplingRate() > 0)
- {
- mp3Encoder->setSamplingRate(SettingsModel::samplingRates[settings->samplingRate()]);
- *nativeResampling = true;
- }
mp3Encoder->setChannelMode(settings->lameChannelMode());
encoder = mp3Encoder;
}
@@ -75,16 +69,11 @@ AbstractEncoder *EncoderRegistry::createInstance(const int encoderId, const Sett
/*-------- VorbisEncoder /*--------*/
case SettingsModel::VorbisEncoder:
{
- VorbisEncoder *vorbisEncoder = new VorbisEncoder();
+ VorbisEncoder *const vorbisEncoder = new VorbisEncoder();
if(settings->bitrateManagementEnabled())
{
vorbisEncoder->setBitrateLimits(settings->bitrateManagementMinRate(), settings->bitrateManagementMaxRate());
}
- if(settings->samplingRate() > 0)
- {
- vorbisEncoder->setSamplingRate(SettingsModel::samplingRates[settings->samplingRate()]);
- *nativeResampling = true;
- }
encoder = vorbisEncoder;
}
break;
@@ -95,28 +84,29 @@ AbstractEncoder *EncoderRegistry::createInstance(const int encoderId, const Sett
{
case SettingsModel::AAC_ENCODER_QAAC:
{
- QAACEncoder *aacEncoder = new QAACEncoder();
+ QAACEncoder *const aacEncoder = new QAACEncoder();
aacEncoder->setProfile(settings->aacEncProfile());
+ aacEncoder->setAlgoQuality(settings->lameAlgoQuality());
encoder = aacEncoder;
}
break;
case SettingsModel::AAC_ENCODER_FHG:
{
- FHGAACEncoder *aacEncoder = new FHGAACEncoder();
+ FHGAACEncoder *const aacEncoder = new FHGAACEncoder();
aacEncoder->setProfile(settings->aacEncProfile());
encoder = aacEncoder;
}
break;
case SettingsModel::AAC_ENCODER_FDK:
{
- FDKAACEncoder *aacEncoder = new FDKAACEncoder();
+ FDKAACEncoder *const aacEncoder = new FDKAACEncoder();
aacEncoder->setProfile(settings->aacEncProfile());
encoder = aacEncoder;
}
break;
case SettingsModel::AAC_ENCODER_NERO:
{
- AACEncoder *aacEncoder = new AACEncoder();
+ AACEncoder *const aacEncoder = new AACEncoder();
aacEncoder->setEnable2Pass(settings->neroAACEnable2Pass());
aacEncoder->setProfile(settings->aacEncProfile());
encoder = aacEncoder;
@@ -131,7 +121,7 @@ AbstractEncoder *EncoderRegistry::createInstance(const int encoderId, const Sett
/*-------- AC3Encoder /*--------*/
case SettingsModel::AC3Encoder:
{
- AC3Encoder *ac3Encoder = new AC3Encoder();
+ AC3Encoder *const ac3Encoder = new AC3Encoder();
ac3Encoder->setAudioCodingMode(settings->aftenAudioCodingMode());
ac3Encoder->setDynamicRangeCompression(settings->aftenDynamicRangeCompression());
ac3Encoder->setExponentSearchSize(settings->aftenExponentSearchSize());
@@ -142,14 +132,14 @@ AbstractEncoder *EncoderRegistry::createInstance(const int encoderId, const Sett
/*-------- FLACEncoder /*--------*/
case SettingsModel::FLACEncoder:
{
- FLACEncoder *flacEncoder = new FLACEncoder();
+ FLACEncoder *const flacEncoder = new FLACEncoder();
encoder = flacEncoder;
}
break;
/*-------- OpusEncoder --------*/
case SettingsModel::OpusEncoder:
{
- OpusEncoder *opusEncoder = new OpusEncoder();
+ OpusEncoder *const opusEncoder = new OpusEncoder();
opusEncoder->setOptimizeFor(settings->opusOptimizeFor());
opusEncoder->setEncodeComplexity(settings->opusComplexity());
opusEncoder->setFrameSize(settings->opusFramesize());
@@ -159,21 +149,21 @@ AbstractEncoder *EncoderRegistry::createInstance(const int encoderId, const Sett
/*-------- DCAEncoder --------*/
case SettingsModel::DCAEncoder:
{
- DCAEncoder *dcaEncoder = new DCAEncoder();
+ DCAEncoder *const dcaEncoder = new DCAEncoder();
encoder = dcaEncoder;
}
break;
/*-------- MACEncoder --------*/
case SettingsModel::MACEncoder:
{
- MACEncoder *macEncoder = new MACEncoder();
+ MACEncoder *const macEncoder = new MACEncoder();
encoder = macEncoder;
}
break;
/*-------- PCMEncoder --------*/
case SettingsModel::PCMEncoder:
{
- WaveEncoder *waveEncoder = new WaveEncoder();
+ WaveEncoder *const waveEncoder = new WaveEncoder();
encoder = waveEncoder;
}
break;
diff --git a/src/Registry_Encoder.h b/src/Registry_Encoder.h
index ee5f58ff..43fdeb5e 100644
--- a/src/Registry_Encoder.h
+++ b/src/Registry_Encoder.h
@@ -34,7 +34,7 @@ class EncoderRegistry : public QObject
Q_OBJECT
public:
- static AbstractEncoder *createInstance(const int encoderId, const SettingsModel *settings, bool *nativeResampling);
+ static AbstractEncoder *createInstance(const int encoderId, const SettingsModel *settings);
static const AbstractEncoderInfo *getEncoderInfo(const int encoderId);
static void saveEncoderMode(SettingsModel *settings, const int encoderId, const int rcMode);
diff --git a/src/Thread_Initialization.cpp b/src/Thread_Initialization.cpp
index 950aedf1..0a92b72b 100644
--- a/src/Thread_Initialization.cpp
+++ b/src/Thread_Initialization.cpp
@@ -300,10 +300,10 @@ public:
protected:
void taskMain(void)
{
- initAacEncImpl(m_encoder_info->toolName, m_encoder_info->fileNames, m_encoder_info->toolMinVersion, m_encoder_info->verDigits, m_encoder_info->verShift, m_encoder_info->verStr, MAKE_REGEXP(m_encoder_info->regExpVer), MAKE_REGEXP(m_encoder_info->regExpSig));
+ initAacEncImpl(m_encoder_info->toolName, m_encoder_info->fileNames, m_encoder_info->checkArgs ? (QStringList() << QString::fromLatin1(m_encoder_info->checkArgs)) : QStringList(), m_encoder_info->toolMinVersion, m_encoder_info->verDigits, m_encoder_info->verShift, m_encoder_info->verStr, MAKE_REGEXP(m_encoder_info->regExpVer), MAKE_REGEXP(m_encoder_info->regExpSig));
}
- static void initAacEncImpl(const char *const toolName, const char *const fileNames[], const quint32 &toolMinVersion, const quint32 &verDigits, const quint32 &verShift, const char *const verStr, QRegExp ®ExpVer, QRegExp ®ExpSig = QRegExp());
+ static void initAacEncImpl(const char *const toolName, const char *const fileNames[], const QStringList &checkArgs, const quint32 &toolMinVersion, const quint32 &verDigits, const quint32 &verShift, const char *const verStr, QRegExp ®ExpVer, QRegExp ®ExpSig = QRegExp());
private:
const aac_encoder_t *const m_encoder_info;
@@ -608,7 +608,7 @@ void InitializationThread::initTranslations(void)
// AAC Encoder Detection
////////////////////////////////////////////////////////////
-void InitAacEncTask::initAacEncImpl(const char *const toolName, const char *const fileNames[], const quint32 &toolMinVersion, const quint32 &verDigits, const quint32 &verShift, const char *const verStr, QRegExp ®ExpVer, QRegExp ®ExpSig)
+void InitAacEncTask::initAacEncImpl(const char *const toolName, const char *const fileNames[], const QStringList &checkArgs, const quint32 &toolMinVersion, const quint32 &verDigits, const quint32 &verShift, const char *const verStr, QRegExp ®ExpVer, QRegExp ®ExpSig)
{
static const size_t MAX_FILES = 8;
const QString appPath = QDir(QCoreApplication::applicationDirPath()).canonicalPath();
@@ -653,8 +653,7 @@ void InitAacEncTask::initAacEncImpl(const char *const toolName, const char *cons
QProcess process;
MUtils::init_process(process, fileInfo.first().absolutePath());
-
- process.start(fileInfo.first().canonicalFilePath(), QStringList() << "-help");
+ process.start(fileInfo.first().canonicalFilePath(), checkArgs);
if(!process.waitForStarted())
{
@@ -696,7 +695,7 @@ void InitAacEncTask::initAacEncImpl(const char *const toolName, const char *cons
toolVersion = 0;
for(quint32 i = 0; i < verDigits; i++)
{
- toolVersion = (toolVersion * verShift) + qBound(0U, tmp[i], (verShift - 1));
+ toolVersion = (verShift > 0) ? ((toolVersion * verShift) + qBound(0U, tmp[i], (verShift - 1))) : tmp[i];
}
}
}
diff --git a/src/Tools.h b/src/Tools.h
index 638cf194..da72a792 100644
--- a/src/Tools.h
+++ b/src/Tools.h
@@ -72,8 +72,8 @@ g_lamexp_tools[] =
{"9511e7ef2ad10de05386eedf7f14d637edab894a53dacd2f8f15c6f8ed582f12c25fb5bf88438e62c46b8eb92e7634b2", CPU_TYPE_ALL_SSE, "lame.sse2.exe", 3995, "Final"},
{"51af33a33bd9bde6ca6e9c612346b9c138584de59a92bc14a680729066fd849fd83fe668f79e2a06ffe117f39993d10a", CPU_TYPE_ALL_GEN, "mac.i386.exe", 416, ""},
{"117e60cf4445cec0a777d2636091a13c50be5c6ed28afaa75ab09ab4576942f1a8584b36d3abac9db7595dfb0d90207e", CPU_TYPE_ALL_SSE, "mac.sse2.exe", 416, ""},
- {"775be143ae5446fae09c606804e6c41a3dc1ca7efbd2fbf1dec51c7bdce818598dd141e4203e7f2adb57c5f18411cf68", CPU_TYPE_X86_ALL, "mediainfo.i386.exe", 778, ""},
- {"b38feb2df106252528542e31e5fc32c87059fac816d2800e86e7294d090395189d0a8450d39240b02fb9a6b1419903ab", CPU_TYPE_X64_ALL, "mediainfo.x64.exe", 778, ""},
+ {"2651dcd3c85b76bf1bbe5520e0e76b9d8db7459a1eb7fc1d49dc32c22dcf99957bcba8961b70c194ea3d4346d8c4118f", CPU_TYPE_X86_ALL, "mediainfo.i386.exe", 782, ""},
+ {"ee5990856760c5bd73332ddb88a126861f03ffa8070e4e84812a3f63da3387582641c61e692d9b3f432ac1c101e8704f", CPU_TYPE_X64_ALL, "mediainfo.x64.exe", 782, ""},
{"7e6346a057634ff07b2e1f427035324f7f02100cc996425990f87f71d767fce4c7b101588c7d944ba49cb2d7e51c9bdb", CPU_TYPE_ALL_ALL, "mpcdec.exe", 475, ""},
{"02f3e52fca662c97fc15ee5d5c6ded2966d716ec5e5ab958accd4761eb864cc7c62ace97198b876a78cf75ab11c555b2", CPU_TYPE_ALL_ALL, "mpg123.exe", 1224, ""},
{"f1f2ea5c9e5539620b706e7af68e543bf7a731afb06ccce3815ab34dad64d697e4d6ffcd187a396619b8b52efe7edf88", CPU_TYPE_ALL_ALL, "oggdec.exe", 1101, ""},
@@ -84,7 +84,8 @@ g_lamexp_tools[] =
{"e3fc96044491bd96734dc25c8fdcb1760ee86a8fd47ad74481999ae18593d0647f0d4a45f058950b9def0903e8a30fc3", CPU_TYPE_ALL_SSE, "opusdec.sse2.exe", 20150326, "v1.1"},
{"ae777a525a4670df1deca0483c5087f129d8131eaf946b2cd72fa96ab65db7fb600766448d28caf2102d97b3fa26e6bc", CPU_TYPE_ALL_GEN, "opusenc.i386.exe", 20150326, "v1.1"},
{"8eadcdfe01a6ff2d88b6cfdf203c6eae6f858bd17b894644fa1d78d293235d8dc21b0102b8ca3d48f718251b3f2e9e5a", CPU_TYPE_ALL_SSE, "opusenc.sse2.exe", 20150326, "v1.1"},
- {"256882a5b7af7f23fe9ca6b63d9ec00482e54ee6f621581de385dac7a115046758151c45a97828936f7e967434b9bc19", CPU_TYPE_ALL_ALL, "refalac.exe", 147, ""},
+ {"bd4c8cd7d32869f8ed332b51349147c9b987a7e552aadfd15a312e5956efc9cc0c8ee9ed8283240b049c8f5c8fc3ad9b", CPU_TYPE_X86_ALL, "refalac.i386.exe", 158, ""},
+ {"5821414021725248f19e71969348d04a561d81668114cabe5259e9cd65867337a8176e0f41a3cf7d2f88693e5df8850b", CPU_TYPE_X64_ALL, "refalac.x64.exe", 158, ""},
{"d041b60de6c5c6e77cbad84440db57bbeb021af59dd0f7bebd3ede047d9e2ddc2a0c14179472687ba91063743d23e337", CPU_TYPE_ALL_ALL, "shorten.exe", 361, ""},
{"6e3f86cc464d84b0039139c9688e3097d0f42b794a5db10954d24fe77929585a0d0dba16cb677cc1b390392c39cdefad", CPU_TYPE_ALL_ALL, "sox.exe", 1442, ""},
{"5a4261e1b41a59d1a5bc92e1d2766422a67454d77e06ea29af392811b7b4704e0f3e494ab9cb6375ce9e39257867c5ed", CPU_TYPE_ALL_ALL, "speexdec.exe", 12, ""},
@@ -104,8 +105,9 @@ g_lamexp_tools[] =
typedef struct
{
- char *const toolName;
+ const char *const toolName;
const char *const fileNames[8];
+ const char *const checkArgs;
const quint32 toolMinVersion;
const quint32 verDigits;
const quint32 verShift;
@@ -117,10 +119,10 @@ aac_encoder_t;
static const aac_encoder_t g_lamexp_aacenc[] =
{
- { "NeroAAC", { "neroAacEnc.exe", "neroAacDec.exe", "neroAacTag.exe", NULL }, lamexp_toolver_neroaac(), 4, 10, "v?.?.?.?", "Package\\s+version:\\s+(\\d)\\.(\\d)\\.(\\d)\\.(\\d)", "Nero\\s+AAC\\s+Encoder" },
- { "FhgAacEnc", { "fhgaacenc.exe", "enc_fhgaac.dll", "nsutil.dll", "libmp4v2.dll", "libsndfile-1.dll", NULL }, lamexp_toolver_fhgaacenc(), 1, 100000000, "????-??-??", "fhgaacenc version (\\d+) by tmkk", NULL },
- { "FdkAacEnc", { "fdkaac.exe", NULL }, lamexp_toolver_fdkaacenc(), 3, 10, "v?.?.?", "fdkaac\\s+(\\d)\\.(\\d)\\.(\\d)", NULL },
- { "QAAC", { "qaac.exe", "libsoxr.dll", "libsoxconvolver.dll", NULL }, lamexp_toolver_qaacenc(), 2, 100, "v?.??", "qaac (\\d)\\.(\\d+)", NULL },
- { "QAACx64", { "qaac64.exe", "libsoxr64.dll", "libsoxconvolver64.dll", NULL }, lamexp_toolver_qaacenc(), 2, 100, "v?.??", "qaac (\\d)\\.(\\d+)", NULL },
- { NULL, { NULL }, 0, 0, 0, NULL, NULL, NULL }
+ { "NeroAAC", { "neroAacEnc.exe", "neroAacDec.exe", "neroAacTag.exe", NULL }, "-help", lamexp_toolver_neroaac(), 4, 10, "v?.?.?.?", "Package\\s+version:\\s+(\\d)\\.(\\d)\\.(\\d)\\.(\\d)", "Nero\\s+AAC\\s+Encoder" },
+ { "FhgAacEnc", { "fhgaacenc.exe", "enc_fhgaac.dll", "nsutil.dll", "libmp4v2.dll", NULL }, NULL, lamexp_toolver_fhgaacenc(), 2, 0, "????-??-??", "fhgaacenc version (\\d+) by tmkk. Modified by Case (\\d+).", NULL },
+ { "FdkAacEnc", { "fdkaac.exe", NULL }, "--help", lamexp_toolver_fdkaacenc(), 3, 10, "v?.?.?", "fdkaac\\s+(\\d)\\.(\\d)\\.(\\d)", NULL },
+ { "QAAC", { "qaac.exe", "libsoxr.dll", "libsoxconvolver.dll", NULL }, "--check", lamexp_toolver_qaacenc(), 2, 100, "v?.??", "qaac (\\d)\\.(\\d+)", NULL },
+ { "QAACx64", { "qaac64.exe", "libsoxr64.dll", "libsoxconvolver64.dll", NULL }, "--check", lamexp_toolver_qaacenc(), 2, 100, "v?.??", "qaac (\\d)\\.(\\d+)", NULL },
+ { NULL, { NULL }, NULL, 0, 0, 0, NULL, NULL, NULL }
};