X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=gst%2Fgstevent.c;h=f4bb816863e76472dc42ee663df5ced874b1e40d;hb=b99bca2790e0e63ce573ad2b9a0aa5a72995fa76;hp=815898f5938864ee2422bd3ee172d33e4cdcf58a;hpb=a87b4551a6090663a1714f263d4e20fe75eb46ca;p=platform%2Fupstream%2Fgstreamer.git diff --git a/gst/gstevent.c b/gst/gstevent.c index 815898f..f4bb816 100644 --- a/gst/gstevent.c +++ b/gst/gstevent.c @@ -228,6 +228,9 @@ _gst_event_free (GstEvent * event) gst_structure_set_parent_refcount (s, NULL); gst_structure_free (s); } +#ifdef USE_POISONING + memset (event, 0xff, sizeof (GstEventImpl)); +#endif g_slice_free1 (sizeof (GstEventImpl), event); } @@ -293,7 +296,7 @@ gst_event_init (GstEventImpl * event, GstEventType type) * New custom events can also be created by subclassing the event type if * needed. * - * Returns: (transfer full): the new custom event. + * Returns: (transfer full) (nullable): the new custom event. */ GstEvent * gst_event_new_custom (GstEventType type, GstStructure * structure) @@ -333,9 +336,9 @@ had_parent: * * Access the structure of the event. * - * Returns: The structure of the event. The structure is still - * owned by the event, which means that you should not free it and - * that the pointer becomes invalid when you free the event. + * Returns: (transfer none) (nullable): The structure of the event. The + * structure is still owned by the event, which means that you should not free + * it and that the pointer becomes invalid when you free the event. * * MT safe. */ @@ -448,6 +451,8 @@ void gst_event_set_seqnum (GstEvent * event, guint32 seqnum) { g_return_if_fail (GST_IS_EVENT (event)); + g_return_if_fail (seqnum != GST_SEQNUM_INVALID); + g_return_if_fail (gst_event_is_writable (event)); GST_EVENT_SEQNUM (event) = seqnum; } @@ -496,6 +501,7 @@ void gst_event_set_running_time_offset (GstEvent * event, gint64 offset) { g_return_if_fail (GST_IS_EVENT (event)); + g_return_if_fail (gst_event_is_writable (event)); ((GstEventImpl *) event)->running_time_offset = offset; } @@ -591,9 +597,12 @@ gst_event_parse_flush_stop (GstEvent * event, gboolean * reset_time) * The list of @streams corresponds to the "Stream ID" of each stream to be * activated. Those ID can be obtained via the #GstStream objects present * in #GST_EVENT_STREAM_START, #GST_EVENT_STREAM_COLLECTION or - * #GST_MESSSAGE_STREAM_COLLECTION. + * #GST_MESSAGE_STREAM_COLLECTION. + * + * Note: The list of @streams can not be empty. * - * Returns: (transfer full): a new select-streams event. + * Returns: (transfer full): a new select-streams event or %NULL in case of + * an error (like an empty streams list). * * Since: 1.10 */ @@ -605,6 +614,8 @@ gst_event_new_select_streams (GList * streams) GstStructure *struc; GList *tmpl; + g_return_val_if_fail (streams != NULL, NULL); + GST_CAT_INFO (GST_CAT_EVENT, "Creating new select-streams event"); struc = gst_structure_new_id_empty (GST_QUARK (EVENT_SELECT_STREAMS)); g_value_init (&val, GST_TYPE_LIST); @@ -796,7 +807,7 @@ gst_event_parse_gap (GstEvent * event, GstClockTime * timestamp, * synchronized with the buffer flow and contains the format of the buffers * that will follow after the event. * - * Returns: (transfer full): the new CAPS event. + * Returns: (transfer full) (nullable): the new CAPS event. */ GstEvent * gst_event_new_caps (GstCaps * caps) @@ -874,7 +885,7 @@ gst_event_parse_caps (GstEvent * event, GstCaps ** caps) * * time + (TIMESTAMP(buf) - start) * ABS (rate * applied_rate) * - * Returns: (transfer full): the new SEGMENT event. + * Returns: (transfer full) (nullable): the new SEGMENT event. */ GstEvent * gst_event_new_segment (const GstSegment * segment) @@ -1123,7 +1134,7 @@ gst_event_parse_buffer_size (GstEvent * event, GstFormat * format, * The application can use general event probes to intercept the QoS * event and implement custom application specific QoS handling. * - * Returns: (transfer full): a new QOS event. + * Returns: (transfer full) (nullable): a new QOS event. */ GstEvent * gst_event_new_qos (GstQOSType type, gdouble proportion, @@ -1249,7 +1260,7 @@ gst_event_parse_qos (GstEvent * event, GstQOSType * type, * #GST_QUERY_POSITION and update the playback segment current position with a * #GST_SEEK_TYPE_SET to the desired position. * - * Returns: (transfer full): a new seek event. + * Returns: (transfer full) (nullable): a new seek event. */ GstEvent * gst_event_new_seek (gdouble rate, GstFormat format, GstSeekFlags flags, @@ -1260,6 +1271,18 @@ gst_event_new_seek (gdouble rate, GstFormat format, GstSeekFlags flags, g_return_val_if_fail (rate != 0.0, NULL); + /* SNAP flags only make sense in combination with the KEYUNIT flag. Warn + * and unset the SNAP flags if they're set without the KEYUNIT flag */ + if (!(flags & GST_SEEK_FLAG_KEY_UNIT) && + (flags & (GST_SEEK_FLAG_SNAP_BEFORE | GST_SEEK_FLAG_SNAP_AFTER | + GST_SEEK_FLAG_SNAP_NEAREST))) { + g_warning ("SNAP seeks only work in combination with the KEY_UNIT " + "flag, ignoring SNAP flags"); + flags &= + ~(GST_SEEK_FLAG_SNAP_BEFORE | GST_SEEK_FLAG_SNAP_AFTER | + GST_SEEK_FLAG_SNAP_NEAREST); + } + if (format == GST_FORMAT_TIME) { GST_CAT_INFO (GST_CAT_EVENT, "creating seek rate %lf, format TIME, flags %d, " @@ -1283,7 +1306,9 @@ gst_event_new_seek (gdouble rate, GstFormat format, GstSeekFlags flags, GST_QUARK (CUR_TYPE), GST_TYPE_SEEK_TYPE, start_type, GST_QUARK (CUR), G_TYPE_INT64, start, GST_QUARK (STOP_TYPE), GST_TYPE_SEEK_TYPE, stop_type, - GST_QUARK (STOP), G_TYPE_INT64, stop, NULL); + GST_QUARK (STOP), G_TYPE_INT64, stop, + GST_QUARK (TRICKMODE_INTERVAL), GST_TYPE_CLOCK_TIME, (GstClockTime) 0, + NULL); event = gst_event_new_custom (GST_EVENT_SEEK, structure); return event; @@ -1344,6 +1369,48 @@ gst_event_parse_seek (GstEvent * event, gdouble * rate, } /** + * gst_event_set_seek_trickmode_interval: + * + * Sets a trickmode interval on a (writable) seek event. Elements + * that support TRICKMODE_KEY_UNITS seeks SHOULD use this as the minimal + * interval between each frame they may output. + * + * Since: 1.16 + */ +void +gst_event_set_seek_trickmode_interval (GstEvent * event, GstClockTime interval) +{ + g_return_if_fail (event != NULL); + g_return_if_fail (GST_EVENT_TYPE (event) == GST_EVENT_SEEK); + g_return_if_fail (gst_event_is_writable (event)); + g_return_if_fail (GST_CLOCK_TIME_IS_VALID (interval)); + + gst_structure_id_set (GST_EVENT_STRUCTURE (event), + GST_QUARK (TRICKMODE_INTERVAL), GST_TYPE_CLOCK_TIME, interval, NULL); +} + +/** + * gst_event_parse_seek_trickmode_interval: + * @interval: (out) + * + * Retrieve the trickmode interval that may have been set on a + * seek event with gst_event_set_seek_trickmode_interval(). + * + * Since: 1.16 + */ +void +gst_event_parse_seek_trickmode_interval (GstEvent * event, + GstClockTime * interval) +{ + g_return_if_fail (event != NULL); + g_return_if_fail (interval != NULL); + g_return_if_fail (GST_EVENT_TYPE (event) == GST_EVENT_SEEK); + + gst_structure_id_get (GST_EVENT_STRUCTURE (event), + GST_QUARK (TRICKMODE_INTERVAL), GST_TYPE_CLOCK_TIME, interval, NULL); +} + +/** * gst_event_new_navigation: * @structure: (transfer full): description of the event. The event will take * ownership of the structure. @@ -1430,7 +1497,7 @@ gst_event_parse_latency (GstEvent * event, GstClockTime * latency) * The @intermediate flag instructs the pipeline that this step operation is * part of a larger step operation. * - * Returns: (transfer full): a new #GstEvent + * Returns: (transfer full) (nullable): a new #GstEvent */ GstEvent * gst_event_new_step (GstFormat format, guint64 amount, gdouble rate, @@ -1660,7 +1727,7 @@ gst_event_set_stream (GstEvent * event, GstStream * stream) /** * gst_event_parse_stream: * @event: a stream-start event - * @stream: (out) (transfer full): adress of variable to store the stream + * @stream: (out) (transfer full): address of variable to store the stream * * Parse a stream-start @event and extract the #GstStream from it. * @@ -2010,7 +2077,7 @@ gst_event_new_protection (const gchar * system_id, * string uniquely identifying a content protection system. * @data: (out) (allow-none) (transfer none): pointer to store a #GstBuffer * holding protection system specific information. - * @origin: (allow-none) (transfer none): pointer to store a value that + * @origin: (out) (allow-none) (transfer none): pointer to store a value that * indicates where the protection information carried by @event was extracted * from. *