mirror of
https://github.com/yann64/haikuports.git
synced 2026-05-05 22:48:55 +02:00
Avidemux: bump version
This commit is contained in:
853
media-video/avidemux/patches/avidemux-2.7.4.patchset
Normal file
853
media-video/avidemux/patches/avidemux-2.7.4.patchset
Normal file
@@ -0,0 +1,853 @@
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user