mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-01-26 09:08:14 +00:00
gst/matroska/: Use gst_value_serialize() and gst_value_deserialize() for transforming tags from some GType to a strin...
Original commit message from CVS: * gst/matroska/matroska-demux.c: (gst_matroska_demux_parse_metadata_id_simple_tag): * gst/matroska/matroska-mux.c: (gst_matroska_mux_write_simple_tag), (gst_matroska_mux_write_data): Use gst_value_serialize() and gst_value_deserialize() for transforming tags from some GType to a string and the other way around. The default transformations in GLib don't include transformations from string to number types.
This commit is contained in:
parent
04d1c49ef7
commit
70ceffb790
3 changed files with 21 additions and 13 deletions
11
ChangeLog
11
ChangeLog
|
@ -1,3 +1,14 @@
|
|||
2008-06-13 Sebastian Dröge <slomo@circular-chaos.org>
|
||||
|
||||
* gst/matroska/matroska-demux.c:
|
||||
(gst_matroska_demux_parse_metadata_id_simple_tag):
|
||||
* gst/matroska/matroska-mux.c: (gst_matroska_mux_write_simple_tag),
|
||||
(gst_matroska_mux_write_data):
|
||||
Use gst_value_serialize() and gst_value_deserialize() for transforming
|
||||
tags from some GType to a string and the other way around. The default
|
||||
transformations in GLib don't include transformations from string to
|
||||
number types.
|
||||
|
||||
2008-06-13 Sebastian Dröge <slomo@circular-chaos.org>
|
||||
|
||||
* gst/matroska/matroska-demux.c: (gst_matroska_demux_reset),
|
||||
|
|
|
@ -2255,21 +2255,18 @@ gst_matroska_demux_parse_metadata_id_simple_tag (GstMatroskaDemux * demux,
|
|||
const gchar *tagname_mkv = tag_conv[i].matroska_tagname;
|
||||
|
||||
if (strcmp (tagname_mkv, tag) == 0) {
|
||||
GValue src = { 0, };
|
||||
GValue dest = { 0, };
|
||||
GType dest_type = gst_tag_get_type (tagname_gst);
|
||||
|
||||
g_value_init (&src, G_TYPE_STRING);
|
||||
g_value_set_string (&src, value);
|
||||
g_value_init (&dest, dest_type);
|
||||
if (g_value_transform (&src, &dest)) {
|
||||
if (gst_value_deserialize (&dest, value)) {
|
||||
gst_tag_list_add_values (*p_taglist, GST_TAG_MERGE_APPEND,
|
||||
tagname_gst, &dest, NULL);
|
||||
} else {
|
||||
GST_WARNING_OBJECT (demux, "Can't transform tag '%s' with"
|
||||
"value '%s' to target type", tag, value);
|
||||
GST_WARNING_OBJECT (demux, "Can't transform tag '%s' with "
|
||||
"value '%s' to target type '%s'", tag, value,
|
||||
g_type_name (dest_type));
|
||||
}
|
||||
g_value_unset (&src);
|
||||
g_value_unset (&dest);
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -1546,24 +1546,21 @@ gst_matroska_mux_write_simple_tag (const GstTagList * list, const gchar * tag,
|
|||
|
||||
if (strcmp (tagname_gst, tag) == 0) {
|
||||
GValue src = { 0, };
|
||||
GValue dest = { 0, };
|
||||
gchar *dest;
|
||||
|
||||
if (!gst_tag_list_copy_value (&src, list, tag))
|
||||
break;
|
||||
g_value_init (&dest, G_TYPE_STRING);
|
||||
if (g_value_transform (&src, &dest)) {
|
||||
if ((dest = gst_value_serialize (&src))) {
|
||||
|
||||
simpletag_master = gst_ebml_write_master_start (ebml,
|
||||
GST_MATROSKA_ID_SIMPLETAG);
|
||||
gst_ebml_write_ascii (ebml, GST_MATROSKA_ID_TAGNAME, tagname_mkv);
|
||||
gst_ebml_write_utf8 (ebml, GST_MATROSKA_ID_TAGSTRING,
|
||||
g_value_get_string (&dest));
|
||||
gst_ebml_write_utf8 (ebml, GST_MATROSKA_ID_TAGSTRING, dest);
|
||||
gst_ebml_write_master_finish (ebml, simpletag_master);
|
||||
} else {
|
||||
GST_WARNING ("Can't transform tag '%s' to string", tagname_mkv);
|
||||
}
|
||||
g_value_unset (&src);
|
||||
g_value_unset (&dest);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -1953,6 +1950,9 @@ gst_matroska_mux_write_data (GstMatroskaMux * mux, GstMatroskaPad * collect_pad)
|
|||
* one for each keyframe or each second (for all-keyframe
|
||||
* streams), only the *first* video track. But that'll come later... */
|
||||
|
||||
/* TODO: index is useful for every track, should contain the number of
|
||||
* the block in the cluster which contains the timestamp
|
||||
*/
|
||||
if (is_video_keyframe) {
|
||||
GstMatroskaIndex *idx;
|
||||
|
||||
|
|
Loading…
Reference in a new issue