From 11c39abc9a99d5fcb0070988ffe0d773d9780875 Mon Sep 17 00:00:00 2001 From: Jan Schmidt Date: Tue, 22 Nov 2005 22:21:37 +0000 Subject: More fractional framerate conversions Original commit message from CVS: * ext/cairo/gsttextoverlay.c: (gst_text_overlay_init), (gst_text_overlay_setcaps), (gst_text_overlay_collected): * ext/cairo/gsttextoverlay.h: * ext/gdk_pixbuf/gstgdkpixbuf.c: (gst_gdk_pixbuf_sink_link): * ext/gdk_pixbuf/gstgdkpixbuf.h: * ext/libpng/gstpngdec.c: (gst_pngdec_init), (gst_pngdec_caps_create_and_set): * ext/libpng/gstpngdec.h: * ext/libpng/gstpngenc.c: (gst_pngenc_setcaps): * gst/alpha/gstalphacolor.c: (gst_alpha_color_set_caps): * gst/avi/gstavimux.c: (gst_avimux_init), (gst_avimux_vidsinkconnect): * gst/flx/gstflxdec.c: (gst_flxdec_chain): * gst/goom/gstgoom.c: (gst_goom_init), (gst_goom_src_setcaps), (gst_goom_src_negotiate), (gst_goom_chain): * gst/goom/gstgoom.h: * gst/matroska/matroska-demux.c: (gst_matroska_demux_video_caps): * gst/matroska/matroska-mux.c: (gst_matroska_mux_video_pad_setcaps): * sys/osxvideo/osxvideosink.h: * sys/osxvideo/osxvideosink.m: More fractional framerate conversions --- ext/cairo/gsttextoverlay.c | 19 ++++++++++++------- ext/cairo/gsttextoverlay.h | 3 ++- 2 files changed, 14 insertions(+), 8 deletions(-) (limited to 'ext/cairo') diff --git a/ext/cairo/gsttextoverlay.c b/ext/cairo/gsttextoverlay.c index a6a889bd..b8bf1c87 100644 --- a/ext/cairo/gsttextoverlay.c +++ b/ext/cairo/gsttextoverlay.c @@ -251,7 +251,8 @@ gst_text_overlay_init (GstTextOverlay * overlay, GstTextOverlayClass * klass) overlay->scale = 20; gst_text_overlay_font_init (overlay); - overlay->framerate = 0.0; + overlay->fps_n = 0; + overlay->fps_d = 1; overlay->collect = gst_collect_pads_new (); @@ -530,7 +531,7 @@ gst_text_overlay_setcaps (GstPad * pad, GstCaps * caps) GstTextOverlay *overlay; GstStructure *structure; gboolean ret = FALSE; - gdouble fps = 0.0; + const GValue *fps; if (!GST_PAD_IS_SINK (pad)) return TRUE; @@ -542,13 +543,16 @@ gst_text_overlay_setcaps (GstPad * pad, GstCaps * caps) overlay->width = 0; overlay->height = 0; structure = gst_caps_get_structure (caps, 0); + fps = gst_structure_get_value (structure, "framerate"); + if (gst_structure_get_int (structure, "width", &overlay->width) && - gst_structure_get_int (structure, "height", &overlay->height)) { + gst_structure_get_int (structure, "height", &overlay->height) && + fps != NULL) { ret = gst_pad_set_caps (overlay->srcpad, caps); } - (void) gst_structure_get_double (structure, "framerate", &fps); - overlay->framerate = fps; + overlay->fps_n = gst_value_get_fraction_numerator (fps); + overlay->fps_d = gst_value_get_fraction_denominator (fps); return ret; } @@ -780,8 +784,9 @@ gst_text_overlay_collected (GstCollectPads * pads, gpointer data) if (GST_BUFFER_DURATION (video_frame) != GST_CLOCK_TIME_NONE) { frame_end = now + GST_BUFFER_DURATION (video_frame); - } else if (overlay->framerate > 0.0) { - frame_end = now + (GST_SECOND / overlay->framerate); + } else if (overlay->fps_n > 0) { + frame_end = now + gst_util_clock_time_scale (GST_SECOND, + overlay->fps_d, overlay->fps_n); } else { /* magic value, does not really matter since texts * tend to span quite a few frames in practice anyway */ diff --git a/ext/cairo/gsttextoverlay.h b/ext/cairo/gsttextoverlay.h index 66cd11de..8f105ca0 100644 --- a/ext/cairo/gsttextoverlay.h +++ b/ext/cairo/gsttextoverlay.h @@ -51,7 +51,8 @@ struct _GstTextOverlay { gint width; gint height; - gdouble framerate; + gint fps_n; + gint fps_d; GstTextOverlayVAlign valign; GstTextOverlayHAlign halign; -- cgit