1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2025-08-10 06:10:52 +02:00

avformat/avformat: Clarify documentation of av_interleaved_write_frame()

The earlier documentation claimed that av_interleaved_write_frame()
always orders by dts, which is not necessarily true when using muxers
with custom interleavement functions or the audio_preload option.

Furthermore, the documentation stated that libavformat takes ownership
of the reference of the provided packet (if it is refcounted) and that
the caller may not access the data through this reference after the
function returns. This suggests that the returned packet is not blank,
but instead still contains some set, but invalid fields, which implies
that it would be dangerous to unreference this packet again.

But this is not true: av_interleaved_write_frame()'s actual behaviour
is to always output blank packet (even on error). This commit documents
this fact so that callers know that they can directly reuse this packet.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
This commit is contained in:
Andreas Rheinhardt
2020-03-31 09:06:16 +02:00
parent 805ec95f8e
commit 259026b457

View File

@@ -2248,7 +2248,7 @@ int av_write_frame(AVFormatContext *s, AVPacket *pkt);
* Write a packet to an output media file ensuring correct interleaving. * Write a packet to an output media file ensuring correct interleaving.
* *
* This function will buffer the packets internally as needed to make sure the * This function will buffer the packets internally as needed to make sure the
* packets in the output file are properly interleaved in the order of * packets in the output file are properly interleaved, usually ordered by
* increasing dts. Callers doing their own interleaving should call * increasing dts. Callers doing their own interleaving should call
* av_write_frame() instead of this function. * av_write_frame() instead of this function.
* *
@@ -2261,10 +2261,10 @@ int av_write_frame(AVFormatContext *s, AVPacket *pkt);
* <br> * <br>
* If the packet is reference-counted, this function will take * If the packet is reference-counted, this function will take
* ownership of this reference and unreference it later when it sees * ownership of this reference and unreference it later when it sees
* fit. * fit. If the packet is not reference-counted, libavformat will
* The caller must not access the data through this reference after * make a copy.
* this function returns. If the packet is not reference-counted, * The returned packet will be blank (as if returned from
* libavformat will make a copy. * av_packet_alloc()), even on error.
* <br> * <br>
* This parameter can be NULL (at any time, not just at the end), to * This parameter can be NULL (at any time, not just at the end), to
* flush the interleaving queues. * flush the interleaving queues.
@@ -2280,10 +2280,9 @@ int av_write_frame(AVFormatContext *s, AVPacket *pkt);
* The dts for subsequent packets in one stream must be strictly * The dts for subsequent packets in one stream must be strictly
* increasing (unless the output format is flagged with the * increasing (unless the output format is flagged with the
* AVFMT_TS_NONSTRICT, then they merely have to be nondecreasing). * AVFMT_TS_NONSTRICT, then they merely have to be nondecreasing).
* @ref AVPacket.duration "duration") should also be set if known. * @ref AVPacket.duration "duration" should also be set if known.
* *
* @return 0 on success, a negative AVERROR on error. Libavformat will always * @return 0 on success, a negative AVERROR on error.
* take care of freeing the packet, even if this function fails.
* *
* @see av_write_frame(), AVFormatContext.max_interleave_delta * @see av_write_frame(), AVFormatContext.max_interleave_delta
*/ */