changeset 1714:83cb6e9d769b

Attempt to cope with the fact that Windows Server (for CI builds) lacks certain codecs
author Chris Cannam
date Fri, 17 May 2019 11:05:10 +0100
parents 978c143c767f
children 9ec3f123f1fb
files data/fileio/test/AudioFileReaderTest.h data/fileio/test/EncodingTest.h data/fileio/test/UnsupportedFormat.cpp data/fileio/test/UnsupportedFormat.h data/fileio/test/files.pri data/fileio/test/svcore-data-fileio-test.cpp
diffstat 6 files changed, 74 insertions(+), 19 deletions(-) [+]
line wrap: on
line diff
--- a/data/fileio/test/AudioFileReaderTest.h	Fri May 17 10:02:43 2019 +0100
+++ b/data/fileio/test/AudioFileReaderTest.h	Fri May 17 11:05:10 2019 +0100
@@ -306,7 +306,7 @@
             (audioDir + "/" + format + "/" + audiofile, params);
         
         if (!reader) {
-            if (isLegitimatelyUnsupported(format)) {
+            if (UnsupportedFormat::isLegitimatelyUnsupported(format)) {
 #if ( QT_VERSION >= 0x050000 )
                 QSKIP("Unsupported file, skipping");
 #else
--- a/data/fileio/test/EncodingTest.h	Fri May 17 10:02:43 2019 +0100
+++ b/data/fileio/test/EncodingTest.h	Fri May 17 11:05:10 2019 +0100
@@ -139,7 +139,7 @@
 
         if (!AudioFileReaderFactory::isSupported(encodingDir + "/" +
                                                  audiofile)) {
-            if (isLegitimatelyUnsupported(extension)) {
+            if (UnsupportedFormat::isLegitimatelyUnsupported(extension)) {
 #if ( QT_VERSION >= 0x050000 )
                 QSKIP("Known unsupported file, skipping");
 #else
@@ -180,7 +180,7 @@
             (encodingDir + "/" + audiofile, params);
 
         if (!reader) {
-            if (isLegitimatelyUnsupported(extension)) {
+            if (UnsupportedFormat::isLegitimatelyUnsupported(extension)) {
 #if ( QT_VERSION >= 0x050000 )
                 QSKIP("Unsupported file, skipping");
 #else
@@ -272,7 +272,7 @@
             (encodingDir + "/" + audiofile, params);
         
         if (!reader) {
-            if (isLegitimatelyUnsupported(extension)) {
+            if (UnsupportedFormat::isLegitimatelyUnsupported(extension)) {
 #if ( QT_VERSION >= 0x050000 )
                 QSKIP("Unsupported file, skipping");
 #else
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/data/fileio/test/UnsupportedFormat.cpp	Fri May 17 11:05:10 2019 +0100
@@ -0,0 +1,62 @@
+/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*-  vi:set ts=8 sts=4 sw=4: */
+
+/*
+    Sonic Visualiser
+    An audio file viewer and annotation editor.
+    Centre for Digital Music, Queen Mary, University of London.
+    
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License as
+    published by the Free Software Foundation; either version 2 of the
+    License, or (at your option) any later version.  See the file
+    COPYING included with this distribution for more information.
+*/
+
+#include "UnsupportedFormat.h"
+
+#ifdef Q_OS_WIN
+#include <windows.h>
+#endif
+
+bool
+UnsupportedFormat::isLegitimatelyUnsupported(QString format)
+{
+#ifdef Q_OS_WIN
+    // Our CI tests run on Windows Server, which annoyingly seems to
+    // come without codecs for WMA and AAC
+    
+    NTSTATUS(WINAPI *RtlGetVersion)(LPOSVERSIONINFOEXW);
+    *(FARPROC*)&RtlGetVersion = GetProcAddress
+        (GetModuleHandleA("ntdll"), "RtlGetVersion");
+
+    if (RtlGetVersion) {
+
+        OSVERSIONINFOEXW osInfo;
+        osInfo.dwOSVersionInfoSize = sizeof(osInfo);
+        RtlGetVersion(&osInfo);
+
+        if (osInfo.wProductType != VER_NT_WORKSTATION) {
+            cerr << "NOTE: We appear to be running on Windows Server (wProductType = " << osInfo.wProductType << ") - assuming encumbered media codecs might not be installed and being lenient about them" << endl;
+            return (format == "aac" ||
+                    format == "apple_lossless" ||
+                    format == "m4a" ||
+                    format == "wma");
+        }
+        
+    } else {
+        cerr << "WARNING: Failed to find RtlGetVersion in NTDLL" << endl;
+    }
+    
+    return (format == "apple_lossless");
+    
+#else
+#ifdef Q_OS_MAC
+    return (format == "wma");
+#else
+    return (format == "aac" ||
+            format == "apple_lossless" ||
+            format == "m4a" ||
+            format == "wma");
+#endif
+#endif
+}
--- a/data/fileio/test/UnsupportedFormat.h	Fri May 17 10:02:43 2019 +0100
+++ b/data/fileio/test/UnsupportedFormat.h	Fri May 17 11:05:10 2019 +0100
@@ -4,7 +4,6 @@
     Sonic Visualiser
     An audio file viewer and annotation editor.
     Centre for Digital Music, Queen Mary, University of London.
-    This file copyright 2013 Chris Cannam.
     
     This program is free software; you can redistribute it and/or
     modify it under the terms of the GNU General Public License as
@@ -16,20 +15,12 @@
 #ifndef SV_UNSUPPORTED_FORMAT_H
 #define SV_UNSUPPORTED_FORMAT_H
 
-static bool isLegitimatelyUnsupported(QString format) {
+#include <QString>
 
-#ifdef Q_OS_WIN
-    return (format == "apple_lossless");
-#else
-#ifdef Q_OS_MAC
-    return (format == "wma");
-#else
-    return (format == "aac" ||
-            format == "apple_lossless" ||
-            format == "m4a" ||
-            format == "wma");
-#endif
-#endif
-}
+struct UnsupportedFormat {
+
+    static bool isLegitimatelyUnsupported(QString format);
+
+};
 
 #endif
--- a/data/fileio/test/files.pri	Fri May 17 10:02:43 2019 +0100
+++ b/data/fileio/test/files.pri	Fri May 17 11:05:10 2019 +0100
@@ -13,4 +13,5 @@
      
 TEST_SOURCES += \
 	../../model/test/MockWaveModel.cpp \
+        UnsupportedFormat.cpp \
 	svcore-data-fileio-test.cpp
--- a/data/fileio/test/svcore-data-fileio-test.cpp	Fri May 17 10:02:43 2019 +0100
+++ b/data/fileio/test/svcore-data-fileio-test.cpp	Fri May 17 11:05:10 2019 +0100
@@ -103,3 +103,4 @@
         return 0;
     }
 }
+