From 02868293483ce5b769688d222ae2984bbbc7d63b Mon Sep 17 00:00:00 2001 From: twinaphex Date: Wed, 20 Jun 2018 04:29:31 +0200 Subject: [PATCH] Start adding HAVE_MPV ifdefs --- Makefile.common | 6 +++++- core_type.h | 1 + dynamic.c | 41 +++++++++++++++++++++++++++++++++++++++++ qb/config.libs.sh | 4 ++++ qb/config.params.sh | 3 ++- retroarch.c | 6 +++++- 6 files changed, 58 insertions(+), 3 deletions(-) diff --git a/Makefile.common b/Makefile.common index d621a75042..ef942431cd 100644 --- a/Makefile.common +++ b/Makefile.common @@ -1101,11 +1101,15 @@ ifneq ($(C89_BUILD), 1) ifneq ($(HAVE_OPENGLES), 1) OBJ += cores/libretro-ffmpeg/ffmpeg_fft.o DEFINES += -I$(DEPS_DIR) -DHAVE_GL_FFT - NEED_CXX_LINKER=1 endif endif endif +ifeq ($(HAVE_MPV), 1) + OBJ += cores/libretro-mpv/libretro-mpv.o + DEFINES += -I$(DEPS_DIR) -DHAVE_MPV +endif + ifeq ($(HAVE_OPENGLES), 1) LIBS += $(OPENGLES_LIBS) DEFINES += $(OPENGLES_CFLAGS) -DHAVE_OPENGLES diff --git a/core_type.h b/core_type.h index e4a66058e5..e8933de6bd 100644 --- a/core_type.h +++ b/core_type.h @@ -21,6 +21,7 @@ enum rarch_core_type CORE_TYPE_PLAIN = 0, CORE_TYPE_DUMMY, CORE_TYPE_FFMPEG, + CORE_TYPE_MPV, CORE_TYPE_IMAGEVIEWER, CORE_TYPE_NETRETROPAD, CORE_TYPE_VIDEO_PROCESSOR diff --git a/dynamic.c b/dynamic.c index 0b9a348d1b..4a91c2693b 100644 --- a/dynamic.c +++ b/dynamic.c @@ -90,6 +90,10 @@ static dylib_t lib_handle; #define SYMBOL_FFMPEG(x) current_core->x = libretro_ffmpeg_##x #endif +#ifdef HAVE_MPV +#define SYMBOL_MPV(x) current_core->x = libretro_mpv_##x +#endif + #ifdef HAVE_IMAGEVIEWER #define SYMBOL_IMAGEVIEWER(x) current_core->x = libretro_imageviewer_##x #endif @@ -528,6 +532,43 @@ bool init_libretro_sym_custom(enum rarch_core_type type, struct retro_core_t *cu SYMBOL_FFMPEG(retro_get_region); SYMBOL_FFMPEG(retro_get_memory_data); SYMBOL_FFMPEG(retro_get_memory_size); +#endif + break; + case CORE_TYPE_MPV: +#ifdef HAVE_MPV + SYMBOL_MPV(retro_init); + SYMBOL_MPV(retro_deinit); + + SYMBOL_MPV(retro_api_version); + SYMBOL_MPV(retro_get_system_info); + SYMBOL_MPV(retro_get_system_av_info); + + SYMBOL_MPV(retro_set_environment); + SYMBOL_MPV(retro_set_video_refresh); + SYMBOL_MPV(retro_set_audio_sample); + SYMBOL_MPV(retro_set_audio_sample_batch); + SYMBOL_MPV(retro_set_input_poll); + SYMBOL_MPV(retro_set_input_state); + + SYMBOL_MPV(retro_set_controller_port_device); + + SYMBOL_MPV(retro_reset); + SYMBOL_MPV(retro_run); + + SYMBOL_MPV(retro_serialize_size); + SYMBOL_MPV(retro_serialize); + SYMBOL_MPV(retro_unserialize); + + SYMBOL_MPV(retro_cheat_reset); + SYMBOL_MPV(retro_cheat_set); + + SYMBOL_MPV(retro_load_game); + SYMBOL_MPV(retro_load_game_special); + + SYMBOL_MPV(retro_unload_game); + SYMBOL_MPV(retro_get_region); + SYMBOL_MPV(retro_get_memory_data); + SYMBOL_MPV(retro_get_memory_size); #endif break; case CORE_TYPE_IMAGEVIEWER: diff --git a/qb/config.libs.sh b/qb/config.libs.sh index 089939fc35..93c2a34434 100644 --- a/qb/config.libs.sh +++ b/qb/config.libs.sh @@ -368,6 +368,10 @@ else check_val '' ZLIB '-lz' fi +if [ "$HAVE_MPV" != 'no' ]; then + check_pkgconf MPV libmpv +fi + if [ "$HAVE_THREADS" != 'no' ] && [ "$HAVE_FFMPEG" != 'no' ]; then check_pkgconf AVCODEC libavcodec 54 check_pkgconf AVFORMAT libavformat 54 diff --git a/qb/config.params.sh b/qb/config.params.sh index 26e1445280..cd3e06d9dc 100644 --- a/qb/config.params.sh +++ b/qb/config.params.sh @@ -25,7 +25,8 @@ HAVE_SYSTEMD=auto # Systemd support HAVE_UDEV=auto # Udev/Evdev gamepad support HAVE_THREADS=auto # Threading support HAVE_THREAD_STORAGE=auto # Thread Local Storage support -HAVE_FFMPEG=auto # FFmpeg recording support +HAVE_FFMPEG=auto # FFmpeg support +HAVE_MPV=auto # MPV support C89_FFMPEG=no HAVE_SSA=auto # SSA/ASS for FFmpeg subtitle support HAVE_DYLIB=auto # Dynamic loading support diff --git a/retroarch.c b/retroarch.c index f05c8b270b..13b42915ba 100644 --- a/retroarch.c +++ b/retroarch.c @@ -1262,7 +1262,11 @@ static void retroarch_main_init_media(void) case RARCH_CONTENT_MUSIC: if (builtin_mediaplayer) { -#ifdef HAVE_FFMPEG + /* TODO/FIXME - it needs to become possible to switch between FFmpeg and MPV at runtime */ +#if defined(HAVE_MPV) + retroarch_override_setting_set(RARCH_OVERRIDE_SETTING_LIBRETRO, NULL); + retroarch_set_current_core_type(CORE_TYPE_MPV, false); +#elif defined(HAVE_FFMPEG) retroarch_override_setting_set(RARCH_OVERRIDE_SETTING_LIBRETRO, NULL); retroarch_set_current_core_type(CORE_TYPE_FFMPEG, false); #endif