Merge remote-tracking branch 'qatar/master'
authorMichael Niedermayer <michaelni@gmx.at>
Tue, 12 Jul 2011 22:42:11 +0000 (00:42 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Tue, 12 Jul 2011 22:42:11 +0000 (00:42 +0200)
* qatar/master:
  doc: Improve references to external URLs.
  h264: move decode_mb_skip() from h264.h to h.264_mvpred.h
  ffplay: skip return value of avcodec_decode_video2 / avcodec_decode_subtitle2
  dnxhdenc: Replace a forward declaration by the proper #include.
  h264: move h264_mvpred.h include.
  pix_fmt: Fix number of bits per component in yuv444p9be
  lavf: deprecate AVFormatContext.timestamp
  ffmpeg: merge input_files_ts_scale into InputStream.
  ffmpeg: don't abuse a global for passing sample format from input to output
  ffmpeg: don't abuse a global for passing channel layout from input to output
  ffmpeg: factor common code from new_a/v/s/d_stream to new_output_stream()
  matroskaenc: make SSA default subtitle codec.
  oggdec: prevent heap corruption.

Conflicts:
doc/developer.texi
doc/faq.texi
doc/general.texi
ffmpeg.c
ffplay.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
19 files changed:
1  2 
doc/developer.texi
doc/faq.texi
doc/ffmpeg.texi
doc/general.texi
doc/protocols.texi
ffmpeg.c
ffplay.c
libavcodec/dnxhdenc.c
libavcodec/h264.h
libavcodec/h264_mvpred.h
libavformat/avformat.h
libavformat/dvenc.c
libavformat/gxfenc.c
libavformat/matroskaenc.c
libavformat/movenc.c
libavformat/mxfenc.c
libavformat/oggdec.c
libavformat/version.h
libavutil/pixdesc.c

@@@ -23,17 -23,25 +23,18 @@@ audio or video streams
  
  @end itemize
  
 -@section Integrating libav in your program
 -
 -Shared libraries should be used whenever is possible in order to reduce
 -the effort distributors have to pour to support programs and to ensure
 -only the public api is used.
 -
 -You can use Libav in your commercial program, but you must abide to the
 -license, LGPL or GPL depending on the specific features used, please refer
 -to @uref{http://libav.org/legal.html, our legal page} for a quick checklist and to
 -the following links for the exact text of each license:
 -@uref{http://git.libav.org/?p=libav.git;a=blob;f=COPYING.GPLv2, GPL version 2},
 -@uref{http://git.libav.org/?p=libav.git;a=blob;f=COPYING.GPLv3, GPL version 3},
 -@uref{http://git.libav.org/?p=libav.git;a=blob;f=COPYING.LGPLv2.1, LGPL version 2.1},
 -@uref{http://git.libav.org/?p=libav.git;a=blob;f=COPYING.LGPLv3, LGPL version 3}.
 -Any modification to the source code can be suggested for inclusion.
 -The best way to proceed is to send your patches to the
 -@uref{https://lists.libav.org/mailman/listinfo/libav-devel, libav-devel}
 -mailing list.
 +@section Integrating libavcodec or libavformat in your program
 +
 +You can integrate all the source code of the libraries to link them
 +statically to avoid any version problem. All you need is to provide a
 +'config.mak' and a 'config.h' in the parent directory. See the defines
 +generated by ./configure to understand what is needed.
 +
 +You can use libavcodec or libavformat in your commercial program, but
 +@emph{any patch you make must be published}. The best way to proceed is
 +to send your patches to the FFmpeg mailing list.
 +
  @anchor{Coding Rules}
  @section Coding Rules
  
diff --cc doc/faq.texi
@@@ -46,8 -46,9 +46,8 @@@ Likely reason
  @itemize
  @item We are busy and haven't had time yet to read your report or
  investigate the issue.
 -@item You did not follow our
 -      @uref{http://libav.org/bugreports.html, bug reporting guidelines}.
 +@item You didn't follow @url{http://ffmpeg.org/bugreports.html}.
- @item You didn't use git HEAD.
+ @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
@@@ -123,8 -124,9 +123,9 @@@ problem and an NP-hard problem..
  
  @section ffmpeg does not work; what is wrong?
  
- Try a @code{make distclean} in the ffmpeg source directory before the build. If this does not help see
+ Try a @code{make distclean} in the ffmpeg source directory before the build.
 -If this does not help see our
 -@uref{http://libav.org/bugreports.html, bug reporting guidelines}.
++If this does not help see
 +(@url{http://ffmpeg.org/bugreports.html}).
  
  @section How do I encode single pictures into movies?
  
@@@ -414,17 -413,11 +416,17 @@@ No. These tools are too bloated and the
  
  @section Why not rewrite ffmpeg in object-oriented C++?
  
 -Libav is already organized in a highly modular manner and does not need to
 +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
  favor straight C; it works for them. For more arguments on this matter,
- read "Programming Religion" at (@url{http://www.tux.org/lkml/#s15}).
+ read @uref{http://www.tux.org/lkml/#s15, "Programming Religion"}.
  
 +@section Why are the ffmpeg programs devoid of debugging symbols?
 +
 +The build process creates ffmpeg_g, ffplay_g, etc. which contain full debug
 +information. Those binaries are stripped to create ffmpeg, ffplay, etc. If
 +you need the debug information, use the *_g versions.
 +
  @section I do not like the LGPL, can I contribute code under the GPL instead?
  
  Yes, as long as the code is optional and can easily and cleanly be placed
diff --cc doc/ffmpeg.texi
Simple merge
@@@ -1044,8 -1008,7 +1044,7 @@@ Then configure FFmpeg with the followin
  (you can change the cross-prefix according to the prefix chosen for the
  MinGW tools).
  
- Then you can easily test FFmpeg with Wine
- (@url{http://www.winehq.com/}).
 -Then you can easily test Libav with @uref{http://www.winehq.com/, Wine}.
++Then you can easily test FFmpeg with @uref{http://www.winehq.com/, Wine}.
  
  @subsection Compilation under Cygwin
  
Simple merge
diff --cc ffmpeg.c
+++ b/ffmpeg.c
@@@ -116,11 -104,14 +116,11 @@@ static const OptionDef options[]
  #define MAX_FILES 100
  #define MAX_STREAMS 1024    /* arbitrary sanity check value */
  
 -#define FFM_PACKET_SIZE 4096 //XXX a duplicate of the line in ffm.h
 -
  static const char *last_asked_format = NULL;
- static double *input_files_ts_scale[MAX_FILES] = {NULL};
- static int nb_input_files_ts_scale[MAX_FILES] = {0};
+ static double *ts_scale;
+ static int  nb_ts_scale;
  
  static AVFormatContext *output_files[MAX_FILES];
 -static AVDictionary *output_opts[MAX_FILES];
  static int nb_output_files = 0;
  
  static StreamMap *stream_maps = NULL;
@@@ -327,6 -310,8 +325,7 @@@ typedef struct InputStream 
      int64_t       next_pts;  /* synthetic pts for cases where pkt.pts
                                  is not defined */
      int64_t       pts;       /* current pts */
 -    PtsCorrectionContext pts_ctx;
+     double ts_scale;
      int is_start;            /* is 1 at the start and after a discontinuity */
      int showed_multi_packet_warning;
      int is_past_recording_time;
@@@ -704,28 -681,20 +712,21 @@@ static int read_ffserver_streams(AVForm
      if (err < 0)
          return err;
      /* copy stream format */
-     s->nb_streams = 0;
-     s->streams = av_mallocz(sizeof(AVStream *) * ic->nb_streams);
      for(i=0;i<ic->nb_streams;i++) {
          AVStream *st;
+         OutputStream *ost;
          AVCodec *codec;
  
-         s->nb_streams++;
+         codec = avcodec_find_encoder(ic->streams[i]->codec->codec_id);
+         ost   = new_output_stream(s, nb_output_files, codec);
+         st    = ost->st;
  
          // FIXME: a more elegant solution is needed
-         st = av_mallocz(sizeof(AVStream));
          memcpy(st, ic->streams[i], sizeof(AVStream));
 -        st->info = NULL;
 +        st->info = av_malloc(sizeof(*st->info));
 +        memcpy(st->info, ic->streams[i]->info, sizeof(*st->info));
-         st->codec = avcodec_alloc_context();
-         if (!st->codec) {
-             print_error(filename, AVERROR(ENOMEM));
-             ffmpeg_exit(1);
-         }
          avcodec_copy_context(st->codec, ic->streams[i]->codec);
-         s->streams[i] = st;
  
-         codec = avcodec_find_encoder(st->codec->codec_id);
          if (st->codec->codec_type == AVMEDIA_TYPE_AUDIO) {
              if (audio_stream_copy) {
                  st->stream_copy = 1;
@@@ -2278,10 -2176,12 +2273,13 @@@ static int transcode(AVFormatContext **
                  }
                  choose_sample_rate(ost->st, ost->enc);
                  codec->time_base = (AVRational){1, codec->sample_rate};
 -                if (!codec->channels)
+                 if (codec->sample_fmt == AV_SAMPLE_FMT_NONE)
+                     codec->sample_fmt = icodec->sample_fmt;
+                 choose_sample_fmt(ost->st, ost->enc);
 +                if (!codec->channels) {
                      codec->channels = icodec->channels;
 -                codec->channel_layout = icodec->channel_layout;
 +                    codec->channel_layout = icodec->channel_layout;
 +                }
                  if (av_get_channel_layout_nb_channels(codec->channel_layout) != codec->channels)
                      codec->channel_layout = 0;
                  ost->audio_resample = codec->sample_rate != icodec->sample_rate || audio_sync_method > 1;
@@@ -3404,11 -3313,7 +3411,9 @@@ static int opt_input_file(const char *o
          switch (dec->codec_type) {
          case AVMEDIA_TYPE_AUDIO:
              ist->dec = avcodec_find_decoder_by_name(audio_codec_name);
 +            if(!ist->dec)
 +                ist->dec = avcodec_find_decoder(dec->codec_id);
              set_context_opts(dec, avcodec_opts[AVMEDIA_TYPE_AUDIO], AV_OPT_FLAG_AUDIO_PARAM | AV_OPT_FLAG_DECODING_PARAM, ist->dec);
-             channel_layout    = dec->channel_layout;
-             audio_sample_fmt  = dec->sample_fmt;
              if(audio_disable)
                  st->discard= AVDISCARD_ALL;
              break;
diff --cc ffplay.c
+++ b/ffplay.c
@@@ -1429,9 -1429,35 +1429,9 @@@ static int queue_picture(VideoState *is
      return 0;
  }
  
 -/**
 - * compute the exact PTS for the picture if it is omitted in the stream
 - * @param pts1 the dts of the pkt / pts of the frame
 - */
 -static int output_picture2(VideoState *is, AVFrame *src_frame, double pts1, int64_t pos)
 -{
 -    double frame_delay, pts;
 -
 -    pts = pts1;
 -
 -    if (pts != 0) {
 -        /* update video clock with pts, if present */
 -        is->video_clock = pts;
 -    } else {
 -        pts = is->video_clock;
 -    }
 -    /* update video clock for next frame */
 -    frame_delay = av_q2d(is->video_st->codec->time_base);
 -    /* for MPEG2, the frame can be repeated, so we update the
 -       clock accordingly */
 -    frame_delay += src_frame->repeat_pict * (frame_delay * 0.5);
 -    is->video_clock += frame_delay;
 -
 -    return queue_picture(is, src_frame, pts, pos);
 -}
 -
  static int get_video_frame(VideoState *is, AVFrame *frame, int64_t *pts, AVPacket *pkt)
  {
-     int len1 av_unused, got_picture, i;
+     int got_picture, i;
  
      if (packet_queue_get(&is->videoq, pkt, 1) < 0)
          return -1;
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge