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: <mn...@ke...> - 2011-01-28 11:51:45
|
Module: gst-plugins-bad Branch: master Commit: 3ba33399939efd4337e6787b66b691ef9cb3a66c URL: http://cgit.freedesktop.org/gstreamer/gst-plugins-bad/commit/?id=3ba33399939efd4337e6787b66b691ef9cb3a66c Author: Mark Nauwelaerts <mar...@co...> Date: Wed Jan 12 14:40:37 2011 +0100 baseparse: ensure non-empty candidate frames --- gst/audioparsers/gstbaseparse.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gst/audioparsers/gstbaseparse.c b/gst/audioparsers/gstbaseparse.c index 88ed927..c02541d 100644 --- a/gst/audioparsers/gstbaseparse.c +++ b/gst/audioparsers/gstbaseparse.c @@ -1958,7 +1958,7 @@ gst_base_parse_chain (GstPad * pad, GstBuffer * buffer) GstFlowReturn ret = GST_FLOW_OK; GstBuffer *outbuf = NULL; GstBuffer *tmpbuf = NULL; - guint fsize = 0; + guint fsize = 1; gint skip = -1; const guint8 *data; guint old_min_size = 0, min_size, av; @@ -2293,7 +2293,7 @@ gst_base_parse_scan_frame (GstBaseParse * parse, GstBaseParseClass * klass, { GstBuffer *buffer, *outbuf; GstFlowReturn ret = GST_FLOW_OK; - guint fsize = 0, min_size, old_min_size = 0; + guint fsize = 1, min_size, old_min_size = 0; gint skip = 0; g_return_val_if_fail (frame != NULL, GST_FLOW_ERROR); |
|
From: <mn...@ke...> - 2011-01-28 11:51:45
|
Module: gst-plugins-bad Branch: master Commit: 16342223ee699a471ff0c39407f7ca4bb8cddcf1 URL: http://cgit.freedesktop.org/gstreamer/gst-plugins-bad/commit/?id=16342223ee699a471ff0c39407f7ca4bb8cddcf1 Author: Mark Nauwelaerts <mar...@co...> Date: Tue Jan 11 15:24:02 2011 +0100 baseparse: properly track upstream timestamps ... rather than with a delay. --- gst/audioparsers/gstbaseparse.c | 17 +++++++++-------- 1 files changed, 9 insertions(+), 8 deletions(-) diff --git a/gst/audioparsers/gstbaseparse.c b/gst/audioparsers/gstbaseparse.c index a0319d8..ee62f10 100644 --- a/gst/audioparsers/gstbaseparse.c +++ b/gst/audioparsers/gstbaseparse.c @@ -2106,6 +2106,14 @@ gst_base_parse_chain (GstPad * pad, GstBuffer * buffer) break; } + /* move along with upstream timestamp (if any), + * but interpolate in between */ + timestamp = gst_adapter_prev_timestamp (parse->adapter, NULL); + if (GST_CLOCK_TIME_IS_VALID (timestamp) && + (parse->priv->prev_ts != timestamp)) { + parse->priv->prev_ts = parse->priv->next_ts = timestamp; + } + /* FIXME: Would it be more efficient to make a subbuffer instead? */ outbuf = gst_adapter_take_buffer (parse->adapter, fsize); outbuf = gst_buffer_make_metadata_writable (outbuf); @@ -2114,14 +2122,7 @@ gst_base_parse_chain (GstPad * pad, GstBuffer * buffer) GST_BUFFER_OFFSET (outbuf) = parse->priv->offset; parse->priv->offset += fsize; GST_BUFFER_TIMESTAMP (outbuf) = GST_CLOCK_TIME_NONE; - - /* move along with upstream timestamp (if any), - * but interpolate in between */ - timestamp = gst_adapter_prev_timestamp (parse->adapter, NULL); - if (GST_CLOCK_TIME_IS_VALID (timestamp) && - (parse->priv->prev_ts != timestamp)) { - parse->priv->prev_ts = parse->priv->next_ts = timestamp; - } + GST_BUFFER_DURATION (outbuf) = GST_CLOCK_TIME_NONE; frame->buffer = outbuf; ret = gst_base_parse_handle_and_push_frame (parse, bclass, frame); |
|
From: <mn...@ke...> - 2011-01-28 11:51:44
|
Module: gst-plugins-bad Branch: master Commit: 3e9d5c4bf8703ef8bdc8dda3aac344c53581eaac URL: http://cgit.freedesktop.org/gstreamer/gst-plugins-bad/commit/?id=3e9d5c4bf8703ef8bdc8dda3aac344c53581eaac Author: Mark Nauwelaerts <mar...@co...> Date: Fri Jan 7 15:58:49 2011 +0100 baseparse: update some documentation Also add some more debug. --- gst/audioparsers/gstbaseparse.c | 14 +++++++++++--- gst/audioparsers/gstbaseparse.h | 2 +- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/gst/audioparsers/gstbaseparse.c b/gst/audioparsers/gstbaseparse.c index b8b4435..23a06e3 100644 --- a/gst/audioparsers/gstbaseparse.c +++ b/gst/audioparsers/gstbaseparse.c @@ -90,7 +90,8 @@ * <listitem><para> * After valid frame is found, it will be passed again to subclass with * @parse_frame call. Now subclass is responsible for parsing the - * frame contents and setting the caps, buffer timestamp and duration + * frame contents and setting the caps, and buffer metadata (e.g. + * buffer timestamp and duration, or keyframe if applicable). * (although the latter can also be done by GstBaseParse if it is * appropriately configured, see below). * </para></listitem> @@ -2202,6 +2203,9 @@ gst_base_parse_scan_frame (GstBaseParse * parse, GstBaseParseClass * klass, g_return_val_if_fail (buf != NULL, GST_FLOW_ERROR); + GST_LOG_OBJECT (parse, "scanning for frame at offset %" G_GUINT64_FORMAT + " (%#" G_GINT64_MODIFIER "x)", parse->priv->offset, parse->priv->offset); + while (TRUE) { min_size = MAX (parse->priv->min_frame_size, fsize); @@ -2640,8 +2644,12 @@ gst_base_parse_set_min_frame_size (GstBaseParse * parse, guint min_size) * @parse: the #GstBaseParse to set * @passthrough: boolean indicating passthrough mode. * - * Set passthrough mode for this parser. If operating in passthrough, - * incoming buffers are pushed through unmodified. + * Set passthrough mode for this parser (which only applies operating in pull + * mode). If operating in passthrough, incoming buffers are pushed through + * unmodified. That is, no @check_valid_frame or @parse_frame callbacks + * will be invoked. On the ohter hand, @pre_push_buffer is still invoked, + * where subclass can perform as much or as little is appropriate for + * "passthrough" semantics. */ void gst_base_parse_set_passthrough (GstBaseParse * parse, gboolean passthrough) diff --git a/gst/audioparsers/gstbaseparse.h b/gst/audioparsers/gstbaseparse.h index 605bf84..6b45fd3 100644 --- a/gst/audioparsers/gstbaseparse.h +++ b/gst/audioparsers/gstbaseparse.h @@ -200,7 +200,7 @@ struct _GstBaseParse { * Called just prior to pushing a frame (after any pending * events have been sent) to give subclass a chance to perform * additional actions at this time (e.g. tag sending) or to - * decide whether this buffer should be dropped or no + * decide whether this buffer should be dropped or not * (e.g. custom segment clipping). * * Subclasses can override any of the available virtual methods or not, as |
|
From: <mn...@ke...> - 2011-01-28 11:51:44
|
Module: gst-plugins-bad Branch: master Commit: 829507b650fa907af2dbd651d29a63f68763700f URL: http://cgit.freedesktop.org/gstreamer/gst-plugins-bad/commit/?id=829507b650fa907af2dbd651d29a63f68763700f Author: Mark Nauwelaerts <mar...@co...> Date: Thu Jan 6 11:41:44 2011 +0100 baseparse: allow increasing min_size for current frame parsing only Also check that subclass actually either directs to skip bytes or increases expected frame size to avoid going nowhere in bogus indefinite looping. --- gst/audioparsers/gstbaseparse.c | 51 ++++++++++++++++++++++++++++++++------- 1 files changed, 42 insertions(+), 9 deletions(-) diff --git a/gst/audioparsers/gstbaseparse.c b/gst/audioparsers/gstbaseparse.c index 63ac08d..b8b4435 100644 --- a/gst/audioparsers/gstbaseparse.c +++ b/gst/audioparsers/gstbaseparse.c @@ -82,7 +82,8 @@ * @framesize according to the detected frame size. If buffer didn't * contain a valid frame, this call must return FALSE and optionally * set the @skipsize value to inform base class that how many bytes - * it needs to skip in order to find a valid frame. The passed buffer + * it needs to skip in order to find a valid frame. @framesize can always + * indicate a new minimum for current frame parsing. The passed buffer * is read-only. Note that @check_valid_frame might receive any small * amount of input data when leftover data is being drained (e.g. at EOS). * </para></listitem> @@ -1874,7 +1875,7 @@ gst_base_parse_chain (GstPad * pad, GstBuffer * buffer) guint fsize = 0; gint skip = -1; const guint8 *data; - guint min_size, av; + guint old_min_size = 0, min_size, av; GstClockTime timestamp; parse = GST_BASE_PARSE (GST_OBJECT_PARENT (pad)); @@ -1905,11 +1906,17 @@ gst_base_parse_chain (GstPad * pad, GstBuffer * buffer) while (!parse->priv->flushing) { tmpbuf = gst_buffer_new (); + old_min_size = 0; /* Synchronization loop */ for (;;) { - min_size = parse->priv->min_frame_size; + min_size = MAX (parse->priv->min_frame_size, fsize); av = gst_adapter_available (parse->adapter); + /* loop safety check */ + if (G_UNLIKELY (old_min_size >= min_size)) + goto invalid_min; + old_min_size = min_size; + if (G_UNLIKELY (parse->priv->drain)) { min_size = av; GST_DEBUG_OBJECT (parse, "draining, data left: %d", min_size); @@ -1975,10 +1982,11 @@ gst_base_parse_chain (GstPad * pad, GstBuffer * buffer) if (!parse->priv->discont) parse->priv->sync_offset = parse->priv->offset; parse->priv->discont = TRUE; + /* something changed least; nullify loop check */ + old_min_size = 0; } - /* There is a possibility that subclass set the skip value to zero. - This means that it has probably found a frame but wants to ask - more data (by increasing the min_size) to be sure of this. */ + /* skip == 0 should imply subclass set min_size to need more data; + * we check this shortly */ if ((ret = gst_base_parse_check_sync (parse)) != GST_FLOW_OK) { gst_buffer_unref (tmpbuf); goto done; @@ -2033,6 +2041,15 @@ gst_base_parse_chain (GstPad * pad, GstBuffer * buffer) done: GST_LOG_OBJECT (parse, "chain leaving"); return ret; + + /* ERRORS */ +invalid_min: + { + GST_ELEMENT_ERROR (parse, STREAM, FAILED, (NULL), + ("min_size evolution %d -> %d; breaking to avoid looping", + old_min_size, min_size)); + return GST_FLOW_ERROR; + } } /* pull @size bytes at current offset, @@ -2180,14 +2197,18 @@ gst_base_parse_scan_frame (GstBaseParse * parse, GstBaseParseClass * klass, { GstBuffer *buffer, *outbuf; GstFlowReturn ret = GST_FLOW_OK; - guint fsize = 0, min_size; + guint fsize = 0, min_size, old_min_size = 0; gint skip = 0; g_return_val_if_fail (buf != NULL, GST_FLOW_ERROR); while (TRUE) { - min_size = parse->priv->min_frame_size; + min_size = MAX (parse->priv->min_frame_size, fsize); + /* loop safety check */ + if (G_UNLIKELY (old_min_size >= min_size)) + goto invalid_min; + old_min_size = min_size; ret = gst_base_parse_pull_range (parse, min_size, &buffer); if (ret != GST_FLOW_OK) @@ -2227,8 +2248,11 @@ gst_base_parse_scan_frame (GstBaseParse * parse, GstBaseParseClass * klass, if (!parse->priv->discont) parse->priv->sync_offset = parse->priv->offset; parse->priv->discont = TRUE; + /* something changed least; nullify loop check */ + old_min_size = 0; } - /* skip == 0 should imply subclass set min_size to need more data ... */ + /* skip == 0 should imply subclass set min_size to need more data; + * we check this shortly */ GST_DEBUG_OBJECT (parse, "finding sync..."); gst_buffer_unref (buffer); if ((ret = gst_base_parse_check_sync (parse)) != GST_FLOW_OK) { @@ -2264,6 +2288,15 @@ gst_base_parse_scan_frame (GstBaseParse * parse, GstBaseParseClass * klass, done: return ret; + + /* ERRORS */ +invalid_min: + { + GST_ELEMENT_ERROR (parse, STREAM, FAILED, (NULL), + ("min_size evolution %d -> %d; breaking to avoid looping", + old_min_size, min_size)); + return GST_FLOW_ERROR; + } } /** |
|
From: <mn...@ke...> - 2011-01-28 11:51:40
|
Module: gst-plugins-bad Branch: master Commit: 18b69e9320b8cad133e0b4696c32bcd8ffacc6c6 URL: http://cgit.freedesktop.org/gstreamer/gst-plugins-bad/commit/?id=18b69e9320b8cad133e0b4696c32bcd8ffacc6c6 Author: Mark Nauwelaerts <mar...@co...> Date: Fri Jan 14 15:26:37 2011 +0100 baesparse: fix refactor regression in loop based parsing --- gst/audioparsers/gstbaseparse.c | 16 +++++++++------- 1 files changed, 9 insertions(+), 7 deletions(-) diff --git a/gst/audioparsers/gstbaseparse.c b/gst/audioparsers/gstbaseparse.c index c949316..63ac08d 100644 --- a/gst/audioparsers/gstbaseparse.c +++ b/gst/audioparsers/gstbaseparse.c @@ -2236,9 +2236,15 @@ gst_base_parse_scan_frame (GstBaseParse * parse, GstBaseParseClass * klass, } } - if (fsize <= GST_BUFFER_SIZE (buffer)) { - outbuf = gst_buffer_create_sub (buffer, 0, fsize); - GST_BUFFER_OFFSET (outbuf) = GST_BUFFER_OFFSET (buffer); + /* Does the subclass want to skip too? */ + if (skip > 0) + parse->priv->offset += skip; + else if (skip < 0) + skip = 0; + + if (fsize + skip <= GST_BUFFER_SIZE (buffer)) { + outbuf = gst_buffer_create_sub (buffer, skip, fsize); + GST_BUFFER_OFFSET (outbuf) = GST_BUFFER_OFFSET (buffer) + skip; GST_BUFFER_TIMESTAMP (outbuf) = GST_CLOCK_TIME_NONE; gst_buffer_unref (buffer); } else { @@ -2254,10 +2260,6 @@ gst_base_parse_scan_frame (GstBaseParse * parse, GstBaseParseClass * klass, parse->priv->offset += fsize; - /* Does the subclass want to skip too? */ - if (skip > 0) - parse->priv->offset += skip; - *buf = outbuf; done: |
|
From: <mn...@ke...> - 2011-01-28 11:51:40
|
Module: gst-plugins-bad Branch: master Commit: f4f7306e37bd9af1d0d083f88987921319603d36 URL: http://cgit.freedesktop.org/gstreamer/gst-plugins-bad/commit/?id=f4f7306e37bd9af1d0d083f88987921319603d36 Author: Mark Nauwelaerts <mar...@co...> Date: Thu Jan 6 11:16:56 2011 +0100 baseparse: pass all available data to subclass rather than minimum Also reduce some adapter calls and add a few debug statements. --- gst/audioparsers/gstbaseparse.c | 16 ++++++++++------ 1 files changed, 10 insertions(+), 6 deletions(-) diff --git a/gst/audioparsers/gstbaseparse.c b/gst/audioparsers/gstbaseparse.c index aee1c9a..c949316 100644 --- a/gst/audioparsers/gstbaseparse.c +++ b/gst/audioparsers/gstbaseparse.c @@ -76,7 +76,7 @@ * #GstAdapter. * </para></listitem> * <listitem><para> - * A buffer of min_frame_size bytes is passed to subclass with + * A buffer of (at least) min_frame_size bytes is passed to subclass with * @check_valid_frame. Subclass checks the contents and returns TRUE * if the buffer contains a valid frame. It also needs to set the * @framesize according to the detected frame size. If buffer didn't @@ -1874,7 +1874,7 @@ gst_base_parse_chain (GstPad * pad, GstBuffer * buffer) guint fsize = 0; gint skip = -1; const guint8 *data; - guint min_size; + guint min_size, av; GstClockTime timestamp; parse = GST_BASE_PARSE (GST_OBJECT_PARENT (pad)); @@ -1908,9 +1908,10 @@ gst_base_parse_chain (GstPad * pad, GstBuffer * buffer) /* Synchronization loop */ for (;;) { min_size = parse->priv->min_frame_size; + av = gst_adapter_available (parse->adapter); if (G_UNLIKELY (parse->priv->drain)) { - min_size = gst_adapter_available (parse->adapter); + min_size = av; GST_DEBUG_OBJECT (parse, "draining, data left: %d", min_size); if (G_UNLIKELY (!min_size)) { gst_buffer_unref (tmpbuf); @@ -1919,14 +1920,15 @@ gst_base_parse_chain (GstPad * pad, GstBuffer * buffer) } /* Collect at least min_frame_size bytes */ - if (gst_adapter_available (parse->adapter) < min_size) { + if (av < min_size) { GST_DEBUG_OBJECT (parse, "not enough data available (only %d bytes)", - gst_adapter_available (parse->adapter)); + av); gst_buffer_unref (tmpbuf); goto done; } - data = gst_adapter_peek (parse->adapter, min_size); + /* always pass all available data */ + data = gst_adapter_peek (parse->adapter, av); GST_BUFFER_DATA (tmpbuf) = (guint8 *) data; GST_BUFFER_SIZE (tmpbuf) = min_size; GST_BUFFER_OFFSET (tmpbuf) = parse->priv->offset; @@ -1946,6 +1948,7 @@ gst_base_parse_chain (GstPad * pad, GstBuffer * buffer) gst_buffer_unref (tmpbuf); goto done; } + GST_LOG_OBJECT (parse, "valid frame of size %d at pos %d", fsize, skip); break; } if (skip == -1) { @@ -2203,6 +2206,7 @@ gst_base_parse_scan_frame (GstBaseParse * parse, GstBaseParseClass * klass, skip = -1; if (klass->check_valid_frame (parse, buffer, &fsize, &skip)) { parse->priv->drain = FALSE; + GST_LOG_OBJECT (parse, "valid frame of size %d at pos %d", fsize, skip); break; } parse->priv->drain = FALSE; |
|
From: <mn...@ke...> - 2011-01-28 11:51:39
|
Module: gst-plugins-bad Branch: master Commit: fcd0f5cb7accf8b3b466f5567076a2da75f04f23 URL: http://cgit.freedesktop.org/gstreamer/gst-plugins-bad/commit/?id=fcd0f5cb7accf8b3b466f5567076a2da75f04f23 Author: Mark Nauwelaerts <mar...@co...> Date: Fri Dec 10 14:40:05 2010 +0100 baseparse: reduce locking ... which is either already mute and/or implicitly handled by STREAM_LOCK. --- gst/audioparsers/gstbaseparse.c | 27 +++------------------------ gst/audioparsers/gstbaseparse.h | 22 ---------------------- 2 files changed, 3 insertions(+), 46 deletions(-) diff --git a/gst/audioparsers/gstbaseparse.c b/gst/audioparsers/gstbaseparse.c index 927c355..15455ce 100644 --- a/gst/audioparsers/gstbaseparse.c +++ b/gst/audioparsers/gstbaseparse.c @@ -392,7 +392,6 @@ gst_base_parse_finalize (GObject * object) GstBaseParse *parse = GST_BASE_PARSE (object); GstEvent **p_ev; - g_mutex_free (parse->parse_lock); g_object_unref (parse->adapter); if (parse->pending_segment) { @@ -494,7 +493,6 @@ gst_base_parse_init (GstBaseParse * parse, GstBaseParseClass * bclass) gst_element_add_pad (GST_ELEMENT (parse), parse->srcpad); GST_DEBUG_OBJECT (parse, "src created"); - parse->parse_lock = g_mutex_new (); parse->adapter = gst_adapter_new (); parse->priv->pad_mode = GST_ACTIVATE_NONE; @@ -1909,9 +1907,7 @@ gst_base_parse_chain (GstPad * pad, GstBuffer * buffer) /* Synchronization loop */ for (;;) { - GST_BASE_PARSE_LOCK (parse); min_size = parse->priv->min_frame_size; - GST_BASE_PARSE_UNLOCK (parse); if (G_UNLIKELY (parse->priv->drain)) { min_size = gst_adapter_available (parse->adapter); @@ -2182,9 +2178,7 @@ gst_base_parse_scan_frame (GstBaseParse * parse, GstBaseParseClass * klass, while (TRUE) { - GST_BASE_PARSE_LOCK (parse); min_size = parse->priv->min_frame_size; - GST_BASE_PARSE_UNLOCK (parse); ret = gst_base_parse_pull_range (parse, min_size, &buffer); if (ret != GST_FLOW_OK) @@ -2523,7 +2517,6 @@ gst_base_parse_set_duration (GstBaseParse * parse, { g_return_if_fail (parse != NULL); - GST_BASE_PARSE_LOCK (parse); if (parse->priv->upstream_has_duration) { GST_DEBUG_OBJECT (parse, "using upstream duration; discarding update"); goto exit; @@ -2549,7 +2542,7 @@ gst_base_parse_set_duration (GstBaseParse * parse, GST_DEBUG_OBJECT (parse, "set update interval: %d", interval); parse->priv->update_interval = interval; exit: - GST_BASE_PARSE_UNLOCK (parse); + return; } /** @@ -2588,10 +2581,8 @@ gst_base_parse_set_min_frame_size (GstBaseParse * parse, guint min_size) { g_return_if_fail (parse != NULL); - GST_BASE_PARSE_LOCK (parse); parse->priv->min_frame_size = min_size; GST_LOG_OBJECT (parse, "set frame_min_size: %d", min_size); - GST_BASE_PARSE_UNLOCK (parse); } /** @@ -2607,10 +2598,8 @@ gst_base_parse_set_passthrough (GstBaseParse * parse, gboolean passthrough) { g_return_if_fail (parse != NULL); - GST_BASE_PARSE_LOCK (parse); parse->priv->passthrough = passthrough; GST_LOG_OBJECT (parse, "set passthrough: %d", passthrough); - GST_BASE_PARSE_UNLOCK (parse); } /** @@ -2633,7 +2622,6 @@ gst_base_parse_set_frame_props (GstBaseParse * parse, guint fps_num, { g_return_if_fail (parse != NULL); - GST_BASE_PARSE_LOCK (parse); parse->priv->fps_num = fps_num; parse->priv->fps_den = fps_den; if (!fps_num || !fps_den) { @@ -2659,7 +2647,6 @@ gst_base_parse_set_frame_props (GstBaseParse * parse, guint fps_num, "lead out: %d frames = %" G_GUINT64_FORMAT " ms", lead_in, parse->priv->lead_in_ts / GST_MSECOND, lead_out, parse->priv->lead_out_ts / GST_MSECOND); - GST_BASE_PARSE_UNLOCK (parse); } /** @@ -2676,10 +2663,8 @@ gst_base_parse_get_sync (GstBaseParse * parse) g_return_val_if_fail (parse != NULL, FALSE); - GST_BASE_PARSE_LOCK (parse); /* losing sync is pretty much a discont (and vice versa), no ? */ ret = !parse->priv->discont; - GST_BASE_PARSE_UNLOCK (parse); GST_DEBUG_OBJECT (parse, "sync: %d", ret); return ret; @@ -2699,10 +2684,8 @@ gst_base_parse_get_drain (GstBaseParse * parse) g_return_val_if_fail (parse != NULL, FALSE); - GST_BASE_PARSE_LOCK (parse); /* losing sync is pretty much a discont (and vice versa), no ? */ ret = parse->priv->drain; - GST_BASE_PARSE_UNLOCK (parse); GST_DEBUG_OBJECT (parse, "drain: %d", ret); return ret; @@ -2784,7 +2767,7 @@ gst_base_parse_query (GstPad * pad, GstQuery * query) GST_DEBUG_OBJECT (parse, "position query"); gst_query_parse_position (query, &format, NULL); - g_mutex_lock (parse->parse_lock); + GST_OBJECT_LOCK (parse); if (format == GST_FORMAT_BYTES) { dest_value = parse->priv->offset; res = TRUE; @@ -2793,7 +2776,7 @@ gst_base_parse_query (GstPad * pad, GstQuery * query) dest_value = parse->segment.last_stop; res = TRUE; } - g_mutex_unlock (parse->parse_lock); + GST_OBJECT_UNLOCK (parse); if (res) gst_query_set_position (query, format, dest_value); @@ -2802,10 +2785,8 @@ gst_base_parse_query (GstPad * pad, GstQuery * query) if (!res) { /* no precise result, upstream no idea either, then best estimate */ /* priv->offset is updated in both PUSH/PULL modes */ - g_mutex_lock (parse->parse_lock); res = gst_base_parse_convert (parse, GST_FORMAT_BYTES, parse->priv->offset, format, &dest_value); - g_mutex_unlock (parse->parse_lock); } } break; @@ -2823,9 +2804,7 @@ gst_base_parse_query (GstPad * pad, GstQuery * query) /* otherwise best estimate from us */ if (!res) { - g_mutex_lock (parse->parse_lock); res = gst_base_parse_get_duration (parse, format, &duration); - g_mutex_unlock (parse->parse_lock); if (res) gst_query_set_duration (query, format, duration); } diff --git a/gst/audioparsers/gstbaseparse.h b/gst/audioparsers/gstbaseparse.h index 27547a9..605bf84 100644 --- a/gst/audioparsers/gstbaseparse.h +++ b/gst/audioparsers/gstbaseparse.h @@ -110,26 +110,6 @@ G_BEGIN_DECLS */ #define GST_BASE_PARSE_BUFFER_FLAG_NO_FRAME GST_BUFFER_FLAG_LAST -/** - * GST_BASE_PARSE_LOCK: - * @obj: base parse instance - * - * Obtain a lock to protect the parse function from concurrent access. - * - * Since: 0.10.x - */ -#define GST_BASE_PARSE_LOCK(obj) g_mutex_lock (GST_BASE_PARSE_CAST (obj)->parse_lock) - -/** - * GST_BASE_PARSE_UNLOCK: - * @obj: base parse instance - * - * Release the lock that protects the parse function from concurrent access. - * - * Since: 0.10.x - */ -#define GST_BASE_PARSE_UNLOCK(obj) g_mutex_unlock (GST_BASE_PARSE_CAST (obj)->parse_lock) - /** * GstBaseParseSeekable: @@ -173,8 +153,6 @@ struct _GstBaseParse { /* Segment event that closes the running segment prior to SEEK */ GstEvent *close_segment; - GMutex *parse_lock; - /*< private >*/ gpointer _gst_reserved[GST_PADDING_LARGE]; GstBaseParsePrivate *priv; |
|
From: <mn...@ke...> - 2011-01-28 11:51:39
|
Module: gst-plugins-bad Branch: master Commit: e54e2a9616fe759b09a6908bab4535d09bafbe6f URL: http://cgit.freedesktop.org/gstreamer/gst-plugins-bad/commit/?id=e54e2a9616fe759b09a6908bab4535d09bafbe6f Author: Mark Nauwelaerts <mar...@co...> Date: Fri Dec 10 15:59:49 2010 +0100 baseparse: fix reverse playback handling --- gst/audioparsers/gstbaseparse.c | 12 +++++++++++- 1 files changed, 11 insertions(+), 1 deletions(-) diff --git a/gst/audioparsers/gstbaseparse.c b/gst/audioparsers/gstbaseparse.c index 1dee034..aee1c9a 100644 --- a/gst/audioparsers/gstbaseparse.c +++ b/gst/audioparsers/gstbaseparse.c @@ -2153,11 +2153,17 @@ gst_base_parse_handle_previous_fragment (GstBaseParse * parse) if (ret != GST_FLOW_OK) goto exit; + /* offset will increase again as fragment is processed/parsed */ + parse->priv->last_offset = offset; + gst_adapter_push (parse->adapter, buffer); ret = gst_base_parse_process_fragment (parse, FALSE); if (ret != GST_FLOW_OK) goto exit; + /* force previous fragment */ + parse->priv->offset = -1; + exit: return ret; } @@ -2275,7 +2281,9 @@ gst_base_parse_loop (GstPad * pad) * first fragment (closest to stop time) is handled normally below, * then we pull in fragments going backwards */ if (parse->segment.rate < 0.0) { - if (GST_CLOCK_TIME_IS_VALID (parse->priv->last_ts)) { + /* check if we jumped back to a previous fragment, + * which is a post-first fragment */ + if (parse->priv->offset < 0) { ret = gst_base_parse_handle_previous_fragment (parse); goto done; } @@ -2294,6 +2302,8 @@ gst_base_parse_loop (GstPad * pad) GST_DEBUG_OBJECT (parse, "downstream has reached end of segment"); /* push what was accumulated during loop run */ gst_base_parse_process_fragment (parse, TRUE); + /* force previous fragment */ + parse->priv->offset = -1; ret = GST_FLOW_OK; } |
|
From: <mn...@ke...> - 2011-01-28 11:51:38
|
Module: gst-plugins-bad Branch: master Commit: 695c9599f4ff2fa586c8d62e39753cf92fa8f9a7 URL: http://cgit.freedesktop.org/gstreamer/gst-plugins-bad/commit/?id=695c9599f4ff2fa586c8d62e39753cf92fa8f9a7 Author: Mark Nauwelaerts <mar...@co...> Date: Fri Dec 10 14:56:13 2010 +0100 baseparse: minor typo and debug statement cleanup --- gst/audioparsers/gstbaseparse.c | 7 ++++--- 1 files changed, 4 insertions(+), 3 deletions(-) diff --git a/gst/audioparsers/gstbaseparse.c b/gst/audioparsers/gstbaseparse.c index 15455ce..1dee034 100644 --- a/gst/audioparsers/gstbaseparse.c +++ b/gst/audioparsers/gstbaseparse.c @@ -686,11 +686,11 @@ gst_base_parse_sink_event (GstPad * pad, GstEvent * event) gboolean handled = FALSE; gboolean ret = TRUE; - parse = GST_BASE_PARSE (gst_pad_get_parent (pad)); bclass = GST_BASE_PARSE_GET_CLASS (parse); - GST_DEBUG_OBJECT (parse, "handling event %d", GST_EVENT_TYPE (event)); + GST_DEBUG_OBJECT (parse, "handling event %d, %s", GST_EVENT_TYPE (event), + GST_EVENT_TYPE_NAME (event)); /* Cache all events except EOS, NEWSEGMENT and FLUSH_STOP if we have a * pending segment */ @@ -2397,7 +2397,7 @@ gst_base_parse_sink_activate (GstPad * sinkpad) /** * gst_base_parse_activate: * @parse: #GstBaseParse. - * @active: TRUE if element will be activated, FALSE if disactivated. + * @active: TRUE if element will be activated, FALSE if deactivated. * * Returns: TRUE if the operation succeeded. */ @@ -2564,6 +2564,7 @@ gst_base_parse_set_seek (GstBaseParse * parse, { parse->priv->seekable = seek; parse->priv->bitrate = bitrate; + GST_DEBUG_OBJECT (parse, "seek %d, bitrate %d", seek, bitrate); } |
|
From: <en...@ke...> - 2011-01-28 10:24:41
|
Module: gstreamer Branch: master Commit: c5a57190ee35dfe341da88d7048f7d9fe12f1ee0 URL: http://cgit.freedesktop.org/gstreamer/gstreamer/commit/?id=c5a57190ee35dfe341da88d7048f7d9fe12f1ee0 Author: Stefan Kost <en...@us...> Date: Wed Jan 12 16:03:30 2011 +0200 typefind: don't take object lock for reading the found caps Once we switch to normal mode, we're not typefinding anymore and thus the caps will not change. Therefore can avoid the object lock in the data-flow path. The locking was added in order to fix bug #608877. --- plugins/elements/gsttypefindelement.c | 7 ++----- 1 files changed, 2 insertions(+), 5 deletions(-) diff --git a/plugins/elements/gsttypefindelement.c b/plugins/elements/gsttypefindelement.c index 0b545e0..baf36c4 100644 --- a/plugins/elements/gsttypefindelement.c +++ b/plugins/elements/gsttypefindelement.c @@ -765,10 +765,9 @@ gst_type_find_element_chain (GstPad * pad, GstBuffer * buffer) /* we should already have called GST_ELEMENT_ERROR */ return GST_FLOW_ERROR; case MODE_NORMAL: - GST_OBJECT_LOCK (typefind); + /* don't take object lock as typefind->caps should not change anymore */ buffer = gst_buffer_make_metadata_writable (buffer); gst_buffer_set_caps (buffer, typefind->caps); - GST_OBJECT_UNLOCK (typefind); return gst_pad_push (typefind->src, buffer); case MODE_TYPEFIND:{ GST_OBJECT_LOCK (typefind); @@ -874,11 +873,9 @@ gst_type_find_element_getrange (GstPad * srcpad, ret = gst_pad_pull_range (typefind->sink, offset, length, buffer); if (ret == GST_FLOW_OK && buffer && *buffer) { - GST_OBJECT_LOCK (typefind); - + /* don't take object lock as typefind->caps should not change anymore */ /* we assume that pulled buffers are meta-data writable */ gst_buffer_set_caps (*buffer, typefind->caps); - GST_OBJECT_UNLOCK (typefind); } return ret; |
|
From: <sl...@ke...> - 2011-01-27 16:47:39
|
Module: gst-editing-services Branch: master Commit: 94d448cacead10673eca21c6dfa6f9ecc61ab30b URL: http://cgit.freedesktop.org/gstreamer/gst-editing-services/commit/?id=94d448cacead10673eca21c6dfa6f9ecc61ab30b Author: Sebastian Dröge <seb...@co...> Date: Thu Jan 27 17:46:19 2011 +0100 examples: Fix uninitialized variable compiler warning with gcc 4.6 --- tests/examples/concatenate.c | 8 +++++--- 1 files changed, 5 insertions(+), 3 deletions(-) diff --git a/tests/examples/concatenate.c b/tests/examples/concatenate.c index 05084cb..09194e5 100644 --- a/tests/examples/concatenate.c +++ b/tests/examples/concatenate.c @@ -68,7 +68,7 @@ make_profile_from_info (GstDiscovererInfo * info) /* For each on the formats add stream profiles */ for (tmp = substreams; tmp; tmp = tmp->next) { GstDiscovererStreamInfo *stream = GST_DISCOVERER_STREAM_INFO (tmp->data); - GstEncodingProfile *sprof; + GstEncodingProfile *sprof = NULL; if (GST_IS_DISCOVERER_VIDEO_INFO (stream)) { sprof = (GstEncodingProfile *) @@ -78,10 +78,12 @@ make_profile_from_info (GstDiscovererInfo * info) sprof = (GstEncodingProfile *) gst_encoding_audio_profile_new (gst_discoverer_stream_info_get_caps (stream), NULL, NULL, 1); - } else + } else { GST_WARNING ("Unsupported streams"); + } - gst_encoding_container_profile_add_profile (profile, sprof); + if (sprof) + gst_encoding_container_profile_add_profile (profile, sprof); } if (substreams) gst_discoverer_stream_info_list_free (substreams); |
|
From: <ale...@ke...> - 2011-01-27 16:45:00
|
Module: gst-editing-services Branch: master Commit: 77d789b077f8d9f600982388d5ca46085f7d2266 URL: http://cgit.freedesktop.org/gstreamer/gst-editing-services/commit/?id=77d789b077f8d9f600982388d5ca46085f7d2266 Author: Alessandro Decina <ale...@co...> Date: Thu Jan 27 17:43:47 2011 +0100 ges: fix compiler warnings --- ges/ges-keyfile-formatter.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ges/ges-keyfile-formatter.c b/ges/ges-keyfile-formatter.c index 090fe83..9ea90d3 100644 --- a/ges/ges-keyfile-formatter.c +++ b/ges/ges-keyfile-formatter.c @@ -401,8 +401,8 @@ load_keyfile (GESFormatter * keyfile_formatter, GESTimeline * timeline) data = ges_formatter_get_data (keyfile_formatter, &length); if (!g_key_file_load_from_data (kf, data, length, G_KEY_FILE_NONE, &error)) { ret = FALSE; - GST_ERROR (error->message); - GST_INFO (data); + GST_ERROR ("%s", error->message); + GST_INFO ("%s", data); goto free_kf; } |
|
From: <sl...@ke...> - 2011-01-27 16:33:40
|
Module: gst-plugins-bad Branch: master Commit: 36e037be6786eae66ab7f6520e23a3e57ed3640e URL: http://cgit.freedesktop.org/gstreamer/gst-plugins-bad/commit/?id=36e037be6786eae66ab7f6520e23a3e57ed3640e Author: Sebastian Dröge <seb...@co...> Date: Thu Jan 27 17:32:49 2011 +0100 vdpau: Initialize some variables to make gcc 4.6 happy --- sys/vdpau/gstvdpvideopostprocess.c | 3 +++ sys/vdpau/h264/gstvdph264dec.c | 3 +-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/sys/vdpau/gstvdpvideopostprocess.c b/sys/vdpau/gstvdpvideopostprocess.c index 1091c0e..0b6f338 100644 --- a/sys/vdpau/gstvdpvideopostprocess.c +++ b/sys/vdpau/gstvdpvideopostprocess.c @@ -248,6 +248,9 @@ gst_vdp_vpp_get_required_pictures (GstVdpVideoPostProcess * vpp) case GST_VDP_DEINTERLACE_METHOD_TEMPORAL_SPATIAL: ret = 2; break; + default: + g_assert_not_reached (); + break; } return ret; diff --git a/sys/vdpau/h264/gstvdph264dec.c b/sys/vdpau/h264/gstvdph264dec.c index 2a237b1..4abc009 100644 --- a/sys/vdpau/h264/gstvdph264dec.c +++ b/sys/vdpau/h264/gstvdph264dec.c @@ -168,8 +168,7 @@ gst_vdp_h264_dec_calculate_poc (GstVdpH264Dec * h264_dec, GstH264Slice * slice) { GstH264Picture *pic; GstH264Sequence *seq; - - guint poc; + guint poc = 0; pic = slice->picture; seq = pic->sequence; |
|
From: <sl...@ke...> - 2011-01-27 16:29:44
|
Module: gst-plugins-bad Branch: master Commit: 44da64d86bb3da531bf9ebc32037af34635fa364 URL: http://cgit.freedesktop.org/gstreamer/gst-plugins-bad/commit/?id=44da64d86bb3da531bf9ebc32037af34635fa364 Author: Sebastian Dröge <seb...@co...> Date: Thu Jan 27 17:29:12 2011 +0100 basevideodecoder: Initialize some variables to make gcc 4.6 happy --- gst-libs/gst/video/gstbasevideodecoder.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/gst-libs/gst/video/gstbasevideodecoder.c b/gst-libs/gst/video/gstbasevideodecoder.c index bcad367..eba17a4 100644 --- a/gst-libs/gst/video/gstbasevideodecoder.c +++ b/gst-libs/gst/video/gstbasevideodecoder.c @@ -319,7 +319,7 @@ gst_base_video_decoder_src_event (GstPad * pad, GstEvent * event) GstSeekFlags flags; GstSeekType cur_type, stop_type; gint64 cur, stop; - gint64 tcur, tstop; + gint64 tcur = -1, tstop = -1; GST_DEBUG ("seek event"); |
|
From: <mn...@ke...> - 2011-01-27 15:04:34
|
Module: gst-plugins-good Branch: master Commit: 8d90dba55e8c4517e54b8ea900fee24145d75c7c URL: http://cgit.freedesktop.org/gstreamer/gst-plugins-good/commit/?id=8d90dba55e8c4517e54b8ea900fee24145d75c7c Author: Mark Nauwelaerts <mar...@co...> Date: Thu Jan 27 16:02:46 2011 +0100 avidemux: initialize local variable to please mingw32 compiler --- gst/avi/gstavidemux.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/gst/avi/gstavidemux.c b/gst/avi/gstavidemux.c index c2741e3..a4a0525 100644 --- a/gst/avi/gstavidemux.c +++ b/gst/avi/gstavidemux.c @@ -696,7 +696,7 @@ gst_avi_demux_seek_streams_index (GstAviDemux * avi, guint64 offset, GstAviIndexEntry *entry; gint i; gint64 val, min = offset; - guint index; + guint index = 0; for (i = 0; i < avi->num_streams; i++) { stream = &avi->stream[i]; |
|
From: <mn...@ke...> - 2011-01-27 15:04:34
|
Module: gst-plugins-good Branch: master Commit: 7def8c9b9860be41ffdfa8436b7442e36be6cea8 URL: http://cgit.freedesktop.org/gstreamer/gst-plugins-good/commit/?id=7def8c9b9860be41ffdfa8436b7442e36be6cea8 Author: Mark Nauwelaerts <mar...@co...> Date: Wed Jan 26 22:21:31 2011 +0100 udp: use socklen_t where appropriate rather than custom type In particular, fixes Cygwin build where socklen_t is defined as int in line with native win32 api definition. --- gst/udp/gstmultiudpsink.c | 6 +----- gst/udp/gstudpnetutils.h | 3 +++ gst/udp/gstudpsrc.c | 9 +-------- 3 files changed, 5 insertions(+), 13 deletions(-) diff --git a/gst/udp/gstmultiudpsink.c b/gst/udp/gstmultiudpsink.c index 78e491b..dd93e3f 100644 --- a/gst/udp/gstmultiudpsink.c +++ b/gst/udp/gstmultiudpsink.c @@ -913,11 +913,7 @@ gst_multiudpsink_init_send (GstMultiUDPSink * sink) GList *clients; GstUDPClient *client; int sndsize, ret; -#ifdef G_OS_WIN32 - gint len; -#else - guint len; -#endif + socklen_t len; if (sink->sockfd == -1) { GST_DEBUG_OBJECT (sink, "creating sockets"); diff --git a/gst/udp/gstudpnetutils.h b/gst/udp/gstudpnetutils.h index 6dd8d75..ec863bd 100644 --- a/gst/udp/gstudpnetutils.h +++ b/gst/udp/gstudpnetutils.h @@ -32,6 +32,9 @@ #define WINVER 0x0501 #include <winsock2.h> #include <ws2tcpip.h> +#ifndef socklen_t +#define socklen_t int +#endif /* Needed for GstObject and GST_WARNING_OBJECT */ #include <gst/gstobject.h> diff --git a/gst/udp/gstudpsrc.c b/gst/udp/gstudpsrc.c index b76385b..f00c74b 100644 --- a/gst/udp/gstudpsrc.c +++ b/gst/udp/gstudpsrc.c @@ -117,9 +117,6 @@ #endif #include <gst/netbuffer/gstnetbuffer.h> -#ifdef G_OS_WIN32 -typedef int socklen_t; -#endif #ifdef HAVE_FIONREAD_IN_SYS_FILIO #include <sys/filio.h> @@ -778,11 +775,7 @@ gst_udpsrc_start (GstBaseSrc * bsrc) gint ret; int rcvsize; struct sockaddr_storage bind_address; -#ifdef G_OS_WIN32 - gint len; -#else - guint len; -#endif + socklen_t len; src = GST_UDPSRC (bsrc); if (src->sockfd == -1) { |
|
From: <tp...@ke...> - 2011-01-27 15:03:26
|
Module: gst-plugins-bad Branch: master Commit: 5d754e549a1ceca38736ba675dc8601e579223ee URL: http://cgit.freedesktop.org/gstreamer/gst-plugins-bad/commit/?id=5d754e549a1ceca38736ba675dc8601e579223ee Author: Tim-Philipp Müller <tim...@co...> Date: Wed Jan 26 18:45:56 2011 +0000 jp2kdec, jp2kenc: add support v308 (4:4:4 YUV) Because we can. --- ext/jp2k/gstjasperdec.c | 2 +- ext/jp2k/gstjasperenc.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ext/jp2k/gstjasperdec.c b/ext/jp2k/gstjasperdec.c index 588a98f..595134c 100644 --- a/ext/jp2k/gstjasperdec.c +++ b/ext/jp2k/gstjasperdec.c @@ -65,7 +65,7 @@ static GstStaticPadTemplate gst_jasper_dec_src_template = GST_STATIC_CAPS (GST_VIDEO_CAPS_RGB "; " GST_VIDEO_CAPS_BGR "; " GST_VIDEO_CAPS_RGBx "; " GST_VIDEO_CAPS_xRGB "; " GST_VIDEO_CAPS_BGRx "; " GST_VIDEO_CAPS_xBGR "; " - GST_VIDEO_CAPS_YUV ("{ I420, YV12, YUY2, UYVY, Y41B, Y42B }")) + GST_VIDEO_CAPS_YUV ("{ I420, YV12, YUY2, UYVY, Y41B, Y42B, v308 }")) ); static void gst_jasper_dec_set_property (GObject * object, guint prop_id, diff --git a/ext/jp2k/gstjasperenc.c b/ext/jp2k/gstjasperenc.c index a372be2..27073e2 100644 --- a/ext/jp2k/gstjasperenc.c +++ b/ext/jp2k/gstjasperenc.c @@ -49,7 +49,7 @@ static GstStaticPadTemplate gst_jasper_enc_sink_template = GST_STATIC_CAPS (GST_VIDEO_CAPS_RGB "; " GST_VIDEO_CAPS_BGR "; " GST_VIDEO_CAPS_RGBx "; " GST_VIDEO_CAPS_xRGB "; " GST_VIDEO_CAPS_BGRx "; " GST_VIDEO_CAPS_xBGR "; " - GST_VIDEO_CAPS_YUV ("{ I420, YV12 }")) + GST_VIDEO_CAPS_YUV ("{ I420, YV12, v308 }")) ); static GstStaticPadTemplate gst_jasper_enc_src_template = |
|
From: <mn...@ke...> - 2011-01-27 11:30:32
|
Module: gst-plugins-good Branch: master Commit: cb76a13cc98367b955c8e2a02c4d4dacd2a5bd04 URL: http://cgit.freedesktop.org/gstreamer/gst-plugins-good/commit/?id=cb76a13cc98367b955c8e2a02c4d4dacd2a5bd04 Author: Mark Nauwelaerts <mar...@co...> Date: Thu Jan 27 12:16:46 2011 +0100 qtdemux: mind rounding issues when converting from global time to mov time In particular, this avoids missing the intended keyframe when first converting from the frame's mov time to global segment time, and then back from global time to mov time when activating the segment. --- gst/qtdemux/qtdemux.c | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-) diff --git a/gst/qtdemux/qtdemux.c b/gst/qtdemux/qtdemux.c index 2076ba9..b6457ce 100644 --- a/gst/qtdemux/qtdemux.c +++ b/gst/qtdemux/qtdemux.c @@ -848,7 +848,8 @@ gst_qtdemux_find_index (GstQTDemux * qtdemux, QtDemuxStream * str, guint32 index; /* convert media_time to mov format */ - media_time = gst_util_uint64_scale (media_time, str->timescale, GST_SECOND); + media_time = + gst_util_uint64_scale_ceil (media_time, str->timescale, GST_SECOND); result = gst_util_array_binary_search (str->samples, str->stbl_index + 1, sizeof (QtDemuxSample), (GCompareDataFunc) find_func, |
|
From: <thi...@ke...> - 2011-01-26 22:37:39
|
Module: gst-plugins-bad Branch: master Commit: 6395b4590886cf8d02d7198f8c4968c19a137848 URL: http://cgit.freedesktop.org/gstreamer/gst-plugins-bad/commit/?id=6395b4590886cf8d02d7198f8c4968c19a137848 Author: Thiago Santos <thi...@co...> Date: Tue Jan 25 18:10:18 2011 -0300 camerabin2: Handle videosink states more carefully When going to ready, camerabin2 could create an empty file if the videosink was put to ready. This patch only puts videosink to ready on the PAUSED_TO_READY state change if it is on PAUSED or PLAYING. --- gst/camerabin2/gstcamerabin2.c | 4 +++- 1 files changed, 3 insertions(+), 1 deletions(-) diff --git a/gst/camerabin2/gstcamerabin2.c b/gst/camerabin2/gstcamerabin2.c index 8b82c7f..22d37e9 100644 --- a/gst/camerabin2/gstcamerabin2.c +++ b/gst/camerabin2/gstcamerabin2.c @@ -630,8 +630,10 @@ gst_camera_bin_change_state (GstElement * element, GstStateChange trans) switch (trans) { case GST_STATE_CHANGE_PAUSED_TO_READY: + if (GST_STATE (camera->videosink) >= GST_STATE_PAUSED) + gst_element_set_state (camera->videosink, GST_STATE_READY); + gst_tag_setter_reset_tags (GST_TAG_SETTER (camera)); - gst_element_set_state (camera->videosink, GST_STATE_READY); break; case GST_STATE_CHANGE_READY_TO_NULL: gst_element_set_state (camera->videosink, GST_STATE_NULL); |
|
From: <thi...@ke...> - 2011-01-26 22:37:17
|
Module: gst-plugins-bad Branch: master Commit: 68bff617327a81126c292a32054c9386d63de327 URL: http://cgit.freedesktop.org/gstreamer/gst-plugins-bad/commit/?id=68bff617327a81126c292a32054c9386d63de327 Author: Thiago Santos <thi...@co...> Date: Wed Jan 26 11:40:43 2011 -0300 camerabin2: Do not forget to unref some stuff Cleanup properly by unrefing the encoding profile and preview caps --- gst/camerabin2/gstcamerabin2.c | 6 ++++++ gst/camerabin2/gstwrappercamerabinsrc.c | 3 +++ 2 files changed, 9 insertions(+), 0 deletions(-) diff --git a/gst/camerabin2/gstcamerabin2.c b/gst/camerabin2/gstcamerabin2.c index 22d37e9..456a7ea 100644 --- a/gst/camerabin2/gstcamerabin2.c +++ b/gst/camerabin2/gstcamerabin2.c @@ -278,6 +278,12 @@ gst_camera_bin_dispose (GObject * object) if (camerabin->imagebin_capsfilter) gst_object_unref (camerabin->imagebin_capsfilter); + if (camerabin->video_profile) + gst_encoding_profile_unref (camerabin->video_profile); + + if (camerabin->preview_caps) + gst_caps_replace (&camerabin->preview_caps, NULL); + G_OBJECT_CLASS (parent_class)->dispose (object); } diff --git a/gst/camerabin2/gstwrappercamerabinsrc.c b/gst/camerabin2/gstwrappercamerabinsrc.c index 66bad9a..864373b 100644 --- a/gst/camerabin2/gstwrappercamerabinsrc.c +++ b/gst/camerabin2/gstwrappercamerabinsrc.c @@ -71,6 +71,9 @@ gst_wrapper_camera_bin_src_dispose (GObject * object) self->preview_pipeline = NULL; } + if (self->preview_caps) + gst_caps_replace (&self->preview_caps, NULL); + G_OBJECT_CLASS (parent_class)->dispose (object); } |
|
From: <mn...@ke...> - 2011-01-26 22:37:12
|
Module: gst-plugins-bad Branch: master Commit: 3da135ce02b37bf16b9b6f5a56af41d4c395b5c8 URL: http://cgit.freedesktop.org/gstreamer/gst-plugins-bad/commit/?id=3da135ce02b37bf16b9b6f5a56af41d4c395b5c8 Author: Mark Nauwelaerts <mar...@co...> Date: Fri Jan 14 14:08:38 2011 +0100 baseparse: avoid loop in frame locating interpolation --- gst/audioparsers/gstbaseparse.c | 7 ++++--- 1 files changed, 4 insertions(+), 3 deletions(-) diff --git a/gst/audioparsers/gstbaseparse.c b/gst/audioparsers/gstbaseparse.c index 59355c7..927c355 100644 --- a/gst/audioparsers/gstbaseparse.c +++ b/gst/audioparsers/gstbaseparse.c @@ -3032,6 +3032,7 @@ gst_base_parse_locate_time (GstBaseParse * parse, GstClockTime * _time, gst_util_uint64_scale (hpos - lpos, time - ltime, htime - ltime) + lpos - chunk; } else { + /* should mean lpos == hpos, since lpos <= hpos is invariant */ newpos = lpos; /* we check this case once, but not forever, so break loop */ cont = FALSE; @@ -3065,8 +3066,7 @@ gst_base_parse_locate_time (GstBaseParse * parse, GstClockTime * _time, break; } else if (newtime > time) { /* overshoot */ - newpos -= newpos == hpos ? chunk : 0; - hpos = CLAMP (newpos, lpos, hpos); + hpos = (newpos >= hpos) ? MAX (lpos, hpos - chunk) : MAX (lpos, newpos); htime = newtime; } else if (newtime + tolerance > time) { /* close enough undershoot */ @@ -3076,9 +3076,10 @@ gst_base_parse_locate_time (GstBaseParse * parse, GstClockTime * _time, } else if (newtime < ltime) { /* so a position beyond lpos resulted in earlier time than ltime ... */ GST_DEBUG_OBJECT (parse, "non-ascending time; aborting"); + break; } else { /* undershoot too far */ - newpos += newpos == hpos ? chunk : 0; + newpos += newpos == lpos ? chunk : 0; lpos = CLAMP (newpos, lpos, hpos); ltime = newtime; } |
|
From: <en...@ke...> - 2011-01-26 22:37:11
|
Module: gst-editing-services Branch: master Commit: a447bc5b02f678f61c12fd24245e37ed38bc3a6d URL: http://cgit.freedesktop.org/gstreamer/gst-editing-services/commit/?id=a447bc5b02f678f61c12fd24245e37ed38bc3a6d Author: Stefan Kost <en...@us...> Date: Wed Jan 26 23:50:00 2011 +0200 launch: fix typo in help output --- tools/ges-launch.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/ges-launch.c b/tools/ges-launch.c index 2c9d26c..9868cd3 100644 --- a/tools/ges-launch.c +++ b/tools/ges-launch.c @@ -414,9 +414,9 @@ main (int argc, gchar ** argv) if (!g_thread_supported ()) g_thread_init (NULL); - ctx = g_option_context_new ("- plays or render a timeline."); + ctx = g_option_context_new ("- plays or renders a timeline."); g_option_context_set_summary (ctx, - "A timline is a sequence of files, patterns, and transitions.\n" + "A timeline is a sequence of files, patterns, and transitions.\n" "Transitions can only go between patterns or files.\n\n" "A file is a tripplet of:\n" " * filename\n" |
|
From: <thi...@ke...> - 2011-01-26 21:53:07
|
Module: gst-plugins-bad Branch: master Commit: b66dde57464029735750f3c415cd402596cc550d URL: http://cgit.freedesktop.org/gstreamer/gst-plugins-bad/commit/?id=b66dde57464029735750f3c415cd402596cc550d Author: Thiago Santos <thi...@co...> Date: Wed Jan 26 10:54:53 2011 -0300 camerabin2: Add names to some elements Adds names to instances of some elements to make debugging easier --- gst/camerabin2/camerabingeneral.c | 13 ++++++++----- gst/camerabin2/camerabingeneral.h | 5 +++-- gst/camerabin2/gstimagecapturebin.c | 9 +++++---- gst/camerabin2/gstwrappercamerabinsrc.c | 28 +++++++++++++++++++--------- 4 files changed, 35 insertions(+), 20 deletions(-) diff --git a/gst/camerabin2/camerabingeneral.c b/gst/camerabin2/camerabingeneral.c index a354075..d6c1c86 100644 --- a/gst/camerabin2/camerabingeneral.c +++ b/gst/camerabin2/camerabingeneral.c @@ -138,6 +138,7 @@ gst_camerabin_try_add_element (GstBin * bin, const gchar * srcpad, * gst_camerabin_create_and_add_element: * @bin: tries adding an element to this bin * @elem_name: name of the element to be created + * @instance_name: name of the instance of the element to be created * * Creates an element according to given name and * adds it to given @bin. Looks for an unconnected src pad @@ -146,14 +147,15 @@ gst_camerabin_try_add_element (GstBin * bin, const gchar * srcpad, * Returns: pointer to the new element if successful, NULL otherwise. */ GstElement * -gst_camerabin_create_and_add_element (GstBin * bin, const gchar * elem_name) +gst_camerabin_create_and_add_element (GstBin * bin, const gchar * elem_name, + const gchar * instance_name) { GstElement *new_elem; g_return_val_if_fail (bin, FALSE); g_return_val_if_fail (elem_name, FALSE); - new_elem = gst_element_factory_make (elem_name, NULL); + new_elem = gst_element_factory_make (elem_name, instance_name); if (!new_elem) { GST_ELEMENT_ERROR (bin, CORE, MISSING_PLUGIN, (NULL), ("could not create \"%s\" element.", elem_name)); @@ -187,7 +189,8 @@ try_element (GstElement * bin, GstElement * element, gboolean unref) GstElement * gst_camerabin_setup_default_element (GstBin * bin, GstElement * user_elem, - const gchar * auto_elem_name, const gchar * default_elem_name) + const gchar * auto_elem_name, const gchar * default_elem_name, + const gchar * instance_name) { GstElement *elem; @@ -197,13 +200,13 @@ gst_camerabin_setup_default_element (GstBin * bin, GstElement * user_elem, } else { /* only try fallback if no specific sink was chosen */ GST_DEBUG_OBJECT (bin, "trying %s", auto_elem_name); - elem = gst_element_factory_make (auto_elem_name, NULL); + elem = gst_element_factory_make (auto_elem_name, instance_name); elem = try_element (GST_ELEMENT_CAST (bin), elem, TRUE); if (elem == NULL) { /* if default sink from config.h is different then try it too */ if (strcmp (default_elem_name, auto_elem_name)) { GST_DEBUG_OBJECT (bin, "trying %s", default_elem_name); - elem = gst_element_factory_make (default_elem_name, NULL); + elem = gst_element_factory_make (default_elem_name, instance_name); elem = try_element (GST_ELEMENT_CAST (bin), elem, TRUE); } } diff --git a/gst/camerabin2/camerabingeneral.h b/gst/camerabin2/camerabingeneral.h index 096038b..4e0812a 100644 --- a/gst/camerabin2/camerabingeneral.h +++ b/gst/camerabin2/camerabingeneral.h @@ -43,9 +43,10 @@ gboolean gst_camerabin_try_add_element (GstBin * bin, const gchar * srcpad, GstE gboolean gst_camerabin_add_element (GstBin * bin, GstElement * new_elem); gboolean gst_camerabin_add_element_full (GstBin * bin, const gchar * srcpad, GstElement * new_elem, const gchar * dstpad); -GstElement *gst_camerabin_create_and_add_element (GstBin * bin, const gchar * elem_name); +GstElement *gst_camerabin_create_and_add_element (GstBin * bin, const gchar * elem_name, const gchar * instance_name); -GstElement * gst_camerabin_setup_default_element (GstBin * bin, GstElement *user_elem, const gchar *auto_elem_name, const gchar *default_elem_name); +GstElement * gst_camerabin_setup_default_element (GstBin * bin, GstElement *user_elem, const gchar *auto_elem_name, const gchar *default_elem_name, + const gchar * instance_elem_name); void gst_camerabin_remove_elements_from_bin (GstBin * bin); diff --git a/gst/camerabin2/gstimagecapturebin.c b/gst/camerabin2/gstimagecapturebin.c index 32419ef..2a5bcdb 100644 --- a/gst/camerabin2/gstimagecapturebin.c +++ b/gst/camerabin2/gstimagecapturebin.c @@ -261,7 +261,7 @@ gst_image_capture_bin_create_elements (GstImageCaptureBin * imagebin) /* create elements */ colorspace = gst_camerabin_create_and_add_element (GST_BIN (imagebin), - DEFAULT_COLORSPACE); + DEFAULT_COLORSPACE, "imagebin-colorspace"); if (!colorspace) goto error; @@ -273,7 +273,7 @@ gst_image_capture_bin_create_elements (GstImageCaptureBin * imagebin) } else { imagebin->encoder = gst_camerabin_create_and_add_element (GST_BIN (imagebin), - DEFAULT_ENCODER); + DEFAULT_ENCODER, "imagebin-encoder"); if (!imagebin->encoder) goto error; } @@ -286,13 +286,14 @@ gst_image_capture_bin_create_elements (GstImageCaptureBin * imagebin) } else { imagebin->muxer = gst_camerabin_create_and_add_element (GST_BIN (imagebin), - DEFAULT_MUXER); + DEFAULT_MUXER, "imagebin-muxer"); if (!imagebin->muxer) goto error; } imagebin->sink = - gst_camerabin_create_and_add_element (GST_BIN (imagebin), DEFAULT_SINK); + gst_camerabin_create_and_add_element (GST_BIN (imagebin), DEFAULT_SINK, + "imagebin-sink"); if (!imagebin->sink) goto error; diff --git a/gst/camerabin2/gstwrappercamerabinsrc.c b/gst/camerabin2/gstwrappercamerabinsrc.c index afcd951..66bad9a 100644 --- a/gst/camerabin2/gstwrappercamerabinsrc.c +++ b/gst/camerabin2/gstwrappercamerabinsrc.c @@ -298,7 +298,8 @@ gst_wrapper_camera_bin_src_construct_pipeline (GstBaseCameraSrc * bcamsrc) /* Add application set or default video src element */ if (!(self->src_vid_src = gst_camerabin_setup_default_element (cbin, - self->app_vid_src, "autovideosrc", DEFAULT_VIDEOSRC))) { + self->app_vid_src, "autovideosrc", DEFAULT_VIDEOSRC, + "camerasrc-real-src"))) { self->src_vid_src = NULL; goto done; } else { @@ -319,24 +320,30 @@ gst_wrapper_camera_bin_src_construct_pipeline (GstBaseCameraSrc * bcamsrc) gst_object_unref (pad); } - if (!gst_camerabin_create_and_add_element (cbin, "ffmpegcolorspace")) + if (!gst_camerabin_create_and_add_element (cbin, "ffmpegcolorspace", + "src-colorspace")) goto done; if (!(self->src_filter = - gst_camerabin_create_and_add_element (cbin, "capsfilter"))) + gst_camerabin_create_and_add_element (cbin, "capsfilter", + "src-capsfilter"))) goto done; if (!(self->src_zoom_crop = - gst_camerabin_create_and_add_element (cbin, "videocrop"))) + gst_camerabin_create_and_add_element (cbin, "videocrop", + "zoom-crop"))) goto done; if (!(self->src_zoom_scale = - gst_camerabin_create_and_add_element (cbin, "videoscale"))) + gst_camerabin_create_and_add_element (cbin, "videoscale", + "zoom-scale"))) goto done; if (!(self->src_zoom_filter = - gst_camerabin_create_and_add_element (cbin, "capsfilter"))) + gst_camerabin_create_and_add_element (cbin, "capsfilter", + "zoom-capsfilter"))) goto done; - if (!(tee = gst_camerabin_create_and_add_element (cbin, "tee"))) + if (!(tee = + gst_camerabin_create_and_add_element (cbin, "tee", "camerasrc-tee"))) goto done; /* viewfinder pad */ @@ -345,9 +352,12 @@ gst_wrapper_camera_bin_src_construct_pipeline (GstBaseCameraSrc * bcamsrc) gst_object_unref (vf_pad); /* the viewfinder should always work, so we add some converters to it */ - if (!gst_camerabin_create_and_add_element (cbin, "ffmpegcolorspace")) + if (!gst_camerabin_create_and_add_element (cbin, "ffmpegcolorspace", + "viewfinder-colorspace")) goto done; - if (!(videoscale = gst_camerabin_create_and_add_element (cbin, "videoscale"))) + if (!(videoscale = + gst_camerabin_create_and_add_element (cbin, "videoscale", + "viewfinder-scale"))) goto done; /* image/video pad from tee */ |
|
From: <thi...@ke...> - 2011-01-26 21:53:07
|
Module: gst-plugins-bad Branch: master Commit: 86ae3777fda5c5123aafabb7369193fe593b0d90 URL: http://cgit.freedesktop.org/gstreamer/gst-plugins-bad/commit/?id=86ae3777fda5c5123aafabb7369193fe593b0d90 Author: Thiago Santos <thi...@co...> Date: Wed Jan 26 14:27:21 2011 -0300 tests: camerabin2: Use the correct for limit There are 3 taglists to be tested, not 2 --- tests/check/elements/camerabin2.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/tests/check/elements/camerabin2.c b/tests/check/elements/camerabin2.c index b41fe0e..23c9379 100644 --- a/tests/check/elements/camerabin2.c +++ b/tests/check/elements/camerabin2.c @@ -846,7 +846,7 @@ GST_START_TEST (test_image_capture_with_tags) gst_element_set_state (GST_ELEMENT (camera), GST_STATE_NULL); - for (i = 0; i < 2; i++) { + for (i = 0; i < 3; i++) { check_file_validity (IMAGE_FILENAME, i, taglists[i], 0, 0); gst_tag_list_free (taglists[i]); } |
|
From: <thi...@ke...> - 2011-01-26 16:01:52
|
Module: gst-plugins-base Branch: master Commit: b43db2f2a26973fa270a8d678a91d377ddffb846 URL: http://cgit.freedesktop.org/gstreamer/gst-plugins-base/commit/?id=b43db2f2a26973fa270a8d678a91d377ddffb846 Author: Thiago Santos <thi...@co...> Date: Wed Jan 26 12:16:58 2011 -0300 streamsplitter: release pending events refs Unref pending events when disposing the streamsplitter. Also refactor a little to replace a for with a g_list_foreach --- gst/encoding/gststreamsplitter.c | 10 +++++++--- 1 files changed, 7 insertions(+), 3 deletions(-) diff --git a/gst/encoding/gststreamsplitter.c b/gst/encoding/gststreamsplitter.c index a2fa589..c473386 100644 --- a/gst/encoding/gststreamsplitter.c +++ b/gst/encoding/gststreamsplitter.c @@ -88,6 +88,11 @@ gst_stream_splitter_dispose (GObject * object) stream_splitter->lock = NULL; } + g_list_foreach (stream_splitter->pending_events, (GFunc) gst_event_unref, + NULL); + g_list_free (stream_splitter->pending_events); + stream_splitter->pending_events = NULL; + G_OBJECT_CLASS (gst_stream_splitter_parent_class)->dispose (object); } @@ -173,9 +178,8 @@ gst_stream_splitter_sink_event (GstPad * pad, GstEvent * event) } if (flushpending) { - GList *tmp; - for (tmp = stream_splitter->pending_events; tmp; tmp = tmp->next) - gst_event_unref ((GstEvent *) tmp->data); + g_list_foreach (stream_splitter->pending_events, (GFunc) gst_event_unref, + NULL); g_list_free (stream_splitter->pending_events); stream_splitter->pending_events = NULL; } |