avio: Allow custom IO users to get labels for the output bytestream
authorMartin Storsjö <martin@martin.st>
Wed, 4 May 2016 14:18:35 +0000 (17:18 +0300)
committerMartin Storsjö <martin@martin.st>
Wed, 18 May 2016 07:36:45 +0000 (10:36 +0300)
commitdb7968bff4851c2be79b15b2cb2ae747424d2fca
tree3aee8ac185c9a44a19270ad1559f2fe7cc3d851b
parent8e757716c61e0563a63829e30b02d5ba2a422ad6
avio: Allow custom IO users to get labels for the output bytestream

This allows callers with avio write callbacks to get the bytestream
positions that correspond to keyframes, suitable for live streaming.

In the simplest form, a caller could expect that a header is written
to the bytestream during the avformat_write_header, and the data
output to the avio context during e.g. av_write_frame corresponds
exactly to the current packet passed in.

When combined with av_interleaved_write_frame, and with muxers that
do buffering (most muxers that do some sort of fragmenting or
clustering), the mapping from input data to bytestream positions
is nontrivial.

This allows callers to get directly information about what part
of the bytestream is what, without having to resort to assumptions
about the muxer behaviour.

One keyframe/fragment/block can still be split into multiple (if
they are larger than the aviocontext buffer), which would call
the callback with e.g. AVIO_DATA_MARKER_SYNC_POINT, followed by
AVIO_DATA_MARKER_UNKNOWN for the second time it is called with
the following data.

Signed-off-by: Martin Storsjö <martin@martin.st>
doc/APIchanges
libavformat/avio.h
libavformat/aviobuf.c
libavformat/mux.c
libavformat/version.h