gstsourcebuffer: Added locking, re-worked track feed task
Since the sample map/track buffer now iterates samples in batches corresponding to each coded frame group, the logic to feed the tracks is simpler. For media without delta frames, it's a special case where the coded frame groups are all size 1. Now, all it does is skip data until the keyframe group containing the seek point is found, then feed the track queue with the current sample and all future samples until EOS or cancellation. Resync of the iterator when the underlying track is modified is not necessary because the outer loop attempts to resume feeding track data from where it was interrupted in case of modification. Also, the track feed task struct now holds a weak ref to its parent source buffer to allow the task to cancel itself in any situation where the source buffer is destroyed before the task is shut down. Media parsing activity in the append pipeline no longer triggers ready state recalculation on the msesrc since the msesrc now has a background task that updates the ready state periodically when it's active which is more efficient in cases where there is a high volume of samples being processed by the media parser. Finally, updated to adapt to track buffer API changes. Some functions previously passed in a lower bound for sample timestamps. Now the source buffer is responsible for clipping samples within a desired range of time. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8512>
This commit is contained in:
parent
0d0228ca87
commit
8041073465
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user