[vlc-devel] [PATCH 13/28] mmal: vout: use vlc_rational_t internally for the frame rate

Steve Lhomme robux4 at videolabs.io
Mon Apr 3 10:22:01 CEST 2017


---
 modules/hw/mmal/vout.c | 15 +++++++--------
 1 file changed, 7 insertions(+), 8 deletions(-)

diff --git a/modules/hw/mmal/vout.c b/modules/hw/mmal/vout.c
index 4043f73d31..761b55a0e5 100644
--- a/modules/hw/mmal/vout.c
+++ b/modules/hw/mmal/vout.c
@@ -117,8 +117,7 @@ struct vout_display_sys_t {
     unsigned display_width;
     unsigned display_height;
 
-    int i_frame_rate_base; /* cached framerate to detect changes for rate adjustment */
-    int i_frame_rate;
+    vlc_rational_t frame_rate; /* cached framerate to detect changes for rate adjustment */
 
     int next_phase_check; /* lowpass for phase check frequency */
     int phase_offset; /* currently applied offset to presentation time in ns */
@@ -558,14 +557,14 @@ static void vd_display(vout_display_t *vd, picture_t *picture,
     MMAL_BUFFER_HEADER_T *buffer = pic_sys->buffer;
     MMAL_STATUS_T status;
 
-    if (picture->format.i_frame_rate != sys->i_frame_rate ||
-        picture->format.i_frame_rate_base != sys->i_frame_rate_base ||
+    if (picture->format.i_frame_rate != sys->frame_rate.num ||
+        picture->format.i_frame_rate_base != sys->frame_rate.den ||
         picture->b_progressive != sys->b_progressive ||
         picture->b_top_field_first != sys->b_top_field_first) {
         sys->b_top_field_first = picture->b_top_field_first;
         sys->b_progressive = picture->b_progressive;
-        sys->i_frame_rate = picture->format.i_frame_rate;
-        sys->i_frame_rate_base = picture->format.i_frame_rate_base;
+        sys->frame_rate.num = picture->format.i_frame_rate;
+        sys->frame_rate.den = picture->format.i_frame_rate_base;
         configure_display(vd, NULL, &picture->format);
     }
 
@@ -968,8 +967,8 @@ static void maintain_phase_sync(vout_display_t *vd)
         .hdr = { MMAL_PARAMETER_VIDEO_RENDER_STATS, sizeof(render_stats) },
     };
     int32_t frame_duration = 1000000 /
-        ((double)vd->sys->i_frame_rate /
-        vd->sys->i_frame_rate_base);
+        ((double)vd->sys->frame_rate.num /
+        vd->sys->frame_rate.den);
     vout_display_sys_t *sys = vd->sys;
     int32_t phase_offset;
     MMAL_STATUS_T status;
-- 
2.11.1



More information about the vlc-devel mailing list