Commit 89885149 authored by Derk-Jan Hartman's avatar Derk-Jan Hartman

* src/libvlc.h: Added a "snapshot-format" option to be able to select png or jpg (png default)

* src/video_output/vout_intf.c: use above option and set the default destination for snapshots
   on OS X to the Desktop.
* REST: Add the Snapshot command to the menu's etc.
parent 0895cfab
...@@ -197,6 +197,7 @@ ...@@ -197,6 +197,7 @@
"o_mi_services" = id; "o_mi_services" = id;
"o_mi_show_all" = id; "o_mi_show_all" = id;
"o_mi_slower" = id; "o_mi_slower" = id;
"o_mi_snapshot" = id;
"o_mi_stop" = id; "o_mi_stop" = id;
"o_mi_subtitle" = id; "o_mi_subtitle" = id;
"o_mi_title" = id; "o_mi_title" = id;
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
<plist version="1.0"> <plist version="1.0">
<dict> <dict>
<key>IBDocumentLocation</key> <key>IBDocumentLocation</key>
<string>47 61 505 517 0 0 800 578 </string> <string>25 92 505 517 0 0 1280 938 </string>
<key>IBEditorPositions</key> <key>IBEditorPositions</key>
<dict> <dict>
<key>1617</key> <key>1617</key>
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
<key>2197</key> <key>2197</key>
<string>237 313 596 367 0 0 1024 746 </string> <string>237 313 596 367 0 0 1024 746 </string>
<key>29</key> <key>29</key>
<string>421 486 419 44 0 0 800 578 </string> <string>326 879 419 44 0 0 1280 938 </string>
<key>915</key> <key>915</key>
<string>731 416 165 180 0 0 1024 746 </string> <string>731 416 165 180 0 0 1024 746 </string>
</dict> </dict>
...@@ -27,6 +27,7 @@ ...@@ -27,6 +27,7 @@
<key>IBOpenObjects</key> <key>IBOpenObjects</key>
<array> <array>
<integer>21</integer> <integer>21</integer>
<integer>29</integer>
</array> </array>
<key>IBSystem Version</key> <key>IBSystem Version</key>
<string>7S215</string> <string>7S215</string>
......
...@@ -292,6 +292,10 @@ ...@@ -292,6 +292,10 @@
if( ![o_window isZoomed] ) if( ![o_window isZoomed] )
[o_window performZoom:self]; [o_window performZoom:self];
} }
else if( [o_title isEqualToString: _NS("Snapshot") ] )
{
[o_window snapshot];
}
else else
{ {
vlc_value_t val; vlc_value_t val;
...@@ -634,6 +638,7 @@ ...@@ -634,6 +638,7 @@
[[o_mi title] isEqualToString: _NS("Normal Size")] || [[o_mi title] isEqualToString: _NS("Normal Size")] ||
[[o_mi title] isEqualToString: _NS("Double Size")] || [[o_mi title] isEqualToString: _NS("Double Size")] ||
[[o_mi title] isEqualToString: _NS("Fit to Screen")] || [[o_mi title] isEqualToString: _NS("Fit to Screen")] ||
[[o_mi title] isEqualToString: _NS("Snapshot")] ||
[[o_mi title] isEqualToString: _NS("Float on Top")] ) [[o_mi title] isEqualToString: _NS("Float on Top")] )
{ {
id o_window; id o_window;
......
...@@ -195,6 +195,7 @@ struct intf_sys_t ...@@ -195,6 +195,7 @@ struct intf_sys_t
IBOutlet id o_mi_fittoscreen; IBOutlet id o_mi_fittoscreen;
IBOutlet id o_mi_fullscreen; IBOutlet id o_mi_fullscreen;
IBOutlet id o_mi_floatontop; IBOutlet id o_mi_floatontop;
IBOutlet id o_mi_snapshot;
IBOutlet id o_mi_videotrack; IBOutlet id o_mi_videotrack;
IBOutlet id o_mu_videotrack; IBOutlet id o_mu_videotrack;
IBOutlet id o_mi_screen; IBOutlet id o_mi_screen;
......
...@@ -366,6 +366,9 @@ static VLCMain *_o_sharedMainInstance = nil; ...@@ -366,6 +366,9 @@ static VLCMain *_o_sharedMainInstance = nil;
i_key = config_GetInt( p_intf, "key-fullscreen" ); i_key = config_GetInt( p_intf, "key-fullscreen" );
[o_mi_fullscreen setKeyEquivalent: [NSString stringWithFormat:@"%C", VLCKeyToCocoa( i_key )]]; [o_mi_fullscreen setKeyEquivalent: [NSString stringWithFormat:@"%C", VLCKeyToCocoa( i_key )]];
[o_mi_fullscreen setKeyEquivalentModifierMask: VLCModifiersToCocoa(i_key)]; [o_mi_fullscreen setKeyEquivalentModifierMask: VLCModifiersToCocoa(i_key)];
i_key = config_GetInt( p_intf, "key-snapshot" );
[o_mi_snapshot setKeyEquivalent: [NSString stringWithFormat:@"%C", VLCKeyToCocoa( i_key )]];
[o_mi_snapshot setKeyEquivalentModifierMask: VLCModifiersToCocoa(i_key)];
var_Create( p_intf, "intf-change", VLC_VAR_BOOL ); var_Create( p_intf, "intf-change", VLC_VAR_BOOL );
...@@ -477,6 +480,7 @@ static VLCMain *_o_sharedMainInstance = nil; ...@@ -477,6 +480,7 @@ static VLCMain *_o_sharedMainInstance = nil;
[o_mi_fittoscreen setTitle: _NS("Fit to Screen")]; [o_mi_fittoscreen setTitle: _NS("Fit to Screen")];
[o_mi_fullscreen setTitle: _NS("Fullscreen")]; [o_mi_fullscreen setTitle: _NS("Fullscreen")];
[o_mi_floatontop setTitle: _NS("Float on Top")]; [o_mi_floatontop setTitle: _NS("Float on Top")];
[o_mi_snapshot setTitle: _NS("Snapshot")];
[o_mi_videotrack setTitle: _NS("Video Track")]; [o_mi_videotrack setTitle: _NS("Video Track")];
[o_mu_videotrack setTitle: _NS("Video Track")]; [o_mu_videotrack setTitle: _NS("Video Track")];
[o_mi_screen setTitle: _NS("Video Device")]; [o_mi_screen setTitle: _NS("Video Device")];
......
...@@ -48,6 +48,7 @@ ...@@ -48,6 +48,7 @@
- (void)toggleFloatOnTop; - (void)toggleFloatOnTop;
- (void)toggleFullscreen; - (void)toggleFullscreen;
- (BOOL)isFullscreen; - (BOOL)isFullscreen;
- (void)snapshot;
- (void)updateTitle; - (void)updateTitle;
- (BOOL)windowShouldClose:(id)sender; - (BOOL)windowShouldClose:(id)sender;
......
...@@ -333,6 +333,11 @@ ...@@ -333,6 +333,11 @@
return( p_vout->b_fullscreen ); return( p_vout->b_fullscreen );
} }
- (void)snapshot
{
vout_Control( p_vout, VOUT_SNAPSHOT );
}
- (BOOL)canBecomeKeyWindow - (BOOL)canBecomeKeyWindow
{ {
return YES; return YES;
......
...@@ -36,6 +36,9 @@ static char *ppsz_language_text[] = ...@@ -36,6 +36,9 @@ static char *ppsz_language_text[] =
N_("Norwegian"), N_("Polish"), N_("Brazilian"), N_("Russian"), N_("Norwegian"), N_("Polish"), N_("Brazilian"), N_("Russian"),
N_("Swedish") }; N_("Swedish") };
static char *ppsz_snap_formats[] =
{ "png", "jpg" };
/***************************************************************************** /*****************************************************************************
* Configuration options for the main program. Each module will also separatly * Configuration options for the main program. Each module will also separatly
* define its own configuration options. * define its own configuration options.
...@@ -257,6 +260,11 @@ static char *ppsz_align_descriptions[] = ...@@ -257,6 +260,11 @@ static char *ppsz_align_descriptions[] =
"Allows you to specify the directory where the video snapshots will " \ "Allows you to specify the directory where the video snapshots will " \
"be stored.") "be stored.")
#define SNAP_FORMAT_TEXT N_("Video snapshot format")
#define SNAP_FORMAT_LONGTEXT N_( \
"Allows you to specify the image format in which the video snapshots will " \
"be stored.")
#define ASPECT_RATIO_TEXT N_("Source aspect ratio") #define ASPECT_RATIO_TEXT N_("Source aspect ratio")
#define ASPECT_RATIO_LONGTEXT N_( \ #define ASPECT_RATIO_LONGTEXT N_( \
"This will force the source aspect ratio. For instance, some DVDs claim " \ "This will force the source aspect ratio. For instance, some DVDs claim " \
...@@ -898,6 +906,9 @@ vlc_module_begin(); ...@@ -898,6 +906,9 @@ vlc_module_begin();
ASPECT_RATIO_TEXT, ASPECT_RATIO_LONGTEXT, VLC_TRUE ); ASPECT_RATIO_TEXT, ASPECT_RATIO_LONGTEXT, VLC_TRUE );
add_directory( "snapshot-path", NULL, NULL, SNAP_PATH_TEXT, add_directory( "snapshot-path", NULL, NULL, SNAP_PATH_TEXT,
SNAP_PATH_LONGTEXT, VLC_FALSE ); SNAP_PATH_LONGTEXT, VLC_FALSE );
add_string( "snapshot-format", "png", NULL, SNAP_FORMAT_TEXT,
SNAP_FORMAT_LONGTEXT, VLC_FALSE );
change_string_list( ppsz_snap_formats, NULL, 0 );
set_subcategory( SUBCAT_VIDEO_VOUT ); set_subcategory( SUBCAT_VIDEO_VOUT );
add_module( "vout", "video output", NULL, NULL, VOUT_TEXT, VOUT_LONGTEXT, add_module( "vout", "video output", NULL, NULL, VOUT_TEXT, VOUT_LONGTEXT,
...@@ -1195,14 +1206,14 @@ vlc_module_begin(); ...@@ -1195,14 +1206,14 @@ vlc_module_begin();
# define KEY_VOL_UP KEY_MODIFIER_COMMAND|KEY_UP # define KEY_VOL_UP KEY_MODIFIER_COMMAND|KEY_UP
# define KEY_VOL_DOWN KEY_MODIFIER_COMMAND|KEY_DOWN # define KEY_VOL_DOWN KEY_MODIFIER_COMMAND|KEY_DOWN
# define KEY_VOL_MUTE KEY_MODIFIER_COMMAND|KEY_MODIFIER_SHIFT|'m' # define KEY_VOL_MUTE KEY_MODIFIER_COMMAND|KEY_MODIFIER_SHIFT|'m'
# define KEY_SUBDELAY_UP KEY_MODIFIER_COMMAND|'k' # define KEY_SUBDELAY_UP KEY_MODIFIER_COMMAND|'j'
# define KEY_SUBDELAY_DOWN KEY_MODIFIER_COMMAND|'j' # define KEY_SUBDELAY_DOWN KEY_MODIFIER_COMMAND|'h'
# define KEY_AUDIODELAY_UP KEY_MODIFIER_COMMAND|'h' # define KEY_AUDIODELAY_UP KEY_MODIFIER_COMMAND|'l'
# define KEY_AUDIODELAY_DOWN KEY_MODIFIER_COMMAND|'g' # define KEY_AUDIODELAY_DOWN KEY_MODIFIER_COMMAND|'k'
# define KEY_AUDIO_TRACK 'l' # define KEY_AUDIO_TRACK 'l'
# define KEY_SUBTITLE_TRACK 's' # define KEY_SUBTITLE_TRACK 's'
# define KEY_INTF_SHOW 'i' # define KEY_INTF_SHOW 'i'
# define KEY_SNAPSHOT KEY_MODIFIER_CTRL|'s' # define KEY_SNAPSHOT KEY_MODIFIER_COMMAND|KEY_MODIFIER_ALT|'s'
# define KEY_SET_BOOKMARK1 KEY_MODIFIER_COMMAND|KEY_F1 # define KEY_SET_BOOKMARK1 KEY_MODIFIER_COMMAND|KEY_F1
# define KEY_SET_BOOKMARK2 KEY_MODIFIER_COMMAND|KEY_F2 # define KEY_SET_BOOKMARK2 KEY_MODIFIER_COMMAND|KEY_F2
......
...@@ -175,6 +175,7 @@ void vout_IntfInit( vout_thread_t *p_vout ) ...@@ -175,6 +175,7 @@ void vout_IntfInit( vout_thread_t *p_vout )
/* Create a few object variables we'll need later on */ /* Create a few object variables we'll need later on */
var_Create( p_vout, "snapshot-path", VLC_VAR_STRING | VLC_VAR_DOINHERIT ); var_Create( p_vout, "snapshot-path", VLC_VAR_STRING | VLC_VAR_DOINHERIT );
var_Create( p_vout, "snapshot-format", VLC_VAR_STRING | VLC_VAR_DOINHERIT );
var_Create( p_vout, "aspect-ratio", VLC_VAR_STRING | VLC_VAR_DOINHERIT ); var_Create( p_vout, "aspect-ratio", VLC_VAR_STRING | VLC_VAR_DOINHERIT );
var_Create( p_vout, "width", VLC_VAR_INTEGER | VLC_VAR_DOINHERIT ); var_Create( p_vout, "width", VLC_VAR_INTEGER | VLC_VAR_DOINHERIT );
var_Create( p_vout, "height", VLC_VAR_INTEGER | VLC_VAR_DOINHERIT ); var_Create( p_vout, "height", VLC_VAR_INTEGER | VLC_VAR_DOINHERIT );
...@@ -259,7 +260,7 @@ int vout_Snapshot( vout_thread_t *p_vout, picture_t *p_pic ) ...@@ -259,7 +260,7 @@ int vout_Snapshot( vout_thread_t *p_vout, picture_t *p_pic )
char *psz_filename; char *psz_filename;
subpicture_t *p_subpic; subpicture_t *p_subpic;
picture_t *p_pif; picture_t *p_pif;
vlc_value_t val; vlc_value_t val, format;
int i_ret; int i_ret;
var_Get( p_vout, "snapshot-path", &val ); var_Get( p_vout, "snapshot-path", &val );
...@@ -268,20 +269,35 @@ int vout_Snapshot( vout_thread_t *p_vout, picture_t *p_pic ) ...@@ -268,20 +269,35 @@ int vout_Snapshot( vout_thread_t *p_vout, picture_t *p_pic )
free( val.psz_string ); free( val.psz_string );
val.psz_string = 0; val.psz_string = 0;
} }
#ifdef SYS_DARWIN
if( !val.psz_string && p_vout->p_vlc->psz_homedir )
{
asprintf( &val.psz_string, "%s/Desktop",
p_vout->p_vlc->psz_homedir );
}
#else
if( !val.psz_string && p_vout->p_vlc->psz_homedir ) if( !val.psz_string && p_vout->p_vlc->psz_homedir )
{ {
asprintf( &val.psz_string, "%s/" CONFIG_DIR, asprintf( &val.psz_string, "%s/" CONFIG_DIR,
p_vout->p_vlc->psz_homedir ); p_vout->p_vlc->psz_homedir );
} }
#endif
if( !val.psz_string ) if( !val.psz_string )
{ {
msg_Err( p_vout, "no directory specified for snapshots" ); msg_Err( p_vout, "no directory specified for snapshots" );
return VLC_EGENERIC; return VLC_EGENERIC;
} }
var_Get( p_vout, "snapshot-format", &format );
if( format.psz_string && !*format.psz_string )
{
free( format.psz_string );
format.psz_string = strdup( "png" );
}
asprintf( &psz_filename, "%s/vlcsnap-%u.png", 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 );
free( val.psz_string ); free( val.psz_string );
free( format.psz_string );
/* Save the snapshot */ /* Save the snapshot */
fmt_in.i_chroma = p_vout->render.i_chroma; fmt_in.i_chroma = p_vout->render.i_chroma;
......
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