From: <wi...@fr...> - 2006-01-31 15:39:10
|
CVS Root: /cvs/gstreamer Module: gst-plugins-base Changes by: wingo Date: Tue Jan 31 2006 07:36:25 PST Log message: 2006-01-31 Andy Wingo <wi...@po...> * sys/v4l/gstv4lsrc.c (gst_v4lsrc_set_caps): Don't segfault if the caps being set doesn't have a framerate value. Basically a stopgap measure. * ext/ogg/gstoggmux.c (GST_BUFFER_END_TIME): New macro. Not technically correct enough to put into core though. (gst_ogg_mux_dequeue_page): Use END_TIME instead of TIMESTAMP + DURATION. Fixes theoraenc ! oggmux. * sys/v4l/gstv4lsrc.c (gst_v4lsrc_fixate): Fixate to the nearest fraction, not double. Modified files: . : ChangeLog docs/libs/tmpl : gstcolorbalance.sgml ext/ogg : gstoggmux.c sys/v4l : gstv4lsrc.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-base/ChangeLog.diff?r1=1.2320&r2=1.2321 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-base/docs/libs/tmpl/gstcolorbalance.sgml.diff?r1=1.39&r2=1.40 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-base/ext/ogg/gstoggmux.c.diff?r1=1.54&r2=1.55 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-plugins-base/sys/v4l/gstv4lsrc.c.diff?r1=1.99&r2=1.100 ====Begin Diffs==== Index: ChangeLog =================================================================== RCS file: /cvs/gstreamer/gst-plugins-base/ChangeLog,v retrieving revision 1.2320 retrieving revision 1.2321 diff -u -d -r1.2320 -r1.2321 --- ChangeLog 30 Jan 2006 23:42:53 -0000 1.2320 +++ ChangeLog 31 Jan 2006 15:36:12 -0000 1.2321 @@ -1,12 +1,26 @@ +2006-01-31 Andy Wingo <wi...@po...> + + * sys/v4l/gstv4lsrc.c (gst_v4lsrc_set_caps): Don't segfault if the + caps being set doesn't have a framerate value. Basically a stopgap + measure. + * ext/ogg/gstoggmux.c (GST_BUFFER_END_TIME): New macro. Not + technically correct enough to put into core though. + (gst_ogg_mux_dequeue_page): Use END_TIME instead of TIMESTAMP + + DURATION. Fixes theoraenc ! oggmux. + * sys/v4l/gstv4lsrc.c (gst_v4lsrc_fixate): Fixate to the nearest + fraction, not double. 2006-01-31 Sebastien Moutte <seb...@mo...> * win32/vs7: - add vs7 project files created by Sergey Scobich + add vs7 project files created by Sergey Scobich 2006-01-30 Sebastien Moutte <seb...@mo...> * win32/vs8: - add vs8 project files created by Sergey Scobich + add vs8 project files created by Sergey Scobich 2006-01-30 Andy Wingo <wi...@po...> Index: gstcolorbalance.sgml RCS file: /cvs/gstreamer/gst-plugins-base/docs/libs/tmpl/gstcolorbalance.sgml,v retrieving revision 1.39 retrieving revision 1.40 diff -u -d -r1.39 -r1.40 --- gstcolorbalance.sgml 14 Jan 2006 20:46:25 -0000 1.39 +++ gstcolorbalance.sgml 31 Jan 2006 15:36:13 -0000 1.40 @@ -23,15 +23,6 @@ </para> -<!-- ##### SIGNAL GstColorBalance::value-changed ##### --> -<para> - -</para> -@gstcolorbalance: the object which received the signal. -@arg1: -@arg2: <!-- ##### STRUCT GstColorBalanceClass ##### --> <para> Index: gstoggmux.c RCS file: /cvs/gstreamer/gst-plugins-base/ext/ogg/gstoggmux.c,v retrieving revision 1.54 retrieving revision 1.55 diff -u -d -r1.54 -r1.55 --- gstoggmux.c 30 Jan 2006 19:22:22 -0000 1.54 +++ gstoggmux.c 31 Jan 2006 15:36:13 -0000 1.55 @@ -39,6 +39,14 @@ #define GST_IS_OGG_MUX(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_OGG_MUX)) #define GST_IS_OGG_MUX_CLASS(obj) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_OGG_MUX)) +/* This isn't generally what you'd want with an end-time macro, because + technically the end time of a buffer with invalid duration is invalid. But + for sorting ogg pages this is what we want. */ +#define GST_BUFFER_END_TIME(buf) \ + (GST_BUFFER_DURATION_IS_VALID (buf) \ + ? GST_BUFFER_TIMESTAMP (buf) + GST_BUFFER_DURATION (buf) \ + : GST_BUFFER_TIMESTAMP (buf)) #define GST_GP_FORMAT "[gp %8" G_GINT64_FORMAT "]" typedef struct _GstOggMux GstOggMux; @@ -571,12 +579,12 @@ if (buf) { /* if no oldest buffer yet, take this one */ if (oldest == GST_CLOCK_TIME_NONE) { - oldest = GST_BUFFER_TIMESTAMP (buf) + GST_BUFFER_DURATION (buf); + oldest = GST_BUFFER_END_TIME (buf); opad = pad; } else { /* if we have an oldest, compare with this one */ - if (GST_BUFFER_TIMESTAMP (buf) + GST_BUFFER_DURATION (buf) < oldest) { - oldest = GST_BUFFER_TIMESTAMP (buf) + GST_BUFFER_DURATION (buf); + if (GST_BUFFER_END_TIME (buf) < oldest) { + oldest = GST_BUFFER_END_TIME (buf); opad = pad; } } @@ -589,8 +597,7 @@ buf = g_queue_pop_head (opad->pagebuffers); GST_LOG_OBJECT (opad, GST_GP_FORMAT " pushing oldest page (end time %" GST_TIME_FORMAT ")", - GST_BUFFER_OFFSET_END (buf), - GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf) + GST_BUFFER_DURATION (buf))); + GST_BUFFER_OFFSET_END (buf), GST_TIME_ARGS (GST_BUFFER_END_TIME (buf))); *flowret = gst_ogg_mux_push_buffer (mux, buf); ret = TRUE; } Index: gstv4lsrc.c RCS file: /cvs/gstreamer/gst-plugins-base/sys/v4l/gstv4lsrc.c,v retrieving revision 1.99 retrieving revision 1.100 diff -u -d -r1.99 -r1.100 --- gstv4lsrc.c 23 Nov 2005 10:40:42 -0000 1.99 +++ gstv4lsrc.c 31 Jan 2006 15:36:13 -0000 1.100 @@ -236,7 +236,7 @@ gst_structure_fixate_field_nearest_int (structure, "width", targetwidth); gst_structure_fixate_field_nearest_int (structure, "height", targetheight); - gst_structure_fixate_field_nearest_double (structure, "framerate", 7.5); + gst_structure_fixate_field_nearest_fraction (structure, "framerate", 15, 2); v = gst_structure_get_value (structure, "format"); if (v && G_VALUE_TYPE (v) != GST_TYPE_FOURCC) { @@ -496,26 +496,28 @@ gst_structure_get_int (structure, "height", &h); new_fps = gst_structure_get_value (structure, "framerate"); - GST_DEBUG_OBJECT (v4lsrc, "linking with %dx%d at %d/%d fps", w, h, - gst_value_get_fraction_numerator (new_fps), - gst_value_get_fraction_denominator (new_fps)); /* set framerate if it's not already correct */ if (!gst_v4lsrc_get_fps (v4lsrc, &cur_fps_n, &cur_fps_d)) return FALSE; - if (gst_value_get_fraction_numerator (new_fps) != cur_fps_n || - gst_value_get_fraction_denominator (new_fps) != cur_fps_d) { - int fps_index = (gst_value_get_fraction_numerator (new_fps) * 16) / - (gst_value_get_fraction_denominator (new_fps) * 15); + if (new_fps) { + GST_DEBUG_OBJECT (v4lsrc, "linking with %dx%d at %d/%d fps", w, h, + gst_value_get_fraction_numerator (new_fps), + gst_value_get_fraction_denominator (new_fps)); - GST_DEBUG_OBJECT (v4lsrc, "Trying to set fps index %d", fps_index); - /* set bits 16 to 21 to 0 */ - vwin->flags &= (0x3F00 - 1); - /* set bits 16 to 21 to the index */ - vwin->flags |= fps_index << 16; - if (!gst_v4l_set_window_properties (GST_V4LELEMENT (v4lsrc))) { - return FALSE; + if (gst_value_get_fraction_numerator (new_fps) != cur_fps_n || + gst_value_get_fraction_denominator (new_fps) != cur_fps_d) { + int fps_index = (gst_value_get_fraction_numerator (new_fps) * 16) / + (gst_value_get_fraction_denominator (new_fps) * 15); + GST_DEBUG_OBJECT (v4lsrc, "Trying to set fps index %d", fps_index); + /* set bits 16 to 21 to 0 */ + vwin->flags &= (0x3F00 - 1); + /* set bits 16 to 21 to the index */ + vwin->flags |= fps_index << 16; + if (!gst_v4l_set_window_properties (GST_V4LELEMENT (v4lsrc))) { + return FALSE; + } } |