Commit 2b0add07 authored by Olivier Aubert's avatar Olivier Aubert

src/vout_intf.c: move the snapshot-path == object:object-id codepath

to the start of the function, to avoid unnecessary overhead of path checks.
parent ebeebc55
...@@ -376,96 +376,12 @@ int vout_Snapshot( vout_thread_t *p_vout, picture_t *p_pic ) ...@@ -376,96 +376,12 @@ int vout_Snapshot( vout_thread_t *p_vout, picture_t *p_pic )
val.psz_string = 0; val.psz_string = 0;
} }
#if defined(__APPLE__) || defined(SYS_BEOS)
if( !val.psz_string && p_vout->p_vlc->psz_homedir )
{
asprintf( &val.psz_string, "%s/Desktop",
p_vout->p_vlc->psz_homedir );
}
#elif defined(WIN32) && !defined(UNDER_CE)
if( !val.psz_string && p_vout->p_vlc->psz_homedir )
{
/* Get the My Pictures folder path */
char *p_mypicturesdir = NULL;
typedef HRESULT (WINAPI *SHGETFOLDERPATH)( HWND, int, HANDLE, DWORD,
LPSTR );
#ifndef CSIDL_FLAG_CREATE
# define CSIDL_FLAG_CREATE 0x8000
#endif
#ifndef CSIDL_MYPICTURES
# define CSIDL_MYPICTURES 0x27
#endif
#ifndef SHGFP_TYPE_CURRENT
# define SHGFP_TYPE_CURRENT 0
#endif
HINSTANCE shfolder_dll;
SHGETFOLDERPATH SHGetFolderPath ;
/* load the shfolder dll to retrieve SHGetFolderPath */
if( ( shfolder_dll = LoadLibrary( _T("SHFolder.dll") ) ) != NULL )
{
SHGetFolderPath = (void *)GetProcAddress( shfolder_dll,
_T("SHGetFolderPathA") );
if( SHGetFolderPath != NULL )
{
p_mypicturesdir = (char *)malloc( MAX_PATH );
if( p_mypicturesdir )
{
if( S_OK != SHGetFolderPath( NULL,
CSIDL_MYPICTURES | CSIDL_FLAG_CREATE,
NULL, SHGFP_TYPE_CURRENT,
p_mypicturesdir ) )
{
free( p_mypicturesdir );
p_mypicturesdir = NULL;
}
}
}
FreeLibrary( shfolder_dll );
}
if( p_mypicturesdir == NULL )
{
asprintf( &val.psz_string, "%s/" CONFIG_DIR,
p_vout->p_vlc->psz_homedir );
}
else
{
asprintf( &val.psz_string, p_mypicturesdir );
free( p_mypicturesdir );
}
}
#else
if( !val.psz_string && p_vout->p_vlc->psz_homedir )
{
asprintf( &val.psz_string, "%s/" CONFIG_DIR,
p_vout->p_vlc->psz_homedir );
}
#endif
if( !val.psz_string )
{
msg_Err( p_vout, "no directory specified for snapshots" );
return VLC_EGENERIC;
}
var_Get( p_vout, "snapshot-format", &format );
if( !format.psz_string || !*format.psz_string )
{
if( format.psz_string ) free( format.psz_string );
format.psz_string = strdup( "png" );
}
/* Embedded snapshot : if snapshot-path == object:object-id, then /* Embedded snapshot : if snapshot-path == object:object-id, then
create a snapshot_t* and store it in create a snapshot_t* and store it in
object(object-id)->p_private, then unlock and signal the object(object-id)->p_private, then unlock and signal the
waiting object. waiting object.
*/ */
if( !strncmp( val.psz_string, "object:", 7 ) ) if( val.psz_string && !strncmp( val.psz_string, "object:", 7 ) )
{ {
int i_id; int i_id;
vlc_object_t* p_dest; vlc_object_t* p_dest;
...@@ -489,6 +405,8 @@ int vout_Snapshot( vout_thread_t *p_vout, picture_t *p_pic ) ...@@ -489,6 +405,8 @@ int vout_Snapshot( vout_thread_t *p_vout, picture_t *p_pic )
/* Save the snapshot to a memory zone */ /* Save the snapshot to a memory zone */
fmt_in = p_vout->fmt_in; fmt_in = p_vout->fmt_in;
fmt_out.i_sar_num = fmt_out.i_sar_den = 1; fmt_out.i_sar_num = fmt_out.i_sar_den = 1;
/* FIXME: should not be hardcoded. We should be able to
specify the snapshot size (snapshot-width and snapshot-height). */
fmt_out.i_width = 320; fmt_out.i_width = 320;
fmt_out.i_height = 200; fmt_out.i_height = 200;
fmt_out.i_chroma = VLC_FOURCC( 'p','n','g',' ' ); fmt_out.i_chroma = VLC_FOURCC( 'p','n','g',' ' );
...@@ -548,6 +466,91 @@ int vout_Snapshot( vout_thread_t *p_vout, picture_t *p_pic ) ...@@ -548,6 +466,91 @@ int vout_Snapshot( vout_thread_t *p_vout, picture_t *p_pic )
return VLC_SUCCESS; return VLC_SUCCESS;
} }
#if defined(__APPLE__) || defined(SYS_BEOS)
if( !val.psz_string && p_vout->p_vlc->psz_homedir )
{
asprintf( &val.psz_string, "%s/Desktop",
p_vout->p_vlc->psz_homedir );
}
#elif defined(WIN32) && !defined(UNDER_CE)
if( !val.psz_string && p_vout->p_vlc->psz_homedir )
{
/* Get the My Pictures folder path */
char *p_mypicturesdir = NULL;
typedef HRESULT (WINAPI *SHGETFOLDERPATH)( HWND, int, HANDLE, DWORD,
LPSTR );
#ifndef CSIDL_FLAG_CREATE
# define CSIDL_FLAG_CREATE 0x8000
#endif
#ifndef CSIDL_MYPICTURES
# define CSIDL_MYPICTURES 0x27
#endif
#ifndef SHGFP_TYPE_CURRENT
# define SHGFP_TYPE_CURRENT 0
#endif
HINSTANCE shfolder_dll;
SHGETFOLDERPATH SHGetFolderPath ;
/* load the shfolder dll to retrieve SHGetFolderPath */
if( ( shfolder_dll = LoadLibrary( _T("SHFolder.dll") ) ) != NULL )
{
SHGetFolderPath = (void *)GetProcAddress( shfolder_dll,
_T("SHGetFolderPathA") );
if( SHGetFolderPath != NULL )
{
p_mypicturesdir = (char *)malloc( MAX_PATH );
if( p_mypicturesdir )
{
if( S_OK != SHGetFolderPath( NULL,
CSIDL_MYPICTURES | CSIDL_FLAG_CREATE,
NULL, SHGFP_TYPE_CURRENT,
p_mypicturesdir ) )
{
free( p_mypicturesdir );
p_mypicturesdir = NULL;
}
}
}
FreeLibrary( shfolder_dll );
}
if( p_mypicturesdir == NULL )
{
asprintf( &val.psz_string, "%s/" CONFIG_DIR,
p_vout->p_vlc->psz_homedir );
}
else
{
asprintf( &val.psz_string, p_mypicturesdir );
free( p_mypicturesdir );
}
}
#else
if( !val.psz_string && p_vout->p_vlc->psz_homedir )
{
asprintf( &val.psz_string, "%s/" CONFIG_DIR,
p_vout->p_vlc->psz_homedir );
}
#endif
if( !val.psz_string )
{
msg_Err( p_vout, "no directory specified for snapshots" );
return VLC_EGENERIC;
}
var_Get( p_vout, "snapshot-format", &format );
if( !format.psz_string || !*format.psz_string )
{
if( format.psz_string ) free( format.psz_string );
format.psz_string = strdup( "png" );
}
asprintf( &psz_filename, "%s/vlcsnap-%u.%s", val.psz_string, asprintf( &psz_filename, "%s/vlcsnap-%u.%s", val.psz_string,
(unsigned int)(p_pic->date / 100000) & 0xFFFFFF, (unsigned int)(p_pic->date / 100000) & 0xFFFFFF,
format.psz_string ); format.psz_string );
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment