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 
148  /**
149  * Set to 1 if the codec allows reordering, so pts can be different
150  * from dts.
151  */
152  int reorder;
153 
154  /**
155  * bitstream filters to run on stream
156  * - encoding: Set by muxer using ff_stream_add_bitstream_filter
157  * - decoding: unused
158  */
160  int nb_bsfcs;
161 
162  /**
163  * Whether or not check_bitstream should still be run on each packet
164  */
166 
167  /**
168  * The codec context used by avformat_find_stream_info, the parser, etc.
169  */
171  /**
172  * 1 if avctx has been initialized with the values from the codec parameters
173  */
175 
176  enum AVCodecID orig_codec_id;
177 
178  /* the context for extracting extradata in find_stream_info()
179  * inited=1/bsf=NULL signals that extracting is not possible (codec not
180  * supported) */
181  struct {
184  int inited;
186 
187  /**
188  * Whether the internal avctx needs to be updated from codecpar (after a late change to codecpar)
189  */
191 
193 };
194 
195 #ifdef __GNUC__
196 #define dynarray_add(tab, nb_ptr, elem)\
197 do {\
198  __typeof__(tab) _tab = (tab);\
199  __typeof__(elem) _elem = (elem);\
200  (void)sizeof(**_tab == _elem); /* check that types are compatible */\
201  av_dynarray_add(_tab, nb_ptr, _elem);\
202 } while(0)
203 #else
204 #define dynarray_add(tab, nb_ptr, elem)\
205 do {\
206  av_dynarray_add((tab), nb_ptr, (elem));\
207 } while(0)
208 #endif
209 
210 struct tm *ff_brktimegm(time_t secs, struct tm *tm);
211 
212 /**
213  * Automatically create sub-directories
214  *
215  * @param path will create sub-directories by path
216  * @return 0, or < 0 on error
217  */
218 int ff_mkdir_p(const char *path);
219 
220 char *ff_data_to_hex(char *buf, const uint8_t *src, int size, int lowercase);
221 
222 /**
223  * Parse a string of hexadecimal strings. Any space between the hexadecimal
224  * digits is ignored.
225  *
226  * @param data if non-null, the parsed data is written to this pointer
227  * @param p the string to parse
228  * @return the number of bytes written (or to be written, if data is null)
229  */
230 int ff_hex_to_data(uint8_t *data, const char *p);
231 
232 /**
233  * Add packet to AVFormatContext->packet_buffer list, determining its
234  * interleaved position using compare() function argument.
235  * @return 0, or < 0 on error
236  */
238  int (*compare)(AVFormatContext *, const AVPacket *, const AVPacket *));
239 
241 
242 #define NTP_OFFSET 2208988800ULL
243 #define NTP_OFFSET_US (NTP_OFFSET * 1000000ULL)
244 
245 /** Get the current time since NTP epoch in microseconds. */
246 uint64_t ff_ntp_time(void);
247 
248 /**
249  * Get the NTP time stamp formatted as per the RFC-5905.
250  *
251  * @param ntp_time NTP time in micro seconds (since NTP epoch)
252  * @return the formatted NTP time stamp
253  */
254 uint64_t ff_get_formatted_ntp_time(uint64_t ntp_time_us);
255 
256 /**
257  * Append the media-specific SDP fragment for the media stream c
258  * to the buffer buff.
259  *
260  * Note, the buffer needs to be initialized, since it is appended to
261  * existing content.
262  *
263  * @param buff the buffer to append the SDP fragment to
264  * @param size the size of the buff buffer
265  * @param st the AVStream of the media to describe
266  * @param idx the global stream index
267  * @param dest_addr the destination address of the media stream, may be NULL
268  * @param dest_type the destination address type, may be NULL
269  * @param port the destination port of the media stream, 0 if unknown
270  * @param ttl the time to live of the stream, 0 if not multicast
271  * @param fmt the AVFormatContext, which might contain options modifying
272  * the generated SDP
273  */
274 void ff_sdp_write_media(char *buff, int size, AVStream *st, int idx,
275  const char *dest_addr, const char *dest_type,
276  int port, int ttl, AVFormatContext *fmt);
277 
278 /**
279  * Write a packet to another muxer than the one the user originally
280  * intended. Useful when chaining muxers, where one muxer internally
281  * writes a received packet to another muxer.
282  *
283  * @param dst the muxer to write the packet to
284  * @param dst_stream the stream index within dst to write the packet to
285  * @param pkt the packet to be written
286  * @param src the muxer the packet originally was intended for
287  * @param interleave 0->use av_write_frame, 1->av_interleaved_write_frame
288  * @return the value av_write_frame returned
289  */
290 int ff_write_chained(AVFormatContext *dst, int dst_stream, AVPacket *pkt,
292 
293 /**
294  * Get the length in bytes which is needed to store val as v.
295  */
296 int ff_get_v_length(uint64_t val);
297 
298 /**
299  * Put val using a variable number of bytes.
300  */
301 void ff_put_v(AVIOContext *bc, uint64_t val);
302 
303 /**
304  * Read a whole line of text from AVIOContext. Stop reading after reaching
305  * either a \\n, a \\0 or EOF. The returned string is always \\0-terminated,
306  * and may be truncated if the buffer is too small.
307  *
308  * @param s the read-only AVIOContext
309  * @param buf buffer to store the read line
310  * @param maxlen size of the buffer
311  * @return the length of the string written in the buffer, not including the
312  * final \\0
313  */
314 int ff_get_line(AVIOContext *s, char *buf, int maxlen);
315 
316 /**
317  * Same as ff_get_line but strip the white-space characters in the text tail
318  *
319  * @param s the read-only AVIOContext
320  * @param buf buffer to store the read line
321  * @param maxlen size of the buffer
322  * @return the length of the string written in the buffer
323  */
324 int ff_get_chomp_line(AVIOContext *s, char *buf, int maxlen);
325 
326 /**
327  * Read a whole line of text from AVIOContext to an AVBPrint buffer. Stop
328  * reading after reaching a \\r, a \\n, a \\r\\n, a \\0 or EOF. The line
329  * ending characters are NOT included in the buffer, but they are skipped on
330  * the input.
331  *
332  * @param s the read-only AVIOContext
333  * @param bp the AVBPrint buffer
334  * @return the length of the read line, not including the line endings,
335  * negative on error.
336  */
337 int64_t ff_read_line_to_bprint(AVIOContext *s, AVBPrint *bp);
338 
339 /**
340  * Read a whole line of text from AVIOContext to an AVBPrint buffer overwriting
341  * its contents. Stop reading after reaching a \\r, a \\n, a \\r\\n, a \\0 or
342  * EOF. The line ending characters are NOT included in the buffer, but they
343  * are skipped on the input.
344  *
345  * @param s the read-only AVIOContext
346  * @param bp the AVBPrint buffer
347  * @return the length of the read line not including the line endings,
348  * negative on error, or if the buffer becomes truncated.
349  */
350 int64_t ff_read_line_to_bprint_overwrite(AVIOContext *s, AVBPrint *bp);
351 
352 #define SPACE_CHARS " \t\r\n"
353 
354 /**
355  * Callback function type for ff_parse_key_value.
356  *
357  * @param key a pointer to the key
358  * @param key_len the number of bytes that belong to the key, including the '='
359  * char
360  * @param dest return the destination pointer for the value in *dest, may
361  * be null to ignore the value
362  * @param dest_len the length of the *dest buffer
363  */
364 typedef void (*ff_parse_key_val_cb)(void *context, const char *key,
365  int key_len, char **dest, int *dest_len);
366 /**
367  * Parse a string with comma-separated key=value pairs. The value strings
368  * may be quoted and may contain escaped characters within quoted strings.
369  *
370  * @param str the string to parse
371  * @param callback_get_buf function that returns where to store the
372  * unescaped value string.
373  * @param context the opaque context pointer to pass to callback_get_buf
374  */
375 void ff_parse_key_value(const char *str, ff_parse_key_val_cb callback_get_buf,
376  void *context);
377 
378 /**
379  * Find stream index based on format-specific stream ID
380  * @return stream index, or < 0 on error
381  */
382 int ff_find_stream_index(AVFormatContext *s, int id);
383 
384 /**
385  * Internal version of av_index_search_timestamp
386  */
387 int ff_index_search_timestamp(const AVIndexEntry *entries, int nb_entries,
388  int64_t wanted_timestamp, int flags);
389 
390 /**
391  * Internal version of av_add_index_entry
392  */
393 int ff_add_index_entry(AVIndexEntry **index_entries,
394  int *nb_index_entries,
395  unsigned int *index_entries_allocated_size,
396  int64_t pos, int64_t timestamp, int size, int distance, int flags);
397 
398 void ff_configure_buffers_for_index(AVFormatContext *s, int64_t time_tolerance);
399 
400 /**
401  * Add a new chapter.
402  *
403  * @param s media file handle
404  * @param id unique ID for this chapter
405  * @param start chapter start time in time_base units
406  * @param end chapter end time in time_base units
407  * @param title chapter title
408  *
409  * @return AVChapter or NULL on error
410  */
412  int64_t start, int64_t end, const char *title);
413 
414 /**
415  * Ensure the index uses less memory than the maximum specified in
416  * AVFormatContext.max_index_size by discarding entries if it grows
417  * too large.
418  */
419 void ff_reduce_index(AVFormatContext *s, int stream_index);
420 
421 enum AVCodecID ff_guess_image2_codec(const char *filename);
422 
423 /**
424  * Perform a binary search using av_index_search_timestamp() and
425  * AVInputFormat.read_timestamp().
426  *
427  * @param target_ts target timestamp in the time base of the given stream
428  * @param stream_index stream number
429  */
430 int ff_seek_frame_binary(AVFormatContext *s, int stream_index,
431  int64_t target_ts, int flags);
432 
433 /**
434  * Update cur_dts of all streams based on the given timestamp and AVStream.
435  *
436  * Stream ref_st unchanged, others set cur_dts in their native time base.
437  * Only needed for timestamp wrapping or if (dts not set and pts!=dts).
438  * @param timestamp new dts expressed in time_base of param ref_st
439  * @param ref_st reference stream giving time_base of param timestamp
440  */
441 void ff_update_cur_dts(AVFormatContext *s, AVStream *ref_st, int64_t timestamp);
442 
443 int ff_find_last_ts(AVFormatContext *s, int stream_index, int64_t *ts, int64_t *pos,
444  int64_t (*read_timestamp)(struct AVFormatContext *, int , int64_t *, int64_t ));
445 
446 /**
447  * Perform a binary search using read_timestamp().
448  *
449  * @param target_ts target timestamp in the time base of the given stream
450  * @param stream_index stream number
451  */
452 int64_t ff_gen_search(AVFormatContext *s, int stream_index,
453  int64_t target_ts, int64_t pos_min,
454  int64_t pos_max, int64_t pos_limit,
455  int64_t ts_min, int64_t ts_max,
456  int flags, int64_t *ts_ret,
457  int64_t (*read_timestamp)(struct AVFormatContext *, int , int64_t *, int64_t ));
458 
459 /**
460  * Set the time base and wrapping info for a given stream. This will be used
461  * to interpret the stream's timestamps. If the new time base is invalid
462  * (numerator or denominator are non-positive), it leaves the stream
463  * unchanged.
464  *
465  * @param s stream
466  * @param pts_wrap_bits number of bits effectively used by the pts
467  * (used for wrap control)
468  * @param pts_num time base numerator
469  * @param pts_den time base denominator
470  */
471 void avpriv_set_pts_info(AVStream *s, int pts_wrap_bits,
472  unsigned int pts_num, unsigned int pts_den);
473 
474 /**
475  * Add side data to a packet for changing parameters to the given values.
476  * Parameters set to 0 aren't included in the change.
477  */
479  uint64_t channel_layout, int32_t sample_rate,
481 
482 /**
483  * Set the timebase for each stream from the corresponding codec timebase and
484  * print it.
485  */
487 
488 /**
489  * Read a transport packet from a media file.
490  *
491  * @param s media file handle
492  * @param pkt is filled
493  * @return 0 if OK, AVERROR_xxx on error
494  */
496 
497 /**
498  * Interleave a packet per dts in an output media file.
499  *
500  * Packets with pkt->destruct == av_destruct_packet will be freed inside this
501  * function, so they cannot be used after it. Note that calling av_packet_unref()
502  * on them is still safe.
503  *
504  * @param s media file handle
505  * @param out the interleaved packet will be output here
506  * @param pkt the input packet
507  * @param flush 1 if no further packets are available as input and all
508  * remaining packets should be output
509  * @return 1 if a packet was output, 0 if no packet could be output,
510  * < 0 if an error occurred
511  */
513  AVPacket *pkt, int flush);
514 
516 
517 /**
518  * Return the frame duration in seconds. Return 0 if not available.
519  */
520 void ff_compute_frame_duration(AVFormatContext *s, int *pnum, int *pden, AVStream *st,
521  AVCodecParserContext *pc, AVPacket *pkt);
522 
523 unsigned int ff_codec_get_tag(const AVCodecTag *tags, enum AVCodecID id);
524 
525 enum AVCodecID ff_codec_get_id(const AVCodecTag *tags, unsigned int tag);
526 
527 /**
528  * Select a PCM codec based on the given parameters.
529  *
530  * @param bps bits-per-sample
531  * @param flt floating-point
532  * @param be big-endian
533  * @param sflags signed flags. each bit corresponds to one byte of bit depth.
534  * e.g. the 1st bit indicates if 8-bit should be signed or
535  * unsigned, the 2nd bit indicates if 16-bit should be signed or
536  * unsigned, etc... This is useful for formats such as WAVE where
537  * only 8-bit is unsigned and all other bit depths are signed.
538  * @return a PCM codec id or AV_CODEC_ID_NONE
539  */
540 enum AVCodecID ff_get_pcm_codec_id(int bps, int flt, int be, int sflags);
541 
542 /**
543  * Chooses a timebase for muxing the specified stream.
544  *
545  * The chosen timebase allows sample accurate timestamps based
546  * on the framerate or sample rate for audio streams. It also is
547  * at least as precise as 1/min_precision would be.
548  */
549 AVRational ff_choose_timebase(AVFormatContext *s, AVStream *st, int min_precision);
550 
551 /**
552  * Chooses a timebase for muxing the specified stream.
553  */
555 
556 /**
557  * Generate standard extradata for AVC-Intra based on width/height and field
558  * order.
559  */
561 
562 /**
563  * Add a bitstream filter to a stream.
564  *
565  * @param st output stream to add a filter to
566  * @param name the name of the filter to add
567  * @param args filter-specific argument string
568  * @return >0 on success;
569  * AVERROR code on failure
570  */
571 int ff_stream_add_bitstream_filter(AVStream *st, const char *name, const char *args);
572 
573 /**
574  * Copy encoding parameters from source to destination stream
575  *
576  * @param dst pointer to destination AVStream
577  * @param src pointer to source AVStream
578  * @return >=0 on success, AVERROR code on error
579  */
581 
582 /**
583  * Wrap errno on rename() error.
584  *
585  * @param oldpath source path
586  * @param newpath destination path
587  * @return 0 or AVERROR on failure
588  */
589 static inline int ff_rename(const char *oldpath, const char *newpath, void *logctx)
590 {
591  int ret = 0;
592  if (rename(oldpath, newpath) == -1) {
593  ret = AVERROR(errno);
594  if (logctx) {
595  char err[AV_ERROR_MAX_STRING_SIZE] = {0};
597  av_log(logctx, AV_LOG_ERROR, "failed to rename file %s to %s: %s\n", oldpath, newpath, err);
598  }
599  }
600  return ret;
601 }
602 
603 /**
604  * Allocate extradata with additional AV_INPUT_BUFFER_PADDING_SIZE at end
605  * which is always set to 0.
606  *
607  * Previously allocated extradata in par will be freed.
608  *
609  * @param size size of extradata
610  * @return 0 if OK, AVERROR_xxx on error
611  */
613 
614 /**
615  * Allocate extradata with additional AV_INPUT_BUFFER_PADDING_SIZE at end
616  * which is always set to 0 and fill it from pb.
617  *
618  * @param size size of extradata
619  * @return >= 0 if OK, AVERROR_xxx on error
620  */
622 
623 /**
624  * add frame for rfps calculation.
625  *
626  * @param dts timestamp of the i-th frame
627  * @return 0 if OK, AVERROR_xxx on error
628  */
629 int ff_rfps_add_frame(AVFormatContext *ic, AVStream *st, int64_t dts);
630 
632 
633 /**
634  * Flags for AVFormatContext.write_uncoded_frame()
635  */
637 
638  /**
639  * Query whether the feature is possible on this stream.
640  * The frame argument is ignored.
641  */
643 
644 };
645 
646 /**
647  * Copies the whilelists from one context to the other
648  */
650 
651 /**
652  * Returned by demuxers to indicate that data was consumed but discarded
653  * (ignored streams or junk data). The framework will re-call the demuxer.
654  */
655 #define FFERROR_REDO FFERRTAG('R','E','D','O')
656 
657 /**
658  * Utility function to open IO stream of output format.
659  *
660  * @param s AVFormatContext
661  * @param url URL or file name to open for writing
662  * @options optional options which will be passed to io_open callback
663  * @return >=0 on success, negative AVERROR in case of failure
664  */
665 int ff_format_output_open(AVFormatContext *s, const char *url, AVDictionary **options);
666 
667 /*
668  * A wrapper around AVFormatContext.io_close that should be used
669  * instead of calling the pointer directly.
670  */
672 
673 /**
674  * Utility function to check if the file uses http or https protocol
675  *
676  * @param s AVFormatContext
677  * @param filename URL or file name to open for writing
678  */
679 int ff_is_http_proto(char *filename);
680 
681 /**
682  * Parse creation_time in AVFormatContext metadata if exists and warn if the
683  * parsing fails.
684  *
685  * @param s AVFormatContext
686  * @param timestamp parsed timestamp in microseconds, only set on successful parsing
687  * @param return_seconds set this to get the number of seconds in timestamp instead of microseconds
688  * @return 1 if OK, 0 if the metadata was not present, AVERROR(EINVAL) on parse error
689  */
690 int ff_parse_creation_time_metadata(AVFormatContext *s, int64_t *timestamp, int return_seconds);
691 
692 /**
693  * Standardize creation_time metadata in AVFormatContext to an ISO-8601
694  * timestamp string.
695  *
696  * @param s AVFormatContext
697  * @return <0 on error
698  */
700 
701 #define CONTAINS_PAL 2
702 /**
703  * Reshuffles the lines to use the user specified stride.
704  *
705  * @param ppkt input and output packet
706  * @return negative error code or
707  * 0 if no new packet was allocated
708  * non-zero if a new packet was allocated and ppkt has to be freed
709  * CONTAINS_PAL if in addition to a new packet the old contained a palette
710  */
711 int ff_reshuffle_raw_rgb(AVFormatContext *s, AVPacket **ppkt, AVCodecParameters *par, int expected_stride);
712 
713 /**
714  * Retrieves the palette from a packet, either from side data, or
715  * appended to the video data in the packet itself (raw video only).
716  * It is commonly used after a call to ff_reshuffle_raw_rgb().
717  *
718  * Use 0 for the ret parameter to check for side data only.
719  *
720  * @param pkt pointer to packet before calling ff_reshuffle_raw_rgb()
721  * @param ret return value from ff_reshuffle_raw_rgb(), or 0
722  * @param palette pointer to palette buffer
723  * @return negative error code or
724  * 1 if the packet has a palette, else 0
725  */
726 int ff_get_packet_palette(AVFormatContext *s, AVPacket *pkt, int ret, uint32_t *palette);
727 
728 /**
729  * Finalize buf into extradata and set its size appropriately.
730  */
731 int ff_bprint_to_codecpar_extradata(AVCodecParameters *par, struct AVBPrint *buf);
732 
733 /**
734  * Find the next packet in the interleaving queue for the given stream.
735  * The pkt parameter is filled in with the queued packet, including
736  * references to the data (which the caller is not allowed to keep or
737  * modify).
738  *
739  * @return 0 if a packet was found, a negative value if no packet was found
740  */
741 int ff_interleaved_peek(AVFormatContext *s, int stream,
742  AVPacket *pkt, int add_offset);
743 
744 
745 int ff_lock_avformat(void);
746 int ff_unlock_avformat(void);
747 
748 /**
749  * Set AVFormatContext url field to the provided pointer. The pointer must
750  * point to a valid string. The existing url field is freed if necessary. Also
751  * set the legacy filename field to the same string which was provided in url.
752  */
753 void ff_format_set_url(AVFormatContext *s, char *url);
754 
755 #define FF_PACKETLIST_FLAG_REF_PACKET (1 << 0) /**< Create a new reference for the packet instead of
756  transferring the ownership of the existing one to the
757  list. */
758 
759 /**
760  * Append an AVPacket to the list.
761  *
762  * @param head List head element
763  * @param tail List tail element
764  * @param pkt The packet being appended. The data described in it will
765  * be made reference counted if it isn't already.
766  * @param flags Any combination of FF_PACKETLIST_FLAG_* flags
767  * @return 0 on success, negative AVERROR value on failure. On failure,
768  the list is unchanged
769  */
770 int ff_packet_list_put(AVPacketList **head, AVPacketList **tail,
771  AVPacket *pkt, int flags);
772 
773 /**
774  * Remove the oldest AVPacket in the list and return it.
775  * The behaviour is undefined if the packet list is empty.
776  *
777  * @note The pkt will be overwritten completely. The caller owns the
778  * packet and must unref it by itself.
779  *
780  * @param head List head element
781  * @param tail List tail element
782  * @param pkt Pointer to an AVPacket struct
783  * @return 0 on success. Success is guaranteed
784  * if the packet list is not empty.
785  */
786 int ff_packet_list_get(AVPacketList **head, AVPacketList **tail,
787  AVPacket *pkt);
788 
789 /**
790  * Wipe the list and unref all the packets in it.
791  *
792  * @param head List head element
793  * @param tail List tail element
794  */
795 void ff_packet_list_free(AVPacketList **head, AVPacketList **tail);
796 
797 void avpriv_register_devices(const AVOutputFormat * const o[], const AVInputFormat * const i[]);
798 
799 #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:105
void ff_put_v(AVIOContext *bc, uint64_t val)
Put val using a variable number of bytes.
Definition: aviobuf.c:450
AVDictionary * id3v2_meta
ID3v2 tag useful for MP3 demuxing.
Definition: internal.h:139
const char const char void * val
Definition: avisynth_c.h:863
Bytestream IO Context.
Definition: avio.h:161
int ff_interleaved_peek(AVFormatContext *s, int stream, AVPacket *pkt, int add_offset)
Find the next packet in the interleaving queue for the given stream.
Definition: mux.c:1153
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 bitstream_checked
Whether or not check_bitstream should still be run on each packet.
Definition: internal.h:165
ptrdiff_t const GLvoid * data
Definition: opengl_enc.c:100
FFFrac * priv_pts
Definition: internal.h:192
static void flush(AVCodecContext *avctx)
int ff_packet_list_put(AVPacketList **head, AVPacketList **tail, AVPacket *pkt, int flags)
Append an AVPacket to the list.
Definition: utils.c:447
struct AVPacketList * parse_queue_end
Definition: internal.h:94
enum AVCodecID ff_codec_get_id(const AVCodecTag *tags, unsigned int tag)
Definition: utils.c:3158
const char * fmt
Definition: avisynth_c.h:861
static int extract_extradata(AVStream *st, const AVPacket *pkt)
Definition: utils.c:3543
int reorder
Set to 1 if the codec allows reordering, so pts can be different from dts.
Definition: internal.h:152
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:4929
int ff_copy_whiteblacklists(AVFormatContext *dst, const AVFormatContext *src)
Copies the whilelists from one context to the other.
Definition: utils.c:164
int64_t data_offset
offset of the first packet
Definition: internal.h:80
channels
Definition: aptx.c:30
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:1321
int ff_mkdir_p(const char *path)
Automatically create sub-directories.
Definition: utils.c:4846
struct tm * ff_brktimegm(time_t secs, struct tm *tm)
Definition: cutils.c:31
The bitstream filter state.
Definition: avcodec.h:5774
int prefer_codec_framerate
Definition: internal.h:144
int64_t offset
Offset to remap timestamps to be non-negative.
Definition: internal.h:106
unsigned int ff_codec_get_tag(const AVCodecTag *tags, enum AVCodecID id)
Definition: utils.c:3148
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:2058
int ff_is_http_proto(char *filename)
Utility function to check if the file uses http or https protocol.
Definition: utils.c:5691
#define src
Definition: vp8dsp.c:254
This struct describes the properties of an encoded stream.
Definition: avcodec.h:3960
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:4630
Format I/O context.
Definition: avformat.h:1358
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:1963
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:117
void ff_read_frame_flush(AVFormatContext *s)
Flush the frame reader.
Definition: utils.c:1928
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:1977
uint8_t
miscellaneous OS support macros and functions.
Query whether the feature is possible on this stream.
Definition: internal.h:642
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
static av_cold int end(AVCodecContext *avctx)
Definition: avrndec.c:90
void ff_format_io_close(AVFormatContext *s, AVIOContext **pb)
Definition: utils.c:5684
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:956
#define height
int ff_interleave_packet_per_dts(AVFormatContext *s, AVPacket *out, AVPacket *pkt, int flush)
Interleave a packet per dts in an output media file.
Definition: mux.c:1034
int ff_format_output_open(AVFormatContext *s, const char *url, AVDictionary **options)
Utility function to open IO stream of output format.
Definition: utils.c:5674
void ff_configure_buffers_for_index(AVFormatContext *s, int64_t time_tolerance)
Definition: utils.c:2101
int ff_stream_encode_params_copy(AVStream *dst, const AVStream *src)
Copy encoding parameters from source to destination stream.
Definition: utils.c:4312
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
int raw_packet_buffer_remaining_size
Definition: internal.h:99
#define av_log(a,...)
void ff_rfps_calculate(AVFormatContext *ic)
Definition: utils.c:3415
uint64_t ff_ntp_time(void)
Get the current time since NTP epoch in microseconds.
Definition: utils.c:4688
int avctx_inited
1 if avctx has been initialized with the values from the codec parameters
Definition: internal.h:174
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:5696
#define i(width, name, range_min, range_max)
Definition: cbs_h2645.c:259
AVCodecID
Identify the syntax and semantics of the bitstream.
Definition: avcodec.h:215
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:176
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:5061
int ff_standardize_creation_time(AVFormatContext *s)
Standardize creation_time metadata in AVFormatContext to an ISO-8601 timestamp string.
Definition: utils.c:5713
int64_t val
Definition: internal.h:60
AVPacket * pkt
Definition: internal.h:183
void avpriv_register_devices(const AVOutputFormat *const o[], const AVInputFormat *const i[])
Definition: allformats.c:634
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
int ff_generate_avci_extradata(AVStream *st)
Generate standard extradata for AVC-Intra based on width/height and field order.
Definition: utils.c:5354
AVBSFContext ** bsfcs
bitstream filters to run on stream
Definition: internal.h:159
int ff_find_stream_index(AVFormatContext *s, int id)
Find stream index based on format-specific stream ID.
Definition: utils.c:5013
static char * av_make_error_string(char *errbuf, size_t errbuf_size, int errnum)
Fill the provided buffer with a string containing an error string corresponding to the AVERROR code e...
Definition: error.h:109
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:3321
int64_t shortest_end
Timestamp of the end of the shortest stream.
Definition: internal.h:124
void ff_free_stream(AVFormatContext *s, AVStream *st)
Definition: utils.c:4425
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:364
#define width
typedef void(APIENTRY *FF_PFNGLACTIVETEXTUREPROC)(GLenum texture)
int ff_unlock_avformat(void)
Definition: utils.c:88
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:5722
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:5844
#define AV_ERROR_MAX_STRING_SIZE
Definition: error.h:83
int ff_read_packet(AVFormatContext *s, AVPacket *pkt)
Read a transport packet from a media file.
Definition: utils.c:833
Stream structure.
Definition: avformat.h:881
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:4693
int ff_rfps_add_frame(AVFormatContext *ic, AVStream *st, int64_t dts)
add frame for rfps calculation.
Definition: utils.c:3355
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:1990
enum AVCodecID ff_guess_image2_codec(const char *filename)
Definition: img2.c:103
main external API structure.
Definition: avcodec.h:1568
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:828
void * buf
Definition: avisynth_c.h:766
static int ff_rename(const char *oldpath, const char *newpath, void *logctx)
Wrap errno on rename() error.
Definition: internal.h:589
AVRational ff_choose_timebase(AVFormatContext *s, AVStream *st, int min_precision)
Chooses a timebase for muxing the specified stream.
Definition: mux.c:102
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:2285
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:3170
Rational number (pair of numerator and denominator).
Definition: rational.h:58
int ff_bprint_to_codecpar_extradata(AVCodecParameters *par, struct AVBPrint *buf)
Finalize buf into extradata and set its size appropriately.
Definition: utils.c:5747
int need_context_update
Whether the internal avctx needs to be updated from codecpar (after a late change to codecpar) ...
Definition: internal.h:190
void ff_packet_list_free(AVPacketList **head, AVPacketList **tail)
Wipe the list and unref all the packets in it.
Definition: utils.c:1427
int inject_global_side_data
Definition: internal.h:117
int ff_hex_to_data(uint8_t *data, const char *p)
Parse a string of hexadecimal strings.
Definition: utils.c:4901
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:2247
#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:4959
enum AVChromaLocation ff_choose_chroma_location(AVFormatContext *s, AVStream *st)
Chooses a timebase for muxing the specified stream.
Definition: mux.c:118
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
int ff_get_v_length(uint64_t val)
Get the length in bytes which is needed to store val as v.
Definition: aviobuf.c:440
int ff_packet_list_get(AVPacketList **head, AVPacketList **tail, AVPacket *pkt)
Remove the oldest AVPacket in the list and return it.
Definition: utils.c:1557
Main libavformat public API header.
const OptionDef options[]
Definition: ffmpeg_opt.c:3374
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:847
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:3339
unsigned bps
Definition: movenc.c:1532
AVWriteUncodedFrameFlags
Flags for AVFormatContext.write_uncoded_frame()
Definition: internal.h:636
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:5559
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:867
AVCodecContext * avctx
The codec context used by avformat_find_stream_info, the parser, etc.
Definition: internal.h:170
int ff_lock_avformat(void)
Definition: utils.c:83
FILE * out
Definition: movenc.c:54
void INT64 start
Definition: avisynth_c.h:766
AVChromaLocation
Location of chroma samples.
Definition: pixfmt.h:542
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:836
int ff_get_line(AVIOContext *s, char *buf, int maxlen)
Read a whole line of text from AVIOContext.
Definition: aviobuf.c:811
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later.That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another.Frame references ownership and permissions
AVBSFContext * bsf
Definition: internal.h:182
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:4880
This structure stores compressed data.
Definition: avcodec.h:1457
int ff_interleave_add_packet(AVFormatContext *s, AVPacket *pkt, int(*compare)(AVFormatContext *, const AVPacket *, const AVPacket *))
Add packet to AVFormatContext->packet_buffer list, determining its interleaved position using compare...
Definition: mux.c:926
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:2179
struct AVPacketList * raw_packet_buffer_end
Definition: internal.h:89
const char * name
Definition: opengl_enc.c:102