83 }
else if (num >= den) {
97 for (j=2; j<14; j+= 1+(j>2))
98 while (q.
den / q.
num < min_precision && q.
num % j == 0)
100 while (q.
den / q.
num < min_precision && q.
den < (1<<24))
137 const char *
format,
const char *filename)
165 s->oformat = oformat;
166 if (
s->oformat->priv_data_size > 0) {
170 if (
s->oformat->priv_class) {
171 *(
const AVClass**)
s->priv_data=
s->oformat->priv_class;
178 #if FF_API_FORMAT_FILENAME
210 for (n = 0;
s->oformat->codec_tag[n]; n++) {
211 avctag =
s->oformat->codec_tag[n];
246 if (
s->priv_data &&
s->oformat->priv_class && *(
const AVClass**)
s->priv_data==
s->oformat->priv_class &&
250 #if FF_API_FORMAT_FILENAME
261 #if FF_API_LAVF_AVCTX
266 "The AVFormatContext is not in set to bitexact mode, only "
267 "the AVCodecContext. If this is not intended, set "
268 "AVFormatContext.flags |= AVFMT_FLAG_BITEXACT.\n");
281 for (
i = 0;
i <
s->nb_streams;
i++) {
285 #if FF_API_LAVF_AVCTX
290 "parameters to muxers is deprecated, use AVStream.codecpar "
333 "(%d/%d) and encoder layer (%d/%d)\n",
364 "Tag %s incompatible with output codec id '%d' (%s)\n",
374 s->internal->nb_interleaved_streams++;
407 if (
s->oformat->init) {
408 if ((ret =
s->oformat->init(
s)) < 0) {
409 if (
s->oformat->deinit)
410 s->oformat->deinit(
s);
429 for (
i = 0;
i <
s->nb_streams;
i++) {
457 if (
s->avoid_negative_ts < 0) {
460 s->avoid_negative_ts = 0;
470 if (
s->pb &&
s->pb->error >= 0) {
480 if (
s->oformat &&
s->oformat->deinit &&
s->internal->initialized)
481 s->oformat->deinit(
s);
482 s->internal->initialized =
483 s->internal->streams_initialized = 0;
493 s->internal->initialized = 1;
494 s->internal->streams_initialized = ret;
496 if (
s->oformat->init && ret) {
509 int already_initialized =
s->internal->initialized;
510 int streams_already_initialized =
s->internal->streams_initialized;
512 if (!already_initialized)
518 if (
s->oformat->write_header) {
519 ret =
s->oformat->write_header(
s);
520 if (ret >= 0 &&
s->pb &&
s->pb->error < 0)
529 if (!
s->internal->streams_initialized) {
534 return streams_already_initialized;
541 #define AV_PKT_FLAG_UNCODED_FRAME 0x2000
544 #if FF_API_COMPUTE_PKT_FIELDS2 && FF_API_LAVF_AVCTX
553 if (!
s->internal->missing_ts_warning &&
558 "Timestamps are unset in a packet for stream %d. "
559 "This is deprecated and will stop working in the future. "
560 "Fix your code to set the timestamps properly\n", st->
index);
561 s->internal->missing_ts_warning = 1;
565 av_log(
s,
AV_LOG_DEBUG,
"compute_muxer_pkt_fields: pts:%s dts:%s cur_dts:%s b:%d size:%d st:%d\n",
600 "Application provided invalid, non monotonically increasing dts to muxer in stream %d: %s >= %s\n",
606 "pts (%s) < dts (%s) in stream %d\n",
687 if (
s->output_ts_offset) {
697 if (
s->avoid_negative_ts > 0) {
700 int64_t ts =
s->internal->avoid_negative_ts_use_pts ?
pkt->
pts :
pkt->
dts;
704 s->internal->offset = -ts;
711 s->internal->offset_timebase,
721 if (
s->internal->avoid_negative_ts_use_pts) {
724 "pts %s in stream %d.\n"
725 "Try -avoid_negative_ts 1 as a possible workaround.\n",
734 "Packets poorly interleaved, failed to avoid negative "
735 "timestamp %s in stream %d.\n"
736 "Try -max_interleave_delta 0 as a possible workaround.\n",
749 ret =
s->oformat->write_packet(
s,
pkt);
752 if (
s->pb && ret >= 0) {
754 if (
s->pb->error < 0)
782 #if !FF_API_COMPUTE_PKT_FIELDS2 || !FF_API_LAVF_AVCTX
798 "Timestamps are unset in a packet for stream %d\n", st->
index);
808 "Application provided invalid, non monotonically increasing "
809 "dts to muxer in stream %d: %" PRId64
" >= %" PRId64
"\n",
828 #define CHUNK_START 0x1000
836 int chunked =
s->max_chunk_size ||
s->max_chunk_duration;
855 next_point = &
s->internal->packet_buffer;
879 if (
compare(
s, &
s->internal->packet_buffer_end->pkt,
pkt)) {
881 && ((chunked && !((*next_point)->pkt.flags&
CHUNK_START))
883 next_point = &(*next_point)->
next;
887 next_point = &(
s->internal->packet_buffer_end->next);
892 s->internal->packet_buffer_end = this_pktl;
895 this_pktl->
next = *next_point;
909 if (
s->audio_preload) {
912 if (preload != preload2) {
914 preload *=
s->audio_preload;
915 preload2 *=
s->audio_preload;
923 comp = (ts2 > ts) - (ts2 < ts);
936 int stream_count = 0;
937 int noninterleaved_count = 0;
946 for (
i = 0;
i <
s->nb_streams;
i++) {
947 if (
s->streams[
i]->internal->last_in_packet_buffer) {
952 ++noninterleaved_count;
956 if (
s->internal->nb_interleaved_streams == stream_count)
959 if (
s->max_interleave_delta > 0 &&
960 s->internal->packet_buffer &&
962 s->internal->nb_interleaved_streams == stream_count+noninterleaved_count
964 AVPacket *top_pkt = &
s->internal->packet_buffer->pkt;
965 int64_t delta_dts = INT64_MIN;
970 for (
i = 0;
i <
s->nb_streams;
i++) {
972 const PacketList *last =
s->streams[
i]->internal->last_in_packet_buffer;
978 s->streams[
i]->time_base,
980 delta_dts =
FFMAX(delta_dts, last_dts - top_dts);
983 if (delta_dts >
s->max_interleave_delta) {
985 "Delay between the first packet and last packet in the "
986 "muxing queue is %"PRId64
" > %"PRId64
": forcing output\n",
987 delta_dts,
s->max_interleave_delta);
992 if (
s->internal->packet_buffer &&
996 AVPacket *top_pkt = &
s->internal->packet_buffer->pkt;
1004 while (
s->internal->packet_buffer) {
1005 AVPacket *top_pkt = &
s->internal->packet_buffer->pkt;
1011 if (
s->internal->shortest_end + 1 >= top_dts)
1014 pktl =
s->internal->packet_buffer;
1017 s->internal->packet_buffer = pktl->
next;
1018 if (!
s->internal->packet_buffer)
1019 s->internal->packet_buffer_end =
NULL;
1030 if (stream_count &&
flush) {
1032 pktl =
s->internal->packet_buffer;
1034 st =
s->streams[
out->stream_index];
1036 s->internal->packet_buffer = pktl->
next;
1037 if (!
s->internal->packet_buffer)
1038 s->internal->packet_buffer_end =
NULL;
1054 if (stream_index < 0 || stream_index >=
s->nb_streams)
1057 st =
s->streams[stream_index];
1060 if (
s->output_ts_offset)
1089 if (
s->oformat->interleave_packet) {
1090 return s->oformat->interleave_packet(
s,
out,
in,
flush);
1102 if (
s->oformat->check_bitstream) {
1104 if ((ret =
s->oformat->check_bitstream(
s,
pkt)) < 0)
1143 #if FF_API_COMPUTE_PKT_FIELDS2 && FF_API_LAVF_AVCTX
1164 "Failed to send packet to filter %s for stream %d\n",
1182 if (ret >= 0 && !interleaved)
1219 ret =
s->oformat->write_packet(
s,
NULL);
1221 if (ret >= 0 &&
s->pb &&
s->pb->error < 0)
1276 int i, ret1, ret = 0;
1280 for (
i = 0;
i <
s->nb_streams;
i++) {
1281 if (
s->streams[
i]->internal->bsfc) {
1293 if (
s->oformat->write_trailer) {
1297 ret =
s->oformat->write_trailer(
s);
1299 s->oformat->write_trailer(
s);
1308 ret =
s->pb ?
s->pb->error : 0;
1309 for (
i = 0;
i <
s->nb_streams;
i++) {
1313 if (
s->oformat->priv_class)
1320 int64_t *dts, int64_t *wall)
1322 if (!
s->oformat || !
s->oformat->get_output_timestamp)
1324 s->oformat->get_output_timestamp(
s, stream, dts, wall);
1361 if (!
s->oformat->write_uncoded_frame) {
1413 if (!
s->oformat->write_uncoded_frame)
1415 return s->oformat->write_uncoded_frame(
s, stream_index,
NULL,
static void flush(AVCodecContext *avctx)
static double val(void *priv, double ch)
static const char *const format[]
uint8_t pi<< 24) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_U8, uint8_t,(*(const uint8_t *) pi - 0x80) *(1.0f/(1<< 7))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_U8, uint8_t,(*(const uint8_t *) pi - 0x80) *(1.0/(1<< 7))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S16, int16_t,(*(const int16_t *) pi >> 8)+0x80) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S16, int16_t, *(const int16_t *) pi *(1.0f/(1<< 15))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S16, int16_t, *(const int16_t *) pi *(1.0/(1<< 15))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S32, int32_t,(*(const int32_t *) pi >> 24)+0x80) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S32, int32_t, *(const int32_t *) pi *(1.0f/(1U<< 31))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S32, int32_t, *(const int32_t *) pi *(1.0/(1U<< 31))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_FLT, float, av_clip_uint8(lrintf(*(const float *) pi *(1<< 7))+0x80)) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_FLT, float, av_clip_int16(lrintf(*(const float *) pi *(1<< 15)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_FLT, float, av_clipl_int32(llrintf(*(const float *) pi *(1U<< 31)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_DBL, double, av_clip_uint8(lrint(*(const double *) pi *(1<< 7))+0x80)) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_DBL, double, av_clip_int16(lrint(*(const double *) pi *(1<< 15)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_DBL, double, av_clipl_int32(llrint(*(const double *) pi *(1U<< 31)))) #define SET_CONV_FUNC_GROUP(ofmt, ifmt) static void set_generic_function(AudioConvert *ac) { } void ff_audio_convert_free(AudioConvert **ac) { if(! *ac) return;ff_dither_free(&(*ac) ->dc);av_freep(ac);} AudioConvert *ff_audio_convert_alloc(AVAudioResampleContext *avr, enum AVSampleFormat out_fmt, enum AVSampleFormat in_fmt, int channels, int sample_rate, int apply_map) { AudioConvert *ac;int in_planar, out_planar;ac=av_mallocz(sizeof(*ac));if(!ac) return NULL;ac->avr=avr;ac->out_fmt=out_fmt;ac->in_fmt=in_fmt;ac->channels=channels;ac->apply_map=apply_map;if(avr->dither_method !=AV_RESAMPLE_DITHER_NONE &&av_get_packed_sample_fmt(out_fmt)==AV_SAMPLE_FMT_S16 &&av_get_bytes_per_sample(in_fmt) > 2) { ac->dc=ff_dither_alloc(avr, out_fmt, in_fmt, channels, sample_rate, apply_map);if(!ac->dc) { av_free(ac);return NULL;} return ac;} in_planar=ff_sample_fmt_is_planar(in_fmt, channels);out_planar=ff_sample_fmt_is_planar(out_fmt, channels);if(in_planar==out_planar) { ac->func_type=CONV_FUNC_TYPE_FLAT;ac->planes=in_planar ? ac->channels :1;} else if(in_planar) ac->func_type=CONV_FUNC_TYPE_INTERLEAVE;else ac->func_type=CONV_FUNC_TYPE_DEINTERLEAVE;set_generic_function(ac);if(ARCH_AARCH64) ff_audio_convert_init_aarch64(ac);if(ARCH_ARM) ff_audio_convert_init_arm(ac);if(ARCH_X86) ff_audio_convert_init_x86(ac);return ac;} int ff_audio_convert(AudioConvert *ac, AudioData *out, AudioData *in) { int use_generic=1;int len=in->nb_samples;int p;if(ac->dc) { av_log(ac->avr, AV_LOG_TRACE, "%d samples - audio_convert: %s to %s (dithered)\n", len, av_get_sample_fmt_name(ac->in_fmt), av_get_sample_fmt_name(ac->out_fmt));return ff_convert_dither(ac-> in
simple assert() macros that are a bit more flexible than ISO C assert().
#define av_assert2(cond)
assert() equivalent, that does lie in speed critical code.
#define av_assert1(cond)
assert() equivalent, that does not lie in speed critical code.
#define av_assert0(cond)
assert() equivalent, that is always enabled.
#define AV_EF_EXPLODE
abort decoding on minor error detection
#define FF_COMPLIANCE_NORMAL
void avio_write_marker(AVIOContext *s, int64_t time, enum AVIODataMarkerType type)
Mark the written bytestream as a specific type.
@ AVIO_DATA_MARKER_TRAILER
Trailer data, which doesn't contain actual content, but only for finalizing the output file.
@ AVIO_DATA_MARKER_HEADER
Header data; this needs to be present for the stream to be decodeable.
@ AVIO_DATA_MARKER_UNKNOWN
This is any, unlabelled data.
@ AVIO_DATA_MARKER_FLUSH_POINT
A point in the output bytestream where the underlying AVIOContext might flush the buffer depending on...
void avio_flush(AVIOContext *s)
Force flushing of buffered data.
#define FFSWAP(type, a, b)
#define MKTAG(a, b, c, d)
static __device__ float fabs(float a)
static av_always_inline void RENAME() interleave(TYPE *dst, TYPE *src0, TYPE *src1, int w2, int add, int shift)
static void comp(unsigned char *dst, ptrdiff_t dst_stride, unsigned char *src, ptrdiff_t src_stride, int add)
const OptionDef options[]
int av_opt_set_dict2(void *obj, AVDictionary **options, int search_flags)
Set all the options from a given dictionary on an object.
#define AV_OPT_SEARCH_CHILDREN
Search in possible children of the given object first.
void av_opt_free(void *obj)
Free all allocated objects in obj.
void av_opt_set_defaults(void *s)
Set the values of all AVOption fields to their default values.
int av_opt_set_dict(void *obj, AVDictionary **options)
Set all the options from a given dictionary on an object.
int avcodec_parameters_from_context(AVCodecParameters *par, const AVCodecContext *codec)
Fill the parameters struct based on the values from the supplied codec context.
#define AV_CODEC_FLAG_BITEXACT
Use only bitexact stuff (except (I)DCT).
int av_bsf_receive_packet(AVBSFContext *ctx, AVPacket *pkt)
Retrieve a filtered packet.
int av_bsf_send_packet(AVBSFContext *ctx, AVPacket *pkt)
Submit a packet for filtering.
AVCodecID
Identify the syntax and semantics of the bitstream.
const AVCodecDescriptor * avcodec_descriptor_get(enum AVCodecID id)
#define AV_CODEC_PROP_REORDER
Codec supports frame reordering.
@ AV_CODEC_ID_MPEG2VIDEO
preferred ID for MPEG-1/2 video decoding
#define AV_INPUT_BUFFER_PADDING_SIZE
Required number of additionally allocated bytes at the end of the input bitstream for decoding.
int av_get_bits_per_sample(enum AVCodecID codec_id)
Return codec bits per sample.
int av_get_audio_frame_duration2(AVCodecParameters *par, int frame_bytes)
This function is the same as av_get_audio_frame_duration(), except it works with AVCodecParameters in...
int av_get_audio_frame_duration(AVCodecContext *avctx, int frame_bytes)
Return audio frame duration.
void av_packet_unref(AVPacket *pkt)
Wipe the packet.
#define AV_PKT_FLAG_KEY
The packet contains a keyframe.
int av_packet_make_refcounted(AVPacket *pkt)
Ensure the data described by a given packet is reference counted.
void av_packet_move_ref(AVPacket *dst, AVPacket *src)
Move every field in src to dst and reset src.
int av_packet_copy_props(AVPacket *dst, const AVPacket *src)
Copy only "properties" fields from src to dst.
void av_packet_rescale_ts(AVPacket *pkt, AVRational src_tb, AVRational dst_tb)
Convert valid timing fields (timestamps / durations) in a packet from one timebase to another.
void avformat_free_context(AVFormatContext *s)
Free an AVFormatContext and all its streams.
AVFormatContext * avformat_alloc_context(void)
Allocate an AVFormatContext.
int avformat_init_output(AVFormatContext *s, AVDictionary **options)
Allocate the stream private data and initialize the codec, but do not write the header.
int avformat_write_header(AVFormatContext *s, AVDictionary **options)
Allocate the stream private data and write the stream header to an output media file.
ff_const59 AVOutputFormat * av_guess_format(const char *short_name, const char *filename, const char *mime_type)
Return the output format in the list of registered output formats which best matches the provided par...
int av_interleaved_write_frame(AVFormatContext *s, AVPacket *pkt)
Write a packet to an output media file ensuring correct interleaving.
#define AVSTREAM_INIT_IN_INIT_OUTPUT
stream parameters initialized in avformat_init_output
#define AVSTREAM_INIT_IN_WRITE_HEADER
stream parameters initialized in avformat_write_header
int av_write_uncoded_frame_query(AVFormatContext *s, int stream_index)
Test whether a muxer supports uncoded frame.
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 av_write_trailer(AVFormatContext *s)
Write the stream trailer to an output media file and free the file private data.
int av_write_frame(AVFormatContext *s, AVPacket *in)
Write a packet to an output media file.
int av_write_uncoded_frame(AVFormatContext *s, int stream_index, AVFrame *frame)
Write an uncoded frame to an output media file.
int av_interleaved_write_uncoded_frame(AVFormatContext *s, int stream_index, AVFrame *frame)
Write an uncoded frame to an output media file.
unsigned int av_codec_get_tag(const struct AVCodecTag *const *tags, enum AVCodecID id)
Get the codec tag for the given codec id id.
AVBufferRef * av_buffer_create(uint8_t *data, buffer_size_t size, void(*free)(void *opaque, uint8_t *data), void *opaque, int flags)
Create an AVBuffer from an existing array.
AVBufferRef * av_buffer_ref(AVBufferRef *buf)
Create a new reference to an AVBuffer.
void av_dict_free(AVDictionary **pm)
Free all the memory allocated for an AVDictionary struct and all keys and values.
#define AV_DICT_IGNORE_SUFFIX
Return first entry in a dictionary whose first part corresponds to the search key,...
int av_dict_copy(AVDictionary **dst, const AVDictionary *src, int flags)
Copy entries from one AVDictionary struct into another.
int av_dict_set(AVDictionary **pm, const char *key, const char *value, int flags)
Set the given entry in *pm, overwriting an existing entry.
AVDictionaryEntry * av_dict_get(const AVDictionary *m, const char *key, const AVDictionaryEntry *prev, int flags)
Get a dictionary entry with matching key.
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
#define AVERROR_EOF
End of file.
#define av_err2str(errnum)
Convenience macro, the return value should be used only directly in function arguments but never stan...
void av_frame_free(AVFrame **frame)
Free the frame and any dynamically allocated objects in it, e.g.
#define AV_LOG_TRACE
Extremely verbose debugging, useful for libav* development.
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
#define AV_LOG_WARNING
Something somehow does not look correct.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
static double av_q2d(AVRational a)
Convert an AVRational to a double.
static int av_cmp_q(AVRational a, AVRational b)
Compare two rationals.
static av_always_inline AVRational av_inv_q(AVRational q)
Invert a rational.
int av_compare_ts(int64_t ts_a, AVRational tb_a, int64_t ts_b, AVRational tb_b)
Compare two timestamps each in its own time base.
int64_t av_rescale(int64_t a, int64_t b, int64_t c)
Rescale a 64-bit integer with rounding to nearest.
int64_t av_rescale_q_rnd(int64_t a, AVRational bq, AVRational cq, enum AVRounding rnd)
Rescale a 64-bit integer by 2 rational numbers with specified rounding.
int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq)
Rescale a 64-bit integer by 2 rational numbers.
@ AV_ROUND_UP
Round toward +infinity.
void * av_mallocz(size_t size)
Allocate a memory block with alignment suitable for all memory accesses (including vectors if availab...
char * av_strdup(const char *s)
Duplicate a string.
#define av_fourcc2str(fourcc)
@ AVMEDIA_TYPE_ATTACHMENT
Opaque data information usually sparse.
@ AVMEDIA_TYPE_DATA
Opaque data information usually continuous.
@ AVMEDIA_TYPE_UNKNOWN
Usually treated as AVMEDIA_TYPE_DATA.
size_t av_strlcpy(char *dst, const char *src, size_t size)
Copy the string src to dst, but no more than size - 1 bytes, and null-terminate dst.
#define AV_NOPTS_VALUE
Undefined timestamp value.
#define AV_TIME_BASE
Internal time base represented as integer.
#define AV_TIME_BASE_Q
Internal time base represented as fractional value.
common internal api header.
unsigned int avpriv_toupper4(unsigned int x)
common internal API header
#define FF_DISABLE_DEPRECATION_WARNINGS
#define FF_ENABLE_DEPRECATION_WARNINGS
const AVPacket * ff_interleaved_peek(AVFormatContext *s, int stream)
Find the next packet in the interleaving queue for the given stream.
#define AV_PKT_FLAG_UNCODED_FRAME
static void deinit_muxer(AVFormatContext *s)
int ff_interleave_packet_per_dts(AVFormatContext *s, AVPacket *out, AVPacket *pkt, int flush)
Interleave an AVPacket per dts so it can be muxed.
static FF_DISABLE_DEPRECATION_WARNINGS int compute_muxer_pkt_fields(AVFormatContext *s, AVStream *st, AVPacket *pkt)
static int interleaved_write_packet(AVFormatContext *s, AVPacket *pkt, int flush)
enum AVChromaLocation ff_choose_chroma_location(AVFormatContext *s, AVStream *st)
Chooses a timebase for muxing the specified stream.
static FF_ENABLE_DEPRECATION_WARNINGS void guess_pkt_duration(AVFormatContext *s, AVStream *st, AVPacket *pkt)
static int init_pts(AVFormatContext *s)
static void uncoded_frame_free(void *unused, uint8_t *data)
static int write_packet(AVFormatContext *s, AVPacket *pkt)
Shift timestamps and call muxer; the original pts/dts are not kept.
static int interleave_packet(AVFormatContext *s, AVPacket *out, AVPacket *in, int flush)
Interleave an AVPacket correctly so it can be muxed.
static int write_packets_common(AVFormatContext *s, AVPacket *pkt, int interleaved)
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.
int ff_interleave_add_packet(AVFormatContext *s, AVPacket *pkt, int(*compare)(AVFormatContext *, const AVPacket *, const AVPacket *))
Add packet to an AVFormatContext's packet_buffer list, determining its interleaved position using com...
AVRational ff_choose_timebase(AVFormatContext *s, AVStream *st, int min_precision)
Chooses a timebase for muxing the specified stream.
static void frac_add(FFFrac *f, int64_t incr)
Fractional addition to f: f = f + (incr / f->den).
static int write_packets_from_bsfs(AVFormatContext *s, AVStream *st, AVPacket *pkt, int interleaved)
static void flush_if_needed(AVFormatContext *s)
static int write_packet_common(AVFormatContext *s, AVStream *st, AVPacket *pkt, int interleaved)
static int check_packet(AVFormatContext *s, AVPacket *pkt)
static int interleave_compare_dts(AVFormatContext *s, const AVPacket *next, const AVPacket *pkt)
int ff_get_muxer_ts_offset(AVFormatContext *s, int stream_index, int64_t *offset)
static int init_muxer(AVFormatContext *s, AVDictionary **options)
int avformat_alloc_output_context2(AVFormatContext **avctx, ff_const59 AVOutputFormat *oformat, const char *format, const char *filename)
Allocate an AVFormatContext for an output format.
static int check_bitstream(AVFormatContext *s, AVStream *st, AVPacket *pkt)
static int prepare_input_packet(AVFormatContext *s, AVStream *st, AVPacket *pkt)
static int write_uncoded_frame_internal(AVFormatContext *s, int stream_index, AVFrame *frame, int interleaved)
static void frac_init(FFFrac *f, int64_t val, int64_t num, int64_t den)
f = val + (num / den) + 0.5.
static int validate_codec_tag(AVFormatContext *s, AVStream *st)
const AVPixFmtDescriptor * av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
AVChromaLocation
Location of chroma samples.
@ AVCHROMA_LOC_TOPLEFT
ITU-R 601, SMPTE 274M 296M S314M(DV 4:1:1), mpeg2 4:2:2.
@ AVCHROMA_LOC_LEFT
MPEG-2/4 4:2:0, H.264 default for 4:2:0.
@ AVCHROMA_LOC_CENTER
MPEG-1 4:2:0, JPEG 4:2:0, H.263 4:2:0.
@ AVCHROMA_LOC_UNSPECIFIED
The bitstream filter state.
AVRational time_base_out
The timebase used for the timestamps of the output packets.
const struct AVBitStreamFilter * filter
The bitstream filter this context is an instance of.
Describe the class of an AVClass context structure.
int max_b_frames
maximum number of B-frames between non-B-frames Note: The output will be delayed by max_b_frames+1 re...
enum AVMediaType codec_type
This struct describes the properties of a single codec described by an AVCodecID.
This struct describes the properties of an encoded stream.
enum AVFieldOrder field_order
Video only.
enum AVMediaType codec_type
General type of the encoded data.
int block_align
Audio only.
AVRational sample_aspect_ratio
Video only.
int video_delay
Video only.
uint32_t codec_tag
Additional information about the codec (corresponds to the AVI FOURCC).
enum AVCodecID codec_id
Specific type of the encoded data (the codec used).
int sample_rate
Audio only.
enum AVChromaLocation chroma_location
AVStream ** streams
A list of all streams in the file.
This structure describes decoded (raw) audio or video data.
int64_t pts
Presentation timestamp in time_base units (time when frame should be shown to user).
int64_t pkt_duration
duration of the corresponding packet, expressed in AVStream->time_base units, 0 if unknown.
This structure stores compressed data.
AVBufferRef * buf
A reference to the reference-counted buffer where the packet data is stored.
int flags
A combination of AV_PKT_FLAG values.
int64_t duration
Duration of this packet in AVStream->time_base units, 0 if unknown.
int64_t pts
Presentation timestamp in AVStream->time_base units; the time at which the decompressed packet will b...
int64_t dts
Decompression timestamp in AVStream->time_base units; the time at which the packet is decompressed.
AVPacketSideData * side_data
Additional packet data that can be provided by the container.
Descriptor that unambiguously describes how the bits of a pixel are stored in the up to 4 data planes...
uint8_t log2_chroma_w
Amount to shift the luma width right to find the chroma width.
uint8_t log2_chroma_h
Amount to shift the luma height right to find the chroma height.
Rational number (pair of numerator and denominator).
int reorder
Set to 1 if the codec allows reordering, so pts can be different from dts.
AVCodecContext * avctx
The codec context used by avformat_find_stream_info, the parser, etc.
int64_t interleaver_chunk_duration
int64_t mux_ts_offset
Timestamp offset added to timestamps before muxing.
int bitstream_checked
Whether or not check_bitstream should still be run on each packet.
int64_t pts_buffer[MAX_REORDER_DELAY+1]
struct PacketList * last_in_packet_buffer
last packet in packet_buffer for this stream when muxing.
AVBSFContext * bsfc
bitstream filter to run on stream
int64_t interleaver_chunk_size
AVCodecParameters * codecpar
Codec parameters associated with this stream.
AVRational sample_aspect_ratio
sample aspect ratio (0 if unknown)
int index
stream index in AVFormatContext
AVRational avg_frame_rate
Average framerate.
AVRational time_base
This is the fundamental unit of time (in seconds) in terms of which frame timestamps are represented.
attribute_deprecated AVCodecContext * codec
AVStreamInternal * internal
An opaque field for libavformat internal usage.
int disposition
AV_DISPOSITION_* bit field.
The exact value of the fractional number is: 'val + num / den'.
static void error(const char *err)
timestamp utils, mostly useful for debugging/logging purposes
#define av_ts2str(ts)
Convenience macro, the return value should be used only directly in function arguments but never stan...
static float compare(const AVFrame *haystack, const AVFrame *obj, int offx, int offy)
static const uint8_t offset[127][2]