vlc-video-plugin.h 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251
  1. #include <obs-module.h>
  2. #include <libvlc.h>
  3. #ifdef _MSC_VER
  4. #include <basetsd.h>
  5. typedef SSIZE_T ssize_t;
  6. #endif
  7. #include <libvlc_media.h>
  8. #include <libvlc_events.h>
  9. #include <libvlc_media_list.h>
  10. #include <libvlc_media_player.h>
  11. #include <libvlc_media_list_player.h>
  12. extern libvlc_instance_t *libvlc;
  13. extern uint64_t time_start;
  14. extern bool load_libvlc(void);
  15. /* libvlc core */
  16. typedef libvlc_instance_t *(*LIBVLC_NEW)(int argc, const char *const *argv);
  17. typedef void (*LIBVLC_RELEASE)(libvlc_instance_t *p_instance);
  18. typedef const char *(*LIBVLC_GET_VERSION)(void);
  19. typedef int64_t (*LIBVLC_CLOCK)(void);
  20. typedef int (*LIBVLC_EVENT_ATTACH)(libvlc_event_manager_t *p_event_manager,
  21. libvlc_event_type_t i_event_type,
  22. libvlc_callback_t f_callback,
  23. void *user_data);
  24. /* libvlc media */
  25. typedef libvlc_media_t *(*LIBVLC_MEDIA_NEW_PATH)(libvlc_instance_t *p_instance,
  26. const char *path);
  27. typedef libvlc_media_t *(*LIBVLC_MEDIA_NEW_LOCATION)(
  28. libvlc_instance_t *p_instance, const char *location);
  29. typedef void (*LIBVLC_MEDIA_ADD_OPTION)(libvlc_media_t *p_md,
  30. const char *options);
  31. typedef void (*LIBVLC_MEDIA_RETAIN)(libvlc_media_t *p_md);
  32. typedef void (*LIBVLC_MEDIA_RELEASE)(libvlc_media_t *p_md);
  33. typedef char *(*LIBVLC_MEDIA_GET_META)(libvlc_media_t *p_md,
  34. libvlc_meta_t e_meta);
  35. typedef unsigned (*LIBVLC_MEDIA_TRACKS_GET)(libvlc_media_t *p_md,
  36. libvlc_media_track_t ***pp_es);
  37. typedef void (*LIBVLC_MEDIA_TRACKS_RELEASE)(libvlc_media_track_t **p_tracks,
  38. unsigned i_count);
  39. /* libvlc media player */
  40. typedef libvlc_media_player_t *(*LIBVLC_MEDIA_PLAYER_NEW)(
  41. libvlc_instance_t *p_libvlc);
  42. typedef libvlc_media_player_t *(*LIBVLC_MEDIA_PLAYER_NEW_FROM_MEDIA)(
  43. libvlc_media_t *p_md);
  44. typedef void (*LIBVLC_MEDIA_PLAYER_RELEASE)(libvlc_media_player_t *p_mi);
  45. typedef void (*LIBVLC_VIDEO_SET_CALLBACKS)(libvlc_media_player_t *mp,
  46. libvlc_video_lock_cb lock,
  47. libvlc_video_unlock_cb unlock,
  48. libvlc_video_display_cb display,
  49. void *opaque);
  50. typedef void (*LIBVLC_VIDEO_SET_FORMAT_CALLBACKS)(
  51. libvlc_media_player_t *mp, libvlc_video_format_cb setup,
  52. libvlc_video_cleanup_cb cleanup);
  53. typedef void (*LIBVLC_AUDIO_SET_CALLBACKS)(
  54. libvlc_media_player_t *mp, libvlc_audio_play_cb play,
  55. libvlc_audio_pause_cb pause, libvlc_audio_resume_cb resume,
  56. libvlc_audio_flush_cb flush, libvlc_audio_drain_cb drain, void *opaque);
  57. typedef void (*LIBVLC_AUDIO_SET_FORMAT_CALLBACKS)(
  58. libvlc_media_player_t *mp, libvlc_audio_setup_cb setup,
  59. libvlc_audio_cleanup_cb cleanup);
  60. typedef int (*LIBVLC_MEDIA_PLAYER_PLAY)(libvlc_media_player_t *p_mi);
  61. typedef void (*LIBVLC_MEDIA_PLAYER_STOP)(libvlc_media_player_t *p_mi);
  62. typedef libvlc_time_t (*LIBVLC_MEDIA_PLAYER_GET_TIME)(
  63. libvlc_media_player_t *p_mi);
  64. typedef void (*LIBVLC_MEDIA_PLAYER_SET_TIME)(libvlc_media_player_t *p_mi,
  65. libvlc_time_t i_time);
  66. typedef int (*LIBVLC_VIDEO_GET_SIZE)(libvlc_media_player_t *p_mi, unsigned num,
  67. unsigned *px, unsigned *py);
  68. typedef libvlc_event_manager_t *(*LIBVLC_MEDIA_PLAYER_EVENT_MANAGER)(
  69. libvlc_media_player_t *p_mp);
  70. typedef libvlc_state_t (*LIBVLC_MEDIA_PLAYER_GET_STATE)(
  71. libvlc_media_player_t *p_mi);
  72. typedef libvlc_time_t (*LIBVLC_MEDIA_PLAYER_GET_LENGTH)(
  73. libvlc_media_player_t *p_mi);
  74. typedef libvlc_media_t *(*LIBVLC_MEDIA_PLAYER_GET_MEDIA)(
  75. libvlc_media_player_t *p_mi);
  76. /* libvlc media list */
  77. typedef libvlc_media_list_t *(*LIBVLC_MEDIA_LIST_NEW)(
  78. libvlc_instance_t *p_instance);
  79. typedef void (*LIBVLC_MEDIA_LIST_RELEASE)(libvlc_media_list_t *p_ml);
  80. typedef int (*LIBVLC_MEDIA_LIST_ADD_MEDIA)(libvlc_media_list_t *p_ml,
  81. libvlc_media_t *p_md);
  82. typedef void (*LIBVLC_MEDIA_LIST_LOCK)(libvlc_media_list_t *p_ml);
  83. typedef void (*LIBVLC_MEDIA_LIST_UNLOCK)(libvlc_media_list_t *p_ml);
  84. typedef libvlc_event_manager_t *(*LIBVLC_MEDIA_LIST_EVENT_MANAGER)(
  85. libvlc_media_list_t *p_ml);
  86. /* libvlc media list player */
  87. typedef libvlc_media_list_player_t *(*LIBVLC_MEDIA_LIST_PLAYER_NEW)(
  88. libvlc_instance_t *p_instance);
  89. typedef void (*LIBVLC_MEDIA_LIST_PLAYER_RELEASE)(
  90. libvlc_media_list_player_t *p_mlp);
  91. typedef void (*LIBVLC_MEDIA_LIST_PLAYER_PLAY)(libvlc_media_list_player_t *p_mlp);
  92. typedef void (*LIBVLC_MEDIA_LIST_PLAYER_PAUSE)(
  93. libvlc_media_list_player_t *p_mlp);
  94. typedef void (*LIBVLC_MEDIA_LIST_PLAYER_STOP)(libvlc_media_list_player_t *p_mlp);
  95. typedef void (*LIBVLC_MEDIA_LIST_PLAYER_SET_MEDIA_PLAYER)(
  96. libvlc_media_list_player_t *p_mlp, libvlc_media_player_t *p_mp);
  97. typedef void (*LIBVLC_MEDIA_LIST_PLAYER_SET_MEDIA_LIST)(
  98. libvlc_media_list_player_t *p_mlp, libvlc_media_list_t *p_mlist);
  99. typedef libvlc_event_manager_t *(*LIBVLC_MEDIA_LIST_PLAYER_EVENT_MANAGER)(
  100. libvlc_media_list_player_t *p_mlp);
  101. typedef void (*LIBVLC_MEDIA_LIST_PLAYER_SET_PLAYBACK_MODE)(
  102. libvlc_media_list_player_t *p_mlp, libvlc_playback_mode_t e_mode);
  103. typedef int (*LIBVLC_MEDIA_LIST_PLAYER_NEXT)(libvlc_media_list_player_t *p_mlp);
  104. typedef int (*LIBVLC_MEDIA_LIST_PLAYER_PREVIOUS)(
  105. libvlc_media_list_player_t *p_mlp);
  106. /* -------------------------------------------------------------------- */
  107. /* libvlc core */
  108. extern LIBVLC_NEW libvlc_new_;
  109. extern LIBVLC_RELEASE libvlc_release_;
  110. extern LIBVLC_GET_VERSION libvlc_get_version_;
  111. extern LIBVLC_CLOCK libvlc_clock_;
  112. extern LIBVLC_EVENT_ATTACH libvlc_event_attach_;
  113. /* libvlc media */
  114. extern LIBVLC_MEDIA_NEW_PATH libvlc_media_new_path_;
  115. extern LIBVLC_MEDIA_NEW_LOCATION libvlc_media_new_location_;
  116. extern LIBVLC_MEDIA_ADD_OPTION libvlc_media_add_option_;
  117. extern LIBVLC_MEDIA_RELEASE libvlc_media_release_;
  118. extern LIBVLC_MEDIA_RETAIN libvlc_media_retain_;
  119. extern LIBVLC_MEDIA_GET_META libvlc_media_get_meta_;
  120. extern LIBVLC_MEDIA_TRACKS_GET libvlc_media_tracks_get_;
  121. extern LIBVLC_MEDIA_TRACKS_RELEASE libvlc_media_tracks_release_;
  122. /* libvlc media player */
  123. extern LIBVLC_MEDIA_PLAYER_NEW libvlc_media_player_new_;
  124. extern LIBVLC_MEDIA_PLAYER_NEW_FROM_MEDIA libvlc_media_player_new_from_media_;
  125. extern LIBVLC_MEDIA_PLAYER_RELEASE libvlc_media_player_release_;
  126. extern LIBVLC_VIDEO_SET_CALLBACKS libvlc_video_set_callbacks_;
  127. extern LIBVLC_VIDEO_SET_FORMAT_CALLBACKS libvlc_video_set_format_callbacks_;
  128. extern LIBVLC_AUDIO_SET_CALLBACKS libvlc_audio_set_callbacks_;
  129. extern LIBVLC_AUDIO_SET_FORMAT_CALLBACKS libvlc_audio_set_format_callbacks_;
  130. extern LIBVLC_MEDIA_PLAYER_PLAY libvlc_media_player_play_;
  131. extern LIBVLC_MEDIA_PLAYER_STOP libvlc_media_player_stop_;
  132. extern LIBVLC_MEDIA_PLAYER_GET_TIME libvlc_media_player_get_time_;
  133. extern LIBVLC_MEDIA_PLAYER_SET_TIME libvlc_media_player_set_time_;
  134. extern LIBVLC_VIDEO_GET_SIZE libvlc_video_get_size_;
  135. extern LIBVLC_MEDIA_PLAYER_EVENT_MANAGER libvlc_media_player_event_manager_;
  136. extern LIBVLC_MEDIA_PLAYER_GET_STATE libvlc_media_player_get_state_;
  137. extern LIBVLC_MEDIA_PLAYER_GET_LENGTH libvlc_media_player_get_length_;
  138. extern LIBVLC_MEDIA_PLAYER_GET_MEDIA libvlc_media_player_get_media_;
  139. /* libvlc media list */
  140. extern LIBVLC_MEDIA_LIST_NEW libvlc_media_list_new_;
  141. extern LIBVLC_MEDIA_LIST_RELEASE libvlc_media_list_release_;
  142. extern LIBVLC_MEDIA_LIST_ADD_MEDIA libvlc_media_list_add_media_;
  143. extern LIBVLC_MEDIA_LIST_LOCK libvlc_media_list_lock_;
  144. extern LIBVLC_MEDIA_LIST_UNLOCK libvlc_media_list_unlock_;
  145. extern LIBVLC_MEDIA_LIST_EVENT_MANAGER libvlc_media_list_event_manager_;
  146. /* libvlc media list player */
  147. extern LIBVLC_MEDIA_LIST_PLAYER_NEW libvlc_media_list_player_new_;
  148. extern LIBVLC_MEDIA_LIST_PLAYER_RELEASE libvlc_media_list_player_release_;
  149. extern LIBVLC_MEDIA_LIST_PLAYER_PLAY libvlc_media_list_player_play_;
  150. extern LIBVLC_MEDIA_LIST_PLAYER_PAUSE libvlc_media_list_player_pause_;
  151. extern LIBVLC_MEDIA_LIST_PLAYER_STOP libvlc_media_list_player_stop_;
  152. extern LIBVLC_MEDIA_LIST_PLAYER_SET_MEDIA_PLAYER
  153. libvlc_media_list_player_set_media_player_;
  154. extern LIBVLC_MEDIA_LIST_PLAYER_SET_MEDIA_LIST
  155. libvlc_media_list_player_set_media_list_;
  156. extern LIBVLC_MEDIA_LIST_PLAYER_EVENT_MANAGER
  157. libvlc_media_list_player_event_manager_;
  158. extern LIBVLC_MEDIA_LIST_PLAYER_SET_PLAYBACK_MODE
  159. libvlc_media_list_player_set_playback_mode_;
  160. extern LIBVLC_MEDIA_LIST_PLAYER_NEXT libvlc_media_list_player_next_;
  161. extern LIBVLC_MEDIA_LIST_PLAYER_PREVIOUS libvlc_media_list_player_previous_;
  162. #define EXTENSIONS_AUDIO \
  163. "*.3ga;" \
  164. "*.669;" \
  165. "*.a52;" \
  166. "*.aac;" \
  167. "*.ac3;" \
  168. "*.adt;" \
  169. "*.adts;" \
  170. "*.aif;" \
  171. "*.aifc;" \
  172. "*.aiff;" \
  173. "*.amb;" \
  174. "*.amr;" \
  175. "*.aob;" \
  176. "*.ape;" \
  177. "*.au;" \
  178. "*.awb;" \
  179. "*.caf;" \
  180. "*.dts;" \
  181. "*.flac;" \
  182. "*.it;" \
  183. "*.kar;" \
  184. "*.m4a;" \
  185. "*.m4b;" \
  186. "*.m4p;" \
  187. "*.m5p;" \
  188. "*.mid;" \
  189. "*.mka;" \
  190. "*.mlp;" \
  191. "*.mod;" \
  192. "*.mpa;" \
  193. "*.mp1;" \
  194. "*.mp2;" \
  195. "*.mp3;" \
  196. "*.mpc;" \
  197. "*.mpga;" \
  198. "*.mus;" \
  199. "*.oga;" \
  200. "*.ogg;" \
  201. "*.oma;" \
  202. "*.opus;" \
  203. "*.qcp;" \
  204. "*.ra;" \
  205. "*.rmi;" \
  206. "*.s3m;" \
  207. "*.sid;" \
  208. "*.spx;" \
  209. "*.tak;" \
  210. "*.thd;" \
  211. "*.tta;" \
  212. "*.voc;" \
  213. "*.vqf;" \
  214. "*.w64;" \
  215. "*.wav;" \
  216. "*.wma;" \
  217. "*.wv;" \
  218. "*.xa;" \
  219. "*.xm"
  220. #define EXTENSIONS_VIDEO \
  221. "*.3g2;*.3gp;*.3gp2;*.3gpp;*.amv;*.asf;*.avi;" \
  222. "*.bik;*.bin;*.crf;*.divx;*.drc;*.dv;*.evo;*.f4v;*.flv;*.gvi;*.gxf;" \
  223. "*.iso;*.m1v;*.m2v;*.m2t;*.m2ts;*.m4v;*.mkv;*.mov;*.mp2;*.mp2v;*.mp4;" \
  224. "*.mp4v;*.mpe;*.mpeg;*.mpeg1;*.mpeg2;*.mpeg4;*.mpg;*.mpv2;*.mts;" \
  225. "*.mtv;*.mxf;*.mxg;*.nsv;*.nuv;*.ogg;*.ogm;*.ogv;*.ogx;*.ps;*.rec;" \
  226. "*.rm;*.rmvb;*.rpl;*.thp;*.tod;*.ts;*.tts;*.txd;*.vob;*.vro;*.webm;" \
  227. "*.wm;*.wmv;*.wtv;*.xesc"
  228. #define EXTENSIONS_PLAYLIST \
  229. "*.asx;*.b4s;*.cue;*.ifo;*.m3u;*.m3u8;*.pls;" \
  230. "*.ram;*.rar;*.sdp;*.vlc;*.xspf;*.wax;*.wvx;*.zip;*.conf"
  231. #define EXTENSIONS_MEDIA \
  232. EXTENSIONS_VIDEO ";" EXTENSIONS_AUDIO ";" EXTENSIONS_PLAYLIST