X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=gst%2Fgstmessage.c;h=f72bd62c61fd2dc335ba097d30665f4a6c5ab852;hb=cc6342d853f4252c5d5cf09fff9d3379ad467fbc;hp=33cf22042f527daa1e0ed45a41159a56825b5958;hpb=adf304d5af0ec43b9d3ec891c96c81da449bfc9d;p=platform%2Fupstream%2Fgstreamer.git diff --git a/gst/gstmessage.c b/gst/gstmessage.c index 33cf220..f72bd62c61 100644 --- a/gst/gstmessage.c +++ b/gst/gstmessage.c @@ -107,6 +107,7 @@ static GstMessageQuarks message_quarks[] = { {GST_MESSAGE_HAVE_CONTEXT, "have-context", 0}, {GST_MESSAGE_DEVICE_ADDED, "device-added", 0}, {GST_MESSAGE_DEVICE_REMOVED, "device-removed", 0}, + {GST_MESSAGE_DEVICE_CHANGED, "device-changed", 0}, {GST_MESSAGE_PROPERTY_NOTIFY, "property-notify", 0}, {GST_MESSAGE_STREAM_COLLECTION, "stream-collection", 0}, {GST_MESSAGE_STREAMS_SELECTED, "streams-selected", 0}, @@ -217,6 +218,9 @@ _gst_message_free (GstMessage * message) gst_structure_set_parent_refcount (structure, NULL); gst_structure_free (structure); } +#ifdef USE_POISONING + memset (message, 0xff, sizeof (GstMessageImpl)); +#endif g_slice_free1 (sizeof (GstMessageImpl), message); } @@ -284,7 +288,7 @@ gst_message_init (GstMessageImpl * message, GstMessageType type, * handled by other message-specific functions to pass a message to the * app. The structure field can be %NULL. * - * Returns: (transfer full): The new message. + * Returns: (transfer full) (nullable): The new message. * * MT safe. */ @@ -367,6 +371,7 @@ void gst_message_set_seqnum (GstMessage * message, guint32 seqnum) { g_return_if_fail (GST_IS_MESSAGE (message)); + g_return_if_fail (seqnum != GST_SEQNUM_INVALID); GST_MESSAGE_SEQNUM (message) = seqnum; } @@ -398,14 +403,14 @@ gst_message_new_eos (GstObject * src) * @src: (transfer none) (allow-none): The object originating the message. * @error: (transfer none): The GError for this message. * @debug: A debugging string. - * @details: (transfer full): (allow-none): A GstStructure with details + * @details: (transfer full) (allow-none): A GstStructure with details * * Create a new error message. The message will copy @error and * @debug. This message is posted by element when a fatal event * occurred. The pipeline will probably (partially) stop. The application * receiving this message should stop the pipeline. * - * Returns: (transfer full): the new error message. + * Returns: (transfer full) (nullable): the new error message. * * Since: 1.10 */ @@ -462,7 +467,7 @@ gst_message_new_error (GstObject * src, GError * error, const gchar * debug) /** * gst_message_parse_error_details: * @message: The message object - * @structure: (out): A pointer to the returned details + * @structure: (transfer none) (out): A pointer to the returned details * * Returns the optional details structure, may be NULL if none. * The returned structure must not be freed. @@ -492,12 +497,12 @@ gst_message_parse_error_details (GstMessage * message, * @src: (transfer none) (allow-none): The object originating the message. * @error: (transfer none): The GError for this message. * @debug: A debugging string. - * @details: (transfer full): (allow-none): A GstStructure with details + * @details: (transfer full) (allow-none): A GstStructure with details * * Create a new warning message. The message will make copies of @error and * @debug. * - * Returns: (transfer full): the new warning message. + * Returns: (transfer full) (nullable): the new warning message. * * Since: 1.10 */ @@ -552,7 +557,7 @@ gst_message_new_warning (GstObject * src, GError * error, const gchar * debug) /** * gst_message_parse_warning_details: * @message: The message object - * @structure: (out): A pointer to the returned details structure + * @structure: (transfer none) (out): A pointer to the returned details structure * * Returns the optional details structure, may be NULL if none * The returned structure must not be freed. @@ -582,12 +587,12 @@ gst_message_parse_warning_details (GstMessage * message, * @src: (transfer none) (allow-none): The object originating the message. * @error: (transfer none): The GError for this message. * @debug: A debugging string. - * @details: (transfer full): (allow-none): A GstStructure with details + * @details: (transfer full) (allow-none): A GstStructure with details * * Create a new info message. The message will make copies of @error and * @debug. * - * Returns: (transfer full): the new warning message. + * Returns: (transfer full) (nullable): the new warning message. * * Since: 1.10 */ @@ -642,7 +647,7 @@ gst_message_new_info (GstObject * src, GError * error, const gchar * debug) /** * gst_message_parse_info_details: * @message: The message object - * @structure: (out): A pointer to the returned details structure + * @structure: (transfer none) (out): A pointer to the returned details structure * * Returns the optional details structure, may be NULL if none * The returned structure must not be freed. @@ -714,7 +719,7 @@ gst_message_new_tag (GstObject * src, GstTagList * tag_list) * * MT safe. * - * Returns: (transfer full): The new buffering message. + * Returns: (transfer full) (nullable): The new buffering message. */ GstMessage * gst_message_new_buffering (GstObject * src, gint percent) @@ -984,7 +989,7 @@ gst_message_new_segment_done (GstObject * src, GstFormat format, * Create a new application-typed message. GStreamer will never create these * messages; they are a gift from us to you. Enjoy. * - * Returns: (transfer full): The new application message. + * Returns: (transfer full) (nullable): The new application message. * * MT safe. */ @@ -1007,7 +1012,7 @@ gst_message_new_application (GstObject * src, GstStructure * structure) * "the firewire cable was unplugged". The format of the message should be * documented in the element's documentation. The structure field can be %NULL. * - * Returns: (transfer full): The new element message. + * Returns: (transfer full) (nullable): The new element message. * * MT safe. */ @@ -1159,6 +1164,43 @@ gst_message_get_structure (GstMessage * message) } /** + * gst_message_writable_structure: + * @message: The #GstMessage. + * + * Get a writable version of the structure. + * + * Returns: (transfer none): The structure of the message. The structure + * is still owned by the message, which means that you should not free + * it and that the pointer becomes invalid when you free the message. + * This function checks if @message is writable and will never return + * %NULL. + * + * MT safe. + * + * Since: 1.14 + */ +GstStructure * +gst_message_writable_structure (GstMessage * message) +{ + GstStructure *structure; + + g_return_val_if_fail (GST_IS_MESSAGE (message), NULL); + g_return_val_if_fail (gst_message_is_writable (message), NULL); + + structure = GST_MESSAGE_STRUCTURE (message); + + if (structure == NULL) { + structure = + gst_structure_new_id_empty (gst_message_type_to_quark (GST_MESSAGE_TYPE + (message))); + gst_structure_set_parent_refcount (structure, + &message->mini_object.refcount); + GST_MESSAGE_STRUCTURE (message) = structure; + } + return structure; +} + +/** * gst_message_has_name: * @message: The #GstMessage. * @name: name to check @@ -1778,9 +1820,10 @@ gst_message_set_stream_status_object (GstMessage * message, * * Extracts the object managing the streaming thread from @message. * - * Returns: a GValue containing the object that manages the streaming thread. - * This object is usually of type GstTask but other types can be added in the - * future. The object remains valid as long as @message is valid. + * Returns: (nullable): a GValue containing the object that manages the + * streaming thread. This object is usually of type GstTask but other types can + * be added in the future. The object remains valid as long as @message is + * valid. */ const GValue * gst_message_get_stream_status_object (GstMessage * message) @@ -2189,7 +2232,7 @@ gst_message_parse_qos_stats (GstMessage * message, GstFormat * format, * @code contains a well defined string describing the action. * @text should contain a user visible string detailing the current action. * - * Returns: (transfer full): The new qos message. + * Returns: (transfer full) (nullable): The new qos message. */ GstMessage * gst_message_new_progress (GstObject * src, GstProgressType type, @@ -2466,7 +2509,7 @@ gst_message_new_need_context (GstObject * src, const gchar * context_type) /** * gst_message_parse_context_type: * @message: a GST_MESSAGE_NEED_CONTEXT type message - * @context_type: (out) (allow-none): the context type, or %NULL + * @context_type: (out) (transfer none) (allow-none): the context type, or %NULL * * Parse a context type from an existing GST_MESSAGE_NEED_CONTEXT message. * @@ -2649,6 +2692,69 @@ gst_message_parse_device_removed (GstMessage * message, GstDevice ** device) } /** + * gst_message_new_device_changed: + * @src: The #GstObject that created the message + * @device: (transfer none): The newly created device representing @replaced_device + * with its new configuration. + * + * Creates a new device-changed message. The device-changed message is produced + * by #GstDeviceProvider or a #GstDeviceMonitor. They announce that a device + * properties has changed and @device represent the new modified version of @changed_device. + * + * Returns: a newly allocated #GstMessage + * + * Since: 1.16 + */ +GstMessage * +gst_message_new_device_changed (GstObject * src, GstDevice * device, + GstDevice * changed_device) +{ + GstMessage *message; + GstStructure *structure; + + g_return_val_if_fail (device != NULL, NULL); + g_return_val_if_fail (GST_IS_DEVICE (device), NULL); + + structure = gst_structure_new_id (GST_QUARK (MESSAGE_DEVICE_CHANGED), + GST_QUARK (DEVICE), GST_TYPE_DEVICE, device, + GST_QUARK (DEVICE_CHANGED), GST_TYPE_DEVICE, changed_device, NULL); + message = gst_message_new_custom (GST_MESSAGE_DEVICE_CHANGED, src, structure); + + return message; +} + +/** + * gst_message_parse_device_changed: + * @message: a #GstMessage of type %GST_MESSAGE_DEVICE_CHANGED + * @device: (out) (allow-none) (transfer full): A location where to store a + * pointer to the updated version of the #GstDevice, or %NULL + * @changed_device: (out) (allow-none) (transfer full): A location where to store a + * pointer to the old version of the #GstDevice, or %NULL + * + * Parses a device-changed message. The device-changed message is produced by + * #GstDeviceProvider or a #GstDeviceMonitor. It announces the + * disappearance of monitored devices. * It announce that a device properties has + * changed and @device represents the new modified version of @changed_device. + * + * Since: 1.16 + */ +void +gst_message_parse_device_changed (GstMessage * message, GstDevice ** device, + GstDevice ** changed_device) +{ + g_return_if_fail (GST_IS_MESSAGE (message)); + g_return_if_fail (GST_MESSAGE_TYPE (message) == GST_MESSAGE_DEVICE_CHANGED); + + if (device) + gst_structure_id_get (GST_MESSAGE_STRUCTURE (message), + GST_QUARK (DEVICE), GST_TYPE_DEVICE, device, NULL); + + if (changed_device) + gst_structure_id_get (GST_MESSAGE_STRUCTURE (message), + GST_QUARK (DEVICE_CHANGED), GST_TYPE_DEVICE, changed_device, NULL); +} + +/** * gst_message_new_property_notify: * @src: The #GstObject whose property changed (may or may not be a #GstElement) * @property_name: name of the property that changed @@ -2683,11 +2789,12 @@ gst_message_new_property_notify (GstObject * src, const gchar * property_name, * @message: a #GstMessage of type %GST_MESSAGE_PROPERTY_NOTIFY * @object: (out) (allow-none) (transfer none): location where to store a * pointer to the object whose property got changed, or %NULL - * @property_name: (out) (allow-none): return location for the name of the - * property that got changed, or %NULL - * @property_value: (out) (allow-none): return location for the new value of - * the property that got changed, or %NULL. This will only be set if the - * property notify watch was told to include the value when it was set up + * @property_name: (out) (transfer none) (allow-none): return location for + * the name of the property that got changed, or %NULL + * @property_value: (out) (transfer none) (allow-none): return location for + * the new value of the property that got changed, or %NULL. This will + * only be set if the property notify watch was told to include the value + * when it was set up * * Parses a property-notify message. These will be posted on the bus only * when set up with gst_element_add_property_notify_watch() or @@ -2874,7 +2981,7 @@ gst_message_streams_selected_add (GstMessage * msg, GstStream * stream) * * Retrieves the #GstStream with index @index from the @message. * - * Returns: (transfer full): A #GstStream + * Returns: (transfer full) (nullable): A #GstStream * * Since: 1.10 */