#include <vlc_es.h>
#include <vlc_playlist.h>
#include <vlc_meta.h>
+#include <vlc_fs.h>
#include <assert.h>
#ifdef HAVE_SYS_STAT_H
# include <sys/stat.h>
#endif
-#if (!defined( WIN32 ) || defined(__MINGW32__))
-/* Mingw has its own version of dirent */
-# include <dirent.h>
-#endif
-
-#ifdef HAVE_CDDAX
-#define CDDA_MRL "cddax://"
-#else
-#define CDDA_MRL "cdda://"
-#endif
-
-#ifdef HAVE_VCDX
-#define VCD_MRL "vcdx://"
-#else
-#define VCD_MRL "vcd://"
-#endif
#define SEARCH_CHAIN_SIZE 20
#define OPEN_CHAIN_SIZE 50
p_sys->psz_current_dir = psz_tmp;
else
{
- p_sys->psz_current_dir = strdup( config_GetHomeDir() );
+ p_sys->psz_current_dir = config_GetUserDir( VLC_HOME_DIR );
free( psz_tmp );
}
{
vlc_object_release( p_sys->p_input );
}
- pl_Release( p_intf );
/* Close the ncurses interface */
endwin();
static void Run( intf_thread_t *p_intf )
{
intf_sys_t *p_sys = p_intf->p_sys;
- playlist_t *p_playlist = pl_Hold( p_intf );
+ playlist_t *p_playlist = pl_Get( p_intf );
p_sys->p_playlist = p_playlist;
int i_key;
static int HandleKey( intf_thread_t *p_intf, int i_key )
{
intf_sys_t *p_sys = p_intf->p_sys;
- vlc_value_t val;
int i_ret = 1;
- playlist_t *p_playlist = pl_Hold( p_intf );
+ playlist_t *p_playlist = pl_Get( p_intf );
if( p_sys->i_box_type == BOX_PLAYLIST )
{
switch( i_key )
{
- vlc_value_t val;
/* Playlist Settings */
case 'r':
- var_Get( p_playlist, "random", &val );
- val.b_bool = !val.b_bool;
- var_Set( p_playlist, "random", val );
+ var_ToggleBool( p_playlist, "random" );
goto end;
case 'l':
- var_Get( p_playlist, "loop", &val );
- val.b_bool = !val.b_bool;
- var_Set( p_playlist, "loop", val );
+ var_ToggleBool( p_playlist, "loop" );
goto end;
case 'R':
- var_Get( p_playlist, "repeat", &val );
- val.b_bool = !val.b_bool;
- var_Set( p_playlist, "repeat", val );
+ var_ToggleBool( p_playlist, "repeat" );
goto end;
/* Playlist sort */
if( p_sys->pp_dir_entries[p_sys->i_box_bidx]->b_file || i_key == ' ' )
{
char* psz_uri;
- if( asprintf( &psz_uri, "directory://%s/%s", p_sys->psz_current_dir, p_sys->pp_dir_entries[p_sys->i_box_bidx]->psz_path ) == -1 )
+ if( asprintf( &psz_uri, "%s://%s/%s",
+ p_sys->pp_dir_entries[p_sys->i_box_bidx]->b_file ?
+ "file" : "directory",
+ p_sys->psz_current_dir,
+ p_sys->pp_dir_entries[p_sys->i_box_bidx]->psz_path
+ ) == -1 )
+ {
psz_uri = NULL;
+ }
playlist_item_t *p_parent = p_sys->p_node;
if( !p_parent )
{
playlist_item_t *p_parent = p_sys->p_node;
+ PL_LOCK;
if( !p_parent )
p_parent = playlist_CurrentPlayingItem(p_playlist) ? playlist_CurrentPlayingItem(p_playlist)->p_parent : NULL;
if( !p_parent )
while( p_parent->p_parent && p_parent->p_parent->p_parent )
p_parent = p_parent->p_parent;
+ PL_UNLOCK;
playlist_Add( p_playlist, p_sys->psz_open_chain, NULL,
PLAYLIST_APPEND|PLAYLIST_GO, PLAYLIST_END,
/* Common control */
case 'f':
{
+ bool fs = var_ToggleBool( p_playlist, "fullscreen" );
if( p_intf->p_sys->p_input )
{
- vout_thread_t *p_vout;
- p_vout = vlc_object_find( p_intf->p_sys->p_input,
- VLC_OBJECT_VOUT, FIND_CHILD );
+ vout_thread_t *p_vout = input_GetVout( p_intf->p_sys->p_input );
if( p_vout )
{
- var_Get( p_vout, "fullscreen", &val );
- val.b_bool = !val.b_bool;
- var_Set( p_vout, "fullscreen", val );
+ var_SetBool( p_vout, "fullscreen", fs );
vlc_object_release( p_vout );
}
- else
- {
- var_Get( p_playlist, "fullscreen", &val );
- val.b_bool = !val.b_bool;
- var_Set( p_playlist, "fullscreen", val );
- }
}
i_ret = 0;
break;
case '[':
if( p_sys->p_input )
- var_SetVoid( p_sys->p_input, "prev-title" );
+ var_TriggerCallback( p_sys->p_input, "prev-title" );
break;
case ']':
if( p_sys->p_input )
- var_SetVoid( p_sys->p_input, "next-title" );
+ var_TriggerCallback( p_sys->p_input, "next-title" );
break;
case '<':
if( p_sys->p_input )
- var_SetVoid( p_sys->p_input, "prev-chapter" );
+ var_TriggerCallback( p_sys->p_input, "prev-chapter" );
break;
case '>':
if( p_sys->p_input )
- var_SetVoid( p_sys->p_input, "next-chapter" );
+ var_TriggerCallback( p_sys->p_input, "next-chapter" );
break;
case 'p':
}
end:
- pl_Release( p_intf );
return i_ret;
}
static void DumpObject( intf_thread_t *p_intf, int *l, vlc_object_t *p_obj, int i_level )
{
- if( p_obj->psz_object_name )
+ char *psz_name = vlc_object_get_name( p_obj );
+ if( psz_name )
+ {
MainBoxWrite( p_intf, (*l)++, 1 + 2 * i_level, "%s \"%s\" (%p)",
- p_obj->psz_object_type, p_obj->psz_object_name,
- p_obj );
+ p_obj->psz_object_type, psz_name, p_obj );
+ free( psz_name );
+ }
else
MainBoxWrite( p_intf, (*l)++, 1 + 2 * i_level, "%s (%o)",
p_obj->psz_object_type, p_obj );
{
intf_sys_t *p_sys = p_intf->p_sys;
input_thread_t *p_input = p_sys->p_input;
- playlist_t *p_playlist = pl_Hold( p_intf );
+ playlist_t *p_playlist = pl_Get( p_intf );
int y = 0;
int h;
int y_end;
memset( psz_title, ' ', mid );
if( p_sys->b_color )
wcolor_set( p_sys->w, C_TITLE, NULL );
- snprintf( &psz_title[mid], i_size, "VLC media player "PACKAGE_VERSION );
+ strlcpy( &psz_title[mid], "VLC media player "PACKAGE_VERSION, i_size );
mvnprintw( y, 0, COLS, "%s", psz_title );
attroff( A_REVERSE );
y += 2;
/* Position */
var_Get( p_input, "time", &val );
- msecstotimestr( buf1, val.i_time / 1000 );
+ secstotimestr( buf1, val.i_time / CLOCK_FREQ );
var_Get( p_input, "length", &val );
- msecstotimestr( buf2, val.i_time / 1000 );
+ secstotimestr( buf2, val.i_time / CLOCK_FREQ );
mvnprintw( y++, 0, COLS, _(" Position : %s/%s (%.2f%%)"), buf1, buf2, p_sys->f_slider );
{
int i_title_count = var_CountChoices( p_input, "title" );
if( i_title_count > 0 )
- mvnprintw( y++, 0, COLS, _(" Title : %d/%d"), val.i_int, i_title_count );
+ mvnprintw( y++, 0, COLS, _(" Title : %"PRId64"/%d"),
+ val.i_int, i_title_count );
}
/* Chapter */
{
int i_chapter_count = var_CountChoices( p_input, "chapter" );
if( i_chapter_count > 0 )
- mvnprintw( y++, 0, COLS, _(" Chapter : %d/%d"), val.i_int, i_chapter_count );
+ mvnprintw( y++, 0, COLS, _(" Chapter : %"PRId64"/%d"),
+ val.i_int, i_chapter_count );
}
}
else
for( i=0; i<VLC_META_TYPE_COUNT; i++ )
{
if( y >= y_end ) break;
- char *psz_meta = p_item->p_meta->ppsz_meta[i];
+ const char *psz_meta = vlc_meta_Get( p_item->p_meta, i );
if( psz_meta && *psz_meta )
{
const char *psz_meta_title;
MainBoxWrite( p_intf, l, 1, _("+-[Incoming]"));
SHOW_ACS( 1, ACS_ULCORNER ); SHOW_ACS( 2, ACS_HLINE ); l++;
if( p_sys->b_color ) wcolor_set( p_sys->w, C_DEFAULT, NULL );
- MainBoxWrite( p_intf, l, 1, _("| input bytes read : %8.0f kB"),
- (float)(p_item->p_stats->i_read_bytes)/1000 );
+ MainBoxWrite( p_intf, l, 1, _("| input bytes read : %8.0f KiB"),
+ (float)(p_item->p_stats->i_read_bytes)/1024 );
SHOW_ACS( 1, ACS_VLINE ); l++;
MainBoxWrite( p_intf, l, 1, _("| input bitrate : %6.0f kb/s"),
(float)(p_item->p_stats->f_input_bitrate)*8000 );
- MainBoxWrite( p_intf, l, 1, _("| demux bytes read : %8.0f kB"),
- (float)(p_item->p_stats->i_demux_read_bytes)/1000 );
+ MainBoxWrite( p_intf, l, 1, _("| demux bytes read : %8.0f KiB"),
+ (float)(p_item->p_stats->i_demux_read_bytes)/1024 );
SHOW_ACS( 1, ACS_VLINE ); l++;
MainBoxWrite( p_intf, l, 1, _("| demux bitrate : %6.0f kb/s"),
(float)(p_item->p_stats->f_demux_bitrate)*8000 );
MainBoxWrite( p_intf, l, 1, _("+-[Video Decoding]"));
SHOW_ACS( 1, ACS_LTEE ); SHOW_ACS( 2, ACS_HLINE ); l++;
if( p_sys->b_color ) wcolor_set( p_sys->w, C_DEFAULT, NULL );
- MainBoxWrite( p_intf, l, 1, _("| video decoded : %5i"),
+ MainBoxWrite( p_intf, l, 1, _("| video decoded : %"PRId64),
p_item->p_stats->i_decoded_video );
SHOW_ACS( 1, ACS_VLINE ); l++;
- MainBoxWrite( p_intf, l, 1, _("| frames displayed : %5i"),
+ MainBoxWrite( p_intf, l, 1, _("| frames displayed : %"PRId64),
p_item->p_stats->i_displayed_pictures );
SHOW_ACS( 1, ACS_VLINE ); l++;
- MainBoxWrite( p_intf, l, 1, _("| frames lost : %5i"),
+ MainBoxWrite( p_intf, l, 1, _("| frames lost : %"PRId64),
p_item->p_stats->i_lost_pictures );
SHOW_ACS( 1, ACS_VLINE ); l++;
DrawEmptyLine( p_sys->w, p_sys->i_box_y + l - p_sys->i_box_start, 1, COLS - 2 );
MainBoxWrite( p_intf, l, 1, _("+-[Audio Decoding]"));
SHOW_ACS( 1, ACS_LTEE ); SHOW_ACS( 2, ACS_HLINE ); l++;
if( p_sys->b_color ) wcolor_set( p_sys->w, C_DEFAULT, NULL );
- MainBoxWrite( p_intf, l, 1, _("| audio decoded : %5i"),
+ MainBoxWrite( p_intf, l, 1, _("| audio decoded : %"PRId64),
p_item->p_stats->i_decoded_audio );
SHOW_ACS( 1, ACS_VLINE ); l++;
- MainBoxWrite( p_intf, l, 1, _("| buffers played : %5i"),
+ MainBoxWrite( p_intf, l, 1, _("| buffers played : %"PRId64),
p_item->p_stats->i_played_abuffers );
SHOW_ACS( 1, ACS_VLINE ); l++;
- MainBoxWrite( p_intf, l, 1, _("| buffers lost : %5i"),
+ MainBoxWrite( p_intf, l, 1, _("| buffers lost : %"PRId64),
p_item->p_stats->i_lost_abuffers );
SHOW_ACS( 1, ACS_VLINE ); l++;
DrawEmptyLine( p_sys->w, p_sys->i_box_y + l - p_sys->i_box_start, 1, COLS - 2 );
if( p_sys->b_color ) wcolor_set( p_sys->w, C_DEFAULT, NULL );
MainBoxWrite( p_intf, l, 1, _("| packets sent : %5i"), p_item->p_stats->i_sent_packets );
SHOW_ACS( 1, ACS_VLINE ); l++;
- MainBoxWrite( p_intf, l, 1, _("| bytes sent : %8.0f kB"),
- (float)(p_item->p_stats->i_sent_bytes)/1000 );
+ MainBoxWrite( p_intf, l, 1, _("| bytes sent : %8.0f KiB"),
+ (float)(p_item->p_stats->i_sent_bytes)/1024 );
SHOW_ACS( 1, ACS_VLINE ); l++;
MainBoxWrite( p_intf, l, 1, _("\\ sending bitrate : %6.0f kb/s"),
(float)(p_item->p_stats->f_send_bitrate*8)*1000 );
input_thread_t *p_input2 = playlist_CurrentInput( p_playlist );
PL_LOCK;
+ assert( p_item );
+ playlist_item_t *p_current_playing_item = playlist_CurrentPlayingItem(p_playlist);
if( ( p_node && p_item->p_input == p_node->p_input ) ||
- ( !p_node && p_input2 &&
- p_item->p_input == playlist_CurrentPlayingItem(p_playlist)->p_input ) )
+ ( !p_node && p_input2 && p_current_playing_item &&
+ p_item->p_input == p_current_playing_item->p_input ) )
c = '*';
else if( p_item == p_node || ( p_item != p_node &&
PlaylistIsPlaying( p_playlist, p_item ) ) )
DrawEmptyLine( p_sys->w, 7, 1, COLS-2 );
if( p_sys->psz_search_chain )
{
- if( strlen( p_sys->psz_search_chain ) == 0 &&
+ if( *p_sys->psz_search_chain == '\0' &&
p_sys->psz_old_search != NULL )
{
/* Searching next entry */
refresh();
*t_last_refresh = time( 0 );
- pl_Release( p_intf );
}
static playlist_item_t *PlaylistGetRoot( intf_thread_t *p_intf )
{
intf_sys_t *p_sys = p_intf->p_sys;
- playlist_t *p_playlist = pl_Hold( p_intf );
+ playlist_t *p_playlist = pl_Get( p_intf );
playlist_item_t *p_item;
switch( p_sys->i_current_view )
default:
p_item = p_playlist->p_root_onelevel;
}
- pl_Release( p_intf );
return p_item;
}
static void PlaylistRebuild( intf_thread_t *p_intf )
{
intf_sys_t *p_sys = p_intf->p_sys;
- playlist_t *p_playlist = pl_Hold( p_intf );
+ playlist_t *p_playlist = pl_Get( p_intf );
PL_LOCK;
p_sys->b_need_update = false;
PL_UNLOCK;
-
- pl_Release( p_intf );
}
static void PlaylistAddNode( intf_thread_t *p_intf, playlist_item_t *p_node,
VLC_UNUSED(p_this); VLC_UNUSED(psz_variable);
VLC_UNUSED(oval); VLC_UNUSED(nval);
intf_thread_t *p_intf = (intf_thread_t *)param;
- playlist_t *p_playlist = pl_Hold( p_intf );
+ playlist_t *p_playlist = pl_Get( p_intf );
p_intf->p_sys->b_need_update = true;
p_intf->p_sys->p_node = playlist_CurrentPlayingItem(p_playlist) ? playlist_CurrentPlayingItem(p_playlist)->p_parent : NULL;
- pl_Release( p_intf );
return VLC_SUCCESS;
}
* If it's neither of these, then return
*/
- playlist_t * p_playlist = pl_Hold( p_intf );
+ playlist_t * p_playlist = pl_Get( p_intf );
PL_LOCK;
if( playlist_CurrentPlayingItem(p_playlist) == NULL )
{
PL_UNLOCK;
- pl_Release( p_intf );
return;
}
if( psz_name )
{
- if( !strncmp(psz_name, "dvd://", 4) )
+ if( !strncmp(psz_name, "dvd://", 6) )
{
- switch( psz_name[strlen("dvd://")] )
+ switch( psz_name[6] )
{
case '\0':
case '@':
break;
}
}
- else if( !strncmp(psz_name, VCD_MRL, strlen(VCD_MRL)) )
+ else if( !strncmp(psz_name, "vcd://", 6) )
{
- switch( psz_name[strlen(VCD_MRL)] )
+ switch( psz_name[6] )
{
case '\0':
case '@':
- psz_device = config_GetPsz( p_intf, VCD_MRL );
+ psz_device = config_GetPsz( p_intf, "vcd" );
break;
default:
/* Omit the beginning MRL-selector characters */
- psz_device = strdup( psz_name + strlen(VCD_MRL) );
+ psz_device = strdup( psz_name + 6 );
break;
}
}
- else if( !strncmp(psz_name, CDDA_MRL, strlen(CDDA_MRL) ) )
+ else if( !strncmp(psz_name, "cdda://", 7 ) )
{
- switch( psz_name[strlen(CDDA_MRL)] )
+ switch( psz_name[7] )
{
case '\0':
case '@':
break;
default:
/* Omit the beginning MRL-selector characters */
- psz_device = strdup( psz_name + strlen(CDDA_MRL) );
+ psz_device = strdup( psz_name + 7 );
break;
}
}
if( psz_device == NULL )
{
- pl_Release( p_intf );
return;
}
}
free( psz_device );
- pl_Release( p_intf );
- return;
}
static int comp_dir_entries( const void *pp_dir_entry1,
char *psz_entry;
/* Open the dir */
- p_current_dir = utf8_opendir( p_sys->psz_current_dir );
+ p_current_dir = vlc_opendir( p_sys->psz_current_dir );
if( p_current_dir == NULL )
{
p_sys->i_dir_entries = 0;
/* while we still have entries in the directory */
- while( ( psz_entry = utf8_readdir( p_current_dir ) ) != NULL )
+ while( ( psz_entry = vlc_readdir( p_current_dir ) ) != NULL )
{
#if defined( S_ISDIR )
struct stat stat_data;
}
#if defined( S_ISDIR )
- if( !utf8_stat( psz_uri, &stat_data )
+ if( !vlc_stat( psz_uri, &stat_data )
&& S_ISDIR(stat_data.st_mode) )
/*#elif defined( DT_DIR )
if( p_dir_content->d_type & DT_DIR )*/
static void PlayPause( intf_thread_t *p_intf )
{
input_thread_t *p_input = p_intf->p_sys->p_input;
- playlist_t *p_playlist = pl_Hold( p_intf );
+ playlist_t *p_playlist = pl_Get( p_intf );
vlc_value_t val;
if( p_input )
}
else
playlist_Play( p_playlist );
-
- pl_Release( p_intf );
}
/****************************************************************************