mirror of
https://github.com/yann64/haikuports.git
synced 2026-05-04 22:18:55 +02:00
910 lines
23 KiB
Plaintext
910 lines
23 KiB
Plaintext
From 4917eb9bb1aff46411495834169fe4bcd9128636 Mon Sep 17 00:00:00 2001
|
|
From: Gerasim Troeglazov <3dEyes@gmail.com>
|
|
Date: Wed, 11 Jul 2018 22:46:06 +1000
|
|
Subject: Fix build for Haiku
|
|
|
|
|
|
diff --git a/avidemux_core/ADM_core/include/ADM_crashdump_other.h b/avidemux_core/ADM_core/include/ADM_crashdump_other.h
|
|
index 6deba1e..1866602 100644
|
|
--- a/avidemux_core/ADM_core/include/ADM_crashdump_other.h
|
|
+++ b/avidemux_core/ADM_core/include/ADM_crashdump_other.h
|
|
@@ -1,4 +1,4 @@
|
|
-#if !defined(__APPLE__) && !defined(__unix__) && !defined(__MINGW32__) && !defined ADM_CRASHDUMP_OTHER_H
|
|
+#if !defined(__APPLE__) && !defined(__HAIKU__) && !defined(__unix__) && !defined(__MINGW32__) && !defined ADM_CRASHDUMP_OTHER_H
|
|
#define ADM_CRASHDUMP_OTHER_H
|
|
|
|
#define installSigHandler(...) {}
|
|
diff --git a/avidemux_core/ADM_core/src/ADM_crashdump_unix.cpp b/avidemux_core/ADM_core/src/ADM_crashdump_unix.cpp
|
|
index a2f1375..b4b6fd2 100644
|
|
--- a/avidemux_core/ADM_core/src/ADM_crashdump_unix.cpp
|
|
+++ b/avidemux_core/ADM_core/src/ADM_crashdump_unix.cpp
|
|
@@ -40,8 +40,13 @@
|
|
static ADM_saveFunction *mysaveFunction=NULL;
|
|
static ADM_fatalFunction *myFatalFunction=NULL;
|
|
static ADM_sigIntFunction *mySigIntFunction=NULL;
|
|
+#ifdef __HAIKU__
|
|
+static __sighandler_t oldSignalHandlerSigInt;
|
|
+static __sighandler_t oldSignalHandlerSigSev;
|
|
+#else
|
|
static sighandler_t oldSignalHandlerSigInt;
|
|
static sighandler_t oldSignalHandlerSigSev;
|
|
+#endif
|
|
void sig_segfault_handler(int signo);
|
|
void sig_sigint_handler(int signo);
|
|
|
|
diff --git a/avidemux_core/ADM_core/src/ADM_folder_linux.cpp b/avidemux_core/ADM_core/src/ADM_folder_linux.cpp
|
|
index 686e85a..3625d55 100644
|
|
--- a/avidemux_core/ADM_core/src/ADM_folder_linux.cpp
|
|
+++ b/avidemux_core/ADM_core/src/ADM_folder_linux.cpp
|
|
@@ -39,7 +39,11 @@ static std::string ADM_i18nDir;
|
|
static std::string canonize(const std::string &in)
|
|
{
|
|
std::string out;
|
|
+#ifdef __HAIKU__
|
|
+ char *simple2=realpath(in.c_str(), NULL);
|
|
+#else
|
|
char *simple2=canonicalize_file_name(in.c_str());
|
|
+#endif
|
|
if(simple2)
|
|
{
|
|
out=std::string(simple2)+std::string("/");
|
|
diff --git a/avidemux_core/CMakeLists.txt b/avidemux_core/CMakeLists.txt
|
|
index ba31722..b00ea2d 100644
|
|
--- a/avidemux_core/CMakeLists.txt
|
|
+++ b/avidemux_core/CMakeLists.txt
|
|
@@ -52,7 +52,7 @@ checkFtello()
|
|
MESSAGE(STATUS "Checking for sqlite")
|
|
MESSAGE(STATUS "*******************")
|
|
|
|
-IF (UNIX)
|
|
+IF (UNIX AND NOT HAIKU)
|
|
SET(SQLITE_REQUIRED_FLAGS "-ldl")
|
|
ENDIF (UNIX)
|
|
|
|
diff --git a/cmake/cmake_compile_check/execinfo.cpp b/cmake/cmake_compile_check/execinfo.cpp
|
|
index 00304cf..07077fa 100644
|
|
--- a/cmake/cmake_compile_check/execinfo.cpp
|
|
+++ b/cmake/cmake_compile_check/execinfo.cpp
|
|
@@ -2,36 +2,8 @@
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
|
|
-/* Obtain a backtrace and print it to stdout. */
|
|
-void
|
|
-print_trace (void)
|
|
-{
|
|
- void *array[10];
|
|
- size_t size;
|
|
- char **strings;
|
|
- size_t i;
|
|
-
|
|
- size = backtrace (array, 10);
|
|
- strings = backtrace_symbols (array, size);
|
|
-
|
|
- printf ("Obtained %zd stack frames.\n", size);
|
|
-
|
|
- for (i = 0; i < size; i++)
|
|
- printf ("%s\n", strings[i]);
|
|
-
|
|
- free (strings);
|
|
-}
|
|
-
|
|
-/* A dummy function to make the backtrace more interesting. */
|
|
-void
|
|
-dummy_function (void)
|
|
-{
|
|
- print_trace ();
|
|
-}
|
|
-
|
|
int
|
|
main (void)
|
|
{
|
|
- dummy_function ();
|
|
return 0;
|
|
}
|
|
--
|
|
2.16.4
|
|
|
|
|
|
From 34e3741c54d6b8941849ed96833ea8b058408397 Mon Sep 17 00:00:00 2001
|
|
From: Gerasim Troeglazov <3dEyes@gmail.com>
|
|
Date: Thu, 12 Jul 2018 00:09:37 +1000
|
|
Subject: Fix build 2
|
|
|
|
|
|
diff --git a/avidemux/common/main.cpp b/avidemux/common/main.cpp
|
|
old mode 100755
|
|
new mode 100644
|
|
index cb2b34b..80cfaa0
|
|
--- a/avidemux/common/main.cpp
|
|
+++ b/avidemux/common/main.cpp
|
|
@@ -60,7 +60,9 @@ int main(int _argc, char *_argv[])
|
|
redirectStdoutToFile();
|
|
#endif
|
|
|
|
+#ifndef __HAIKU__
|
|
installSigHandler();
|
|
+#endif
|
|
|
|
char **argv;
|
|
int argc;
|
|
@@ -82,9 +84,9 @@ int main(int _argc, char *_argv[])
|
|
#ifdef _WIN32
|
|
freeUtf8CommandLine(argc, argv);
|
|
#endif
|
|
-
|
|
+#ifndef __HAIKU__
|
|
uninstallSigHandler();
|
|
-
|
|
+#endif
|
|
return exitVal;
|
|
}
|
|
/**
|
|
diff --git a/avidemux/qt4/ADM_jobs/src/ADM_jobs.cpp b/avidemux/qt4/ADM_jobs/src/ADM_jobs.cpp
|
|
index f537995..08c7f7c 100644
|
|
--- a/avidemux/qt4/ADM_jobs/src/ADM_jobs.cpp
|
|
+++ b/avidemux/qt4/ADM_jobs/src/ADM_jobs.cpp
|
|
@@ -44,9 +44,9 @@ int main(int argc, char *argv[])
|
|
#if !defined(NDEBUG) && defined(FIND_LEAKS)
|
|
new_progname = argv[0];
|
|
#endif
|
|
-
|
|
+#ifndef __HAIKU__
|
|
installSigHandler();
|
|
-
|
|
+#endif
|
|
#define STR(x) #x
|
|
#define MKSTRING(x) STR(x)
|
|
|
|
@@ -75,6 +75,8 @@ int main(int argc, char *argv[])
|
|
printf("Microsoft Windows");
|
|
#elif defined(__APPLE__)
|
|
printf("Apple");
|
|
+#elif defined(__HAIKU__)
|
|
+ printf("Haiku");
|
|
#else
|
|
printf("Linux");
|
|
#endif
|
|
@@ -124,9 +126,9 @@ int main(int argc, char *argv[])
|
|
// Init jobs
|
|
ADMJob::jobInit();
|
|
jobRun(argc,argv);
|
|
-
|
|
+#ifndef __HAIKU__
|
|
uninstallSigHandler();
|
|
-
|
|
+#endif
|
|
printf("Normal exit\n");
|
|
return 0;
|
|
}
|
|
diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/T_preview.cpp b/avidemux/qt4/ADM_userInterfaces/ADM_gui/T_preview.cpp
|
|
index c880574..62fa6ef 100644
|
|
--- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/T_preview.cpp
|
|
+++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/T_preview.cpp
|
|
@@ -83,7 +83,7 @@ bool ADM_QPreviewCleanup(void)
|
|
* @param z
|
|
*/
|
|
#ifdef __HAIKU__
|
|
-ADM_Qvideo::ADM_Qvideo(QWidget *z) : QWidget(z) {}
|
|
+ADM_Qvideo::ADM_Qvideo(QFrame *z) : QWidget(z) {}
|
|
#else
|
|
ADM_Qvideo::ADM_Qvideo(QFrame *z) : QWidget(z)
|
|
{
|
|
@@ -215,6 +215,9 @@ void UI_getWindowInfo(void *draw, GUI_WindowInfo *xinfo)
|
|
#if defined(_WIN32)
|
|
xinfo->display=(void *)videoWindow->winId();
|
|
xinfo->systemWindowId=videoWindow->winId();
|
|
+#elif defined(__HAIKU__)
|
|
+ xinfo->display = (void*)videoWindow->winId();
|
|
+ xinfo->systemWindowId=videoWindow->winId();
|
|
#elif defined(__APPLE__)
|
|
#if defined(ADM_CPU_X86_64)
|
|
xinfo->display = (void*)videoWindow->winId();
|
|
diff --git a/avidemux/qt4/CMakeLists.txt b/avidemux/qt4/CMakeLists.txt
|
|
old mode 100755
|
|
new mode 100644
|
|
index 8881326..9e6c424
|
|
--- a/avidemux/qt4/CMakeLists.txt
|
|
+++ b/avidemux/qt4/CMakeLists.txt
|
|
@@ -28,7 +28,11 @@ ELSE(WIN32)
|
|
IF(APPLE)
|
|
include(adm_osx.cmake)
|
|
ELSE(APPLE)
|
|
- include(adm_default.cmake)
|
|
+ IF(HAIKU)
|
|
+ include(adm_haiku.cmake)
|
|
+ ELSE(HAIKU)
|
|
+ include(adm_default.cmake)
|
|
+ ENDIF(HAIKU)
|
|
ENDIF(APPLE)
|
|
ENDIF(WIN32)
|
|
#-----------------------------------
|
|
diff --git a/avidemux/qt4/adm_haiku.cmake b/avidemux/qt4/adm_haiku.cmake
|
|
new file mode 100644
|
|
index 0000000..8f25071
|
|
--- /dev/null
|
|
+++ b/avidemux/qt4/adm_haiku.cmake
|
|
@@ -0,0 +1,19 @@
|
|
+#
|
|
+#
|
|
+#
|
|
+MACRO(ADM_PREBUILD)
|
|
+ LIST(APPEND PlatformLibs "-lroot -lstdc++")
|
|
+ LIST(APPEND PlatformLibs "-lbe")
|
|
+ENDMACRO(ADM_PREBUILD)
|
|
+#
|
|
+#
|
|
+#
|
|
+MACRO(ADM_MAIN_APP)
|
|
+ ADD_EXECUTABLE(avidemux3_${QT_EXTENSION} ${ADM_EXE_SRCS})
|
|
+
|
|
+ENDMACRO(ADM_MAIN_APP)
|
|
+#
|
|
+
|
|
+MACRO(ADM_POSTBUILD)
|
|
+ ADM_INSTALL_BIN(avidemux3_${QT_EXTENSION})
|
|
+ENDMACRO(ADM_POSTBUILD)
|
|
diff --git a/avidemux_core/ADM_core/src/CMakeLists.txt b/avidemux_core/ADM_core/src/CMakeLists.txt
|
|
index 65eff7f..3786bdc 100644
|
|
--- a/avidemux_core/ADM_core/src/CMakeLists.txt
|
|
+++ b/avidemux_core/ADM_core/src/CMakeLists.txt
|
|
@@ -47,6 +47,8 @@ IF (WIN32)
|
|
target_link_libraries(ADM_core6 imagehlp ws2_32)
|
|
ELSEIF (APPLE)
|
|
target_link_libraries(ADM_core6 "-framework Carbon")
|
|
+elseif (HAIKU)
|
|
+ target_link_libraries(ADM_core6)
|
|
elseif (UNIX)
|
|
target_link_libraries(ADM_core6 dl m)
|
|
ENDIF (WIN32)
|
|
diff --git a/avidemux_core/ADM_coreSocket/src/CMakeLists.txt b/avidemux_core/ADM_coreSocket/src/CMakeLists.txt
|
|
index 82cc397..d3b4a72 100644
|
|
--- a/avidemux_core/ADM_coreSocket/src/CMakeLists.txt
|
|
+++ b/avidemux_core/ADM_coreSocket/src/CMakeLists.txt
|
|
@@ -13,4 +13,8 @@ if (WIN32)
|
|
target_link_libraries(ADM_coreSocket6 wsock32)
|
|
endif (WIN32)
|
|
|
|
+if (HAIKU)
|
|
+ target_link_libraries(ADM_coreSocket6 network)
|
|
+endif (HAIKU)
|
|
+
|
|
ADM_INSTALL_LIB(ADM_coreSocket6)
|
|
diff --git a/avidemux_core/ADM_coreSqlLight3/src/CMakeLists.txt b/avidemux_core/ADM_coreSqlLight3/src/CMakeLists.txt
|
|
index 8eb97c0..131bbc8 100644
|
|
--- a/avidemux_core/ADM_coreSqlLight3/src/CMakeLists.txt
|
|
+++ b/avidemux_core/ADM_coreSqlLight3/src/CMakeLists.txt
|
|
@@ -12,7 +12,11 @@ IF (APPLE)
|
|
TARGET_LINK_LIBRARIES(ADM_coreSqlLight3 -Wl,-read_only_relocs,suppress)
|
|
ENDIF (APPLE)
|
|
|
|
-IF (UNIX)
|
|
+IF (HAIKU)
|
|
+ TARGET_LINK_LIBRARIES(ADM_coreSqlLight3)
|
|
+ENDIF (UNIX)
|
|
+
|
|
+IF (UNIX AND NOT HAIKU)
|
|
TARGET_LINK_LIBRARIES(ADM_coreSqlLight3 dl)
|
|
ENDIF (UNIX)
|
|
|
|
diff --git a/avidemux_core/CMakeLists.txt b/avidemux_core/CMakeLists.txt
|
|
index b00ea2d..1fea9d6 100644
|
|
--- a/avidemux_core/CMakeLists.txt
|
|
+++ b/avidemux_core/CMakeLists.txt
|
|
@@ -52,9 +52,9 @@ checkFtello()
|
|
MESSAGE(STATUS "Checking for sqlite")
|
|
MESSAGE(STATUS "*******************")
|
|
|
|
-IF (UNIX AND NOT HAIKU)
|
|
- SET(SQLITE_REQUIRED_FLAGS "-ldl")
|
|
-ENDIF (UNIX)
|
|
+#IF (UNIX AND NOT HAIKU)
|
|
+# SET(SQLITE_REQUIRED_FLAGS "-ldl")
|
|
+#ENDIF (UNIX)
|
|
|
|
FIND_HEADER_AND_LIB(SQLITE sqlite3.h sqlite3 sqlite3_close ${SQLITE_REQUIRED_FLAGS})
|
|
PRINT_LIBRARY_INFO("SQLite" SQLITE_FOUND "${SQLITE_INCLUDE_DIR}" "${SQLITE_LIBRARY_DIR}" FATAL_ERROR)
|
|
--
|
|
2.16.4
|
|
|
|
|
|
From 4a36c099d15741b6fe33d68f516ac0fe955500ab Mon Sep 17 00:00:00 2001
|
|
From: Gerasim Troeglazov <3dEyes@gmail.com>
|
|
Date: Thu, 12 Jul 2018 00:31:10 +1000
|
|
Subject: Fix build plugins
|
|
|
|
|
|
diff --git a/avidemux_plugins/ADM_demuxers/AvsProxy/CMakeLists.txt b/avidemux_plugins/ADM_demuxers/AvsProxy/CMakeLists.txt
|
|
index 91aab7d..8235f0e 100644
|
|
--- a/avidemux_plugins/ADM_demuxers/AvsProxy/CMakeLists.txt
|
|
+++ b/avidemux_plugins/ADM_demuxers/AvsProxy/CMakeLists.txt
|
|
@@ -9,6 +9,9 @@ ADD_DEMUXER(ADM_dm_avsproxy ${ADM_avsproxy_SRCS})
|
|
if(WIN32)
|
|
target_link_libraries(ADM_dm_avsproxy wsock32)
|
|
endif(WIN32)
|
|
+if(HAIKU)
|
|
+ target_link_libraries(ADM_dm_avsproxy network)
|
|
+endif(HAIKU)
|
|
INIT_DEMUXER(ADM_dm_avsproxy)
|
|
INSTALL_DEMUXER(ADM_dm_avsproxy)
|
|
|
|
--
|
|
2.16.4
|
|
|
|
|
|
From 080395773ecb45e2ae546042e6b64db75229868d Mon Sep 17 00:00:00 2001
|
|
From: Gerasim Troeglazov <3dEyes@gmail.com>
|
|
Date: Thu, 12 Jul 2018 12:02:26 +1000
|
|
Subject: Disable OpenGL
|
|
|
|
|
|
diff --git a/avidemux/qt4/ADM_userInterfaces/ADM_gui/T_preview.cpp b/avidemux/qt4/ADM_userInterfaces/ADM_gui/T_preview.cpp
|
|
index 62fa6ef..c5dbd26 100644
|
|
--- a/avidemux/qt4/ADM_userInterfaces/ADM_gui/T_preview.cpp
|
|
+++ b/avidemux/qt4/ADM_userInterfaces/ADM_gui/T_preview.cpp
|
|
@@ -82,9 +82,6 @@ bool ADM_QPreviewCleanup(void)
|
|
*
|
|
* @param z
|
|
*/
|
|
-#ifdef __HAIKU__
|
|
-ADM_Qvideo::ADM_Qvideo(QFrame *z) : QWidget(z) {}
|
|
-#else
|
|
ADM_Qvideo::ADM_Qvideo(QFrame *z) : QWidget(z)
|
|
{
|
|
useExternalRedraw(true);
|
|
@@ -104,8 +101,6 @@ ADM_Qvideo::ADM_Qvideo(QFrame *z) : QWidget(z)
|
|
hostFrame=z;
|
|
|
|
} //{setAutoFillBackground(false);}
|
|
-#endif // Haiku
|
|
-
|
|
|
|
ADM_Qvideo::~ADM_Qvideo()
|
|
{
|
|
@@ -216,8 +211,8 @@ void UI_getWindowInfo(void *draw, GUI_WindowInfo *xinfo)
|
|
xinfo->display=(void *)videoWindow->winId();
|
|
xinfo->systemWindowId=videoWindow->winId();
|
|
#elif defined(__HAIKU__)
|
|
- xinfo->display = (void*)videoWindow->winId();
|
|
- xinfo->systemWindowId=videoWindow->winId();
|
|
+ xinfo->display = NULL;
|
|
+ xinfo->systemWindowId = 0;
|
|
#elif defined(__APPLE__)
|
|
#if defined(ADM_CPU_X86_64)
|
|
xinfo->display = (void*)videoWindow->winId();
|
|
--
|
|
2.16.4
|
|
|
|
|
|
From e696c749b902a056aca808dfdbe41e6a786e8f17 Mon Sep 17 00:00:00 2001
|
|
From: Gerasim Troeglazov <3dEyes@gmail.com>
|
|
Date: Thu, 12 Jul 2018 14:44:47 +1000
|
|
Subject: Fix detect x264
|
|
|
|
|
|
diff --git a/cmake/admCheckX265.cmake b/cmake/admCheckX265.cmake
|
|
index 2e3f4d9..f9a91e5 100644
|
|
--- a/cmake/admCheckX265.cmake
|
|
+++ b/cmake/admCheckX265.cmake
|
|
@@ -19,7 +19,7 @@ MACRO(checkX265)
|
|
MESSAGE("WARNING: x265 core version is too old. At least version 9 is required.")
|
|
SET(X265_FOUND 0)
|
|
ELSE (x265_version LESS 9)
|
|
- IF(NOT WIN32)
|
|
+ IF(NOT WIN32 AND NOT HAIKU)
|
|
SET(DL dl)
|
|
ELSE(NOT WIN32)
|
|
IF(NOT MSVC)
|
|
--
|
|
2.16.4
|
|
|
|
|
|
From 688a4d827a121bb46392c5035a45c5e912baf897 Mon Sep 17 00:00:00 2001
|
|
From: Gerasim Troeglazov <3dEyes@gmail.com>
|
|
Date: Thu, 12 Jul 2018 21:36:53 +1000
|
|
Subject: Add MediaKit audio driver
|
|
|
|
|
|
diff --git a/avidemux_plugins/ADM_audioDevices/CMakeLists.txt b/avidemux_plugins/ADM_audioDevices/CMakeLists.txt
|
|
index 0d7136b..f655b75 100644
|
|
--- a/avidemux_plugins/ADM_audioDevices/CMakeLists.txt
|
|
+++ b/avidemux_plugins/ADM_audioDevices/CMakeLists.txt
|
|
@@ -35,3 +35,7 @@ endif(APPLE)
|
|
if(WIN32)
|
|
ADD_SUBDIRECTORY(Win32)
|
|
endif(WIN32)
|
|
+
|
|
+if(HAIKU)
|
|
+ADD_SUBDIRECTORY(Haiku)
|
|
+endif(HAIKU)
|
|
diff --git a/avidemux_plugins/ADM_audioDevices/Haiku/ADM_deviceHaiku.cpp b/avidemux_plugins/ADM_audioDevices/Haiku/ADM_deviceHaiku.cpp
|
|
new file mode 100644
|
|
index 0000000..aadca18
|
|
--- /dev/null
|
|
+++ b/avidemux_plugins/ADM_audioDevices/Haiku/ADM_deviceHaiku.cpp
|
|
@@ -0,0 +1,76 @@
|
|
+#include <stdint.h>
|
|
+
|
|
+#include "ADM_default.h"
|
|
+
|
|
+#include "ADM_audiodevice.h"
|
|
+#include "ADM_audioDeviceInternal.h"
|
|
+
|
|
+#include "ADM_deviceHaiku.h"
|
|
+
|
|
+ADM_DECLARE_AUDIODEVICE(Haiku,haikuAudioDevice,1,0,0,"Haiku MediaKit audio device (c) 3dEyes");
|
|
+
|
|
+haikuAudioDevice::haikuAudioDevice()
|
|
+{
|
|
+ active=false;
|
|
+}
|
|
+
|
|
+bool
|
|
+haikuAudioDevice::localStop(void)
|
|
+{
|
|
+ active=false;
|
|
+ player.stop();
|
|
+ return true;
|
|
+}
|
|
+
|
|
+bool
|
|
+haikuAudioDevice::localInit(void)
|
|
+{
|
|
+ player.channels = (float)_channels;
|
|
+ player.sample_rate = (float)_frequency;
|
|
+ player.stop();
|
|
+ active = player.start();
|
|
+ return active;
|
|
+}
|
|
+
|
|
+void
|
|
+haikuAudioDevice::sendData(void)
|
|
+{
|
|
+ mutex.lock();
|
|
+ uint32_t avail=wrIndex-rdIndex;
|
|
+ if(avail>sizeOf10ms) avail=sizeOf10ms;
|
|
+ mutex.unlock();
|
|
+ player.write((unsigned char*)audioBuffer.at(rdIndex), avail);
|
|
+ mutex.lock();
|
|
+ rdIndex+=avail;
|
|
+ mutex.unlock();
|
|
+ return ;
|
|
+}
|
|
+
|
|
+uint8_t
|
|
+haikuAudioDevice::setVolume(int volume)
|
|
+{
|
|
+ player.setVolume(volume);
|
|
+ return 1;
|
|
+}
|
|
+
|
|
+const CHANNEL_TYPE mono[MAX_CHANNELS]={ADM_CH_MONO};
|
|
+const CHANNEL_TYPE stereo[MAX_CHANNELS]={ADM_CH_FRONT_LEFT,ADM_CH_FRONT_RIGHT};
|
|
+const CHANNEL_TYPE fiveDotOne[MAX_CHANNELS]={ADM_CH_FRONT_LEFT,ADM_CH_FRONT_RIGHT,ADM_CH_FRONT_CENTER,
|
|
+ ADM_CH_REAR_LEFT,ADM_CH_REAR_RIGHT,ADM_CH_LFE};
|
|
+
|
|
+const CHANNEL_TYPE *haikuAudioDevice::getWantedChannelMapping(uint32_t channels)
|
|
+{
|
|
+ switch(channels){
|
|
+ case 1:
|
|
+ return mono;
|
|
+ break;
|
|
+ case 2:
|
|
+ return stereo;
|
|
+ break;
|
|
+ default:
|
|
+ return fiveDotOne;
|
|
+ break;
|
|
+ }
|
|
+ return NULL;
|
|
+}
|
|
+
|
|
diff --git a/avidemux_plugins/ADM_audioDevices/Haiku/ADM_deviceHaiku.h b/avidemux_plugins/ADM_audioDevices/Haiku/ADM_deviceHaiku.h
|
|
new file mode 100644
|
|
index 0000000..ce4cb64
|
|
--- /dev/null
|
|
+++ b/avidemux_plugins/ADM_audioDevices/Haiku/ADM_deviceHaiku.h
|
|
@@ -0,0 +1,23 @@
|
|
+#ifndef ADM_deviceHaiku_H
|
|
+#define ADM_deviceHaiku_H
|
|
+
|
|
+#include "SndPlayer.h"
|
|
+
|
|
+class haikuAudioDevice : public audioDeviceThreaded
|
|
+{
|
|
+ protected :
|
|
+ bool active;
|
|
+
|
|
+ SndPlayer player;
|
|
+
|
|
+ virtual bool localInit(void);
|
|
+ virtual bool localStop(void);
|
|
+ virtual void sendData(void);
|
|
+ uint8_t setVolume(int volume);
|
|
+ virtual const CHANNEL_TYPE *getWantedChannelMapping(uint32_t channels);
|
|
+ public:
|
|
+ haikuAudioDevice();
|
|
+};
|
|
+
|
|
+#endif
|
|
+
|
|
diff --git a/avidemux_plugins/ADM_audioDevices/Haiku/CMakeLists.txt b/avidemux_plugins/ADM_audioDevices/Haiku/CMakeLists.txt
|
|
new file mode 100644
|
|
index 0000000..26411b3
|
|
--- /dev/null
|
|
+++ b/avidemux_plugins/ADM_audioDevices/Haiku/CMakeLists.txt
|
|
@@ -0,0 +1,11 @@
|
|
+INCLUDE(av_plugin)
|
|
+
|
|
+
|
|
+SET(ADM_av_haiku_SRCS ADM_deviceHaiku.cpp RingBuffer.cpp SndPlayer.cpp)
|
|
+
|
|
+ADD_AUDIO_DEVICE(ADM_av_haiku ${ADM_av_haiku_SRCS})
|
|
+TARGET_LINK_LIBRARIES(ADM_av_haiku ADM_core6 ADM_coreAudio6 ADM_coreAudioDevice6 media be)
|
|
+SDLify(ADM_deviceHaiku.cpp)
|
|
+
|
|
+INIT_AUDIO_DEVICE(ADM_av_haiku)
|
|
+INSTALL_AUDIO_DEVICE(ADM_av_haiku)
|
|
diff --git a/avidemux_plugins/ADM_audioDevices/Haiku/RingBuffer.cpp b/avidemux_plugins/ADM_audioDevices/Haiku/RingBuffer.cpp
|
|
new file mode 100644
|
|
index 0000000..5ffb95a
|
|
--- /dev/null
|
|
+++ b/avidemux_plugins/ADM_audioDevices/Haiku/RingBuffer.cpp
|
|
@@ -0,0 +1,129 @@
|
|
+#include <stdio.h>
|
|
+#include <stdlib.h>
|
|
+#include <string.h>
|
|
+
|
|
+#include "RingBuffer.h"
|
|
+
|
|
+RingBuffer::RingBuffer( int size )
|
|
+{
|
|
+ initialized = false;
|
|
+ Buffer = new unsigned char[size];
|
|
+ if(Buffer!=NULL) {
|
|
+ memset( Buffer, 0, size );
|
|
+ BufferSize = size;
|
|
+ } else {
|
|
+ BufferSize = 0;
|
|
+ }
|
|
+ reader = 0;
|
|
+ writer = 0;
|
|
+ writeBytesAvailable = size;
|
|
+ if((locker=create_sem(1,"locker")) >= B_OK) {
|
|
+ initialized = true;
|
|
+ } else {
|
|
+ if(Buffer!=NULL) {
|
|
+ delete[] Buffer;
|
|
+ }
|
|
+ }
|
|
+}
|
|
+
|
|
+RingBuffer::~RingBuffer( )
|
|
+{
|
|
+ if(initialized) {
|
|
+ delete[] Buffer;
|
|
+ delete_sem(locker);
|
|
+ }
|
|
+}
|
|
+
|
|
+bool
|
|
+RingBuffer::Empty( void )
|
|
+{
|
|
+ memset( Buffer, 0, BufferSize );
|
|
+ reader = 0;
|
|
+ writer = 0;
|
|
+ writeBytesAvailable = BufferSize;
|
|
+ return true;
|
|
+}
|
|
+
|
|
+int
|
|
+RingBuffer::Read( unsigned char *data, int size )
|
|
+{
|
|
+ acquire_sem(locker);
|
|
+
|
|
+ if( data == 0 || size <= 0 || writeBytesAvailable == BufferSize ) {
|
|
+ release_sem(locker);
|
|
+ return 0;
|
|
+ }
|
|
+
|
|
+ int readBytesAvailable = BufferSize - writeBytesAvailable;
|
|
+
|
|
+ if( size > readBytesAvailable ) {
|
|
+ size = readBytesAvailable;
|
|
+ }
|
|
+
|
|
+ if(size > BufferSize - reader) {
|
|
+ int len = BufferSize - reader;
|
|
+ memcpy(data, Buffer + reader, len);
|
|
+ memcpy(data + len, Buffer, size-len);
|
|
+ } else {
|
|
+ memcpy(data, Buffer + reader, size);
|
|
+ }
|
|
+
|
|
+ reader = (reader + size) % BufferSize;
|
|
+ writeBytesAvailable += size;
|
|
+
|
|
+ release_sem(locker);
|
|
+ return size;
|
|
+}
|
|
+
|
|
+int
|
|
+RingBuffer::Write( unsigned char *data, int size )
|
|
+{
|
|
+ acquire_sem(locker);
|
|
+
|
|
+ if( data == 0 || size <= 0 || writeBytesAvailable == 0 ) {
|
|
+ release_sem(locker);
|
|
+ return 0;
|
|
+ }
|
|
+
|
|
+ if( size > writeBytesAvailable ) {
|
|
+ size = writeBytesAvailable;
|
|
+ }
|
|
+
|
|
+ if(size > BufferSize - writer) {
|
|
+ int len = BufferSize - writer;
|
|
+ memcpy(Buffer + writer, data, len);
|
|
+ memcpy(Buffer, data+len, size-len);
|
|
+ } else {
|
|
+ memcpy(Buffer + writer, data, size);
|
|
+ }
|
|
+
|
|
+ writer = (writer + size) % BufferSize;
|
|
+ writeBytesAvailable -= size;
|
|
+
|
|
+ release_sem(locker);
|
|
+ return size;
|
|
+}
|
|
+
|
|
+int
|
|
+RingBuffer::GetSize( void )
|
|
+{
|
|
+ return BufferSize;
|
|
+}
|
|
+
|
|
+int
|
|
+RingBuffer::GetWriteAvailable( void )
|
|
+{
|
|
+ return writeBytesAvailable;
|
|
+}
|
|
+
|
|
+int
|
|
+RingBuffer::GetReadAvailable( void )
|
|
+{
|
|
+ return BufferSize - writeBytesAvailable;
|
|
+}
|
|
+
|
|
+status_t
|
|
+RingBuffer::InitCheck( void )
|
|
+{
|
|
+ return initialized?B_OK:B_ERROR;
|
|
+}
|
|
diff --git a/avidemux_plugins/ADM_audioDevices/Haiku/RingBuffer.h b/avidemux_plugins/ADM_audioDevices/Haiku/RingBuffer.h
|
|
new file mode 100644
|
|
index 0000000..4715632
|
|
--- /dev/null
|
|
+++ b/avidemux_plugins/ADM_audioDevices/Haiku/RingBuffer.h
|
|
@@ -0,0 +1,31 @@
|
|
+#ifndef __RING_BUFFER_H__
|
|
+#define __RING_BUFFER_H__
|
|
+
|
|
+#include <OS.h>
|
|
+
|
|
+class RingBuffer {
|
|
+
|
|
+public:
|
|
+ RingBuffer(int size);
|
|
+ ~RingBuffer();
|
|
+ int Read( unsigned char* dataPtr, int numBytes );
|
|
+ int Write( unsigned char *dataPtr, int numBytes );
|
|
+
|
|
+ bool Empty( void );
|
|
+ int GetSize( );
|
|
+ int GetWriteAvailable( );
|
|
+ int GetReadAvailable( );
|
|
+ status_t InitCheck( );
|
|
+private:
|
|
+ unsigned char *Buffer;
|
|
+ int BufferSize;
|
|
+ int reader;
|
|
+ int writer;
|
|
+ int writeBytesAvailable;
|
|
+
|
|
+ sem_id locker;
|
|
+
|
|
+ bool initialized;
|
|
+};
|
|
+
|
|
+#endif
|
|
diff --git a/avidemux_plugins/ADM_audioDevices/Haiku/SndPlayer.cpp b/avidemux_plugins/ADM_audioDevices/Haiku/SndPlayer.cpp
|
|
new file mode 100644
|
|
index 0000000..6d9370e
|
|
--- /dev/null
|
|
+++ b/avidemux_plugins/ADM_audioDevices/Haiku/SndPlayer.cpp
|
|
@@ -0,0 +1,111 @@
|
|
+#include <string.h>
|
|
+#include <stdio.h>
|
|
+#include <stdlib.h>
|
|
+#include <SoundPlayer.h>
|
|
+
|
|
+#include "SndPlayer.h"
|
|
+
|
|
+static void proc(void *cookie, void *buffer, size_t len, const media_raw_audio_format &format)
|
|
+{
|
|
+ RingBuffer *ring = (RingBuffer*)cookie;
|
|
+ unsigned char* ptr = (unsigned char*)buffer;
|
|
+
|
|
+ size_t readed = ring->Read(ptr,len);
|
|
+
|
|
+ if(readed < len)
|
|
+ memset(ptr+readed, 0, len - readed);
|
|
+}
|
|
+
|
|
+SndPlayer::SndPlayer()
|
|
+{
|
|
+ channels = sample_rate = delay = 0;
|
|
+ player = NULL;
|
|
+ _isOK = true;
|
|
+}
|
|
+
|
|
+bool SndPlayer::start()
|
|
+{
|
|
+ size_t gSoundBufferSize = 8192 * sizeof(short);
|
|
+
|
|
+ media_raw_audio_format form = {
|
|
+ sample_rate,
|
|
+ channels,
|
|
+ media_raw_audio_format::B_AUDIO_SHORT,
|
|
+ B_MEDIA_LITTLE_ENDIAN,
|
|
+ gSoundBufferSize
|
|
+ };
|
|
+
|
|
+ ring = new RingBuffer(gSoundBufferSize * 3);
|
|
+ if(ring->InitCheck() != B_OK) {
|
|
+ delete ring; ring = 0;
|
|
+ return false;
|
|
+ }
|
|
+
|
|
+ player = new BSoundPlayer(&form, "Avidemux", proc, NULL, (void*)ring);
|
|
+
|
|
+ if(player->InitCheck() != B_OK) {
|
|
+ delete player;
|
|
+ player = NULL;
|
|
+ return false;
|
|
+ }
|
|
+
|
|
+ player->Start();
|
|
+ player->SetHasData(true);
|
|
+
|
|
+ _isOK = true;
|
|
+
|
|
+ return player != NULL;
|
|
+}
|
|
+void SndPlayer::stop()
|
|
+{
|
|
+ if ( player )
|
|
+ {
|
|
+ if(player) {
|
|
+ player->Stop();
|
|
+ delete player;
|
|
+ delete ring;
|
|
+ }
|
|
+
|
|
+ player = NULL;
|
|
+ ring = NULL;
|
|
+ }
|
|
+}
|
|
+
|
|
+void SndPlayer::flush()
|
|
+{
|
|
+ ring->Empty();
|
|
+}
|
|
+
|
|
+void SndPlayer::setVolume(int volume)
|
|
+{
|
|
+ if (player!=NULL) {
|
|
+ player->SetVolume(volume / 100.0);
|
|
+ }
|
|
+}
|
|
+
|
|
+double SndPlayer::getLatency()
|
|
+{
|
|
+ double lat = player->Latency() / (ring->GetSize()*4.0);
|
|
+
|
|
+ return lat;
|
|
+}
|
|
+
|
|
+bool SndPlayer::write( unsigned char *src_ptr, size_t size)
|
|
+{
|
|
+ while ( size > 0 && size % 4 )
|
|
+ size--;
|
|
+ if ( size <= 0 )
|
|
+ return false;
|
|
+
|
|
+ size_t len = size;
|
|
+
|
|
+ for(;;) {
|
|
+ size_t len2 = ring->Write(src_ptr, len);
|
|
+ if (len2 == len)break;
|
|
+ len -= len2;
|
|
+ src_ptr += len2;
|
|
+ snooze(100);
|
|
+ }
|
|
+
|
|
+ return true;
|
|
+}
|
|
diff --git a/avidemux_plugins/ADM_audioDevices/Haiku/SndPlayer.h b/avidemux_plugins/ADM_audioDevices/Haiku/SndPlayer.h
|
|
new file mode 100644
|
|
index 0000000..6a6efde
|
|
--- /dev/null
|
|
+++ b/avidemux_plugins/ADM_audioDevices/Haiku/SndPlayer.h
|
|
@@ -0,0 +1,36 @@
|
|
+#ifndef SNDPLAY_H
|
|
+#define SNDPLAY_H
|
|
+
|
|
+#include <SoundPlayer.h>
|
|
+
|
|
+#include "RingBuffer.h"
|
|
+
|
|
+class SndPlayer
|
|
+{
|
|
+public:
|
|
+ SndPlayer();
|
|
+ inline ~SndPlayer() { stop();}
|
|
+ inline bool isOK() const {return _isOK;}
|
|
+ inline bool isOpen() const {return player!=NULL;}
|
|
+
|
|
+ bool start();
|
|
+ void stop();
|
|
+
|
|
+ double getLatency();
|
|
+
|
|
+ bool write( unsigned char *src_ptr, size_t size);
|
|
+
|
|
+ void flush();
|
|
+ void setVolume(int volume);
|
|
+
|
|
+ double delay;
|
|
+ uchar channels;
|
|
+ float sample_rate;
|
|
+
|
|
+private:
|
|
+ bool _isOK;
|
|
+ BSoundPlayer *player;
|
|
+ RingBuffer *ring;
|
|
+};
|
|
+
|
|
+#endif
|
|
--
|
|
2.16.4
|
|
|
|
|
|
From 61a661adc6567d47bf4f0839755718622429164e Mon Sep 17 00:00:00 2001
|
|
From: Gerasim Troeglazov <3dEyes@gmail.com>
|
|
Date: Thu, 12 Jul 2018 21:37:17 +1000
|
|
Subject: Fix path for settings dir
|
|
|
|
|
|
diff --git a/avidemux_core/ADM_core/src/ADM_folder_linux.cpp b/avidemux_core/ADM_core/src/ADM_folder_linux.cpp
|
|
index 3625d55..ee6838a 100644
|
|
--- a/avidemux_core/ADM_core/src/ADM_folder_linux.cpp
|
|
+++ b/avidemux_core/ADM_core/src/ADM_folder_linux.cpp
|
|
@@ -146,9 +146,11 @@ void ADM_initBaseDir(int argc, char *argv[])
|
|
}
|
|
strcpy(ADM_basedir, homeEnv);
|
|
AddSeparator(ADM_basedir);
|
|
-
|
|
+#ifdef __HAIKU__
|
|
+ const char *ADM_DIR_NAME = "config/settings/avidemux6";
|
|
+#else
|
|
const char *ADM_DIR_NAME = ".avidemux6";
|
|
-
|
|
+#endif
|
|
strcat(ADM_basedir, ADM_DIR_NAME);
|
|
strcat(ADM_basedir, ADM_SEPARATOR);
|
|
|
|
--
|
|
2.16.4
|
|
|