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
|
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
|
||||||
|
|
|
@ -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;
|
||||||
environ_cb(RETRO_ENVIRONMENT_SHUTDOWN, NULL);
|
if ((ret = mpv_get_property(mpv, "playlist-pos", MPV_FORMAT_INT64, playlist_current_id)) < 0)
|
||||||
#if 0
|
{
|
||||||
/* The following could be done instead if the file was not
|
*playlist_current_id = -1;
|
||||||
* closed once the end was reached - allowing the user to seek
|
}
|
||||||
* back without reopening the file.
|
log_cb(RETRO_LOG_INFO,"[testing shit] %d, %d\n",
|
||||||
*/
|
ret,*playlist_current_id);
|
||||||
struct retro_message ra_msg = {
|
if(eof->reason == MPV_END_FILE_REASON_EOF) {
|
||||||
"Finished playing file", 60 * 5, /* 5 seconds */
|
if (*playlist_current_id == -1) {
|
||||||
};
|
free(playlist_current_id);
|
||||||
|
environ_cb(RETRO_ENVIRONMENT_SHUTDOWN, NULL);
|
||||||
environ_cb(RETRO_ENVIRONMENT_SET_MESSAGE, &ra_msg);RETRO_ENVIRONMENT_SHUTDOWN
|
} else {
|
||||||
#endif
|
free(playlist_current_id);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
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,
|
||||||
|
|
|
@ -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