[vlc-commits] commit: Added video_format_ScaleCropAr(). (Laurent Aimar )

git at videolan.org git at videolan.org
Fri Nov 26 22:37:43 CET 2010


vlc | branch: master | Laurent Aimar <fenrir at videolan.org> | Sat Nov 13 20:40:42 2010 +0100| [9cf0b9d4e10fb6b2ec65de48a18fd2c6a4b1275d] | committer: Laurent Aimar 

Added video_format_ScaleCropAr().

It computes correct crop/ar settings when scaling a video format.

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=9cf0b9d4e10fb6b2ec65de48a18fd2c6a4b1275d
---

 include/vlc_es.h     |    5 +++++
 src/libvlccore.sym   |    1 +
 src/misc/es_format.c |   18 ++++++++++++++++++
 3 files changed, 24 insertions(+), 0 deletions(-)

diff --git a/include/vlc_es.h b/include/vlc_es.h
index 3c80d57..0b41015 100644
--- a/include/vlc_es.h
+++ b/include/vlc_es.h
@@ -178,6 +178,11 @@ VLC_EXPORT( void, video_format_Setup, ( video_format_t *, vlc_fourcc_t i_chroma,
 VLC_EXPORT( void, video_format_CopyCrop, ( video_format_t *, const video_format_t * ) );
 
 /**
+ * It will compute the crop/ar properties when scaling.
+ */
+VLC_EXPORT( void, video_format_ScaleCropAr, ( video_format_t *, const video_format_t * ) );
+
+/**
  * This function will check if the first video format is similar
  * to the second one.
  */
diff --git a/src/libvlccore.sym b/src/libvlccore.sym
index aec8a36..393c461 100644
--- a/src/libvlccore.sym
+++ b/src/libvlccore.sym
@@ -486,6 +486,7 @@ var_Type
 var_Inherit
 var_InheritURational
 video_format_CopyCrop
+video_format_ScaleCropAr
 video_format_FixRgb
 video_format_IsSimilar
 video_format_Setup
diff --git a/src/misc/es_format.c b/src/misc/es_format.c
index e55ee2b..7830289 100644
--- a/src/misc/es_format.c
+++ b/src/misc/es_format.c
@@ -215,6 +215,24 @@ void video_format_CopyCrop( video_format_t *p_dst, const video_format_t *p_src )
     p_dst->i_visible_height = p_src->i_visible_height;
 }
 
+void video_format_ScaleCropAr( video_format_t *p_dst, const video_format_t *p_src )
+{
+    p_dst->i_x_offset       = (uint64_t)p_src->i_x_offset       * p_dst->i_width  / p_src->i_width;
+    p_dst->i_y_offset       = (uint64_t)p_src->i_y_offset       * p_dst->i_height / p_src->i_height;
+    p_dst->i_visible_width  = (uint64_t)p_src->i_visible_width  * p_dst->i_width  / p_src->i_width;
+    p_dst->i_visible_height = (uint64_t)p_src->i_visible_height * p_dst->i_height / p_src->i_height;
+
+    p_dst->i_sar_num *= p_src->i_width;
+    p_dst->i_sar_den *= p_dst->i_width;
+    vlc_ureduce(&p_dst->i_sar_num, &p_dst->i_sar_den,
+                p_dst->i_sar_num, p_dst->i_sar_den, 65536);
+
+    p_dst->i_sar_num *= p_dst->i_height;
+    p_dst->i_sar_den *= p_src->i_height;
+    vlc_ureduce(&p_dst->i_sar_num, &p_dst->i_sar_den,
+                p_dst->i_sar_num, p_dst->i_sar_den, 65536);
+}
+
 bool video_format_IsSimilar( const video_format_t *p_fmt1, const video_format_t *p_fmt2 )
 {
     video_format_t v1 = *p_fmt1;



More information about the vlc-commits mailing list