[vlc-devel] [PATCH] libvlc: media: add orientation in libvlc_video_track_t

Thomas Guillem thomas at gllm.fr
Thu Nov 24 17:54:23 CET 2016


---
 include/vlc/libvlc_media.h | 13 +++++++++++++
 lib/media.c                | 18 ++++++++++++++++++
 2 files changed, 31 insertions(+)

diff --git a/include/vlc/libvlc_media.h b/include/vlc/libvlc_media.h
index 8fd13fe..547c7c0 100644
--- a/include/vlc/libvlc_media.h
+++ b/include/vlc/libvlc_media.h
@@ -172,6 +172,18 @@ typedef struct libvlc_audio_track_t
     unsigned    i_rate;
 } libvlc_audio_track_t;
 
+typedef enum libvlc_video_orient_t
+{
+    libvlc_video_orient_normal,         /**< or top_left */
+    libvlc_video_orient_transposed,     /**< or left_top */
+    libvlc_video_orient_antitransposed, /**< or right_bottom */
+    libvlc_video_orient_hflipped,       /**< or top_right */
+    libvlc_video_orient_vflipped,       /**< or bottom_left */
+    libvlc_video_orient_180,            /**< or bottom_right */
+    libvlc_video_orient_270,            /**< or left_bottom */
+    libvlc_video_orient_90,             /**< or right_top */
+} libvlc_video_orient_t;
+
 typedef struct libvlc_video_track_t
 {
     unsigned    i_height;
@@ -180,6 +192,7 @@ typedef struct libvlc_video_track_t
     unsigned    i_sar_den;
     unsigned    i_frame_rate_num;
     unsigned    i_frame_rate_den;
+    libvlc_video_orient_t i_orientation;
 } libvlc_video_track_t;
 
 typedef struct libvlc_subtitle_track_t
diff --git a/lib/media.c b/lib/media.c
index 8e07930..b30bbc4 100644
--- a/lib/media.c
+++ b/lib/media.c
@@ -106,6 +106,22 @@ static const libvlc_meta_t vlc_to_libvlc_meta[] =
     [vlc_meta_DiscTotal]    = libvlc_meta_DiscTotal
 };
 
+static libvlc_video_orient_t vlc_to_libvlc_orient(video_orientation_t orient)
+{
+    switch (orient)
+    {
+        case ORIENT_TOP_LEFT:       return libvlc_video_orient_normal;
+        case ORIENT_TOP_RIGHT:      return libvlc_video_orient_hflipped;
+        case ORIENT_BOTTOM_LEFT:    return libvlc_video_orient_vflipped;
+        case ORIENT_BOTTOM_RIGHT:   return libvlc_video_orient_180;
+        case ORIENT_LEFT_TOP:       return libvlc_video_orient_transposed;
+        case ORIENT_LEFT_BOTTOM:    return libvlc_video_orient_270;
+        case ORIENT_RIGHT_TOP:      return libvlc_video_orient_90;
+        case ORIENT_RIGHT_BOTTOM:   return libvlc_video_orient_antitransposed;
+        default:                    vlc_assert_unreachable();
+    }
+}
+
 static libvlc_media_list_t *media_get_subitems( libvlc_media_t * p_md,
                                                 bool b_create )
 {
@@ -994,6 +1010,8 @@ libvlc_media_tracks_get( libvlc_media_t *p_md, libvlc_media_track_t *** pp_es )
             p_mes->video->i_sar_den = p_es->video.i_sar_den;
             p_mes->video->i_frame_rate_num = p_es->video.i_frame_rate;
             p_mes->video->i_frame_rate_den = p_es->video.i_frame_rate_base;
+            p_mes->video->i_orientation =
+                vlc_to_libvlc_orient(p_es->video.orientation);
             break;
         case AUDIO_ES:
             p_mes->i_type = libvlc_track_audio;
-- 
2.9.3



More information about the vlc-devel mailing list