Werde ich mir mal ansehen Gat!
Bedarfserhebung: "Zukunftssicherer" x265 Benchmark
-
-
Ok, wenn du bestimmte API Calls (also auf Windows mein ich jetzt) hast, die was passendes liefern, laß mich wissen welche, bzw. wie der Code ausschaut. Die Command Line Tools hab ich soweit fertig, CLI Skript morgen noch polieren..
Ajo, und ich bitte nochmals zu bedenken, es sollte dann ein Windows Binary sein, das alle Zielplattformen unterstüzt, also von NT 5.2 (XP x64, Server 2003 x64) bis NT 10.0 (Windows 10).
Kannst es ggf. unter Linux statisch linken? Sodaß man das Binary einfach nur saugen und starten muß, egal auf welcher Distro man sitzt und welche Libs man hat? Ich versteh schon, daß das der Anforderung "kleine Binary Size" widerspricht, aber Einfachheit für den Benutzer geht vor Size.
-
Statisch linken wuerde es platform abhaengig machen. Also kann es dann nicht unbedingt fuer ARM bauen und so. Und bei Qt waeren die binaries riesig. Ich hatte mal eine >50mb grosse .exe Datei, fuer ein kleines Programm. Und die API calls werde ich mich reinlesen. Unter Linux ist das etwas einfacher, aber werde mir auch Windows ansehen. Host und Hypervisor wird etwas laenger dauern. Da kommt etwas mehr code in frage dann.
Gebaut wird bei mir auf x64, hab kein XP64 zum testen da. Eigentlich nur Win7 64bit und 10 64bit.
Ansonsten kann ich das mit dem Statisch in Angriff nehmen. Dauert nur ein paar Tage, da ich Qt von anfang an statisch linken muss.
Ich werde dir am Wochenende oder kurz danach einen kleinen Prototypen zeigen.
-
x64 wär ja auch die priorität.
Immerhin solls ein Zukunftssicherer x265 werden. -
Es soll *NUR* 64-Bit Architekturen stützen! Geht auch gar nicht anders bei dem RAM Verbrauch (~16GB). Das betrifft sowohl x86, wie auch ARM, PowerPC, MIPS, was auch immer. Aber 32-Bit kannst du komplett ausgrenzen. Und man muß ja nicht für jede Plattform ein statisches Binary haben, grade nur für die gängigeren.
50-100MB ginge noch, kann man ja mit 7zip/LZMA2 zusammenpressen.
@Windows Versionen: Mach's wie ich. Meine "Build Farm" ist eine einzige x64 Linux Maschine. Die Build- und Testsysteme laufen als VBox VMs drauf (Win2000, XP, XP x64, 7 x64, 10 x64). Und halt auch noch andere VMs zur Not (FreeBSD 9, 10, 11, MacOS X, Solaris usw.).
Virtualisierung hat ja doch einiges simpler gemacht.
Und: Es ist davon auszugehen, daß nicht jeder eine GUI braucht. Ein User, der es zuwege bringt sich ein Solaris oder ein BSD UNIX @ ARM aufzusetzen, der wird wohl auch keine GUI mehr brauchen, der wird sich eher freuen wenn er keine braucht.
-
Hehe ja. Das mit Windows Information ist relativ einfach, aber viel Arbeit. MS macht es halt nicht leicht den Versions string auszulesen. Darf man hinterher selber machen
-
Ihr wollt QT einsetzen?
Nicht gut. Nehmt GTK, da steckt keine Firma dahinter.
Für das Bibliothekenproblem könnte man auch das GUI-Binary in einer Interpretersprache wie Java schreiben. Das bringt ja standardmäßig bereits passende Libs für eine GUI mit. Das Programm muss ja nicht schnell sein, es muss nur funktionieren, den der Rest läuft ja außerhalb als "Backend".
Wär sogar denkbar, daß man die 32-bit Version in Zukunft ganz fallen läßt...
Ein logischer Schritt. -
Hab Mal losgelegt in meiner Lieblingsshell, da kriegst Ausschlag davon! Ist alles noch dreckig und bei weitem nicht fertig. Die kaputt aussehenden Umlaute übrigens gehören so, damit der Kommandointerpreter das auf einer deutschen cmd richtig ausgibt (schas Encoding). Diese Version erkennt es, wenn x265 unerwartet abbricht/abstürzt und kann derartige Fehler abfangen und behandeln. Auf Debug Level 1 auf einer eigentlich nicht ausführbefähigten 32-Bit Maschine:
[Blockierte Grafik: http://www.xin.at/x265/worklog/development/pics/x265bench-prealpha-debug-lvl1.png]
Rechnen tut x265 hier gar nichts, es zeigt derweil nur seine Version Strings an. (Klicken zum Vergrößern)transcoder.bat (Workerskript, das vom Hauptskript aufgerufen wird):
Code:: No command echoing:@ECHO OFF:: All variables are local:SETLOCAL:: Setting return value output file nameSET "stdErr=%1"SET "x265err=0":: Pass 1:.\x265 --version 1>NULIF %ERRORLEVEL% NEQ 0 SET "x265err=1":: Pass 2:.\x265 --version 1>NULIF %ERRORLEVEL% NEQ 0 SET "x265err=1":: Note that timethis will raise the ERRORLEVEL, so we can set our return:: value properly (which we'll do), but it won't work for error detection:: in normal cases! Hence, we have to write to an error file too!ECHO %x265err% >%stdErr%:: Terminating:EXIT /B %x265err%ENDLOCAL
Ändert man den x265 Aufruf z.B. den "Pass 1" von .\x265.exe --version auf ein falsches .\x265.exe -version (ein "-" weniger genügt), so erklärt x265 einem, daß es die Option nicht versteht und liefert einen Rückgabewert von "1" (Fehler) statt "0" (OK) zurück. Das Abfangen funktioniert:
[Blockierte Grafik: http://www.xin.at/x265/worklog/development/pics/x265bench-prealpha-debug-lvl1-errortest.png]
(Klicken zum Vergrößern)Natürlich ist auch das noch nicht perfekt, könnte ja sein, daß der Fehler gar nicht erst erkannt wird. Dazu muß ich mir noch ein ordentliches Logging einfallen lassen...
[ Hier sollte das Hauptskript stehen, aber weil dann der Post zu groß wird, steht es einen Post weiter unten ]
RESULTS.txt (Is halt noch sehr primitiv):Code
Alles anzeigenErgebnis: ======== TimeThis : Elapsed Time : 00:00:00.093 Leistungscharakteristika: ======================== Logische CPUs : 4 Frame slices : Frame Slicing deaktiviert, zuwenige CPUs [<32] Lookahead slices : 8 Lookahead threads: Lookahead threading deaktiviert, zuwenige CPUs [<64] Systembericht: ============= CPU: --- Description Family Manufacturer Name NumberOfCores NumberOfLogicalProcessors SocketDesignation Version x86 Family 6 Model 23 Stepping 10 176 GenuineIntel Intel Pentium III Xeon-Prozessor 4 4 LGA 775 Modell 7, Stepping 10 Mainboard: --------- Manufacturer Model Name OtherIdentifyingInfo PartNumber Product ASUSTeK Computer INC. Hauptplatine P5Q DELUXE OEM System: ---------- Manufacturer Model OEMStringArray System manufacturer System Product Name {"To Be Filled By O.E.M.", "To Be Filled By O.E.M.", "To Be Filled By O.E.M.", "To Be Filled By O.E.M."} Operating system: ---------------- Caption Version Microsoft Windows XP Professional 5.1.2600
Edit: Huch, einen Typo im Skript gfunden.
-
Und launch_x265benchmark.bat (Hauptskript):
Code
Alles anzeigen:: ############################################################################# :: ## # :: ## This is the launcher script controlling the Voodooalert.de / XIN.at x265 # :: ## video transcoding benchmark on Microsoft Windows. # :: ## # :: ## Benchmark: http://www.xin.at/x265/index-en.php # :: ## VA thread: http://www.voodooalert.de/board/?page=Thread&threadID=XXXXX # :: ## # :: ## Component licensing, project & source code URLs: # :: ## ----------------------------------------------- # :: ## * launch_x265benchmark.bat is licensed under the GNU General Public # :: ## License 3.0. # :: ## Project: http://www.xin.at/x265/index-en.php # :: ## * "Tears of Steel" is © Blender Foundation | mango.blender.org, and # :: ## is licensed under the Creative Commons Attribution 3.0 license. # :: ## "input.h265" is a part of that movie. # :: ## Project: https://mango.blender.org # :: ## * TimeThis is licensed under the MS Resource Kit 2003 License. # :: ## Project: https://www.microsoft.com/download/details.aspx?id=17657 # :: ## * Colorecho is licensed under the GNU General Public License 3.0. # :: ## Project & sources: http://wp.xin.at/archives/3064 # :: ## src\colorecho.7z # :: ## * avconv from the libav project is cross-licensed under the GNU # :: ## General Public License 3.0 and the GNU Lesser General Public License # :: ## 3.0. # :: ## Project: https://libav.org # :: ## Sources: https://libav.org/releases/libav-12.tar.gz # :: ## src\libav-12.tar.7z # :: ## * x265 is licensed under the GNU General Public License 2.0. # :: ## Project: http://x265.org | http://multicorewareinc.com # :: ## Sources: https://bitbucket.org/multicoreware/x265 # :: ## src\x265.tar.7z # :: ## * The CygWin companion DLL ("cygwin1.dll") is licensed under the GNU # :: ## General Public License 3.0. # :: ## Project: https://cygwin.org # :: ## Sources: git://sourceware.org/git/newlib-cygwin.git # :: ## * GNU grep and its companion libraries ("libiconv2.dll", # :: ## "libintl3.dll", "pcre3.dll" and "regex2.dll") are licensed under the # :: ## GNU General Public License 3.0. # :: ## Project: https://www.gnu.org/software/grep # :: ## Sources: ftp://ftp.gnu.org/gnu/grep # :: ## LibIntl3 project: https://www.gnu.org/software/gettext/gettext.html # :: ## LibIntl3 sources: ftp://ftp.gnu.org/pub/gnu/gettext # :: ## LibIconv2 project: https://www.gnu.org/software/libiconv # :: ## LibIconv2 sources: ftp://ftp.gnu.org/gnu/libiconv # :: ## PCRE3 project: http://pcre.org # :: ## PCRE3 sources: ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre # :: ## Regex2 project: http://gnuwin32.sourceforge.net/packages/regex.htm # :: ## Regex2 sources: ftp://ftp.gnu.org/gnu/glibc # :: ## # :: ## License URLs / texts: # :: ## -------------------- # :: ## * GNU General Public License version 2.0 ("GPLv2"): # :: ## https://www.gnu.org/licenses/gpl-2.0.html # :: ## licensing\gpl-v2.txt # :: ## * GNU General Public License version 3.0 ("GPLv3"): # :: ## https://www.gnu.org/licenses/gpl-3.0.html # :: ## licensing\gpl-v3.txt # :: ## * GNU Lesser General Public License version 3.0 ("LGPLv3"): # :: ## https://www.gnu.org/licenses/lgpl-3.0.txt # :: ## licensing\lgpl-v3.txt # :: ## * Creative Commons Attribution 3.0 license ("CC-BY 3.0"): # :: ## https://creativecommons.org/licenses/by/3.0/ # :: ## licensing\cc-by-3.0.txt # :: ## * MS Resource Kit 2003 license: # :: ## licensing\ms-reskit-2003-license.txt # :: ## # :: ############################################################################# :: No command echoing: @ECHO OFF :: Using local variables and enabling command extensions: SETLOCAL EnableExtensions :: Enable or disable debug mode [0-2] for error tolerance and debug messages: :: Level 0: Normal operation, Level 1: Tolerate all errors, but no debug messages, :: Level 2: Tolerate all errors and show debug messages. SET "DBG=1" :: Defining results file name (DO NOT USE WHITESPACES HERE, OR WMIC REPORTING WILL BREAK!): SET "RESULTS=.\RESULTS.txt" :: Defining exit code / return value file for the benchmark script: SET "stdErr=.\stderr" :: Defining required disk space in MiB [int32]: SET "ReqDiskSpaceMB=3072" :: Defining required system memory / RAM in MiB [int32]: SET "ReqRAM=16384" :: Determining display language (we can speak German and English): FOR /F "tokens=1" %%I IN ('wmic os get OSLanguage') DO SET "OSLang=%%I" SET "Lang=EN" IF %OSLang% EQU 1031 SET "Lang=DE" IF %OSLang% EQU 2055 SET "Lang=DE" IF %OSLang% EQU 3079 SET "Lang=DE" IF %OSLang% EQU 4103 SET "Lang=DE" IF %OSLang% EQU 5127 SET "Lang=DE" IF %DBG% EQU 2 ECHO. & ECHO Detected OS Language: %OSLang%, set language: %Lang% & ECHO. :: Notifying user if running in debug mode: IF %DBG% GTR 0 ( IF %Lang%==DE ( ECHO. & .\colorecho "WARNUNG: %~n0 l„uft im Debugmodus Level %DBG%!" 14 & ECHO. IF %DBG% EQU 2 ( .\colorecho "Fehlertoleranz und Debugmeldungen aktiv!" 14 & ECHO. ) ELSE ( .\colorecho "Fehlertoleranz aktiv, Debugmeldungen deaktiviert!" 14 & ECHO. ) ) ELSE ( ECHO. & .\colorecho "WARNING: %~n0 is running in debug mode level %DBG%!" 14 & ECHO. IF %DBG% EQU 2 ( .\colorecho "Error tolerance and debug messages active!" 14 & ECHO. ) ELSE ( .\colorecho "Error tolerance active, debug messages switched off!" 14 & ECHO. ) ) ) :: Uncomment the following two lines to force the English language! :: SET "Lang=EN" :: IF %DBG% EQU 2 ECHO. & ECHO English language has been forced! & ECHO. :: Deleting remaining results, stats and output file(s) from potentially abnormal :: previous terminations(s): IF EXIST "%RESULTS%" DEL /F "%RESULTS%" 2>NUL IF EXIST *stat* DEL /Q /F *stat* 2>NUL IF EXIST *pass* DEL /Q /F *pass* 2>NUL :: Script invocation time display: FOR /F "tokens=1 delims= " %%J IN ('date /T') DO SET "CurrentTime=%%J" FOR /F "tokens=1 delims= " %%K IN ('time /T') DO SET "CurrentDate=%%K" IF %Lang% EQU DE ( ECHO. .\colorecho.exe "%~n0 aufgerufen um %CurrentTime% am %CurrentDate%!" 8 ECHO. & ECHO. ) ELSE ( ECHO. .\colorecho.exe "%~n0 invoked at %CurrentTime% on %CurrentDate%!" 8 ECHO. & ECHO. ) :: Checking operating system bitness: IF %Lang%==DE ( .\colorecho "Prfe Betriebssystemarchitectur..." 8 & ECHO. & ECHO. ) ELSE ( .\colorecho "Checking operating system architecture..." 8 & ECHO. & ECHO. ) FOR /F "tokens=1" %%L IN ('ECHO %PROCESSOR_ARCHITECTURE%') DO SET "Arch=%%L" IF %DBG% EQU 2 ECHO. & ECHO Detected OS architecture: %Arch% & ECHO. IF NOT %Arch%==AMD64 ( IF %Lang%==DE ( .\colorecho "FEHLER: Falsche Systemarchitektur [%Arch%]!" 12 & ECHO. .\colorecho "Ben”tige AMD64!" 12 & ECHO. IF %DBG% EQU 0 EXIT /B 1 ) ELSE ( .\colorecho "ERROR: Invalid system architecture [%Arch%]!" 12 & ECHO. .\colorecho "AMD64 required!" 12 & ECHO. IF %DBG% EQU 0 EXIT /B 1 ) ) .\colorecho "%Arch%, OK..." 8 & ECHO. & ECHO. :: Checking for enough free disk space on the disk the benchmark is being :: invoked from, terminate if we don't have enough: IF %Lang%==DE ( .\colorecho "Prfe freien Speicherplatz..." 8 & ECHO. & ECHO. ) ELSE ( .\colorecho "Checking free disk space..." 8 & ECHO. & ECHO. ) FOR /F "tokens=1" %%M IN ('wmic LogicalDisk Where DeviceID^="%cd:~0,2%" get FreeSpace') DO SET "DiskSpaceBytes=%%M" SET /A "DiskSpaceMB=%DiskSpaceBytes:~0,-6%" IF %DBG% EQU 2 ECHO. & ECHO Detected disk space bytes on %cd:~0,2%: %DiskSpaceBytes%, MB: %DiskSpaceMB% & ECHO. IF %DiskSpaceMB% LSS %ReqDiskSpaceMB% ( IF %Lang%==DE ( .\colorecho "FEHLER: Nicht gengend Speicherplatz auf %cd:~0,2%\ [%DiskSpaceMB%MiB]!" 12 & ECHO. .\colorecho "3072MiB ben”tigt!" 12 & ECHO. IF %DBG% EQU 0 EXIT /B 1 ) ELSE ( .\colorecho "ERROR: Not enough disk space on %cd:~0,2%\ [%DiskSpaceMB%MiB]!" 12 & ECHO. .\colorecho "3072MiB required!" 12 & ECHO. IF %DBG% EQU 0 EXIT /B 1 ) ) .\colorecho "%DiskSpaceMB%MiB, OK..." 8 & ECHO. & ECHO. :: Checking for enough RAM / system memory: IF %Lang%==DE ( .\colorecho "Prfe verfgbaren Arbeitsspeicher / RAM..." 8 & ECHO. & ECHO. ) ELSE ( .\colorecho "Checking available system memory / RAM..." 8 & ECHO. & ECHO. ) FOR /F "tokens=1" %%N IN ('wmic ComputerSystem get TotalPhysicalMemory') DO SET "RAM=%%N" SET /A "RAMMB=%RAM:~0,-6%" IF %DBG% EQU 2 ECHO. & ECHO Detected RAM: %RAM%, MB: %RAMMB% & ECHO. IF %RAMMB% LSS %ReqRAM% ( IF %Lang%==DE ( .\colorecho "WARNUNG: Nicht gengend Arbeitsspeicher / RAM [%RAMMB%MiB]!" 14 & ECHO. .\colorecho "16364MiB fr Regul„rbetrieb ben”tigt!" 14 & ECHO. ECHO "WARNUNG! Ben”tigter Arbeitsspeicher unterschritten ^[%RAMMB%MiB^]!" >>"%RESULTS%" & ECHO. >>"%RESULTS%" ) ELSE ( .\colorecho "WARNING: Not enough system memory [%RAMMB%MiB]!" 12 & ECHO. .\colorecho "16364MiB required for normal operation!" 12 & ECHO. ECHO "WARNING! Using less than the required amount of system memory ^[%RAMMB%MiB^]!" >>"%RESULTS%" & ECHO. >>"%RESULTS%" ) ) .\colorecho "%RAMMB%MiB, OK..." 8 & ECHO. & ECHO. :: Determine number of logical processors and define frame slices and :: lookahead slices/threads based on the logical CPU count: FOR /F %%O IN ('ECHO %NUMBER_OF_PROCESSORS%') DO SET "CoreNum=%%O" IF %DBG% EQU 2 ECHO. & ECHO Value of proc environment variable: %NUMBER_OF_PROCESSORS%, using %CoreNum% & ECHO. :: Frame slices and lookahead slices/threads IF %CoreNum% GTR 31 ( SET /A "FrameSlices=%CoreNum%/8/2*2" SET "LookaheadSlices=16" SET "LookaheadThreads=0" IF %DBG% EQU 2 ECHO. & ECHO %CoreNum% CPUs, 32-63, frame slices: %FrameSlices%, Lookah. slices: %LookaheadSlices%, Lookah. threads: %LookaheadThreads% & ECHO. IF %CoreNum% GTR 63 ( SET /A "LookaheadThreads=%CoreNum%/4" SET /A "FrameSlices=%CoreNum%/4/2*2" IF %DBG% EQU 2 ECHO. & ECHO %CoreNum% CPUs, 64-127, frame slices: %FrameSlices%, Lookah. slices: %LookaheadSlices%, Lookah. threads: %LookaheadThreads% & ECHO. IF %CoreNum% GTR 127 ( SET /A "LookaheadThreads=%CoreNum%/2" SET /A "FrameSlices=%CoreNum%/2/2*2" IF %DBG% EQU 2 ECHO. & ECHO %CoreNum% CPUs, 128-255, frame slices: %FrameSlices%, Lookah. slices: %LookaheadSlices%, Lookah. threads: %LookaheadThreads% & ECHO. IF %CoreNum% GTR 255 ( SET /A "FrameSlices=%CoreNum%/2*2" IF %DBG% EQU 2 ECHO. & ECHO %CoreNum% CPUs, ^>=256, frame slices: %FrameSlices%, Lookah. slices: %LookaheadSlices%, Lookah. threads: %LookaheadThreads% & ECHO. ) ) ) ) ELSE ( SET "FrameSlices=0" SET "LookaheadSlices=8" SET "LookaheadThreads=0" IF %DBG% EQU 2 ECHO. & ECHO %CoreNum% CPUs, is ^<32, frame slices: %FrameSlices%, Lookah. slices: %LookaheadSlices%, Lookah. threads: %LookaheadThreads% & ECHO. ) IF %Lang%==DE ( ECHO Ergebnis: >"%RESULTS%" & ECHO ======== >>"%RESULTS%" ) ELSE ( ECHO Result: >"%RESULTS%" & ECHO ====== >>"%RESULTS%" ) IF %DBG% EQU 2 ECHO. & ECHO Result header written to %RESULTS% & ECHO. :: Setting boolean flags for proper x265 invocation/parallelization: SET /A "NumCheck=%FrameSlices%" >/NUL IF NOT %NumCheck%==%FrameSlices% SET "NoFrameSlices=1" SET "NumCheck=" SET /A "NumCheck=%LookaheadSlices%" >/NUL IF NOT %NumCheck%==%LookaheadSlices% SET "NoLookaheadSlices=1" SET "NumCheck=" SET /A "NumCheck=%LookaheadThreads%" >/NUL IF NOT %NumCheck%==%LookaheadThreads% SET "NoLookaheadThreads=1" IF %DBG% EQU 2 ECHO. & ECHO NoFrameSlices: %NoFrameSlices%, NoLookaheadSlices: %NoLookaheadSlices%, NoLookaheadThreads: %NoLookaheadThreads% & ECHO. :: Notifying the user that we're starting: IF %Lang%==DE ( .\colorecho "Starte x265 Benchmark!" 8 & ECHO. & ECHO. ) ELSE ( .\colorecho "Starting x265 benchmark!" 8 & ECHO. & ECHO. ) :: colorecho: 8 - dark grey :: Lookahead slicing : --lookahead-slices <0..16> :: Lookahead threading : --lookahead-threads <0..max(hw)/2> :: Blowup reference frames : --allow-non-conformance && --ref 14 :: Input frame slicing : --slices <int> :: Smaller CTUs (less quality, higher parallelism) : --ctu 16 :: Wave-front parallel processing : --wpp :: Parallel mode decision : --pmode :: Parallel motion estimation : --pme :: BENCHMARK AREA :: BENCHMARK AREA :: BENCHMARK AREA .\timethis.exe ".\transcoder.bat %stdErr%" 1>>%RESULTS% :: Filtering unnecessary lines: MOVE %RESULTS% %RESULTS%.TMP TYPE %RESULTS%.TMP | .\grep.exe -Uv "TimeThis : Command Line :" | .\grep.exe -Uv "TimeThis : Start Time :" | .\grep.exe -Uv "TimeThis : End Time :" >"%RESULTS%" DEL /F %RESULTS%.TMP :: BENCHMARK AREA :: BENCHMARK AREA :: BENCHMARK AREA :: Determine whether x265 has terminated properly and has written its return value file: IF NOT EXIST "%stdErr%" ( IF %Lang%==DE ( .\colorecho.exe "FEHLER: Rckgabecodedatei [%stdErr%] von x265 fehlt! Abnormaler Abbruch!" 12 & ECHO. .\colorecho.exe "Diesen Fehler bitte an an eine der folgenden beiden Webseiten zurckmelden" 12 & ECHO. .\colorecho.exe "(Bei Seite zwei ist keine Benutzerregistrierung erforderlich):" 12 & ECHO. & ECHO. .\colorecho.exe " * http://www.voodooalert.de/board/?page=Thread&threadID=XXXXX [DEU, ENG]" 12 & ECHO. .\colorecho.exe " * http://wp.xin.at/archives/XXXX [ENG]" 12 & ECHO. ) ELSE ( .\colorecho.exe "ERROR: Return value file of x265 [%stdErr%] missing! Abnormal Termination!" 12 & ECHO. .\colorecho.exe "Please report this error to one of the following two web sites (The second" 12 & ECHO. .\colorecho.exe "web site does not require any user registration):" 12 & ECHO. & ECHO. .\colorecho.exe " * http://www.voodooalert.de/board/?page=Thread&threadID=XXXXX [GER, ENG]" 12 & ECHO. .\colorecho.exe " * http://wp.xin.at/archives/XXXX [ENG]!" 12 & ECHO. ) IF %DBG% EQU 0 EXIT /B 1 ) :: Checking its return value; 0 = good, 1 = bad FOR /F "tokens=1" %%P IN ('TYPE %stdErr%') DO SET "x265err=%%P" IF %x265err% NEQ 0 ( SET "Detlef=1" ) ELSE ( SET "Detlef=0" ) DEL /F %stdErr% ECHO. IF %DBG% EQU 2 ECHO. & ECHO ERRORLEVEL: %ERRORLEVEL%, Detlef is %Detlef% & ECHO. :: Write x265 tuning characteristics: IF %Lang%==DE ( ECHO. >>"%RESULTS%" & ECHO. >>"%RESULTS%" & ECHO. >>"%RESULTS%" & ECHO Leistungscharakteristika: >>"%RESULTS%" ECHO ======================== >>"%RESULTS%" ECHO Logische CPUs : %CoreNum% >>"%RESULTS%" ) ELSE ( ECHO. >>"%RESULTS%" & ECHO. >>"%RESULTS%" & ECHO. >>"%RESULTS%" & ECHO Performance characteristics: >>"%RESULTS%" ECHO =========================== >>"%RESULTS%" ECHO Logical CPUs : %CoreNum% >>"%RESULTS%" ) IF %FrameSlices% GTR 0 ( ECHO Frame slices : %FrameSlices% >>"%RESULTS%" ) ELSE ( IF %Lang%==DE ( ECHO Frame slices : Frame Slicing deaktiviert, zuwenige CPUs ^[^<32^] >>"%RESULTS%" ) ELSE ( ECHO Frame slices : Frame slicing disabled, not enough CPUs ^[^<32^] >>"%RESULTS%" ) ) IF %LookaheadSlices% GTR 0 ( ECHO Lookahead slices : %LookaheadSlices% >>"%RESULTS%" ) ELSE ( IF %Lang%==DE ( ECHO Lookahead slices : Lookahead slicing deaktiviert >>"%RESULTS%" ) ELSE ( ECHO Lookahead slices : Lookahead slicing disabled >>"%RESULTS%" ) ) IF %LookaheadThreads% GTR 0 ( ECHO Lookahead threads: %LookaheadThreads% >>"%RESULTS%" ) ELSE ( IF %Lang%==DE ( ECHO Lookahead threads: Lookahead threading deaktiviert, zuwenige CPUs ^[^<64^] >>"%RESULTS%" ) ELSE ( ECHO Lookahead threads: Lookahead threading disabled, not enough CPUs ^[^<64^] >>"%RESULTS%" ) ) :: Writing Hardware information to RESULTS.txt: IF %Lang%==DE ( .\colorecho "Schreibe Systembericht in %RESULTS%..." 8 ECHO. ECHO. >>"%RESULTS%" & ECHO. >>"%RESULTS%" & ECHO Systembericht: >>"%RESULTS%" ECHO ============= >>"%RESULTS%" :: First the CPU: ECHO CPU: >>"%RESULTS%" & ECHO --- >>"%RESULTS%" wmic /APPEND:%RESULTS% cpu get Name, Description, Family, Manufacturer, NumberOfCores, NumberOfLogicalProcessors, SocketDesignation, Version >NUL IF %DBG% EQU 2 ECHO. & ECHO Got CPU info for %RESULTS% & ECHO. ECHO. >>"%RESULTS%" :: Second the mainboard: ECHO Mainboard: >>"%RESULTS%" & ECHO --------- >>"%RESULTS%" wmic /APPEND:%RESULTS% baseboard get Manufacturer, Product, Model, Name, OtherIdentifyingInfo, PartNumber >NUL IF %DBG% EQU 2 ECHO. & ECHO Got mainboard info for %RESULTS% & ECHO. ECHO. >>"%RESULTS%" :: Then any OEM system information we may have: ECHO OEM System: >>"%RESULTS%" & ECHO ---------- >>"%RESULTS%" wmic /APPEND:%RESULTS% computersystem get Manufacturer, Model, OEMStringArray >NUL IF %DBG% EQU 2 ECHO. & ECHO Got OEM info for %RESULTS% & ECHO. ECHO. >> "%RESULTS%" :: Operating system information: ECHO Operating system: >>"%RESULTS%" & ECHO ---------------- >>"%RESULTS%" wmic /APPEND:%RESULTS% os get Caption, Version >NUL IF %DBG% EQU 2 ECHO. & ECHO Got OS info for %RESULTS% & ECHO. ECHO. >>"%RESULTS%" ) ELSE ( .\colorecho "Writing system report to %RESULTS%..." 8 ECHO. ECHO. >>"%RESULTS%" & ECHO. >>"%RESULTS%" & ECHO System report: >>"%RESULTS%" ECHO ============= >>"%RESULTS%" :: First the CPU: ECHO. >>"%RESULTS%" & ECHO CPU: >>"%RESULTS%" & ECHO --- >>"%RESULTS%" wmic /APPEND:%RESULTS% cpu get Description, Family, Manufacturer, NumberOfCores, NumberOfLogicalProcessors, SocketDesignation, Version >NUL IF %DBG% EQU 2 ECHO. & ECHO Got CPU info for %RESULTS% & ECHO. ECHO. >>"%RESULTS%" :: Second the mainboard: ECHO Mainboard: >>"%RESULTS%" & ECHO --------- >>"%RESULTS%" wmic /APPEND:%RESULTS% baseboard get Manufacturer, Product, Model, Name, OtherIdentifyingInfo, PartNumber >NUL IF %DBG% EQU 2 ECHO. & ECHO Got mainboard info for %RESULTS% & ECHO. ECHO. >>"%RESULTS%" :: Then any OEM system information we may have: ECHO OEM System: >>"%RESULTS%" & ECHO ---------- >>"%RESULTS%" wmic /APPEND:%RESULTS% computersystem get Manufacturer, Model, OEMStringArray >NUL IF %DBG% EQU 2 ECHO. & ECHO Got OEM info for %RESULTS% & ECHO. ECHO. >> "%RESULTS%" :: Operating system information: ECHO Operating system: >>"%RESULTS%" & ECHO ---------------- >>"%RESULTS%" wmic /APPEND:%RESULTS% os get Caption, Version >NUL IF %DBG% EQU 2 ECHO. & ECHO Got OS info for %RESULTS% & ECHO. ECHO. >>"%RESULTS%" ) ECHO. :: Measuring finishing time: FOR /F "tokens=1 delims= " %%Q IN ('date /T') DO SET "CurrentDate=%%Q" FOR /F "tokens=*" %%R IN ('time /T') DO SET "CurrentTime=%%R" :: Error handling & regular finishing output: IF %DBG% EQU 2 ECHO. & ECHO Judging Detlef! & ECHO. IF %Detlef% LSS 1 ( IF %Lang%==DE ( .\colorecho.exe "Die ungef„hre Abschluázeit war %CurrentTime% am %CurrentDate%!" 8 & ECHO. ) ELSE ( .\colorecho.exe "Approximate finishing time was %CurrentTime% on %CurrentDate%!" 8 & ECHO. ) ) ELSE ( REM Reporting an error, cleaning up the mess we left behind and exiting REM with ERRORLEVEL 1. REM WARNING: Do NOT replace these REM comments with :: ones, they will break! IF %Lang%==DE ( .\colorecho.exe "FEHLER: Der x265 Benchmark hat abnormal abgebrochen! Bitte die Terminalausgabe" 12 & ECHO. .\colorecho.exe "oben auf Fehler berprfen, und selbige an eine der folgenden beiden Webseiten" 12 & ECHO. .\colorecho.exe "zurckmelden (Bei Seite zwei ist keine Benutzerregistrierung erforderlich):" 12 & ECHO. & ECHO. .\colorecho.exe " * http://www.voodooalert.de/board/?page=Thread&threadID=XXXXX [DEU, ENG]" 12 & ECHO. .\colorecho.exe " * http://wp.xin.at/archives/XXXX [ENG]" 12 & ECHO. ) ELSE ( .\colorecho.exe "ERROR: The x265 benchmark has terminated abnormally! Please check the above" 12 & ECHO. .\colorecho.exe "terminal output for errors and report them to either of the following two web" 12 & ECHO. .\colorecho.exe "sites (The second web site does not require any user registration):" 12 & ECHO. & ECHO. .\colorecho.exe " * http://www.voodooalert.de/board/?page=Thread&threadID=XXXXX [GER, ENG]" 12 & ECHO. .\colorecho.exe " * http://wp.xin.at/archives/XXXX [ENG]!" 12 & ECHO. ) IF %DBG% EQU 0 IF EXIST "%RESULTS%" DEL /F "%RESULTS%" 2>NUL IF %DBG% EQU 0 IF EXIST ".\*pass*" DEL /Q /F ".\*pass*" 2>NUL IF %DBG% EQU 0 IF EXIST ".\*stat*" DEL /Q /F ".\*stat*" 2>NUL IF %DBG% EQU 0 EXIT /B 1 ) :: Local Variable cleanup & exit with ERRORLEVEL 0 (all ok): IF %DBG% EQU 2 ECHO. & ECHO All done, clearing local variables and terminating cleanly even if we had errors & ECHO. ENDLOCAL EXIT /B 0
-
Sieht gut aus. Ich hab angefangen etwas in QT-5.8 zusammen zu basteln. Hab zwei Dialoge soweit und bin dabei das Hardware auszulesen zu implementieren. Windows api koennte ruhig mal modular sein. So viel zugemuellter kack auf einen Haufen
-
Kannst es für ein XP x64 / Server 2003 x64 Target bauen? Ich kann's ja bei mir testen und dir ggf. die entsprechenden Rückmeldungen geben.
-
Werde ich versuchen, ja!
-
Habe einige Entwickler sagen hören, daß es wohl gehen, aber auch ein Alptraum sein würde... Von daher...
-
Ich muss teile hiervon einbauen https://prajwaldesai.com/windows-operat…ersion-numbers/ Sieht nach etwas arbeit aus. Nerviger Arbeit
Ich moechte mal anmerken, dass das ganze unter Linux einfacher ist!
-
Hm? Das war auf der Shell recht simpel, per wmic.exe aus der WMI Klasse OS holen?
CodeC:\>wmic OS get Caption, Version Caption Version Microsoft(R) Windows(R) XP Professional x64 Edition 5.2.3790
Außerdem isses fraglich, ob wir das doppelt machen sollen, das is ja eigentlich kein Job für ein Frontend, sondern eher für's Backend?
@Linux: Für'n Entwickler sicher einfacher, aber für'n User auch? Deswegen meinte ich statisch linken. Dynamisch gelinkte Binaries sind eine Pestilenz auf Linux, wenn's um Software geht, die man fernab der Pakentmanagementsysteme ausrollen will. Von selber kompilieren red ich da noch gar nicht..
-
Heh,ja wmi ist totaler Müll. Also als API. Weiß auch nicht ob das sooo sinnvoll ist. Wie auch immer, der Start Knopf ist da. Alles was ich brauche sind die scripts zum Ausführen. Baue trotzdem ein wenig hwinfo ein. Wollte ich schon immer Mal machen!
-
Ich werde dir Mal eine simple, kleine Pseudoversion zusammenflicken nächste Woche, damit du Mal weißt was für eine Art Output x265 erzeugt, dann kannst schaun ob du das in ein GUI Fenster redirecten oder sonstwie abfangen kannst (damit der User sieht was passiert, oder einen Progress Meter bekommen kann).
-
Je nachdem wie ich das Ausführen kann ich den Output in einem extra Fenster ausgeben lassen. Auch wenn es Ausgabe in ein Terminal ist. Zumindest in Linux geht es. Hab das unter Windows noch nicht getestet.
-
Die cmd treibt mich noch in den Wahnsinn, aber hier ist Mal eine hoffentlich lauffähige Prealpha für Windows:
[x265 Benchmark, 2017-02-06] (pre-Alpha)
Diese Version hat weitaus geringere Systemanforderungen, und kodiert nur 2 × 30 Frames in 720p, damit es schnell geht. Getestet wurde sie auf XP x64, Win7 x64 und Win10 x64. Für XP x64 gibt's noch eine wmic Weiche bei den CPU Infos, hier müßte ich noch programmatisch prüfen, ob KB932370 installiert ist, sonst fehlen der WMI Klasse "CPU" ein paar Properties die ich auslesen können will.
Das Launcherskript prüft derweilen auf OS Bitness, verfügbaren RAM, Diskspace, eine installierte Visual C++ 2010 Runtime (x265.exe brauchts), paßt sich der Usersprache an (unterstützt werden Deutsch und Englisch, auf anderen Systemen rennt's einfach Englisch) und kann abnormale Abstürze von x265.exe detektieren.
Prüfsummenchecks gibt's noch keine, das kommt erst irgendwann. Wird aber fix mit eingebaut, um zu verifizieren, daß die EXE Files und das Inputvideo sauber sind! Outputverifikation wird wohl nicht möglich sein, da der Output je nach Parallelisierung wohl nicht mehr über alle Systeme deterministisch sein wird. Najo. Ein kleiner Wermutstropfen, immerhin schon besser als alles was der x264bench bisher an Checks hatte (nämlich genau NULL, rofl).
Edit: Ah, schon ein Henne/Ei Problem bei zwei der Detektionen gefunden. Najo, derweil wurscht.
-
So ich hab die Alpha mal laufen lassen:
00:00:51.031 | Bier.jpg | 2/4/4 | Intel Xeon E5450 | 48GB ECC DDR-II/667 CL5-(5-5-18 nach Spec bei cl5 --> nicht ausgelesen) | Supermicro X7DCA-L | Win XP Pro SP2 X64Code
Alles anzeigenResult: ====== TimeThis : Elapsed Time : 00:00:51.031 Performance characteristics: =========================== Logical CPUs : 8 Frame slices : Frame slicing disabled, not enough CPUs [<32] Lookahead slices : 8 Lookahead threads: Lookahead threading disabled, not enough CPUs [<64] System report: ============= CPU: --- Description DeviceID Family Manufacturer Name SocketDesignation Version EM64T Family 6 Model 23 Stepping 6 CPU0 176 GenuineIntel Intel(R) Pentium(R) III Xeon processor LGA771 Model 7, Stepping 6 EM64T Family 6 Model 23 Stepping 6 CPU1 176 GenuineIntel Intel(R) Pentium(R) III Xeon processor LGA771 Model 7, Stepping 6 EM64T Family 6 Model 23 Stepping 6 CPU2 176 GenuineIntel Intel(R) Pentium(R) III Xeon processor LGA771 Model 7, Stepping 6 EM64T Family 6 Model 23 Stepping 6 CPU3 176 GenuineIntel Intel(R) Pentium(R) III Xeon processor LGA771 Model 7, Stepping 6 EM64T Family 6 Model 23 Stepping 6 CPU4 176 GenuineIntel Intel(R) Pentium(R) III Xeon processor LGA771 Model 7, Stepping 6 EM64T Family 6 Model 23 Stepping 6 CPU5 176 GenuineIntel Intel(R) Pentium(R) III Xeon processor LGA771 Model 7, Stepping 6 EM64T Family 6 Model 23 Stepping 6 CPU6 176 GenuineIntel Intel(R) Pentium(R) III Xeon processor LGA771 Model 7, Stepping 6 EM64T Family 6 Model 23 Stepping 6 CPU7 176 GenuineIntel Intel(R) Pentium(R) III Xeon processor LGA771 Model 7, Stepping 6 Mainboard: --------- Manufacturer Model Name OtherIdentifyingInfo PartNumber Product Supermicro Base Board X7DCA-L OEM System: ---------- Manufacturer Model OEMStringArray Supermicro X7DCA-L {"Intel Dempsey/San Clemente/ICH9", "Supermicro motherboard X7DCA-L"} Operating system: ---------------- Caption Version Microsoft(R) Windows(R) XP Professional x64 Edition 5.2.3790
Fazit geht nur zu schnell
-