FFmpeg
|
muxing functions for use within libavformat More...
#include "avformat.h"
#include "avio_internal.h"
#include "internal.h"
#include "libavcodec/internal.h"
#include "libavcodec/bytestream.h"
#include "libavutil/opt.h"
#include "libavutil/dict.h"
#include "libavutil/pixdesc.h"
#include "libavutil/timestamp.h"
#include "metadata.h"
#include "id3v2.h"
#include "libavutil/avassert.h"
#include "libavutil/avstring.h"
#include "libavutil/internal.h"
#include "libavutil/mathematics.h"
#include "libavutil/parseutils.h"
#include "libavutil/time.h"
#include "riff.h"
#include "audiointerleave.h"
#include "url.h"
#include <stdarg.h>
#include <assert.h>
Go to the source code of this file.
Macros | |
#define | AV_PKT_FLAG_UNCODED_FRAME 0x2000 |
#define | UNCODED_FRAME_PACKET_SIZE (INT_MIN / 3 * 2 + (int)sizeof(AVFrame)) |
#define | CHUNK_START 0x1000 |
Functions | |
static void | frac_init (AVFrac *f, int64_t val, int64_t num, int64_t den) |
f = val + (num / den) + 0.5. | |
static void | frac_add (AVFrac *f, int64_t incr) |
Fractional addition to f: f = f + (incr / f->den). | |
AVRational | ff_choose_timebase (AVFormatContext *s, AVStream *st, int min_precision) |
Chooses a timebase for muxing the specified stream. | |
int | avformat_alloc_output_context2 (AVFormatContext **avctx, AVOutputFormat *oformat, const char *format, const char *filename) |
Allocate an AVFormatContext for an output format. | |
static int | validate_codec_tag (AVFormatContext *s, AVStream *st) |
static int | init_muxer (AVFormatContext *s, AVDictionary **options) |
static int | init_pts (AVFormatContext *s) |
int | avformat_write_header (AVFormatContext *s, AVDictionary **options) |
Allocate the stream private data and write the stream header to an output media file. | |
static int | compute_pkt_fields2 (AVFormatContext *s, AVStream *st, AVPacket *pkt) |
static int | write_packet (AVFormatContext *s, AVPacket *pkt) |
Make timestamps non negative, move side data from payload to internal struct, call muxer, and restore sidedata. | |
static int | check_packet (AVFormatContext *s, AVPacket *pkt) |
int | av_write_frame (AVFormatContext *s, AVPacket *pkt) |
Write a packet to an output media file. | |
int | ff_interleave_add_packet (AVFormatContext *s, AVPacket *pkt, int(*compare)(AVFormatContext *, AVPacket *, AVPacket *)) |
Add packet to AVFormatContext->packet_buffer list, determining its interleaved position using compare() function argument. | |
static int | interleave_compare_dts (AVFormatContext *s, AVPacket *next, AVPacket *pkt) |
int | ff_interleave_packet_per_dts (AVFormatContext *s, AVPacket *out, AVPacket *pkt, int flush) |
Interleave a packet per dts in an output media file. | |
static int | interleave_packet (AVFormatContext *s, AVPacket *out, AVPacket *in, int flush) |
Interleave an AVPacket correctly so it can be muxed. | |
int | av_interleaved_write_frame (AVFormatContext *s, AVPacket *pkt) |
Write a packet to an output media file ensuring correct interleaving. | |
int | av_write_trailer (AVFormatContext *s) |
Write the stream trailer to an output media file and free the file private data. | |
int | av_get_output_timestamp (struct AVFormatContext *s, int stream, int64_t *dts, int64_t *wall) |
Get timing information for the data currently output. | |
int | ff_write_chained (AVFormatContext *dst, int dst_stream, AVPacket *pkt, AVFormatContext *src, int interleave) |
Write a packet to another muxer than the one the user originally intended. | |
static int | av_write_uncoded_frame_internal (AVFormatContext *s, int stream_index, AVFrame *frame, int interleaved) |
int | av_write_uncoded_frame (AVFormatContext *s, int stream_index, AVFrame *frame) |
Write a uncoded frame to an output media file. | |
int | av_interleaved_write_uncoded_frame (AVFormatContext *s, int stream_index, AVFrame *frame) |
Write a uncoded frame to an output media file. | |
int | av_write_uncoded_frame_query (AVFormatContext *s, int stream_index) |
Test whether a muxer supports uncoded frame. | |
muxing functions for use within libavformat
Definition in file mux.c.
#define AV_PKT_FLAG_UNCODED_FRAME 0x2000 |
Definition at line 441 of file mux.c.
Referenced by av_write_uncoded_frame_internal(), compute_pkt_fields2(), ff_interleave_add_packet(), and write_packet().
#define UNCODED_FRAME_PACKET_SIZE (INT_MIN / 3 * 2 + (int)sizeof(AVFrame)) |
Definition at line 447 of file mux.c.
Referenced by av_write_uncoded_frame_internal(), ff_interleave_add_packet(), and write_packet().
#define CHUNK_START 0x1000 |
Definition at line 660 of file mux.c.
Referenced by ff_interleave_add_packet().
|
static |
f = val + (num / den) + 0.5.
'num' is normalized so that it is such as 0 <= num < den.
f | fractional number |
val | integer value |
num | must be >= 0 |
den | must be >= 1 |
Definition at line 67 of file mux.c.
Referenced by init_pts().
|
static |
Fractional addition to f: f = f + (incr / f->den).
f | fractional number |
incr | increment, can be positive or negative |
Definition at line 85 of file mux.c.
Referenced by compute_pkt_fields2().
AVRational ff_choose_timebase | ( | AVFormatContext * | s, |
AVStream * | st, | ||
int | min_precision | ||
) |
Chooses a timebase for muxing the specified stream.
The chosen timebase allows sample accurate timestamps based on the framerate or sample rate for audio streams. It also is at least as precise as 1/min_precision would be.
Definition at line 105 of file mux.c.
Referenced by nut_write_header().
int avformat_alloc_output_context2 | ( | AVFormatContext ** | ctx, |
AVOutputFormat * | oformat, | ||
const char * | format_name, | ||
const char * | filename | ||
) |
Allocate an AVFormatContext for an output format.
avformat_free_context() can be used to free the context and everything allocated by the framework within it.
*ctx | is set to the created format context, or to NULL in case of failure |
oformat | format to use for allocating the context, if NULL format_name and filename are used instead |
format_name | the name of output format to use for allocating the context, if NULL filename is used instead |
filename | the name of the filename to use for allocating the context, may be NULL |
Definition at line 121 of file mux.c.
Referenced by main(), open_output_file(), open_slave(), segment_mux_init(), and write_packet().
|
static |
Check that tag + id is in the table If neither is in the table -> OK If tag is in the table with another id -> FAIL If id is in the table with another tag -> FAIL unless strict < normal
Definition at line 184 of file mux.c.
Referenced by init_muxer().
|
static |
Definition at line 218 of file mux.c.
Referenced by avformat_write_header().
|
static |
Definition at line 380 of file mux.c.
Referenced by avformat_write_header().
|
static |
Definition at line 451 of file mux.c.
Referenced by av_interleaved_write_frame(), and av_write_frame().
|
static |
Make timestamps non negative, move side data from payload to internal struct, call muxer, and restore sidedata.
FIXME: this function should NEVER get undefined pts/dts beside when the AVFMT_NOTIMESTAMPS is set. Those additional safety checks should be dropped once the correct checks are set in the callers.
Definition at line 549 of file mux.c.
Referenced by av_interleaved_write_frame(), av_write_frame(), and av_write_trailer().
|
static |
Definition at line 607 of file mux.c.
Referenced by av_interleaved_write_frame(), and av_write_frame().
int ff_interleave_add_packet | ( | AVFormatContext * | s, |
AVPacket * | pkt, | ||
int(*)(AVFormatContext *, AVPacket *, AVPacket *) | compare | ||
) |
Add packet to AVFormatContext->packet_buffer list, determining its interleaved position using compare() function argument.
Definition at line 662 of file mux.c.
Referenced by ff_audio_rechunk_interleave(), and ff_interleave_packet_per_dts().
|
static |
Definition at line 744 of file mux.c.
Referenced by ff_interleave_packet_per_dts().
int ff_interleave_packet_per_dts | ( | AVFormatContext * | s, |
AVPacket * | out, | ||
AVPacket * | pkt, | ||
int | flush | ||
) |
Interleave a packet per dts in an output media file.
Packets with pkt->destruct == av_destruct_packet will be freed inside this function, so they cannot be used after it. Note that calling av_free_packet() on them is still safe.
s | media file handle |
out | the interleaved packet will be output here |
pkt | the input packet |
flush | 1 if no further packets are available as input and all remaining packets should be output |
Definition at line 767 of file mux.c.
Referenced by gxf_interleave_packet(), and interleave_packet().
|
static |
Interleave an AVPacket correctly so it can be muxed.
out | the interleaved packet will be output here |
in | the input packet |
flush | 1 if no further packets are available as input and all remaining packets should be output |
Definition at line 856 of file mux.c.
Referenced by av_interleaved_write_frame(), and av_write_trailer().
int ff_write_chained | ( | AVFormatContext * | dst, |
int | dst_stream, | ||
AVPacket * | pkt, | ||
AVFormatContext * | src, | ||
int | interleave | ||
) |
Write a packet to another muxer than the one the user originally intended.
Useful when chaining muxers, where one muxer internally writes a received packet to another muxer.
dst | the muxer to write the packet to |
dst_stream | the stream index within dst to write the packet to |
pkt | the packet to be written |
src | the muxer the packet originally was intended for |
interleave | 0->use av_write_frame, 1->av_write_interleaved_frame |
Definition at line 970 of file mux.c.
Referenced by ff_mov_add_hinted_packet(), hds_write_packet(), hls_write_packet(), ism_write_packet(), rtsp_write_packet(), sap_write_packet(), and seg_write_packet().
|
static |
Definition at line 998 of file mux.c.
Referenced by av_interleaved_write_uncoded_frame(), and av_write_uncoded_frame().