FFmpeg
internal.h
Go to the documentation of this file.
1 /*
2  * copyright (c) 2001 Fabrice Bellard
3  *
4  * This file is part of FFmpeg.
5  *
6  * FFmpeg is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * FFmpeg is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with FFmpeg; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19  */
20 
21 #ifndef AVFORMAT_INTERNAL_H
22 #define AVFORMAT_INTERNAL_H
23 
24 #include <stdint.h>
25 
27 
28 #include "avformat.h"
29 
30 #define MAX_URL_SIZE 4096
31 
32 /** size of probe buffer, for guessing file type from file contents */
33 #define PROBE_BUF_MIN 2048
34 #define PROBE_BUF_MAX (1 << 20)
35 
36 #ifdef DEBUG
37 # define hex_dump_debug(class, buf, size) av_hex_dump_log(class, AV_LOG_DEBUG, buf, size)
38 #else
39 # define hex_dump_debug(class, buf, size) do { if (0) av_hex_dump_log(class, AV_LOG_DEBUG, buf, size); } while(0)
40 #endif
41 
42 /**
43  * For an AVInputFormat with this flag set read_close() needs to be called
44  * by the caller upon read_header() failure.
45  */
46 #define FF_FMT_INIT_CLEANUP (1 << 0)
47 
48 typedef struct AVCodecTag {
49  enum AVCodecID id;
50  unsigned int tag;
51 } AVCodecTag;
52 
53 typedef struct CodecMime{
54  char str[32];
55  enum AVCodecID id;
56 } CodecMime;
57 
58 /*************************************************/
59 /* fractional numbers for exact pts handling */
60 
61 /**
62  * The exact value of the fractional number is: 'val + num / den'.
63  * num is assumed to be 0 <= num < den.
64  */
65 typedef struct FFFrac {
66  int64_t val, num, den;
67 } FFFrac;
68 
69 
70 typedef struct FFFormatContext {
71  /**
72  * The public context.
73  */
75 
76  /**
77  * Number of streams relevant for interleaving.
78  * Muxing only.
79  */
81 
82  /**
83  * Whether the timestamp shift offset has already been determined.
84  * -1: disabled, 0: not yet determined, 1: determined.
85  */
86  enum {
91 #define AVOID_NEGATIVE_TS_ENABLED(status) ((status) >= 0)
92 
93  /**
94  * The interleavement function in use. Always set for muxers.
95  */
97  int flush, int has_packet);
98 
99  /**
100  * This buffer is only needed when packets were already buffered but
101  * not decoded, for example to get the codec parameters in MPEG
102  * streams.
103  */
105 
106  /* av_seek_frame() support */
107  int64_t data_offset; /**< offset of the first packet */
108 
109  /**
110  * Raw packets from the demuxer, prior to parsing and decoding.
111  * This buffer is used for buffering packets until the codec can
112  * be identified, as parsing cannot be done without knowing the
113  * codec.
114  */
116  /**
117  * Packets split by the parser get queued here.
118  */
120  /**
121  * The generic code uses this as a temporary packet
122  * to parse packets or for muxing, especially flushing.
123  * For demuxers, it may also be used for other means
124  * for short periods that are guaranteed not to overlap
125  * with calls to av_read_frame() (or ff_read_packet())
126  * or with each other.
127  * It may be used by demuxers as a replacement for
128  * stack packets (unless they call one of the aforementioned
129  * functions with their own AVFormatContext).
130  * Every user has to ensure that this packet is blank
131  * after using it.
132  */
134 
135  /**
136  * Used to hold temporary packets for the generic demuxing code.
137  * When muxing, it may be used by muxers to hold packets (even
138  * permanent ones).
139  */
141  /**
142  * Sum of the size of packets in raw_packet_buffer, in bytes.
143  */
145 
146 #if FF_API_COMPUTE_PKT_FIELDS2
147  int missing_ts_warning;
148 #endif
149 
151 
153 
154 #if FF_API_LAVF_SHORTEST
155  /**
156  * Timestamp of the end of the shortest stream.
157  */
158  int64_t shortest_end;
159 #endif
160 
161  /**
162  * Whether or not avformat_init_output has already been called
163  */
165 
166  /**
167  * Whether or not avformat_init_output fully initialized streams
168  */
170 
171  /**
172  * ID3v2 tag useful for MP3 demuxing
173  */
175 
176  /*
177  * Prefer the codec framerate for avg_frame_rate computation.
178  */
180 
181  /**
182  * Set if chapter ids are strictly monotonic.
183  */
185 
186  /**
187  * Contexts and child contexts do not contain a metadata option
188  */
189  int metafree;
191 
193 {
194  return (FFFormatContext*)s;
195 }
196 
197 typedef struct FFStream {
198  /**
199  * The public context.
200  */
202 
203  /**
204  * Set to 1 if the codec allows reordering, so pts can be different
205  * from dts.
206  */
207  int reorder;
208 
209  /**
210  * bitstream filter to run on stream
211  * - encoding: Set by muxer using ff_stream_add_bitstream_filter
212  * - decoding: unused
213  */
215 
216  /**
217  * Whether or not check_bitstream should still be run on each packet
218  */
220 
221  /**
222  * The codec context used by avformat_find_stream_info, the parser, etc.
223  */
225  /**
226  * 1 if avctx has been initialized with the values from the codec parameters
227  */
229 
230  /* the context for extracting extradata in find_stream_info()
231  * inited=1/bsf=NULL signals that extracting is not possible (codec not
232  * supported) */
233  struct {
234  struct AVBSFContext *bsf;
235  int inited;
237 
238  /**
239  * Whether the internal avctx needs to be updated from codecpar (after a late change to codecpar)
240  */
242 
244 
246 
247  /**
248  * Stream information used internally by avformat_find_stream_info()
249  */
251 
252  AVIndexEntry *index_entries; /**< Only used if the format does not
253  support seeking natively. */
256 
259 
260  /**
261  * stream probing state
262  * -1 -> probing finished
263  * 0 -> no probing requested
264  * rest -> perform probing with request_probe being the minimum score to accept.
265  */
267  /**
268  * Indicates that everything up to the next keyframe
269  * should be discarded.
270  */
272 
273  /**
274  * Number of samples to skip at the start of the frame decoded from the next packet.
275  */
277 
278  /**
279  * If not 0, the number of samples that should be skipped from the start of
280  * the stream (the samples are removed from packets with pts==0, which also
281  * assumes negative timestamps do not happen).
282  * Intended for use with formats such as mp3 with ad-hoc gapless audio
283  * support.
284  */
286 
287  /**
288  * If not 0, the first audio sample that should be discarded from the stream.
289  * This is broken by design (needs global sample count), but can't be
290  * avoided for broken by design formats such as mp3 with ad-hoc gapless
291  * audio support.
292  */
294 
295  /**
296  * The sample after last sample that is intended to be discarded after
297  * first_discard_sample. Works on frame boundaries only. Used to prevent
298  * early EOF if the gapless info is broken (considered concatenated mp3s).
299  */
301 
302  /**
303  * Number of internally decoded frames, used internally in libavformat, do not access
304  * its lifetime differs from info which is why it is not in that structure.
305  */
307 
308  /**
309  * Timestamp offset added to timestamps before muxing
310  */
311  int64_t mux_ts_offset;
312 
313  /**
314  * This is the lowest ts allowed in this track; it may be set by the muxer
315  * during init or write_header and influences the automatic timestamp
316  * shifting code.
317  */
319 
320  /**
321  * Internal data to check for wrapping of the time stamp
322  */
324 
325  /**
326  * Options for behavior, when a wrap is detected.
327  *
328  * Defined by AV_PTS_WRAP_ values.
329  *
330  * If correction is enabled, there are two possibilities:
331  * If the first time stamp is near the wrap point, the wrap offset
332  * will be subtracted, which will create negative time stamps.
333  * Otherwise the offset will be added.
334  */
336 
337  /**
338  * Internal data to prevent doing update_initial_durations() twice
339  */
341 
342 #define MAX_REORDER_DELAY 16
343 
344  /**
345  * Internal data to generate dts from pts
346  */
349 
351 
352  /**
353  * Internal data to analyze DTS and detect faulty mpeg streams
354  */
356  uint8_t dts_ordered;
357  uint8_t dts_misordered;
358 
359  /**
360  * Internal data to inject global side data
361  */
363 
364  /**
365  * display aspect ratio (0 if unknown)
366  * - encoding: unused
367  * - decoding: Set by libavformat to calculate sample_aspect_ratio internally
368  */
370 
372 
373  /**
374  * last packet in packet_buffer for this stream when muxing.
375  */
377 
378  int64_t last_IP_pts;
380 
381  /**
382  * Number of packets to buffer for codec probing
383  */
385 
386  /* av_read_frame() support */
389 
390  /**
391  * Number of frames that have been demuxed during avformat_find_stream_info()
392  */
394 
395  /**
396  * Stream Identifier
397  * This is the MPEG-TS stream identifier +1
398  * 0 means unknown
399  */
401 
402  // Timestamp generation support:
403  /**
404  * Timestamp corresponding to the last dts sync point.
405  *
406  * Initialized when AVCodecParserContext.dts_sync_point >= 0 and
407  * a DTS is received from the underlying container. Otherwise set to
408  * AV_NOPTS_VALUE by default.
409  */
410  int64_t first_dts;
411  int64_t cur_dts;
412 
414 } FFStream;
415 
417 {
418  return (FFStream*)st;
419 }
420 
421 static av_always_inline const FFStream *cffstream(const AVStream *st)
422 {
423  return (const FFStream*)st;
424 }
425 
426 #ifdef __GNUC__
427 #define dynarray_add(tab, nb_ptr, elem)\
428 do {\
429  __typeof__(tab) _tab = (tab);\
430  __typeof__(elem) _elem = (elem);\
431  (void)sizeof(**_tab == _elem); /* check that types are compatible */\
432  av_dynarray_add(_tab, nb_ptr, _elem);\
433 } while(0)
434 #else
435 #define dynarray_add(tab, nb_ptr, elem)\
436 do {\
437  av_dynarray_add((tab), nb_ptr, (elem));\
438 } while(0)
439 #endif
440 
441 
443 
444 /**
445  * Automatically create sub-directories
446  *
447  * @param path will create sub-directories by path
448  * @return 0, or < 0 on error
449  */
450 int ff_mkdir_p(const char *path);
451 
452 /**
453  * Write hexadecimal string corresponding to given binary data. The string
454  * is zero-terminated.
455  *
456  * @param buf the output string is written here;
457  * needs to be at least 2 * size + 1 bytes long.
458  * @param src the input data to be transformed.
459  * @param size the size (in byte) of src.
460  * @param lowercase determines whether to use the range [0-9a-f] or [0-9A-F].
461  * @return buf.
462  */
463 char *ff_data_to_hex(char *buf, const uint8_t *src, int size, int lowercase);
464 
465 /**
466  * Parse a string of hexadecimal strings. Any space between the hexadecimal
467  * digits is ignored.
468  *
469  * @param data if non-null, the parsed data is written to this pointer
470  * @param p the string to parse
471  * @return the number of bytes written (or to be written, if data is null)
472  */
473 int ff_hex_to_data(uint8_t *data, const char *p);
474 
475 #define NTP_OFFSET 2208988800ULL
476 #define NTP_OFFSET_US (NTP_OFFSET * 1000000ULL)
477 
478 /** Get the current time since NTP epoch in microseconds. */
479 uint64_t ff_ntp_time(void);
480 
481 /**
482  * Get the NTP time stamp formatted as per the RFC-5905.
483  *
484  * @param ntp_time NTP time in micro seconds (since NTP epoch)
485  * @return the formatted NTP time stamp
486  */
487 uint64_t ff_get_formatted_ntp_time(uint64_t ntp_time_us);
488 
489 /**
490  * Parse the NTP time in micro seconds (since NTP epoch).
491  *
492  * @param ntp_ts NTP time stamp formatted as per the RFC-5905.
493  * @return the time in micro seconds (since NTP epoch)
494  */
495 uint64_t ff_parse_ntp_time(uint64_t ntp_ts);
496 
497 /**
498  * Append the media-specific SDP fragment for the media stream c
499  * to the buffer buff.
500  *
501  * Note, the buffer needs to be initialized, since it is appended to
502  * existing content.
503  *
504  * @param buff the buffer to append the SDP fragment to
505  * @param size the size of the buff buffer
506  * @param st the AVStream of the media to describe
507  * @param idx the global stream index
508  * @param dest_addr the destination address of the media stream, may be NULL
509  * @param dest_type the destination address type, may be NULL
510  * @param port the destination port of the media stream, 0 if unknown
511  * @param ttl the time to live of the stream, 0 if not multicast
512  * @param fmt the AVFormatContext, which might contain options modifying
513  * the generated SDP
514  * @return 0 on success, a negative error code on failure
515  */
516 int ff_sdp_write_media(char *buff, int size, const AVStream *st, int idx,
517  const char *dest_addr, const char *dest_type,
518  int port, int ttl, AVFormatContext *fmt);
519 
520 /**
521  * Read a whole line of text from AVIOContext. Stop reading after reaching
522  * either a \\n, a \\0 or EOF. The returned string is always \\0-terminated,
523  * and may be truncated if the buffer is too small.
524  *
525  * @param s the read-only AVIOContext
526  * @param buf buffer to store the read line
527  * @param maxlen size of the buffer
528  * @return the length of the string written in the buffer, not including the
529  * final \\0
530  */
531 int ff_get_line(AVIOContext *s, char *buf, int maxlen);
532 
533 /**
534  * Same as ff_get_line but strip the white-space characters in the text tail
535  *
536  * @param s the read-only AVIOContext
537  * @param buf buffer to store the read line
538  * @param maxlen size of the buffer
539  * @return the length of the string written in the buffer
540  */
541 int ff_get_chomp_line(AVIOContext *s, char *buf, int maxlen);
542 
543 #define SPACE_CHARS " \t\r\n"
544 
545 /**
546  * Callback function type for ff_parse_key_value.
547  *
548  * @param key a pointer to the key
549  * @param key_len the number of bytes that belong to the key, including the '='
550  * char
551  * @param dest return the destination pointer for the value in *dest, may
552  * be null to ignore the value
553  * @param dest_len the length of the *dest buffer
554  */
555 typedef void (*ff_parse_key_val_cb)(void *context, const char *key,
556  int key_len, char **dest, int *dest_len);
557 /**
558  * Parse a string with comma-separated key=value pairs. The value strings
559  * may be quoted and may contain escaped characters within quoted strings.
560  *
561  * @param str the string to parse
562  * @param callback_get_buf function that returns where to store the
563  * unescaped value string.
564  * @param context the opaque context pointer to pass to callback_get_buf
565  */
566 void ff_parse_key_value(const char *str, ff_parse_key_val_cb callback_get_buf,
567  void *context);
568 
569 enum AVCodecID ff_guess_image2_codec(const char *filename);
570 
571 const struct AVCodec *ff_find_decoder(AVFormatContext *s, const AVStream *st,
572  enum AVCodecID codec_id);
573 
574 /**
575  * Set the time base and wrapping info for a given stream. This will be used
576  * to interpret the stream's timestamps. If the new time base is invalid
577  * (numerator or denominator are non-positive), it leaves the stream
578  * unchanged.
579  *
580  * @param st stream
581  * @param pts_wrap_bits number of bits effectively used by the pts
582  * (used for wrap control)
583  * @param pts_num time base numerator
584  * @param pts_den time base denominator
585  */
586 void avpriv_set_pts_info(AVStream *st, int pts_wrap_bits,
587  unsigned int pts_num, unsigned int pts_den);
588 
589 /**
590  * Set the timebase for each stream from the corresponding codec timebase and
591  * print it.
592  */
594 
595 /**
596  * Frees a stream without modifying the corresponding AVFormatContext.
597  * Must only be called if the latter doesn't matter or if the stream
598  * is not yet attached to an AVFormatContext.
599  */
600 void ff_free_stream(AVStream **st);
601 /**
602  * Remove a stream from its AVFormatContext and free it.
603  * The stream must be the last stream of the AVFormatContext.
604  */
606 
607 unsigned int ff_codec_get_tag(const AVCodecTag *tags, enum AVCodecID id);
608 
609 enum AVCodecID ff_codec_get_id(const AVCodecTag *tags, unsigned int tag);
610 
611 int ff_is_intra_only(enum AVCodecID id);
612 
613 /**
614  * Select a PCM codec based on the given parameters.
615  *
616  * @param bps bits-per-sample
617  * @param flt floating-point
618  * @param be big-endian
619  * @param sflags signed flags. each bit corresponds to one byte of bit depth.
620  * e.g. the 1st bit indicates if 8-bit should be signed or
621  * unsigned, the 2nd bit indicates if 16-bit should be signed or
622  * unsigned, etc... This is useful for formats such as WAVE where
623  * only 8-bit is unsigned and all other bit depths are signed.
624  * @return a PCM codec id or AV_CODEC_ID_NONE
625  */
626 enum AVCodecID ff_get_pcm_codec_id(int bps, int flt, int be, int sflags);
627 
628 /**
629  * Copy side data from source to destination stream
630  *
631  * @param dst pointer to destination AVStream
632  * @param src pointer to source AVStream
633  * @return >=0 on success, AVERROR code on error
634  */
636 
637 /**
638  * Create a new stream and copy to it all parameters from a source stream, with
639  * the exception of the index field, which is set when the new stream is
640  * created.
641  *
642  * @param dst_ctx pointer to the context in which the new stream is created
643  * @param src pointer to source AVStream
644  * @return pointer to the new stream or NULL on error
645  */
647 
648 /**
649  * Wrap ffurl_move() and log if error happens.
650  *
651  * @param url_src source path
652  * @param url_dst destination path
653  * @return 0 or AVERROR on failure
654  */
655 int ff_rename(const char *url_src, const char *url_dst, void *logctx);
656 
657 /**
658  * Allocate extradata with additional AV_INPUT_BUFFER_PADDING_SIZE at end
659  * which is always set to 0.
660  *
661  * Previously allocated extradata in par will be freed.
662  *
663  * @param size size of extradata
664  * @return 0 if OK, AVERROR_xxx on error
665  */
667 
668 /**
669  * Copies the whilelists from one context to the other
670  */
672 
673 /*
674  * A wrapper around AVFormatContext.io_close that should be used
675  * instead of calling the pointer directly.
676  *
677  * @param s AVFormatContext
678  * @param *pb the AVIOContext to be closed and freed. Can be NULL.
679  * @return >=0 on success, negative AVERROR in case of failure
680  */
682 
683 /* Default io_close callback, not to be used directly, use ff_format_io_close
684  * instead. */
686 
687 /**
688  * Utility function to check if the file uses http or https protocol
689  *
690  * @param s AVFormatContext
691  * @param filename URL or file name to open for writing
692  */
693 int ff_is_http_proto(const char *filename);
694 
695 struct AVBPrint;
696 /**
697  * Finalize buf into extradata and set its size appropriately.
698  */
699 int ff_bprint_to_codecpar_extradata(AVCodecParameters *par, struct AVBPrint *buf);
700 
701 int ff_lock_avformat(void);
702 int ff_unlock_avformat(void);
703 
704 /**
705  * Set AVFormatContext url field to the provided pointer. The pointer must
706  * point to a valid string. The existing url field is freed if necessary. Also
707  * set the legacy filename field to the same string which was provided in url.
708  */
709 void ff_format_set_url(AVFormatContext *s, char *url);
710 
711 /**
712  * Return a positive value if the given url has one of the given
713  * extensions, negative AVERROR on error, 0 otherwise.
714  *
715  * @param url url to check against the given extensions
716  * @param extensions a comma-separated list of filename extensions
717  */
718 int ff_match_url_ext(const char *url, const char *extensions);
719 
720 struct FFOutputFormat;
721 void avpriv_register_devices(const struct FFOutputFormat * const o[], const AVInputFormat * const i[]);
722 
723 #endif /* AVFORMAT_INTERNAL_H */
be
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it be(in the first position) for now. Options ------- Then comes the options array. This is what will define the user accessible options. For example
AVCodec
AVCodec.
Definition: codec.h:187
FFStream::skip_samples
int skip_samples
Number of samples to skip at the start of the frame decoded from the next packet.
Definition: internal.h:276
ff_get_pcm_codec_id
enum AVCodecID ff_get_pcm_codec_id(int bps, int flt, int be, int sflags)
Select a PCM codec based on the given parameters.
Definition: utils.c:156
FFStream::inject_global_side_data
int inject_global_side_data
Internal data to inject global side data.
Definition: internal.h:362
ff_ntp_time
uint64_t ff_ntp_time(void)
Get the current time since NTP epoch in microseconds.
Definition: utils.c:259
FFFormatContext::interleave_packet
int(* interleave_packet)(struct AVFormatContext *s, AVPacket *pkt, int flush, int has_packet)
The interleavement function in use.
Definition: internal.h:96
FFFormatContext::prefer_codec_framerate
int prefer_codec_framerate
Definition: internal.h:179
FFStream::bsfc
struct AVBSFContext * bsfc
bitstream filter to run on stream
Definition: internal.h:214
FFStream::first_dts
int64_t first_dts
Timestamp corresponding to the last dts sync point.
Definition: internal.h:410
AVCodecParameters
This struct describes the properties of an encoded stream.
Definition: codec_par.h:54
FFStream::last_IP_pts
int64_t last_IP_pts
Definition: internal.h:378
FFStream::bsf
struct AVBSFContext * bsf
Definition: internal.h:234
ffformatcontext
static av_always_inline FFFormatContext * ffformatcontext(AVFormatContext *s)
Definition: internal.h:192
AVCodecTag::id
enum AVCodecID id
Definition: internal.h:49
ff_get_formatted_ntp_time
uint64_t ff_get_formatted_ntp_time(uint64_t ntp_time_us)
Get the NTP time stamp formatted as per the RFC-5905.
Definition: utils.c:264
FFStream::first_discard_sample
int64_t first_discard_sample
If not 0, the first audio sample that should be discarded from the stream.
Definition: internal.h:293
FFFormatContext::AVOID_NEGATIVE_TS_DISABLED
@ AVOID_NEGATIVE_TS_DISABLED
Definition: internal.h:87
FFStream::interleaver_chunk_size
int64_t interleaver_chunk_size
Definition: internal.h:257
PacketList
Definition: packet_internal.h:33
ff_match_url_ext
int ff_match_url_ext(const char *url, const char *extensions)
Return a positive value if the given url has one of the given extensions, negative AVERROR on error,...
Definition: format.c:54
data
const char data[16]
Definition: mxf.c:148
FFFormatContext::initialized
int initialized
Whether or not avformat_init_output has already been called.
Definition: internal.h:164
ff_parse_ntp_time
uint64_t ff_parse_ntp_time(uint64_t ntp_ts)
Parse the NTP time in micro seconds (since NTP epoch).
Definition: utils.c:286
ff_stream_clone
AVStream * ff_stream_clone(AVFormatContext *dst_ctx, const AVStream *src)
Create a new stream and copy to it all parameters from a source stream, with the exception of the ind...
Definition: avformat.c:289
AVDictionary
Definition: dict.c:34
ff_get_chomp_line
int ff_get_chomp_line(AVIOContext *s, char *buf, int maxlen)
Same as ff_get_line but strip the white-space characters in the text tail.
Definition: aviobuf.c:833
cffstream
static const av_always_inline FFStream * cffstream(const AVStream *st)
Definition: internal.h:421
avpriv_register_devices
void avpriv_register_devices(const struct FFOutputFormat *const o[], const AVInputFormat *const i[])
FFStream::last_dts_for_order_check
int64_t last_dts_for_order_check
Internal data to analyze DTS and detect faulty mpeg streams.
Definition: internal.h:355
AVBSFContext
The bitstream filter state.
Definition: bsf.h:68
AVIndexEntry
Definition: avformat.h:698
FFStream::codec_desc
const struct AVCodecDescriptor * codec_desc
Definition: internal.h:413
ff_bprint_to_codecpar_extradata
int ff_bprint_to_codecpar_extradata(AVCodecParameters *par, struct AVBPrint *buf)
Finalize buf into extradata and set its size appropriately.
Definition: utils.c:584
ff_unlock_avformat
int ff_unlock_avformat(void)
Definition: utils.c:54
ff_is_intra_only
int ff_is_intra_only(enum AVCodecID id)
Definition: avformat.c:851
CodecMime
Definition: internal.h:53
FFStream::is_intra_only
int is_intra_only
Definition: internal.h:243
ff_guess_image2_codec
enum AVCodecID ff_guess_image2_codec(const char *filename)
Definition: img2.c:115
FFStream::dts_ordered
uint8_t dts_ordered
Definition: internal.h:356
FFStream::last_IP_duration
int last_IP_duration
Definition: internal.h:379
ffstream
static av_always_inline FFStream * ffstream(AVStream *st)
Definition: internal.h:416
FFStream::inited
int inited
Definition: internal.h:235
AVStreamParseType
AVStreamParseType
Definition: avformat.h:687
FFStream::index_entries_allocated_size
unsigned int index_entries_allocated_size
Definition: internal.h:255
ff_get_line
int ff_get_line(AVIOContext *s, char *buf, int maxlen)
Read a whole line of text from AVIOContext.
Definition: aviobuf.c:816
FFStream::avctx
struct AVCodecContext * avctx
The codec context used by avformat_find_stream_info, the parser, etc.
Definition: internal.h:224
FFFormatContext::metafree
int metafree
Contexts and child contexts do not contain a metadata option.
Definition: internal.h:189
ff_data_to_hex
char * ff_data_to_hex(char *buf, const uint8_t *src, int size, int lowercase)
Write hexadecimal string corresponding to given binary data.
Definition: utils.c:455
FFStream::priv_pts
FFFrac * priv_pts
Definition: internal.h:245
ff_stream_side_data_copy
int ff_stream_side_data_copy(AVStream *dst, const AVStream *src)
Copy side data from source to destination stream.
Definition: avformat.c:211
AVInputFormat
Definition: avformat.h:547
AVCodecTag
Definition: internal.h:48
ff_framehash_write_header
int ff_framehash_write_header(AVFormatContext *s)
Set the timebase for each stream from the corresponding codec timebase and print it.
Definition: framehash.c:25
FFFormatContext::parse_queue
PacketList parse_queue
Packets split by the parser get queued here.
Definition: internal.h:119
AVCodecDescriptor
This struct describes the properties of a single codec described by an AVCodecID.
Definition: codec_desc.h:38
s
#define s(width, name)
Definition: cbs_vp9.c:198
FFFormatContext::packet_buffer
PacketList packet_buffer
This buffer is only needed when packets were already buffered but not decoded, for example to get the...
Definition: internal.h:104
ff_rename
int ff_rename(const char *url_src, const char *url_dst, void *logctx)
Wrap ffurl_move() and log if error happens.
Definition: avio.c:674
FFStream::nb_decoded_frames
int nb_decoded_frames
Number of internally decoded frames, used internally in libavformat, do not access its lifetime diffe...
Definition: internal.h:306
FFFormatContext::data_offset
int64_t data_offset
offset of the first packet
Definition: internal.h:107
FFStream::codec_info_nb_frames
int codec_info_nb_frames
Number of frames that have been demuxed during avformat_find_stream_info()
Definition: internal.h:393
FFStream::pts_reorder_error_count
uint8_t pts_reorder_error_count[MAX_REORDER_DELAY+1]
Definition: internal.h:348
FFFormatContext::AVOID_NEGATIVE_TS_UNKNOWN
@ AVOID_NEGATIVE_TS_UNKNOWN
Definition: internal.h:88
FFStream::display_aspect_ratio
AVRational display_aspect_ratio
display aspect ratio (0 if unknown)
Definition: internal.h:369
codec_id
enum AVCodecID codec_id
Definition: vaapi_decode.c:388
key
const char * key
Definition: hwcontext_opencl.c:174
FFStream::pts_reorder_error
int64_t pts_reorder_error[MAX_REORDER_DELAY+1]
Internal data to generate dts from pts.
Definition: internal.h:347
ff_hex_to_data
int ff_hex_to_data(uint8_t *data, const char *p)
Parse a string of hexadecimal strings.
Definition: utils.c:476
FFFormatContext::AVOID_NEGATIVE_TS_KNOWN
@ AVOID_NEGATIVE_TS_KNOWN
Definition: internal.h:89
FFFormatContext
Definition: internal.h:70
FFStream::need_parsing
enum AVStreamParseType need_parsing
Definition: internal.h:387
context
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf default minimum maximum flags name is the option keep it simple and lowercase description are in without and describe what they for example set the foo of the bar offset is the offset of the field in your context
Definition: writing_filters.txt:91
AVFormatContext
Format I/O context.
Definition: avformat.h:1105
FFStream::pub
AVStream pub
The public context.
Definition: internal.h:201
FFStream::bitstream_checked
int bitstream_checked
Whether or not check_bitstream should still be run on each packet.
Definition: internal.h:219
FFStream::avctx_inited
int avctx_inited
1 if avctx has been initialized with the values from the codec parameters
Definition: internal.h:228
AVRational
Rational number (pair of numerator and denominator).
Definition: rational.h:58
FFStream::nb_index_entries
int nb_index_entries
Definition: internal.h:254
AVProbeData
This structure contains the data a format has to probe a file.
Definition: avformat.h:452
FFOutputFormat
Definition: mux.h:30
FFStream::interleaver_chunk_duration
int64_t interleaver_chunk_duration
Definition: internal.h:258
FFFormatContext::inject_global_side_data
int inject_global_side_data
Definition: internal.h:150
AVCodecID
AVCodecID
Identify the syntax and semantics of the bitstream.
Definition: codec_id.h:49
FFFormatContext::id3v2_meta
AVDictionary * id3v2_meta
ID3v2 tag useful for MP3 demuxing.
Definition: internal.h:174
AVIOContext
Bytestream IO Context.
Definition: avio.h:166
FFFormatContext::parse_pkt
AVPacket * parse_pkt
The generic code uses this as a temporary packet to parse packets or for muxing, especially flushing.
Definition: internal.h:133
ff_codec_get_id
enum AVCodecID ff_codec_get_id(const AVCodecTag *tags, unsigned int tag)
Definition: utils.c:145
FFStreamInfo
Definition: demux.h:30
FFFrac::val
int64_t val
Definition: internal.h:66
FFStream
Definition: internal.h:197
FFStream::last_discard_sample
int64_t last_discard_sample
The sample after last sample that is intended to be discarded after first_discard_sample.
Definition: internal.h:300
bps
unsigned bps
Definition: movenc.c:1738
ff_copy_whiteblacklists
int ff_copy_whiteblacklists(AVFormatContext *dst, const AVFormatContext *src)
Copies the whilelists from one context to the other.
Definition: avformat.c:831
ff_format_io_close_default
void ff_format_io_close_default(AVFormatContext *s, AVIOContext *pb)
size
int size
Definition: twinvq_data.h:10344
ff_lock_avformat
int ff_lock_avformat(void)
Definition: utils.c:49
FFStream::dts_misordered
uint8_t dts_misordered
Definition: internal.h:357
FFFormatContext::avoid_negative_ts_status
enum FFFormatContext::@298 avoid_negative_ts_status
Whether the timestamp shift offset has already been determined.
ff_is_http_proto
int ff_is_http_proto(const char *filename)
Utility function to check if the file uses http or https protocol.
Definition: utils.c:579
MAX_REORDER_DELAY
#define MAX_REORDER_DELAY
Definition: internal.h:342
FFStream::pts_wrap_behavior
int pts_wrap_behavior
Options for behavior, when a wrap is detected.
Definition: internal.h:335
FFFormatContext::raw_packet_buffer_size
int raw_packet_buffer_size
Sum of the size of packets in raw_packet_buffer, in bytes.
Definition: internal.h:144
FFStream::update_initial_durations_done
int update_initial_durations_done
Internal data to prevent doing update_initial_durations() twice.
Definition: internal.h:340
FFStream::start_skip_samples
int64_t start_skip_samples
If not 0, the number of samples that should be skipped from the start of the stream (the samples are ...
Definition: internal.h:285
FFStream::probe_packets
int probe_packets
Number of packets to buffer for codec probing.
Definition: internal.h:384
FFStream::probe_data
AVProbeData probe_data
Definition: internal.h:371
FFStream::skip_to_keyframe
int skip_to_keyframe
Indicates that everything up to the next keyframe should be discarded.
Definition: internal.h:271
FFFormatContext::raw_packet_buffer
PacketList raw_packet_buffer
Raw packets from the demuxer, prior to parsing and decoding.
Definition: internal.h:115
PacketListEntry
Definition: packet_internal.h:28
FFStream::mux_ts_offset
int64_t mux_ts_offset
Timestamp offset added to timestamps before muxing.
Definition: internal.h:311
i
#define i(width, name, range_min, range_max)
Definition: cbs_h2645.c:244
ff_flush_packet_queue
void ff_flush_packet_queue(AVFormatContext *s)
Definition: avformat.c:88
FFStream::reorder
int reorder
Set to 1 if the codec allows reordering, so pts can be different from dts.
Definition: internal.h:207
ff_remove_stream
void ff_remove_stream(AVFormatContext *s, AVStream *st)
Remove a stream from its AVFormatContext and free it.
Definition: avformat.c:79
av_always_inline
#define av_always_inline
Definition: attributes.h:49
FFStream::pts_buffer
int64_t pts_buffer[MAX_REORDER_DELAY+1]
Definition: internal.h:350
ff_free_stream
void ff_free_stream(AVStream **st)
Frees a stream without modifying the corresponding AVFormatContext.
Definition: avformat.c:43
FFStream::last_in_packet_buffer
PacketListEntry * last_in_packet_buffer
last packet in packet_buffer for this stream when muxing.
Definition: internal.h:376
ff_sdp_write_media
int ff_sdp_write_media(char *buff, int size, const AVStream *st, int idx, const char *dest_addr, const char *dest_type, int port, int ttl, AVFormatContext *fmt)
Append the media-specific SDP fragment for the media stream c to the buffer buff.
Definition: sdp.c:916
AVCodecParserContext
Definition: avcodec.h:2768
tag
uint32_t tag
Definition: movenc.c:1737
AVStream
Stream structure.
Definition: avformat.h:839
lowercase
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf default minimum maximum flags name is the option keep it simple and lowercase description are in lowercase
Definition: writing_filters.txt:89
avformat.h
ff_format_set_url
void ff_format_set_url(AVFormatContext *s, char *url)
Set AVFormatContext url field to the provided pointer.
Definition: avformat.c:862
FFFormatContext::chapter_ids_monotonic
int chapter_ids_monotonic
Set if chapter ids are strictly monotonic.
Definition: internal.h:184
AVCodecContext
main external API structure.
Definition: avcodec.h:437
FFStream::extract_extradata
struct FFStream::@299 extract_extradata
ff_codec_get_tag
unsigned int ff_codec_get_tag(const AVCodecTag *tags, enum AVCodecID id)
Definition: utils.c:135
ff_parse_key_val_cb
void(* ff_parse_key_val_cb)(void *context, const char *key, int key_len, char **dest, int *dest_len)
Callback function type for ff_parse_key_value.
Definition: internal.h:555
avpriv_set_pts_info
void avpriv_set_pts_info(AVStream *st, int pts_wrap_bits, unsigned int pts_num, unsigned int pts_den)
Set the time base and wrapping info for a given stream.
Definition: avformat.c:787
FFStream::info
struct FFStreamInfo * info
Stream information used internally by avformat_find_stream_info()
Definition: internal.h:250
CodecMime::str
char str[32]
Definition: internal.h:54
FFStream::index_entries
AVIndexEntry * index_entries
Only used if the format does not support seeking natively.
Definition: internal.h:252
CodecMime::id
enum AVCodecID id
Definition: internal.h:55
FFFormatContext::streams_initialized
int streams_initialized
Whether or not avformat_init_output fully initialized streams.
Definition: internal.h:169
flush
void(* flush)(AVBSFContext *ctx)
Definition: dts2pts_bsf.c:367
FFFrac::num
int64_t num
Definition: internal.h:66
packet_internal.h
FFFormatContext::pkt
AVPacket * pkt
Used to hold temporary packets for the generic demuxing code.
Definition: internal.h:140
ff_mkdir_p
int ff_mkdir_p(const char *path)
Automatically create sub-directories.
Definition: utils.c:421
FFStream::request_probe
int request_probe
stream probing state -1 -> probing finished 0 -> no probing requested rest -> perform probing with re...
Definition: internal.h:266
AVPacket
This structure stores compressed data.
Definition: packet.h:351
ff_find_decoder
const struct AVCodec * ff_find_decoder(AVFormatContext *s, const AVStream *st, enum AVCodecID codec_id)
Definition: avformat.c:813
src
INIT_CLIP pixel * src
Definition: h264pred_template.c:418
FFStream::cur_dts
int64_t cur_dts
Definition: internal.h:411
FFStream::stream_identifier
int stream_identifier
Stream Identifier This is the MPEG-TS stream identifier +1 0 means unknown.
Definition: internal.h:400
FFStream::need_context_update
int need_context_update
Whether the internal avctx needs to be updated from codecpar (after a late change to codecpar)
Definition: internal.h:241
FFStream::parser
struct AVCodecParserContext * parser
Definition: internal.h:388
FFFrac
The exact value of the fractional number is: 'val + num / den'.
Definition: internal.h:65
FFFrac::den
int64_t den
Definition: internal.h:66
AVCodecTag::tag
unsigned int tag
Definition: internal.h:50
int
int
Definition: ffmpeg_filter.c:331
FFFormatContext::pub
AVFormatContext pub
The public context.
Definition: internal.h:74
FFStream::pts_wrap_reference
int64_t pts_wrap_reference
Internal data to check for wrapping of the time stamp.
Definition: internal.h:323
FFStream::lowest_ts_allowed
int64_t lowest_ts_allowed
This is the lowest ts allowed in this track; it may be set by the muxer during init or write_header a...
Definition: internal.h:318
ff_format_io_close
int ff_format_io_close(AVFormatContext *s, AVIOContext **pb)
Definition: avformat.c:869
FFFormatContext::nb_interleaved_streams
int nb_interleaved_streams
Number of streams relevant for interleaving.
Definition: internal.h:80
ff_parse_key_value
void ff_parse_key_value(const char *str, ff_parse_key_val_cb callback_get_buf, void *context)
Parse a string with comma-separated key=value pairs.
Definition: utils.c:504
ff_alloc_extradata
int ff_alloc_extradata(AVCodecParameters *par, int size)
Allocate extradata with additional AV_INPUT_BUFFER_PADDING_SIZE at end which is always set to 0.
Definition: utils.c:239
FFFormatContext::avoid_negative_ts_use_pts
int avoid_negative_ts_use_pts
Definition: internal.h:152