-#else
-
- /* XXX: This saves in the data directory. Shouldn't we try saving
- * to psz_homedir/Desktop or something nicer ? */
- char *psz_datadir = config_GetUserDataDir();
- if( psz_datadir )
- {
- if( asprintf( &psz_path, "%s", psz_datadir ) == -1 )
- psz_path = NULL;
- free( psz_datadir );
- }
-
-#endif
-
- return psz_path;
-}
-/**
- * This function will save a video snapshot to a file
- */
-static int VoutWriteSnapshot( vout_thread_t *p_vout, char **ppsz_filename,
- const block_t *p_image,
- const char *psz_path,
- const char *psz_format,
- const char *psz_prefix_fmt )
-{
- /* */
- char *psz_filename;
- DIR *p_path = utf8_opendir( psz_path );
- if( p_path != NULL )
- {
- /* The use specified a directory path */
- closedir( p_path );
-
- /* */
- char *psz_prefix = NULL;
- if( psz_prefix_fmt )
- psz_prefix = str_format( p_vout, psz_prefix_fmt );
- if( !psz_prefix )
- {
- psz_prefix = strdup( "vlcsnap-" );
- if( !psz_prefix )
- goto error;
- }
-
- if( var_GetBool( p_vout, "snapshot-sequential" ) )
- {
- int i_num = var_GetInteger( p_vout, "snapshot-num" );
- for( ; ; i_num++ )
- {
- struct stat st;
-
- if( asprintf( &psz_filename, "%s" DIR_SEP "%s%05d.%s",
- psz_path, psz_prefix, i_num++, psz_format ) < 0 )
- {
- free( psz_prefix );
- goto error;
- }
- if( utf8_stat( psz_filename, &st ) )
- break;
- free( psz_filename );
- }
-
- var_SetInteger( p_vout, "snapshot-num", i_num );
- }
- else
- {
- struct tm curtime;
- time_t lcurtime = time( NULL ) ;
-
- if( !localtime_r( &lcurtime, &curtime ) )
- {
- const unsigned int i_id = (p_image->i_pts / 100000) & 0xFFFFFF;
-
- msg_Warn( p_vout, "failed to get current time. Falling back to legacy snapshot naming" );
-
- if( asprintf( &psz_filename, "%s" DIR_SEP "%s%u.%s",
- psz_path, psz_prefix, i_id, psz_format ) < 0 )
- psz_filename = NULL;
- }
- else
- {
- /* suffix with the last decimal digit in 10s of seconds resolution
- * FIXME gni ? */
- const int i_id = (p_image->i_pts / (100*1000)) & 0xFF;
- char psz_curtime[128];
-
- if( !strftime( psz_curtime, sizeof(psz_curtime), "%Y-%m-%d-%Hh%Mm%Ss", &curtime ) )
- strcpy( psz_curtime, "error" );
-
- if( asprintf( &psz_filename, "%s" DIR_SEP "%s%s%1u.%s",
- psz_path, psz_prefix, psz_curtime, i_id, psz_format ) < 0 )
- psz_filename = NULL;
- }
- }
- free( psz_prefix );
- }
- else
- {
- /* The user specified a full path name (including file name) */
- psz_filename = str_format( p_vout, psz_path );
- path_sanitize( psz_filename );
- }
-
- if( !psz_filename )
- goto error;
-
- /* Save the snapshot */
- FILE *p_file = utf8_fopen( psz_filename, "wb" );
- if( !p_file )
- {
- msg_Err( p_vout, "Failed to open '%s'", psz_filename );
- free( psz_filename );
- goto error;
- }
- if( fwrite( p_image->p_buffer, p_image->i_buffer, 1, p_file ) != 1 )
- {
- msg_Err( p_vout, "Failed to write to '%s'", psz_filename );
- fclose( p_file );
- free( psz_filename );
- goto error;
- }
- fclose( p_file );
-
- /* */
- if( ppsz_filename )
- *ppsz_filename = psz_filename;
- else
- free( psz_filename );