diff data/fileio/test/UnsupportedFormat.cpp @ 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
children 9ec3f123f1fb
line wrap: on
line diff
--- /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
+}