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 
26 #include "libavutil/bprint.h"
27 #include "avformat.h"
28 #include "os_support.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 typedef struct AVCodecTag {
43  enum AVCodecID id;
44  unsigned int tag;
45 } AVCodecTag;
46 
47 typedef struct CodecMime{
48  char str[32];
49  enum AVCodecID id;
50 } CodecMime;
51 
52 /*************************************************/
53 /* fractional numbers for exact pts handling */
54 
55 /**
56  * The exact value of the fractional number is: 'val + num / den'.
57  * num is assumed to be 0 <= num < den.
58  */
59 typedef struct FFFrac {
60  int64_t val, num, den;
61 } FFFrac;
62 
63 
65  /**
66  * Number of streams relevant for interleaving.
67  * Muxing only.
68  */
70 
71  /**
72  * This buffer is only needed when packets were already buffered but
73  * not decoded, for example to get the codec parameters in MPEG
74  * streams.
75  */
78 
79  /* av_seek_frame() support */
80  int64_t data_offset; /**< offset of the first packet */
81 
82  /**
83  * Raw packets from the demuxer, prior to parsing and decoding.
84  * This buffer is used for buffering packets until the codec can
85  * be identified, as parsing cannot be done without knowing the
86  * codec.
87  */
90  /**
91  * Packets split by the parser get queued here.
92  */
95  /**
96  * Remaining size available for raw_packet_buffer, in bytes.
97  */
98 #define RAW_PACKET_BUFFER_SIZE 2500000
100 
101  /**
102  * Offset to remap timestamps to be non-negative.
103  * Expressed in timebase units.
104  * @see AVStream.mux_ts_offset
105  */
106  int64_t offset;
107 
108  /**
109  * Timebase for the timestamp offset.
110  */
112 
113 #if FF_API_COMPUTE_PKT_FIELDS2
114  int missing_ts_warning;
115 #endif
116 
118 
120 
121  /**
122  * Timestamp of the end of the shortest stream.
123  */
124  int64_t shortest_end;
125 
126  /**
127  * Whether or not avformat_init_output has already been called
128  */
130 
131  /**
132  * Whether or not avformat_init_output fully initialized streams
133  */
135 
136  /**
137  * ID3v2 tag useful for MP3 demuxing
138  */
140 
141  /*
142  * Prefer the codec framerate for avg_frame_rate computation.
143  */
145 
146  /**
147  * Set if chapter ids are strictly monotonic.
148  */
150 };
151 
153  /**
154  * Set to 1 if the codec allows reordering, so pts can be different
155  * from dts.
156  */
157  int reorder;
158 
159  /**
160  * bitstream filter to run on stream
161  * - encoding: Set by muxer using ff_stream_add_bitstream_filter
162  * - decoding: unused
163  */
165 
166  /**
167  * Whether or not check_bitstream should still be run on each packet
168  */
170 
171  /**
172  * The codec context used by avformat_find_stream_info, the parser, etc.
173  */
175  /**
176  * 1 if avctx has been initialized with the values from the codec parameters
177  */
179 
180  enum AVCodecID orig_codec_id;
181 
182  /* the context for extracting extradata in find_stream_info()
183  * inited=1/bsf=NULL signals that extracting is not possible (codec not
184  * supported) */
185  struct {
188  int inited;
190 
191  /**
192  * Whether the internal avctx needs to be updated from codecpar (after a late change to codecpar)
193  */
195 
197 
199 
200 #define MAX_STD_TIMEBASES (30*12+30+3+6)
201  /**
202  * Stream information used internally by avformat_find_stream_info()
203  */
204  struct {
205  int64_t last_dts;
206  int64_t duration_gcd;
209  double (*duration_error)[2][MAX_STD_TIMEBASES];
213 
214  /**
215  * 0 -> decoder has not been searched for yet.
216  * >0 -> decoder found
217  * <0 -> decoder with codec_id == -found_decoder has not been found
218  */
220 
221  int64_t last_duration;
222 
223  /**
224  * Those are used for average framerate estimation.
225  */
226  int64_t fps_first_dts;
228  int64_t fps_last_dts;
230 
231  } *info;
232 
233  AVIndexEntry *index_entries; /**< Only used if the format does not
234  support seeking natively. */
237 
240 
241  /**
242  * stream probing state
243  * -1 -> probing finished
244  * 0 -> no probing requested
245  * rest -> perform probing with request_probe being the minimum score to accept.
246  */
248  /**
249  * Indicates that everything up to the next keyframe
250  * should be discarded.
251  */
253 
254  /**
255  * Number of samples to skip at the start of the frame decoded from the next packet.
256  */
258 
259  /**
260  * If not 0, the number of samples that should be skipped from the start of
261  * the stream (the samples are removed from packets with pts==0, which also
262  * assumes negative timestamps do not happen).
263  * Intended for use with formats such as mp3 with ad-hoc gapless audio
264  * support.
265  */
267 
268  /**
269  * If not 0, the first audio sample that should be discarded from the stream.
270  * This is broken by design (needs global sample count), but can't be
271  * avoided for broken by design formats such as mp3 with ad-hoc gapless
272  * audio support.
273  */
275 
276  /**
277  * The sample after last sample that is intended to be discarded after
278  * first_discard_sample. Works on frame boundaries only. Used to prevent
279  * early EOF if the gapless info is broken (considered concatenated mp3s).
280  */
282 
283  /**
284  * Number of internally decoded frames, used internally in libavformat, do not access
285  * its lifetime differs from info which is why it is not in that structure.
286  */
288 
289  /**
290  * Timestamp offset added to timestamps before muxing
291  */
292  int64_t mux_ts_offset;
293 
294  /**
295  * Internal data to check for wrapping of the time stamp
296  */
298 
299  /**
300  * Options for behavior, when a wrap is detected.
301  *
302  * Defined by AV_PTS_WRAP_ values.
303  *
304  * If correction is enabled, there are two possibilities:
305  * If the first time stamp is near the wrap point, the wrap offset
306  * will be subtracted, which will create negative time stamps.
307  * Otherwise the offset will be added.
308  */
310 
311  /**
312  * Internal data to prevent doing update_initial_durations() twice
313  */
315 
316 #define MAX_REORDER_DELAY 16
317 
318  /**
319  * Internal data to generate dts from pts
320  */
321  int64_t pts_reorder_error[MAX_REORDER_DELAY+1];
322  uint8_t pts_reorder_error_count[MAX_REORDER_DELAY+1];
323 
324  int64_t pts_buffer[MAX_REORDER_DELAY+1];
325 
326  /**
327  * Internal data to analyze DTS and detect faulty mpeg streams
328  */
332 
333  /**
334  * Internal data to inject global side data
335  */
337 
338  /**
339  * display aspect ratio (0 if unknown)
340  * - encoding: unused
341  * - decoding: Set by libavformat to calculate sample_aspect_ratio internally
342  */
344 
346 
347  /**
348  * last packet in packet_buffer for this stream when muxing.
349  */
351 };
352 
353 #ifdef __GNUC__
354 #define dynarray_add(tab, nb_ptr, elem)\
355 do {\
356  __typeof__(tab) _tab = (tab);\
357  __typeof__(elem) _elem = (elem);\
358  (void)sizeof(**_tab == _elem); /* check that types are compatible */\
359  av_dynarray_add(_tab, nb_ptr, _elem);\
360 } while(0)
361 #else
362 #define dynarray_add(tab, nb_ptr, elem)\
363 do {\
364  av_dynarray_add((tab), nb_ptr, (elem));\
365 } while(0)
366 #endif
367 
368 /**
369  * Automatically create sub-directories
370  *
371  * @param path will create sub-directories by path
372  * @return 0, or < 0 on error
373  */
374 int ff_mkdir_p(const char *path);
375 
376 char *ff_data_to_hex(char *buf, const uint8_t *src, int size, int lowercase);
377 
378 /**
379  * Parse a string of hexadecimal strings. Any space between the hexadecimal
380  * digits is ignored.
381  *
382  * @param data if non-null, the parsed data is written to this pointer
383  * @param p the string to parse
384  * @return the number of bytes written (or to be written, if data is null)
385  */
386 int ff_hex_to_data(uint8_t *data, const char *p);
387 
388 /**
389  * Add packet to an AVFormatContext's packet_buffer list, determining its
390  * interleaved position using compare() function argument.
391  * @return 0 on success, < 0 on error. pkt will always be blank on return.
392  */
394  int (*compare)(AVFormatContext *, const AVPacket *, const AVPacket *));
395 
397 
398 #define NTP_OFFSET 2208988800ULL
399 #define NTP_OFFSET_US (NTP_OFFSET * 1000000ULL)
400 
401 /** Get the current time since NTP epoch in microseconds. */
402 uint64_t ff_ntp_time(void);
403 
404 /**
405  * Get the NTP time stamp formatted as per the RFC-5905.
406  *
407  * @param ntp_time NTP time in micro seconds (since NTP epoch)
408  * @return the formatted NTP time stamp
409  */
410 uint64_t ff_get_formatted_ntp_time(uint64_t ntp_time_us);
411 
412 /**
413  * Append the media-specific SDP fragment for the media stream c
414  * to the buffer buff.
415  *
416  * Note, the buffer needs to be initialized, since it is appended to
417  * existing content.
418  *
419  * @param buff the buffer to append the SDP fragment to
420  * @param size the size of the buff buffer
421  * @param st the AVStream of the media to describe
422  * @param idx the global stream index
423  * @param dest_addr the destination address of the media stream, may be NULL
424  * @param dest_type the destination address type, may be NULL
425  * @param port the destination port of the media stream, 0 if unknown
426  * @param ttl the time to live of the stream, 0 if not multicast
427  * @param fmt the AVFormatContext, which might contain options modifying
428  * the generated SDP
429  */
430 void ff_sdp_write_media(char *buff, int size, AVStream *st, int idx,
431  const char *dest_addr, const char *dest_type,
432  int port, int ttl, AVFormatContext *fmt);
433 
434 /**
435  * Write a packet to another muxer than the one the user originally
436  * intended. Useful when chaining muxers, where one muxer internally
437  * writes a received packet to another muxer.
438  *
439  * @param dst the muxer to write the packet to
440  * @param dst_stream the stream index within dst to write the packet to
441  * @param pkt the packet to be written
442  * @param src the muxer the packet originally was intended for
443  * @param interleave 0->use av_write_frame, 1->av_interleaved_write_frame
444  * @return the value av_write_frame returned
445  */
446 int ff_write_chained(AVFormatContext *dst, int dst_stream, AVPacket *pkt,
448 
449 /**
450  * Read a whole line of text from AVIOContext. Stop reading after reaching
451  * either a \\n, a \\0 or EOF. The returned string is always \\0-terminated,
452  * and may be truncated if the buffer is too small.
453  *
454  * @param s the read-only AVIOContext
455  * @param buf buffer to store the read line
456  * @param maxlen size of the buffer
457  * @return the length of the string written in the buffer, not including the
458  * final \\0
459  */
460 int ff_get_line(AVIOContext *s, char *buf, int maxlen);
461 
462 /**
463  * Same as ff_get_line but strip the white-space characters in the text tail
464  *
465  * @param s the read-only AVIOContext
466  * @param buf buffer to store the read line
467  * @param maxlen size of the buffer
468  * @return the length of the string written in the buffer
469  */
470 int ff_get_chomp_line(AVIOContext *s, char *buf, int maxlen);
471 
472 /**
473  * Read a whole line of text from AVIOContext to an AVBPrint buffer. Stop
474  * reading after reaching a \\r, a \\n, a \\r\\n, a \\0 or EOF. The line
475  * ending characters are NOT included in the buffer, but they are skipped on
476  * the input.
477  *
478  * @param s the read-only AVIOContext
479  * @param bp the AVBPrint buffer
480  * @return the length of the read line, not including the line endings,
481  * negative on error.
482  */
483 int64_t ff_read_line_to_bprint(AVIOContext *s, AVBPrint *bp);
484 
485 /**
486  * Read a whole line of text from AVIOContext to an AVBPrint buffer overwriting
487  * its contents. Stop reading after reaching a \\r, a \\n, a \\r\\n, a \\0 or
488  * EOF. The line ending characters are NOT included in the buffer, but they
489  * are skipped on the input.
490  *
491  * @param s the read-only AVIOContext
492  * @param bp the AVBPrint buffer
493  * @return the length of the read line not including the line endings,
494  * negative on error, or if the buffer becomes truncated.
495  */
496 int64_t ff_read_line_to_bprint_overwrite(AVIOContext *s, AVBPrint *bp);
497 
498 #define SPACE_CHARS " \t\r\n"
499 
500 /**
501  * Callback function type for ff_parse_key_value.
502  *
503  * @param key a pointer to the key
504  * @param key_len the number of bytes that belong to the key, including the '='
505  * char
506  * @param dest return the destination pointer for the value in *dest, may
507  * be null to ignore the value
508  * @param dest_len the length of the *dest buffer
509  */
510 typedef void (*ff_parse_key_val_cb)(void *context, const char *key,
511  int key_len, char **dest, int *dest_len);
512 /**
513  * Parse a string with comma-separated key=value pairs. The value strings
514  * may be quoted and may contain escaped characters within quoted strings.
515  *
516  * @param str the string to parse
517  * @param callback_get_buf function that returns where to store the
518  * unescaped value string.
519  * @param context the opaque context pointer to pass to callback_get_buf
520  */
521 void ff_parse_key_value(const char *str, ff_parse_key_val_cb callback_get_buf,
522  void *context);
523 
524 /**
525  * Find stream index based on format-specific stream ID
526  * @return stream index, or < 0 on error
527  */
528 int ff_find_stream_index(AVFormatContext *s, int id);
529 
530 /**
531  * Internal version of av_index_search_timestamp
532  */
533 int ff_index_search_timestamp(const AVIndexEntry *entries, int nb_entries,
534  int64_t wanted_timestamp, int flags);
535 
536 /**
537  * Internal version of av_add_index_entry
538  */
539 int ff_add_index_entry(AVIndexEntry **index_entries,
540  int *nb_index_entries,
541  unsigned int *index_entries_allocated_size,
542  int64_t pos, int64_t timestamp, int size, int distance, int flags);
543 
544 void ff_configure_buffers_for_index(AVFormatContext *s, int64_t time_tolerance);
545 
546 /**
547  * Add a new chapter.
548  *
549  * @param s media file handle
550  * @param id unique ID for this chapter
551  * @param start chapter start time in time_base units
552  * @param end chapter end time in time_base units
553  * @param title chapter title
554  *
555  * @return AVChapter or NULL on error
556  */
558  int64_t start, int64_t end, const char *title);
559 
560 /**
561  * Ensure the index uses less memory than the maximum specified in
562  * AVFormatContext.max_index_size by discarding entries if it grows
563  * too large.
564  */
565 void ff_reduce_index(AVFormatContext *s, int stream_index);
566 
567 enum AVCodecID ff_guess_image2_codec(const char *filename);
568 
569 /**
570  * Perform a binary search using av_index_search_timestamp() and
571  * AVInputFormat.read_timestamp().
572  *
573  * @param target_ts target timestamp in the time base of the given stream
574  * @param stream_index stream number
575  */
576 int ff_seek_frame_binary(AVFormatContext *s, int stream_index,
577  int64_t target_ts, int flags);
578 
579 /**
580  * Update cur_dts of all streams based on the given timestamp and AVStream.
581  *
582  * Stream ref_st unchanged, others set cur_dts in their native time base.
583  * Only needed for timestamp wrapping or if (dts not set and pts!=dts).
584  * @param timestamp new dts expressed in time_base of param ref_st
585  * @param ref_st reference stream giving time_base of param timestamp
586  */
587 void ff_update_cur_dts(AVFormatContext *s, AVStream *ref_st, int64_t timestamp);
588 
589 int ff_find_last_ts(AVFormatContext *s, int stream_index, int64_t *ts, int64_t *pos,
590  int64_t (*read_timestamp)(struct AVFormatContext *, int , int64_t *, int64_t ));
591 
592 /**
593  * Perform a binary search using read_timestamp().
594  *
595  * @param target_ts target timestamp in the time base of the given stream
596  * @param stream_index stream number
597  */
598 int64_t ff_gen_search(AVFormatContext *s, int stream_index,
599  int64_t target_ts, int64_t pos_min,
600  int64_t pos_max, int64_t pos_limit,
601  int64_t ts_min, int64_t ts_max,
602  int flags, int64_t *ts_ret,
603  int64_t (*read_timestamp)(struct AVFormatContext *, int , int64_t *, int64_t ));
604 
605 /**
606  * Set the time base and wrapping info for a given stream. This will be used
607  * to interpret the stream's timestamps. If the new time base is invalid
608  * (numerator or denominator are non-positive), it leaves the stream
609  * unchanged.
610  *
611  * @param s stream
612  * @param pts_wrap_bits number of bits effectively used by the pts
613  * (used for wrap control)
614  * @param pts_num time base numerator
615  * @param pts_den time base denominator
616  */
617 void avpriv_set_pts_info(AVStream *s, int pts_wrap_bits,
618  unsigned int pts_num, unsigned int pts_den);
619 
620 /**
621  * Add side data to a packet for changing parameters to the given values.
622  * Parameters set to 0 aren't included in the change.
623  */
625  uint64_t channel_layout, int32_t sample_rate,
627 
628 /**
629  * Set the timebase for each stream from the corresponding codec timebase and
630  * print it.
631  */
633 
634 /**
635  * Read a transport packet from a media file.
636  *
637  * @param s media file handle
638  * @param pkt is filled
639  * @return 0 if OK, AVERROR_xxx on error
640  */
642 
643 /**
644  * Interleave an AVPacket per dts so it can be muxed.
645  *
646  * @param s an AVFormatContext for output. pkt resp. out will be added to
647  * resp. taken from its packet buffer.
648  * @param out the interleaved packet will be output here
649  * @param pkt the input packet; will be blank on return if not NULL
650  * @param flush 1 if no further packets are available as input and all
651  * remaining packets should be output
652  * @return 1 if a packet was output, 0 if no packet could be output
653  * (in which case out may be uninitialized), < 0 if an error occurred
654  */
656  AVPacket *pkt, int flush);
657 
659 
660 /**
661  * Return the frame duration in seconds. Return 0 if not available.
662  */
663 void ff_compute_frame_duration(AVFormatContext *s, int *pnum, int *pden, AVStream *st,
664  AVCodecParserContext *pc, AVPacket *pkt);
665 
666 unsigned int ff_codec_get_tag(const AVCodecTag *tags, enum AVCodecID id);
667 
668 enum AVCodecID ff_codec_get_id(const AVCodecTag *tags, unsigned int tag);
669 
670 int ff_is_intra_only(enum AVCodecID id);
671 
672 /**
673  * Select a PCM codec based on the given parameters.
674  *
675  * @param bps bits-per-sample
676  * @param flt floating-point
677  * @param be big-endian
678  * @param sflags signed flags. each bit corresponds to one byte of bit depth.
679  * e.g. the 1st bit indicates if 8-bit should be signed or
680  * unsigned, the 2nd bit indicates if 16-bit should be signed or
681  * unsigned, etc... This is useful for formats such as WAVE where
682  * only 8-bit is unsigned and all other bit depths are signed.
683  * @return a PCM codec id or AV_CODEC_ID_NONE
684  */
685 enum AVCodecID ff_get_pcm_codec_id(int bps, int flt, int be, int sflags);
686 
687 /**
688  * Chooses a timebase for muxing the specified stream.
689  *
690  * The chosen timebase allows sample accurate timestamps based
691  * on the framerate or sample rate for audio streams. It also is
692  * at least as precise as 1/min_precision would be.
693  */
694 AVRational ff_choose_timebase(AVFormatContext *s, AVStream *st, int min_precision);
695 
696 /**
697  * Chooses a timebase for muxing the specified stream.
698  */
700 
701 /**
702  * Generate standard extradata for AVC-Intra based on width/height and field
703  * order.
704  */
706 
707 /**
708  * Add a bitstream filter to a stream.
709  *
710  * @param st output stream to add a filter to
711  * @param name the name of the filter to add
712  * @param args filter-specific argument string
713  * @return >0 on success;
714  * AVERROR code on failure
715  */
716 int ff_stream_add_bitstream_filter(AVStream *st, const char *name, const char *args);
717 
718 /**
719  * Copy encoding parameters from source to destination stream
720  *
721  * @param dst pointer to destination AVStream
722  * @param src pointer to source AVStream
723  * @return >=0 on success, AVERROR code on error
724  */
726 
727 /**
728  * Wrap avpriv_io_move and log if error happens.
729  *
730  * @param url_src source path
731  * @param url_dst destination path
732  * @return 0 or AVERROR on failure
733  */
734 int ff_rename(const char *url_src, const char *url_dst, void *logctx);
735 
736 /**
737  * Allocate extradata with additional AV_INPUT_BUFFER_PADDING_SIZE at end
738  * which is always set to 0.
739  *
740  * Previously allocated extradata in par will be freed.
741  *
742  * @param size size of extradata
743  * @return 0 if OK, AVERROR_xxx on error
744  */
746 
747 /**
748  * Allocate extradata with additional AV_INPUT_BUFFER_PADDING_SIZE at end
749  * which is always set to 0 and fill it from pb.
750  *
751  * @param size size of extradata
752  * @return >= 0 if OK, AVERROR_xxx on error
753  */
755 
756 /**
757  * add frame for rfps calculation.
758  *
759  * @param dts timestamp of the i-th frame
760  * @return 0 if OK, AVERROR_xxx on error
761  */
762 int ff_rfps_add_frame(AVFormatContext *ic, AVStream *st, int64_t dts);
763 
765 
766 /**
767  * Flags for AVFormatContext.write_uncoded_frame()
768  */
770 
771  /**
772  * Query whether the feature is possible on this stream.
773  * The frame argument is ignored.
774  */
776 
777 };
778 
779 /**
780  * Copies the whilelists from one context to the other
781  */
783 
784 /**
785  * Returned by demuxers to indicate that data was consumed but discarded
786  * (ignored streams or junk data). The framework will re-call the demuxer.
787  */
788 #define FFERROR_REDO FFERRTAG('R','E','D','O')
789 
790 /**
791  * Utility function to open IO stream of output format.
792  *
793  * @param s AVFormatContext
794  * @param url URL or file name to open for writing
795  * @options optional options which will be passed to io_open callback
796  * @return >=0 on success, negative AVERROR in case of failure
797  */
798 int ff_format_output_open(AVFormatContext *s, const char *url, AVDictionary **options);
799 
800 /*
801  * A wrapper around AVFormatContext.io_close that should be used
802  * instead of calling the pointer directly.
803  */
805 
806 /**
807  * Utility function to check if the file uses http or https protocol
808  *
809  * @param s AVFormatContext
810  * @param filename URL or file name to open for writing
811  */
812 int ff_is_http_proto(char *filename);
813 
814 /**
815  * Parse creation_time in AVFormatContext metadata if exists and warn if the
816  * parsing fails.
817  *
818  * @param s AVFormatContext
819  * @param timestamp parsed timestamp in microseconds, only set on successful parsing
820  * @param return_seconds set this to get the number of seconds in timestamp instead of microseconds
821  * @return 1 if OK, 0 if the metadata was not present, AVERROR(EINVAL) on parse error
822  */
823 int ff_parse_creation_time_metadata(AVFormatContext *s, int64_t *timestamp, int return_seconds);
824 
825 /**
826  * Standardize creation_time metadata in AVFormatContext to an ISO-8601
827  * timestamp string.
828  *
829  * @param s AVFormatContext
830  * @return <0 on error
831  */
833 
834 #define CONTAINS_PAL 2
835 /**
836  * Reshuffles the lines to use the user specified stride.
837  *
838  * @param ppkt input and output packet
839  * @return negative error code or
840  * 0 if no new packet was allocated
841  * non-zero if a new packet was allocated and ppkt has to be freed
842  * CONTAINS_PAL if in addition to a new packet the old contained a palette
843  */
844 int ff_reshuffle_raw_rgb(AVFormatContext *s, AVPacket **ppkt, AVCodecParameters *par, int expected_stride);
845 
846 /**
847  * Retrieves the palette from a packet, either from side data, or
848  * appended to the video data in the packet itself (raw video only).
849  * It is commonly used after a call to ff_reshuffle_raw_rgb().
850  *
851  * Use 0 for the ret parameter to check for side data only.
852  *
853  * @param pkt pointer to packet before calling ff_reshuffle_raw_rgb()
854  * @param ret return value from ff_reshuffle_raw_rgb(), or 0
855  * @param palette pointer to palette buffer
856  * @return negative error code or
857  * 1 if the packet has a palette, else 0
858  */
859 int ff_get_packet_palette(AVFormatContext *s, AVPacket *pkt, int ret, uint32_t *palette);
860 
861 /**
862  * Finalize buf into extradata and set its size appropriately.
863  */
864 int ff_bprint_to_codecpar_extradata(AVCodecParameters *par, struct AVBPrint *buf);
865 
866 /**
867  * Find the next packet in the interleaving queue for the given stream.
868  *
869  * @return a pointer to a packet if one was found, NULL otherwise.
870  */
871 const AVPacket *ff_interleaved_peek(AVFormatContext *s, int stream);
872 
873 int ff_get_muxer_ts_offset(AVFormatContext *s, int stream_index, int64_t *offset);
874 
875 int ff_lock_avformat(void);
876 int ff_unlock_avformat(void);
877 
878 /**
879  * Set AVFormatContext url field to the provided pointer. The pointer must
880  * point to a valid string. The existing url field is freed if necessary. Also
881  * set the legacy filename field to the same string which was provided in url.
882  */
883 void ff_format_set_url(AVFormatContext *s, char *url);
884 
885 void avpriv_register_devices(const AVOutputFormat * const o[], const AVInputFormat * const i[]);
886 
887 #endif /* AVFORMAT_INTERNAL_H */
int ff_framehash_write_header(AVFormatContext *s)
Set the timebase for each stream from the corresponding codec timebase and print it.
Definition: framehash.c:23
static float compare(const AVFrame *haystack, const AVFrame *obj, int offx, int offy)
Definition: vf_find_rect.c:104
uint8_t dts_ordered
Definition: internal.h:330
AVDictionary * id3v2_meta
ID3v2 tag useful for MP3 demuxing.
Definition: internal.h:139
AVBSFContext * bsfc
bitstream filter to run on stream
Definition: internal.h:164
Bytestream IO Context.
Definition: avio.h:161
enum AVCodecID id
Definition: internal.h:43
struct AVPacketList * raw_packet_buffer
Raw packets from the demuxer, prior to parsing and decoding.
Definition: internal.h:88
int ff_rename(const char *url_src, const char *url_dst, void *logctx)
Wrap avpriv_io_move and log if error happens.
Definition: avio.c:666
int bitstream_checked
Whether or not check_bitstream should still be run on each packet.
Definition: internal.h:169
ptrdiff_t const GLvoid * data
Definition: opengl_enc.c:100
FFFrac * priv_pts
Definition: internal.h:198
static void flush(AVCodecContext *avctx)
int64_t last_dts_for_order_check
Internal data to analyze DTS and detect faulty mpeg streams.
Definition: internal.h:329
struct AVPacketList * parse_queue_end
Definition: internal.h:94
enum AVCodecID ff_codec_get_id(const AVCodecTag *tags, unsigned int tag)
Definition: utils.c:3108
static int extract_extradata(AVStream *st, const AVPacket *pkt)
Definition: utils.c:3513
int reorder
Set to 1 if the codec allows reordering, so pts can be different from dts.
Definition: internal.h:157
void avpriv_set_pts_info(AVStream *s, int pts_wrap_bits, unsigned int pts_num, unsigned int pts_den)
Set the time base and wrapping info for a given stream.
Definition: utils.c:4905
int ff_copy_whiteblacklists(AVFormatContext *dst, const AVFormatContext *src)
Copies the whilelists from one context to the other.
Definition: utils.c:160
int64_t data_offset
offset of the first packet
Definition: internal.h:80
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.
Definition: mux.c:1326
int ff_mkdir_p(const char *path)
Automatically create sub-directories.
Definition: utils.c:4822
The bitstream filter state.
Definition: bsf.h:49
int prefer_codec_framerate
Definition: internal.h:144
#define MAX_REORDER_DELAY
Definition: internal.h:316
int64_t offset
Offset to remap timestamps to be non-negative.
Definition: internal.h:106
int skip_samples
Number of samples to skip at the start of the frame decoded from the next packet. ...
Definition: internal.h:257
const AVPacket * ff_interleaved_peek(AVFormatContext *s, int stream)
Find the next packet in the interleaving queue for the given stream.
Definition: mux.c:1065
unsigned int ff_codec_get_tag(const AVCodecTag *tags, enum AVCodecID id)
Definition: utils.c:3098
const char * key
int avoid_negative_ts_use_pts
Definition: internal.h:119
static AVPacket pkt
int ff_index_search_timestamp(const AVIndexEntry *entries, int nb_entries, int64_t wanted_timestamp, int flags)
Internal version of av_index_search_timestamp.
Definition: utils.c:2000
int ff_is_http_proto(char *filename)
Utility function to check if the file uses http or https protocol.
Definition: utils.c:5659
int64_t interleaver_chunk_size
Definition: internal.h:238
This struct describes the properties of an encoded stream.
Definition: codec_par.h:52
AVChapter * avpriv_new_chapter(AVFormatContext *s, int id, AVRational time_base, int64_t start, int64_t end, const char *title)
Add a new chapter.
Definition: utils.c:4606
Format I/O context.
Definition: avformat.h:1243
void ff_update_cur_dts(AVFormatContext *s, AVStream *ref_st, int64_t timestamp)
Update cur_dts of all streams based on the given timestamp and AVStream.
Definition: utils.c:1905
static void interleave(uint8_t *dst, uint8_t *src, int w, int h, int dst_linesize, int src_linesize, enum FilterMode mode, int swap)
Definition: vf_il.c:114
void ff_read_frame_flush(AVFormatContext *s)
Flush the frame reader.
Definition: utils.c:1870
void ff_reduce_index(AVFormatContext *s, int stream_index)
Ensure the index uses less memory than the maximum specified in AVFormatContext.max_index_size by dis...
Definition: utils.c:1919
uint8_t
miscellaneous OS support macros and functions.
Query whether the feature is possible on this stream.
Definition: internal.h:775
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 offset
int64_t last_duration
Definition: internal.h:221
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
The exact value of the fractional number is: &#39;val + num / den&#39;.
Definition: internal.h:59
void ff_format_io_close(AVFormatContext *s, AVIOContext **pb)
Definition: utils.c:5652
int64_t duration_gcd
Definition: internal.h:206
struct AVPacketList * last_in_packet_buffer
last packet in packet_buffer for this stream when muxing.
Definition: internal.h:350
int64_t mux_ts_offset
Timestamp offset added to timestamps before muxing.
Definition: internal.h:292
void ff_compute_frame_duration(AVFormatContext *s, int *pnum, int *pden, AVStream *st, AVCodecParserContext *pc, AVPacket *pkt)
Return the frame duration in seconds.
Definition: utils.c:923
#define height
int ff_interleave_packet_per_dts(AVFormatContext *s, AVPacket *out, AVPacket *pkt, int flush)
Interleave an AVPacket per dts so it can be muxed.
Definition: mux.c:931
int ff_format_output_open(AVFormatContext *s, const char *url, AVDictionary **options)
Utility function to open IO stream of output format.
Definition: utils.c:5642
void ff_configure_buffers_for_index(AVFormatContext *s, int64_t time_tolerance)
Definition: utils.c:2043
int ff_stream_encode_params_copy(AVStream *dst, const AVStream *src)
Copy encoding parameters from source to destination stream.
Definition: utils.c:4290
int frame_delay_evidence
Definition: internal.h:212
int inject_global_side_data
Internal data to inject global side data.
Definition: internal.h:336
int skip_to_keyframe
Indicates that everything up to the next keyframe should be discarded.
Definition: internal.h:252
ptrdiff_t size
Definition: opengl_enc.c:100
struct AVPacketList * packet_buffer
This buffer is only needed when packets were already buffered but not decoded, for example to get the...
Definition: internal.h:76
channels
Definition: aptx.h:33
int raw_packet_buffer_remaining_size
Definition: internal.h:99
void ff_rfps_calculate(AVFormatContext *ic)
Definition: utils.c:3385
uint64_t ff_ntp_time(void)
Get the current time since NTP epoch in microseconds.
Definition: utils.c:4669
#define src
Definition: vp8dsp.c:255
int avctx_inited
1 if avctx has been initialized with the values from the codec parameters
Definition: internal.h:178
int ff_parse_creation_time_metadata(AVFormatContext *s, int64_t *timestamp, int return_seconds)
Parse creation_time in AVFormatContext metadata if exists and warn if the parsing fails...
Definition: utils.c:5664
AVCodecID
Identify the syntax and semantics of the bitstream.
Definition: codec_id.h:46
unsigned int pos
Definition: spdifenc.c:410
int pts_wrap_behavior
Options for behavior, when a wrap is detected.
Definition: internal.h:309
int request_probe
stream probing state -1 -> probing finished 0 -> no probing requested rest -> perform probing with re...
Definition: internal.h:247
int ff_add_param_change(AVPacket *pkt, int32_t channels, uint64_t channel_layout, int32_t sample_rate, int32_t width, int32_t height)
Add side data to a packet for changing parameters to the given values.
Definition: utils.c:5037
int ff_is_intra_only(enum AVCodecID id)
Definition: utils.c:986
int ff_standardize_creation_time(AVFormatContext *s)
Standardize creation_time metadata in AVFormatContext to an ISO-8601 timestamp string.
Definition: utils.c:5681
int64_t val
Definition: internal.h:60
AVPacket * pkt
Definition: internal.h:187
int update_initial_durations_done
Internal data to prevent doing update_initial_durations() twice.
Definition: internal.h:314
void avpriv_register_devices(const AVOutputFormat *const o[], const AVInputFormat *const i[])
Definition: allformats.c:666
static float distance(float x, float y, int band)
int streams_initialized
Whether or not avformat_init_output fully initialized streams.
Definition: internal.h:134
AVIndexEntry * index_entries
Only used if the format does not support seeking natively.
Definition: internal.h:233
int ff_generate_avci_extradata(AVStream *st)
Generate standard extradata for AVC-Intra based on width/height and field order.
Definition: utils.c:5330
MIPS optimizations info
Definition: mips.txt:2
int nb_decoded_frames
Number of internally decoded frames, used internally in libavformat, do not access its lifetime diffe...
Definition: internal.h:287
int ff_find_stream_index(AVFormatContext *s, int id)
Find stream index based on format-specific stream ID.
Definition: utils.c:4989
AVRational display_aspect_ratio
display aspect ratio (0 if unknown)
Definition: internal.h:343
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:3291
int64_t shortest_end
Timestamp of the end of the shortest stream.
Definition: internal.h:124
int64_t codec_info_duration
Definition: internal.h:210
void ff_free_stream(AVFormatContext *s, AVStream *st)
Definition: utils.c:4402
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:510
int64_t codec_info_duration_fields
Definition: internal.h:211
#define width
typedef void(APIENTRY *FF_PFNGLACTIVETEXTUREPROC)(GLenum texture)
int ff_unlock_avformat(void)
Definition: utils.c:84
int ff_get_packet_palette(AVFormatContext *s, AVPacket *pkt, int ret, uint32_t *palette)
Retrieves the palette from a packet, either from side data, or appended to the video data in the pack...
Definition: utils.c:5690
int32_t
#define s(width, name)
Definition: cbs_vp9.c:257
void ff_format_set_url(AVFormatContext *s, char *url)
Set AVFormatContext url field to the provided pointer.
Definition: utils.c:5822
int64_t fps_first_dts
Those are used for average framerate estimation.
Definition: internal.h:226
int ff_read_packet(AVFormatContext *s, AVPacket *pkt)
Read a transport packet from a media file.
Definition: utils.c:797
Stream structure.
Definition: avformat.h:884
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:4674
int ff_rfps_add_frame(AVFormatContext *ic, AVStream *st, int64_t dts)
add frame for rfps calculation.
Definition: utils.c:3325
sample_rate
int ff_add_index_entry(AVIndexEntry **index_entries, int *nb_index_entries, unsigned int *index_entries_allocated_size, int64_t pos, int64_t timestamp, int size, int distance, int flags)
Internal version of av_add_index_entry.
Definition: utils.c:1932
enum AVCodecID ff_guess_image2_codec(const char *filename)
Definition: img2.c:106
uint8_t dts_misordered
Definition: internal.h:331
int64_t last_discard_sample
The sample after last sample that is intended to be discarded after first_discard_sample.
Definition: internal.h:281
int found_decoder
0 -> decoder has not been searched for yet.
Definition: internal.h:219
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:266
int64_t first_discard_sample
If not 0, the first audio sample that should be discarded from the stream.
Definition: internal.h:274
main external API structure.
Definition: avcodec.h:531
int64_t pts_wrap_reference
Internal data to check for wrapping of the time stamp.
Definition: internal.h:297
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
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:810
AVRational ff_choose_timebase(AVFormatContext *s, AVStream *st, int min_precision)
Chooses a timebase for muxing the specified stream.
Definition: mux.c:89
#define MAX_STD_TIMEBASES
Definition: internal.h:200
int fps_first_dts_idx
Definition: internal.h:227
int nb_interleaved_streams
Number of streams relevant for interleaving.
Definition: internal.h:69
int64_t ff_gen_search(AVFormatContext *s, int stream_index, int64_t target_ts, int64_t pos_min, int64_t pos_max, int64_t pos_limit, int64_t ts_min, int64_t ts_max, int flags, int64_t *ts_ret, int64_t(*read_timestamp)(struct AVFormatContext *, int, int64_t *, int64_t))
Perform a binary search using read_timestamp().
Definition: utils.c:2229
int initialized
Whether or not avformat_init_output has already been called.
Definition: internal.h:129
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:3120
Rational number (pair of numerator and denominator).
Definition: rational.h:58
int64_t rfps_duration_sum
Definition: internal.h:208
int ff_bprint_to_codecpar_extradata(AVCodecParameters *par, struct AVBPrint *buf)
Finalize buf into extradata and set its size appropriately.
Definition: utils.c:5715
int need_context_update
Whether the internal avctx needs to be updated from codecpar (after a late change to codecpar) ...
Definition: internal.h:194
int fps_last_dts_idx
Definition: internal.h:229
int inject_global_side_data
Definition: internal.h:117
int64_t fps_last_dts
Definition: internal.h:228
This structure contains the data a format has to probe a file.
Definition: avformat.h:441
int ff_hex_to_data(uint8_t *data, const char *p)
Parse a string of hexadecimal strings.
Definition: utils.c:4877
unsigned int index_entries_allocated_size
Definition: internal.h:236
int ff_find_last_ts(AVFormatContext *s, int stream_index, int64_t *ts, int64_t *pos, int64_t(*read_timestamp)(struct AVFormatContext *, int, int64_t *, int64_t))
Definition: utils.c:2191
int nb_index_entries
Definition: internal.h:235
#define flags(name, subs,...)
Definition: cbs_av1.c:561
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:4935
enum AVChromaLocation ff_choose_chroma_location(AVFormatContext *s, AVStream *st)
Chooses a timebase for muxing the specified stream.
Definition: mux.c:105
unsigned int tag
Definition: internal.h:44
struct AVPacketList * parse_queue
Packets split by the parser get queued here.
Definition: internal.h:93
AVRational offset_timebase
Timebase for the timestamp offset.
Definition: internal.h:111
Main libavformat public API header.
const OptionDef options[]
Definition: ffmpeg_opt.c:3424
void ff_sdp_write_media(char *buff, int size, 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:851
int ff_get_extradata(AVFormatContext *s, AVCodecParameters *par, AVIOContext *pb, int size)
Allocate extradata with additional AV_INPUT_BUFFER_PADDING_SIZE at end which is always set to 0 and f...
Definition: utils.c:3309
int64_t interleaver_chunk_duration
Definition: internal.h:239
unsigned bps
Definition: movenc.c:1598
AVWriteUncodedFrameFlags
Flags for AVFormatContext.write_uncoded_frame()
Definition: internal.h:769
int64_t last_dts
Definition: internal.h:205
struct AVPacketList * packet_buffer_end
Definition: internal.h:77
int ff_stream_add_bitstream_filter(AVStream *st, const char *name, const char *args)
Add a bitstream filter to a stream.
Definition: utils.c:5536
int ff_reshuffle_raw_rgb(AVFormatContext *s, AVPacket **ppkt, AVCodecParameters *par, int expected_stride)
Reshuffles the lines to use the user specified stride.
Definition: rawutils.c:25
int64_t ff_read_line_to_bprint_overwrite(AVIOContext *s, AVBPrint *bp)
Read a whole line of text from AVIOContext to an AVBPrint buffer overwriting its contents.
Definition: aviobuf.c:849
AVProbeData probe_data
Definition: internal.h:345
AVCodecContext * avctx
The codec context used by avformat_find_stream_info, the parser, etc.
Definition: internal.h:174
int ff_lock_avformat(void)
Definition: utils.c:79
int chapter_ids_monotonic
Set if chapter ids are strictly monotonic.
Definition: internal.h:149
FILE * out
Definition: movenc.c:54
AVChromaLocation
Location of chroma samples.
Definition: pixfmt.h:605
int64_t ff_read_line_to_bprint(AVIOContext *s, AVBPrint *bp)
Read a whole line of text from AVIOContext to an AVBPrint buffer.
Definition: aviobuf.c:818
int ff_get_line(AVIOContext *s, char *buf, int maxlen)
Read a whole line of text from AVIOContext.
Definition: aviobuf.c:793
AVBSFContext * bsf
Definition: internal.h:186
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 local context
char * ff_data_to_hex(char *buf, const uint8_t *src, int size, int lowercase)
Definition: utils.c:4856
This structure stores compressed data.
Definition: packet.h:340
int ff_get_muxer_ts_offset(AVFormatContext *s, int stream_index, int64_t *offset)
Definition: mux.c:1049
int i
Definition: input.c:407
int ff_interleave_add_packet(AVFormatContext *s, AVPacket *pkt, int(*compare)(AVFormatContext *, const AVPacket *, const AVPacket *))
Add packet to an AVFormatContext&#39;s packet_buffer list, determining its interleaved position using com...
Definition: mux.c:829
int ff_seek_frame_binary(AVFormatContext *s, int stream_index, int64_t target_ts, int flags)
Perform a binary search using av_index_search_timestamp() and AVInputFormat.read_timestamp().
Definition: utils.c:2123
struct AVPacketList * raw_packet_buffer_end
Definition: internal.h:89
const char * name
Definition: opengl_enc.c:102