Merge branch 'master' into oldabi
authorMichael Niedermayer <michaelni@gmx.at>
Tue, 21 Jun 2011 03:22:40 +0000 (05:22 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Tue, 21 Jun 2011 03:27:44 +0000 (05:27 +0200)
* master: (109 commits)
  libx264: fix open gop default. Please use -x264opts to force open gop This fixes Ticket268
  avfilter picture pool: double free hotfix
  mpegaudio_parser: be less picky on the start position
  ppc32: Fix movrel
  Replace usages of av_get_bits_per_sample_fmt() with av_get_bytes_per_sample().
  x86: cabac: fix register constraints for 32-bit mode
  cabac: move x86 asm to libavcodec/x86/cabac.h
  x86: h264: cast pointers to intptr_t rather than int
  x86: h264: remove hardcoded edi in decode_significance_8x8_x86()
  x86: h264: remove hardcoded esi in decode_significance[_8x8]_x86()
  x86: h264: remove hardcoded edx in decode_significance[_8x8]_x86()
  x86: h264: remove hardcoded eax in decode_significance[_8x8]_x86()
  x86: cabac: change 'a' constraint to 'r' in get_cabac_inline()
  x86: cabac: remove hardcoded esi in get_cabac_inline()
  x86: cabac: remove hardcoded edx in get_cabac_inline()
  x86: cabac: remove unused macro parameter
  x86: cabac: remove hardcoded ebx in inline asm
  x86: cabac: remove hardcoded struct offsets from inline asm
  cabac: remove inline asm under #if 0
  cabac: remove BRANCHLESS_CABAC_DECODER switch
  ...

Conflicts:
cmdutils.c
ffserver.c
libavfilter/avfilter.h
libavformat/avformat.h
libavformat/utils.c
libavformat/version.h
libavutil/avutil.h

Merged-by: Michael Niedermayer <michaelni@gmx.at>
24 files changed:
1  2 
ffmpeg.c
ffplay.c
ffprobe.c
ffserver.c
libavcodec/avcodec.h
libavcodec/flacenc.c
libavcodec/h264.c
libavcodec/mpegvideo.h
libavcodec/options.c
libavcodec/resample.c
libavcodec/utils.c
libavfilter/avfilter.h
libavfilter/vf_libopencv.c
libavformat/applehttp.c
libavformat/avformat.h
libavformat/avidec.c
libavformat/mmsh.c
libavformat/mov.c
libavformat/options.c
libavformat/rtsp.c
libavformat/sapdec.c
libavformat/utils.c
libavformat/version.h
libavutil/avutil.h

diff --cc ffmpeg.c
Simple merge
diff --cc ffplay.c
Simple merge
diff --cc ffprobe.c
Simple merge
diff --cc ffserver.c
@@@ -3679,12 -3674,12 +3677,12 @@@ static void build_feed_streams(void
      for(feed = first_feed; feed != NULL; feed = feed->next_feed) {
          int fd;
  
 -        if (avio_check(feed->feed_filename, AVIO_FLAG_READ) > 0) {
 +        if (url_exist(feed->feed_filename)) {
              /* See if it matches */
-             AVFormatContext *s;
+             AVFormatContext *s = NULL;
              int matches = 0;
  
-             if (av_open_input_file(&s, feed->feed_filename, NULL, FFM_PACKET_SIZE, NULL) >= 0) {
+             if (avformat_open_input(&s, feed->feed_filename, NULL, NULL) >= 0) {
                  /* Now see if it matches */
                  if (s->nb_streams == feed->nb_streams) {
                      matches = 1;
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
@@@ -25,8 -25,8 +25,8 @@@
  #include "libavutil/avutil.h"
  #include "libavutil/samplefmt.h"
  
 -#define LIBAVFILTER_VERSION_MAJOR  2
 -#define LIBAVFILTER_VERSION_MINOR 23
 +#define LIBAVFILTER_VERSION_MAJOR  1
- #define LIBAVFILTER_VERSION_MINOR 79
++#define LIBAVFILTER_VERSION_MINOR 80
  #define LIBAVFILTER_VERSION_MICRO  0
  
  #define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \
Simple merge
Simple merge
@@@ -261,12 -247,8 +261,12 @@@ typedef struct AVFormatParameters 
      attribute_deprecated unsigned int mpeg2ts_compute_pcr:1;
      attribute_deprecated unsigned int initial_pause:1;       /**< Do not begin to play the stream
                                                                    immediately (RTSP only). */
+     attribute_deprecated unsigned int prealloced_context:1;
  #endif
-     unsigned int prealloced_context:1;
 +#if FF_API_PARAMETERS_CODEC_ID
 +    attribute_deprecated enum CodecID video_codec_id;
 +    attribute_deprecated enum CodecID audio_codec_id;
 +#endif
  } AVFormatParameters;
  
  //! Demuxer will use avio_open, no opened file should be provided by the caller.
@@@ -1158,13 -1084,29 +1164,35 @@@ attribute_deprecated int av_open_input_
                         AVInputFormat *fmt,
                         int buf_size,
                         AVFormatParameters *ap);
+ #endif
+ /**
+  * Open an input stream and read the header. The codecs are not opened.
+  * The stream must be closed with av_close_input_file().
+  *
+  * @param ps Pointer to user-supplied AVFormatContext (allocated by avformat_alloc_context).
+  *           May be a pointer to NULL, in which case an AVFormatContext is allocated by this
+  *           function and written into ps.
+  *           Note that a user-supplied AVFormatContext will be freed on failure.
+  * @param filename Name of the stream to open.
+  * @param fmt If non-NULL, this parameter forces a specific input format.
+  *            Otherwise the format is autodetected.
+  * @param options  A dictionary filled with AVFormatContext and demuxer-private options.
+  *                 On return this parameter will be destroyed and replaced with a dict containing
+  *                 options that were not found. May be NULL.
+  *
+  * @return 0 on success, a negative AVERROR on failure.
+  *
+  * @note If you want to use custom IO, preallocate the format context and set its pb field.
+  */
+ int avformat_open_input(AVFormatContext **ps, const char *filename, AVInputFormat *fmt, AVDictionary **options);
  
 +#if FF_API_ALLOC_FORMAT_CONTEXT
 +/**
 + * @deprecated Use avformat_alloc_context() instead.
 + */
 +attribute_deprecated AVFormatContext *av_alloc_format_context(void);
 +#endif
  int av_demuxer_open(AVFormatContext *ic, AVFormatParameters *ap);
  
  /**
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
@@@ -484,67 -464,15 +531,18 @@@ int av_open_input_stream(AVFormatContex
          err = AVERROR(ENOMEM);
          goto fail;
      }
-     ic->iformat = fmt;
      ic->pb = pb;
-     ic->duration = AV_NOPTS_VALUE;
-     ic->start_time = AV_NOPTS_VALUE;
-     av_strlcpy(ic->filename, filename, sizeof(ic->filename));
  
-     /* allocate private data */
-     if (fmt->priv_data_size > 0) {
-         ic->priv_data = av_mallocz(fmt->priv_data_size);
-         if (!ic->priv_data) {
-             err = AVERROR(ENOMEM);
-             goto fail;
-         }
-         if (fmt->priv_class) {
-             *(const AVClass**)ic->priv_data= fmt->priv_class;
-             av_opt_set_defaults(ic->priv_data);
-         }
-     } else {
-         ic->priv_data = NULL;
-     }
-     // e.g. AVFMT_NOFILE formats will not have a AVIOContext
-     if (ic->pb)
-         ff_id3v2_read(ic, ID3v2_DEFAULT_MAGIC);
-     if (!(ic->flags&AVFMT_FLAG_PRIV_OPT) && ic->iformat->read_header) {
-         err = ic->iformat->read_header(ic, ap);
-         if (err < 0)
-             goto fail;
-     }
-     if (!(ic->flags&AVFMT_FLAG_PRIV_OPT) && pb && !ic->data_offset)
-         ic->data_offset = avio_tell(ic->pb);
+     err = avformat_open_input(ic_ptr, filename, fmt, &opts);
  
-     ic->raw_packet_buffer_remaining_size = RAW_PACKET_BUFFER_SIZE;
-     *ic_ptr = ic;
-     return 0;
-  fail:
-     if (ic) {
-         int i;
-         av_freep(&ic->priv_data);
-         for(i=0;i<ic->nb_streams;i++) {
-             AVStream *st = ic->streams[i];
-             if (st) {
-                 av_free(st->priv_data);
-                 av_free(st->codec->extradata);
-                 av_free(st->codec);
-                 av_free(st->info);
-             }
-             av_free(st);
-         }
-     }
-     av_free(ic);
-     *ic_ptr = NULL;
 +#if FF_API_OLD_METADATA
 +    ff_metadata_demux_compat(ic);
 +#endif
+ fail:
+     av_dict_free(&opts);
      return err;
  }
+ #endif
  
  int av_demuxer_open(AVFormatContext *ic, AVFormatParameters *ap){
      int err;
@@@ -639,62 -568,117 +638,117 @@@ int av_open_input_file(AVFormatContext 
                         AVFormatParameters *ap)
  {
      int err;
-     AVProbeData probe_data, *pd = &probe_data;
-     AVIOContext *pb = NULL;
-     void *logctx= ap && ap->prealloced_context ? *ic_ptr : NULL;
+     AVDictionary *opts = convert_format_parameters(ap);
  
-     pd->filename = "";
-     if (filename)
-         pd->filename = filename;
-     pd->buf = NULL;
-     pd->buf_size = 0;
+     if (!ap || !ap->prealloced_context)
+         *ic_ptr = NULL;
+     err = avformat_open_input(ic_ptr, filename, fmt, &opts);
+     av_dict_free(&opts);
+     return err;
+ }
+ #endif
  
-     if (!fmt) {
-         /* guess format if no file can be opened */
-         fmt = av_probe_input_format(pd, 0);
+ /* open input file and probe the format if necessary */
+ static int init_input(AVFormatContext *s, const char *filename)
+ {
+     int ret;
+     AVProbeData pd = {filename, NULL, 0};
+     if (s->pb) {
+         s->flags |= AVFMT_FLAG_CUSTOM_IO;
+         if (!s->iformat)
+             return av_probe_input_buffer(s->pb, &s->iformat, filename, s, 0, 0);
+         else if (s->iformat->flags & AVFMT_NOFILE)
+             return AVERROR(EINVAL);
+         return 0;
      }
  
-     /* Do not open file if the format does not need it. XXX: specific
-        hack needed to handle RTSP/TCP */
-     if (!fmt || !(fmt->flags & AVFMT_NOFILE)) {
-         /* if no file needed do not try to open one */
-         if ((err=avio_open(&pb, filename, AVIO_RDONLY)) < 0) {
+     if ( (s->iformat && s->iformat->flags & AVFMT_NOFILE) ||
+         (!s->iformat && (s->iformat = av_probe_input_format(&pd, 0))))
+         return 0;
 -    if ((ret = avio_open(&s->pb, filename, AVIO_FLAG_READ)) < 0)
++    if ((ret = avio_open(&s->pb, filename, AVIO_RDONLY)) < 0)
+        return ret;
+     if (s->iformat)
+         return 0;
+     return av_probe_input_buffer(s->pb, &s->iformat, filename, s, 0, 0);
+ }
+ int avformat_open_input(AVFormatContext **ps, const char *filename, AVInputFormat *fmt, AVDictionary **options)
+ {
+     AVFormatContext *s = *ps;
+     int ret = 0;
+     AVFormatParameters ap = { 0 };
+     AVDictionary *tmp = NULL;
+     if (!s && !(s = avformat_alloc_context()))
+         return AVERROR(ENOMEM);
+     if (fmt)
+         s->iformat = fmt;
+     if (options)
+         av_dict_copy(&tmp, *options, 0);
+     if ((ret = av_opt_set_dict(s, &tmp)) < 0)
+         goto fail;
+     if ((ret = init_input(s, filename)) < 0)
+         goto fail;
+     /* check filename in case an image number is expected */
+     if (s->iformat->flags & AVFMT_NEEDNUMBER) {
+         if (!av_filename_number_test(filename)) {
+             ret = AVERROR(EINVAL);
              goto fail;
          }
-         if (buf_size > 0) {
-             ffio_set_buf_size(pb, buf_size);
-         }
-         if (!fmt && (err = av_probe_input_buffer(pb, &fmt, filename, logctx, 0, logctx ? (*ic_ptr)->probesize : 0)) < 0) {
+     }
+     s->duration = s->start_time = AV_NOPTS_VALUE;
+     av_strlcpy(s->filename, filename, sizeof(s->filename));
+     /* allocate private data */
+     if (s->iformat->priv_data_size > 0) {
+         if (!(s->priv_data = av_mallocz(s->iformat->priv_data_size))) {
+             ret = AVERROR(ENOMEM);
              goto fail;
          }
+         if (s->iformat->priv_class) {
+             *(const AVClass**)s->priv_data = s->iformat->priv_class;
+             av_opt_set_defaults(s->priv_data);
+             if ((ret = av_opt_set_dict(s->priv_data, &tmp)) < 0)
+                 goto fail;
+         }
      }
  
-     /* if still no format found, error */
-     if (!fmt) {
-         err = AVERROR_INVALIDDATA;
-         goto fail;
-     }
+     /* e.g. AVFMT_NOFILE formats will not have a AVIOContext */
+     if (s->pb)
+         ff_id3v2_read(s, ID3v2_DEFAULT_MAGIC);
  
-     /* check filename in case an image number is expected */
-     if (fmt->flags & AVFMT_NEEDNUMBER) {
-         if (!av_filename_number_test(filename)) {
-             err = AVERROR_NUMEXPECTED;
+     if (!(s->flags&AVFMT_FLAG_PRIV_OPT) && s->iformat->read_header)
+         if ((ret = s->iformat->read_header(s, &ap)) < 0)
              goto fail;
-         }
+     if (!(s->flags&AVFMT_FLAG_PRIV_OPT) && s->pb && !s->data_offset)
+         s->data_offset = avio_tell(s->pb);
+     s->raw_packet_buffer_remaining_size = RAW_PACKET_BUFFER_SIZE;
+     if (options) {
+         av_dict_free(options);
+         *options = tmp;
      }
-     err = av_open_input_stream(ic_ptr, pb, filename, fmt, ap);
-     if (err)
-         goto fail;
+     *ps = s;
      return 0;
-  fail:
-     av_freep(&pd->buf);
-     if (pb)
-         avio_close(pb);
-     if (ap && ap->prealloced_context)
-         av_free(*ic_ptr);
-     *ic_ptr = NULL;
-     return err;
  
+ fail:
+     av_dict_free(&tmp);
+     if (s->pb && !(s->flags & AVFMT_FLAG_CUSTOM_IO))
+         avio_close(s->pb);
+     avformat_free_context(s);
+     *ps = NULL;
+     return ret;
  }
  
  /*******************************************************/
@@@ -2989,14 -2976,18 +3065,22 @@@ int avformat_write_header(AVFormatConte
  
      if (!s->priv_data && s->oformat->priv_data_size > 0) {
          s->priv_data = av_mallocz(s->oformat->priv_data_size);
-         if (!s->priv_data)
-             return AVERROR(ENOMEM);
+         if (!s->priv_data) {
+             ret = AVERROR(ENOMEM);
+             goto fail;
+         }
+         if (s->oformat->priv_class) {
+             *(const AVClass**)s->priv_data= s->oformat->priv_class;
+             av_opt_set_defaults(s->priv_data);
+             if ((ret = av_opt_set_dict(s->priv_data, &tmp)) < 0)
+                 goto fail;
+         }
      }
  
 +#if FF_API_OLD_METADATA
 +    ff_metadata_mux_compat(s);
 +#endif
 +
      /* set muxer identification string */
      if (s->nb_streams && !(s->streams[0]->codec->flags & CODEC_FLAG_BITEXACT)) {
          av_dict_set(&s->metadata, "encoder", LIBAVFORMAT_IDENT, 0);
@@@ -23,8 -23,8 +23,8 @@@
  
  #include "libavutil/avutil.h"
  
 -#define LIBAVFORMAT_VERSION_MAJOR 53
 -#define LIBAVFORMAT_VERSION_MINOR  4
 +#define LIBAVFORMAT_VERSION_MAJOR 52
- #define LIBAVFORMAT_VERSION_MINOR 109
++#define LIBAVFORMAT_VERSION_MINOR 110
  #define LIBAVFORMAT_VERSION_MICRO  0
  
  #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \
@@@ -39,9 -39,9 +39,9 @@@
  #define AV_VERSION_DOT(a, b, c) a ##.## b ##.## c
  #define AV_VERSION(a, b, c) AV_VERSION_DOT(a, b, c)
  
 -#define LIBAVUTIL_VERSION_MAJOR 51
 -#define LIBAVUTIL_VERSION_MINOR  9
 -#define LIBAVUTIL_VERSION_MICRO  1
 +#define LIBAVUTIL_VERSION_MAJOR 50
- #define LIBAVUTIL_VERSION_MINOR 42
++#define LIBAVUTIL_VERSION_MINOR 43
 +#define LIBAVUTIL_VERSION_MICRO  0
  
  #define LIBAVUTIL_VERSION_INT   AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
                                                 LIBAVUTIL_VERSION_MINOR, \