isomp4: Implement robust muxing using ping-pong strategy
authorJan Schmidt <jan@centricular.com>
Wed, 1 Apr 2015 00:15:38 +0000 (11:15 +1100)
committerJan Schmidt <jan@centricular.com>
Mon, 8 Jun 2015 04:49:11 +0000 (14:49 +1000)
commit1d058c7d8a3c3fdb5876e97f9706dedccff29e5f
treebc5944549b89c1a3c2c459f33a1e386ccac24c7e
parent3d7b34352552fe70ff8a70bf692ec408b2fbb005
isomp4: Implement robust muxing using ping-pong strategy

Implement a robust recording mode, where the output
file is always in a playable state, seeking and rewriting
the moov header at a configurable interval. Rewriting
moov is done using reserved space at the start of
the file, and a ping-pong strategy where the moov
is replaced atomically so it's never invalid.

Track when tags have actually changed, and don't write them into
the moov unless they've changed. Clear any existing tags when
re-writing them, so we can do progressive moov updating in robust
recording mode.

Write placeholder mdat as a free atom plus a 32-bit mdat
with '0' size, which means "rest of the file" in the spec.

Re-write it later to a full 64-bit extended size atom if needed.
gst/isomp4/atoms.c
gst/isomp4/atoms.h
gst/isomp4/atomsrecovery.c
gst/isomp4/gstqtmux.c
gst/isomp4/gstqtmux.h