audiodecoder: fix tag handling
authorTim-Philipp Müller <tim@centricular.com>
Fri, 14 Aug 2015 16:44:59 +0000 (17:44 +0100)
committerTim-Philipp Müller <tim@centricular.com>
Sun, 16 Aug 2015 15:34:31 +0000 (16:34 +0100)
commit5ccc8432e09038969bce7fc79e4b1738f1e836ad
tree89bcfcedf763066e6f68580e4ac95d17d6f0f518
parent14867e4ebb50bee95d1ace402b0c881d5445322f
audiodecoder: fix tag handling

Before we just merged everything in pretty much random ways
ad-hoc instead of keeping state properly. In 0.10 that was
how it worked, but in 1.x the tag events sent should always
reflect the latest state and replace any previous tags.

So save the upstream (stream) tags, and save the tags set
by the decoder subclass with merge mode, and then update
the merged tags whenever either of those two changes.

This slightly changes the behaviour of gst_audio_decoder_merge_tags()
in case it is called multiple times, since now any call replaces
the previously-set tags. However, it leads to much more predictable
outcomes, and also we are not aware of any subclass which sets this
multiple times and expects all the tags set to be merged.

If more complex tag merging scenarios are required, we'll have
to add a new vfunc for that or the subclass has to intercept
the upstream tags itself and send merged tags itself.

https://bugzilla.gnome.org/show_bug.cgi?id=679768
gst-libs/gst/audio/gstaudiodecoder.c