summaryrefslogtreecommitdiff
path: root/libavformat/mux.c
Commit message (Collapse)AuthorAge
* movenc: Use packets in interleaving queues for the duration at the end of ↵Martin Storsjö2016-05-18
| | | | | | | | | | | | | | fragments As long as caller only writes packets using av_interleaved_write_frame with no manual flushing, this should allow us to always have accurate durations at the end of fragments, since there should be at least one queued packet in each stream (except for the stream where the current packet is being written, but if the muxer itself does the cutting of fragments, it also has info about the next packet for that stream). Signed-off-by: Martin Storsjö <martin@martin.st>
* avio: Allow custom IO users to get labels for the output bytestreamMartin Storsjö2016-05-18
| | | | | | | | | | | | | | | | | | | | | | | | | | | 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>
* Combine deprecation guards where appropriateDiego Biurrun2016-05-13
| | | | Some code blocks use multiple bits of deprecated API.
* Reduce the scope of some variablesDiego Biurrun2016-05-11
| | | | | This avoids unused variable warnings after the next version bump. Also drop a trace level av_log() call that is in the way.
* Drop pointless assert.h #includesDiego Biurrun2016-05-03
|
* lavf: replace AVStream.codec with AVStream.codecparAnton Khirnov2016-02-23
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Currently, AVStream contains an embedded AVCodecContext instance, which is used by demuxers to export stream parameters to the caller and by muxers to receive stream parameters from the caller. It is also used internally as the codec context that is passed to parsers. In addition, it is also widely used by the callers as the decoding (when demuxer) or encoding (when muxing) context, though this has been officially discouraged since Libav 11. There are multiple important problems with this approach: - the fields in AVCodecContext are in general one of * stream parameters * codec options * codec state However, it's not clear which ones are which. It is consequently unclear which fields are a demuxer allowed to set or a muxer allowed to read. This leads to erratic behaviour depending on whether decoding or encoding is being performed or not (and whether it uses the AVStream embedded codec context). - various synchronization issues arising from the fact that the same context is used by several different APIs (muxers/demuxers, parsers, bitstream filters and encoders/decoders) simultaneously, with there being no clear rules for who can modify what and the different processes being typically delayed with respect to each other. - avformat_find_stream_info() making it necessary to support opening and closing a single codec context multiple times, thus complicating the semantics of freeing various allocated objects in the codec context. Those problems are resolved by replacing the AVStream embedded codec context with a newly added AVCodecParameters instance, which stores only the stream parameters exported by the demuxers or read by the muxers.
* mux: drop the warning about global headersAnton Khirnov2016-01-12
| | | | | The AVStream codec context is often not (and should not be) the actual encoding context, so this warning will be spurious in many cases.
* lavf: deprecate compute_pkt_fields2Anton Khirnov2015-11-09
| | | | | | | | | All encoders set pts and dts properly now (and have been doing that for a while), so there is no good reason to do any timestamp guessing in the muxer. The newly added AVStreamInternal will be later used for storing all the private fields currently living in AVStream.
* avpacket: Deprecate av_dup_packetLuca Barbato2015-10-26
| | | | | As documented, `av_dup_packet` is broken by design, `av_packet_ref` matches the AVFrame ref-counted API and can be safely used instead.
* avpacket: Replace av_free_packet with av_packet_unrefLuca Barbato2015-10-26
| | | | | | | `av_packet_unref` matches the AVFrame ref-counted API and can be used as a drop in replacement. Deprecate `av_free_packet`.
* mux: Make sure that the data is actually writtenSean McGovern2015-09-03
| | | | | | | | | | And forward the error if it is not. Bug-Id: 881 CC: libav-stable@libav.org Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
* lavc: Drop deprecated destruct_packet related functionsVittorio Giovara2015-08-28
| | | | Deprecated in 10/2012.
* lavc: AV-prefix all codec flagsVittorio Giovara2015-07-27
| | | | | | Convert doxygen to multiline and express bitfields more simply. Signed-off-by: Vittorio Giovara <vittorio.giovara@gmail.com>
* mux: Do not leave stale side data pointers in ff_interleave_add_packet()Michael Niedermayer2015-05-06
| | | | | Signed-off-by: Michael Niedermayer <michaelni@gmx.at> Signed-off-by: Vittorio Giovara <vittorio.giovara@gmail.com>
* Replace av_dlog with normal av_log at trace levelVittorio Giovara2015-04-19
| | | | This applies to every library where performance is not critical.
* lavf: move internal fields from public to internal contextwm42015-02-10
| | | | | | | This is not an API change; the fields were explicitly declared private before. Signed-off-by: Anton Khirnov <anton@khirnov.net>
* libavformat: Allow calling av_write_trailer with a NULL AVIOContextMartin Storsjö2014-12-19
| | | | Signed-off-by: Martin Storsjö <martin@martin.st>
* lavf: Only initialize s->offset once when using avoid_negative_ts make_zeroMartin Storsjö2014-11-17
| | | | | | | | | | When given a stream starting at dts=0, it would previously consider s->offset as uninitialized and set an offset when the second packet was written, ending up writing two packets with dts=0. By initializing this field to AV_NOPTS_VALUE, we make sure that we only initialize it once, on the first packet. Signed-off-by: Martin Storsjö <martin@martin.st>
* lavf: Print a warning if failed to avoid negative timestamps when requestedMichael Niedermayer2014-11-07
| | | | Signed-off-by: Martin Storsjö <martin@martin.st>
* lavf: Add an option for avoiding negative timestampsMichael Niedermayer2014-11-07
| | | | | | | | | | | This is the same logic as is invoked on AVFMT_TS_NEGATIVE, but which can be enabled manually, or can be enabled in muxers which only need it in certain conditions. Also allow using the same mechanism to force streams to start at 0. Signed-off-by: Martin Storsjö <martin@martin.st>
* lavf: use the format context strict_std_compliance instead of the codec oneAnton Khirnov2014-11-06
|
* lavf: switch to AVCodecContext.framerate for demuxingAnton Khirnov2014-10-15
|
* lavf: More informative error messageLuca Barbato2014-10-10
| | | | Print the timestamp values and not just the stream index.
* avpacket: Check for and return errors in ff_interleave_add_packet()Nidhi Makhijani2014-07-17
| | | | Signed-off-by: Diego Biurrun <diego@biurrun.de>
* lavf: switch to AVStream.time_base as the hint for the muxer timebaseAnton Khirnov2014-06-18
| | | | | | | | | | | | Previously, AVStream.codec.time_base was used for that purpose, which was quite confusing for the callers. This change also opens the path for removing AVStream.codec. The change in the lavf-mkv test is due to the native timebase (1/1000) being used instead of the default one (1/90000), so the packets are now sent to the crc muxer in the same order in which they are demuxed (previously some of them got reordered because of inexact timestamp conversion).
* lavf: deprecate now unused AVStream.ptsAnton Khirnov2014-05-19
|
* mux: drop one of the hacks comprising compute_pkt_fields2()Anton Khirnov2014-05-19
| | | | All encoders should output proper timestamps now.
* lavf: drop the zero-sized packets hackAnton Khirnov2014-05-15
| | | | | | There should not be any valid reason anymore for passing completely empty packets to lavf. OTOH side data-only packets can be useful.
* lavf: add AVFMT_FLAG_BITEXACT.Anton Khirnov2014-05-15
| | | | | | | | Use it instead of checking CODEC_FLAG_BITEXACT in the first stream's codec context. Using codec options inside lavf is fragile and can easily break when the muxing codec context is not the encoding context.
* lavf: always unref the packet passed to av_interleaved_write_frame() on errorAnton Khirnov2014-02-10
|
* lavf: improve handling of sparse streams when muxingLuca Barbato2014-02-04
| | | | | | | | | | | | | | | | | | Currently ff_interleave_packet_per_dts() waits until it gets a frame for each stream before outputting packets in interleaved order. Sparse streams (i.e. streams with much fewer packets than the other streams, like subtitles or audio with DTX) tend to add up latency and in specific cases end up allocating a large amount of memory. Emit the top packet from the packet_buffer if it has a time delta larger than a specified threshold. Original report of the issue and initial proposed solution by mus.svz@gmail.com. Bug-id: 31 Signed-off-by: Anton Khirnov <anton@khirnov.net>
* lavf: ignore attachment streams for interleaving purposesAnton Khirnov2014-02-04
| | | | Those streams should never get any packets by definition.
* lavf: do basic sanity checking on muxed packetsAnton Khirnov2014-02-04
| | | | Reject packets for non-existing or attachment streams.
* lavf: Add a flag to enable/disable per-packet flushingLuca Barbato2013-09-16
| | | | | | | | | This is enabled by default and can be disabled with "-fflags -flush_packets". Inspired by a patch from Nicolas George <nicolas.george@normalesup.org>. Signed-off-by: Martin Storsjö <martin@martin.st>
* Disable deprecation warnings for cases where a replacement is availableDiego Biurrun2013-08-02
|
* lavf: don't abort if both encoder and muxer aspect ratios are not setRafaël Carré2013-06-24
| | | | Signed-off-by: Anton Khirnov <anton@khirnov.net>
* avf: move ff_write_chained to mux.cLuca Barbato2013-06-16
|
* Remove commented-out debug #define cruftDiego Biurrun2013-05-16
|
* avformat: Drop unnecessary ff_ name prefixes from static functionsDiego Biurrun2013-04-30
|
* lavf: introduce AVFMT_TS_NEGATIVELuca Barbato2013-04-25
| | | | | | | | | | Most formats do not support negative timestamps, shift them to avoid unexpected behaviour and a number of bad crashes. CC:libav-stable@libav.org Signed-off-by: Anton Khirnov <anton@khirnov.net> Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
* lavf: remove disabled FF_API_INTERLEAVE_PACKET cruftAnton Khirnov2013-03-11
|
* avpacket: use AVBuffer to allow refcounting the packets.Anton Khirnov2013-03-08
| | | | | | This will allow us to avoid copying the packets in many cases. This breaks ABI.
* lavf: Fix assignments in if()Michael Niedermayer2013-01-14
| | | | Signed-off-by: Martin Storsjö <martin@martin.st>
* avformat: refactor avformat_write_headerLuca Barbato2012-10-01
| | | | Split away option settings, sanity checks and general setup.
* avformat: refactor avformat_write_headerLuca Barbato2012-10-01
| | | | Mostly cosmetic changes adding some intermediate to shorten the lines.
* avformat: split muxing functions from util.cLuca Barbato2012-10-01