Package: freedv
Version: 1.4-1
Severity: serious
Tags: patch

Freedv 1.4 added support for the 2020 codec.  This feature is only enabled if 
avx support is detected. Comments in the source code claim that this is because 
without avx support it will not be processed fast enough for realtime 
operation. I have not dug into the question of if the 2020 code benefits from 
avx specifically or if avx is just being used as a proxy for general CPU 
performance.

Unfortunately the avx detection code is i386/amd64 specific inline assembler, 
so it causes a compile failure on everything else.

The attached debdiff puts the asm behind architecture ifdefs and uses a stub 
that always returns false on other architectures.

I may or may not NMU this later.

diff -Nru freedv-1.4/debian/changelog freedv-1.4/debian/changelog
--- freedv-1.4/debian/changelog 2019-11-18 03:32:07.000000000 +0000
+++ freedv-1.4/debian/changelog 2019-12-31 10:20:26.000000000 +0000
@@ -1,3 +1,10 @@
+freedv (1.4-1.1) UNRELEASED; urgency=medium
+
+  * Non-maintainer upload.
+  * Put x86 specific code behind ifdefs.
+
+ -- Peter Michael Green <plugw...@debian.org>  Tue, 31 Dec 2019 10:20:26 +0000
+
 freedv (1.4-1) unstable; urgency=medium
 
   * New upstream release
diff -Nru freedv-1.4/debian/patches/put-x86-specific-code-behind-ifdefs 
freedv-1.4/debian/patches/put-x86-specific-code-behind-ifdefs
--- freedv-1.4/debian/patches/put-x86-specific-code-behind-ifdefs       
1970-01-01 00:00:00.000000000 +0000
+++ freedv-1.4/debian/patches/put-x86-specific-code-behind-ifdefs       
2019-12-31 10:20:26.000000000 +0000
@@ -0,0 +1,27 @@
+Description: Put x86 specific code behind ifdefs.
+Author: Peter Michael Green <plugw...@debian.org>
+
+--- freedv-1.4.orig/src/fdmdv2_main.cpp
++++ freedv-1.4/src/fdmdv2_main.cpp
+@@ -4496,6 +4496,8 @@ void MainFrame::CloseSerialPort(void)
+ // Tests the underlying platform for AVX support.  2020 needs AVX support to 
run
+ // in real-time, and old processors do not offer AVX support
+ //
++#if defined(__x86_64__) || defined(_M_X64) || defined(__i386) || 
defined(_M_IX86)
++
+ void __cpuid(int* cpuinfo, int info)
+ {
+     __asm__ __volatile__(
+@@ -4538,6 +4540,12 @@ void MainFrame::checkAvxSupport(void)
+ 
+     isAvxPresent = avxSupported;
+ }
++#else
++void MainFrame::checkAvxSupport(void)
++{
++    isAvxPresent = false;
++}
++#endif
+ 
+ #ifdef __UDP_SUPPORT__
+ 
diff -Nru freedv-1.4/debian/patches/series freedv-1.4/debian/patches/series
--- freedv-1.4/debian/patches/series    2019-11-18 03:32:07.000000000 +0000
+++ freedv-1.4/debian/patches/series    2019-12-31 10:20:26.000000000 +0000
@@ -2,3 +2,4 @@
 HID-PTT
 debian-version
 optional-lpcnetfreedv
+put-x86-specific-code-behind-ifdefs

Reply via email to