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>
pull/2/head
Michael Niedermayer 13 years ago
commit 964912aba5
  1. 1
      Changelog
  2. 46
      avconv.c
  3. 3
      doc/avconv.texi
  4. 144
      doc/faq.texi
  5. 1
      doc/ffserver.texi
  6. 1
      doc/general.texi
  7. 1
      libavcodec/Makefile
  8. 1
      libavcodec/allcodecs.c
  9. 1
      libavcodec/avcodec.h
  10. 2
      libavcodec/cljr.c
  11. 109
      libavcodec/dxtory.c
  12. 9
      libavcodec/ptx.c
  13. 5
      libavcodec/tta.c
  14. 124
      libavformat/avformat.h
  15. 4
      libavformat/avio.h
  16. 27
      libavformat/flacdec.c
  17. 10
      libavformat/flacenc_header.c
  18. 1
      libavformat/riff.c
  19. 6
      libavformat/version.h
  20. 5
      tests/codec-regression.sh
  21. 24
      tests/fate2.mak
  22. 4
      tests/ref/fate/utvideo_rgb_left
  23. 5
      tests/ref/fate/utvideo_rgb_median
  24. 5
      tests/ref/fate/utvideo_rgba_left
  25. 5
      tests/ref/fate/utvideo_rgba_median
  26. 7
      tests/ref/fate/utvideo_yuv420_left
  27. 4
      tests/ref/fate/utvideo_yuv420_median
  28. 4
      tests/ref/fate/utvideo_yuv422_left
  29. 4
      tests/ref/fate/utvideo_yuv422_median
  30. 4
      tests/ref/vsynth1/cljr
  31. 4
      tests/ref/vsynth2/cljr

@ -132,6 +132,7 @@ easier to use. The changes are:
- PCM format support in OMA demuxer
- CLJR encoder
- new option: -report
- Dxtory capture format decoder
version 0.8:

@ -3635,41 +3635,6 @@ static int copy_chapters(InputFile *ifile, OutputFile *ofile, int copy_metadata)
return 0;
}
static int read_ffserver_streams(OptionsContext *o, AVFormatContext *s, const char *filename)
{
int i, err;
AVFormatContext *ic = avformat_alloc_context();
ic->interrupt_callback = int_cb;
err = avformat_open_input(&ic, filename, NULL, NULL);
if (err < 0)
return err;
/* copy stream format */
for(i=0;i<ic->nb_streams;i++) {
AVStream *st;
OutputStream *ost;
AVCodec *codec;
codec = avcodec_find_encoder(ic->streams[i]->codec->codec_id);
ost = new_output_stream(o, s, codec->type);
st = ost->st;
// FIXME: a more elegant solution is needed
memcpy(st, ic->streams[i], sizeof(AVStream));
st->info = av_malloc(sizeof(*st->info));
memcpy(st->info, ic->streams[i]->info, sizeof(*st->info));
avcodec_copy_context(st->codec, ic->streams[i]->codec);
if (st->codec->codec_type == AVMEDIA_TYPE_AUDIO && !ost->stream_copy)
choose_sample_fmt(st, codec);
else if (st->codec->codec_type == AVMEDIA_TYPE_VIDEO && !ost->stream_copy)
choose_pixel_fmt(st, codec);
}
av_close_input_file(ic);
return 0;
}
static void opt_output_file(void *optctx, const char *filename)
{
OptionsContext *o = optctx;
@ -3691,16 +3656,7 @@ static void opt_output_file(void *optctx, const char *filename)
file_oformat= oc->oformat;
oc->interrupt_callback = int_cb;
if (!strcmp(file_oformat->name, "ffm") &&
av_strstart(filename, "http:", NULL)) {
/* special case for files sent to ffserver: we get the stream
parameters from ffserver */
int err = read_ffserver_streams(o, oc, filename);
if (err < 0) {
print_error(filename, err);
exit_program(1);
}
} else if (!o->nb_stream_maps) {
if (!o->nb_stream_maps) {
/* pick the "best" stream of each type */
#define NEW_STREAM(type, index)\
if (index >= 0) {\

@ -259,7 +259,7 @@ Set the number of video frames to record. This is an alias for @code{-frames:v}.
@item -r[:@var{stream_specifier}] @var{fps} (@emph{input/output,per-stream})
Set frame rate (Hz value, fraction or abbreviation), (default = 25).
@item -s[:@var{stream_specifier}] @var{size} (@emph{input/output,per-stream})
Set frame size. The format is @samp{wxh} (ffserver default = 160x128, avconv default = same as source).
Set frame size. The format is @samp{wxh} (default - same as source).
The following abbreviations are recognized:
@table @samp
@item sqcif
@ -1029,6 +1029,7 @@ the input file in reverse order.
@c man begin SEEALSO
ffplay(1), ffprobe(1), ffserver(1) and the FFmpeg HTML documentation
@c man end
@c man begin AUTHORS

@ -11,22 +11,6 @@
@chapter General Questions
@section When will the next FFmpeg version be released? / Why are FFmpeg releases so few and far between?
Like most open source projects FFmpeg suffers from a certain lack of
manpower. For this reason the developers have to prioritize the work
they do and putting out releases is not at the top of the list, fixing
bugs and reviewing patches takes precedence. Please don't complain or
request more timely and/or frequent releases unless you are willing to
help out creating them.
@section I have a problem with an old version of FFmpeg; where should I report it?
Nowhere. We do not support old FFmpeg versions in any way, we simply lack
the time, motivation and manpower to do so. If you have a problem with an
old version of FFmpeg, upgrade to the latest git snapshot. If you
still experience the problem, then you can report it according to the
guidelines in @url{http://ffmpeg.org/bugreports.html}.
@section Why doesn't FFmpeg support feature [xyz]?
Because no one has taken on that task yet. FFmpeg development is
@ -40,30 +24,6 @@ No. Windows DLLs are not portable, bloated and often slow.
Moreover FFmpeg strives to support all codecs natively.
A DLL loader is not conducive to that goal.
@section My bug report/mail to ffmpeg-devel/user has not received any replies.
Likely reasons
@itemize
@item We are busy and haven't had time yet to read your report or
investigate the issue.
@item You didn't follow @url{http://ffmpeg.org/bugreports.html}.
@item You didn't use git master.
@item You reported a segmentation fault without gdb output.
@item You describe a problem but not how to reproduce it.
@item It's unclear if you use ffmpeg as command line tool or use
libav* from another application.
@item You speak about a video having problems on playback but
not what you use to play it.
@item We have no faint clue what you are talking about besides
that it is related to FFmpeg.
@end itemize
@section Is there a forum for FFmpeg? I do not like mailing lists.
You may view our mailing lists with a more forum-alike look here:
@url{http://dir.gmane.org/gmane.comp.video.ffmpeg.user},
but, if you post, please remember that our mailing list rules still apply there.
@section I cannot read this file although this format seems to be supported by ffmpeg.
Even if ffmpeg can read the container format, it may not support all its
@ -175,15 +135,15 @@ The @file{movie.mpg} used as input will be converted to
Instead of relying on file format self-recognition, you may also use
@table @option
@item -vcodec ppm
@item -vcodec png
@item -vcodec mjpeg
@item -c:v ppm
@item -c:v png
@item -c:v mjpeg
@end table
to force the encoding.
Applying that to the previous example:
@example
ffmpeg -i movie.mpg -f image2 -vcodec mjpeg menu%d.jpg
ffmpeg -i movie.mpg -f image2 -c:v mjpeg menu%d.jpg
@end example
Beware that there is no "jpeg" codec. Use "mjpeg" instead.
@ -205,56 +165,18 @@ Try '-f image2 test%d.jpg'.
@section Why can I not change the frame rate?
Some codecs, like MPEG-1/2, only allow a small number of fixed frame rates.
Choose a different codec with the -vcodec command line option.
Choose a different codec with the -c:v command line option.
@section How do I encode Xvid or DivX video with ffmpeg?
Both Xvid and DivX (version 4+) are implementations of the ISO MPEG-4
standard (note that there are many other coding formats that use this
same standard). Thus, use '-vcodec mpeg4' to encode in these formats. The
same standard). Thus, use '-c:v mpeg4' to encode in these formats. The
default fourcc stored in an MPEG-4-coded file will be 'FMP4'. If you want
a different fourcc, use the '-vtag' option. E.g., '-vtag xvid' will
force the fourcc 'xvid' to be stored as the video fourcc rather than the
default.
@section How do I encode videos which play on the iPod?
@table @option
@item needed stuff
-acodec libfaac -vcodec mpeg4 width<=320 height<=240
@item working stuff
mv4, title
@item non-working stuff
B-frames
@item example command line
ffmpeg -i input -acodec libfaac -ab 128k -vcodec mpeg4 -b 1200k -mbd 2 -flags +mv4+aic -trellis 2 -cmp 2 -subcmp 2 -s 320x180 -metadata title=X output.mp4
@end table
@section How do I encode videos which play on the PSP?
@table @option
@item needed stuff
-acodec libfaac -vcodec mpeg4 width*height<=76800 width%16=0 height%16=0 -ar 24000 -r 30000/1001 or 15000/1001 -f psp
@item working stuff
mv4, title
@item non-working stuff
B-frames
@item example command line
ffmpeg -i input -acodec libfaac -ab 128k -vcodec mpeg4 -b 1200k -ar 24000 -mbd 2 -flags +mv4+aic -trellis 2 -cmp 2 -subcmp 2 -s 368x192 -r 30000/1001 -metadata title=X -f psp output.mp4
@item needed stuff for H.264
-acodec libfaac -vcodec libx264 width*height<=76800 width%16=0? height%16=0? -ar 48000 -coder 1 -r 30000/1001 or 15000/1001 -f psp
@item working stuff for H.264
title, loop filter
@item non-working stuff for H.264
CAVLC
@item example command line
ffmpeg -i input -acodec libfaac -ab 128k -vcodec libx264 -b 1200k -ar 48000 -mbd 2 -coder 1 -cmp 2 -subcmp 2 -s 368x192 -r 30000/1001 -metadata title=X -f psp -flags loop -trellis 2 -partitions parti4x4+parti8x8+partp4x4+partp8x8+partb8x8 output.mp4
@item higher resolution for newer PSP firmwares, width<=480, height<=272
-vcodec libx264 -level 21 -coder 1 -f psp
@item example command line
ffmpeg -i input -acodec libfaac -ab 128k -ac 2 -ar 48000 -vcodec libx264 -level 21 -b 640k -coder 1 -f psp -flags +loop -trellis 2 -partitions +parti4x4+parti8x8+partp4x4+partp8x8+partb8x8 -g 250 -s 480x272 output.mp4
@end table
@section Which are good parameters for encoding high quality MPEG-4?
'-mbd rd -flags +mv4+aic -trellis 2 -cmp 2 -subcmp 2 -g 300 -pass 1/2',
@ -300,13 +222,13 @@ equally humble @code{copy} under Windows), and finally transcoding back to your
format of choice.
@example
ffmpeg -i input1.avi -sameq intermediate1.mpg
ffmpeg -i input2.avi -sameq intermediate2.mpg
ffmpeg -i input1.avi -same_quant intermediate1.mpg
ffmpeg -i input2.avi -same_quant intermediate2.mpg
cat intermediate1.mpg intermediate2.mpg > intermediate_all.mpg
ffmpeg -i intermediate_all.mpg -sameq output.avi
ffmpeg -i intermediate_all.mpg -same_quant output.avi
@end example
Notice that you should either use @code{-sameq} or set a reasonably high
Notice that you should either use @code{-same_quant} or set a reasonably high
bitrate for your intermediate and output files, if you want to preserve
video quality.
@ -316,10 +238,10 @@ of named pipes, should your platform support it:
@example
mkfifo intermediate1.mpg
mkfifo intermediate2.mpg
ffmpeg -i input1.avi -sameq -y intermediate1.mpg < /dev/null &
ffmpeg -i input2.avi -sameq -y intermediate2.mpg < /dev/null &
ffmpeg -i input1.avi -same_quant -y intermediate1.mpg < /dev/null &
ffmpeg -i input2.avi -same_quant -y intermediate2.mpg < /dev/null &
cat intermediate1.mpg intermediate2.mpg |\
ffmpeg -f mpeg -i - -sameq -vcodec mpeg4 -acodec libmp3lame output.avi
ffmpeg -f mpeg -i - -same_quant -c:v mpeg4 -acodec libmp3lame output.avi
@end example
Similarly, the yuv4mpegpipe format, and the raw video, raw audio codecs also
@ -346,28 +268,10 @@ cat temp1.a temp2.a > all.a &
cat temp1.v temp2.v > all.v &
ffmpeg -f u16le -acodec pcm_s16le -ac 2 -ar 44100 -i all.a \
-f yuv4mpegpipe -i all.v \
-sameq -y output.flv
-same_quant -y output.flv
rm temp[12].[av] all.[av]
@end example
@section The ffmpeg program does not respect the -maxrate setting, some frames are bigger than maxrate/fps.
Read the MPEG spec about video buffer verifier.
@section I want CBR, but no matter what I do frame sizes differ.
You do not understand what CBR is, please read the MPEG spec.
Read about video buffer verifier and constant bitrate.
The one sentence summary is that there is a buffer and the input rate is
constant, the output can vary as needed.
@section How do I check if a stream is CBR?
To quote the MPEG-2 spec:
"There is no way to tell that a bitstream is constant bitrate without
examining all of the vbv_delay values and making complicated computations."
@chapter Development
@section Are there examples illustrating how to use the FFmpeg libraries, particularly libavcodec and libavformat?
@ -414,7 +318,7 @@ the FFmpeg Windows Help Forum at
No. These tools are too bloated and they complicate the build.
@section Why not rewrite ffmpeg in object-oriented C++?
@section Why not rewrite FFmpeg in object-oriented C++?
FFmpeg is already organized in a highly modular manner and does not need to
be rewritten in a formal object language. Further, many of the developers
@ -433,15 +337,7 @@ Yes, as long as the code is optional and can easily and cleanly be placed
under #if CONFIG_GPL without breaking anything. So, for example, a new codec
or filter would be OK under GPL while a bug fix to LGPL code would not.
@section I want to compile xyz.c alone but my compiler produced many errors.
Common code is in its own files in libav* and is used by the individual
codecs. They will not work without the common parts, you have to compile
the whole libav*. If you wish, disable some parts with configure switches.
You can also try to hack it and remove more, but if you had problems fixing
the compilation failure then you are probably not qualified for this.
@section I'm using libavcodec from within my C++ application but the linker complains about missing symbols which seem to be available.
@section I'm using FFmpeg from within my C++ application but the linker complains about missing symbols which seem to be available.
FFmpeg is a pure C project, so to use the libraries within your C++ application
you need to explicitly state that you are using a C library. You can do this by
@ -459,14 +355,6 @@ to use them you have to append -D__STDC_CONSTANT_MACROS to your CXXFLAGS
You have to implement a URLProtocol, see @file{libavformat/file.c} in
FFmpeg and @file{libmpdemux/demux_lavf.c} in MPlayer sources.
@section I get "No compatible shell script interpreter found." in MSys.
The standard MSys bash (2.04) is broken. You need to install 2.05 or later.
@section I get "./configure: line <xxx>: pr: command not found" in MSys.
The standard MSys install doesn't come with pr. You need to get it from the coreutils package.
@section Where can I find libav* headers for Pascal/Delphi?
see @url{http://www.iversenit.dk/dev/ffmpeg-headers/}

@ -23,6 +23,7 @@ ffserver [options]
@c man begin DESCRIPTION
ffserver is a streaming server for both audio and video. It supports
several live feeds, streaming from files and time shifting on live feeds
(you can seek to positions in the past on each live feed, provided you
specify a big enough feed storage in ffserver.conf).

@ -471,6 +471,7 @@ following image formats are supported:
@item Duck TrueMotion 2.0 @tab @tab X
@tab fourcc: TM20
@item DV (Digital Video) @tab X @tab X
@item Dxtory capture format @tab @tab X
@item Feeble Files/ScummVM DXA @tab @tab X
@tab Codec originally used in Feeble Files game.
@item Electronic Arts CMV video @tab @tab X

@ -133,6 +133,7 @@ OBJS-$(CONFIG_DVDSUB_ENCODER) += dvdsubenc.o
OBJS-$(CONFIG_DVVIDEO_DECODER) += dv.o dvdata.o
OBJS-$(CONFIG_DVVIDEO_ENCODER) += dv.o dvdata.o
OBJS-$(CONFIG_DXA_DECODER) += dxa.o
OBJS-$(CONFIG_DXTORY_DECODER) += dxtory.o
OBJS-$(CONFIG_EAC3_DECODER) += eac3dec.o eac3_data.o
OBJS-$(CONFIG_EAC3_ENCODER) += eac3enc.o ac3enc.o ac3enc_float.o \
ac3tab.o ac3.o kbdwin.o eac3_data.o

@ -99,6 +99,7 @@ void avcodec_register_all(void)
REGISTER_DECODER (DSICINVIDEO, dsicinvideo);
REGISTER_ENCDEC (DVVIDEO, dvvideo);
REGISTER_DECODER (DXA, dxa);
REGISTER_DECODER (DXTORY, dxtory);
REGISTER_DECODER (EACMV, eacmv);
REGISTER_DECODER (EAMAD, eamad);
REGISTER_DECODER (EATGQ, eatgq);

@ -253,6 +253,7 @@ enum CodecID {
CODEC_ID_UTVIDEO_DEPRECATED,
CODEC_ID_BMV_VIDEO,
CODEC_ID_VBLE,
CODEC_ID_DXTORY,
CODEC_ID_UTVIDEO = 0x800,
CODEC_ID_ESCAPE130 = MKBETAG('E','1','3','0'),

@ -31,7 +31,6 @@
typedef struct CLJRContext {
AVClass *avclass;
AVCodecContext *avctx;
AVFrame picture;
int dither_type;
} CLJRContext;
@ -42,7 +41,6 @@ static av_cold int common_init(AVCodecContext *avctx)
avcodec_get_frame_defaults(&a->picture);
avctx->coded_frame = &a->picture;
a->avctx = avctx;
return 0;
}

@ -0,0 +1,109 @@
/*
* Dxtory decoder
*
* Copyright (c) 2011 Konstantin Shishkov
*
* This file is part of Libav.
*
* Libav is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* Libav is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with Libav; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include "avcodec.h"
#include "libavutil/intreadwrite.h"
static av_cold int decode_init(AVCodecContext *avctx)
{
avctx->pix_fmt = PIX_FMT_YUV420P;
avctx->coded_frame = avcodec_alloc_frame();
if (!avctx->coded_frame)
return AVERROR(ENOMEM);
return 0;
}
static int decode_frame(AVCodecContext *avctx, void *data, int *data_size,
AVPacket *avpkt)
{
int h, w;
AVFrame *pic = avctx->coded_frame;
const uint8_t *src = avpkt->data;
uint8_t *Y1, *Y2, *U, *V;
int ret;
if (pic->data[0])
avctx->release_buffer(avctx, pic);
if (avpkt->size < avctx->width * avctx->height * 3 / 2 + 16) {
av_log(avctx, AV_LOG_ERROR, "packet too small\n");
return AVERROR_INVALIDDATA;
}
pic->reference = 0;
if ((ret = avctx->get_buffer(avctx, pic)) < 0)
return ret;
pic->pict_type = AV_PICTURE_TYPE_I;
pic->key_frame = 1;
if (AV_RL32(src) != 0x01000002) {
av_log_ask_for_sample(avctx, "Unknown frame header %X\n", AV_RL32(src));
return AVERROR_PATCHWELCOME;
}
src += 16;
Y1 = pic->data[0];
Y2 = pic->data[0] + pic->linesize[0];
U = pic->data[1];
V = pic->data[2];
for (h = 0; h < avctx->height; h += 2) {
for (w = 0; w < avctx->width; w += 2) {
AV_WN16A(Y1 + w, AV_RN16A(src));
AV_WN16A(Y2 + w, AV_RN16A(src + 2));
U[w >> 1] = src[4] + 0x80;
V[w >> 1] = src[5] + 0x80;
src += 6;
}
Y1 += pic->linesize[0] << 1;
Y2 += pic->linesize[0] << 1;
U += pic->linesize[1];
V += pic->linesize[2];
}
*data_size = sizeof(AVFrame);
*(AVFrame*)data = *pic;
return avpkt->size;
}
static av_cold int decode_close(AVCodecContext *avctx)
{
AVFrame *pic = avctx->coded_frame;
if (pic->data[0])
avctx->release_buffer(avctx, pic);
av_freep(&avctx->coded_frame);
return 0;
}
AVCodec ff_dxtory_decoder = {
.name = "dxtory",
.long_name = NULL_IF_CONFIG_SMALL("Dxtory"),
.type = AVMEDIA_TYPE_VIDEO,
.id = CODEC_ID_DXTORY,
.init = decode_init,
.close = decode_close,
.decode = decode_frame,
.capabilities = CODEC_CAP_DR1,
};

@ -84,9 +84,7 @@ static int ptx_decode_frame(AVCodecContext *avctx, void *data, int *data_size,
ptr = p->data[0];
stride = p->linesize[0];
for (y=0; y<h; y++) {
if (buf_end - buf < w * bytes_per_pixel)
break;
for (y = 0; y < h && buf_end - buf >= w * bytes_per_pixel; y++) {
#if HAVE_BIGENDIAN
unsigned int x;
for (x=0; x<w*bytes_per_pixel; x+=bytes_per_pixel)
@ -101,6 +99,11 @@ static int ptx_decode_frame(AVCodecContext *avctx, void *data, int *data_size,
*picture = s->picture;
*data_size = sizeof(AVPicture);
if (y < h) {
av_log(avctx, AV_LOG_WARNING, "incomplete packet\n");
return avpkt->size;
}
return offset + w*h*bytes_per_pixel;
}

@ -233,6 +233,11 @@ static av_cold int tta_decode_init(AVCodecContext * avctx)
s->data_length = get_bits_long(&s->gb, 32);
skip_bits(&s->gb, 32); // CRC32 of header
if (s->channels == 0) {
av_log(s->avctx, AV_LOG_ERROR, "Invalid number of channels\n");
return AVERROR_INVALIDDATA;
}
switch(s->bps) {
case 1: avctx->sample_fmt = AV_SAMPLE_FMT_U8; break;
case 2:

@ -21,6 +21,12 @@
#ifndef AVFORMAT_AVFORMAT_H
#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.

@ -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);

@ -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) {

@ -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;
}

@ -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 }
};

@ -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

@ -19,6 +19,11 @@ if [ -n "$do_aref" ]; then
do_avconv $pcm_ref -b 128k -ac 2 -ar 44100 -f s16le -i $pcm_src -f wav
fi
if [ -n "$do_cljr" ] ; then
do_video_encoding cljr.avi "-an -vcodec cljr"
do_video_decoding
fi
if [ -n "$do_mpeg" ] ; then
# mpeg1
do_video_encoding mpeg1.mpg "-qscale 10 -f mpeg1video"

@ -241,3 +241,27 @@ fate-iirfilter: CMD = run libavcodec/iirfilter-test
FATE_TESTS += fate-vble
fate-vble: CMD = framecrc -i $(SAMPLES)/vble/flowers-partial-2MB.avi
FATE_TESTS += fate-utvideo_rgba_left
fate-utvideo_rgba_left: CMD = framecrc -i $(SAMPLES)/utvideo/utvideo_rgba_left.avi
FATE_TESTS += fate-utvideo_rgba_median
fate-utvideo_rgba_median: CMD = framecrc -i $(SAMPLES)/utvideo/utvideo_rgba_median.avi
FATE_TESTS += fate-utvideo_rgb_left
fate-utvideo_rgb_left: CMD = framecrc -i $(SAMPLES)/utvideo/utvideo_rgb_left.avi
FATE_TESTS += fate-utvideo_rgb_median
fate-utvideo_rgb_median: CMD = framecrc -i $(SAMPLES)/utvideo/utvideo_rgb_median.avi
FATE_TESTS += fate-utvideo_yuv420_left
fate-utvideo_yuv420_left: CMD = framecrc -i $(SAMPLES)/utvideo/utvideo_yuv420_left.avi
FATE_TESTS += fate-utvideo_yuv420_median
fate-utvideo_yuv420_median: CMD = framecrc -i $(SAMPLES)/utvideo/utvideo_yuv420_median.avi
FATE_TESTS += fate-utvideo_yuv422_left
fate-utvideo_yuv422_left: CMD = framecrc -i $(SAMPLES)/utvideo/utvideo_yuv422_left.avi
FATE_TESTS += fate-utvideo_yuv422_median
fate-utvideo_yuv422_median: CMD = framecrc -i $(SAMPLES)/utvideo/utvideo_yuv422_median.avi

@ -0,0 +1,4 @@
0, 0, 921600, 0x27e6001e
0, 3003, 921600, 0x7c0a92bc
0, 6006, 921600, 0x4d2be42c
0, 9009, 921600, 0x58ddd0be

@ -0,0 +1,5 @@
0, 0, 921600, 0x9776611f
0, 3003, 921600, 0xdbfa64f4
0, 6006, 921600, 0xed2a0580
0, 9009, 921600, 0x6ecc80bc
0, 12012, 921600, 0x58ddd0be

@ -0,0 +1,5 @@
0, 0, 1228800, 0xf1bc9432
0, 3003, 1228800, 0x8480d1e5
0, 6006, 1228800, 0xb01d5fb2
0, 9009, 1228800, 0x53cb42c4
0, 12012, 1228800, 0x2b2ea176

@ -0,0 +1,5 @@
0, 0, 1228800, 0xf1bc9432
0, 3003, 1228800, 0x8480d1e5
0, 6006, 1228800, 0xb01d5fb2
0, 9009, 1228800, 0x53cb42c4
0, 12012, 1228800, 0x2b2ea176

@ -0,0 +1,7 @@
0, 0, 460800, 0xece98fc8
0, 3003, 460800, 0x9baf786b
0, 6006, 460800, 0x8e8e0510
0, 9009, 460800, 0x27c1f2ba
0, 12012, 460800, 0x6a817987
0, 15015, 460800, 0x2f713ec2
0, 18018, 460800, 0x003b560e

@ -0,0 +1,4 @@
0, 0, 460800, 0x6a817987
0, 3003, 460800, 0x2f713ec2
0, 6006, 460800, 0x003b560e
0, 9009, 460800, 0x9e1bbf63

@ -0,0 +1,4 @@
0, 0, 614400, 0x9a6b8802
0, 3003, 614400, 0xaa8687e2
0, 6006, 614400, 0x2fe5bd40
0, 9009, 614400, 0x1c8f3737

@ -0,0 +1,4 @@
0, 0, 614400, 0x9a6b8802
0, 3003, 614400, 0xaa8687e2
0, 6006, 614400, 0x2fe5bd40
0, 9009, 614400, 0x1c8f3737

@ -0,0 +1,4 @@
ff4eebcd5bd7b6470f97867cdecb0bec *./tests/data/vsynth1/cljr.avi
5075660 ./tests/data/vsynth1/cljr.avi
0d473eb49653a05685178dd261de861c *./tests/data/cljr.vsynth1.out.yuv
stddev: 30.70 PSNR: 18.39 MAXDIFF: 255 bytes: 7603200/ 7603200

@ -0,0 +1,4 @@
8ca3f24da468f32561100d3a1a71348d *./tests/data/vsynth2/cljr.avi
5075660 ./tests/data/vsynth2/cljr.avi
a0126ba9f2b2192b6b63b485e0118114 *./tests/data/cljr.vsynth2.out.yuv
stddev: 10.26 PSNR: 27.90 MAXDIFF: 62 bytes: 7603200/ 7603200
Loading…
Cancel
Save