]> git.sesse.net Git - vlc/commitdiff
* src/libvlc.h, src/video_output/vout_intf.c: added crop config option + changed...
authorGildas Bazin <gbazin@videolan.org>
Fri, 28 Oct 2005 09:30:47 +0000 (09:30 +0000)
committerGildas Bazin <gbazin@videolan.org>
Fri, 28 Oct 2005 09:30:47 +0000 (09:30 +0000)
src/libvlc.h
src/video_output/vout_intf.c

index 560c156a07ab993f8c9b137f96feeb637fbaaad2..8a1cebcd77ea1e0b103b985851ff5081f1c385f4 100644 (file)
@@ -279,6 +279,12 @@ static char *ppsz_align_descriptions[] =
     "Allows you to specify the image format in which the video snapshots will " \
     "be stored.")
 
+#define CROP_TEXT N_("Video cropping")
+#define CROP_LONGTEXT N_( \
+    "This will force the cropping of the source video. " \
+    "Accepted formats are x:y (4:3, 16:9, etc.) expressing the global image " \
+    "aspect.")
+
 #define ASPECT_RATIO_TEXT N_("Source aspect ratio")
 #define ASPECT_RATIO_LONGTEXT N_( \
     "This will force the source aspect ratio. For instance, some DVDs claim " \
@@ -295,11 +301,11 @@ static char *ppsz_align_descriptions[] =
     "Disable this option only if your video has non-standard format " \
     "requiring all 1088 lines.")
 
-#define MASPECT_RATIO_TEXT N_("Monitor aspect ratio")
+#define MASPECT_RATIO_TEXT N_("Monitor pixel aspect ratio")
 #define MASPECT_RATIO_LONGTEXT N_( \
-    "This will force the monitor aspect ratio. Most monitors have a 4:3." \
-    "If you have a 16:9 screen, you will need to change this to 16:9 in" \
-    "order to keep proportions.")
+    "This will force the monitor aspect ratio. Most monitors have square " \
+    "pixels (1:1). If you have a 16:9 screen, you might need to change this " \
+    "to 4:3 in order to keep proportions.")
 
 #define SKIP_FRAMES_TEXT N_("Skip frames")
 #define SKIP_FRAMES_LONGTEXT N_( \
@@ -1022,10 +1028,11 @@ vlc_module_begin();
     add_integer( "height", -1, NULL, HEIGHT_TEXT, HEIGHT_LONGTEXT, VLC_TRUE );
     add_integer( "video-x", -1, NULL, VIDEOX_TEXT, VIDEOX_LONGTEXT, VLC_TRUE );
     add_integer( "video-y", -1, NULL, VIDEOY_TEXT, VIDEOY_LONGTEXT, VLC_TRUE );
-    add_string( "aspect-ratio", "", NULL,
-               ASPECT_RATIO_TEXT, ASPECT_RATIO_LONGTEXT, VLC_FALSE );
-    add_string( "monitor-aspect-ratio", "4:3", NULL,
-               MASPECT_RATIO_TEXT, MASPECT_RATIO_LONGTEXT, VLC_FALSE );
+    add_string( "crop", NULL, NULL, CROP_TEXT, CROP_LONGTEXT, VLC_FALSE );
+    add_string( "aspect-ratio", NULL, NULL,
+                ASPECT_RATIO_TEXT, ASPECT_RATIO_LONGTEXT, VLC_FALSE );
+    add_string( "monitor-par", NULL, NULL,
+                MASPECT_RATIO_TEXT, MASPECT_RATIO_LONGTEXT, VLC_TRUE );
     add_bool( "hdtv-fix", 1, NULL, HDTV_FIX_TEXT, HDTV_FIX_LONGTEXT, VLC_TRUE );
     add_bool( "video-deco", 1, NULL, VIDEO_DECO_TEXT,
               VIDEO_DECO_LONGTEXT, VLC_TRUE );
index d1c43b3731fbf81037f576db3475421c0a486d6d..31eb21edb77cf41864c1cf0cfe66766cad57af64 100644 (file)
@@ -176,6 +176,7 @@ int vout_ControlWindow( vout_thread_t *p_vout, void *p_window,
 void vout_IntfInit( vout_thread_t *p_vout )
 {
     vlc_value_t val, text, old_val;
+    vlc_bool_t b_force_par = VLC_FALSE;
 
     /* Create a few object variables we'll need later on */
     var_Create( p_vout, "snapshot-path", VLC_VAR_STRING | VLC_VAR_DOINHERIT );
@@ -242,10 +243,9 @@ void vout_IntfInit( vout_thread_t *p_vout )
     if( old_val.psz_string ) free( old_val.psz_string );
 
     /* Monitor pixel aspect-ratio */
-    var_Create( p_vout, "monitor-aspect-ratio",
-                VLC_VAR_STRING | VLC_VAR_DOINHERIT );
-    var_Get( p_vout, "monitor-aspect-ratio", &val );
-    if( val.psz_string )
+    var_Create( p_vout, "monitor-par", VLC_VAR_STRING | VLC_VAR_DOINHERIT );
+    var_Get( p_vout, "monitor-par", &val );
+    if( val.psz_string && *val.psz_string )
     {
         char *psz_parser = strchr( val.psz_string, ':' );
         unsigned int i_aspect_num = 0, i_aspect_den = 0;
@@ -262,16 +262,17 @@ void vout_IntfInit( vout_thread_t *p_vout )
                          i_aspect *VOUT_ASPECT_FACTOR, VOUT_ASPECT_FACTOR, 0 );
         }
         free( val.psz_string );
-        if( !i_aspect_num || !i_aspect_den )
-        {
-            i_aspect_num = 4;
-            i_aspect_den = 3;
-        }
-        p_vout->i_par_num = i_aspect_num * 3 * 4;
+        if( !i_aspect_num || !i_aspect_den ) i_aspect_num = i_aspect_den = 1;
+
+        p_vout->i_par_num = i_aspect_num;
         p_vout->i_par_den = i_aspect_den;
 
         vlc_ureduce( &p_vout->i_par_num, &p_vout->i_par_den,
                      p_vout->i_par_num, p_vout->i_par_den, 0 );
+
+        msg_Dbg( p_vout, "monitor pixel aspect-ratio overriding: %i:%i",
+                 p_vout->i_par_num, p_vout->i_par_den );
+        b_force_par = VLC_TRUE;
     }
 
     /* Aspect-ratio object var */
@@ -296,7 +297,7 @@ void vout_IntfInit( vout_thread_t *p_vout )
 
     var_AddCallback( p_vout, "aspect-ratio", AspectCallback, NULL );
     var_Get( p_vout, "aspect-ratio", &old_val );
-    if( old_val.psz_string && *old_val.psz_string )
+    if( (old_val.psz_string && *old_val.psz_string) || b_force_par )
         var_Change( p_vout, "aspect-ratio", VLC_VAR_TRIGGER_CALLBACKS, 0, 0 );
     if( old_val.psz_string ) free( old_val.psz_string );
 
@@ -619,6 +620,15 @@ static int AspectCallback( vlc_object_t *p_this, char const *psz_cmd,
     p_vout->render.i_aspect = p_vout->fmt_in.i_aspect;
 
  aspect_end:
+    if( p_vout->i_par_num && p_vout->i_par_den )
+    {
+        p_vout->fmt_in.i_sar_num *= p_vout->i_par_den;
+        p_vout->fmt_in.i_sar_den *= p_vout->i_par_num;
+        p_vout->fmt_in.i_aspect = p_vout->fmt_in.i_aspect *
+            p_vout->i_par_den / p_vout->i_par_num;
+        p_vout->render.i_aspect = p_vout->fmt_in.i_aspect;
+    }
+
     p_vout->i_changes |= VOUT_ASPECT_CHANGE;
 
     vlc_ureduce( &i_aspect_num, &i_aspect_den,