Merge remote-tracking branch 'qatar/master'
authorMichael Niedermayer <michaelni@gmx.at>
Sat, 9 Jul 2011 00:06:40 +0000 (02:06 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Sat, 9 Jul 2011 00:06:40 +0000 (02:06 +0200)
* qatar/master: (28 commits)
  mp3enc: write a xing frame containing number of frames in the file
  lavf: update AVStream.nb_frames when muxing.
  ffmpeg: remove unused variables from InputStream.
  doc: update ffmpeg -ar and -ac documentation to reflect reality.
  ffmpeg: remove pointless if (nb_input_files)
  ffmpeg: merge input_files_ts_offset into input_files.
  ffmpeg: merge input_codecs into input_streams.
  ffmpeg: drop AV prefixes from struct names.
  ffmpeg: deprecate loop_input and loop_output options
  gif: add loop private option.
  img2: add loop private option.
  AVOptions: in av_opt_find() don't return named constants unless unit is specified.
  x11grab: replace undocumented nomouse hackery with a private option.
  dict: extend documentation.
  lls: whitespace cosmetics
  docs: Use proper markup for a literal command line option
  docs: Remove a remark that isn't relevant any longer
  docs: Explain how to regenerate import libraries with MSVC tools
  docs: Mention that libraries for MSVC can be built with a cross compiler
  docs: Remove old docs that mention setting up a build environment with lib.exe
  ...

Conflicts:
doc/ffmpeg.texi
doc/general.texi
ffmpeg.c
libavcodec/Makefile
libavcodec/dnxhddata.c
libavformat/mp3enc.c
libavformat/utils.c
libavutil/Makefile
tests/copycooker.sh

Merged-by: Michael Niedermayer <michaelni@gmx.at>
20 files changed:
1  2 
doc/ffmpeg.texi
doc/general.texi
ffmpeg.c
libavcodec/Makefile
libavcodec/dnxhddata.c
libavcodec/flashsv.c
libavcodec/libschroedingerdec.c
libavdevice/oss_audio.c
libavdevice/x11grab.c
libavformat/avformat.h
libavformat/gif.c
libavformat/img2.c
libavformat/matroskaenc.c
libavformat/mp3enc.c
libavformat/utils.c
libavformat/version.h
libavutil/Makefile
libavutil/dict.h
libavutil/lls.c
libavutil/opt.c

diff --cc doc/ffmpeg.texi
Simple merge
@@@ -983,12 -948,9 +984,9 @@@ libraries (@file{libxxx.a} files) you s
  libraries (@file{libxxx.dll.a} files), as these will give you undefined
  reference errors. There should be no need for @file{libmingwex.a},
  @file{libgcc.a}, and @file{wsock32.lib}, nor any other external library
- statically linked into the DLLs. The @file{bin} directory contains a bunch
- of DLL files, but the ones that are actually used to run your application
- are the ones with a major version number in their filenames
- (i.e. @file{avcodec-51.dll}).
+ statically linked into the DLLs.
  
 -Libav headers do not declare global data for Windows DLLs through the usual
 +FFmpeg headers do not declare global data for Windows DLLs through the usual
  dllexport/dllimport interface. Such data will be exported properly while
  building, but to use them in your MSVC++ code you will have to edit the
  appropriate headers and mark the data as dllimport. For example, in
diff --cc ffmpeg.c
+++ b/ffmpeg.c
@@@ -116,17 -104,17 +116,14 @@@ 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 int64_t input_files_ts_offset[MAX_FILES];
  static double *input_files_ts_scale[MAX_FILES] = {NULL};
- static AVCodec **input_codecs = NULL;
- static int nb_input_codecs = 0;
  static int nb_input_files_ts_scale[MAX_FILES] = {0};
  
  static AVFormatContext *output_files[MAX_FILES];
 -static AVDictionary *output_opts[MAX_FILES];
  static int nb_output_files = 0;
  
- static AVStreamMap *stream_maps = NULL;
+ static StreamMap *stream_maps = NULL;
  static int nb_stream_maps;
  
  /* first item specifies output metadata, second is input */
@@@ -344,17 -323,12 +337,18 @@@ typedef struct InputFile 
      int eof_reached;      /* true if eof reached */
      int ist_index;        /* index of first stream in ist_table */
      int buffer_size;      /* current total buffer size */
- } AVInputFile;
+     int64_t ts_offset;
+ } InputFile;
  
- static AVInputStream *input_streams = NULL;
 +#if HAVE_TERMIOS_H
 +
 +/* init terminal so that we can grab keys */
 +static struct termios oldtty;
 +#endif
 +
+ static InputStream *input_streams = NULL;
  static int         nb_input_streams = 0;
- static AVInputFile   *input_files   = NULL;
+ static InputFile   *input_files   = NULL;
  static int         nb_input_files   = 0;
  
  #if CONFIG_AVFILTER
@@@ -2002,18 -1937,16 +1995,18 @@@ static void parse_forced_key_frames(cha
   */
  static int transcode(AVFormatContext **output_files,
                       int nb_output_files,
-                      AVInputFile *input_files,
+                      InputFile *input_files,
                       int nb_input_files,
-                      AVStreamMap *stream_maps, int nb_stream_maps)
+                      StreamMap *stream_maps, int nb_stream_maps)
  {
 -    int ret = 0, i, j, k, n, nb_ostreams = 0;
 +    int ret = 0, i, j, k, n, nb_ostreams = 0, step;
 +
      AVFormatContext *is, *os;
      AVCodecContext *codec, *icodec;
-     AVOutputStream *ost, **ost_table = NULL;
-     AVInputStream *ist;
+     OutputStream *ost, **ost_table = NULL;
+     InputStream *ist;
      char error[1024];
 +    int key;
      int want_sdp = 1;
      uint8_t no_packet[MAX_FILES]={0};
      int no_packet_count=0;
          }
      }
  
-     ost_table = av_mallocz(sizeof(AVOutputStream *) * nb_ostreams);
+     ost_table = av_mallocz(sizeof(OutputStream *) * nb_ostreams);
      if (!ost_table)
          goto fail;
 +
 +    for(k=0;k<nb_output_files;k++) {
 +        os = output_files[k];
 +        for(i=0;i<os->nb_streams;i++,n++) {
 +            nb_streams[os->streams[i]->codec->codec_type]++;
 +        }
 +    }
 +    for(step=1<<30; step; step>>=1){
 +        int found_streams[AVMEDIA_TYPE_NB]={0};
 +        for(j=0; j<AVMEDIA_TYPE_NB; j++)
 +            nb_frame_threshold[j] += step;
 +
 +        for(j=0; j<nb_input_streams; j++) {
 +            int skip=0;
 +            ist = &input_streams[j];
 +            if(opt_programid){
 +                int pi,si;
 +                AVFormatContext *f= input_files[ ist->file_index ].ctx;
 +                skip=1;
 +                for(pi=0; pi<f->nb_programs; pi++){
 +                    AVProgram *p= f->programs[pi];
 +                    if(p->id == opt_programid)
 +                        for(si=0; si<p->nb_stream_indexes; si++){
 +                            if(f->streams[ p->stream_index[si] ] == ist->st)
 +                                skip=0;
 +                        }
 +                }
 +            }
 +            if (ist->discard && ist->st->discard != AVDISCARD_ALL && !skip
 +                && nb_frame_threshold[ist->st->codec->codec_type] <= ist->st->codec_info_nb_frames){
 +                found_streams[ist->st->codec->codec_type]++;
 +            }
 +        }
 +        for(j=0; j<AVMEDIA_TYPE_NB; j++)
 +            if(found_streams[j] < nb_streams[j])
 +                nb_frame_threshold[j] -= step;
 +    }
      n = 0;
      for(k=0;k<nb_output_files;k++) {
          os = output_files[k];
@@@ -3363,8 -3241,28 +3357,11 @@@ static int opt_input_file(const char *o
          opt_programid=0;
      }
  
-     ic->loop_input = loop_input;
+     if (loop_input) {
+         av_log(NULL, AV_LOG_WARNING, "-loop_input is deprecated, use -loop 1\n");
+         ic->loop_input = loop_input;
+     }
  
 -    /* Set AVCodecContext options so they will be seen by av_find_stream_info() */
 -    for (i = 0; i < ic->nb_streams; i++) {
 -        AVCodecContext *dec = ic->streams[i]->codec;
 -        switch (dec->codec_type) {
 -        case AVMEDIA_TYPE_AUDIO:
 -            set_context_opts(dec, avcodec_opts[AVMEDIA_TYPE_AUDIO],
 -                             AV_OPT_FLAG_AUDIO_PARAM | AV_OPT_FLAG_DECODING_PARAM,
 -                             NULL);
 -            break;
 -        case AVMEDIA_TYPE_VIDEO:
 -            set_context_opts(dec, avcodec_opts[AVMEDIA_TYPE_VIDEO],
 -                             AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_DECODING_PARAM,
 -                             NULL);
 -            break;
 -        }
 -    }
 -
      /* If not enough info to get the stream parameters, we decode the
         first frames to get it. (used in mpeg case for example) */
      ret = av_find_stream_info(ic);
  
          switch (dec->codec_type) {
          case AVMEDIA_TYPE_AUDIO:
-             input_codecs[nb_input_codecs-1] = avcodec_find_decoder_by_name(audio_codec_name);
-             if(!input_codecs[nb_input_codecs-1])
-                 input_codecs[nb_input_codecs-1] = 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, input_codecs[nb_input_codecs-1]);
+             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;
          case AVMEDIA_TYPE_VIDEO:
-             input_codecs[nb_input_codecs-1] = avcodec_find_decoder_by_name(video_codec_name);
-             if(!input_codecs[nb_input_codecs-1])
-                 input_codecs[nb_input_codecs-1] = avcodec_find_decoder(dec->codec_id);
-             set_context_opts(dec, avcodec_opts[AVMEDIA_TYPE_VIDEO], AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_DECODING_PARAM, input_codecs[nb_input_codecs-1]);
 -            ist->dec = avcodec_find_decoder_by_name(video_codec_name);
++            ist->dec= avcodec_find_decoder_by_name(video_codec_name);
++            if(!ist->dec)
++                ist->dec = avcodec_find_decoder(dec->codec_id);
+             set_context_opts(dec, avcodec_opts[AVMEDIA_TYPE_VIDEO], AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_DECODING_PARAM, ist->dec);
              rfps      = ic->streams[i]->r_frame_rate.num;
              rfps_base = ic->streams[i]->r_frame_rate.den;
              if (dec->lowres) {
          case AVMEDIA_TYPE_DATA:
              break;
          case AVMEDIA_TYPE_SUBTITLE:
-             input_codecs[nb_input_codecs-1] = avcodec_find_decoder_by_name(subtitle_codec_name);
-             if(!input_codecs[nb_input_codecs-1])
-                 input_codecs[nb_input_codecs-1] = avcodec_find_decoder(dec->codec_id);
+             ist->dec = avcodec_find_decoder_by_name(subtitle_codec_name);
++            if(!ist->dec)
++                ist->dec = avcodec_find_decoder(dec->codec_id);
              if(subtitle_disable)
                  st->discard = AVDISCARD_ALL;
              break;
      input_files = grow_array(input_files, sizeof(*input_files), &nb_input_files, nb_input_files + 1);
      input_files[nb_input_files - 1].ctx        = ic;
      input_files[nb_input_files - 1].ist_index  = nb_input_streams - ic->nb_streams;
+     input_files[nb_input_files - 1].ts_offset  = input_ts_offset - (copy_ts ? 0 : timestamp);
  
 +    top_field_first = -1;
 +    video_channel = 0;
      frame_rate    = (AVRational){0, 0};
      frame_pix_fmt = PIX_FMT_NONE;
      frame_height = 0;
@@@ -3990,18 -3888,13 +3983,22 @@@ static int opt_output_file(const char *
          }
      }
  
 +    memset(ap, 0, sizeof(*ap));
 +    if (av_set_parameters(oc, ap) < 0) {
 +        fprintf(stderr, "%s: Invalid encoding parameters\n",
 +                oc->filename);
 +        ffmpeg_exit(1);
 +    }
 +
      oc->preload= (int)(mux_preload*AV_TIME_BASE);
      oc->max_delay= (int)(mux_max_delay*AV_TIME_BASE);
-     oc->loop_output = loop_output;
 +
 +    set_context_opts(oc, avformat_opts, AV_OPT_FLAG_ENCODING_PARAM, NULL);
+     if (loop_output >= 0) {
+         av_log(NULL, AV_LOG_WARNING, "-loop_output is deprecated, use -loop\n");
+         oc->loop_output = loop_output;
+     }
+     oc->flags |= AVFMT_FLAG_NONBLOCK;
  
      frame_rate    = (AVRational){0, 0};
      frame_width   = 0;
@@@ -549,7 -535,8 +549,8 @@@ OBJS-$(CONFIG_MATROSKA_AUDIO_MUXER)    
  OBJS-$(CONFIG_MATROSKA_DEMUXER)        += mpeg4audio.o mpegaudiodata.o
  OBJS-$(CONFIG_MATROSKA_MUXER)          += xiph.o mpeg4audio.o \
                                            flacdec.o flacdata.o flac.o \
 -                                          mpegaudiodata.o
 +                                          mpegaudiodata.o vorbis_data.o
+ OBJS-$(CONFIG_MP3_MUXER)               += mpegaudiodata.o mpegaudiodecheader.o
  OBJS-$(CONFIG_MOV_DEMUXER)             += mpeg4audio.o mpegaudiodata.o
  OBJS-$(CONFIG_MOV_MUXER)               += mpeg4audio.o mpegaudiodata.o
  OBJS-$(CONFIG_MPEGTS_MUXER)            += mpegvideo.o mpeg4audio.o
@@@ -240,50 -429,179 +429,179 @@@ static const uint8_t dnxhd_1238_ac_run_
  };
  
  static const uint8_t dnxhd_1238_ac_index_flag[257] = {
-     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+     0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+     1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1,
+     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
+     0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+     0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+     1,
  };
  
 -static const uint16_t dnxhd_1238_run_codes[62] = {
 +static const uint16_t dnxhd_1235_1238_1241_run_codes[62] = {
-     0, 4, 10, 11, 24, 25, 26, 27, 56, 57, 58, 59, 120, 242, 486, 487, 488, 489, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023,
+        0,    4,   10,   11,   24,   25,   26,   27,
+       56,   57,   58,   59,  120,  242,  486,  487,
+      488,  489,  980,  981,  982,  983,  984,  985,
+      986,  987,  988,  989,  990,  991,  992,  993,
+      994,  995,  996,  997,  998,  999, 1000, 1001,
+     1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009,
+     1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017,
+     1018, 1019, 1020, 1021, 1022, 1023,
  };
  
 -static const uint8_t dnxhd_1238_run_bits[62] = {
 +static const uint8_t dnxhd_1235_1238_1241_run_bits[62] = {
-     1, 3, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 8, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+      1,  3,  4,  4,  5,  5,  5,  5,  6,  6,  6,  6,  7,  8,  9,  9,
+      9,  9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+     10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+     10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
  };
  
  static const uint8_t dnxhd_1238_run[62] = {
-     1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 20, 21, 17, 18, 19, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
+      1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
+     20, 21, 17, 18, 19, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
+     33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
+     49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
  };
  
 -static const uint8_t dnxhd_1241_dc_codes[14] = {
 +static const uint8_t dnxhd_1235_1241_dc_codes[14] = {
      10, 62, 11, 12, 13, 0, 1, 2, 3, 4, 14, 30, 126, 127,
  };
  
 -static const uint8_t dnxhd_1241_dc_bits[14] = {
 +static const uint8_t dnxhd_1235_1241_dc_bits[14] = {
      4, 6, 4, 4, 4, 3, 3, 3, 3, 3, 4, 5, 7, 7,
  };
 -static const uint16_t dnxhd_1241_ac_codes[257] = {
-     0, 1, 4, 10, 11, 24, 25, 26, 54, 55, 56, 57, 116, 117, 118, 119, 240, 241, 242, 243, 244, 245, 492, 493, 494, 495, 496, 497, 498, 998, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 4054, 4055, 4056, 4057, 4058, 4059, 4060, 4061, 4062, 4063, 4064, 4065, 4066, 4067, 4068, 4069, 8140, 8141, 8142, 8143, 8144, 8145, 8146, 8147, 8148, 8149, 8150, 8151, 8152, 8153, 8154, 8155, 8156, 8157, 16316, 16317, 16318, 16319, 16320, 16321, 16322, 16323, 16324, 16325, 16326, 16327, 16328, 16329, 16330, 16331, 16332, 16333, 16334, 16335, 16336, 16337, 32676, 32677, 32678, 32679, 32680, 32681, 32682, 32683, 32684, 32685, 32686, 32687, 32688, 32689, 32690, 32691, 32692, 32693, 32694, 32695, 32696, 32697, 32698, 32699, 32700, 32701, 32702, 32703, 32704, 32705, 32706, 32707, 32708, 65418, 65419, 65420, 65421, 65422, 65423, 65424, 65425, 65426, 65427, 65428, 65429, 65430, 65431, 65432, 65433, 65434, 65435, 65436, 65437, 65438, 65439, 65440, 65441, 65442, 65443, 65444, 65445, 65446, 65447, 65448, 65449, 65450, 65451, 65452, 65453, 65454, 65455, 65456, 65457, 65458, 65459, 65460, 65461, 65462, 65463, 65464, 65465, 65466, 65467, 65468, 65469, 65470, 65471, 65472, 65473, 65474, 65475, 65476, 65477, 65478, 65479, 65480, 65481, 65482, 65483, 65484, 65485, 65486, 65487, 65488, 65489, 65490, 65491, 65492, 65493, 65494, 65495, 65496, 65497, 65498, 65499, 65500, 65501, 65502, 65503, 65504, 65505, 65506, 65507, 65508, 65509, 65510, 65511, 65512, 65513, 65514, 65515, 65516, 65517, 65518, 65519, 65520, 65521, 65522, 65523, 65524, 65525, 65526, 65527, 65528, 65529, 65530, 65531, 65532, 65533, 65534, 65535,
 +static const uint16_t dnxhd_1235_1241_ac_codes[257] = {
+         0,     1,     4,    10,    11,    24,    25,    26,
+        54,    55,    56,    57,   116,   117,   118,   119,
+       240,   241,   242,   243,   244,   245,   492,   493,
+       494,   495,   496,   497,   498,   998,   999,  1000,
+      1001,  1002,  1003,  1004,  1005,  1006,  1007,  2016,
+      2017,  2018,  2019,  2020,  2021,  2022,  2023,  2024,
+      2025,  2026,  4054,  4055,  4056,  4057,  4058,  4059,
+      4060,  4061,  4062,  4063,  4064,  4065,  4066,  4067,
+      4068,  4069,  8140,  8141,  8142,  8143,  8144,  8145,
+      8146,  8147,  8148,  8149,  8150,  8151,  8152,  8153,
+      8154,  8155,  8156,  8157, 16316, 16317, 16318, 16319,
+     16320, 16321, 16322, 16323, 16324, 16325, 16326, 16327,
+     16328, 16329, 16330, 16331, 16332, 16333, 16334, 16335,
+     16336, 16337, 32676, 32677, 32678, 32679, 32680, 32681,
+     32682, 32683, 32684, 32685, 32686, 32687, 32688, 32689,
+     32690, 32691, 32692, 32693, 32694, 32695, 32696, 32697,
+     32698, 32699, 32700, 32701, 32702, 32703, 32704, 32705,
+     32706, 32707, 32708, 65418, 65419, 65420, 65421, 65422,
+     65423, 65424, 65425, 65426, 65427, 65428, 65429, 65430,
+     65431, 65432, 65433, 65434, 65435, 65436, 65437, 65438,
+     65439, 65440, 65441, 65442, 65443, 65444, 65445, 65446,
+     65447, 65448, 65449, 65450, 65451, 65452, 65453, 65454,
+     65455, 65456, 65457, 65458, 65459, 65460, 65461, 65462,
+     65463, 65464, 65465, 65466, 65467, 65468, 65469, 65470,
+     65471, 65472, 65473, 65474, 65475, 65476, 65477, 65478,
+     65479, 65480, 65481, 65482, 65483, 65484, 65485, 65486,
+     65487, 65488, 65489, 65490, 65491, 65492, 65493, 65494,
+     65495, 65496, 65497, 65498, 65499, 65500, 65501, 65502,
+     65503, 65504, 65505, 65506, 65507, 65508, 65509, 65510,
+     65511, 65512, 65513, 65514, 65515, 65516, 65517, 65518,
+     65519, 65520, 65521, 65522, 65523, 65524, 65525, 65526,
+     65527, 65528, 65529, 65530, 65531, 65532, 65533, 65534,
+     65535,
  };
  
 -static const uint8_t dnxhd_1241_ac_bits[257] = {
 +static const uint8_t dnxhd_1235_1241_ac_bits[257] = {
-     2, 2, 3, 4, 4, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+      2,  2,  3,  4,  4,  5,  5,  5,  6,  6,  6,  6,  7,  7,  7,  7,
+      8,  8,  8,  8,  8,  8,  9,  9,  9,  9,  9,  9,  9, 10, 10, 10,
+     10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11,
+     11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
+     12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
+     13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+     14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15,
+     15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+     15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16,
+     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+     16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
+     16,
  };
  
 -static const uint8_t dnxhd_1241_ac_level[257] = {
 +static const uint8_t dnxhd_1235_1241_ac_level[257] = {
-     1, 1, 2, 3, 0, 4, 5, 2, 6, 7, 8, 3, 9, 10, 11, 4, 12, 13, 14, 15, 16, 5, 17, 18, 19, 20, 21, 6, 7, 22, 23, 24, 25, 26, 27, 28, 29, 8, 9, 30, 31, 32, 33, 34, 35, 36, 37, 38, 10, 11, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 12, 13, 14, 15, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 1, 16, 17, 18, 19, 64, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 20, 21, 22, 23, 24, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 25, 26, 27, 28, 29, 30, 31, 32, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
+      1,  1,  2,  3,  0,  4,  5,  2,  6,  7,  8,  3,  9, 10, 11,  4,
+     12, 13, 14, 15, 16,  5, 17, 18, 19, 20, 21,  6,  7, 22, 23, 24,
+     25, 26, 27, 28, 29,  8,  9, 30, 31, 32, 33, 34, 35, 36, 37, 38,
+     10, 11, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 12, 13,
+     14, 15, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,  1,
+     16, 17, 18, 19, 64,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12,
+     13, 14, 15, 16, 17, 20, 21, 22, 23, 24, 18, 19, 20, 21, 22, 23,
+     24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
+     40, 41, 42, 25, 26, 27, 28, 29, 30, 31, 32, 43, 44, 45, 46, 47,
+     48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
+     64, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
+     48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
+     64,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,
+     16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
+     32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
+     48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
+     64,
  };
  
 -static const uint8_t dnxhd_1241_ac_run_flag[257] = {
 +static const uint8_t dnxhd_1235_1241_ac_run_flag[257] = {
-     0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+     0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1,
+     0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0,
+     0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+     1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,
+     1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+     1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+     0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+     0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+     0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+     1,
  };
  
 -static const uint8_t dnxhd_1241_ac_index_flag[257] = {
 +static const uint8_t dnxhd_1235_1241_ac_index_flag[257] = {
-     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
+     0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+     1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1,
+     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+     1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1,
+     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+     1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+     0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+     1,
  };
  
 -static const uint8_t dnxhd_1241_run[62] = {
 +static const uint8_t dnxhd_1235_1241_run[62] = {
-     1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 18, 20, 17, 19, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
+      1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
+     18, 20, 17, 19, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
+     33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
+     49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
  };
  
  static const uint8_t dnxhd_1251_dc_codes[12] = {
Simple merge
Simple merge
Simple merge
@@@ -100,11 -100,11 +100,11 @@@ x11grab_read_header(AVFormatContext *s1
      int ret = 0;
      AVRational framerate;
  
 -    param = av_strdup(s1->filename);
 -    offset = strchr(param, '+');
 +    dpyname = av_strdup(s1->filename);
 +    offset = strchr(dpyname, '+');
      if (offset) {
          sscanf(offset, "%d,%d", &x_off, &y_off);
-         x11grab->nomouse= strstr(offset, "nomouse");
+         x11grab->draw_mouse = !strstr(offset, "nomouse");
          *offset= 0;
      }
  
@@@ -765,12 -745,13 +769,17 @@@ typedef struct AVFormatContext 
  #define AVFMT_FLAG_RTP_HINT     0x0040 ///< Deprecated, use the -movflags rtphint muxer specific AVOption instead
  #endif
  #define AVFMT_FLAG_CUSTOM_IO    0x0080 ///< The caller has supplied a custom AVIOContext, don't avio_close() it.
 +#define AVFMT_FLAG_MP4A_LATM    0x8000 ///< Enable RTP MP4A-LATM payload
 +#define AVFMT_FLAG_SORT_DTS    0x10000 ///< try to interleave outputted packets by dts (using this flag can slow demuxing down)
 +#define AVFMT_FLAG_PRIV_OPT    0x20000 ///< Enable use of private options by delaying codec open (this could be made default once all code is converted)
 +#define AVFMT_FLAG_KEEP_SIDE_DATA 0x40000 ///< Dont merge side data but keep it seperate.
  
-     int loop_input;
+ #if FF_API_LOOP_INPUT
+     /**
+      * @deprecated, use the 'loop' img2 demuxer private option.
+      */
+     attribute_deprecated int loop_input;
+ #endif
  
      /**
       * decoding: size of data to probe; encoding: unused.
Simple merge
Simple merge
Simple merge
  #include "id3v2.h"
  #include "rawenc.h"
  #include "libavutil/avstring.h"
+ #include "libavcodec/mpegaudio.h"
+ #include "libavcodec/mpegaudiodata.h"
+ #include "libavcodec/mpegaudiodecheader.h"
  #include "libavutil/intreadwrite.h"
  #include "libavutil/opt.h"
 +#include "libavcodec/mpegaudio.h"
 +#include "libavcodec/mpegaudiodata.h"
 +#include "libavcodec/mpegaudiodecheader.h"
 +#include "libavformat/avio_internal.h"
  #include "libavutil/dict.h"
  
  static int id3v1_set_string(AVFormatContext *s, const char *key,
@@@ -132,15 -132,31 +136,39 @@@ static int id3v2_put_ttag(AVFormatConte
      return len + ID3v2_HEADER_SIZE;
  }
  
 -    int64_t nb_frames_offset;
++#define VBR_NUM_BAGS 400
++#define VBR_TOC_SIZE 100
+ typedef struct MP3Context {
+     const AVClass *class;
+     int id3v2_version;
 -static int mp3_write_trailer(struct AVFormatContext *s)
++    int64_t frames_offset;
++    int32_t frames;
++    int32_t size;
++    uint32_t want;
++    uint32_t seen;
++    uint32_t pos;
++    uint64_t bag[VBR_NUM_BAGS];
+ } MP3Context;
 +static int mp2_write_trailer(struct AVFormatContext *s)
  {
      uint8_t buf[ID3v1_TAG_SIZE];
+     MP3Context *mp3 = s->priv_data;
  
      /* write the id3v1 tag */
      if (id3v1_create_tag(s, buf) > 0) {
          avio_write(s->pb, buf, ID3v1_TAG_SIZE);
-         avio_flush(s->pb);
      }
 -    if (mp3 && mp3->nb_frames_offset) {
 -        avio_seek(s->pb, mp3->nb_frames_offset, SEEK_SET);
+     /* write number of frames */
++    if (mp3 && mp3->frames_offset) {
++        avio_seek(s->pb, mp3->frames_offset, SEEK_SET);
+         avio_wb32(s->pb, s->streams[0]->nb_frames);
+         avio_seek(s->pb, 0, SEEK_END);
+     }
+     avio_flush(s->pb);
      return 0;
  }
  
Simple merge
Simple merge
@@@ -77,7 -75,8 +77,8 @@@ OBJS-$(ARCH_ARM) += arm/cpu.
  OBJS-$(ARCH_PPC) += ppc/cpu.o
  OBJS-$(ARCH_X86) += x86/cpu.o
  
- TESTPROGS = adler32 aes base64 cpu crc des eval lls md5 pca sha tree
+ TESTPROGS = adler32 aes avstring base64 cpu crc des eval file lfg lls \
 -            md5 opt parseutils rational sha tree
++            md5 opt pca parseutils rational sha tree
  TESTPROGS-$(HAVE_LZO1X_999_COMPRESS) += lzo
  
  DIRS = arm bfin sh4 x86
Simple merge
diff --cc libavutil/lls.c
Simple merge
diff --cc libavutil/opt.c
Simple merge