• Tim-Philipp Müller's avatar
    audiodecoder: fix tag handling · 5ccc8432
    Tim-Philipp Müller authored
    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
    5ccc8432
gstaudiodecoder.c 105 KB