Added playlists and config loading
This commit is contained in:
parent
99f7fe4fd4
commit
d0a283621d
2
Makefile
2
Makefile
|
@ -1,6 +1,6 @@
|
|||
STATIC_LINKING := 0
|
||||
AR := ar
|
||||
DEBUG := 0
|
||||
DEBUG := 1
|
||||
TARGET_NAME := mpv
|
||||
PREFIX := /usr
|
||||
LIBDIR := $(PREFIX)/lib
|
||||
|
|
|
@ -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 *)mp_event->data;
|
||||
|
||||
if(eof->reason == MPV_END_FILE_REASON_EOF)
|
||||
environ_cb(RETRO_ENVIRONMENT_SHUTDOWN, NULL);
|
||||
#if 0
|
||||
/* The following could be done instead if the file was not
|
||||
* closed once the end was reached - allowing the user to seek
|
||||
* 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
|
||||
int *playlist_current_id = malloc(sizeof(int));
|
||||
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);
|
||||
} else {
|
||||
free(playlist_current_id);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if(mp_event->event_id == MPV_EVENT_NONE)
|
||||
continue;
|
||||
|
@ -236,9 +239,25 @@ void retro_set_environment(retro_environment_t cb)
|
|||
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)
|
||||
{
|
||||
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;
|
||||
|
||||
#ifdef HAVE_LOCALE
|
||||
|
@ -252,6 +271,19 @@ static void context_reset(void)
|
|||
log_cb(RETRO_LOG_ERROR, "failed creating context\n");
|
||||
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)
|
||||
{
|
||||
|
@ -287,19 +319,21 @@ static void context_reset(void)
|
|||
/* Attempt to enable hardware acceleration. MPV will fallback to software
|
||||
* 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)
|
||||
{
|
||||
log_cb(RETRO_LOG_ERROR, "failed to set hwdec option: %s\n",
|
||||
mpv_error_string(ret));
|
||||
}
|
||||
|
||||
*/
|
||||
if((ret = mpv_command(mpv, cmd)) != 0)
|
||||
{
|
||||
log_cb(RETRO_LOG_ERROR, "mpv_command failed to load input file: %s\n",
|
||||
mpv_error_string(ret));
|
||||
goto err;
|
||||
}
|
||||
|
||||
/* TODO #2: Check for the highest samplerate in audio stream, and use that.
|
||||
* Fall back to 48kHz otherwise.
|
||||
* 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;
|
||||
|
||||
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)
|
||||
mpv_command_string(mpv, "cycle sub");
|
||||
mpv_command_string(mpv, "osd-msg cycle sub");
|
||||
|
||||
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 */
|
||||
if(input_state_cb(0, RETRO_DEVICE_JOYPAD, 0,
|
||||
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,
|
||||
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,
|
||||
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,
|
||||
RETRO_DEVICE_ID_JOYPAD_DOWN))
|
||||
mpv_command_string(mpv, "seek -60");
|
||||
mpv_command_string(mpv, "osg-msg-bar seek -60");
|
||||
|
||||
/* Press and hold commands */
|
||||
if(input_state_cb(0, RETRO_DEVICE_JOYPAD, 0,
|
||||
|
|
|
@ -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."
|
Loading…
Reference in New Issue