@ -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 48 kHz otherwise .
* We currently force the audio to be sampled at 48 KHz .
@ -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 ,