Added playlists and config loading

This commit is contained in:
Yessiest 2023-05-20 03:37:57 +04:00
parent 99f7fe4fd4
commit d0a283621d
3 changed files with 78 additions and 25 deletions

View File

@ -1,6 +1,6 @@
STATIC_LINKING := 0 STATIC_LINKING := 0
AR := ar AR := ar
DEBUG := 0 DEBUG := 1
TARGET_NAME := mpv TARGET_NAME := mpv
PREFIX := /usr PREFIX := /usr
LIBDIR := $(PREFIX)/lib LIBDIR := $(PREFIX)/lib

View File

@ -97,20 +97,23 @@ static void process_mpv_events(mpv_event_id event_block)
{ {
struct mpv_event_end_file *eof = struct mpv_event_end_file *eof =
(struct mpv_event_end_file *)mp_event->data; (struct mpv_event_end_file *)mp_event->data;
int *playlist_current_id = malloc(sizeof(int));
if(eof->reason == MPV_END_FILE_REASON_EOF) int ret = 0;
if ((ret = mpv_get_property(mpv, "playlist-pos", MPV_FORMAT_INT64, playlist_current_id)) < 0)
{
*playlist_current_id = -1;
}
log_cb(RETRO_LOG_INFO,"[testing shit] %d, %d\n",
ret,*playlist_current_id);
if(eof->reason == MPV_END_FILE_REASON_EOF) {
if (*playlist_current_id == -1) {
free(playlist_current_id);
environ_cb(RETRO_ENVIRONMENT_SHUTDOWN, NULL); environ_cb(RETRO_ENVIRONMENT_SHUTDOWN, NULL);
#if 0 } else {
/* The following could be done instead if the file was not free(playlist_current_id);
* closed once the end was reached - allowing the user to seek continue;
* back without reopening the file. }
*/ }
struct retro_message ra_msg = {
"Finished playing file", 60 * 5, /* 5 seconds */
};
environ_cb(RETRO_ENVIRONMENT_SET_MESSAGE, &ra_msg);RETRO_ENVIRONMENT_SHUTDOWN
#endif
} }
else if(mp_event->event_id == MPV_EVENT_NONE) else if(mp_event->event_id == MPV_EVENT_NONE)
continue; continue;
@ -236,9 +239,25 @@ void retro_set_environment(retro_environment_t cb)
log_cb = fallback_log; log_cb = fallback_log;
} }
const char *get_filename_ext(const char *filename) {
const char *dot = strrchr(filename, '.');
if(!dot || dot == filename) return "";
return dot + 1;
}
const char *get_mpv_config() {
char *fullpath = malloc(64);
memset(fullpath, 0, 64);
const char* homepath = getenv("HOME");
strcat(fullpath, homepath);
strcat(fullpath, "/.config/mpv/mpv.conf");
return (const char*)fullpath;
}
static void context_reset(void) static void context_reset(void)
{ {
const char *cmd[] = {"loadfile", filepath, NULL}; const char *cmd[] = {(strcmp(get_filename_ext(filepath),"txt") == 0) ? "loadlist" : "loadfile", filepath, NULL};
const char *config_path = get_mpv_config();
int ret; int ret;
#ifdef HAVE_LOCALE #ifdef HAVE_LOCALE
@ -253,6 +272,19 @@ static void context_reset(void)
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
if((ret = mpv_set_property_string(mpv,"osc","yes")) < 0)
{
log_cb(RETRO_LOG_ERROR, "unable to enable OSC: %s\n",
mpv_error_string(ret));
}
if((ret = mpv_load_config_file(mpv,config_path)) < 0)
{
log_cb(RETRO_LOG_ERROR, "unable to load config file %s: %s\n",
config_path,mpv_error_string(ret));
}
if((ret = mpv_initialize(mpv)) < 0) if((ret = mpv_initialize(mpv)) < 0)
{ {
log_cb(RETRO_LOG_ERROR, "mpv init failed: %s\n", mpv_error_string(ret)); log_cb(RETRO_LOG_ERROR, "mpv init failed: %s\n", mpv_error_string(ret));
@ -287,19 +319,21 @@ static void context_reset(void)
/* Attempt to enable hardware acceleration. MPV will fallback to software /* Attempt to enable hardware acceleration. MPV will fallback to software
* decoding on failure. * decoding on failure.
*/ */
/* hardware decoding enabled by default breaks on bcm2835.
* enable at your own risk via config file
if((ret = mpv_set_option_string(mpv, "hwdec", "auto")) < 0) if((ret = mpv_set_option_string(mpv, "hwdec", "auto")) < 0)
{ {
log_cb(RETRO_LOG_ERROR, "failed to set hwdec option: %s\n", log_cb(RETRO_LOG_ERROR, "failed to set hwdec option: %s\n",
mpv_error_string(ret)); mpv_error_string(ret));
} }
*/
if((ret = mpv_command(mpv, cmd)) != 0) if((ret = mpv_command(mpv, cmd)) != 0)
{ {
log_cb(RETRO_LOG_ERROR, "mpv_command failed to load input file: %s\n", log_cb(RETRO_LOG_ERROR, "mpv_command failed to load input file: %s\n",
mpv_error_string(ret)); mpv_error_string(ret));
goto err; goto err;
} }
/* TODO #2: Check for the highest samplerate in audio stream, and use that. /* TODO #2: Check for the highest samplerate in audio stream, and use that.
* Fall back to 48kHz otherwise. * Fall back to 48kHz otherwise.
* We currently force the audio to be sampled at 48KHz. * We currently force the audio to be sampled at 48KHz.
@ -444,30 +478,30 @@ static void retropad_update_input(void)
0, RETRO_DEVICE_ID_JOYPAD_A) != 0 ? 1 : 0; 0, RETRO_DEVICE_ID_JOYPAD_A) != 0 ? 1 : 0;
if(current.l == 1 && last.l == 0) if(current.l == 1 && last.l == 0)
mpv_command_string(mpv, "cycle audio"); mpv_command_string(mpv, "osd-msg cycle audio");
if(current.r == 1 && last.r == 0) if(current.r == 1 && last.r == 0)
mpv_command_string(mpv, "cycle sub"); mpv_command_string(mpv, "osd-msg cycle sub");
if(current.a == 1 && last.a == 0) if(current.a == 1 && last.a == 0)
mpv_command_string(mpv, "cycle pause"); mpv_command_string(mpv, "osd-msg cycle pause");
/* TODO #3: Press and hold commands with small delay */ /* TODO #3: Press and hold commands with small delay */
if(input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, if(input_state_cb(0, RETRO_DEVICE_JOYPAD, 0,
RETRO_DEVICE_ID_JOYPAD_LEFT)) RETRO_DEVICE_ID_JOYPAD_LEFT))
mpv_command_string(mpv, "seek -5"); mpv_command_string(mpv, "osd-msg-bar seek -5");
if(input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, if(input_state_cb(0, RETRO_DEVICE_JOYPAD, 0,
RETRO_DEVICE_ID_JOYPAD_RIGHT)) RETRO_DEVICE_ID_JOYPAD_RIGHT))
mpv_command_string(mpv, "seek 5"); mpv_command_string(mpv, "osd-msg-bar seek 5");
if(input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, if(input_state_cb(0, RETRO_DEVICE_JOYPAD, 0,
RETRO_DEVICE_ID_JOYPAD_UP)) RETRO_DEVICE_ID_JOYPAD_UP))
mpv_command_string(mpv, "seek 60"); mpv_command_string(mpv, "osg-msg-bar seek 60");
if(input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, if(input_state_cb(0, RETRO_DEVICE_JOYPAD, 0,
RETRO_DEVICE_ID_JOYPAD_DOWN)) RETRO_DEVICE_ID_JOYPAD_DOWN))
mpv_command_string(mpv, "seek -60"); mpv_command_string(mpv, "osg-msg-bar seek -60");
/* Press and hold commands */ /* Press and hold commands */
if(input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, if(input_state_cb(0, RETRO_DEVICE_JOYPAD, 0,

19
mpv_libretro.info Normal file
View File

@ -0,0 +1,19 @@
# Software Information
display_name = "MPV"
authors = "MPV team|FFmpeg team"
supported_extensions = "mkv|avi|f4v|f4f|3gp|ogm|flv|mp4|mp3|flac|ogg|m4a|webm|3g2|mov|wmv|mpg|mpeg|vob|asf|divx|m2p|m2ts|ps|ts|mxf|wma|wav|txt"
corename = "MPV"
categories = "Media player"
license = "LGPLv2, GPLv2"
permissions = ""
display_version = "Git"
# Hardware Information
systemname = "MPV"
systemid = "movie"
# Libretro Features
supports_no_game = "false"
is_experimental = "true"
description = "An experimental media player ported to libretro. This core is similar in function to the ffmpeg-libretro core but using the powerful and modern MPV backend instead. Most users will be better-served by the ffmpeg core, but this one may yield a better user experience with improved controls and capabilities."