~medibuntu-maintainers/mplayer/medibuntu.precise

« back to all changes in this revision

Viewing changes to ffmpeg/libavformat/avformat.h

  • Committer: Gauvain Pocentek
  • Date: 2012-03-06 11:59:12 UTC
  • mfrom: (66.1.15 precise)
  • Revision ID: gauvain@pocentek.net-20120306115912-h9d6kt9j0l532oo5
* Merge from Ubuntu:
  - put back faac support
  - recommends apport-hooks-medibuntu
  - change Maintainer, Uploaders & Vcs-* fields.
* New upstream snapshot
* upload to unstable
* Build against external libmpeg2
* drop 51_FTBFS_arm.patch again
* no longer build depend on libcdparanoia-dev on the Hurd
* Fix FTBFS on the hurd.
  Thanks to Samuel Thibault <sthibault@debian.org> (Closes: #654974)
* Fix FTBFS on arm
* New upstream snapshot, Closes: #650339, #643621, #481807
* Imported Upstream version 1.0~rc4+svn34492
* Bump standards version
* Bump dependency on libav >= 4:0.8~, Closes: #653887
* Fix build-indep
* Build mplayer-gui again, Closes: #568514
* Drop debian/all-lang-config-mak.sh, no longer needed
* include .dfsg1 in version number
* remove get-orig-source target
* no longer prune compiler flags from the environment
* No longer advertise nor build 3fdx, mga and dxr3 backends,
  Closes: #496106, #442181, #533546
* beautify mplayer version identification string
* Brown paperbag upload.
* Next try to fix build failure on sparce after recent binutils change.
* Brown paperbag upload.
* Really fix build failure on sparc after recent binutils change.
* Properly set Replaces/Conflicts on mplayer2{,-dbg} to avoid
  file overwrite errors.
* Adjust versioning of mplayer listed in the mplayer-dbg's Depends field.
* Fix build failure on sparc after recent binutils change.
* Urgency medium bumped because of RC-level bugfix
  and speeding up x264 transition.
* Update to my @debian.org email.
* Upload to unstable
* Enable joystick support on Linux only, Closes: #638408
* Rebuild fixes toolchain issue on arm, Closes: #637077
* New upstream snapshot
* following the discussion started by Diego Biurrun <diego@biurrun.de>
  in debian-devel, I have prepared a new packaging of 'mplayer'
  (with code that comes from CVS)
* the upstream tar.bz cannot be distributed by Debian, since it contains
   CSS code; so I am repackaging it 
* I have tried my best to address all known issues:
  - the package contains the detailed Copyright made by Diego Biurrun 
  - the package does not contain CSS code, or  AFAIK other code on which 
     there is active patent enforcement
  - there is a script  debian/cvs-changelog.sh  that shows all changes
     done to files included in this source.
    This should comply with GPLv2 sec 2.a  (in spirit if not in letter)
    For this reason, the source code contains CVS directories.
* needs   make (>= 3.80) for 'html-chunked-$(1)' in DOCS/xml/Makefile

* some corrections, as suggested Diego Biurrun
  - binary codecs should go into /usr/lib/codecs (upstream default)
  - better template 'mplayer/install_codecs'
  - an empty 'font=' in mplayer.conf breaks mplayer: postinst corrected
* correction in 'mplayer/cfgnote'
* better mplayer.postinst and mplayer.config

* New upstream release
* better debian/copyright file
* do not ship a skin
* New upstream release
* changed DEB_BUILD_OPTIONS to DEB_BUILD_CONFIGURE ,
  DEB_BUILD_OPTIONS is used as in debian policy
* use gcc-3.4
* changed xlibs-dev to a long list of dependencies, for Debian/etch
* try to adhere to  http://www.mplayerhq.hu/DOCS/tech/binary-packaging.txt
  (see README.Debian for details)
* removed dependency on xlibmesa-dev, disabled opengl
* New upstream release
* Simon McVittie <hacks@pseudorandom.co.uk> wonderful work:
- Work around Debian bug #267442 (glibc's sys/uio.h and gcc's altivec.h have
  conflicting uses for __vector) by re-ordering #includes
- Fix potential symlink attack in ./configure
- Disable support for binary codecs on platforms for which those codecs
  aren't available; also disable the corresponding Debconf note when it's
  inappropriate
- Changed Build-Depends: so it works in pbuilder
- Explicitly build-depend on libjpeg62-dev, libfontconfig1-dev,
  libungif4-dev 
- Tweak debian/rules to avoid certain errors being ignored
- Use --language=all
* provide a target  'debian/rules get-orig-source' 
  that recreates the orig.tar.gz ; then use the above orig.tar.gz
* rewrote some parts of debian/rules
* don't clean and recompile docs if upstream ships them
* mplayer-doc was shipping too much stuff
* translated man pages where not installed properly
* compile with libdv4-dev
* correct README.Debian
* Forgot build-dep on libtheora
* Must not depend on libxvidcore
* New upstream release
* new release.
* rc1 to become 0.90
* new pre-release
* new pre-release
* gtk bug fixed.
* new release.
* version bumped
* 0.60 pre2 release
* 0.60 pre-release.

Show diffs side-by-side

added added

removed removed

Lines of Context:
21
21
#ifndef AVFORMAT_AVFORMAT_H
22
22
#define AVFORMAT_AVFORMAT_H
23
23
 
24
 
 
25
 
/**
26
 
 * Return the LIBAVFORMAT_VERSION_INT constant.
27
 
 */
28
 
unsigned avformat_version(void);
29
 
 
30
 
/**
31
 
 * Return the libavformat build-time configuration.
32
 
 */
33
 
const char *avformat_configuration(void);
34
 
 
35
 
/**
36
 
 * Return the libavformat license.
37
 
 */
38
 
const char *avformat_license(void);
 
24
/**
 
25
 * @file
 
26
 * @ingroup libavf
 
27
 * Main libavformat public API header
 
28
 */
 
29
 
 
30
/**
 
31
 * @defgroup libavf I/O and Muxing/Demuxing Library
 
32
 * @{
 
33
 *
 
34
 * Libavformat (lavf) is a library for dealing with various media container
 
35
 * formats. Its main two purposes are demuxing - i.e. splitting a media file
 
36
 * into component streams, and the reverse process of muxing - writing supplied
 
37
 * data in a specified container format. It also has an @ref lavf_io
 
38
 * "I/O module" which supports a number of protocols for accessing the data (e.g.
 
39
 * file, tcp, http and others). Before using lavf, you need to call
 
40
 * av_register_all() to register all compiled muxers, demuxers and protocols.
 
41
 * Unless you are absolutely sure you won't use libavformat's network
 
42
 * capabilities, you should also call avformat_network_init().
 
43
 *
 
44
 * A supported input format is described by an AVInputFormat struct, conversely
 
45
 * an output format is described by AVOutputFormat. You can iterate over all
 
46
 * registered input/output formats using the av_iformat_next() /
 
47
 * av_oformat_next() functions. The protocols layer is not part of the public
 
48
 * API, so you can only get the names of supported protocols with the
 
49
 * avio_enum_protocols() function.
 
50
 *
 
51
 * Main lavf structure used for both muxing and demuxing is AVFormatContext,
 
52
 * which exports all information about the file being read or written. As with
 
53
 * most Libav structures, its size is not part of public ABI, so it cannot be
 
54
 * allocated on stack or directly with av_malloc(). To create an
 
55
 * AVFormatContext, use avformat_alloc_context() (some functions, like
 
56
 * avformat_open_input() might do that for you).
 
57
 *
 
58
 * Most importantly an AVFormatContext contains:
 
59
 * @li the @ref AVFormatContext.iformat "input" or @ref AVFormatContext.oformat
 
60
 * "output" format. It is either autodetected or set by user for input;
 
61
 * always set by user for output.
 
62
 * @li an @ref AVFormatContext.streams "array" of AVStreams, which describe all
 
63
 * elementary streams stored in the file. AVStreams are typically referred to
 
64
 * using their index in this array.
 
65
 * @li an @ref AVFormatContext.pb "I/O context". It is either opened by lavf or
 
66
 * set by user for input, always set by user for output (unless you are dealing
 
67
 * with an AVFMT_NOFILE format).
 
68
 *
 
69
 * @defgroup lavf_decoding Demuxing
 
70
 * @{
 
71
 * Demuxers read a media file and split it into chunks of data (@em packets). A
 
72
 * @ref AVPacket "packet" contains one or more frames which belong a single
 
73
 * elementary stream. In lavf API this process is represented by the
 
74
 * avformat_open_input() function for opening a file, av_read_frame() for
 
75
 * reading a single packet and finally avformat_close_input(), which does the
 
76
 * cleanup.
 
77
 *
 
78
 * @section lavf_decoding_open Opening a media file
 
79
 * The minimum information required to open a file is its URL or filename, which
 
80
 * is passed to avformat_open_input(), as in the following code:
 
81
 * @code
 
82
 * const char    *url = "in.mp3";
 
83
 * AVFormatContext *s = NULL;
 
84
 * int ret = avformat_open_input(&s, url, NULL, NULL);
 
85
 * if (ret < 0)
 
86
 *     abort();
 
87
 * @endcode
 
88
 * The above code attempts to allocate an AVFormatContext, open the
 
89
 * specified file (autodetecting the format) and read the header, exporting the
 
90
 * information stored there into s. Some formats do not have a header or do not
 
91
 * store enough information there, so it is recommended that you call the
 
92
 * avformat_find_stream_info() function which tries to read and decode a few
 
93
 * frames to find missing information.
 
94
 *
 
95
 * In some cases you might want to preallocate an AVFormatContext yourself with
 
96
 * avformat_alloc_context() and do some tweaking on it before passing it to
 
97
 * avformat_open_input(). One such case is when you want to use custom functions
 
98
 * for reading input data instead of lavf internal I/O layer.
 
99
 * To do that, create your own AVIOContext with avio_alloc_context(), passing
 
100
 * your reading callbacks to it. Then set the @em pb field of your
 
101
 * AVFormatContext to newly created AVIOContext.
 
102
 *
 
103
 * After you have finished reading the file, you must close it with
 
104
 * avformat_close_input(). It will free everything associated with the file.
 
105
 *
 
106
 * @section lavf_decoding_read Reading from an opened file
 
107
 *
 
108
 * @section lavf_decoding_seek Seeking
 
109
 * @}
 
110
 *
 
111
 * @defgroup lavf_encoding Muxing
 
112
 * @{
 
113
 * @}
 
114
 *
 
115
 * @defgroup lavf_io I/O Read/Write
 
116
 * @{
 
117
 * @}
 
118
 *
 
119
 * @defgroup lavf_codec Demuxers
 
120
 * @{
 
121
 * @defgroup lavf_codec_native Native Demuxers
 
122
 * @{
 
123
 * @}
 
124
 * @defgroup lavf_codec_wrappers External library wrappers
 
125
 * @{
 
126
 * @}
 
127
 * @}
 
128
 * @defgroup lavf_protos I/O Protocols
 
129
 * @{
 
130
 * @}
 
131
 * @defgroup lavf_internal Internal
 
132
 * @{
 
133
 * @}
 
134
 * @}
 
135
 *
 
136
 */
39
137
 
40
138
#include <time.h>
41
139
#include <stdio.h>  /* FILE */
42
140
#include "libavcodec/avcodec.h"
43
141
#include "libavutil/dict.h"
 
142
#include "libavutil/log.h"
44
143
 
45
144
#include "avio.h"
46
145
#include "libavformat/version.h"
48
147
struct AVFormatContext;
49
148
 
50
149
 
51
 
/*
52
 
 * Public Metadata API.
 
150
/**
 
151
 * @defgroup metadata_api Public Metadata API
 
152
 * @{
 
153
 * @ingroup libavf
53
154
 * The metadata API allows libavformat to export metadata tags to a client
54
 
 * application using a sequence of key/value pairs. Like all strings in Libav,
55
 
 * metadata must be stored as UTF-8 encoded Unicode. Note that metadata
 
155
 * application when demuxing. Conversely it allows a client application to
 
156
 * set metadata when muxing.
 
157
 *
 
158
 * Metadata is exported or set as pairs of key/value strings in the 'metadata'
 
159
 * fields of the AVFormatContext, AVStream, AVChapter and AVProgram structs
 
160
 * using the @ref lavu_dict "AVDictionary" API. Like all strings in Libav,
 
161
 * metadata is assumed to be UTF-8 encoded Unicode. Note that metadata
56
162
 * exported by demuxers isn't checked to be valid UTF-8 in most cases.
 
163
 *
57
164
 * Important concepts to keep in mind:
58
 
 * 1. Keys are unique; there can never be 2 tags with the same key. This is
 
165
 * -  Keys are unique; there can never be 2 tags with the same key. This is
59
166
 *    also meant semantically, i.e., a demuxer should not knowingly produce
60
167
 *    several keys that are literally different but semantically identical.
61
168
 *    E.g., key=Author5, key=Author6. In this example, all authors must be
62
169
 *    placed in the same tag.
63
 
 * 2. Metadata is flat, not hierarchical; there are no subtags. If you
 
170
 * -  Metadata is flat, not hierarchical; there are no subtags. If you
64
171
 *    want to store, e.g., the email address of the child of producer Alice
65
172
 *    and actor Bob, that could have key=alice_and_bobs_childs_email_address.
66
 
 * 3. Several modifiers can be applied to the tag name. This is done by
 
173
 * -  Several modifiers can be applied to the tag name. This is done by
67
174
 *    appending a dash character ('-') and the modifier name in the order
68
175
 *    they appear in the list below -- e.g. foo-eng-sort, not foo-sort-eng.
69
 
 *    a) language -- a tag whose value is localized for a particular language
 
176
 *    -  language -- a tag whose value is localized for a particular language
70
177
 *       is appended with the ISO 639-2/B 3-letter language code.
71
178
 *       For example: Author-ger=Michael, Author-eng=Mike
72
179
 *       The original/default language is in the unqualified "Author" tag.
73
180
 *       A demuxer should set a default if it sets any translated tag.
74
 
 *    b) sorting  -- a modified version of a tag that should be used for
 
181
 *    -  sorting  -- a modified version of a tag that should be used for
75
182
 *       sorting will have '-sort' appended. E.g. artist="The Beatles",
76
183
 *       artist-sort="Beatles, The".
77
184
 *
78
 
 * 4. Demuxers attempt to export metadata in a generic format, however tags
 
185
 * -  Demuxers attempt to export metadata in a generic format, however tags
79
186
 *    with no generic equivalents are left as they are stored in the container.
80
187
 *    Follows a list of generic tag names:
81
188
 *
82
 
 * album        -- name of the set this work belongs to
83
 
 * album_artist -- main creator of the set/album, if different from artist.
84
 
 *                 e.g. "Various Artists" for compilation albums.
85
 
 * artist       -- main creator of the work
86
 
 * comment      -- any additional description of the file.
87
 
 * composer     -- who composed the work, if different from artist.
88
 
 * copyright    -- name of copyright holder.
89
 
 * creation_time-- date when the file was created, preferably in ISO 8601.
90
 
 * date         -- date when the work was created, preferably in ISO 8601.
91
 
 * disc         -- number of a subset, e.g. disc in a multi-disc collection.
92
 
 * encoder      -- name/settings of the software/hardware that produced the file.
93
 
 * encoded_by   -- person/group who created the file.
94
 
 * filename     -- original name of the file.
95
 
 * genre        -- <self-evident>.
96
 
 * language     -- main language in which the work is performed, preferably
97
 
 *                 in ISO 639-2 format. Multiple languages can be specified by
98
 
 *                 separating them with commas.
99
 
 * performer    -- artist who performed the work, if different from artist.
100
 
 *                 E.g for "Also sprach Zarathustra", artist would be "Richard
101
 
 *                 Strauss" and performer "London Philharmonic Orchestra".
102
 
 * publisher    -- name of the label/publisher.
103
 
 * service_name     -- name of the service in broadcasting (channel name).
104
 
 * service_provider -- name of the service provider in broadcasting.
105
 
 * title        -- name of the work.
106
 
 * track        -- number of this work in the set, can be in form current/total.
107
 
 * variant_bitrate -- the total bitrate of the bitrate variant that the current stream is part of
 
189
 @verbatim
 
190
 album        -- name of the set this work belongs to
 
191
 album_artist -- main creator of the set/album, if different from artist.
 
192
                 e.g. "Various Artists" for compilation albums.
 
193
 artist       -- main creator of the work
 
194
 comment      -- any additional description of the file.
 
195
 composer     -- who composed the work, if different from artist.
 
196
 copyright    -- name of copyright holder.
 
197
 creation_time-- date when the file was created, preferably in ISO 8601.
 
198
 date         -- date when the work was created, preferably in ISO 8601.
 
199
 disc         -- number of a subset, e.g. disc in a multi-disc collection.
 
200
 encoder      -- name/settings of the software/hardware that produced the file.
 
201
 encoded_by   -- person/group who created the file.
 
202
 filename     -- original name of the file.
 
203
 genre        -- <self-evident>.
 
204
 language     -- main language in which the work is performed, preferably
 
205
                 in ISO 639-2 format. Multiple languages can be specified by
 
206
                 separating them with commas.
 
207
 performer    -- artist who performed the work, if different from artist.
 
208
                 E.g for "Also sprach Zarathustra", artist would be "Richard
 
209
                 Strauss" and performer "London Philharmonic Orchestra".
 
210
 publisher    -- name of the label/publisher.
 
211
 service_name     -- name of the service in broadcasting (channel name).
 
212
 service_provider -- name of the service provider in broadcasting.
 
213
 title        -- name of the work.
 
214
 track        -- number of this work in the set, can be in form current/total.
 
215
 variant_bitrate -- the total bitrate of the bitrate variant that the current stream is part of
 
216
 @endverbatim
 
217
 *
 
218
 * Look in the examples section for an application example how to use the Metadata API.
 
219
 *
 
220
 * @}
108
221
 */
109
222
 
110
223
#if FF_API_OLD_METADATA2
251
364
#endif
252
365
} AVFormatParameters;
253
366
 
254
 
//! Demuxer will use avio_open, no opened file should be provided by the caller.
 
367
/// Demuxer will use avio_open, no opened file should be provided by the caller.
255
368
#define AVFMT_NOFILE        0x0001
256
369
#define AVFMT_NEEDNUMBER    0x0002 /**< Needs '%d' in filename. */
257
370
#define AVFMT_SHOW_IDS      0x0008 /**< Show format stream IDs numbers. */
266
379
#define AVFMT_NOSTREAMS     0x1000 /**< Format does not require any streams */
267
380
#define AVFMT_NOBINSEARCH   0x2000 /**< Format does not allow to fallback to binary search via read_timestamp */
268
381
#define AVFMT_NOGENSEARCH   0x4000 /**< Format does not allow to fallback to generic search */
 
382
#define AVFMT_NO_BYTE_SEEK  0x8000 /**< Format does not allow seeking by bytes */
269
383
 
 
384
/**
 
385
 * @addtogroup lavf_encoding
 
386
 * @{
 
387
 */
270
388
typedef struct AVOutputFormat {
271
389
    const char *name;
272
390
    /**
314
432
 
315
433
    const AVClass *priv_class; ///< AVClass for the private context
316
434
 
 
435
    /**
 
436
     * Test if the given codec can be stored in this container.
 
437
     *
 
438
     * @return 1 if the codec is supported, 0 if it is not.
 
439
     *         A negative number if unknown.
 
440
     */
 
441
    int (*query_codec)(enum CodecID id, int std_compliance);
 
442
 
317
443
    /* private fields */
318
444
    struct AVOutputFormat *next;
319
445
} AVOutputFormat;
 
446
/**
 
447
 * @}
 
448
 */
320
449
 
 
450
/**
 
451
 * @addtogroup lavf_decoding
 
452
 * @{
 
453
 */
321
454
typedef struct AVInputFormat {
322
455
    /**
323
456
     * A comma separated list of short names for the format. New names
383
516
                                          int stream_index, int64_t timestamp, int flags);
384
517
#endif
385
518
    /**
386
 
     * Gets the next timestamp in stream[stream_index].time_base units.
 
519
     * Get the next timestamp in stream[stream_index].time_base units.
387
520
     * @return the timestamp or AV_NOPTS_VALUE if an error occurred
388
521
     */
389
522
    int64_t (*read_timestamp)(struct AVFormatContext *s, int stream_index,
390
523
                              int64_t *pos, int64_t pos_limit);
391
524
 
392
525
    /**
393
 
     * Can use flags: AVFMT_NOFILE, AVFMT_NEEDNUMBER.
 
526
     * Can use flags: AVFMT_NOFILE, AVFMT_NEEDNUMBER, AVFMT_SHOW_IDS,
 
527
     * AVFMT_GENERIC_INDEX, AVFMT_TS_DISCONT, AVFMT_NOBINSEARCH,
 
528
     * AVFMT_NOGENSEARCH, AVFMT_NO_BYTE_SEEK.
394
529
     */
395
530
    int flags;
396
531
 
437
572
    /* private fields */
438
573
    struct AVInputFormat *next;
439
574
} AVInputFormat;
 
575
/**
 
576
 * @}
 
577
 */
440
578
 
441
579
enum AVStreamParseType {
442
580
    AVSTREAM_PARSE_NONE,
494
632
    AVRational r_frame_rate;
495
633
    void *priv_data;
496
634
 
 
635
#if FF_API_REORDER_PRIVATE
497
636
    /* internal data used in av_find_stream_info() */
498
637
    int64_t first_dts;
 
638
#endif
499
639
 
500
640
    /**
501
641
     * encoding: pts generation when outputting stream
510
650
     * encoding: set by libavformat in av_write_header
511
651
     */
512
652
    AVRational time_base;
 
653
#if FF_API_REORDER_PRIVATE
513
654
    int pts_wrap_bits; /**< number of bits in pts (used for wrapping control) */
 
655
#endif
 
656
#if FF_API_STREAM_COPY
514
657
    /* ffmpeg.c private use */
515
 
    int stream_copy; /**< If set, just copy stream. */
 
658
    attribute_deprecated int stream_copy; /**< If set, just copy stream. */
 
659
#endif
516
660
    enum AVDiscard discard; ///< Selects which packets can be discarded at will and do not need to be demuxed.
517
661
 
 
662
#if FF_API_AVSTREAM_QUALITY
518
663
    //FIXME move stuff to a flags field?
519
664
    /**
520
665
     * Quality, as it has been removed from AVCodecContext and put in AVVideoFrame.
521
666
     * MN: dunno if that is the right place for it
522
667
     */
523
 
    float quality;
 
668
    attribute_deprecated float quality;
 
669
#endif
524
670
 
525
671
    /**
526
672
     * Decoding: pts of the first frame of the stream, in stream time base.
537
683
     */
538
684
    int64_t duration;
539
685
 
 
686
#if FF_API_REORDER_PRIVATE
540
687
    /* av_read_frame() support */
541
688
    enum AVStreamParseType need_parsing;
542
689
    struct AVCodecParserContext *parser;
549
696
                                    support seeking natively. */
550
697
    int nb_index_entries;
551
698
    unsigned int index_entries_allocated_size;
 
699
#endif
552
700
 
553
701
    int64_t nb_frames;                 ///< number of frames in this stream if known or 0
554
702
 
555
703
    int disposition; /**< AV_DISPOSITION_* bit field */
556
704
 
 
705
#if FF_API_REORDER_PRIVATE
557
706
    AVProbeData probe_data;
558
707
#define MAX_REORDER_DELAY 16
559
708
    int64_t pts_buffer[MAX_REORDER_DELAY+1];
 
709
#endif
560
710
 
561
711
    /**
562
712
     * sample aspect ratio (0 if unknown)
567
717
 
568
718
    AVDictionary *metadata;
569
719
 
 
720
#if FF_API_REORDER_PRIVATE
570
721
    /* Intended mostly for av_read_frame() support. Not supposed to be used by */
571
722
    /* external applications; try to use something else if at all possible.    */
572
723
    const uint8_t *cur_ptr;
592
743
 
593
744
    /**
594
745
     * last packet in packet_buffer for this stream when muxing.
595
 
     * used internally, NOT PART OF PUBLIC API, dont read or write from outside of libav*
 
746
     * Used internally, NOT PART OF PUBLIC API, do not read or
 
747
     * write from outside of libav*
596
748
     */
597
749
    struct AVPacketList *last_in_packet_buffer;
 
750
#endif
598
751
 
599
752
    /**
600
753
     * Average framerate
601
754
     */
602
755
    AVRational avg_frame_rate;
603
756
 
 
757
    /*****************************************************************
 
758
     * All fields below this line are not part of the public API. They
 
759
     * may not be used outside of libavformat and can be changed and
 
760
     * removed at will.
 
761
     * New public fields should be added right above.
 
762
     *****************************************************************
 
763
     */
 
764
 
604
765
    /**
605
766
     * Number of frames that have been demuxed during av_find_stream_info()
606
767
     */
607
768
    int codec_info_nb_frames;
608
769
 
609
770
    /**
610
 
     * Stream informations used internally by av_find_stream_info()
 
771
     * Stream information used internally by av_find_stream_info()
611
772
     */
612
773
#define MAX_STD_TIMEBASES (60*12+5)
613
774
    struct {
616
777
        int duration_count;
617
778
        double duration_error[MAX_STD_TIMEBASES];
618
779
        int64_t codec_info_duration;
 
780
        int nb_decoded_frames;
619
781
    } *info;
 
782
#if !FF_API_REORDER_PRIVATE
 
783
    const uint8_t *cur_ptr;
 
784
    int cur_len;
 
785
    AVPacket cur_pkt;
 
786
 
 
787
    // Timestamp generation support:
 
788
    /**
 
789
     * Timestamp corresponding to the last dts sync point.
 
790
     *
 
791
     * Initialized when AVCodecParserContext.dts_sync_point >= 0 and
 
792
     * a DTS is received from the underlying container. Otherwise set to
 
793
     * AV_NOPTS_VALUE by default.
 
794
     */
 
795
    int64_t reference_dts;
 
796
    int64_t first_dts;
 
797
    int64_t cur_dts;
 
798
    int last_IP_duration;
 
799
    int64_t last_IP_pts;
 
800
 
 
801
    /**
 
802
     * Number of packets to buffer for codec probing
 
803
     */
 
804
#define MAX_PROBE_PACKETS 2500
 
805
    int probe_packets;
 
806
 
 
807
    /**
 
808
     * last packet in packet_buffer for this stream when muxing.
 
809
     */
 
810
    struct AVPacketList *last_in_packet_buffer;
 
811
    AVProbeData probe_data;
 
812
#define MAX_REORDER_DELAY 16
 
813
    int64_t pts_buffer[MAX_REORDER_DELAY+1];
 
814
    /* av_read_frame() support */
 
815
    enum AVStreamParseType need_parsing;
 
816
    struct AVCodecParserContext *parser;
 
817
 
 
818
    AVIndexEntry *index_entries; /**< Only used if the format does not
 
819
                                    support seeking natively. */
 
820
    int nb_index_entries;
 
821
    unsigned int index_entries_allocated_size;
 
822
 
 
823
    int pts_wrap_bits; /**< number of bits in pts (used for wrapping control) */
 
824
#endif
620
825
} AVStream;
621
826
 
622
827
#define AV_PROGRAM_RUNNING 1
651
856
 * New fields can be added to the end with minor version bumps.
652
857
 * Removal, reordering and changes to existing fields require a major
653
858
 * version bump.
654
 
 * sizeof(AVFormatContext) must not be used outside libav*.
 
859
 * sizeof(AVFormatContext) must not be used outside libav*, use
 
860
 * avformat_alloc_context() to create an AVFormatContext.
655
861
 */
656
862
typedef struct AVFormatContext {
657
 
    const AVClass *av_class; /**< Set by avformat_alloc_context. */
658
 
    /* Can only be iformat or oformat, not both at the same time. */
 
863
    /**
 
864
     * A class for logging and AVOptions. Set by avformat_alloc_context().
 
865
     * Exports (de)muxer private options if they exist.
 
866
     */
 
867
    const AVClass *av_class;
 
868
 
 
869
    /**
 
870
     * Can only be iformat or oformat, not both at the same time.
 
871
     *
 
872
     * decoding: set by avformat_open_input().
 
873
     * encoding: set by the user.
 
874
     */
659
875
    struct AVInputFormat *iformat;
660
876
    struct AVOutputFormat *oformat;
 
877
 
 
878
    /**
 
879
     * Format private data. This is an AVOptions-enabled struct
 
880
     * if and only if iformat/oformat.priv_class is not NULL.
 
881
     */
661
882
    void *priv_data;
 
883
 
 
884
    /*
 
885
     * I/O context.
 
886
     *
 
887
     * decoding: either set by the user before avformat_open_input() (then
 
888
     * the user must close it manually) or set by avformat_open_input().
 
889
     * encoding: set by the user.
 
890
     *
 
891
     * Do NOT set this field if AVFMT_NOFILE flag is set in
 
892
     * iformat/oformat.flags. In such a case, the (de)muxer will handle
 
893
     * I/O in some other way and this field will be NULL.
 
894
     */
662
895
    AVIOContext *pb;
 
896
 
 
897
    /**
 
898
     * A list of all streams in the file. New streams are created with
 
899
     * avformat_new_stream().
 
900
     *
 
901
     * decoding: streams are created by libavformat in avformat_open_input().
 
902
     * If AVFMTCTX_NOHEADER is set in ctx_flags, then new streams may also
 
903
     * appear in av_read_frame().
 
904
     * encoding: streams are created by the user before avformat_write_header().
 
905
     */
663
906
    unsigned int nb_streams;
664
907
    AVStream **streams;
 
908
 
665
909
    char filename[1024]; /**< input or output filename */
666
910
    /* stream info */
667
 
    int64_t timestamp;
 
911
#if FF_API_TIMESTAMP
 
912
    /**
 
913
     * @deprecated use 'creation_time' metadata tag instead
 
914
     */
 
915
    attribute_deprecated int64_t timestamp;
 
916
#endif
668
917
 
669
918
    int ctx_flags; /**< Format-specific flags, see AVFMTCTX_xx */
 
919
#if FF_API_REORDER_PRIVATE
670
920
    /* private data for pts handling (do not modify directly). */
671
921
    /**
672
922
     * This buffer is only needed when packets were already buffered but
674
924
     * streams.
675
925
     */
676
926
    struct AVPacketList *packet_buffer;
 
927
#endif
677
928
 
678
929
    /**
679
930
     * Decoding: position of the first frame of the component, in
685
936
    /**
686
937
     * Decoding: duration of the stream, in AV_TIME_BASE fractional
687
938
     * seconds. Only set this value if you know none of the individual stream
688
 
     * durations and also dont set any of them. This is deduced from the
 
939
     * durations and also do not set any of them. This is deduced from the
689
940
     * AVStream values if not set.
690
941
     */
691
942
    int64_t duration;
692
943
 
 
944
#if FF_API_FILESIZE
693
945
    /**
694
946
     * decoding: total file size, 0 if unknown
695
947
     */
696
 
    int64_t file_size;
 
948
    attribute_deprecated int64_t file_size;
 
949
#endif
697
950
 
698
951
    /**
699
952
     * Decoding: total stream bitrate in bit/s, 0 if not
702
955
     */
703
956
    int bit_rate;
704
957
 
 
958
#if FF_API_REORDER_PRIVATE
705
959
    /* av_read_frame() support */
706
960
    AVStream *cur_st;
707
961
 
708
962
    /* av_seek_frame() support */
709
963
    int64_t data_offset; /**< offset of the first packet */
 
964
#endif
710
965
 
711
 
    int mux_rate;
 
966
#if FF_API_MUXRATE
 
967
    /**
 
968
     * use mpeg muxer private options instead
 
969
     */
 
970
    attribute_deprecated int mux_rate;
 
971
#endif
712
972
    unsigned int packet_size;
713
 
    int preload;
 
973
#if FF_API_PRELOAD
 
974
    attribute_deprecated int preload;
 
975
#endif
714
976
    int max_delay;
715
977
 
 
978
#if FF_API_LOOP_OUTPUT
716
979
#define AVFMT_NOOUTPUTLOOP -1
717
980
#define AVFMT_INFINITEOUTPUTLOOP 0
718
981
    /**
719
982
     * number of times to loop output in formats that support it
 
983
     *
 
984
     * @deprecated use the 'loop' private option in the gif muxer.
720
985
     */
721
 
    int loop_output;
 
986
    attribute_deprecated int loop_output;
 
987
#endif
722
988
 
723
989
    int flags;
724
990
#define AVFMT_FLAG_GENPTS       0x0001 ///< Generate missing pts even if it requires parsing future frames.
731
997
#define AVFMT_FLAG_RTP_HINT     0x0040 ///< Deprecated, use the -movflags rtphint muxer specific AVOption instead
732
998
#endif
733
999
#define AVFMT_FLAG_CUSTOM_IO    0x0080 ///< The caller has supplied a custom AVIOContext, don't avio_close() it.
 
1000
#define AVFMT_FLAG_DISCARD_CORRUPT  0x0100 ///< Discard frames marked corrupted
734
1001
 
735
 
    int loop_input;
 
1002
#if FF_API_LOOP_INPUT
 
1003
    /**
 
1004
     * @deprecated, use the 'loop' img2 demuxer private option.
 
1005
     */
 
1006
    attribute_deprecated int loop_input;
 
1007
#endif
736
1008
 
737
1009
    /**
738
1010
     * decoding: size of data to probe; encoding: unused.
740
1012
    unsigned int probesize;
741
1013
 
742
1014
    /**
743
 
     * Maximum time (in AV_TIME_BASE units) during which the input should
744
 
     * be analyzed in av_find_stream_info().
 
1015
     * decoding: maximum time (in AV_TIME_BASE units) during which the input should
 
1016
     * be analyzed in avformat_find_stream_info().
745
1017
     */
746
1018
    int max_analyze_duration;
747
1019
 
796
1068
    int debug;
797
1069
#define FF_FDEBUG_TS        0x0001
798
1070
 
 
1071
#if FF_API_REORDER_PRIVATE
799
1072
    /**
800
1073
     * Raw packets from the demuxer, prior to parsing and decoding.
801
1074
     * This buffer is used for buffering packets until the codec can
806
1079
    struct AVPacketList *raw_packet_buffer_end;
807
1080
 
808
1081
    struct AVPacketList *packet_buffer_end;
 
1082
#endif
809
1083
 
810
1084
    AVDictionary *metadata;
811
1085
 
 
1086
#if FF_API_REORDER_PRIVATE
812
1087
    /**
813
1088
     * Remaining size available for raw_packet_buffer, in bytes.
814
1089
     * NOT PART OF PUBLIC API
815
1090
     */
816
1091
#define RAW_PACKET_BUFFER_SIZE 2500000
817
1092
    int raw_packet_buffer_remaining_size;
 
1093
#endif
818
1094
 
819
1095
    /**
820
1096
     * Start time of the stream in real world time, in microseconds
829
1105
     * decoding: number of frames used to probe fps
830
1106
     */
831
1107
    int fps_probe_size;
 
1108
 
 
1109
    /**
 
1110
     * Error recognition; higher values will detect more errors but may
 
1111
     * misdetect some more or less valid parts as errors.
 
1112
     * - encoding: unused
 
1113
     * - decoding: Set by user.
 
1114
     */
 
1115
    int error_recognition;
 
1116
 
 
1117
    /**
 
1118
     * Custom interrupt callbacks for the I/O layer.
 
1119
     *
 
1120
     * decoding: set by the user before avformat_open_input().
 
1121
     * encoding: set by the user before avformat_write_header()
 
1122
     * (mainly useful for AVFMT_NOFILE formats). The callback
 
1123
     * should also be passed to avio_open2() if it's used to
 
1124
     * open the file.
 
1125
     */
 
1126
    AVIOInterruptCB interrupt_callback;
 
1127
 
 
1128
    /*****************************************************************
 
1129
     * All fields below this line are not part of the public API. They
 
1130
     * may not be used outside of libavformat and can be changed and
 
1131
     * removed at will.
 
1132
     * New public fields should be added right above.
 
1133
     *****************************************************************
 
1134
     */
 
1135
#if !FF_API_REORDER_PRIVATE
 
1136
    /**
 
1137
     * Raw packets from the demuxer, prior to parsing and decoding.
 
1138
     * This buffer is used for buffering packets until the codec can
 
1139
     * be identified, as parsing cannot be done without knowing the
 
1140
     * codec.
 
1141
     */
 
1142
    struct AVPacketList *raw_packet_buffer;
 
1143
    struct AVPacketList *raw_packet_buffer_end;
 
1144
    /**
 
1145
     * Remaining size available for raw_packet_buffer, in bytes.
 
1146
     */
 
1147
#define RAW_PACKET_BUFFER_SIZE 2500000
 
1148
    int raw_packet_buffer_remaining_size;
 
1149
 
 
1150
    /**
 
1151
     * This buffer is only needed when packets were already buffered but
 
1152
     * not decoded, for example to get the codec parameters in MPEG
 
1153
     * streams.
 
1154
     */
 
1155
    struct AVPacketList *packet_buffer;
 
1156
    struct AVPacketList *packet_buffer_end;
 
1157
 
 
1158
    /* av_read_frame() support */
 
1159
    AVStream *cur_st;
 
1160
 
 
1161
    /* av_seek_frame() support */
 
1162
    int64_t data_offset; /**< offset of the first packet */
 
1163
#endif
832
1164
} AVFormatContext;
833
1165
 
834
1166
typedef struct AVPacketList {
836
1168
    struct AVPacketList *next;
837
1169
} AVPacketList;
838
1170
 
 
1171
 
 
1172
/**
 
1173
 * @defgroup lavf_core Core functions
 
1174
 * @ingroup libavf
 
1175
 *
 
1176
 * Functions for querying libavformat capabilities, allocating core structures,
 
1177
 * etc.
 
1178
 * @{
 
1179
 */
 
1180
 
 
1181
/**
 
1182
 * Return the LIBAVFORMAT_VERSION_INT constant.
 
1183
 */
 
1184
unsigned avformat_version(void);
 
1185
 
 
1186
/**
 
1187
 * Return the libavformat build-time configuration.
 
1188
 */
 
1189
const char *avformat_configuration(void);
 
1190
 
 
1191
/**
 
1192
 * Return the libavformat license.
 
1193
 */
 
1194
const char *avformat_license(void);
 
1195
 
 
1196
/**
 
1197
 * Initialize libavformat and register all the muxers, demuxers and
 
1198
 * protocols. If you do not call this function, then you can select
 
1199
 * exactly which formats you want to support.
 
1200
 *
 
1201
 * @see av_register_input_format()
 
1202
 * @see av_register_output_format()
 
1203
 * @see av_register_protocol()
 
1204
 */
 
1205
void av_register_all(void);
 
1206
 
 
1207
void av_register_input_format(AVInputFormat *format);
 
1208
void av_register_output_format(AVOutputFormat *format);
 
1209
 
 
1210
/**
 
1211
 * Do global initialization of network components. This is optional,
 
1212
 * but recommended, since it avoids the overhead of implicitly
 
1213
 * doing the setup for each session.
 
1214
 *
 
1215
 * Calling this function will become mandatory if using network
 
1216
 * protocols at some major version bump.
 
1217
 */
 
1218
int avformat_network_init(void);
 
1219
 
 
1220
/**
 
1221
 * Undo the initialization done by avformat_network_init.
 
1222
 */
 
1223
int avformat_network_deinit(void);
 
1224
 
839
1225
/**
840
1226
 * If f is NULL, returns the first registered input format,
841
1227
 * if f is non-NULL, returns the next registered input format after f
850
1236
 */
851
1237
AVOutputFormat *av_oformat_next(AVOutputFormat *f);
852
1238
 
 
1239
/**
 
1240
 * Allocate an AVFormatContext.
 
1241
 * avformat_free_context() can be used to free the context and everything
 
1242
 * allocated by the framework within it.
 
1243
 */
 
1244
AVFormatContext *avformat_alloc_context(void);
 
1245
 
 
1246
/**
 
1247
 * Free an AVFormatContext and all its streams.
 
1248
 * @param s context to free
 
1249
 */
 
1250
void avformat_free_context(AVFormatContext *s);
 
1251
 
 
1252
/**
 
1253
 * Get the AVClass for AVFormatContext. It can be used in combination with
 
1254
 * AV_OPT_SEARCH_FAKE_OBJ for examining options.
 
1255
 *
 
1256
 * @see av_opt_find().
 
1257
 */
 
1258
const AVClass *avformat_get_class(void);
 
1259
 
 
1260
/**
 
1261
 * Add a new stream to a media file.
 
1262
 *
 
1263
 * When demuxing, it is called by the demuxer in read_header(). If the
 
1264
 * flag AVFMTCTX_NOHEADER is set in s.ctx_flags, then it may also
 
1265
 * be called in read_packet().
 
1266
 *
 
1267
 * When muxing, should be called by the user before avformat_write_header().
 
1268
 *
 
1269
 * @param c If non-NULL, the AVCodecContext corresponding to the new stream
 
1270
 * will be initialized to use this codec. This is needed for e.g. codec-specific
 
1271
 * defaults to be set, so codec should be provided if it is known.
 
1272
 *
 
1273
 * @return newly created stream or NULL on error.
 
1274
 */
 
1275
AVStream *avformat_new_stream(AVFormatContext *s, AVCodec *c);
 
1276
 
 
1277
AVProgram *av_new_program(AVFormatContext *s, int id);
 
1278
 
 
1279
/**
 
1280
 * @}
 
1281
 */
 
1282
 
 
1283
 
853
1284
#if FF_API_GUESS_IMG2_CODEC
854
1285
attribute_deprecated enum CodecID av_guess_image2_codec(const char *filename);
855
1286
#endif
856
1287
 
857
 
/* XXX: Use automatic init with either ELF sections or C file parser */
858
 
/* modules. */
859
 
 
860
 
/* utils.c */
861
 
void av_register_input_format(AVInputFormat *format);
862
 
void av_register_output_format(AVOutputFormat *format);
863
 
 
864
 
/**
865
 
 * Return the output format in the list of registered output formats
866
 
 * which best matches the provided parameters, or return NULL if
867
 
 * there is no match.
868
 
 *
869
 
 * @param short_name if non-NULL checks if short_name matches with the
870
 
 * names of the registered formats
871
 
 * @param filename if non-NULL checks if filename terminates with the
872
 
 * extensions of the registered formats
873
 
 * @param mime_type if non-NULL checks if mime_type matches with the
874
 
 * MIME type of the registered formats
875
 
 */
876
 
AVOutputFormat *av_guess_format(const char *short_name,
877
 
                                const char *filename,
878
 
                                const char *mime_type);
879
 
 
880
 
/**
881
 
 * Guess the codec ID based upon muxer and filename.
882
 
 */
883
 
enum CodecID av_guess_codec(AVOutputFormat *fmt, const char *short_name,
884
 
                            const char *filename, const char *mime_type,
885
 
                            enum AVMediaType type);
886
 
 
887
 
/**
888
 
 * Send a nice hexadecimal dump of a buffer to the specified file stream.
889
 
 *
890
 
 * @param f The file stream pointer where the dump should be sent to.
891
 
 * @param buf buffer
892
 
 * @param size buffer size
893
 
 *
894
 
 * @see av_hex_dump_log, av_pkt_dump2, av_pkt_dump_log2
895
 
 */
896
 
void av_hex_dump(FILE *f, uint8_t *buf, int size);
897
 
 
898
 
/**
899
 
 * Send a nice hexadecimal dump of a buffer to the log.
900
 
 *
901
 
 * @param avcl A pointer to an arbitrary struct of which the first field is a
902
 
 * pointer to an AVClass struct.
903
 
 * @param level The importance level of the message, lower values signifying
904
 
 * higher importance.
905
 
 * @param buf buffer
906
 
 * @param size buffer size
907
 
 *
908
 
 * @see av_hex_dump, av_pkt_dump2, av_pkt_dump_log2
909
 
 */
910
 
void av_hex_dump_log(void *avcl, int level, uint8_t *buf, int size);
911
 
 
912
 
/**
913
 
 * Send a nice dump of a packet to the specified file stream.
914
 
 *
915
 
 * @param f The file stream pointer where the dump should be sent to.
916
 
 * @param pkt packet to dump
917
 
 * @param dump_payload True if the payload must be displayed, too.
918
 
 * @param st AVStream that the packet belongs to
919
 
 */
920
 
void av_pkt_dump2(FILE *f, AVPacket *pkt, int dump_payload, AVStream *st);
921
 
 
922
 
 
923
 
/**
924
 
 * Send a nice dump of a packet to the log.
925
 
 *
926
 
 * @param avcl A pointer to an arbitrary struct of which the first field is a
927
 
 * pointer to an AVClass struct.
928
 
 * @param level The importance level of the message, lower values signifying
929
 
 * higher importance.
930
 
 * @param pkt packet to dump
931
 
 * @param dump_payload True if the payload must be displayed, too.
932
 
 * @param st AVStream that the packet belongs to
933
 
 */
934
 
void av_pkt_dump_log2(void *avcl, int level, AVPacket *pkt, int dump_payload,
935
 
                      AVStream *st);
936
 
 
937
1288
#if FF_API_PKT_DUMP
938
1289
attribute_deprecated void av_pkt_dump(FILE *f, AVPacket *pkt, int dump_payload);
939
1290
attribute_deprecated void av_pkt_dump_log(void *avcl, int level, AVPacket *pkt,
940
1291
                                          int dump_payload);
941
1292
#endif
942
1293
 
943
 
/**
944
 
 * Initialize libavformat and register all the muxers, demuxers and
945
 
 * protocols. If you do not call this function, then you can select
946
 
 * exactly which formats you want to support.
947
 
 *
948
 
 * @see av_register_input_format()
949
 
 * @see av_register_output_format()
950
 
 * @see av_register_protocol()
951
 
 */
952
 
void av_register_all(void);
953
 
 
954
 
/**
955
 
 * Get the CodecID for the given codec tag tag.
956
 
 * If no codec id is found returns CODEC_ID_NONE.
957
 
 *
958
 
 * @param tags list of supported codec_id-codec_tag pairs, as stored
959
 
 * in AVInputFormat.codec_tag and AVOutputFormat.codec_tag
960
 
 */
961
 
enum CodecID av_codec_get_id(const struct AVCodecTag * const *tags, unsigned int tag);
962
 
 
963
 
/**
964
 
 * Get the codec tag for the given codec id id.
965
 
 * If no codec tag is found returns 0.
966
 
 *
967
 
 * @param tags list of supported codec_id-codec_tag pairs, as stored
968
 
 * in AVInputFormat.codec_tag and AVOutputFormat.codec_tag
969
 
 */
970
 
unsigned int av_codec_get_tag(const struct AVCodecTag * const *tags, enum CodecID id);
971
 
 
972
 
/* media file input */
 
1294
 
 
1295
/**
 
1296
 * @addtogroup lavf_decoding
 
1297
 * @{
 
1298
 */
973
1299
 
974
1300
/**
975
1301
 * Find AVInputFormat based on the short name of the input format.
1067
1393
 */
1068
1394
int avformat_open_input(AVFormatContext **ps, const char *filename, AVInputFormat *fmt, AVDictionary **options);
1069
1395
 
1070
 
/**
1071
 
 * Allocate an AVFormatContext.
1072
 
 * avformat_free_context() can be used to free the context and everything
1073
 
 * allocated by the framework within it.
1074
 
 */
1075
 
AVFormatContext *avformat_alloc_context(void);
1076
 
 
 
1396
#if FF_API_FORMAT_PARAMETERS
1077
1397
/**
1078
1398
 * Read packets of a media file to get stream information. This
1079
1399
 * is useful for file formats with no headers such as MPEG. This
1086
1406
 * @return >=0 if OK, AVERROR_xxx on error
1087
1407
 * @todo Let the user decide somehow what information is needed so that
1088
1408
 *       we do not waste time getting stuff the user does not need.
 
1409
 *
 
1410
 * @deprecated use avformat_find_stream_info.
1089
1411
 */
 
1412
attribute_deprecated
1090
1413
int av_find_stream_info(AVFormatContext *ic);
 
1414
#endif
 
1415
 
 
1416
/**
 
1417
 * Read packets of a media file to get stream information. This
 
1418
 * is useful for file formats with no headers such as MPEG. This
 
1419
 * function also computes the real framerate in case of MPEG-2 repeat
 
1420
 * frame mode.
 
1421
 * The logical file position is not changed by this function;
 
1422
 * examined packets may be buffered for later processing.
 
1423
 *
 
1424
 * @param ic media file handle
 
1425
 * @param options  If non-NULL, an ic.nb_streams long array of pointers to
 
1426
 *                 dictionaries, where i-th member contains options for
 
1427
 *                 codec corresponding to i-th stream.
 
1428
 *                 On return each dictionary will be filled with options that were not found.
 
1429
 * @return >=0 if OK, AVERROR_xxx on error
 
1430
 *
 
1431
 * @note this function isn't guaranteed to open all the codecs, so
 
1432
 *       options being non-empty at return is a perfectly normal behavior.
 
1433
 *
 
1434
 * @todo Let the user decide somehow what information is needed so that
 
1435
 *       we do not waste time getting stuff the user does not need.
 
1436
 */
 
1437
int avformat_find_stream_info(AVFormatContext *ic, AVDictionary **options);
1091
1438
 
1092
1439
/**
1093
1440
 * Find the "best" stream in the file.
1213
1560
 */
1214
1561
int av_read_pause(AVFormatContext *s);
1215
1562
 
 
1563
#if FF_API_FORMAT_PARAMETERS
1216
1564
/**
1217
1565
 * Free a AVFormatContext allocated by av_open_input_stream.
1218
1566
 * @param s context to free
 
1567
 * @deprecated use av_close_input_file()
1219
1568
 */
 
1569
attribute_deprecated
1220
1570
void av_close_input_stream(AVFormatContext *s);
 
1571
#endif
1221
1572
 
 
1573
#if FF_API_CLOSE_INPUT_FILE
1222
1574
/**
 
1575
 * @deprecated use avformat_close_input()
1223
1576
 * Close a media file (but not its codecs).
1224
1577
 *
1225
1578
 * @param s media file handle
1226
1579
 */
 
1580
attribute_deprecated
1227
1581
void av_close_input_file(AVFormatContext *s);
1228
 
 
1229
 
/**
1230
 
 * Free an AVFormatContext and all its streams.
1231
 
 * @param s context to free
1232
 
 */
1233
 
void avformat_free_context(AVFormatContext *s);
1234
 
 
 
1582
#endif
 
1583
 
 
1584
/**
 
1585
 * Close an opened input AVFormatContext. Free it and all its contents
 
1586
 * and set *s to NULL.
 
1587
 */
 
1588
void avformat_close_input(AVFormatContext **s);
 
1589
/**
 
1590
 * @}
 
1591
 */
 
1592
 
 
1593
#if FF_API_NEW_STREAM
1235
1594
/**
1236
1595
 * Add a new stream to a media file.
1237
1596
 *
1242
1601
 * @param s media file handle
1243
1602
 * @param id file-format-dependent stream ID
1244
1603
 */
 
1604
attribute_deprecated
1245
1605
AVStream *av_new_stream(AVFormatContext *s, int id);
1246
 
AVProgram *av_new_program(AVFormatContext *s, int id);
 
1606
#endif
1247
1607
 
 
1608
#if FF_API_SET_PTS_INFO
1248
1609
/**
1249
 
 * Set the pts for a given stream. If the new values would be invalid
1250
 
 * (<= 0), it leaves the AVStream unchanged.
1251
 
 *
1252
 
 * @param s stream
1253
 
 * @param pts_wrap_bits number of bits effectively used by the pts
1254
 
 *        (used for wrap control, 33 is the value for MPEG)
1255
 
 * @param pts_num numerator to convert to seconds (MPEG: 1)
1256
 
 * @param pts_den denominator to convert to seconds (MPEG: 90000)
 
1610
 * @deprecated this function is not supposed to be called outside of lavf
1257
1611
 */
 
1612
attribute_deprecated
1258
1613
void av_set_pts_info(AVStream *s, int pts_wrap_bits,
1259
1614
                     unsigned int pts_num, unsigned int pts_den);
 
1615
#endif
1260
1616
 
1261
1617
#define AVSEEK_FLAG_BACKWARD 1 ///< seek backward
1262
1618
#define AVSEEK_FLAG_BYTE     2 ///< seeking based on position in bytes
1263
1619
#define AVSEEK_FLAG_ANY      4 ///< seek to any frame, even non-keyframes
1264
1620
#define AVSEEK_FLAG_FRAME    8 ///< seeking based on frame number
1265
1621
 
1266
 
int av_find_default_stream_index(AVFormatContext *s);
1267
 
 
1268
 
/**
1269
 
 * Get the index for a specific timestamp.
1270
 
 * @param flags if AVSEEK_FLAG_BACKWARD then the returned index will correspond
1271
 
 *                 to the timestamp which is <= the requested one, if backward
1272
 
 *                 is 0, then it will be >=
1273
 
 *              if AVSEEK_FLAG_ANY seek to any frame, only keyframes otherwise
1274
 
 * @return < 0 if no such timestamp could be found
1275
 
 */
1276
 
int av_index_search_timestamp(AVStream *st, int64_t timestamp, int flags);
1277
 
 
1278
 
/**
1279
 
 * Add an index entry into a sorted list. Update the entry if the list
1280
 
 * already contains it.
1281
 
 *
1282
 
 * @param timestamp timestamp in the time base of the given stream
1283
 
 */
1284
 
int av_add_index_entry(AVStream *st, int64_t pos, int64_t timestamp,
1285
 
                       int size, int distance, int flags);
1286
 
 
1287
 
/**
1288
 
 * Perform a binary search using av_index_search_timestamp() and
1289
 
 * AVInputFormat.read_timestamp().
1290
 
 * This is not supposed to be called directly by a user application,
1291
 
 * but by demuxers.
1292
 
 * @param target_ts target timestamp in the time base of the given stream
1293
 
 * @param stream_index stream number
1294
 
 */
 
1622
#if FF_API_SEEK_PUBLIC
 
1623
attribute_deprecated
1295
1624
int av_seek_frame_binary(AVFormatContext *s, int stream_index,
1296
1625
                         int64_t target_ts, int flags);
1297
 
 
1298
 
/**
1299
 
 * Update cur_dts of all streams based on the given timestamp and AVStream.
1300
 
 *
1301
 
 * Stream ref_st unchanged, others set cur_dts in their native time base.
1302
 
 * Only needed for timestamp wrapping or if (dts not set and pts!=dts).
1303
 
 * @param timestamp new dts expressed in time_base of param ref_st
1304
 
 * @param ref_st reference stream giving time_base of param timestamp
1305
 
 */
 
1626
attribute_deprecated
1306
1627
void av_update_cur_dts(AVFormatContext *s, AVStream *ref_st, int64_t timestamp);
1307
 
 
1308
 
/**
1309
 
 * Perform a binary search using read_timestamp().
1310
 
 * This is not supposed to be called directly by a user application,
1311
 
 * but by demuxers.
1312
 
 * @param target_ts target timestamp in the time base of the given stream
1313
 
 * @param stream_index stream number
1314
 
 */
 
1628
attribute_deprecated
1315
1629
int64_t av_gen_search(AVFormatContext *s, int stream_index,
1316
1630
                      int64_t target_ts, int64_t pos_min,
1317
1631
                      int64_t pos_max, int64_t pos_limit,
1318
1632
                      int64_t ts_min, int64_t ts_max,
1319
1633
                      int flags, int64_t *ts_ret,
1320
1634
                      int64_t (*read_timestamp)(struct AVFormatContext *, int , int64_t *, int64_t ));
 
1635
#endif
1321
1636
 
1322
 
/**
1323
 
 * media file output
1324
 
 */
1325
1637
#if FF_API_FORMAT_PARAMETERS
1326
1638
/**
1327
1639
 * @deprecated pass the options to avformat_write_header directly.
1330
1642
#endif
1331
1643
 
1332
1644
/**
1333
 
 * Split a URL string into components.
1334
 
 *
1335
 
 * The pointers to buffers for storing individual components may be null,
1336
 
 * in order to ignore that component. Buffers for components not found are
1337
 
 * set to empty strings. If the port is not found, it is set to a negative
1338
 
 * value.
1339
 
 *
1340
 
 * @param proto the buffer for the protocol
1341
 
 * @param proto_size the size of the proto buffer
1342
 
 * @param authorization the buffer for the authorization
1343
 
 * @param authorization_size the size of the authorization buffer
1344
 
 * @param hostname the buffer for the host name
1345
 
 * @param hostname_size the size of the hostname buffer
1346
 
 * @param port_ptr a pointer to store the port number in
1347
 
 * @param path the buffer for the path
1348
 
 * @param path_size the size of the path buffer
1349
 
 * @param url the URL to split
 
1645
 * @addtogroup lavf_encoding
 
1646
 * @{
1350
1647
 */
1351
 
void av_url_split(char *proto,         int proto_size,
1352
 
                  char *authorization, int authorization_size,
1353
 
                  char *hostname,      int hostname_size,
1354
 
                  int *port_ptr,
1355
 
                  char *path,          int path_size,
1356
 
                  const char *url);
1357
 
 
1358
1648
/**
1359
1649
 * Allocate the stream private data and write the stream header to
1360
1650
 * an output media file.
1447
1737
 */
1448
1738
int av_write_trailer(AVFormatContext *s);
1449
1739
 
 
1740
/**
 
1741
 * Return the output format in the list of registered output formats
 
1742
 * which best matches the provided parameters, or return NULL if
 
1743
 * there is no match.
 
1744
 *
 
1745
 * @param short_name if non-NULL checks if short_name matches with the
 
1746
 * names of the registered formats
 
1747
 * @param filename if non-NULL checks if filename terminates with the
 
1748
 * extensions of the registered formats
 
1749
 * @param mime_type if non-NULL checks if mime_type matches with the
 
1750
 * MIME type of the registered formats
 
1751
 */
 
1752
AVOutputFormat *av_guess_format(const char *short_name,
 
1753
                                const char *filename,
 
1754
                                const char *mime_type);
 
1755
 
 
1756
/**
 
1757
 * Guess the codec ID based upon muxer and filename.
 
1758
 */
 
1759
enum CodecID av_guess_codec(AVOutputFormat *fmt, const char *short_name,
 
1760
                            const char *filename, const char *mime_type,
 
1761
                            enum AVMediaType type);
 
1762
 
 
1763
/**
 
1764
 * @}
 
1765
 */
 
1766
 
 
1767
 
 
1768
/**
 
1769
 * @defgroup lavf_misc Utility functions
 
1770
 * @ingroup libavf
 
1771
 * @{
 
1772
 *
 
1773
 * Miscelaneous utility functions related to both muxing and demuxing
 
1774
 * (or neither).
 
1775
 */
 
1776
 
 
1777
/**
 
1778
 * Send a nice hexadecimal dump of a buffer to the specified file stream.
 
1779
 *
 
1780
 * @param f The file stream pointer where the dump should be sent to.
 
1781
 * @param buf buffer
 
1782
 * @param size buffer size
 
1783
 *
 
1784
 * @see av_hex_dump_log, av_pkt_dump2, av_pkt_dump_log2
 
1785
 */
 
1786
void av_hex_dump(FILE *f, uint8_t *buf, int size);
 
1787
 
 
1788
/**
 
1789
 * Send a nice hexadecimal dump of a buffer to the log.
 
1790
 *
 
1791
 * @param avcl A pointer to an arbitrary struct of which the first field is a
 
1792
 * pointer to an AVClass struct.
 
1793
 * @param level The importance level of the message, lower values signifying
 
1794
 * higher importance.
 
1795
 * @param buf buffer
 
1796
 * @param size buffer size
 
1797
 *
 
1798
 * @see av_hex_dump, av_pkt_dump2, av_pkt_dump_log2
 
1799
 */
 
1800
void av_hex_dump_log(void *avcl, int level, uint8_t *buf, int size);
 
1801
 
 
1802
/**
 
1803
 * Send a nice dump of a packet to the specified file stream.
 
1804
 *
 
1805
 * @param f The file stream pointer where the dump should be sent to.
 
1806
 * @param pkt packet to dump
 
1807
 * @param dump_payload True if the payload must be displayed, too.
 
1808
 * @param st AVStream that the packet belongs to
 
1809
 */
 
1810
void av_pkt_dump2(FILE *f, AVPacket *pkt, int dump_payload, AVStream *st);
 
1811
 
 
1812
 
 
1813
/**
 
1814
 * Send a nice dump of a packet to the log.
 
1815
 *
 
1816
 * @param avcl A pointer to an arbitrary struct of which the first field is a
 
1817
 * pointer to an AVClass struct.
 
1818
 * @param level The importance level of the message, lower values signifying
 
1819
 * higher importance.
 
1820
 * @param pkt packet to dump
 
1821
 * @param dump_payload True if the payload must be displayed, too.
 
1822
 * @param st AVStream that the packet belongs to
 
1823
 */
 
1824
void av_pkt_dump_log2(void *avcl, int level, AVPacket *pkt, int dump_payload,
 
1825
                      AVStream *st);
 
1826
 
 
1827
/**
 
1828
 * Get the CodecID for the given codec tag tag.
 
1829
 * If no codec id is found returns CODEC_ID_NONE.
 
1830
 *
 
1831
 * @param tags list of supported codec_id-codec_tag pairs, as stored
 
1832
 * in AVInputFormat.codec_tag and AVOutputFormat.codec_tag
 
1833
 */
 
1834
enum CodecID av_codec_get_id(const struct AVCodecTag * const *tags, unsigned int tag);
 
1835
 
 
1836
/**
 
1837
 * Get the codec tag for the given codec id id.
 
1838
 * If no codec tag is found returns 0.
 
1839
 *
 
1840
 * @param tags list of supported codec_id-codec_tag pairs, as stored
 
1841
 * in AVInputFormat.codec_tag and AVOutputFormat.codec_tag
 
1842
 */
 
1843
unsigned int av_codec_get_tag(const struct AVCodecTag * const *tags, enum CodecID id);
 
1844
 
 
1845
int av_find_default_stream_index(AVFormatContext *s);
 
1846
 
 
1847
/**
 
1848
 * Get the index for a specific timestamp.
 
1849
 * @param flags if AVSEEK_FLAG_BACKWARD then the returned index will correspond
 
1850
 *                 to the timestamp which is <= the requested one, if backward
 
1851
 *                 is 0, then it will be >=
 
1852
 *              if AVSEEK_FLAG_ANY seek to any frame, only keyframes otherwise
 
1853
 * @return < 0 if no such timestamp could be found
 
1854
 */
 
1855
int av_index_search_timestamp(AVStream *st, int64_t timestamp, int flags);
 
1856
 
 
1857
/**
 
1858
 * Add an index entry into a sorted list. Update the entry if the list
 
1859
 * already contains it.
 
1860
 *
 
1861
 * @param timestamp timestamp in the time base of the given stream
 
1862
 */
 
1863
int av_add_index_entry(AVStream *st, int64_t pos, int64_t timestamp,
 
1864
                       int size, int distance, int flags);
 
1865
 
 
1866
 
 
1867
/**
 
1868
 * Split a URL string into components.
 
1869
 *
 
1870
 * The pointers to buffers for storing individual components may be null,
 
1871
 * in order to ignore that component. Buffers for components not found are
 
1872
 * set to empty strings. If the port is not found, it is set to a negative
 
1873
 * value.
 
1874
 *
 
1875
 * @param proto the buffer for the protocol
 
1876
 * @param proto_size the size of the proto buffer
 
1877
 * @param authorization the buffer for the authorization
 
1878
 * @param authorization_size the size of the authorization buffer
 
1879
 * @param hostname the buffer for the host name
 
1880
 * @param hostname_size the size of the hostname buffer
 
1881
 * @param port_ptr a pointer to store the port number in
 
1882
 * @param path the buffer for the path
 
1883
 * @param path_size the size of the path buffer
 
1884
 * @param url the URL to split
 
1885
 */
 
1886
void av_url_split(char *proto,         int proto_size,
 
1887
                  char *authorization, int authorization_size,
 
1888
                  char *hostname,      int hostname_size,
 
1889
                  int *port_ptr,
 
1890
                  char *path,          int path_size,
 
1891
                  const char *url);
 
1892
 
1450
1893
#if FF_API_DUMP_FORMAT
1451
1894
attribute_deprecated void dump_format(AVFormatContext *ic,
1452
1895
                                      int index,
1534
1977
 */
1535
1978
int av_match_ext(const char *filename, const char *extensions);
1536
1979
 
 
1980
/**
 
1981
 * Test if the given container can store a codec.
 
1982
 *
 
1983
 * @param std_compliance standards compliance level, one of FF_COMPLIANCE_*
 
1984
 *
 
1985
 * @return 1 if codec with ID codec_id can be stored in ofmt, 0 if it cannot.
 
1986
 *         A negative number if this information is not available.
 
1987
 */
 
1988
int avformat_query_codec(AVOutputFormat *ofmt, enum CodecID codec_id, int std_compliance);
 
1989
 
 
1990
/**
 
1991
 * @}
 
1992
 */
 
1993
 
1537
1994
#endif /* AVFORMAT_AVFORMAT_H */