summaryrefslogtreecommitdiff
path: root/libavformat
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2011-12-11 00:40:09 +0100
committerMichael Niedermayer <michaelni@gmx.at>2011-12-11 01:05:33 +0100
commit964912aba56a29acf25c9e216255ea44190f419a (patch)
treefa82f5555f1604d36380b186f1f89403d0b9c388 /libavformat
parentcdba9b617f1a77f035416096f3ea91158ec5307b (diff)
parent2e87b4c51152e0241cae7f655d53920029a0e632 (diff)
Merge remote-tracking branch 'qatar/master'
* qatar/master: (21 commits) Warn about avserver being broken. avconv: drop code for special handling of avserver streams. rawdec: don't set codec timebase. lavf doxy: add muxing stuff to lavf_encoding group lavf doxy: add demuxing stuff to lavf_decoding group lavf doxy: expand/reword metadata API doxy. lavf doxy: add installed headers to groups. lavf doxy: add avio groups into the lavf_io group. lavf doxy: rename lavf I/O group to lavf_io. lavf doxy: add metadata docs to the main lavf group ttadec: check channel count as read from extradata. Add CLJR encoding and decoding regression tests cljr: remove unused code flacdec: Support for tracks in cuesheet metadata block ptx: fix inverted check for sufficient data flac muxer: fix writing of file header and STREAMINFO header from extradata ptx: emit a warning on insufficient picture data utvideo: add fate tests covering all codec variants doc: update to refer to avconv doc: remove some stale entries from the faq ... Conflicts: Changelog avconv.c doc/avconv.texi doc/faq.texi doc/ffplay.texi doc/ffprobe.texi doc/ffserver.texi libavcodec/avcodec.h libavcodec/cljr.c libavformat/avformat.h libavformat/riff.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavformat')
-rw-r--r--libavformat/avformat.h124
-rw-r--r--libavformat/avio.h4
-rw-r--r--libavformat/flacdec.c27
-rw-r--r--libavformat/flacenc_header.c10
-rw-r--r--libavformat/riff.c1
-rw-r--r--libavformat/version.h6
6 files changed, 122 insertions, 50 deletions
diff --git a/libavformat/avformat.h b/libavformat/avformat.h
index 64252029d3..1f3506d158 100644
--- a/libavformat/avformat.h
+++ b/libavformat/avformat.h
@@ -22,6 +22,12 @@
#define AVFORMAT_AVFORMAT_H
/**
+ * @file
+ * @ingroup libavf
+ * Main libavformat public API header
+ */
+
+/**
* @defgroup libavf I/O and Muxing/Demuxing Library
* @{
*
@@ -33,7 +39,7 @@
* @{
* @}
*
- * @defgroup lavf_proto I/O Read/Write
+ * @defgroup lavf_io I/O Read/Write
* @{
* @}
*
@@ -86,10 +92,17 @@ struct AVFormatContext;
/**
* @defgroup metadata_api Public Metadata API
* @{
+ * @ingroup libavf
* The metadata API allows libavformat to export metadata tags to a client
- * application using a sequence of key/value pairs. Like all strings in FFmpeg,
- * metadata must be stored as UTF-8 encoded Unicode. Note that metadata
+ * application when demuxing. Conversely it allows a client application to
+ * set metadata when muxing.
+ *
+ * Metadata is exported or set as pairs of key/value strings in the 'metadata'
+ * fields of the AVFormatContext, AVStream, AVChapter and AVProgram structs
+ * using the @ref lavu_dict "AVDictionary" API. Like all strings in FFmpeg,
+ * metadata is assumed to be UTF-8 encoded Unicode. Note that metadata
* exported by demuxers isn't checked to be valid UTF-8 in most cases.
+ *
* Important concepts to keep in mind:
* - Keys are unique; there can never be 2 tags with the same key. This is
* also meant semantically, i.e., a demuxer should not knowingly produce
@@ -313,6 +326,10 @@ typedef struct AVFormatParameters {
increasing timestamps, but they must
still be monotonic */
+/**
+ * @addtogroup lavf_encoding
+ * @{
+ */
typedef struct AVOutputFormat {
const char *name;
/**
@@ -373,7 +390,14 @@ typedef struct AVOutputFormat {
/* private fields */
struct AVOutputFormat *next;
} AVOutputFormat;
+/**
+ * @}
+ */
+/**
+ * @addtogroup lavf_decoding
+ * @{
+ */
typedef struct AVInputFormat {
/**
* A comma separated list of short names for the format. New names
@@ -495,6 +519,9 @@ typedef struct AVInputFormat {
/* private fields */
struct AVInputFormat *next;
} AVInputFormat;
+/**
+ * @}
+ */
enum AVStreamParseType {
AVSTREAM_PARSE_NONE,
@@ -1281,7 +1308,46 @@ enum CodecID av_codec_get_id(const struct AVCodecTag * const *tags, unsigned int
*/
unsigned int av_codec_get_tag(const struct AVCodecTag * const *tags, enum CodecID id);
-/* media file input */
+/**
+ * Allocate an AVFormatContext.
+ * avformat_free_context() can be used to free the context and everything
+ * allocated by the framework within it.
+ */
+AVFormatContext *avformat_alloc_context(void);
+
+#if FF_API_ALLOC_OUTPUT_CONTEXT
+/**
+ * @deprecated deprecated in favor of avformat_alloc_output_context2()
+ */
+attribute_deprecated
+AVFormatContext *avformat_alloc_output_context(const char *format,
+ AVOutputFormat *oformat,
+ const char *filename);
+#endif
+
+/**
+ * Allocate an AVFormatContext for an output format.
+ * avformat_free_context() can be used to free the context and
+ * everything allocated by the framework within it.
+ *
+ * @param *ctx is set to the created format context, or to NULL in
+ * case of failure
+ * @param oformat format to use for allocating the context, if NULL
+ * format_name and filename are used instead
+ * @param format_name the name of output format to use for allocating the
+ * context, if NULL filename is used instead
+ * @param filename the name of the filename to use for allocating the
+ * context, may be NULL
+ * @return >= 0 in case of success, a negative AVERROR code in case of
+ * failure
+ */
+int avformat_alloc_output_context2(AVFormatContext **ctx, AVOutputFormat *oformat,
+ const char *format_name, const char *filename);
+
+/**
+ * @addtogroup lavf_decoding
+ * @{
+ */
/**
* Find AVInputFormat based on the short name of the input format.
@@ -1390,42 +1456,6 @@ int avformat_open_input(AVFormatContext **ps, const char *filename, AVInputForma
int av_demuxer_open(AVFormatContext *ic, AVFormatParameters *ap);
-/**
- * Allocate an AVFormatContext.
- * avformat_free_context() can be used to free the context and everything
- * allocated by the framework within it.
- */
-AVFormatContext *avformat_alloc_context(void);
-
-#if FF_API_ALLOC_OUTPUT_CONTEXT
-/**
- * @deprecated deprecated in favor of avformat_alloc_output_context2()
- */
-attribute_deprecated
-AVFormatContext *avformat_alloc_output_context(const char *format,
- AVOutputFormat *oformat,
- const char *filename);
-#endif
-
-/**
- * Allocate an AVFormatContext for an output format.
- * avformat_free_context() can be used to free the context and
- * everything allocated by the framework within it.
- *
- * @param *ctx is set to the created format context, or to NULL in
- * case of failure
- * @param oformat format to use for allocating the context, if NULL
- * format_name and filename are used instead
- * @param format_name the name of output format to use for allocating the
- * context, if NULL filename is used instead
- * @param filename the name of the filename to use for allocating the
- * context, may be NULL
- * @return >= 0 in case of success, a negative AVERROR code in case of
- * failure
- */
-int avformat_alloc_output_context2(AVFormatContext **ctx, AVOutputFormat *oformat,
- const char *format_name, const char *filename);
-
#if FF_API_FORMAT_PARAMETERS
/**
* Read packets of a media file to get stream information. This
@@ -1617,6 +1647,9 @@ void av_close_input_stream(AVFormatContext *s);
* @param s media file handle
*/
void av_close_input_file(AVFormatContext *s);
+/**
+ * @}
+ */
/**
* Free an AVFormatContext and all its streams.
@@ -1708,9 +1741,6 @@ int64_t av_gen_search(AVFormatContext *s, int stream_index,
int64_t (*read_timestamp)(struct AVFormatContext *, int , int64_t *, int64_t ));
#endif
-/**
- * media file output
- */
#if FF_API_FORMAT_PARAMETERS
/**
* @deprecated pass the options to avformat_write_header directly.
@@ -1743,7 +1773,10 @@ void av_url_split(char *proto, int proto_size,
int *port_ptr,
char *path, int path_size,
const char *url);
-
+/**
+ * @addtogroup lavf_encoding
+ * @{
+ */
/**
* Allocate the stream private data and write the stream header to
* an output media file.
@@ -1835,6 +1868,9 @@ int av_interleave_packet_per_dts(AVFormatContext *s, AVPacket *out,
* @return 0 if OK, AVERROR_xxx on error
*/
int av_write_trailer(AVFormatContext *s);
+/**
+ * @}
+ */
/**
* Get timing information for the data currently output.
diff --git a/libavformat/avio.h b/libavformat/avio.h
index 88fe1577ff..7cf14f9f8c 100644
--- a/libavformat/avio.h
+++ b/libavformat/avio.h
@@ -22,6 +22,7 @@
/**
* @file
+ * @ingroup lavf_io
* Buffered I/O operations
*/
@@ -211,6 +212,7 @@ extern URLInterruptCB *url_interrupt_cb;
* @defgroup old_url_funcs Old url_* functions
* The following functions are deprecated. Use the buffered API based on #AVIOContext instead.
* @{
+ * @ingroup lavf_io
*/
attribute_deprecated int url_open_protocol (URLContext **puc, struct URLProtocol *up,
const char *url, int flags);
@@ -271,6 +273,7 @@ attribute_deprecated AVIOContext *av_alloc_put_byte(
* @defgroup old_avio_funcs Old put_/get_*() functions
* The following functions are deprecated. Use the "avio_"-prefixed functions instead.
* @{
+ * @ingroup lavf_io
*/
attribute_deprecated int get_buffer(AVIOContext *s, unsigned char *buf, int size);
attribute_deprecated int get_partial_buffer(AVIOContext *s, unsigned char *buf, int size);
@@ -308,6 +311,7 @@ attribute_deprecated int64_t av_url_read_fseek (AVIOContext *h, int stream_in
* @defgroup old_url_f_funcs Old url_f* functions
* The following functions are deprecated, use the "avio_"-prefixed functions instead.
* @{
+ * @ingroup lavf_io
*/
attribute_deprecated int url_fopen( AVIOContext **s, const char *url, int flags);
attribute_deprecated int url_fclose(AVIOContext *s);
diff --git a/libavformat/flacdec.c b/libavformat/flacdec.c
index 8f855bb02d..163d2fac61 100644
--- a/libavformat/flacdec.c
+++ b/libavformat/flacdec.c
@@ -25,6 +25,7 @@
#include "rawdec.h"
#include "oggdec.h"
#include "vorbiscomment.h"
+#include "libavcodec/bytestream.h"
static int flac_read_header(AVFormatContext *s,
AVFormatParameters *ap)
@@ -54,6 +55,7 @@ static int flac_read_header(AVFormatContext *s,
switch (metadata_type) {
/* allocate and read metadata block for supported types */
case FLAC_METADATA_TYPE_STREAMINFO:
+ case FLAC_METADATA_TYPE_CUESHEET:
case FLAC_METADATA_TYPE_VORBIS_COMMENT:
buffer = av_mallocz(metadata_size + FF_INPUT_BUFFER_PADDING_SIZE);
if (!buffer) {
@@ -96,6 +98,31 @@ static int flac_read_header(AVFormatContext *s,
if (si.samples > 0)
st->duration = si.samples;
}
+ } else if (metadata_type == FLAC_METADATA_TYPE_CUESHEET) {
+ uint8_t isrc[13];
+ uint64_t start;
+ const uint8_t *offset;
+ int i, j, chapters, track, ti;
+ if (metadata_size < 431)
+ return AVERROR_INVALIDDATA;
+ offset = buffer + 395;
+ chapters = bytestream_get_byte(&offset) - 1;
+ if (chapters <= 0)
+ return AVERROR_INVALIDDATA;
+ for (i = 0; i < chapters; i++) {
+ if (offset + 36 - buffer > metadata_size)
+ return AVERROR_INVALIDDATA;
+ start = bytestream_get_be64(&offset);
+ track = bytestream_get_byte(&offset);
+ bytestream_get_buffer(&offset, isrc, 12);
+ isrc[12] = 0;
+ offset += 14;
+ ti = bytestream_get_byte(&offset);
+ if (ti <= 0) return AVERROR_INVALIDDATA;
+ for (j = 0; j < ti; j++)
+ offset += 12;
+ avpriv_new_chapter(s, track, st->time_base, start, AV_NOPTS_VALUE, isrc);
+ }
} else {
/* STREAMINFO must be the first block */
if (!found_streaminfo) {
diff --git a/libavformat/flacenc_header.c b/libavformat/flacenc_header.c
index cfbdc890af..e16c14bf53 100644
--- a/libavformat/flacenc_header.c
+++ b/libavformat/flacenc_header.c
@@ -37,13 +37,11 @@ int ff_flac_write_header(AVIOContext *pb, AVCodecContext *codec,
if (!avpriv_flac_is_extradata_valid(codec, &format, &streaminfo))
return -1;
- /* write "fLaC" stream marker and first metadata block header if needed */
- if (format == FLAC_EXTRADATA_FORMAT_STREAMINFO) {
- avio_write(pb, header, 8);
- }
+ /* write "fLaC" stream marker and first metadata block header */
+ avio_write(pb, header, 8);
- /* write STREAMINFO or full header */
- avio_write(pb, codec->extradata, codec->extradata_size);
+ /* write STREAMINFO */
+ avio_write(pb, streaminfo, FLAC_STREAMINFO_SIZE);
return 0;
}
diff --git a/libavformat/riff.c b/libavformat/riff.c
index 964085031c..3cc3c354c0 100644
--- a/libavformat/riff.c
+++ b/libavformat/riff.c
@@ -287,6 +287,7 @@ const AVCodecTag ff_codec_bmp_tags[] = {
{ CODEC_ID_UTVIDEO, MKTAG('U', 'L', 'Y', '2') },
{ CODEC_ID_VBLE, MKTAG('V', 'B', 'L', 'E') },
{ CODEC_ID_ESCAPE130, MKTAG('E', '1', '3', '0') },
+ { CODEC_ID_DXTORY, MKTAG('x', 't', 'o', 'r') },
{ CODEC_ID_NONE, 0 }
};
diff --git a/libavformat/version.h b/libavformat/version.h
index 844cd64464..0fb0b18197 100644
--- a/libavformat/version.h
+++ b/libavformat/version.h
@@ -21,6 +21,12 @@
#ifndef AVFORMAT_VERSION_H
#define AVFORMAT_VERSION_H
+/**
+ * @file
+ * @ingroup libavf
+ * Libavformat version macros
+ */
+
#include "libavutil/avutil.h"
#define LIBAVFORMAT_VERSION_MAJOR 53