mirror of
https://github.com/yann64/haikuports.git
synced 2026-05-05 22:48:55 +02:00
854 lines
22 KiB
Plaintext
854 lines
22 KiB
Plaintext
From ecab6d95f989b236bbc58c2479028228c15a1f72 Mon Sep 17 00:00:00 2001
|
|
From: Gerasim Troeglazov <3dEyes@gmail.com>
|
|
Date: Sun, 13 Oct 2019 11:22:36 +1000
|
|
Subject: Fix build for Haiku
|
|
|
|
|
|
diff --git a/avidemux/common/main.cpp b/avidemux/common/main.cpp
|
|
old mode 100755
|
|
new mode 100644
|
|
index 0541664..aab7f84
|
|
--- a/avidemux/common/main.cpp
|
|
+++ b/avidemux/common/main.cpp
|
|
@@ -61,7 +61,9 @@ int main(int _argc, char *_argv[])
|
|
redirectStdoutToFile("admlog.txt");
|
|
#endif
|
|
|
|
+#ifndef __HAIKU__
|
|
installSigHandler();
|
|
+#endif
|
|
|
|
char **argv;
|
|
int argc;
|
|
@@ -83,9 +85,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 cfb29a9..c64e971 100644
|
|
--- a/avidemux/qt4/ADM_jobs/src/ADM_jobs.cpp
|
|
+++ b/avidemux/qt4/ADM_jobs/src/ADM_jobs.cpp
|
|
@@ -46,9 +46,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)
|
|
|
|
@@ -77,6 +77,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 006c386..9b16954 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(QWidget *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()
|
|
{
|
|
@@ -215,6 +210,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 = NULL;
|
|
+ xinfo->systemWindowId = 0;
|
|
#elif defined(__APPLE__)
|
|
#if defined(ADM_CPU_X86_64)
|
|
xinfo->display = NULL; // we may not call winId() on a QWidget on macOS, it breaks OpenGL
|
|
diff --git a/avidemux/qt4/CMakeLists.txt b/avidemux/qt4/CMakeLists.txt
|
|
old mode 100755
|
|
new mode 100644
|
|
index e221510..ef50431
|
|
--- 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/include/ADM_crashdump_other.h b/avidemux_core/ADM_core/include/ADM_crashdump_other.h
|
|
index 1d636ef..a75c16d 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 &&!defined _MSC_VER
|
|
+#if !defined(__APPLE__) && !defined(__unix__) && !defined(__HAIKU__) && !defined(__MINGW32__) && !defined ADM_CRASHDUMP_OTHER_H &&!defined _MSC_VER
|
|
#define ADM_CRASHDUMP_OTHER_H
|
|
|
|
#define installSigHandler(...) {}
|
|
diff --git a/avidemux_core/ADM_core/include/ADM_crashdump_unix.h b/avidemux_core/ADM_core/include/ADM_crashdump_unix.h
|
|
index 7067e06..e75a323 100644
|
|
--- a/avidemux_core/ADM_core/include/ADM_crashdump_unix.h
|
|
+++ b/avidemux_core/ADM_core/include/ADM_crashdump_unix.h
|
|
@@ -1,4 +1,4 @@
|
|
-#if defined(__unix__) && !defined ADM_CRASHDUMP_UNIX_H
|
|
+#if defined(__unix__) || defined(__HAIKU__) && !defined ADM_CRASHDUMP_UNIX_H
|
|
#define ADM_CRASHDUMP_UNIX_H
|
|
|
|
ADM_CORE6_EXPORT void installSigHandler(void);
|
|
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_dynamicLoading.cpp b/avidemux_core/ADM_core/src/ADM_dynamicLoading.cpp
|
|
index 5066122..f0cc2e0 100644
|
|
--- a/avidemux_core/ADM_core/src/ADM_dynamicLoading.cpp
|
|
+++ b/avidemux_core/ADM_core/src/ADM_dynamicLoading.cpp
|
|
@@ -51,6 +51,8 @@ ADM_LibWrapper::~ADM_LibWrapper()
|
|
|
|
#ifdef _WIN32
|
|
FreeLibrary((HINSTANCE) hinstLib);
|
|
+ #elif defined(__HAIKU__)
|
|
+ aprintf("HAIKU: not implemented!\n");
|
|
#else
|
|
dlclose(hinstLib);
|
|
#endif
|
|
diff --git a/avidemux_core/ADM_core/src/ADM_folder_linux.cpp b/avidemux_core/ADM_core/src/ADM_folder_linux.cpp
|
|
index 79551ed..95b4451 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("/");
|
|
@@ -141,9 +145,11 @@ void ADM_initBaseDir(int argc, char *argv[])
|
|
}
|
|
strcpy(ADM_basedir, homeEnv);
|
|
AddSeparator(ADM_basedir);
|
|
-
|
|
+#ifdef __HAIKU__
|
|
+ const char *ADM_DIR_NAME = "config/settings/Avidemux";
|
|
+#else
|
|
const char *ADM_DIR_NAME = ".avidemux6";
|
|
-
|
|
+#endif
|
|
strcat(ADM_basedir, ADM_DIR_NAME);
|
|
strcat(ADM_basedir, ADM_SEPARATOR);
|
|
|
|
diff --git a/avidemux_core/ADM_core/src/CMakeLists.txt b/avidemux_core/ADM_core/src/CMakeLists.txt
|
|
index 93abbd1..f65d6d6 100644
|
|
--- a/avidemux_core/ADM_core/src/CMakeLists.txt
|
|
+++ b/avidemux_core/ADM_core/src/CMakeLists.txt
|
|
@@ -46,6 +46,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/ADM_coreUtils/src/prefs2_pref.h b/avidemux_core/ADM_coreUtils/src/prefs2_pref.h
|
|
index 0102c8a..3e4e4ac 100644
|
|
--- a/avidemux_core/ADM_coreUtils/src/prefs2_pref.h
|
|
+++ b/avidemux_core/ADM_coreUtils/src/prefs2_pref.h
|
|
@@ -58,7 +58,7 @@ static optionDesc myOptions[]={
|
|
{ LASTPROJECTS_FILE3,"lastprojects.file3" ,ADM_param_stdstring ,"", 0, 0},
|
|
{ LASTPROJECTS_FILE4,"lastprojects.file4" ,ADM_param_stdstring ,"", 0, 0},
|
|
{ MESSAGE_LEVEL,"message_level" ,ADM_param_uint32_t ,"2", 0, 2},
|
|
-{ AUDIO_DEVICE_AUDIODEVICE,"audio_device.audiodevice" ,ADM_param_stdstring ,"ALSA", 0, 0},
|
|
+{ AUDIO_DEVICE_AUDIODEVICE,"audio_device.audiodevice" ,ADM_param_stdstring ,"Haiku", 0, 0},
|
|
{ AUDIO_DEVICE_ALSA_DEVICE,"audio_device.alsa_device" ,ADM_param_stdstring ,"dmix", 0, 0},
|
|
{ VIDEODEVICE,"videodevice" ,ADM_param_uint32_t ,"0", 0, 10},
|
|
{ PRIORITY_ENCODING,"priority.encoding" ,ADM_param_uint32_t ,"3", 0, 4},
|
|
diff --git a/avidemux_core/CMakeLists.txt b/avidemux_core/CMakeLists.txt
|
|
index ba31722..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)
|
|
- 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)
|
|
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..6035856
|
|
--- /dev/null
|
|
+++ b/avidemux_plugins/ADM_audioDevices/Haiku/ADM_deviceHaiku.cpp
|
|
@@ -0,0 +1,84 @@
|
|
+#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;
|
|
+}
|
|
+
|
|
+haikuAudioDevice::~haikuAudioDevice()
|
|
+{
|
|
+ if (active) {
|
|
+ active=false;
|
|
+ player.stop();
|
|
+ }
|
|
+}
|
|
+
|
|
+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..2b37e1f
|
|
--- /dev/null
|
|
+++ b/avidemux_plugins/ADM_audioDevices/Haiku/ADM_deviceHaiku.h
|
|
@@ -0,0 +1,24 @@
|
|
+#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();
|
|
+ virtual ~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
|
|
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)
|
|
|
|
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)
|
|
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.23.0
|
|
|