Advertisement
Guest User

qmplay2-17.04.21.patchset

a guest
Jun 12th, 2017
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Diff 35.12 KB | None | 0 0
  1. From 7c833fc1e6cff5619e059206d3a1c95d4508e8d5 Mon Sep 17 00:00:00 2001
  2. From: Gerasim Troeglazov <3dEyes@gmail.com>
  3. Date: Tue, 13 Oct 2015 02:56:37 +0000
  4. Subject: Add haiku support
  5.  
  6.  
  7. diff --git a/haiku/QMPlay2.rdef b/haiku/QMPlay2.rdef
  8. new file mode 100644
  9. index 0000000..e70bab0
  10. --- /dev/null
  11. +++ b/haiku/QMPlay2.rdef
  12. @@ -0,0 +1,42 @@
  13. +resource app_signature "application/x-vnd.QMPlay2";
  14. +resource app_flags B_MULTIPLE_LAUNCH;
  15. +resource app_version {
  16. +   major  = 17,
  17. +   middle = 04,
  18. +   minor  = 21,
  19. +
  20. +   /* Application "variety" can be set to one of the following:
  21. +   *   B_APPV_DEVELOPMENT,
  22. +   *   B_APPV_ALPHA,
  23. +   *   B_APPV_BETA,
  24. +   *   B_APPV_GAMMA,
  25. +   *   B_APPV_GOLDEN_MASTER,
  26. +   *   B_APPV_FINAL
  27. +   */
  28. +   variety = B_APPV_DEVELOPMENT,
  29. +   internal = 0,
  30. +
  31. +   short_info = "QMPlay2",
  32. +   long_info = "QMPlay2 © 2010-2017 Błażej Szczygieł"
  33. +};
  34. +
  35. +resource file_types message {
  36. +   "types" = "video",
  37. +   "types" = "audio"
  38. +};
  39. +
  40. +resource vector_icon array {
  41. +   $"6E63696602012C165AF20314D77803000DB4D0B47BB4D0B47BB5A4B493B717B5"
  42. +   $"6DB659B515BCBFB846C814BDF0C26CBB17C8CEBE53CA3FBF23C99BBE9CCA9ABF"
  43. +   $"6BCA35C053CA92C00FC985C0E0C7E7C196C8ADC12DC276C452B78EC9BFBD01C7"
  44. +   $"06B6C1CA20B523CAD9B601CAA4B4ACCAF9B426CA1EB421CA9DB41FC965B46DC7"
  45. +   $"FBB44EC8B0B561C2E0B4A9B879B57FBD9BB485B770B428B55FB438B66BB41CB4"
  46. +   $"F6B4D0B47BB466B48CB4D0B47B0209B627B6EDB6A3B714B640B838B6A7BACAB6"
  47. +   $"89B97FB6F3BD1FB6E1C1D3B6F0BF7BB6D1C408B623C864B659C633B71AC816B8"
  48. +   $"DBC716B7F4C787BC65C561C369C1D7BFF0C3ADC4D7C11DC7BDBFBFC64EC075C7"
  49. +   $"1DBF3FC5A7BE96C65EBEEFC0EEBC47B790B783BC40B9E3B71CB7480209B627B6"
  50. +   $"EDB640B838B6A3B714B790B783B71CB748BC40B9E3C5A7BE96C0EEBC47C65EBE"
  51. +   $"EFC7BDBFBFC71DBF3FC64EC075C369C1D7C4D7C11DBFF0C3ADB8DBC716BC65C5"
  52. +   $"61B7F4C787B623C864B71AC816B659C633B6E1C1D3B6D1C408B6F0BF7BB6A7BA"
  53. +   $"CAB6F3BD1FB689B97F020A00020001000A01010200"
  54. +};
  55. diff --git a/src/gui/Main.cpp b/src/gui/Main.cpp
  56. index 2fcea50..0ba765c 100644
  57. --- a/src/gui/Main.cpp
  58. +++ b/src/gui/Main.cpp
  59. @@ -456,6 +456,9 @@ int main(int argc, char *argv[])
  60.     signal(SIGTERM, signal_handler);
  61.     atexit(exitProcedure);
  62.  
  63. +#ifdef Q_OS_HAIKU
  64. +   setenv("HOME", "/boot/home", 1);
  65. +#endif
  66.  #if defined(Q_OS_MAC) && (QT_VERSION >= QT_VERSION_CHECK(5, 6, 0))
  67.     QGuiApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
  68.  #endif
  69. @@ -544,7 +547,7 @@ int main(int argc, char *argv[])
  70.     }
  71.     if (!cmakeBuildFound)
  72.     {
  73. -#if !defined Q_OS_WIN && !defined Q_OS_MAC && !defined Q_OS_ANDROID
  74. +#if !defined Q_OS_WIN && !defined Q_OS_MAC && !defined Q_OS_ANDROID && !defined Q_OS_HAIKU
  75.         sharePath = QCoreApplication::applicationDirPath() + "/../share/qmplay2";
  76.         libPath = QMPlay2CoreClass::getLibDir();
  77.         if (libPath.isEmpty() || !QDir(libPath).exists("qmplay2"))
  78. diff --git a/src/gui/MainWidget.cpp b/src/gui/MainWidget.cpp
  79. index c64cba3..adf936d 100644
  80. --- a/src/gui/MainWidget.cpp
  81. +++ b/src/gui/MainWidget.cpp
  82. @@ -158,7 +158,7 @@ MainWidget::MainWidget(QPair<QStringList, QStringList> &arguments)
  83.         setIconSize({22, 22});
  84.  
  85.     SettingsWidget::InitSettings();
  86. -#ifndef Q_OS_ANDROID
  87. +#if !defined Q_OS_ANDROID && !defined Q_OS_HAIKU
  88.     settings.init("MainWidget/WidgetsLocked", false);
  89.  #else
  90.     settings.init("MainWidget/WidgetsLocked", true);
  91. diff --git a/src/gui/gui.pro b/src/gui/gui.pro
  92. index 7abeac2..7afaf02 100644
  93. --- a/src/gui/gui.pro
  94. +++ b/src/gui/gui.pro
  95. @@ -12,7 +12,7 @@ TARGET = QMPlay2
  96.  
  97.  QMAKE_LIBDIR += ../../app/lib
  98.  DESTDIR = ../../app/bin
  99. -!android: LIBS += -lrt #For glibc < 2.17
  100. +!android:!haiku: LIBS += -lrt #For glibc < 2.17
  101.  LIBS += -lqmplay2
  102.  
  103.  RESOURCES += resources.qrc
  104. diff --git a/src/modules/FFmpeg/FFmpeg.pro b/src/modules/FFmpeg/FFmpeg.pro
  105. index 7939af0..f5f8f32 100644
  106. --- a/src/modules/FFmpeg/FFmpeg.pro
  107. +++ b/src/modules/FFmpeg/FFmpeg.pro
  108. @@ -27,7 +27,7 @@ DEPENDPATH += . ../../qmplay2/headers
  109.  HEADERS += FFmpeg.hpp FFDemux.hpp FFDec.hpp FFDecSW.hpp FFReader.hpp FFCommon.hpp FormatContext.hpp OggHelper.hpp OpenThr.hpp
  110.  SOURCES += FFmpeg.cpp FFDemux.cpp FFDec.cpp FFDecSW.cpp FFReader.cpp FFCommon.cpp FormatContext.cpp OggHelper.cpp OpenThr.cpp
  111.  
  112. -unix:!android {
  113. +unix:!android:!haiku {
  114.     PKGCONFIG += libavdevice
  115.     DEFINES   += QMPlay2_libavdevice
  116.  
  117. diff --git a/src/modules/MediaKit/CMakeLists.txt b/src/modules/MediaKit/CMakeLists.txt
  118. new file mode 100644
  119. index 0000000..0d58886
  120. --- /dev/null
  121. +++ b/src/modules/MediaKit/CMakeLists.txt
  122. @@ -0,0 +1,63 @@
  123. +cmake_minimum_required(VERSION 2.8.6)
  124. +if(COMMAND cmake_policy)
  125. +    if(POLICY CMP0003)
  126. +        cmake_policy(SET CMP0003 NEW)
  127. +    endif()
  128. +    if(POLICY CMP0020)
  129. +        cmake_policy(SET CMP0020 NEW)
  130. +    endif()
  131. +    if(POLICY CMP0042)
  132. +        cmake_policy(SET CMP0042 NEW)
  133. +    endif()
  134. +    if(POLICY CMP0043)
  135. +        cmake_policy(SET CMP0043 NEW)
  136. +    endif()
  137. +endif()
  138. +project(MediaKit)
  139. +
  140. +set(MediaKit_HDR
  141. +    MediaKit.hpp
  142. +    MediaKitWriter.hpp
  143. +    SndPlayer.hpp
  144. +    RingBuffer.hpp
  145. +)
  146. +
  147. +set(MediaKit_SRC
  148. +    MediaKit.cpp
  149. +    MediaKitWriter.cpp
  150. +    SndPlayer.cpp
  151. +    RingBuffer.cpp
  152. +)
  153. +
  154. +set(MediaKit_RESOURCES
  155. +    icon.qrc
  156. +)
  157. +
  158. +if(USE_QT5)
  159. +    qt5_add_resources(MediaKit_RESOURCES_RCC ${MediaKit_RESOURCES})
  160. +else()
  161. +    qt4_add_resources(MediaKit_RESOURCES_RCC ${MediaKit_RESOURCES})
  162. +endif()
  163. +
  164. +include_directories(../../qmplay2/headers)
  165. +
  166. +add_library(${PROJECT_NAME} ${QMPLAY2_MODULE}
  167. +    ${MediaKit_HDR}
  168. +    ${MediaKit_SRC}
  169. +    ${MediaKit_RESOURCES_RCC}
  170. +)
  171. +
  172. +if(USE_QT5)
  173. +    qt5_use_modules(${PROJECT_NAME} Gui Widgets)
  174. +else()
  175. +    target_link_libraries(${PROJECT_NAME} Qt4::QtCore Qt4::QtGui)
  176. +endif()
  177. +
  178. +add_dependencies(${PROJECT_NAME} libqmplay2)
  179. +target_link_libraries(${PROJECT_NAME}
  180. +   ${LIBMEDIA_LIBRARIES}
  181. +   ${LIBBE_LIBRARIES}
  182. +    ${qmplay2lib}
  183. +)
  184. +
  185. +install(TARGETS ${PROJECT_NAME} LIBRARY DESTINATION ${MODULES_INSTALL_PATH})
  186. diff --git a/src/modules/MediaKit/MediaKit.cpp b/src/modules/MediaKit/MediaKit.cpp
  187. new file mode 100644
  188. index 0000000..16e99c4
  189. --- /dev/null
  190. +++ b/src/modules/MediaKit/MediaKit.cpp
  191. @@ -0,0 +1,65 @@
  192. +#include <MediaKit.hpp>
  193. +#include <MediaKitWriter.hpp>
  194. +
  195. +MediaKit::MediaKit() :
  196. +   Module( "MediaKit" )
  197. +{
  198. +   m_icon = QIcon( ":/MediaKit" );
  199. +
  200. +   init( "WriterEnabled", true );
  201. +   init( "Delay", 0.2 );
  202. +}
  203. +
  204. +QList< MediaKit::Info > MediaKit::getModulesInfo( const bool showDisabled ) const
  205. +{
  206. +   QList< Info > modulesInfo;
  207. +   if ( showDisabled || getBool( "WriterEnabled" ) )
  208. +       modulesInfo += Info( MediaKitWriterName, WRITER, QStringList( "audio" ) );
  209. +   return modulesInfo;
  210. +}
  211. +void *MediaKit::createInstance( const QString &name )
  212. +{
  213. +   if ( name == MediaKitWriterName && getBool( "WriterEnabled" ) )
  214. +       return new MediaKitWriter( *this );
  215. +   return NULL;
  216. +}
  217. +
  218. +MediaKit::SettingsWidget *MediaKit::getSettingsWidget()
  219. +{
  220. +   return new ModuleSettingsWidget( *this );
  221. +}
  222. +
  223. +QMPLAY2_EXPORT_MODULE( MediaKit )
  224. +
  225. +/**/
  226. +
  227. +#include <QDoubleSpinBox>
  228. +#include <QGridLayout>
  229. +#include <QCheckBox>
  230. +#include <QLabel>
  231. +
  232. +ModuleSettingsWidget::ModuleSettingsWidget( Module &module ) :
  233. +   Module::SettingsWidget( module )
  234. +{
  235. +   enabledB = new QCheckBox( tr( "Włączony" ) );
  236. +   enabledB->setChecked( sets().getBool( "WriterEnabled" ) );
  237. +
  238. +   QLabel *delayL = new QLabel( tr( "Opóźnienie" ) + ": " );
  239. +
  240. +   delayB = new QDoubleSpinBox;
  241. +   delayB->setRange( 0.01, 1.0 );
  242. +   delayB->setSingleStep( 0.01 );
  243. +   delayB->setSuffix( " " + tr( "sek" ) );
  244. +   delayB->setValue( sets().getDouble( "Delay" ) );
  245. +
  246. +   QGridLayout *layout = new QGridLayout( this );
  247. +   layout->addWidget( enabledB, 0, 0, 1, 2 );
  248. +   layout->addWidget( delayL, 1, 0, 1, 1 );
  249. +   layout->addWidget( delayB, 1, 1, 1, 1 );
  250. +}
  251. +
  252. +void ModuleSettingsWidget::saveSettings()
  253. +{
  254. +   sets().set( "WriterEnabled", enabledB->isChecked() );
  255. +   sets().set( "Delay", delayB->value() );
  256. +}
  257. diff --git a/src/modules/MediaKit/MediaKit.hpp b/src/modules/MediaKit/MediaKit.hpp
  258. new file mode 100644
  259. index 0000000..16920f6
  260. --- /dev/null
  261. +++ b/src/modules/MediaKit/MediaKit.hpp
  262. @@ -0,0 +1,31 @@
  263. +#include <Module.hpp>
  264. +
  265. +class MediaKit : public Module
  266. +{
  267. +public:
  268. +   MediaKit();
  269. +private:
  270. +   QList< Info > getModulesInfo( const bool ) const;
  271. +   void *createInstance( const QString & );
  272. +
  273. +   SettingsWidget *getSettingsWidget();
  274. +};
  275. +
  276. +/**/
  277. +
  278. +#include <QCoreApplication>
  279. +
  280. +class QDoubleSpinBox;
  281. +class QCheckBox;
  282. +
  283. +class ModuleSettingsWidget : public Module::SettingsWidget
  284. +{
  285. +   Q_DECLARE_TR_FUNCTIONS( ModuleSettingsWidget )
  286. +public:
  287. +   ModuleSettingsWidget( Module & );
  288. +private:
  289. +   void saveSettings();
  290. +
  291. +   QCheckBox *enabledB;
  292. +   QDoubleSpinBox *delayB;
  293. +};
  294. diff --git a/src/modules/MediaKit/MediaKit.png b/src/modules/MediaKit/MediaKit.png
  295. new file mode 100644
  296. index 0000000000000000000000000000000000000000..36cb89c5e5200c5b613e4cf005b772df61aef49c
  297. GIT binary patch
  298. literal 5396
  299. zcmV+v73=DWP)<h;3K|Lk000e1NJLTq002M$002M;1^@s6s%dfF000!*Nkl<Zc%1E<
  300. zd6ZmLoyR}#zE`iRy1J{=omA4@>1<6FprHd1$Uua_7y$_eS%QE%L=ndUbzGUafkzy0
  301. z5K$OpK;(=98j&Cv0xD}p1ci`D!UV`lmhMivtC#AkuH~(F{<yDRS1-X%!12r(e&^iN
  302. z^<Lfg>VCh!<^JyP-iCMN9eGFoKa2J^{{5-INx%uf9AG-o2*iOHPz16-C$JUR1Uv)0
  303. z4)}kA@xEmdz^TAZC=l{6+g{*0V8&Y=(EpYNq<~KVA46#xfD;$A^5ILDFn9KJCQhuS
  304. zzCKB9Z8bI3Rd}AnvTQ8dp;&b2+@EIC=IuPZW*tvHy}tYk7x)k0TR_j@4D7E>Kojsq
  305. z;8Q>qz(+1QgAXh{h52o>X_?hX#Lz(-ISj4huQu%3_az;jy{uXLdp`ZSn<^h#jB<}d
  306. zlD`%Kao|h9SAx%6ckK!;Uj80tAJG(ak$+)GmEc7{QpGi}uRYB@_x*;ifAh}r!&d>f
  307. zAId=g8U&nyGRqc#?_Pg77hZ5GGpD5(0<Gegl+d5<r)OW9^qvD`_NN(WPgCj}z$+Co
  308. zlS!&3)l)a4kx4VB(s;ylCO0>r2_qmxfD}CP*dJJS!M~J$|69Pd;~nhVNkAO99{3!<
  309. z)nB-fPyf@|Oq)6}04zcJNa@qHx0@X=ZDrdN>&b2Z(-^Nx;Z@HCq6oJOt+XZlX2Q{@
  310. zbNoeTan#9eM9e6lgC=<G`R6%$@yc?yaa+RMMZhfJAz*$g1$W=RlC#fTfUXC?@o{a3
  311. z?HhNp@mJ5%vteEMpj&l1J=2%ao0?0ywuyA@L^6pQbTdMYX^@B-)ZtKD7+^xCgW5MX
  312. zl6dhhCd`?_`@eh{lczPJEJ5S7wLj<Ri|#JJdR#H#?I7Tk0Q}@jKXfYBU2_2~GgBa4
  313. zz{mGIwyxjCpMLUNayvFFI${gxobwU3H5|_$>!y+xItY!Fp%c{w2~#H;(L(~NB05zO
  314. zotPmoghrK9VB*V9G2!uRxahXeGr74DG#v)|S@VNSIQKi@*i!t3*+GAc;4c8y0JXP&
  315. z|1z#wxs=J1;vh?aO?qD^Pu#MG|Nhy}u=~4k>dt2S!f*4)30Lya<W{!Ek`&5;O=u)E
  316. z4MPYtp<(KRs4g%KK}1*05E{A=h)9&ujH9uRUP|X3w=n<AqtJB?qH*TcO~5Fu=b2Xk
  317. zl}!Ei%>cX=3%D4#56~aH?@G>F)`q6JAYDAyWy@2W*m&o?cs@AhiR?T5YW_6!B)VKd
  318. zcgZDf```sZQPTno5TFZcOr2`e7}EkG0WpTq&@`y(*v^Gj_t19Qe9#OS=x5*B%b9)!
  319. zpz?&-z@CGFI9v<309Xa+k3D!5%a$IAh6R);W;6WpN5A8ZUq1qXck=agU3xuTP4gJ^
  320. zHS(^+@g!LfH4Q+hhJ?^SD1f@qh#5MjA&5tGOkH5=0z;_pgr=HTJCTm3x3lPEsU`+9
  321. zN^Q?JCRKOwn~exmD!uOQB;XX3*+(8*{g1r=jF!OU^W+Y6^Wyi{klVHqE!Ilp;}77T
  322. zz8s=)Y)?{fCAKRmdJ@Bz6v{CYK+_ZfnnqM;L<|uU5H$o5QFZ~<gwW754Gr+?8fev@
  323. zqq;V#-ZfaFA@VXmP&$|e+{!@`4{?a#X8{ib(be~Ug!jL18puJA17!E^<JDVNA$zxC
  324. zHeN{bE5D)YU8j<a8YCiuWK^d<rc+}Isw0A^p$&IH3F$G0Xb9Cw4{{-0BLrT4yfmqq
  325. z*S0tyiy#Y7*F<wYEN%nT0&CvE038Yeaa6QV-Tu90oPW+tkU8-C$?x08-v4|A!%1V#
  326. zz7pfJKO)jF4O7>MM>LYA0zWwsp(d(R6H&n}rO;H6Aji~`9`w;PrF8*lBiMU>`w<}X
  327. ziiAWQA>h1)VTZ+U2Lb;I%)fMb8!IlIgGLtoEOt6g&o7=J;-&Fte2(4^-GCFX#gh_U
  328. z(=dca)X<a_n1ZJ2NN5F0okJkX;B7gY1rd_Ku;oFSGi%B$rF~fd-2>pbS>fZy9t@N*
  329. zPVi>{pHHRWy04x<JX!$1h?mckdH9bQUK%&`NjARk>%>Kj8b<+$>WYAvA*eCI@g-T?
  330. zCzXhhvwa2)LE4ev2PmW*3XJ|}5_C-)W&R+MzK>f|4}K0b3xs;MsXpv<P!|{v0dZ7r
  331. z&)v72P0I`o<N(qwQG8+xdcK`P{2U%Q?yD572r1ny4;S#&T&`>Q5sjp;Gb!$qwR8rm
  332. z3^FB;l<t%Ev?1V9jw*HNLPOUybd6EwF9WWeNKC~eVjv;_#3Et0CJrLwA>d0u%hjK4
  333. z<Lo8%;Aa5~cT+psfvsr9Jnn72mKUrTsk|FL<oJ?$41^{zb&aSl@FFlNZjiHm`br)X
  334. zVmbr1r)F!9Fc79HT)?O>eNEFwn7`7#=lkeF1O#|09{{351SAiafF{(Emd{+#f-VL@
  335. zmhjU#<exX93wSE=ZSJRms-p6{lIvr6mF8=JDZ+s0NkK!xAZvLHSRR>@hvoRBy`b0=
  336. zfOjigAT<5q_(Sa@C7$gl|3`wQzOS%=_~8=pMIip&Z?@6g=&SkOv*Cqp2n}`{EBS)H
  337. z0ITFu<Lg+yWKsqAAtDqBQC*`dB1oD#Q)?m&SRTCvm+q3QR4glEL51i+s8;^3;8$wj
  338. z_B`UnTtI*iC0ji=l;xBThk(hbN)8t;n-oOYBJAox>rLZpZQP_^M0+`-^F3_WSEa0=
  339. zmE1~aHV{!kL}=7R1&(hpIT2xE-le8cPK^mkNN8|$m4=9FxF{<S49%Jn@O+8qs|A;l
  340. z?Nj5!2TPeiuJG0fxE!duZsj~?HUs{k(*Da^(KJ}6eSy131`%A6_BB#cquZAheTnT!
  341. zY<Fbg)}SUTh#7*~C^RMvvb83?1sA*Iv0{qHX>;NnJ0r=Y2{DAG;kqu_e34x}Hh<2T
  342. z?3A^k_I=;S^*n6XV`i)~$Vh##iU4GW2<SXi0tBjn$;Ic@1*T=g?hF(m&sp4{{he~g
  343. zuvRNcJE#SY5BL%*Afn*P&>eJPP;CmTB7%lQguLUE%;q?KdWn{%B*|oySWLrnT^!%X
  344. zwr%WUo`l`ck%b;a)@19%6L5U6JrB!vDA+cq9JLi>;QYA^0DZX-&)!2NU=c9qqsvpw
  345. zo=IT-7QD6#G*~AtW1VJJ_-cjkdXV;2P)oT!gN`4%gXQ|zo@8oGgc?&PhRvjo7dR$j
  346. zQ5#L+c^<Z{{8!U7JkO(8ERxM;>FevGr>BQPdplmQgV(YU%W<(?7ss+VX2vsWj2@8L
  347. z1wii*0oxCifMo#Zystjcz6HH`7z9T<k=u<0q|iv07c*hZsvyEuZlNqfl5>X74inrS
  348. zc0Y4Jsbm$-lqp!2MX{(%*Rm|6lsJyV;NT$HY?hv$9y&TYXm4+)>(5)LYG}psAaB{!
  349. zckCo0_5dbioiLBsK4kbC4wZnV0P|Z>;H3i{fS%$N{iCcm;vgj{LE!&#L;@qjIV$bQ
  350. z&>B2XGH7}9ba$bzyOUH+lp3><LZLt`77M`(Awuov^LhIE`snKFqO-G;&dyG{4jf=Y
  351. z`!3x2W(p;X%bGR@;{-Cw4Qv<gSr_67HxkA}z*OL<6WgF=ItsjR!vR2tb;gO*XhP-d
  352. zK3Gzc5@o=?TG5pW3Ee`HF8Sa&6bl7-=0>JO3MBL?<n#Fue5q6-5>b=4<2dB=d9v9o
  353. z>2#WOI!$+XH(gy_^z`)LbnYfvm7+M1<?OQ`Qop5H(3b{aR~Kwlp71J4ed8wJB!CYu
  354. zPZ2R3kTw(m&!nUu!voP7#HB_gNK{OzOx%_d%hOaA7tRbaEC?edX<JhN(rTQpZRG3f
  355. zLhbs#PpMQQ7K@>28d6G1r4qSZj!Y&)e}6yebei7YUIqpR=<Dml$Yv<z^0dCOnONjm
  356. zAO!<}3L$KIBgFIQ!N4DkfOi4RorMCA1-W{NM0vwF3rv%!?-NC3YeoP#;!8}uk_;J=
  357. zp@@*AI=8}xdnhH76bc3U`}+Z9_StL}!!Qs+;JPk_LV<ifPbQNYMnpcJ$FeLkwh!4s
  358. zZuo~af%enG^t^V+>xZZqCjoN+Ce}mfSH%QGbarb;Qf2DIe3hCxK~VF2iS7HizQmJ~
  359. zxG!;ii6bSp=hN(i<$JK<Asok{P$;15I({(CB@zh?!$8+{JkP^*U5dqGXa%`kj={k}
  360. za=9GobUGNO$(il1(opw+x*P<8sJ~-B+_x^o^8-{K@aypsFdd-2w&ISPgb3_0rctdM
  361. zxD}~tIcIl$A3yl)cybge#g4t?Ha$eH;<cXVg^^weMXK-nIF1t%Wm#6J^&#*;q=s9r
  362. zxO?cjlQ1t?^{l$p+}uoid%FqTk8<tJ;~}6CpthD^dP{>$f@!lSGKsjR<BdT8=pg}R
  363. zf?QvQ#O&{Wopd@)DwQIa%VFDgXzF@J(q6Uz$8oT2do*x>wk6y!>vigDf{J$mrF{){
  364. zcf&QS)b09uRS;-zZ;t}E0jG_JfH*)+RRA8qs70D3x<w79HoAyZNeC#H82R1a*PjOn
  365. zNw6#n%d&_@qodwu1-bkv;ANS68Y`9s8=^kS_l5fWz;o($OG^u&NN8_w2X!vtB;du$
  366. zSB*tL48Ze(D+xrBxY0UvjB%BbM-qbc*|m9Sm#Pw2DwP`Z{z0W>0lUBaGP>5T#@369
  367. z`~vp%z|}uh-Qw|~6>v*S3%hph0yvLx5Ksh?mYpV1en+ed>Boq;<0~OXQ02a|*u^5W
  368. z?;5l3xIkCPC(pl-8B@Nhz?Xmwpo8ndZEJ`6Rk~F<w*XEa`M$9T$O2OWD^y~d=$?+@
  369. z51|@$rh%Yh6G$ahTGTu^qC=3D72n~GPpuqEzxxOgJoXaYxLSQ~Zf+j-oMD78TSmTf
  370. zER}Ww6f0NIF%3OxQZF0~p$eV4Hnd5hhxe4`jbPVC1mBrvjOMme-wJkUJ(ZU~vl6Wg
  371. zJ{OE$hn-#UiGLsJnn)yuJz8N6wTzIl2-phH*;R4JC_=1;X+|#C#tQ&4v_)0fw4mHy
  372. zVK2;GeE#9UR?@nd-aDUFfmx!Q)KjA`xbTf1L!~DrlgUc0SBf|C##jVw2H3Qv;*Qn{
  373. zkvKEWzTp5z)ac5hs@oD@1{E9MW9o@Z4h3>3Eh}yyd&kq%*PtT46Tr|w3i!#Ru<FU7
  374. z{%vh-)YjHwnr29X7e;hO1)Q-6cn09%-+^CV-T6;~p>agj{xJtxF6Wm)`%+bFJWn;p
  375. z^{8o{!=lf8?+}nL;Odn(v*U`dP!nUw@5^Hn@ZeK$)xQmY?D*r4r>?G!>gsCZ@i>NI
  376. z;JRV8dQ@FtEIWA}*!$$OOz$`V)0$9uHhY+ss3Mgq(e1^`(8E%I3|R0hh(Jng&qGRy
  377. z?Rv~O<D-bWMqa=FCem9sjt#tZ2^_PSJr}&f^wbxE>QV&(02(~@dszPE;g4Q&$tBF2
  378. zH;;}EwJ0cOmzhka+~uY55a0tp1-`N7aky$laMyVl5u3{ywcEJ2?^p#`As+?W3rxQZ
  379. zT>8GM+_*l8qZZM6^?cI%c2VqZCzsEulDJU?iF$rFa~JQO`(t!-mojyO@@|M4nSjTh
  380. zg{4;wAM~O{i#Ye(bHk#F5F%V$ZQHi3-0ks^U=MacVg|4SF!sI((;86hi_4JFW&FJT
  381. z-Mmzs7~mfb-1j^jUk(9xTx{Q`P_nRWhmvJeC|L{?OIRff9GmYLJ2`LmBh)2+t3XFk
  382. zDOo)Dtd0Tk;8U>tOQQ$8YSk(l8X6cF7@)tupRTSh_V3@%&Ye41yLK(8x?l?<0^z|D
  383. zy8+bsnuQZ5z-bFpsx;<pLi6GrSyx5ARLdSKjvHv&@jO-2^UA*OQF0uLwu9q(6m50t
  384. zGhZw*SS*n%Sv1=vt`V<u^R(5xyYYL(%^gEg)f@s2P_W>~zk(Iljvnk?cily6Yb(00
  385. z4{L^Duwlc7aw>ci@L%J#0DwsZQFG1R@PYTDOwa@THZad+hkFK3rCZogNQN5sg623b
  386. zCC61|YsaBrIoOUvqEz4l+0H4(D;%46jF_=LoX^7+sURQ%JG<3Xw`!CD!_7C}%)*5W
  387. zF-;RKD5IB`(Ob4`Vdct|Wren&Qm0|^X8Qs?sD1UPmt798{^4?tYFeW>@i)WZW@bBg
  388. zFgvlBZ1u_Pc8{TBu!aMr82y&OMk26CdO0SMp-Hqe)!0r`@@XR4meKR4huS0534@*M
  389. z!K2T^6}Jta=K<!;o5w{LUBuL>QyCl_B#}rEjYcsHgIFwvZQDHhXjlxoZY=Qd<`z(v
  390. zD}f&Zyt@8+j+(L)@^`Djx~PSSjhdg!e_e*=>vEF}kL2ZF_kzBXA>WU{z8u{41l;(m
  391. z(F1C2ZKbWPjTtj$(A3mKDwPVSKGQT2Lh#F9{*oJSyb)AEbW!jtqhvgbyY(m|{rex@
  392. z^%M(Ey^wkHKL$=cSZTFeT%MmjMo(KKxB2~ms3NM0Q({<H+T8;`S_eySgy&ux{%CV^
  393. zGc#w-q^_<GDJ8D!BBewK5&FFlg6E!lj%%;I7L@6q#TW_Dp%4J-lvNs7`iuLY#)#K5
  394. z>$o$iZMhh#mw<jOXtRK6KnlDn#hG6ZUKE@JloF6Hs38?mR#GNNgB?Ba!{5UP?|>&?
  395. z9S*v&v5|&`hA_wXg5089Jn=jaUDwexjTc{hk*|I2YoIj#LEfY!4u^hD@IAoO<%`>H
  396. z{b!baU=dRr>k+;Ub`c60)iV2`Zy#jSkn4it02D27(%^&R!Oje9>V&mh;l7HzsHLTa
  397. zcsxFANjp*u!yu7JkVqt`udgSSO3~5L!Rpnk%iu2o9{fvy4(FicB;XsU*kAxGS+an0
  398. z&soHA$4sXwRZYw<5_K}ftO4|a4szXHWV*ZQ>+7SpH_i4g_}R;_zJ2(Mo12@%GS+y+
  399. zFbv}HI6??IIy%Zlj{#sg@WgoD@m5ZX&Hz3RtRN_)9)`S%s@uPTs@|H1LPEJ<8qD*c
  400. z%>Bc>$zI?{c{>hE3)CT`#i-L*^H3*ClBhhc6tqrMHnttLSGS(wJ2vN{s<%;4ZV-t?
  401. z!g4tb6->vd5)YuJx?4F&wEw>%ZNRe(pF`fP?FGILjNflY$lv<k=Ef3%`Zv1sQ8m04
  402. yR3*nl%|zQ#*7G><0%H_8-jR3Y9eGE_EB^yvNfC*>uwT*u0000<MNUMnLSTZ?Yewh*
  403.  
  404. literal 0
  405. HcmV?d00001
  406.  
  407. diff --git a/src/modules/MediaKit/MediaKit.pro b/src/modules/MediaKit/MediaKit.pro
  408. new file mode 100644
  409. index 0000000..bf0c648
  410. --- /dev/null
  411. +++ b/src/modules/MediaKit/MediaKit.pro
  412. @@ -0,0 +1,21 @@
  413. +TEMPLATE = lib
  414. +CONFIG += plugin
  415. +
  416. +QT += widgets
  417. +
  418. +DESTDIR = ../../../app/lib/qmplay2/modules
  419. +
  420. +QMAKE_LIBDIR += ../../../app/lib
  421. +LIBS += -lqmplay2 -lmedia -lbe
  422. +
  423. +OBJECTS_DIR = build/obj
  424. +MOC_DIR = build/moc
  425. +RCC_DIR = build/rcc
  426. +
  427. +RESOURCES += icon.qrc
  428. +
  429. +INCLUDEPATH += . ../../qmplay2/headers
  430. +DEPENDPATH += . ../../qmplay2/headers
  431. +
  432. +HEADERS += MediaKit.hpp MediaKitoWriter.hpp SndPlayer.hpp RingBuffer.hpp
  433. +SOURCES += MediaKit.cpp MediaKitWriter.cpp SndPlayer.cpp RingBuffer.cpp
  434. diff --git a/src/modules/MediaKit/MediaKitWriter.cpp b/src/modules/MediaKit/MediaKitWriter.cpp
  435. new file mode 100644
  436. index 0000000..f8fad50
  437. --- /dev/null
  438. +++ b/src/modules/MediaKit/MediaKitWriter.cpp
  439. @@ -0,0 +1,85 @@
  440. +#include <MediaKitWriter.hpp>
  441. +#include <QMPlay2Core.hpp>
  442. +
  443. +MediaKitWriter::MediaKitWriter( Module &module ) :
  444. +   err( false )
  445. +{
  446. +   addParam( "delay" );
  447. +   addParam( "chn" );
  448. +   addParam( "rate" );
  449. +
  450. +   SetModule( module );
  451. +}
  452. +
  453. +bool MediaKitWriter::set()
  454. +{
  455. +   if ( player.delay != sets().getDouble( "Delay" ) )
  456. +   {
  457. +       player.delay = sets().getDouble( "Delay" );
  458. +       return false;
  459. +   }
  460. +   return sets().getBool( "WriterEnabled" );
  461. +}
  462. +
  463. +bool MediaKitWriter::readyWrite() const
  464. +{
  465. +   return !err && player.isOpen();
  466. +}
  467. +
  468. +bool MediaKitWriter::processParams( bool * )
  469. +{
  470. +   bool resetAudio = false;
  471. +
  472. +   uchar chn = getParam( "chn" ).toUInt();
  473. +   if ( player.channels != chn )
  474. +   {
  475. +       resetAudio = true;
  476. +       player.channels = chn;
  477. +   }
  478. +   uint rate = getParam( "rate" ).toUInt();
  479. +   if ( player.sample_rate != rate )
  480. +   {
  481. +       resetAudio = true;
  482. +       player.sample_rate = rate;
  483. +   }
  484. +
  485. +   if ( resetAudio || err )
  486. +   {
  487. +       player.stop();
  488. +       err = !player.start();
  489. +       if ( !err )
  490. +           modParam( "delay", player.delay );
  491. +       else
  492. +           QMPlay2Core.logError( "MediaKitWriter :: " + tr ( "Nie można otworzyć strumienia wyjścia dźwięku" ) );
  493. +   }
  494. +
  495. +   return readyWrite();
  496. +}
  497. +qint64 MediaKitWriter::write( const QByteArray &arr )
  498. +{
  499. +   if ( !arr.size() || !readyWrite() )
  500. +       return 0;
  501. +
  502. +   err = !player.write( arr );
  503. +   if ( err )
  504. +   {
  505. +       QMPlay2Core.logError( "MediaKitWriter :: " + tr ( "Błąd podczas odtwarzania" ) );
  506. +       return 0;
  507. +   }
  508. +
  509. +   return arr.size();
  510. +}
  511. +
  512. +qint64 MediaKitWriter::size() const
  513. +{
  514. +   return -1;
  515. +}
  516. +QString MediaKitWriter::name() const
  517. +{
  518. +   return MediaKitWriterName;
  519. +}
  520. +
  521. +bool MediaKitWriter::open()
  522. +{
  523. +   return player.isOK();
  524. +}
  525. diff --git a/src/modules/MediaKit/MediaKitWriter.hpp b/src/modules/MediaKit/MediaKitWriter.hpp
  526. new file mode 100644
  527. index 0000000..28fa249
  528. --- /dev/null
  529. +++ b/src/modules/MediaKit/MediaKitWriter.hpp
  530. @@ -0,0 +1,30 @@
  531. +#include <Writer.hpp>
  532. +#include <SndPlayer.hpp>
  533. +
  534. +#include <QCoreApplication>
  535. +
  536. +class MediaKitWriter : public Writer
  537. +{
  538. +   Q_DECLARE_TR_FUNCTIONS( MediaKitWriter )
  539. +public:
  540. +   MediaKitWriter( Module & );
  541. +private:
  542. +   bool set();
  543. +
  544. +   bool readyWrite() const;
  545. +
  546. +   bool processParams( bool *paramsCorrected );
  547. +   qint64 write( const QByteArray & );
  548. +
  549. +   qint64 size() const;
  550. +   QString name() const;
  551. +
  552. +   bool open();
  553. +
  554. +   /**/
  555. +
  556. +   SndPlayer player;
  557. +   bool err;
  558. +};
  559. +
  560. +#define MediaKitWriterName "MediaKit Writer"
  561. diff --git a/src/modules/MediaKit/RingBuffer.cpp b/src/modules/MediaKit/RingBuffer.cpp
  562. new file mode 100644
  563. index 0000000..915becc
  564. --- /dev/null
  565. +++ b/src/modules/MediaKit/RingBuffer.cpp
  566. @@ -0,0 +1,129 @@
  567. +#include <stdio.h>
  568. +#include <stdlib.h>
  569. +#include <string.h>
  570. +
  571. +#include "RingBuffer.hpp"
  572. +
  573. +RingBuffer::RingBuffer( int size )
  574. +{
  575. +    initialized = false;
  576. +     Buffer = new unsigned char[size];
  577. +     if(Buffer!=NULL) {
  578. +       memset( Buffer, 0, size );
  579. +       BufferSize = size;      
  580. +     } else {
  581. +       BufferSize = 0;
  582. +     }
  583. +     reader = 0;
  584. +     writer = 0;
  585. +     writeBytesAvailable = size;
  586. +     if((locker=create_sem(1,"locker")) >= B_OK) {
  587. +       initialized = true;
  588. +     } else {
  589. +       if(Buffer!=NULL) {
  590. +           delete[] Buffer;           
  591. +       }
  592. +     }
  593. +}
  594. +
  595. +RingBuffer::~RingBuffer( )
  596. +{
  597. +    if(initialized) {
  598. +       delete[] Buffer;
  599. +       delete_sem(locker);
  600. +    }
  601. +}
  602. +
  603. +bool
  604. +RingBuffer::Empty( void )
  605. +{
  606. +     memset( Buffer, 0, BufferSize );
  607. +     reader = 0;
  608. +     writer = 0;
  609. +     writeBytesAvailable = BufferSize;
  610. +     return true;
  611. +}
  612. +
  613. +int
  614. +RingBuffer::Read( unsigned char *data, int size )
  615. +{ 
  616. +    acquire_sem(locker);
  617. +    
  618. +     if( data == 0 || size <= 0 || writeBytesAvailable == BufferSize ) {
  619. +        release_sem(locker);
  620. +         return 0;
  621. +     }
  622. +
  623. +     int readBytesAvailable = BufferSize - writeBytesAvailable;
  624. +
  625. +     if( size > readBytesAvailable ) {
  626. +         size = readBytesAvailable;
  627. +     }
  628. +
  629. +     if(size > BufferSize - reader) {
  630. +         int len = BufferSize - reader;
  631. +         memcpy(data, Buffer + reader, len);
  632. +         memcpy(data + len, Buffer, size-len);
  633. +     } else {
  634. +         memcpy(data, Buffer + reader, size);
  635. +     }
  636. +
  637. +     reader = (reader + size) % BufferSize;
  638. +     writeBytesAvailable += size;
  639. +    
  640. +    release_sem(locker);
  641. +     return size;
  642. +}
  643. +
  644. +int
  645. +RingBuffer::Write( unsigned char *data, int size )
  646. +{
  647. +    acquire_sem(locker);
  648. +    
  649. +     if( data == 0 || size <= 0 || writeBytesAvailable == 0 ) {
  650. +        release_sem(locker);
  651. +         return 0;
  652. +     }
  653. +
  654. +     if( size > writeBytesAvailable ) {
  655. +         size = writeBytesAvailable;
  656. +     }
  657. +
  658. +     if(size > BufferSize - writer) {
  659. +         int len = BufferSize - writer;
  660. +         memcpy(Buffer + writer, data, len);
  661. +         memcpy(Buffer, data+len, size-len);
  662. +     } else {
  663. +         memcpy(Buffer + writer, data, size);
  664. +     }
  665. +
  666. +     writer = (writer + size) % BufferSize;
  667. +     writeBytesAvailable -= size;
  668. +
  669. +    release_sem(locker);    
  670. +     return size;
  671. +}
  672. +
  673. +int
  674. +RingBuffer::GetSize( void )
  675. +{
  676. +     return BufferSize;
  677. +}
  678. +
  679. +int
  680. +RingBuffer::GetWriteAvailable( void )
  681. +{
  682. +     return writeBytesAvailable;
  683. +}
  684. +
  685. +int
  686. +RingBuffer::GetReadAvailable( void )
  687. +{
  688. +     return BufferSize - writeBytesAvailable;
  689. +}
  690. +
  691. +status_t
  692. +RingBuffer::InitCheck( void )
  693. +{
  694. +   return initialized?B_OK:B_ERROR;
  695. +}
  696. diff --git a/src/modules/MediaKit/RingBuffer.hpp b/src/modules/MediaKit/RingBuffer.hpp
  697. new file mode 100644
  698. index 0000000..4715632
  699. --- /dev/null
  700. +++ b/src/modules/MediaKit/RingBuffer.hpp
  701. @@ -0,0 +1,31 @@
  702. +#ifndef __RING_BUFFER_H__
  703. +#define __RING_BUFFER_H__
  704. +
  705. +#include <OS.h>
  706. +
  707. +class RingBuffer {
  708. +
  709. +public:
  710. +     RingBuffer(int size);
  711. +     ~RingBuffer();
  712. +     int Read( unsigned char* dataPtr, int numBytes );
  713. +     int Write( unsigned char *dataPtr, int numBytes );
  714. +    
  715. +     bool Empty( void );
  716. +     int GetSize( );
  717. +     int GetWriteAvailable( );
  718. +     int GetReadAvailable( );
  719. +     status_t InitCheck( );
  720. +private:
  721. +     unsigned char *Buffer;
  722. +     int BufferSize;
  723. +     int reader;
  724. +     int writer;
  725. +     int writeBytesAvailable;
  726. +    
  727. +     sem_id locker;
  728. +    
  729. +     bool  initialized;
  730. +};
  731. +
  732. +#endif
  733. diff --git a/src/modules/MediaKit/SndPlayer.cpp b/src/modules/MediaKit/SndPlayer.cpp
  734. new file mode 100644
  735. index 0000000..ca7ad89
  736. --- /dev/null
  737. +++ b/src/modules/MediaKit/SndPlayer.cpp
  738. @@ -0,0 +1,103 @@
  739. +#include <SndPlayer.hpp>
  740. +
  741. +#include <string.h>
  742. +#include <stdio.h>
  743. +#include <stdlib.h>
  744. +#include <SoundPlayer.h>
  745. +
  746. +
  747. +static void proc(void *cookie, void *buffer, size_t len, const media_raw_audio_format &format)
  748. +{
  749. +   RingBuffer *ring = (RingBuffer*)cookie;
  750. +   unsigned char* ptr = (unsigned char*)buffer;
  751. +  
  752. +   int readed = ring->Read(ptr,len);
  753. +  
  754. +   if(readed <len)
  755. +       memset(ptr+readed, 0, len - readed);
  756. +}
  757. +
  758. +SndPlayer::SndPlayer()
  759. +{ 
  760. +   channels = sample_rate = delay = 0;
  761. +   player = NULL;
  762. +   _isOK = true;  
  763. +}
  764. +
  765. +bool SndPlayer::start()
  766. +{
  767. +   int gSoundBufferSize = 8192 * sizeof(float);
  768. +      
  769. +   media_raw_audio_format form = {
  770. +       sample_rate,
  771. +       channels,
  772. +       media_raw_audio_format::B_AUDIO_FLOAT,
  773. +       B_MEDIA_LITTLE_ENDIAN,
  774. +       gSoundBufferSize
  775. +   };
  776. +  
  777. +   ring = new RingBuffer(gSoundBufferSize * 3);
  778. +   if(ring->InitCheck() != B_OK) {
  779. +       delete ring; ring = 0;
  780. +       return false;
  781. +   }
  782. +          
  783. +   player = new BSoundPlayer(&form, "QMPlay2_BSoundPlayer", proc, NULL, (void*)ring);
  784. +  
  785. +   if(player->InitCheck() != B_OK) {
  786. +       delete player;
  787. +       player = NULL;
  788. +       return false;
  789. +   }
  790. +  
  791. +   player->Start();
  792. +   player->SetHasData(true);  
  793. +
  794. +   _isOK = true;
  795. +
  796. +   return player;
  797. +}
  798. +void SndPlayer::stop()
  799. +{
  800. +   if ( player )
  801. +   {
  802. +       if(player) {
  803. +           player->Stop();
  804. +           delete player;
  805. +           delete ring;
  806. +       }
  807. +  
  808. +       player = NULL;
  809. +       ring = NULL;
  810. +   }  
  811. +}
  812. +
  813. +double SndPlayer::getLatency()
  814. +{
  815. +   double lat = player->Latency() / (ring->GetSize()*4.0);
  816. +
  817. +   return lat;
  818. +}
  819. +
  820. +bool SndPlayer::write( const QByteArray &arr )
  821. +{
  822. +   int s = arr.size();
  823. +   while ( s > 0 && s % 4 )
  824. +       s--;
  825. +   if ( s <= 0 )
  826. +       return false;
  827. +
  828. +   int len=s;
  829. +
  830. +   unsigned char *src_ptr = (unsigned char *)arr.data();
  831. +  
  832. +   for(;;) {
  833. +           int len2 = ring->Write(src_ptr,len);
  834. +           if(len2 == len)break;
  835. +           len -= len2;
  836. +           src_ptr += len2;
  837. +           snooze(100);
  838. +   }
  839. +      
  840. +   return true;
  841. +}
  842. diff --git a/src/modules/MediaKit/SndPlayer.hpp b/src/modules/MediaKit/SndPlayer.hpp
  843. new file mode 100644
  844. index 0000000..b0ca8c2
  845. --- /dev/null
  846. +++ b/src/modules/MediaKit/SndPlayer.hpp
  847. @@ -0,0 +1,49 @@
  848. +#ifndef PULSE_HPP
  849. +#define PULSE_HPP
  850. +
  851. +#include <QByteArray>
  852. +
  853. +#include <SoundPlayer.h>
  854. +
  855. +#include <Window.h>
  856. +#include <View.h>
  857. +#include <TextControl.h>
  858. +
  859. +#include "RingBuffer.hpp"
  860. +
  861. +class SndPlayer
  862. +{
  863. +public:
  864. +   SndPlayer();
  865. +   inline ~SndPlayer()
  866. +   {
  867. +       stop();
  868. +   }
  869. +
  870. +   inline bool isOK() const
  871. +   {
  872. +       return _isOK;
  873. +   }
  874. +   inline bool isOpen() const
  875. +   {
  876. +       return player;
  877. +   }
  878. +
  879. +   bool start();
  880. +   void stop();
  881. +
  882. +   double getLatency();
  883. +
  884. +   bool write( const QByteArray & );
  885. +
  886. +   double delay;
  887. +   uchar channels;
  888. +   uint sample_rate;
  889. +      
  890. +private:
  891. +   bool _isOK;
  892. +   BSoundPlayer *player;
  893. +   RingBuffer *ring;
  894. +};
  895. +
  896. +#endif
  897. diff --git a/src/modules/MediaKit/icon.qrc b/src/modules/MediaKit/icon.qrc
  898. new file mode 100644
  899. index 0000000..24b4ebd
  900. --- /dev/null
  901. +++ b/src/modules/MediaKit/icon.qrc
  902. @@ -0,0 +1,3 @@
  903. +<RCC><qresource>
  904. +   <file alias="MediaKit">MediaKit.png</file>
  905. +</qresource></RCC>
  906. diff --git a/src/modules/modules.pro b/src/modules/modules.pro
  907. index 6e853ea..d0f6c21 100644
  908. --- a/src/modules/modules.pro
  909. +++ b/src/modules/modules.pro
  910. @@ -1,7 +1,7 @@
  911.  TEMPLATE = subdirs
  912.  SUBDIRS = FFmpeg Inputs Modplug Playlists Subtitles QPainter Extensions Visualizations AudioFilters VideoFilters CUVID
  913.  
  914. -!contains(QT_CONFIG, opengles1): SUBDIRS += OpenGL2
  915. +!contains(QT_CONFIG, opengles1):!haiku: SUBDIRS += OpenGL2
  916.  else: message("OpenGL doesn't work with OpenGL|ES 1.0")
  917.  
  918.  !android: SUBDIRS += AudioCD Notify
  919. @@ -10,11 +10,14 @@ linux*: {
  920.     !android: SUBDIRS += ALSA
  921.     else: SUBDIRS += OpenSLES
  922.  }
  923. +haiku {
  924. +   SUBDIRS += MediaKit
  925. +}
  926.  else {
  927.     SUBDIRS += PortAudio
  928.  }
  929.  
  930. -unix:!android {
  931. +unix:!android:!haiku {
  932.     SUBDIRS += XVideo
  933.  
  934.     packagesExist(libpulse-simple): SUBDIRS += PulseAudio
  935. diff --git a/src/qmplay2/QMPlay2Core.cpp b/src/qmplay2/QMPlay2Core.cpp
  936. index 9506f86..2bb12ee 100644
  937. --- a/src/qmplay2/QMPlay2Core.cpp
  938. +++ b/src/qmplay2/QMPlay2Core.cpp
  939. @@ -167,7 +167,7 @@ void QMPlay2CoreClass::init(bool loadModules, bool modulesInSubdirs, const QStri
  940.         settingsDir = QCoreApplication::applicationDirPath() + "/settings/";
  941.     else
  942.     {
  943. -#if defined(Q_OS_WIN)
  944. +#if defined(Q_OS_WIN) || defined(Q_OS_HAIKU)
  945.         settingsDir = QFileInfo(QSettings(QSettings::IniFormat, QSettings::UserScope, QString()).fileName()).absolutePath() + "/QMPlay2/";
  946.  #elif defined(Q_OS_MAC)
  947.         settingsDir = Functions::cleanPath(QStandardPaths::standardLocations(QStandardPaths::DataLocation).value(0, settingsDir));
  948. @@ -363,6 +363,11 @@ QStringList QMPlay2CoreClass::getModules(const QString &type, int typeLen) const
  949.  #elif defined Q_OS_WIN
  950.     if (type == "videoWriters")
  951.         defaultModules << "OpenGL 2" << "DirectDraw";
  952. +#elif defined Q_OS_HAIKU
  953. +   if ( type == "videoWriters" )
  954. +       defaultModules << "QPainter";
  955. +   else if ( type == "audioWriters" )
  956. +       defaultModules << "MediaKit";
  957.  #endif
  958.     if (type == "decoders")
  959.         defaultModules << "FFmpeg Decoder";
  960. --
  961. 2.12.2
  962.  
  963.  
  964. From 815d8cbade878d42ab405d77cadece5ffdd2f635 Mon Sep 17 00:00:00 2001
  965. From: Khaled Berraoui <khallebal@gmail.com>
  966. Date: Tue, 13 Jun 2017 00:00:19 +0100
  967. Subject: Switch to cmake build system
  968.  
  969.  
  970. diff --git a/CMakeLists.txt b/CMakeLists.txt
  971. index ebea6b6..5a5b191 100644
  972. --- a/CMakeLists.txt
  973. +++ b/CMakeLists.txt
  974. @@ -64,6 +64,12 @@ else()
  975.      set(DEFAULT_CUVID ON)
  976.  endif()
  977.  
  978. +if(HAIKU)
  979. +   set(DEFAULT_MEDIAKIT ON)
  980. +else()
  981. +   set(DEFAULT_MEDIAKIT OFF)
  982. +endif()
  983. +
  984.  add_definitions(-D__STDC_CONSTANT_MACROS -D__STDC_LIMIT_MACROS -DQT_USE_FAST_OPERATOR_PLUS)
  985.  
  986.  if(WIN32)
  987. @@ -81,7 +87,7 @@ if(USE_QT5 AND NOT Qt5Widgets_FOUND)
  988.      find_package(Qt5Widgets REQUIRED)
  989.  endif()
  990.  
  991. -if(NOT WIN32 AND NOT APPLE)
  992. +if(NOT WIN32 AND NOT APPLE AND NOT HAIKU)
  993.      option(USE_FREEDESKTOP_NOTIFICATIONS "Use Freedesktop notifications" ON)
  994.      add_feature_info("Freedesktop notifications" USE_FREEDESKTOP_NOTIFICATIONS "Use Freedesktop notifications")
  995.  endif()
  996. @@ -110,6 +116,9 @@ add_feature_info(libass USE_LIBASS "Build with libass support")
  997.  option(USE_INPUTS "Build with Inputs module" ON)
  998.  add_feature_info(Inputs USE_INPUTS "Build with Inputs module")
  999.  
  1000. +option(USE_MEDIAKIT "Build with MediaKit module" ON)
  1001. +add_feature_info(MediaKit USE_MEDIAKIT "Build with MediaKit module")
  1002. +
  1003.  option(USE_MODPLUG "Build with Modplug module" ON)
  1004.  add_feature_info(Modplug USE_MODPLUG "Build with Modplug module")
  1005.  
  1006. @@ -326,7 +335,7 @@ if(APPLE)
  1007.      set(DEFAULT_INSTALL_RPATH ON)
  1008.  endif()
  1009.  
  1010. -if(NOT WIN32 AND NOT APPLE)
  1011. +if(NOT WIN32 AND NOT APPLE AND NOT HAIKU)
  1012.      # RPATH
  1013.      option(SET_INSTALL_RPATH "Set RPATH for executable after install" ${DEFAULT_INSTALL_RPATH})
  1014.  
  1015. @@ -339,7 +348,7 @@ if(LANGUAGES)
  1016.      add_subdirectory(lang)
  1017.  endif()
  1018.  
  1019. -if(WIN32)
  1020. +if(WIN32 OR HAIKU)
  1021.      install(FILES AUTHORS ChangeLog LICENSE TODO README.md DESTINATION ${CMAKE_INSTALL_PREFIX})
  1022.  else()
  1023.      install(FILES AUTHORS ChangeLog LICENSE TODO README.md DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/qmplay2")
  1024. diff --git a/lang/CMakeLists.txt b/lang/CMakeLists.txt
  1025. index f5f86be..9b4fcf7 100644
  1026. --- a/lang/CMakeLists.txt
  1027. +++ b/lang/CMakeLists.txt
  1028. @@ -21,7 +21,7 @@ endif()
  1029.  
  1030.  add_custom_target(translations ALL DEPENDS ${QM_FILES})
  1031.  
  1032. -if(WIN32)
  1033. +if(WIN32 OR HAIKU)
  1034.      install(FILES ${QM_FILES} DESTINATION "lang/")
  1035.  else()
  1036.      install(FILES ${QM_FILES} DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/qmplay2/lang")
  1037. diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt
  1038. index 5853dc9..6adc25b 100644
  1039. --- a/src/gui/CMakeLists.txt
  1040. +++ b/src/gui/CMakeLists.txt
  1041. @@ -210,7 +210,7 @@ elseif(USE_TAGLIB)
  1042.      target_link_libraries(${PROJECT_NAME} ${TAGLIB_LIBRARIES})
  1043.  endif()
  1044.  
  1045. -if(WIN32)
  1046. +if(WIN32 OR HAIKU)
  1047.      install(TARGETS ${PROJECT_NAME} RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/)
  1048.  elseif(APPLE)
  1049.      install(TARGETS ${PROJECT_NAME} BUNDLE DESTINATION ${CMAKE_INSTALL_PREFIX})
  1050. diff --git a/src/modules/CMakeLists.txt b/src/modules/CMakeLists.txt
  1051. index 203c68d..f2f3240 100644
  1052. --- a/src/modules/CMakeLists.txt
  1053. +++ b/src/modules/CMakeLists.txt
  1054. @@ -7,6 +7,9 @@ if(WIN32)
  1055.  elseif(APPLE)
  1056.      set(MODULES_INSTALL_PATH "${CMAKE_INSTALL_LIBDIR}/modules")
  1057.      set(QMPLAY2_MODULE SHARED) # otherwise CMake uses ".so" extension
  1058. +elseif(HAIKU)
  1059. +   set(MODULES_INSTALL_PATH "modules")
  1060. +   set(QMPLAY2_MODULE MODULE)
  1061.  else()
  1062.      set(MODULES_INSTALL_PATH "${CMAKE_INSTALL_LIBDIR}/qmplay2/modules")
  1063.      set(QMPLAY2_MODULE MODULE)
  1064. @@ -77,6 +80,10 @@ if(WIN32)
  1065.      add_subdirectory(FileAssociation)
  1066.  endif()
  1067.  
  1068. +if(HAIKU)
  1069. +   add_subdirectory(MediaKit)
  1070. +endif()
  1071. +
  1072.  if(USE_CUVID)
  1073.      add_subdirectory(CUVID)
  1074.  endif()
  1075. diff --git a/src/modules/Notify/Notify.pro b/src/modules/Notify/Notify.pro
  1076. index 345da48..c631a69 100644
  1077. --- a/src/modules/Notify/Notify.pro
  1078. +++ b/src/modules/Notify/Notify.pro
  1079. @@ -3,8 +3,14 @@ CONFIG += plugin
  1080.  
  1081.  QT += widgets
  1082.  
  1083. +haiku {
  1084. +   DESTDIR = ../../../app/modules
  1085. +   QMAKE_LIBDIR += ../../../app/lib
  1086. +}
  1087. +   else {
  1088.  DESTDIR = ../../../app/lib/qmplay2/modules
  1089.  QMAKE_LIBDIR += ../../../app/lib
  1090. +}
  1091.  
  1092.  LIBS += -lqmplay2
  1093.  
  1094. diff --git a/src/qmplay2/CMakeLists.txt b/src/qmplay2/CMakeLists.txt
  1095. index c41de09..038ecb1 100644
  1096. --- a/src/qmplay2/CMakeLists.txt
  1097. +++ b/src/qmplay2/CMakeLists.txt
  1098. @@ -227,7 +227,7 @@ if(WIN32)
  1099.      install(TARGETS ${PROJECT_NAME} RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX})
  1100.  else()
  1101.      install(TARGETS ${PROJECT_NAME} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
  1102. -    if(NOT APPLE)
  1103. +    if(NOT APPLE OR NOT HAIKU)
  1104.          install(FILES ${QMPLAY2_HDR} DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/QMPlay2")
  1105.      endif()
  1106.  
  1107. diff --git a/src/qmplay2/qmplay2.pro b/src/qmplay2/qmplay2.pro
  1108. index 2d34804..1c0c6c6 100644
  1109. --- a/src/qmplay2/qmplay2.pro
  1110. +++ b/src/qmplay2/qmplay2.pro
  1111. @@ -28,7 +28,7 @@ DEPENDPATH  += . headers
  1112.  HEADERS += headers/QMPlay2Core.hpp headers/Functions.hpp headers/Settings.hpp headers/Module.hpp headers/ModuleParams.hpp headers/ModuleCommon.hpp headers/Playlist.hpp headers/Reader.hpp headers/Demuxer.hpp headers/Decoder.hpp headers/VideoFilters.hpp headers/VideoFilter.hpp headers/DeintFilter.hpp headers/AudioFilter.hpp headers/Writer.hpp headers/QMPlay2Extensions.hpp headers/LineEdit.hpp headers/Slider.hpp headers/QMPlay2OSD.hpp headers/InDockW.hpp headers/LibASS.hpp headers/ColorButton.hpp headers/ImgScaler.hpp headers/SndResampler.hpp headers/VideoWriter.hpp headers/SubsDec.hpp headers/ByteArray.hpp headers/TimeStamp.hpp headers/Packet.hpp headers/VideoFrame.hpp headers/StreamInfo.hpp headers/DockWidget.hpp headers/IOController.hpp headers/ChapterProgramInfo.hpp headers/PacketBuffer.hpp headers/Buffer.hpp headers/NetworkAccess.hpp headers/Json11.hpp headers/YouTubeDL.hpp headers/Notifies.hpp headers/NotifiesTray.hpp headers/Version.hpp headers/IPC.hpp headers/MkvMuxer.hpp headers/CPU.hpp headers/PixelFormats.hpp headers/HWAccelInterface.hpp headers/VideoAdjustment.hpp
  1113.  SOURCES +=         QMPlay2Core.cpp         Functions.cpp         Settings.cpp         Module.cpp         ModuleParams.cpp         ModuleCommon.cpp         Playlist.cpp         Reader.cpp         Demuxer.cpp         Decoder.cpp         VideoFilters.cpp         VideoFilter.cpp         DeintFilter.cpp         AudioFilter.cpp         Writer.cpp         QMPlay2Extensions.cpp         LineEdit.cpp         Slider.cpp         QMPlay2OSD.cpp         InDockW.cpp         LibASS.cpp         ColorButton.cpp         ImgScaler.cpp         SndResampler.cpp         VideoWriter.cpp         SubsDec.cpp                                                                        VideoFrame.cpp         StreamInfo.cpp         DockWidget.cpp                                                                 PacketBuffer.cpp         Buffer.cpp         NetworkAccess.cpp         Json11.cpp         YouTubeDL.cpp         Notifies.cpp         NotifiesTray.cpp         Version.cpp    IPC_Unix.cpp         MkvMuxer.cpp
  1114.  
  1115. -unix:!android {
  1116. +unix:!android:!haiku {
  1117.     QT += dbus
  1118.     DBUS_INTERFACES += org.freedesktop.Notifications.xml
  1119.     HEADERS += headers/NotifiesFreedesktop.hpp
  1120. @@ -39,6 +39,6 @@ DEFINES += __STDC_CONSTANT_MACROS
  1121.  !android: DEFINES += QMPLAY2_LIBASS
  1122.  
  1123.  # Uncomment below lines for avresample:
  1124. -#DEFINES += QMPLAY2_AVRESAMPLE
  1125. -#PKGCONFIG -= libswresample
  1126. -#PKGCONFIG += libavresample
  1127. +DEFINES += QMPLAY2_AVRESAMPLE
  1128. +PKGCONFIG -= libswresample
  1129. +PKGCONFIG += libavresample
  1130. --
  1131. 2.12.2
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement