You can subscribe to this list here.
2000 |
Jan
(16) |
Feb
(60) |
Mar
(22) |
Apr
(14) |
May
(24) |
Jun
(20) |
Jul
(15) |
Aug
(55) |
Sep
(39) |
Oct
(27) |
Nov
(33) |
Dec
(53) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2001 |
Jan
(186) |
Feb
(87) |
Mar
(153) |
Apr
(186) |
May
(316) |
Jun
(376) |
Jul
(84) |
Aug
(135) |
Sep
(251) |
Oct
(327) |
Nov
(78) |
Dec
(1619) |
2002 |
Jan
(828) |
Feb
(500) |
Mar
(314) |
Apr
(310) |
May
(306) |
Jun
(361) |
Jul
(320) |
Aug
(136) |
Sep
(427) |
Oct
(285) |
Nov
(248) |
Dec
(344) |
2003 |
Jan
(469) |
Feb
(215) |
Mar
(148) |
Apr
(310) |
May
(303) |
Jun
(227) |
Jul
(315) |
Aug
(158) |
Sep
(191) |
Oct
(325) |
Nov
(479) |
Dec
(417) |
2004 |
Jan
(529) |
Feb
(445) |
Mar
(550) |
Apr
(380) |
May
(385) |
Jun
(263) |
Jul
(393) |
Aug
(186) |
Sep
(138) |
Oct
(272) |
Nov
(254) |
Dec
(259) |
2005 |
Jan
(310) |
Feb
(234) |
Mar
(171) |
Apr
(316) |
May
(364) |
Jun
(381) |
Jul
(420) |
Aug
(489) |
Sep
(663) |
Oct
(735) |
Nov
(839) |
Dec
(403) |
2006 |
Jan
(340) |
Feb
(445) |
Mar
(433) |
Apr
(451) |
May
(438) |
Jun
(312) |
Jul
(315) |
Aug
(283) |
Sep
(290) |
Oct
(243) |
Nov
(195) |
Dec
(182) |
2007 |
Jan
(278) |
Feb
(256) |
Mar
(318) |
Apr
(250) |
May
(286) |
Jun
(249) |
Jul
(226) |
Aug
(179) |
Sep
(265) |
Oct
(234) |
Nov
(244) |
Dec
(272) |
2008 |
Jan
(414) |
Feb
(379) |
Mar
(206) |
Apr
(308) |
May
(422) |
Jun
(350) |
Jul
(205) |
Aug
(349) |
Sep
(127) |
Oct
(306) |
Nov
(359) |
Dec
(236) |
2009 |
Jan
(326) |
Feb
(453) |
Mar
(684) |
Apr
(702) |
May
(1106) |
Jun
(774) |
Jul
(441) |
Aug
(561) |
Sep
(603) |
Oct
(824) |
Nov
(539) |
Dec
(347) |
2010 |
Jan
(470) |
Feb
(448) |
Mar
(845) |
Apr
(512) |
May
(428) |
Jun
(893) |
Jul
(347) |
Aug
(350) |
Sep
(689) |
Oct
(456) |
Nov
(254) |
Dec
(860) |
2011 |
Jan
(763) |
Feb
(106) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: <en...@ke...> - 2011-02-04 10:31:48
|
Module: gst-plugins-good Branch: master Commit: 18213aa214139de64495962761a4c3e4fad562ed URL: http://cgit.freedesktop.org/gstreamer/gst-plugins-good/commit/?id=18213aa214139de64495962761a4c3e4fad562ed Author: Stefan Kost <en...@us...> Date: Fri Feb 4 12:33:09 2011 +0200 docs: fix parameter name in udpsrc docs It is "buffer-size" and not "buffer". Also trim trailing whitespace. --- gst/udp/gstudpsrc.c | 8 ++++---- 1 files changed, 4 insertions(+), 4 deletions(-) diff --git a/gst/udp/gstudpsrc.c b/gst/udp/gstudpsrc.c index f00c74b..4363044 100644 --- a/gst/udp/gstudpsrc.c +++ b/gst/udp/gstudpsrc.c @@ -41,8 +41,8 @@ * for RTP implementations where the contents of the UDP packets is transfered * out-of-bounds using SDP or other means. * - * The #GstUDPSrc:buffer property is used to change the default kernel buffer - * sizes used for receiving packets. The buffer size may be increased for + * The #GstUDPSrc:buffer-size property is used to change the default kernel + * buffersizes used for receiving packets. The buffer size may be increased for * high-volume connections, or may be decreased to limit the possible backlog of * incoming data. The system places an absolute limit on these values, on Linux, * for example, the default buffer size is typically 50K and can be increased to @@ -50,7 +50,7 @@ * * The #GstUDPSrc:skip-first-bytes property is used to strip off an arbitrary * number of bytes from the start of the raw udp packet and can be used to strip - * off proprietary header, for example. + * off proprietary header, for example. * * The udpsrc is always a live source. It does however not provide a #GstClock, * this is left for upstream elements such as an RTP session manager or demuxer @@ -78,7 +78,7 @@ * because it is blocked by a firewall. * </para> * <para> - * A custom file descriptor can be configured with the + * A custom file descriptor can be configured with the * #GstUDPSrc:sockfd property. The socket will be closed when setting the * element to READY by default. This behaviour can be * overriden with the #GstUDPSrc:closefd property, in which case the application |
From: <mn...@ke...> - 2011-02-04 09:56:37
|
Module: gst-plugins-good Branch: master Commit: 6b86b56abd8a28b9e94cee679e3d86367a9a0ab3 URL: http://cgit.freedesktop.org/gstreamer/gst-plugins-good/commit/?id=6b86b56abd8a28b9e94cee679e3d86367a9a0ab3 Author: Mark Nauwelaerts <mar...@co...> Date: Thu Feb 3 23:42:59 2011 +0100 v4l2: fix interlaced set_format configuration Commit 6c8268dbfd5c88fac28c882ef2e4598a6522e2d6 broke recording from interlaced v4l2 source (e.g. typical tv capture card) since V4L2_FIELD_SEQ_TB (with fields stored separately) does not map to currently defined interlaced format (fields stored interleaved). Besides this mismatch, hardware might quite likely not support or appreciate this field value, since querying supported formats mapped _INTERLACED field formats to interlaced=true caps (so the latter should not be mapped to field value that is not known to be supported). --- sys/v4l2/gstv4l2object.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/sys/v4l2/gstv4l2object.c b/sys/v4l2/gstv4l2object.c index 7e15489..5c9022c 100644 --- a/sys/v4l2/gstv4l2object.c +++ b/sys/v4l2/gstv4l2object.c @@ -2019,7 +2019,7 @@ gst_v4l2_object_set_format (GstV4l2Object * v4l2object, guint32 pixelformat, /* ideally we would differentiate between types of interlaced video * but there is not sufficient information in the caps.. */ - field = V4L2_FIELD_SEQ_TB; + field = V4L2_FIELD_INTERLACED; } else { GST_DEBUG_OBJECT (v4l2object->element, "progressive video"); field = V4L2_FIELD_NONE; |
From: <ds...@ke...> - 2011-02-04 08:24:28
|
Module: gst-plugins-bad Branch: master Commit: 2b4c85414632fd4538ab135414fb227be46f80bd URL: http://cgit.freedesktop.org/gstreamer/gst-plugins-bad/commit/?id=2b4c85414632fd4538ab135414fb227be46f80bd Author: Alexey Fisher <bug...@fi...> Date: Fri Feb 4 09:08:26 2011 +0100 vp8enc: Add description for bitrate units. --- ext/vp8/gstvp8enc.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/ext/vp8/gstvp8enc.c b/ext/vp8/gstvp8enc.c index b705102..17b316a 100644 --- a/ext/vp8/gstvp8enc.c +++ b/ext/vp8/gstvp8enc.c @@ -229,7 +229,7 @@ gst_vp8_enc_class_init (GstVP8EncClass * klass) g_object_class_install_property (gobject_class, PROP_BITRATE, g_param_spec_int ("bitrate", "Bit rate", - "Bit rate", + "Bit rate (in bits/sec)", 0, 1000000000, DEFAULT_BITRATE, (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS))); |
From: <thi...@ke...> - 2011-02-03 22:20:14
|
Module: gst-plugins-bad Branch: master Commit: 186d317a2faca0dc23aa5a1be96609bcd766b3a6 URL: http://cgit.freedesktop.org/gstreamer/gst-plugins-bad/commit/?id=186d317a2faca0dc23aa5a1be96609bcd766b3a6 Author: Thiago Santos <thi...@co...> Date: Thu Feb 3 15:22:51 2011 -0300 imagecapturebin: Fix property setting Set the property on the child and not on itself causing infinite looping --- gst/camerabin2/gstimagecapturebin.c | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-) diff --git a/gst/camerabin2/gstimagecapturebin.c b/gst/camerabin2/gstimagecapturebin.c index 2a5bcdb..b4aba2a 100644 --- a/gst/camerabin2/gstimagecapturebin.c +++ b/gst/camerabin2/gstimagecapturebin.c @@ -117,8 +117,9 @@ gst_image_capture_bin_set_property (GObject * object, guint prop_id, case PROP_LOCATION: g_free (imagebin->location); imagebin->location = g_value_dup_string (value); + GST_DEBUG_OBJECT (imagebin, "setting location to %s", imagebin->location); if (imagebin->sink) { - g_object_set (imagebin, "location", imagebin->location, NULL); + g_object_set (imagebin->sink, "location", imagebin->location, NULL); } break; case PROP_ENCODER: |
From: <thi...@ke...> - 2011-02-03 22:20:14
|
Module: gst-plugins-bad Branch: master Commit: bb0cdda4870d46e525adcfa91abc95e62a85d2f4 URL: http://cgit.freedesktop.org/gstreamer/gst-plugins-bad/commit/?id=bb0cdda4870d46e525adcfa91abc95e62a85d2f4 Author: Thiago Santos <thi...@co...> Date: Tue Feb 1 11:20:25 2011 -0300 tests: camerabin2: Improve preview checking --- tests/check/elements/camerabin2.c | 6 ++++++ 1 files changed, 6 insertions(+), 0 deletions(-) diff --git a/tests/check/elements/camerabin2.c b/tests/check/elements/camerabin2.c index df630d4..53e6ccc 100644 --- a/tests/check/elements/camerabin2.c +++ b/tests/check/elements/camerabin2.c @@ -287,6 +287,7 @@ check_preview_image (void) { fail_unless (preview_buffer != NULL); if (preview_caps) { + fail_unless (GST_BUFFER_CAPS (preview_buffer) != NULL); fail_unless (gst_caps_can_intersect (GST_BUFFER_CAPS (preview_buffer), preview_caps)); } @@ -786,6 +787,11 @@ GST_START_TEST (test_image_capture_previews) g_main_loop_run (main_loop); check_preview_image (); + + if (preview_buffer) + gst_buffer_unref (preview_buffer); + preview_buffer = NULL; + gst_caps_replace (&preview_caps, NULL); } gst_element_set_state (GST_ELEMENT (camera), GST_STATE_NULL); |
From: <thi...@ke...> - 2011-02-03 22:20:14
|
Module: gst-plugins-bad Branch: master Commit: 48b05a3002f48faffdaabfbf3997b2bdda273aaf URL: http://cgit.freedesktop.org/gstreamer/gst-plugins-bad/commit/?id=48b05a3002f48faffdaabfbf3997b2bdda273aaf Author: Thiago Santos <thi...@co...> Date: Tue Feb 1 11:19:53 2011 -0300 wrappercamerabinsrc: Fix preview messages Image previews where being posted in sync with the buffers timestamps, this makes no sense as previews should be posted ASAP. Also adds some debugging messages. --- gst/camerabin2/camerabingeneral.c | 2 ++ gst/camerabin2/gstwrappercamerabinsrc.c | 19 +++++++++++++++---- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/gst/camerabin2/camerabingeneral.c b/gst/camerabin2/camerabingeneral.c index 26edc12..2f5bd05 100644 --- a/gst/camerabin2/camerabingeneral.c +++ b/gst/camerabin2/camerabingeneral.c @@ -375,6 +375,8 @@ gst_camerabin_create_preview_pipeline (GstElement * element, gst_app_sink_set_callbacks ((GstAppSink *) data->appsink, &callbacks, data, NULL); + g_object_set (data->appsink, "sync", FALSE, NULL); + data->element = element; data->filter = filter; diff --git a/gst/camerabin2/gstwrappercamerabinsrc.c b/gst/camerabin2/gstwrappercamerabinsrc.c index 0f2e609..bfe8c47 100644 --- a/gst/camerabin2/gstwrappercamerabinsrc.c +++ b/gst/camerabin2/gstwrappercamerabinsrc.c @@ -115,9 +115,13 @@ gst_wrapper_camera_bin_src_set_property (GObject * object, case PROP_PREVIEW_CAPS: gst_caps_replace (&self->preview_caps, (GstCaps *) gst_value_get_caps (value)); - if (self->preview_pipeline) + if (self->preview_pipeline) { + GST_DEBUG_OBJECT (self, + "Setting preview pipeline caps %" GST_PTR_FORMAT, + self->preview_caps); gst_camerabin_preview_set_caps (self->preview_pipeline, (GstCaps *) gst_value_get_caps (value)); + } break; case PROP_PREVIEW_FILTER: if (self->preview_filter) @@ -236,8 +240,10 @@ gst_wrapper_camera_bin_src_imgsrc_probe (GstPad * pad, GstBuffer * buffer, /* post preview */ /* TODO This can likely be optimized if the viewfinder caps is the same as * the preview caps, avoiding another scaling of the same buffer. */ - if (self->post_previews) + if (self->post_previews) { + GST_DEBUG_OBJECT (self, "Posting preview for image"); gst_camerabin_preview_pipeline_post (self->preview_pipeline, buffer); + } if (self->image_capture_count == 0) { gst_base_camera_src_finish_capture (camerasrc); @@ -285,8 +291,10 @@ gst_wrapper_camera_bin_src_vidsrc_probe (GstPad * pad, GstBuffer * buffer, self->video_rec_status = GST_VIDEO_RECORDING_STATUS_RUNNING; /* post preview */ - if (self->post_previews) + if (self->post_previews) { + GST_DEBUG_OBJECT (self, "Posting preview for video"); gst_camerabin_preview_pipeline_post (self->preview_pipeline, buffer); + } ret = TRUE; } else if (self->video_rec_status == GST_VIDEO_RECORDING_STATUS_FINISHING) { @@ -504,8 +512,11 @@ gst_wrapper_camera_bin_src_construct_pipeline (GstBaseCameraSrc * bcamsrc) g_assert (self->preview_pipeline != NULL); self->preview_filter_changed = FALSE; - if (self->preview_caps) + if (self->preview_caps) { + GST_DEBUG_OBJECT (self, "Setting preview pipeline caps %" GST_PTR_FORMAT, + self->preview_caps); gst_camerabin_preview_set_caps (self->preview_pipeline, self->preview_caps); + } ret = TRUE; self->elements_created = TRUE; |
From: <thi...@ke...> - 2011-02-03 22:20:08
|
Module: gst-plugins-bad Branch: master Commit: 675632b38237549dc68effd1caeaa836aa4e933c URL: http://cgit.freedesktop.org/gstreamer/gst-plugins-bad/commit/?id=675632b38237549dc68effd1caeaa836aa4e933c Author: Thiago Santos <thi...@co...> Date: Wed Jan 26 15:27:19 2011 -0300 camerabin2: Add custom filter properties Adds custom filter properties for camerabin2. Custom filters can be added to video/image/preview branches. --- gst/camerabin2/gstcamerabin2.c | 123 +++++++++++++++++++++++++++++++++++++++- gst/camerabin2/gstcamerabin2.h | 7 ++ 2 files changed, 129 insertions(+), 1 deletions(-) diff --git a/gst/camerabin2/gstcamerabin2.c b/gst/camerabin2/gstcamerabin2.c index 456a7ea..85a5696 100644 --- a/gst/camerabin2/gstcamerabin2.c +++ b/gst/camerabin2/gstcamerabin2.c @@ -40,7 +40,10 @@ * have room to set the destination filename). * There is no problem to leave it on playing after an EOS, so * no action is taken on stop-capture. + * * - TODO: What happens when an error pops? + * - TODO: Should we split properties in image/video variants? We already do so + * for some of them * * */ @@ -69,7 +72,10 @@ enum PROP_VIDEO_CAPTURE_CAPS, PROP_POST_PREVIEWS, PROP_PREVIEW_CAPS, - PROP_VIDEO_ENCODING_PROFILE + PROP_VIDEO_ENCODING_PROFILE, + PROP_IMAGE_FILTER, + PROP_VIDEO_FILTER, + PROP_VIEWFINDER_FILTER }; enum @@ -278,6 +284,20 @@ gst_camera_bin_dispose (GObject * object) if (camerabin->imagebin_capsfilter) gst_object_unref (camerabin->imagebin_capsfilter); + if (camerabin->video_filter) + gst_object_unref (camerabin->video_filter); + if (camerabin->image_filter) + gst_object_unref (camerabin->image_filter); + if (camerabin->viewfinder_filter) + gst_object_unref (camerabin->viewfinder_filter); + + if (camerabin->user_video_filter) + gst_object_unref (camerabin->user_video_filter); + if (camerabin->user_image_filter) + gst_object_unref (camerabin->user_image_filter); + if (camerabin->user_viewfinder_filter) + gst_object_unref (camerabin->user_viewfinder_filter); + if (camerabin->video_profile) gst_encoding_profile_unref (camerabin->video_profile); @@ -394,6 +414,25 @@ gst_camera_bin_class_init (GstCameraBinClass * klass) GST_TYPE_ENCODING_PROFILE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (object_class, PROP_IMAGE_FILTER, + g_param_spec_object ("image-filter", "Image filter", + "The element that will process captured image frames. (Should be" + " set on NULL state)", + GST_TYPE_ELEMENT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + + g_object_class_install_property (object_class, PROP_VIDEO_FILTER, + g_param_spec_object ("video-filter", "Video filter", + "The element that will process captured video frames. (Should be" + " set on NULL state)", + GST_TYPE_ELEMENT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + + g_object_class_install_property (object_class, PROP_VIEWFINDER_FILTER, + g_param_spec_object ("viewfinder-filter", "Viewfinder filter", + "The element that will process frames going to the viewfinder." + " (Should be set on NULL state)", + GST_TYPE_ELEMENT, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + + /** * GstCameraBin::capture-start: * @camera: the camera bin element @@ -479,6 +518,48 @@ gst_camera_bin_handle_message (GstBin * bin, GstMessage * message) GST_BIN_CLASS (parent_class)->handle_message (bin, message); } +/* + * Transforms: + * ... ! previous_element [ ! current_filter ] ! next_element ! ... + * + * into: + * ... ! previous_element [ ! new_filter ] ! next_element ! ... + * + * Where current_filter and new_filter might or might not be NULL + */ +static void +gst_camera_bin_check_and_replace_filter (GstCameraBin * camera, + GstElement ** current_filter, GstElement * new_filter, + GstElement * previous_element, GstElement * next_element) +{ + if (*current_filter == new_filter) { + GST_DEBUG_OBJECT (camera, "Current filter is the same as the previous, " + "no switch needed."); + return; + } + + GST_DEBUG_OBJECT (camera, "Replacing current filter (%s) with new filter " + "(%s)", *current_filter ? GST_ELEMENT_NAME (*current_filter) : "null", + new_filter ? GST_ELEMENT_NAME (new_filter) : "null"); + + if (*current_filter) { + gst_bin_remove (GST_BIN_CAST (camera), *current_filter); + gst_object_unref (*current_filter); + *current_filter = NULL; + } else { + /* unlink the pads */ + gst_element_unlink (previous_element, next_element); + } + + if (new_filter) { + *current_filter = gst_object_ref (new_filter); + gst_bin_add (GST_BIN_CAST (camera), gst_object_ref (new_filter)); + gst_element_link_many (previous_element, new_filter, next_element, NULL); + } else { + gst_element_link (previous_element, next_element); + } +} + /** * gst_camera_bin_create_elements: * @param camera: the #GstCameraBin @@ -612,6 +693,16 @@ gst_camera_bin_create_elements (GstCameraBin * camera) "sink"); } + gst_camera_bin_check_and_replace_filter (camera, &camera->image_filter, + camera->user_image_filter, camera->imagebin_queue, + camera->imagebin_capsfilter); + gst_camera_bin_check_and_replace_filter (camera, &camera->video_filter, + camera->user_video_filter, camera->videobin_queue, + camera->videobin_capsfilter); + gst_camera_bin_check_and_replace_filter (camera, &camera->viewfinder_filter, + camera->user_viewfinder_filter, camera->viewfinderbin_queue, + camera->viewfinderbin_capsfilter); + camera->elements_created = TRUE; return TRUE; } @@ -763,6 +854,24 @@ gst_camera_bin_set_property (GObject * object, guint prop_id, camera->video_profile = (GstEncodingProfile *) gst_value_dup_mini_object (value); break; + case PROP_IMAGE_FILTER: + if (camera->user_image_filter) + g_object_unref (camera->user_image_filter); + + camera->user_image_filter = g_value_dup_object (value); + break; + case PROP_VIDEO_FILTER: + if (camera->user_video_filter) + g_object_unref (camera->user_video_filter); + + camera->user_video_filter = g_value_dup_object (value); + break; + case PROP_VIEWFINDER_FILTER: + if (camera->user_viewfinder_filter) + g_object_unref (camera->user_viewfinder_filter); + + camera->user_viewfinder_filter = g_value_dup_object (value); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -851,6 +960,18 @@ gst_camera_bin_get_property (GObject * object, guint prop_id, (GstMiniObject *) camera->video_profile); } break; + case PROP_VIDEO_FILTER: + if (camera->video_filter) + g_value_set_object (value, camera->video_filter); + break; + case PROP_IMAGE_FILTER: + if (camera->image_filter) + g_value_set_object (value, camera->image_filter); + break; + case PROP_VIEWFINDER_FILTER: + if (camera->viewfinder_filter) + g_value_set_object (value, camera->viewfinder_filter); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; diff --git a/gst/camerabin2/gstcamerabin2.h b/gst/camerabin2/gstcamerabin2.h index 8534674..f24417f 100644 --- a/gst/camerabin2/gstcamerabin2.h +++ b/gst/camerabin2/gstcamerabin2.h @@ -55,6 +55,13 @@ struct _GstCameraBin GstElement *imagebin_queue; GstElement *imagebin_capsfilter; + GstElement *video_filter; + GstElement *image_filter; + GstElement *viewfinder_filter; + GstElement *user_video_filter; + GstElement *user_image_filter; + GstElement *user_viewfinder_filter; + /* Index of the auto incrementing file index for video recordings */ gint video_index; |
From: <thi...@ke...> - 2011-02-03 22:20:08
|
Module: gst-plugins-bad Branch: master Commit: b2a45f6f21f44ca0d0c127c6a7f1fe25a206dea0 URL: http://cgit.freedesktop.org/gstreamer/gst-plugins-bad/commit/?id=b2a45f6f21f44ca0d0c127c6a7f1fe25a206dea0 Author: Thiago Santos <thi...@co...> Date: Thu Jan 27 10:19:42 2011 -0300 tests: camerabin2: Add tests for custom filters Adds tests to check that custom filters elements receive buffers --- tests/check/elements/camerabin2.c | 127 +++++++++++++++++++++++++++++++++++++ 1 files changed, 127 insertions(+), 0 deletions(-) diff --git a/tests/check/elements/camerabin2.c b/tests/check/elements/camerabin2.c index 23c9379..1b0ddf4 100644 --- a/tests/check/elements/camerabin2.c +++ b/tests/check/elements/camerabin2.c @@ -505,6 +505,16 @@ check_file_validity (const gchar * filename, gint num, GstTagList * taglist, return TRUE; } +static gboolean +filter_buffer_count (GstPad * pad, GstMiniObject * obj, gpointer data) +{ + gint *counter = data; + + (*counter)++; + + return TRUE; +} + GST_START_TEST (test_single_image_capture) { if (!camera) @@ -974,6 +984,120 @@ GST_START_TEST (test_supported_caps) GST_END_TEST; +GST_START_TEST (test_image_custom_filter) +{ + GstElement *vf_filter; + GstElement *image_filter; + GstPad *pad; + gint vf_probe_counter = 0; + gint image_probe_counter = 0; + + if (!camera) + return; + + vf_filter = gst_element_factory_make ("identity", "vf-filter"); + image_filter = gst_element_factory_make ("identity", "img-filter"); + + pad = gst_element_get_static_pad (vf_filter, "src"); + gst_pad_add_buffer_probe (pad, (GCallback) filter_buffer_count, + &vf_probe_counter); + gst_object_unref (pad); + + pad = gst_element_get_static_pad (image_filter, "src"); + gst_pad_add_buffer_probe (pad, (GCallback) filter_buffer_count, + &image_probe_counter); + gst_object_unref (pad); + + /* set still image mode and filters */ + g_object_set (camera, "mode", 1, + "location", make_test_file_name (IMAGE_FILENAME, -1), + "viewfinder-filter", vf_filter, "image-filter", image_filter, NULL); + + if (gst_element_set_state (GST_ELEMENT (camera), GST_STATE_PLAYING) == + GST_STATE_CHANGE_FAILURE) { + GST_WARNING ("setting camerabin to PLAYING failed"); + gst_element_set_state (GST_ELEMENT (camera), GST_STATE_NULL); + gst_object_unref (camera); + camera = NULL; + } + GST_INFO ("starting capture"); + fail_unless (camera != NULL); + g_signal_emit_by_name (camera, "start-capture", NULL); + + g_timeout_add_seconds (3, (GSourceFunc) g_main_loop_quit, main_loop); + g_main_loop_run (main_loop); + + /* check that we got a preview image */ + check_preview_image (); + + gst_element_set_state (GST_ELEMENT (camera), GST_STATE_NULL); + check_file_validity (IMAGE_FILENAME, 0, NULL, 0, 0); + + fail_unless (vf_probe_counter > 0); + fail_unless (image_probe_counter == 1); +} + +GST_END_TEST; + + +GST_START_TEST (test_video_custom_filter) +{ + GstElement *vf_filter; + GstElement *video_filter; + GstPad *pad; + gint vf_probe_counter = 0; + gint video_probe_counter = 0; + + if (!camera) + return; + + vf_filter = gst_element_factory_make ("identity", "vf-filter"); + video_filter = gst_element_factory_make ("identity", "video-filter"); + + pad = gst_element_get_static_pad (vf_filter, "src"); + gst_pad_add_buffer_probe (pad, (GCallback) filter_buffer_count, + &vf_probe_counter); + gst_object_unref (pad); + + pad = gst_element_get_static_pad (video_filter, "src"); + gst_pad_add_buffer_probe (pad, (GCallback) filter_buffer_count, + &video_probe_counter); + gst_object_unref (pad); + + /* set still image mode and filters */ + g_object_set (camera, "mode", 2, + "location", make_test_file_name (VIDEO_FILENAME, -1), + "viewfinder-filter", vf_filter, "video-filter", video_filter, NULL); + + if (gst_element_set_state (GST_ELEMENT (camera), GST_STATE_PLAYING) == + GST_STATE_CHANGE_FAILURE) { + GST_WARNING ("setting camerabin to PLAYING failed"); + gst_element_set_state (GST_ELEMENT (camera), GST_STATE_NULL); + gst_object_unref (camera); + camera = NULL; + } + GST_INFO ("starting capture"); + fail_unless (camera != NULL); + g_signal_emit_by_name (camera, "start-capture", NULL); + + g_timeout_add_seconds (VIDEO_DURATION, (GSourceFunc) g_main_loop_quit, + main_loop); + g_main_loop_run (main_loop); + g_signal_emit_by_name (camera, "stop-capture", NULL); + + /* check that we got a preview image */ + check_preview_image (); + + gst_element_set_state (GST_ELEMENT (camera), GST_STATE_NULL); + check_file_validity (VIDEO_FILENAME, 0, NULL, 0, 0); + + fail_unless (vf_probe_counter > 0); + fail_unless (video_probe_counter > 0); +} + +GST_END_TEST; + + typedef struct _TestCaseDef { const gchar *name; @@ -1026,6 +1150,9 @@ camerabin_suite (void) tcase_add_test (tc_basic, test_image_capture_with_tags); tcase_add_test (tc_basic, test_video_capture_with_tags); + + tcase_add_test (tc_basic, test_image_custom_filter); + tcase_add_test (tc_basic, test_video_custom_filter); } end: |
From: <thi...@ke...> - 2011-02-03 22:20:08
|
Module: gst-plugins-bad Branch: master Commit: 869a61343c415cee12fef7dd43d4c1a0114acf4c URL: http://cgit.freedesktop.org/gstreamer/gst-plugins-bad/commit/?id=869a61343c415cee12fef7dd43d4c1a0114acf4c Author: Thiago Santos <thi...@co...> Date: Thu Jan 27 14:39:19 2011 -0300 camerabin2: Add preview-filter property Adds a property to select a custom element for preview pipeline buffers processing --- gst/camerabin2/camerabingeneral.c | 19 ++- gst/camerabin2/camerabingeneral.h | 3 +- gst/camerabin2/gstcamerabin2.c | 31 ++++- gst/camerabin2/gstcamerabin2.h | 1 + gst/camerabin2/gstwrappercamerabinsrc.c | 238 +++++++++++++++++------------- gst/camerabin2/gstwrappercamerabinsrc.h | 2 + 6 files changed, 184 insertions(+), 110 deletions(-) Diff: http://cgit.freedesktop.org/gstreamer/gst-plugins-bad/diff/?id=869a61343c415cee12fef7dd43d4c1a0114acf4c |
From: <thi...@ke...> - 2011-02-03 22:20:08
|
Module: gst-plugins-bad Branch: master Commit: 4a7dc8178207b00ee43f7071fa43ff1581a6199d URL: http://cgit.freedesktop.org/gstreamer/gst-plugins-bad/commit/?id=4a7dc8178207b00ee43f7071fa43ff1581a6199d Author: Thiago Santos <thi...@co...> Date: Thu Jan 27 15:35:14 2011 -0300 tests: camerabin2: preview filter tests Adds tests to the preview-filter property of camerabin2 --- tests/check/elements/camerabin2.c | 32 ++++++++++++++++++++++++++++++-- 1 files changed, 30 insertions(+), 2 deletions(-) diff --git a/tests/check/elements/camerabin2.c b/tests/check/elements/camerabin2.c index 1b0ddf4..df630d4 100644 --- a/tests/check/elements/camerabin2.c +++ b/tests/check/elements/camerabin2.c @@ -988,15 +988,18 @@ GST_START_TEST (test_image_custom_filter) { GstElement *vf_filter; GstElement *image_filter; + GstElement *preview_filter; GstPad *pad; gint vf_probe_counter = 0; gint image_probe_counter = 0; + gint preview_probe_counter = 0; if (!camera) return; vf_filter = gst_element_factory_make ("identity", "vf-filter"); image_filter = gst_element_factory_make ("identity", "img-filter"); + preview_filter = gst_element_factory_make ("identity", "preview-filter"); pad = gst_element_get_static_pad (vf_filter, "src"); gst_pad_add_buffer_probe (pad, (GCallback) filter_buffer_count, @@ -1008,10 +1011,20 @@ GST_START_TEST (test_image_custom_filter) &image_probe_counter); gst_object_unref (pad); + pad = gst_element_get_static_pad (preview_filter, "src"); + gst_pad_add_buffer_probe (pad, (GCallback) filter_buffer_count, + &preview_probe_counter); + gst_object_unref (pad); + /* set still image mode and filters */ g_object_set (camera, "mode", 1, "location", make_test_file_name (IMAGE_FILENAME, -1), - "viewfinder-filter", vf_filter, "image-filter", image_filter, NULL); + "viewfinder-filter", vf_filter, "image-filter", image_filter, + "preview-filter", preview_filter, NULL); + + gst_object_unref (vf_filter); + gst_object_unref (preview_filter); + gst_object_unref (image_filter); if (gst_element_set_state (GST_ELEMENT (camera), GST_STATE_PLAYING) == GST_STATE_CHANGE_FAILURE) { @@ -1035,6 +1048,7 @@ GST_START_TEST (test_image_custom_filter) fail_unless (vf_probe_counter > 0); fail_unless (image_probe_counter == 1); + fail_unless (preview_probe_counter == 1); } GST_END_TEST; @@ -1044,15 +1058,18 @@ GST_START_TEST (test_video_custom_filter) { GstElement *vf_filter; GstElement *video_filter; + GstElement *preview_filter; GstPad *pad; gint vf_probe_counter = 0; gint video_probe_counter = 0; + gint preview_probe_counter = 0; if (!camera) return; vf_filter = gst_element_factory_make ("identity", "vf-filter"); video_filter = gst_element_factory_make ("identity", "video-filter"); + preview_filter = gst_element_factory_make ("identity", "preview-filter"); pad = gst_element_get_static_pad (vf_filter, "src"); gst_pad_add_buffer_probe (pad, (GCallback) filter_buffer_count, @@ -1064,10 +1081,20 @@ GST_START_TEST (test_video_custom_filter) &video_probe_counter); gst_object_unref (pad); + pad = gst_element_get_static_pad (preview_filter, "src"); + gst_pad_add_buffer_probe (pad, (GCallback) filter_buffer_count, + &preview_probe_counter); + gst_object_unref (pad); + /* set still image mode and filters */ g_object_set (camera, "mode", 2, "location", make_test_file_name (VIDEO_FILENAME, -1), - "viewfinder-filter", vf_filter, "video-filter", video_filter, NULL); + "viewfinder-filter", vf_filter, "video-filter", video_filter, + "preview-filter", preview_filter, NULL); + + gst_object_unref (vf_filter); + gst_object_unref (preview_filter); + gst_object_unref (video_filter); if (gst_element_set_state (GST_ELEMENT (camera), GST_STATE_PLAYING) == GST_STATE_CHANGE_FAILURE) { @@ -1093,6 +1120,7 @@ GST_START_TEST (test_video_custom_filter) fail_unless (vf_probe_counter > 0); fail_unless (video_probe_counter > 0); + fail_unless (preview_probe_counter == 1); } GST_END_TEST; |
From: <thi...@ke...> - 2011-02-03 22:20:08
|
Module: gst-plugins-bad Branch: master Commit: 1a62d9374b228dc5bd3fb8c7da2212ceb5506430 URL: http://cgit.freedesktop.org/gstreamer/gst-plugins-bad/commit/?id=1a62d9374b228dc5bd3fb8c7da2212ceb5506430 Author: Thiago Santos <thi...@co...> Date: Tue Feb 1 11:19:29 2011 -0300 wrappercamerabinsrc: Handle src state change to avoid losing timestamps Camerabin2 uses state changes to force the source to renegotiate its caps to the capture formats. The state changes makes the source lose its clock and base_time, causing it to stop timestamping the buffers. We still need a proper way to make sources renegotiate its caps, so this patch is a hack to make the source continue timestamping buffers even after changing state. The patch works by getting the clock and base time before doing the state change to NULL and setting them back after putting it to PLAYING again. It also cares to drop the first new segment after this state change. --- gst/camerabin2/gstwrappercamerabinsrc.c | 67 ++++++++++++++++++++++++++++++- gst/camerabin2/gstwrappercamerabinsrc.h | 3 + 2 files changed, 69 insertions(+), 1 deletions(-) diff --git a/gst/camerabin2/gstwrappercamerabinsrc.c b/gst/camerabin2/gstwrappercamerabinsrc.c index c35fe8d..0f2e609 100644 --- a/gst/camerabin2/gstwrappercamerabinsrc.c +++ b/gst/camerabin2/gstwrappercamerabinsrc.c @@ -165,12 +165,50 @@ static void gst_wrapper_camera_bin_reset_video_src_caps (GstWrapperCameraBinSrc * self, GstCaps * caps) { + GstClock *clock; + gint64 base_time; + GST_DEBUG_OBJECT (self, "Resetting src caps to %" GST_PTR_FORMAT, caps); if (self->src_vid_src) { + clock = gst_element_get_clock (self->src_vid_src); + base_time = gst_element_get_base_time (self->src_vid_src); + gst_element_set_state (self->src_vid_src, GST_STATE_NULL); set_capsfilter_caps (self, caps); + + self->drop_newseg = TRUE; + GST_DEBUG_OBJECT (self, "Bringing source up"); gst_element_sync_state_with_parent (self->src_vid_src); + + gst_element_set_clock (self->src_vid_src, clock); + gst_element_set_base_time (self->src_vid_src, base_time); + + if (GST_IS_BIN (self->src_vid_src)) { + GstIterator *it = gst_bin_iterate_elements (GST_BIN (self->src_vid_src)); + gpointer item = NULL; + gboolean done = FALSE; + while (!done) { + switch (gst_iterator_next (it, &item)) { + case GST_ITERATOR_OK: + gst_element_set_base_time (GST_ELEMENT (item), base_time); + gst_object_unref (item); + break; + case GST_ITERATOR_RESYNC: + gst_iterator_resync (it); + break; + case GST_ITERATOR_ERROR: + done = TRUE; + break; + case GST_ITERATOR_DONE: + done = TRUE; + break; + } + } + gst_iterator_free (it); + } + + gst_object_unref (clock); } } @@ -286,6 +324,30 @@ gst_wrapper_camera_bin_src_event (GstPad * pad, GstEvent * event) return src->srcpad_event_func (pad, event); } +static gboolean +gst_wrapper_camera_src_src_event_probe (GstPad * pad, GstEvent * evt, + gpointer udata) +{ + gboolean ret = TRUE; + GstWrapperCameraBinSrc *self = udata; + + switch (GST_EVENT_TYPE (evt)) { + case GST_EVENT_EOS: + /* drop */ + ret = FALSE; + break; + case GST_EVENT_NEWSEGMENT: + if (self->drop_newseg) { + ret = FALSE; + self->drop_newseg = FALSE; + } + break; + default: + break; + } + return ret; +} + /** * gst_wrapper_camera_bin_src_construct_pipeline: * @bcamsrc: camerasrc object @@ -334,7 +396,7 @@ gst_wrapper_camera_bin_src_construct_pipeline (GstBaseCameraSrc * bcamsrc) pad = gst_element_get_static_pad (self->src_vid_src, "src"); self->src_event_probe_id = gst_pad_add_event_probe (pad, - (GCallback) gst_camerabin_drop_eos_probe, NULL); + (GCallback) gst_wrapper_camera_src_src_event_probe, self); gst_object_unref (pad); } @@ -991,6 +1053,9 @@ gst_wrapper_camera_bin_src_change_state (GstElement * element, goto end; switch (trans) { + case GST_STATE_CHANGE_PAUSED_TO_READY: + self->drop_newseg = FALSE; + break; case GST_STATE_CHANGE_READY_TO_NULL: gst_element_set_state (self->preview_pipeline->pipeline, GST_STATE_NULL); break; diff --git a/gst/camerabin2/gstwrappercamerabinsrc.h b/gst/camerabin2/gstwrappercamerabinsrc.h index b2f4c7a..d937321 100644 --- a/gst/camerabin2/gstwrappercamerabinsrc.h +++ b/gst/camerabin2/gstwrappercamerabinsrc.h @@ -88,6 +88,9 @@ struct _GstWrapperCameraBinSrc GstPadEventFunction srcpad_event_func; + /* For changing caps without losing timestamps */ + gboolean drop_newseg; + /* Application configurable elements */ GstElement *app_vid_src; |
From: <tp...@ke...> - 2011-02-03 18:28:05
|
Module: gst-plugins-ugly Branch: master Commit: 7551d102f8b87446729a55c3909ebbc15296c26e URL: http://cgit.freedesktop.org/gstreamer/gst-plugins-ugly/commit/?id=7551d102f8b87446729a55c3909ebbc15296c26e Author: Tim-Philipp Müller <tim...@co...> Date: Thu Feb 3 18:25:00 2011 +0000 tests: add unit test for lamemp3enc negotiation issue https://bugzilla.gnome.org/show_bug.cgi?id=641151 --- tests/check/pipelines/lame.c | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 42 insertions(+), 0 deletions(-) diff --git a/tests/check/pipelines/lame.c b/tests/check/pipelines/lame.c index ea7b52a..943219b 100644 --- a/tests/check/pipelines/lame.c +++ b/tests/check/pipelines/lame.c @@ -65,6 +65,47 @@ GST_START_TEST (test_format) GST_END_TEST; +GST_START_TEST (test_caps_proxy) +{ + GstElement *bin; + GstPad *pad; + gchar *pipe_str; + GstBuffer *buffer; + GError *error = NULL; + + pipe_str = g_strdup_printf ("audiotestsrc num-buffers=1 " + "! audio/x-raw-int,rate=48000,channels=1 " + "! audioresample " + "! lamemp3enc ! audio/mpeg,rate=(int){22050,44100} ! fakesink"); + + bin = gst_parse_launch (pipe_str, &error); + fail_unless (bin != NULL, "Error parsing pipeline: %s", + error ? error->message : "(invalid error)"); + g_free (pipe_str); + + /* get the pad */ + { + GstElement *sink = gst_bin_get_by_name (GST_BIN (bin), "fakesink0"); + + fail_unless (sink != NULL, "Could not get fakesink out of bin"); + pad = gst_element_get_static_pad (sink, "sink"); + fail_unless (pad != NULL, "Could not get pad out of fakesink"); + gst_object_unref (sink); + } + + gst_buffer_straw_start_pipeline (bin, pad); + + buffer = gst_buffer_straw_get_buffer (bin, pad); + + gst_buffer_straw_stop_pipeline (bin, pad); + + gst_buffer_unref (buffer); + gst_object_unref (pad); + gst_object_unref (bin); +} + +GST_END_TEST; + #endif /* #ifndef GST_DISABLE_PARSE */ Suite * @@ -77,6 +118,7 @@ lame_suite (void) #ifndef GST_DISABLE_PARSE tcase_add_test (tc_chain, test_format); + tcase_add_test (tc_chain, test_caps_proxy); #endif return s; |
From: <tp...@ke...> - 2011-02-03 18:28:04
|
Module: gst-plugins-ugly Branch: master Commit: 7417ad6d5feb74696b030a179f390656ecaf7ac7 URL: http://cgit.freedesktop.org/gstreamer/gst-plugins-ugly/commit/?id=7417ad6d5feb74696b030a179f390656ecaf7ac7 Author: Tim-Philipp Müller <tim...@co...> Date: Thu Feb 3 18:18:35 2011 +0000 lamemp3enc: implement sinkpad get_caps() function to proxy rate and channels restrictions from downstream The element downstream of mp3enc might only accept certain sample rates or channels, make sure we relay any restrictions that do exist to upstream when it does a get_caps() on the sink pad. That way upstream elements like audioresample or audioconvert can pick a sample rate / channel configuration that will be accepted, instead of just negotiating to the highest, which might then be rejected. https://bugzilla.gnome.org/show_bug.cgi?id=641151 --- ext/lame/gstlamemp3enc.c | 57 ++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 57 insertions(+), 0 deletions(-) diff --git a/ext/lame/gstlamemp3enc.c b/ext/lame/gstlamemp3enc.c index 7ad7829..21bc956 100644 --- a/ext/lame/gstlamemp3enc.c +++ b/ext/lame/gstlamemp3enc.c @@ -389,6 +389,61 @@ setup_failed: } } +static GstCaps * +gst_lamemp3enc_sink_getcaps (GstPad * pad) +{ + const GstCaps *templ_caps; + GstLameMP3Enc *lame; + GstCaps *allowed = NULL; + GstCaps *caps, *filter_caps; + gint i, j; + + lame = GST_LAMEMP3ENC (gst_pad_get_parent (pad)); + + /* we want to be able to communicate to upstream elements like audioconvert + * and audioresample any rate/channel restrictions downstream (e.g. muxer + * only accepting certain sample rates) */ + templ_caps = gst_pad_get_pad_template_caps (pad); + allowed = gst_pad_get_allowed_caps (lame->srcpad); + if (!allowed || gst_caps_is_empty (allowed) || gst_caps_is_any (allowed)) { + caps = gst_caps_copy (templ_caps); + goto done; + } + + filter_caps = gst_caps_new_empty (); + + for (i = 0; i < gst_caps_get_size (templ_caps); i++) { + GQuark q_name; + + q_name = gst_structure_get_name_id (gst_caps_get_structure (templ_caps, i)); + + /* pick rate + channel fields from allowed caps */ + for (j = 0; j < gst_caps_get_size (allowed); j++) { + const GstStructure *allowed_s = gst_caps_get_structure (allowed, j); + const GValue *val; + GstStructure *s; + + s = gst_structure_id_empty_new (q_name); + if ((val = gst_structure_get_value (allowed_s, "rate"))) + gst_structure_set_value (s, "rate", val); + if ((val = gst_structure_get_value (allowed_s, "channels"))) + gst_structure_set_value (s, "channels", val); + + gst_caps_merge_structure (filter_caps, s); + } + } + + caps = gst_caps_intersect (filter_caps, templ_caps); + gst_caps_unref (filter_caps); + +done: + + gst_caps_replace (&allowed, NULL); + gst_object_unref (lame); + + return caps; +} + static gint64 gst_lamemp3enc_get_latency (GstLameMP3Enc * lame) { @@ -453,6 +508,8 @@ gst_lamemp3enc_init (GstLameMP3Enc * lame) GST_DEBUG_FUNCPTR (gst_lamemp3enc_chain)); gst_pad_set_setcaps_function (lame->sinkpad, GST_DEBUG_FUNCPTR (gst_lamemp3enc_sink_setcaps)); + gst_pad_set_getcaps_function (lame->sinkpad, + GST_DEBUG_FUNCPTR (gst_lamemp3enc_sink_getcaps)); gst_element_add_pad (GST_ELEMENT (lame), lame->sinkpad); lame->srcpad = |
From: <bi...@ke...> - 2011-02-03 17:29:03
|
Module: gst-plugins-bad Branch: master Commit: 4724ecfd0671b1b3e4affda52a86ee5658a35a85 URL: http://cgit.freedesktop.org/gstreamer/gst-plugins-bad/commit/?id=4724ecfd0671b1b3e4affda52a86ee5658a35a85 Author: Edward Hervey <edw...@co...> Date: Thu Feb 3 16:24:24 2011 +0100 camerabin: Initialize variables Makes compilers happy --- gst/camerabin/camerabinpreview.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/gst/camerabin/camerabinpreview.c b/gst/camerabin/camerabinpreview.c index 434a92f..5f46d06 100644 --- a/gst/camerabin/camerabinpreview.c +++ b/gst/camerabin/camerabinpreview.c @@ -73,7 +73,7 @@ GstCameraBinPreviewPipelineData * gst_camerabin_preview_create_pipeline (GstElement * element, GstCaps * caps, GstElement * src_filter) { - GstElement *csp, *vscale; + GstElement *csp = NULL, *vscale = NULL; GError *error = NULL; GstCameraBinPreviewPipelineData *data; |
From: <ur...@ke...> - 2011-02-03 12:23:27
|
Module: www Branch: master Commit: 9581f5bbacc857c99a88c416784c294dd23f79da URL: http://cgit.freedesktop.org/gstreamer/www/commit/?id=9581f5bbacc857c99a88c416784c294dd23f79da Author: Christian Fredrik Kalager Schaller <chr...@co...> Date: Thu Feb 3 12:22:38 2011 +0000 fix open gl entry --- src/htdocs/modules/modules.xml | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/src/htdocs/modules/modules.xml b/src/htdocs/modules/modules.xml index 616022f..0ae5457 100644 --- a/src/htdocs/modules/modules.xml +++ b/src/htdocs/modules/modules.xml @@ -97,7 +97,7 @@ real live maintainer, or some actual wide use. <title>GStreamer OpenGL Plug-ins</title> <blurb>plug-in and helper libraries for OpenGL integration</blurb> <description> - The GStreamer OpenGL modhttp://gstreamer.freedesktop.org/wiki/QtGStreamerule provides helper libraries, base classes + The GStreamer OpenGL module provides helper libraries, base classes and elements for integrating with OpenGL and using it to perform video display and processing. </description> |
From: <ur...@ke...> - 2011-02-03 12:15:01
|
Module: www Branch: master Commit: 6efe0c47ba50b9d716765210305378e32eb03f00 URL: http://cgit.freedesktop.org/gstreamer/www/commit/?id=6efe0c47ba50b9d716765210305378e32eb03f00 Author: Christian Fredrik Kalager Schaller <chr...@co...> Date: Thu Feb 3 12:14:12 2011 +0000 Add link to qtgstreamer wiki page --- src/htdocs/modules/modules.xml | 4 +++- 1 files changed, 3 insertions(+), 1 deletions(-) diff --git a/src/htdocs/modules/modules.xml b/src/htdocs/modules/modules.xml index 38423c6..616022f 100644 --- a/src/htdocs/modules/modules.xml +++ b/src/htdocs/modules/modules.xml @@ -97,7 +97,7 @@ real live maintainer, or some actual wide use. <title>GStreamer OpenGL Plug-ins</title> <blurb>plug-in and helper libraries for OpenGL integration</blurb> <description> - The GStreamer OpenGL module provides helper libraries, base classes + The GStreamer OpenGL modhttp://gstreamer.freedesktop.org/wiki/QtGStreamerule provides helper libraries, base classes and elements for integrating with OpenGL and using it to perform video display and processing. </description> @@ -205,6 +205,8 @@ Library for creating audio/video editors. with a Qt-style API, plus some helper classes and elements for integrating GStreamer better in Qt applications. The goal of this module is to allow easy use of GStreamer for applications targetting MeeGo Mobile or the KDE desktop. + More information can be found on the <a href="http://gstreamer.freedesktop.org/wiki/QtGStreamer">QtGStreamer + wiki page</a> </description> <maintainer>George Kiagiadakis and Mauricio Piacentini</maintainer> <versions> |
From: <ur...@ke...> - 2011-02-03 12:10:14
|
Module: www Branch: master Commit: d12009c4150472c62d61f65663820b78a19e3506 URL: http://cgit.freedesktop.org/gstreamer/www/commit/?id=d12009c4150472c62d61f65663820b78a19e3506 Author: Christian Fredrik Kalager Schaller <chr...@co...> Date: Thu Feb 3 12:09:26 2011 +0000 fix link --- src/htdocs/bindings/bindings.xml | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/htdocs/bindings/bindings.xml b/src/htdocs/bindings/bindings.xml index a4502f5..e410840 100644 --- a/src/htdocs/bindings/bindings.xml +++ b/src/htdocs/bindings/bindings.xml @@ -116,9 +116,9 @@ or would like to help out. <binding> <id>android</id> <name>Android</name> - <status>Under development. See the <a href="&site;/modules/gstreamer-android.html">gstreamer android</a> module.</status> + <status>Under development. See the <a href="&site;/modules/gst-android.html">gstreamer android</a> module.</status> <body> - <p>Under development. See the <a href="&site;/modules/gstreamer-android.html">gstreamer android</a> module</p> + <p>Under development. See the <a href="&site;/modules/gst-android.html">gstreamer android</a> module</p> </body> </binding> |
From: <ur...@ke...> - 2011-02-03 12:07:39
|
Module: www Branch: master Commit: 8d3c450d6c4d5df2f41790401f2c0e8c32b3b762 URL: http://cgit.freedesktop.org/gstreamer/www/commit/?id=8d3c450d6c4d5df2f41790401f2c0e8c32b3b762 Author: Christian Fredrik Kalager Schaller <chr...@co...> Date: Thu Feb 3 12:06:52 2011 +0000 Fix some small errors --- src/htdocs/lists/index.xml | 2 +- src/htdocs/modules/modules.xml | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/htdocs/lists/index.xml b/src/htdocs/lists/index.xml index 6a754a3..846df31 100644 --- a/src/htdocs/lists/index.xml +++ b/src/htdocs/lists/index.xml @@ -4,7 +4,7 @@ <title>GStreamer: Mailing Lists</title> <body> <h2>Mailing Lists</h2> -<p>There are currently six mailing lists for GStreamer:</p> +<p>There are currently eight mailing lists for GStreamer:</p> <UL> <LI><B>gstreamer-announce</B>:</LI> diff --git a/src/htdocs/modules/modules.xml b/src/htdocs/modules/modules.xml index 8f0b62c..38423c6 100644 --- a/src/htdocs/modules/modules.xml +++ b/src/htdocs/modules/modules.xml @@ -214,7 +214,7 @@ Library for creating audio/video editors. </module> <module> - <id>gstreamer-android</id> + <id>gst-android</id> <blurb>GStreamer for Android</blurb> <title>GStreamer for Android</title> <description> @@ -227,8 +227,8 @@ Library for creating audio/video editors. </description> <maintainer>Reynaldo Pinochet and Alessandro Decina</maintainer> <versions> - <stable>&qt-gstreamer-version-stable;</stable> - <devel>&qt-gstreamer-version-devel;</devel> + <stable>&gst-android-version-stable;</stable> + <devel>&gst-android-version-devel;</devel> </versions> </module> |
From: <tp...@ke...> - 2011-02-03 09:33:13
|
Module: gst-plugins-base Branch: master Commit: 96a1a9dec6676826dd808d6c35a5ae3f7f276212 URL: http://cgit.freedesktop.org/gstreamer/gst-plugins-base/commit/?id=96a1a9dec6676826dd808d6c35a5ae3f7f276212 Author: Vincent Penquerc'h <vin...@co...> Date: Fri Jan 21 18:10:29 2011 +0000 oggmux: ensure serialnos are unique We do that by checking a newly generated one is not already used in an existing stream, and doing it again if it is. https://bugzilla.gnome.org/show_bug.cgi?id=640211 --- ext/ogg/gstoggmux.c | 30 +++++++++++++++++++++++++++++- 1 files changed, 29 insertions(+), 1 deletions(-) diff --git a/ext/ogg/gstoggmux.c b/ext/ogg/gstoggmux.c index 3329824..c6ed67c 100644 --- a/ext/ogg/gstoggmux.c +++ b/ext/ogg/gstoggmux.c @@ -337,6 +337,34 @@ gst_ogg_mux_sink_event (GstPad * pad, GstEvent * event) return ret; } +static gboolean +gst_ogg_mux_is_serialno_present (GstOggMux * ogg_mux, guint32 serialno) +{ + GSList *walk; + + walk = ogg_mux->collect->data; + while (walk) { + GstOggPadData *pad = (GstOggPadData *) walk->data; + if (pad->map.serialno == serialno) + return TRUE; + walk = walk->next; + } + + return FALSE; +} + +static guint32 +gst_ogg_mux_generate_serialno (GstOggMux * ogg_mux) +{ + guint32 serialno; + + do { + serialno = g_random_int_range (0, G_MAXINT32); + } while (gst_ogg_mux_is_serialno_present (ogg_mux, serialno)); + + return serialno; +} + static GstPad * gst_ogg_mux_request_new_pad (GstElement * element, GstPadTemplate * templ, const gchar * req_name) @@ -364,7 +392,7 @@ gst_ogg_mux_request_new_pad (GstElement * element, if (req_name == NULL || strlen (req_name) < 6) { /* no name given when requesting the pad, use random serial number */ - serial = rand (); + serial = gst_ogg_mux_generate_serialno (ogg_mux); } else { /* parse serial number from requested padname */ serial = atoi (&req_name[5]); |
From: <tp...@ke...> - 2011-02-02 18:42:44
|
Module: gst-plugins-bad Branch: master Commit: 14375582fa8ae44a356eb4a3aabb267b47fd7327 URL: http://cgit.freedesktop.org/gstreamer/gst-plugins-bad/commit/?id=14375582fa8ae44a356eb4a3aabb267b47fd7327 Author: Tim-Philipp Müller <tim...@co...> Date: Wed Feb 2 18:41:39 2011 +0000 dvbsrc: fix up enum nick names https://bugzilla.gnome.org/show_bug.cgi?id=591651 --- sys/dvb/gstdvbsrc.c | 40 ++++++++++++++++++++-------------------- 1 files changed, 20 insertions(+), 20 deletions(-) diff --git a/sys/dvb/gstdvbsrc.c b/sys/dvb/gstdvbsrc.c index a136027..2f18431 100644 --- a/sys/dvb/gstdvbsrc.c +++ b/sys/dvb/gstdvbsrc.c @@ -117,7 +117,7 @@ gst_dvbsrc_code_rate_get_type (void) { static GType dvbsrc_code_rate_type = 0; static GEnumValue code_rate_types[] = { - {FEC_NONE, "NONE", "NONE"}, + {FEC_NONE, "NONE", "none"}, {FEC_1_2, "1/2", "1/2"}, {FEC_2_3, "2/3", "2/3"}, {FEC_3_4, "3/4", "3/4"}, @@ -126,7 +126,7 @@ gst_dvbsrc_code_rate_get_type (void) {FEC_6_7, "6/7", "6/7"}, {FEC_7_8, "7/8", "7/8"}, {FEC_8_9, "8/9", "8/9"}, - {FEC_AUTO, "AUTO", ""}, + {FEC_AUTO, "AUTO", "auto"}, {0, NULL, NULL}, }; @@ -143,15 +143,15 @@ gst_dvbsrc_modulation_get_type (void) { static GType dvbsrc_modulation_type = 0; static GEnumValue modulation_types[] = { - {QPSK, "QPSK", "QPSK"}, - {QAM_16, "QAM 16", "QAM 16"}, - {QAM_32, "QAM 32", "QAM 32"}, - {QAM_64, "QAM 64", "QAM 64"}, - {QAM_128, "QAM 128", "QAM 128"}, - {QAM_256, "QAM 256", "QAM 256"}, - {QAM_AUTO, "AUTO", "AUTO"}, - {VSB_8, "8VSB", "8VSB"}, - {VSB_16, "16VSB", "16VSB"}, + {QPSK, "QPSK", "qpsk"}, + {QAM_16, "QAM 16", "qam-16"}, + {QAM_32, "QAM 32", "qam-32"}, + {QAM_64, "QAM 64", "qam-64"}, + {QAM_128, "QAM 128", "qam-128"}, + {QAM_256, "QAM 256", "qam-256"}, + {QAM_AUTO, "AUTO", "auto"}, + {VSB_8, "8VSB", "8vsb"}, + {VSB_16, "16VSB", "16vsb"}, {0, NULL, NULL}, }; @@ -168,9 +168,9 @@ gst_dvbsrc_transmission_mode_get_type (void) { static GType dvbsrc_transmission_mode_type = 0; static GEnumValue transmission_mode_types[] = { - {TRANSMISSION_MODE_2K, "2k", "2k"}, - {TRANSMISSION_MODE_8K, "8k", "8k"}, - {TRANSMISSION_MODE_AUTO, "AUTO", "AUTO"}, + {TRANSMISSION_MODE_2K, "2K", "2k"}, + {TRANSMISSION_MODE_8K, "8K", "8k"}, + {TRANSMISSION_MODE_AUTO, "AUTO", "auto"}, {0, NULL, NULL}, }; @@ -212,7 +212,7 @@ gst_dvbsrc_guard_get_type (void) {GUARD_INTERVAL_1_16, "16", "16"}, {GUARD_INTERVAL_1_8, "8", "8"}, {GUARD_INTERVAL_1_4, "4", "4"}, - {GUARD_INTERVAL_AUTO, "AUTO", "AUTO"}, + {GUARD_INTERVAL_AUTO, "AUTO", "auto"}, {0, NULL, NULL}, }; @@ -228,11 +228,11 @@ gst_dvbsrc_hierarchy_get_type (void) { static GType dvbsrc_hierarchy_type = 0; static GEnumValue hierarchy_types[] = { - {HIERARCHY_NONE, "NONE", "NONE"}, + {HIERARCHY_NONE, "NONE", "none"}, {HIERARCHY_1, "1", "1"}, {HIERARCHY_2, "2", "2"}, {HIERARCHY_4, "4", "4"}, - {HIERARCHY_AUTO, "AUTO", "AUTO"}, + {HIERARCHY_AUTO, "AUTO", "auto"}, {0, NULL, NULL}, }; @@ -249,9 +249,9 @@ gst_dvbsrc_inversion_get_type (void) { static GType dvbsrc_inversion_type = 0; static GEnumValue inversion_types[] = { - {INVERSION_OFF, "OFF", "OFF"}, - {INVERSION_ON, "ON", "ON"}, - {INVERSION_AUTO, "AUTO", "AUTO"}, + {INVERSION_OFF, "OFF", "off"}, + {INVERSION_ON, "ON", "on"}, + {INVERSION_AUTO, "AUTO", "auto"}, {0, NULL, NULL}, }; |
From: <tp...@ke...> - 2011-02-02 17:38:11
|
Module: gst-plugins-base Branch: master Commit: 440002a137640db2c5d6613d9bf56dfff997eb07 URL: http://cgit.freedesktop.org/gstreamer/gst-plugins-base/commit/?id=440002a137640db2c5d6613d9bf56dfff997eb07 Author: Vincent Penquerc'h <vin...@co...> Date: Fri Jan 21 16:05:46 2011 +0000 oggmux: use oggstream for less brittleness in recognizing headers Using the IN_CAPS flag for this is brittle, and will fail if either vorbisparse or vorbistag (which is itself based on vorbisparse) is inserted between oggdemux and oggmux. Possibly other elements too (eg, theoraparse, etc). Using oggstream ensures we Get It Right More Often Than Not. https://bugzilla.gnome.org/show_bug.cgi?id=629196 --- ext/ogg/gstoggmux.c | 80 ++++++++++++++++++++++++++++++++------------------- ext/ogg/gstoggmux.h | 8 ++-- 2 files changed, 54 insertions(+), 34 deletions(-) Diff: http://cgit.freedesktop.org/gstreamer/gst-plugins-base/diff/?id=440002a137640db2c5d6613d9bf56dfff997eb07 |
From: <tp...@ke...> - 2011-02-02 17:38:10
|
Module: gst-plugins-base Branch: master Commit: 54c19ba6def4f9cead7e18a893c981e425f9405c URL: http://cgit.freedesktop.org/gstreamer/gst-plugins-base/commit/?id=54c19ba6def4f9cead7e18a893c981e425f9405c Author: Tim-Philipp Müller <tim...@co...> Date: Wed Feb 2 17:30:15 2011 +0000 oggmux: free stream map caps when done --- ext/ogg/gstoggmux.c | 1 + 1 files changed, 1 insertions(+), 0 deletions(-) diff --git a/ext/ogg/gstoggmux.c b/ext/ogg/gstoggmux.c index 6dfbf61..3329824 100644 --- a/ext/ogg/gstoggmux.c +++ b/ext/ogg/gstoggmux.c @@ -283,6 +283,7 @@ gst_ogg_mux_ogg_pad_destroy_notify (GstCollectData * data) GstBuffer *buf; ogg_stream_clear (&oggpad->map.stream); + gst_caps_replace (&oggpad->map.caps, NULL); if (oggpad->pagebuffers) { while ((buf = g_queue_pop_head (oggpad->pagebuffers)) != NULL) { |
From: <tp...@ke...> - 2011-02-02 17:38:09
|
Module: gst-plugins-base Branch: master Commit: 2eac43bd73ff405c6883c1c2476a90a123b52159 URL: http://cgit.freedesktop.org/gstreamer/gst-plugins-base/commit/?id=2eac43bd73ff405c6883c1c2476a90a123b52159 Author: Tim-Philipp Müller <tim...@co...> Date: Wed Feb 2 17:23:43 2011 +0000 oggmux: keep IN_CAPS flag check for header buffers as fallback In case the ogg mapper doesn't handle all the accepted input formats (although it really should). Saves us error handling for that case though. Also log caps properly. https://bugzilla.gnome.org/show_bug.cgi?id=629196 --- ext/ogg/gstoggmux.c | 23 ++++++++++++++++------- 1 files changed, 16 insertions(+), 7 deletions(-) diff --git a/ext/ogg/gstoggmux.c b/ext/ogg/gstoggmux.c index 984b890..6dfbf61 100644 --- a/ext/ogg/gstoggmux.c +++ b/ext/ogg/gstoggmux.c @@ -775,25 +775,34 @@ gst_ogg_mux_queue_pads (GstOggMux * ogg_mux) if (pad->state == GST_OGG_PAD_STATE_CONTROL) { /* and we have one */ ogg_packet packet; + gboolean is_header; + packet.packet = GST_BUFFER_DATA (buf); packet.bytes = GST_BUFFER_SIZE (buf); - packet.granulepos = GST_BUFFER_OFFSET_END (buf); - if (packet.granulepos == -1) + + if (GST_BUFFER_OFFSET_END_IS_VALID (buf)) + packet.granulepos = GST_BUFFER_OFFSET_END (buf); + else packet.granulepos = 0; /* if we're not yet in data mode, ensure we're setup on the first packet */ if (!pad->have_type) { pad->have_type = gst_ogg_stream_setup_map (&pad->map, &packet); if (!pad->have_type) { - pad->map.caps = - gst_caps_new_simple ("application/x-unknown", NULL); + GST_ERROR_OBJECT (pad, "mapper didn't recognise input stream " + "(pad caps: %" GST_PTR_FORMAT ")", GST_PAD_CAPS (pad)); + } else { + GST_DEBUG_OBJECT (pad, "caps detected: %" GST_PTR_FORMAT, + pad->map.caps); } - GST_DEBUG_OBJECT (ogg_mux, "New pad has caps: %s", - gst_caps_to_string (pad->map.caps)); } + if (pad->have_type) + is_header = gst_ogg_stream_packet_is_header (&pad->map, &packet); + else /* fallback (FIXME 0.11: remove IN_CAPS hack) */ + is_header = GST_BUFFER_FLAG_IS_SET (buf, GST_BUFFER_FLAG_IN_CAPS); - if (gst_ogg_stream_packet_is_header (&pad->map, &packet)) { + if (is_header) { GST_DEBUG_OBJECT (ogg_mux, "got header buffer in control state, ignoring"); /* just ignore */ |
From: <wt...@ke...> - 2011-02-02 17:32:54
|
Module: gst-plugins-good Branch: master Commit: 8598aaf81b2d8ba601ff5407b3084e525824ce1c URL: http://cgit.freedesktop.org/gstreamer/gst-plugins-good/commit/?id=8598aaf81b2d8ba601ff5407b3084e525824ce1c Author: Wim Taymans <wim...@co...> Date: Wed Feb 2 18:21:26 2011 +0100 rtpbin: Get and use the NTP time when receiving RTCP When we receive an RTCP packet, get the current NTP time in nanseconds so that we can correctly calculate the round-trip time. --- gst/rtpmanager/gstrtpsession.c | 6 +++++- gst/rtpmanager/rtpsession.c | 13 ++++++++----- gst/rtpmanager/rtpsession.h | 3 ++- gst/rtpmanager/rtpsource.c | 14 +++++++++----- gst/rtpmanager/rtpsource.h | 2 +- gst/rtpmanager/rtpstats.h | 2 ++ 6 files changed, 27 insertions(+), 13 deletions(-) diff --git a/gst/rtpmanager/gstrtpsession.c b/gst/rtpmanager/gstrtpsession.c index b1223d6..64abc94 100644 --- a/gst/rtpmanager/gstrtpsession.c +++ b/gst/rtpmanager/gstrtpsession.c @@ -1581,6 +1581,7 @@ gst_rtp_session_chain_recv_rtcp (GstPad * pad, GstBuffer * buffer) GstRtpSession *rtpsession; GstRtpSessionPrivate *priv; GstClockTime current_time; + guint64 ntpnstime; GstFlowReturn ret; rtpsession = GST_RTP_SESSION (gst_pad_get_parent (pad)); @@ -1589,7 +1590,10 @@ gst_rtp_session_chain_recv_rtcp (GstPad * pad, GstBuffer * buffer) GST_LOG_OBJECT (rtpsession, "received RTCP packet"); current_time = gst_clock_get_time (priv->sysclock); - ret = rtp_session_process_rtcp (priv->session, buffer, current_time); + get_current_times (rtpsession, NULL, &ntpnstime); + + ret = + rtp_session_process_rtcp (priv->session, buffer, current_time, ntpnstime); gst_object_unref (rtpsession); diff --git a/gst/rtpmanager/rtpsession.c b/gst/rtpmanager/rtpsession.c index 49ce69b..a455ad3 100644 --- a/gst/rtpmanager/rtpsession.c +++ b/gst/rtpmanager/rtpsession.c @@ -1598,11 +1598,12 @@ rtp_session_create_source (RTPSession * sess) static void update_arrival_stats (RTPSession * sess, RTPArrivalStats * arrival, gboolean rtp, GstBuffer * buffer, GstClockTime current_time, - GstClockTime running_time) + GstClockTime running_time, guint64 ntpnstime) { /* get time of arrival */ arrival->current_time = current_time; arrival->running_time = running_time; + arrival->ntpnstime = ntpnstime; /* get packet size including header overhead */ arrival->bytes = GST_BUFFER_SIZE (buffer) + sess->header_len; @@ -1657,7 +1658,7 @@ rtp_session_process_rtp (RTPSession * sess, GstBuffer * buffer, RTP_SESSION_LOCK (sess); /* update arrival stats */ update_arrival_stats (sess, &arrival, TRUE, buffer, current_time, - running_time); + running_time, -1); /* ignore more RTP packets when we left the session */ if (sess->source->received_bye) @@ -1778,7 +1779,7 @@ rtp_session_process_rb (RTPSession * sess, RTPSource * source, /* only deal with report blocks for our session, we update the stats of * the sender of the RTCP message. We could also compare our stats against * the other sender to see if we are better or worse. */ - rtp_source_process_rb (source, arrival->current_time, fractionlost, + rtp_source_process_rb (source, arrival->ntpnstime, fractionlost, packetslost, exthighestseq, jitter, lsr, dlsr); } } @@ -2153,6 +2154,7 @@ rtp_session_process_feedback (RTPSession * sess, GstRTCPPacket * packet, * @sess: and #RTPSession * @buffer: an RTCP buffer * @current_time: the current system time + * @ntpnstime: the current NTP time in nanoseconds * * Process an RTCP buffer in the session manager. This function takes ownership * of @buffer. @@ -2161,7 +2163,7 @@ rtp_session_process_feedback (RTPSession * sess, GstRTCPPacket * packet, */ GstFlowReturn rtp_session_process_rtcp (RTPSession * sess, GstBuffer * buffer, - GstClockTime current_time) + GstClockTime current_time, guint64 ntpnstime) { GstRTCPPacket packet; gboolean more, is_bye = FALSE, do_sync = FALSE; @@ -2178,7 +2180,8 @@ rtp_session_process_rtcp (RTPSession * sess, GstBuffer * buffer, RTP_SESSION_LOCK (sess); /* update arrival stats */ - update_arrival_stats (sess, &arrival, FALSE, buffer, current_time, -1); + update_arrival_stats (sess, &arrival, FALSE, buffer, current_time, -1, + ntpnstime); if (sess->sent_bye) goto ignore; diff --git a/gst/rtpmanager/rtpsession.h b/gst/rtpmanager/rtpsession.h index 3268490..6dee1cb 100644 --- a/gst/rtpmanager/rtpsession.h +++ b/gst/rtpmanager/rtpsession.h @@ -326,7 +326,8 @@ GstFlowReturn rtp_session_process_rtp (RTPSession *sess, GstBuffer GstClockTime current_time, GstClockTime running_time); GstFlowReturn rtp_session_process_rtcp (RTPSession *sess, GstBuffer *buffer, - GstClockTime current_time); + GstClockTime current_time, + guint64 ntpnstime); /* processing packets for sending */ GstFlowReturn rtp_session_send_rtp (RTPSession *sess, gpointer data, gboolean is_list, diff --git a/gst/rtpmanager/rtpsource.c b/gst/rtpmanager/rtpsource.c index 423d2b6..e7872d8 100644 --- a/gst/rtpmanager/rtpsource.c +++ b/gst/rtpmanager/rtpsource.c @@ -1350,7 +1350,7 @@ rtp_source_process_sr (RTPSource * src, GstClockTime time, guint64 ntptime, /** * rtp_source_process_rb: * @src: an #RTPSource - * @time: the current time in nanoseconds since 1970 + * @ntpnstime: the current time in nanoseconds since 1970 * @fractionlost: fraction lost since last SR/RR * @packetslost: the cumululative number of packets lost * @exthighestseq: the extended last sequence number received @@ -1361,13 +1361,14 @@ rtp_source_process_sr (RTPSource * src, GstClockTime time, guint64 ntptime, * Update the report block in @src. */ void -rtp_source_process_rb (RTPSource * src, GstClockTime time, guint8 fractionlost, - gint32 packetslost, guint32 exthighestseq, guint32 jitter, guint32 lsr, - guint32 dlsr) +rtp_source_process_rb (RTPSource * src, GstClockTime ntpnstime, + guint8 fractionlost, gint32 packetslost, guint32 exthighestseq, + guint32 jitter, guint32 lsr, guint32 dlsr) { RTPReceiverReport *curr; gint curridx; guint32 ntp, A; + guint64 f_ntp; g_return_if_fail (RTP_IS_SOURCE (src)); @@ -1388,8 +1389,11 @@ rtp_source_process_rb (RTPSource * src, GstClockTime time, guint8 fractionlost, curr->lsr = lsr; curr->dlsr = dlsr; + /* convert the NTP time in nanoseconds to 32.32 fixed point */ + f_ntp = gst_util_uint64_scale (ntpnstime, (1LL << 32), GST_SECOND); /* calculate round trip, round the time up */ - ntp = ((gst_rtcp_unix_to_ntp (time) + 0xffff) >> 16) & 0xffffffff; + ntp = ((f_ntp + 0xffff) >> 16) & 0xffffffff; + A = dlsr + lsr; if (A > 0 && ntp > A) A = ntp - A; diff --git a/gst/rtpmanager/rtpsource.h b/gst/rtpmanager/rtpsource.h index fadbe30..6db0a6a 100644 --- a/gst/rtpmanager/rtpsource.h +++ b/gst/rtpmanager/rtpsource.h @@ -220,7 +220,7 @@ GstFlowReturn rtp_source_send_rtp (RTPSource *src, gpointer data, g void rtp_source_process_bye (RTPSource *src, const gchar *reason); void rtp_source_process_sr (RTPSource *src, GstClockTime time, guint64 ntptime, guint32 rtptime, guint32 packet_count, guint32 octet_count); -void rtp_source_process_rb (RTPSource *src, GstClockTime time, guint8 fractionlost, +void rtp_source_process_rb (RTPSource *src, guint64 ntpnstime, guint8 fractionlost, gint32 packetslost, guint32 exthighestseq, guint32 jitter, guint32 lsr, guint32 dlsr); diff --git a/gst/rtpmanager/rtpstats.h b/gst/rtpmanager/rtpstats.h index 643da00..4560595 100644 --- a/gst/rtpmanager/rtpstats.h +++ b/gst/rtpmanager/rtpstats.h @@ -58,6 +58,7 @@ typedef struct { * RTPArrivalStats: * @current_time: current time according to the system clock * @running_time: arrival time of a packet as buffer running_time + * @ntpnstime: arrival time of a packet NTP time in nanoseconds * @have_address: if the @address field contains a valid address * @address: address of the sender of the packet * @bytes: bytes of the packet including lowlevel overhead @@ -68,6 +69,7 @@ typedef struct { typedef struct { GstClockTime current_time; GstClockTime running_time; + guint64 ntpnstime; gboolean have_address; GstNetAddress address; guint bytes; |
From: <wt...@ke...> - 2011-02-02 17:32:54
|
Module: gst-plugins-good Branch: master Commit: 61382aad280abfd719c5ce23b4cd0fe34552b1c1 URL: http://cgit.freedesktop.org/gstreamer/gst-plugins-good/commit/?id=61382aad280abfd719c5ce23b4cd0fe34552b1c1 Author: Wim Taymans <wim...@co...> Date: Wed Feb 2 18:27:52 2011 +0100 source: fix type of ntpnstime --- gst/rtpmanager/rtpsource.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/gst/rtpmanager/rtpsource.c b/gst/rtpmanager/rtpsource.c index e7872d8..fb9e039 100644 --- a/gst/rtpmanager/rtpsource.c +++ b/gst/rtpmanager/rtpsource.c @@ -1361,7 +1361,7 @@ rtp_source_process_sr (RTPSource * src, GstClockTime time, guint64 ntptime, * Update the report block in @src. */ void -rtp_source_process_rb (RTPSource * src, GstClockTime ntpnstime, +rtp_source_process_rb (RTPSource * src, guint64 ntpnstime, guint8 fractionlost, gint32 packetslost, guint32 exthighestseq, guint32 jitter, guint32 lsr, guint32 dlsr) { |