Merge remote-tracking branch 'qatar/master'
authorMichael Niedermayer <michaelni@gmx.at>
Thu, 14 Jul 2011 18:44:58 +0000 (20:44 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Thu, 14 Jul 2011 18:44:58 +0000 (20:44 +0200)
* qatar/master:
  APIchanges: fill in missing hashes and dates.
  Add an APIChanges entry and bump minor versions for recent changes.
  ffmpeg: print the low bitrate warning after the codec is openend.
  doxygen: Move function documentation into the macro generating the function.
  doxygen: Make sure parameter names match between .c and .h files.
  h264: move fill_decode_neighbors()/fill_decode_caches() to h264_mvpred.h
  H.264: Add more x86 assembly for 10-bit H.264 predict functions
  lavf: fix invalid reads in avformat_find_stream_info()
  cmdutils: replace opt_default with opt_default2() and remove set_context_opts
  ffmpeg: use new avcodec_open2 and avformat_find_stream_info API.
  ffplay: use new avcodec_open2 and avformat_find_stream_info API.
  cmdutils: store all codec options in one dict instead of video/audio/sub
  ffmpeg: check experimental flag after codec is opened.
  ffmpeg: do not set GLOBAL_HEADER flag in the options context

Conflicts:
cmdutils.c
doc/APIchanges
ffmpeg.c
ffplay.c
libavcodec/version.h
libavformat/version.h
libswscale/swscale_unscaled.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
25 files changed:
1  2 
Doxyfile
cmdutils.c
cmdutils.h
doc/APIchanges
doc/ffmpeg.texi
ffmpeg.c
ffplay.c
libavcodec/aacps.c
libavcodec/h264.h
libavcodec/h264_mvpred.h
libavcodec/lpc.c
libavcodec/msmpeg4.c
libavcodec/version.h
libavcodec/x86/h264_intrapred_init.c
libavfilter/graphparser.c
libavformat/rdt.h
libavformat/rtsp.h
libavformat/url.h
libavformat/utils.c
libavformat/version.h
libavutil/parseutils.c
libavutil/parseutils.h
libswscale/swscale.h
libswscale/swscale_unscaled.c
libswscale/utils.c

diff --cc Doxyfile
Simple merge
diff --cc cmdutils.c
@@@ -332,82 -306,7 +308,147 @@@ int opt_default(const char *opt, const 
      fprintf(stderr, "Unrecognized option '%s'\n", opt);
      return AVERROR_OPTION_NOT_FOUND;
  }
++#if 0
++<<<<<<< HEAD
 +int opt_default(const char *opt, const char *arg){
 +    int type;
 +    int ret= 0;
 +    const AVOption *o= NULL;
 +    int opt_types[]={AV_OPT_FLAG_VIDEO_PARAM, AV_OPT_FLAG_AUDIO_PARAM, 0, AV_OPT_FLAG_SUBTITLE_PARAM, 0};
 +    AVCodec *p = NULL;
 +    AVOutputFormat *oformat = NULL;
 +    AVInputFormat *iformat = NULL;
 +
 +    while ((p = av_codec_next(p))) {
 +        const AVClass *c = p->priv_class;
 +        if (c && av_find_opt(&c, opt, NULL, 0, 0))
 +            break;
 +    }
 +    if (p)
 +        goto out;
 +    while ((oformat = av_oformat_next(oformat))) {
 +        const AVClass *c = oformat->priv_class;
 +        if (c && av_find_opt(&c, opt, NULL, 0, 0))
 +            break;
 +    }
 +    if (oformat)
 +        goto out;
 +    while ((iformat = av_iformat_next(iformat))) {
 +        const AVClass *c = iformat->priv_class;
 +        if (c && av_find_opt(&c, opt, NULL, 0, 0))
 +            break;
 +    }
 +    if (iformat)
 +        goto out;
 +
 +    for(type=0; *avcodec_opts && type<AVMEDIA_TYPE_NB && ret>= 0; type++){
 +        const AVOption *o2 = av_opt_find(avcodec_opts[0], opt, NULL, opt_types[type], 0);
 +        if(o2)
 +            ret = av_set_string3(avcodec_opts[type], opt, arg, 1, &o);
 +    }
 +    if(!o && avformat_opts)
 +        ret = av_set_string3(avformat_opts, opt, arg, 1, &o);
 +    if(!o && sws_opts)
 +        ret = av_set_string3(sws_opts, opt, arg, 1, &o);
 +    if(!o){
 +        if (opt[0] == 'a' && avcodec_opts[AVMEDIA_TYPE_AUDIO])
 +            ret = av_set_string3(avcodec_opts[AVMEDIA_TYPE_AUDIO], opt+1, arg, 1, &o);
 +        else if(opt[0] == 'v' && avcodec_opts[AVMEDIA_TYPE_VIDEO])
 +            ret = av_set_string3(avcodec_opts[AVMEDIA_TYPE_VIDEO], opt+1, arg, 1, &o);
 +        else if(opt[0] == 's' && avcodec_opts[AVMEDIA_TYPE_SUBTITLE])
 +            ret = av_set_string3(avcodec_opts[AVMEDIA_TYPE_SUBTITLE], opt+1, arg, 1, &o);
 +        if (ret >= 0)
 +            opt += 1;
 +    }
 +    if (o && ret < 0) {
 +        fprintf(stderr, "Invalid value '%s' for option '%s'\n", arg, opt);
 +        exit(1);
 +    }
 +    if (!o) {
 +        fprintf(stderr, "Unrecognized option '%s'\n", opt);
 +        exit(1);
 +    }
 +
 + out:
 +    if ((ret = opt_default2(opt, arg)) < 0)
 +        return ret;
 +
 +//    av_log(NULL, AV_LOG_ERROR, "%s:%s: %f 0x%0X\n", opt, arg, av_get_double(avcodec_opts, opt, NULL), (int)av_get_int(avcodec_opts, opt, NULL));
 +
 +    opt_values= av_realloc(opt_values, sizeof(void*)*(opt_name_count+1));
 +    opt_values[opt_name_count] = av_strdup(arg);
 +    opt_names= av_realloc(opt_names, sizeof(void*)*(opt_name_count+1));
 +    opt_names[opt_name_count++] = av_strdup(opt);
 +
 +    if ((*avcodec_opts && avcodec_opts[0]->debug) || (avformat_opts && avformat_opts->debug))
 +        av_log_set_level(AV_LOG_DEBUG);
 +    return 0;
 +}
 +
++||||||| merged common ancestors
++int opt_default(const char *opt, const char *arg){
++    int type;
++    int ret= 0;
++    const AVOption *o= NULL;
++    int opt_types[]={AV_OPT_FLAG_VIDEO_PARAM, AV_OPT_FLAG_AUDIO_PARAM, 0, AV_OPT_FLAG_SUBTITLE_PARAM, 0};
++
++    for(type=0; *avcodec_opts && type<AVMEDIA_TYPE_NB && ret>= 0; type++){
++        const AVOption *o2 = av_opt_find(avcodec_opts[0], opt, NULL, opt_types[type], 0);
++        if(o2)
++            ret = av_set_string3(avcodec_opts[type], opt, arg, 1, &o);
++    }
++    if(!o && avformat_opts)
++        ret = av_set_string3(avformat_opts, opt, arg, 1, &o);
++    if(!o && sws_opts)
++        ret = av_set_string3(sws_opts, opt, arg, 1, &o);
++    if(!o){
++        if (opt[0] == 'a' && avcodec_opts[AVMEDIA_TYPE_AUDIO])
++            ret = av_set_string3(avcodec_opts[AVMEDIA_TYPE_AUDIO], opt+1, arg, 1, &o);
++        else if(opt[0] == 'v' && avcodec_opts[AVMEDIA_TYPE_VIDEO])
++            ret = av_set_string3(avcodec_opts[AVMEDIA_TYPE_VIDEO], opt+1, arg, 1, &o);
++        else if(opt[0] == 's' && avcodec_opts[AVMEDIA_TYPE_SUBTITLE])
++            ret = av_set_string3(avcodec_opts[AVMEDIA_TYPE_SUBTITLE], opt+1, arg, 1, &o);
++    }
++    if (o && ret < 0) {
++        fprintf(stderr, "Invalid value '%s' for option '%s'\n", arg, opt);
++        exit(1);
++    }
++    if (!o) {
++        AVCodec *p = NULL;
++        AVOutputFormat *oformat = NULL;
++        while ((p=av_codec_next(p))){
++            const AVClass *c = p->priv_class;
++            if(c && av_opt_find(&c, opt, NULL, 0, 0))
++                break;
++        }
++        if (!p) {
++            while ((oformat = av_oformat_next(oformat))) {
++                const AVClass *c = oformat->priv_class;
++                if (c && av_opt_find(&c, opt, NULL, 0, 0))
++                    break;
++            }
++        }
++    }
++    if ((ret = opt_default2(opt, arg)) < 0)
++        return ret;
++
++//    av_log(NULL, AV_LOG_ERROR, "%s:%s: %f 0x%0X\n", opt, arg, av_get_double(avcodec_opts, opt, NULL), (int)av_get_int(avcodec_opts, opt, NULL));
++
++    //FIXME we should always use avcodec_opts, ... for storing options so there will not be any need to keep track of what i set over this
++    opt_values= av_realloc(opt_values, sizeof(void*)*(opt_name_count+1));
++    opt_values[opt_name_count]= o ? NULL : av_strdup(arg);
++    opt_names= av_realloc(opt_names, sizeof(void*)*(opt_name_count+1));
++    opt_names[opt_name_count++]= o ? o->name : av_strdup(opt);
++
++    if ((*avcodec_opts && avcodec_opts[0]->debug) || (avformat_opts && avformat_opts->debug))
++        av_log_set_level(AV_LOG_DEBUG);
++    return 0;
++}
++
++=======
++>>>>>>> qatar/master
++#endif
  int opt_loglevel(const char *opt, const char *arg)
  {
      const struct { const char *name; int level; } log_levels[] = {
@@@ -934,3 -778,112 +922,48 @@@ FILE *get_preset_file(char *filename, s
  
      return f;
  }
 -#if CONFIG_AVFILTER
 -
 -static int ffsink_init(AVFilterContext *ctx, const char *args, void *opaque)
 -{
 -    FFSinkContext *priv = ctx->priv;
 -
 -    if (!opaque)
 -        return AVERROR(EINVAL);
 -    *priv = *(FFSinkContext *)opaque;
 -
 -    return 0;
 -}
 -
 -static void null_end_frame(AVFilterLink *inlink) { }
 -
 -static int ffsink_query_formats(AVFilterContext *ctx)
 -{
 -    FFSinkContext *priv = ctx->priv;
 -    enum PixelFormat pix_fmts[] = { priv->pix_fmt, PIX_FMT_NONE };
 -
 -    avfilter_set_common_formats(ctx, avfilter_make_format_list(pix_fmts));
 -    return 0;
 -}
 -
 -AVFilter ffsink = {
 -    .name      = "ffsink",
 -    .priv_size = sizeof(FFSinkContext),
 -    .init      = ffsink_init,
 -
 -    .query_formats = ffsink_query_formats,
 -
 -    .inputs    = (AVFilterPad[]) {{ .name          = "default",
 -                                    .type          = AVMEDIA_TYPE_VIDEO,
 -                                    .end_frame     = null_end_frame,
 -                                    .min_perms     = AV_PERM_READ, },
 -                                  { .name = NULL }},
 -    .outputs   = (AVFilterPad[]) {{ .name = NULL }},
 -};
 -
 -int get_filtered_video_frame(AVFilterContext *ctx, AVFrame *frame,
 -                             AVFilterBufferRef **picref_ptr, AVRational *tb)
 -{
 -    int ret;
 -    AVFilterBufferRef *picref;
 -
 -    if ((ret = avfilter_request_frame(ctx->inputs[0])) < 0)
 -        return ret;
 -    if (!(picref = ctx->inputs[0]->cur_buf))
 -        return AVERROR(ENOENT);
 -    *picref_ptr = picref;
 -    ctx->inputs[0]->cur_buf = NULL;
 -    *tb = ctx->inputs[0]->time_base;
 -
 -    memcpy(frame->data,     picref->data,     sizeof(frame->data));
 -    memcpy(frame->linesize, picref->linesize, sizeof(frame->linesize));
 -    frame->interlaced_frame = picref->video->interlaced;
 -    frame->top_field_first  = picref->video->top_field_first;
 -    frame->key_frame        = picref->video->key_frame;
 -    frame->pict_type        = picref->video->pict_type;
 -
 -    return 1;
 -}
 -
 -#endif /* CONFIG_AVFILTER */
+ AVDictionary *filter_codec_opts(AVDictionary *opts, enum CodecID codec_id, int encoder)
+ {
+     AVDictionary    *ret = NULL;
+     AVDictionaryEntry *t = NULL;
+     AVCodec       *codec = encoder ? avcodec_find_encoder(codec_id) : avcodec_find_decoder(codec_id);
+     int            flags = encoder ? AV_OPT_FLAG_ENCODING_PARAM : AV_OPT_FLAG_DECODING_PARAM;
+     char          prefix = 0;
+     if (!codec)
+         return NULL;
+     switch (codec->type) {
+     case AVMEDIA_TYPE_VIDEO:    prefix = 'v'; flags |= AV_OPT_FLAG_VIDEO_PARAM;    break;
+     case AVMEDIA_TYPE_AUDIO:    prefix = 'a'; flags |= AV_OPT_FLAG_AUDIO_PARAM;    break;
+     case AVMEDIA_TYPE_SUBTITLE: prefix = 's'; flags |= AV_OPT_FLAG_SUBTITLE_PARAM; break;
+     }
+     while (t = av_dict_get(opts, "", t, AV_DICT_IGNORE_SUFFIX)) {
+         if (av_opt_find(avcodec_opts[0], t->key, NULL, flags, 0) ||
+             (codec && codec->priv_class && av_opt_find(&codec->priv_class, t->key, NULL, flags, 0)))
+             av_dict_set(&ret, t->key, t->value, 0);
+         else if (t->key[0] == prefix && av_opt_find(avcodec_opts[0], t->key+1, NULL, flags, 0))
+             av_dict_set(&ret, t->key+1, t->value, 0);
+     }
+     return ret;
+ }
+ AVDictionary **setup_find_stream_info_opts(AVFormatContext *s)
+ {
+     int i;
+     AVDictionary **opts;
+     if (!s->nb_streams)
+         return NULL;
+     opts = av_mallocz(s->nb_streams * sizeof(*opts));
+     if (!opts) {
+         av_log(NULL, AV_LOG_ERROR, "Could not alloc memory for stream options.\n");
+         return NULL;
+     }
+     for (i = 0; i < s->nb_streams; i++)
+         opts[i] = filter_codec_opts(codec_opts, s->streams[i]->codec->codec_id, 0);
+     return opts;
+ }
diff --cc cmdutils.h
@@@ -151,9 -146,17 +150,17 @@@ void show_help_options(const OptionDef 
   * not have to be processed.
   */
  void parse_options(int argc, char **argv, const OptionDef *options,
 -                   void (* parse_arg_function)(const char*));
 +                   int (* parse_arg_function)(const char *opt, const char *arg));
  
- void set_context_opts(void *ctx, void *opts_ctx, int flags, AVCodec *codec);
+ /**
+  * Filter out options for given codec.
+  */
+ AVDictionary *filter_codec_opts(AVDictionary *opts, enum CodecID codec_id, int encoder);
+ /*
+  * Setup AVCodecContext options for avformat_find_stream_info.
+  */
+ AVDictionary **setup_find_stream_info_opts(AVFormatContext *s);
  
  /**
   * Print an error message to stderr, indicating filename and a human
diff --cc doc/APIchanges
@@@ -13,46 -13,16 +13,52 @@@ libavutil:   2011-04-1
  
  API changes, most recent first:
  
- 2011-06-xx - xxxxxxx - lavu 51.8.0 - attributes.h
+ 2011-07-10 - a67c061 - lavf 53.3.0
+   Add avformat_find_stream_info(), deprecate av_find_stream_info().
+ 2011-07-10 - 0b950fe - lavc 53.6.0
+   Add avcodec_open2(), deprecate avcodec_open().
 +2011-07-01 - b442ca6 - lavf 53.5.0 - avformat.h
 +  Add function av_get_output_timestamp().
 +
 +2011-06-28 - 5129336 - lavu 51.11.0 - avutil.h
 +  Define the AV_PICTURE_TYPE_NONE value in AVPictureType enum.
 +
 +2011-06-19 - xxxxxxx - lavfi 2.23.0 - avfilter.h
 +  Add layout negotiation fields and helper functions.
 +
 +  In particular, add in_chlayouts and out_chlayouts to AVFilterLink,
 +  and the functions:
 +  avfilter_set_common_sample_formats()
 +  avfilter_set_common_channel_layouts()
 +  avfilter_all_channel_layouts()
 +
 +2011-06-19 - xxxxxxx - lavfi 2.22.0 - AVFilterFormats
 +  Change type of AVFilterFormats.formats from int * to int64_t *,
 +  and update formats handling API accordingly.
 +
 +  avfilter_make_format_list() still takes a int32_t array and converts
 +  it to int64_t. A new function, avfilter_make_format64_list(), that
 +  takes int64_t arrays has been added.
 +
 +2011-06-19 - xxxxxxx - lavfi 2.21.0 - vsink_buffer.h
 +  Add video sink buffer and vsink_buffer.h public header.
 +
 +2011-06-12 - xxxxxxx - lavfi 2.18.0 - avcodec.h
 +  Add avfilter_get_video_buffer_ref_from_frame() function in
 +  libavfilter/avcodec.h.
 +
 +2011-06-12 - xxxxxxx - lavfi 2.17.0 - avfiltergraph.h
 +  Add avfilter_inout_alloc() and avfilter_inout_free() functions.
 +
 +2011-06-12 - xxxxxxx - lavfi 2.16.0 - avfilter_graph_parse()
 +  Change avfilter_graph_parse() signature.
 +
+ 2011-06-23 - 67e9ae1 - lavu 51.8.0 - attributes.h
    Add av_printf_format().
  
- 2011-06-xx - xxxxxxx - lavf 53.2.0 - avformat.h
+ 2011-06-16 - 05e84c9, 25de595 - lavf 53.2.0 - avformat.h
    Add avformat_open_input and avformat_write_header().
    Deprecate av_open_input_stream, av_open_input_file,
    AVFormatParameters and av_write_header.
    Deprecate av_find_opt().
    Add AV_DICT_APPEND flag.
  
- 2011-06-xx - xxxxxxx - lavu 51.6.0 - opt.h
+ 2011-06-10 - cb7c11c - lavu 51.6.0 - opt.h
    Add av_opt_flag_is_set().
  
 -2011-06-08 - d9f80ea - lavu 51.5.0 - AVMetadata
 +2011-06-10 - c381960 - lavfi 2.15.0 - avfilter_get_audio_buffer_ref_from_arrays
 +  Add avfilter_get_audio_buffer_ref_from_arrays() to avfilter.h.
 +
 +2011-06-09 - d9f80ea - lavu 51.8.0 - AVMetadata
    Move AVMetadata from lavf to lavu and rename it to
    AVDictionary -- new installed header dict.h.
    All av_metadata_* functions renamed to av_dict_*.
diff --cc doc/ffmpeg.texi
Simple merge
diff --cc ffmpeg.c
+++ b/ffmpeg.c
@@@ -2433,7 -2369,18 +2461,7 @@@ static int transcode(AVFormatContext **
                  ret = AVERROR(EINVAL);
                  goto dump_format;
              }
-             if (avcodec_open(ist->st->codec, codec) < 0) {
 -
 -            /* update requested sample format for the decoder based on the
 -               corresponding encoder sample format */
 -            for (j = 0; j < nb_ostreams; j++) {
 -                ost = ost_table[j];
 -                if (ost->source_index == i) {
 -                    update_sample_fmt(ist->st->codec, codec, ost->st->codec);
 -                    break;
 -                }
 -            }
 -
+             if (avcodec_open2(ist->st->codec, codec, &ist->opts) < 0) {
                  snprintf(error, sizeof(error), "Error while opening decoder for input stream #%d.%d",
                          ist->file_index, ist->st->index);
                  ret = AVERROR(EINVAL);
@@@ -3413,17 -3298,11 +3423,15 @@@ 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);
-             set_context_opts(dec, avcodec_opts[AVMEDIA_TYPE_AUDIO], AV_OPT_FLAG_AUDIO_PARAM | AV_OPT_FLAG_DECODING_PARAM, ist->dec);
 +            if(!ist->dec)
 +                ist->dec = avcodec_find_decoder(dec->codec_id);
              if(audio_disable)
                  st->discard= AVDISCARD_ALL;
              break;
          case AVMEDIA_TYPE_VIDEO:
 -            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) {
diff --cc ffplay.c
+++ b/ffplay.c
@@@ -2141,13 -2163,13 +2145,16 @@@ static int stream_component_open(VideoS
      avctx->error_concealment= error_concealment;
      avctx->thread_count= thread_count;
  
-     set_context_opts(avctx, avcodec_opts[avctx->codec_type], 0, codec);
 +    if(codec->capabilities & CODEC_CAP_DR1)
 +        avctx->flags |= CODEC_FLAG_EMU_EDGE;
 +
-     if (avcodec_open(avctx, codec) < 0)
+     if (!codec ||
+         avcodec_open2(avctx, codec, &opts) < 0)
          return -1;
+     if ((t = av_dict_get(opts, "", NULL, AV_DICT_IGNORE_SUFFIX))) {
+         av_log(NULL, AV_LOG_ERROR, "Option %s not found.\n", t->key);
+         return AVERROR_OPTION_NOT_FOUND;
+     }
  
      /* prepare audio output */
      if (avctx->codec_type == AVMEDIA_TYPE_AUDIO) {
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
@@@ -21,7 -21,7 +21,7 @@@
  #define AVCODEC_VERSION_H
  
  #define LIBAVCODEC_VERSION_MAJOR 53
- #define LIBAVCODEC_VERSION_MINOR  7
 -#define LIBAVCODEC_VERSION_MINOR  6
++#define LIBAVCODEC_VERSION_MINOR  8
  #define LIBAVCODEC_VERSION_MICRO  0
  
  #define LIBAVCODEC_VERSION_INT  AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
@@@ -24,7 -24,7 +24,7 @@@
  #include "libavutil/avutil.h"
  
  #define LIBAVFORMAT_VERSION_MAJOR 53
- #define LIBAVFORMAT_VERSION_MINOR  5
 -#define LIBAVFORMAT_VERSION_MINOR  3
++#define LIBAVFORMAT_VERSION_MINOR  6
  #define LIBAVFORMAT_VERSION_MICRO  0
  
  #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \
Simple merge
Simple merge
@@@ -235,18 -232,10 +235,19 @@@ struct SwsContext *sws_getContext(int s
   *                  the destination image
   * @return          the height of the output slice
   */
- int sws_scale(struct SwsContext *context, const uint8_t* const srcSlice[], const int srcStride[],
-               int srcSliceY, int srcSliceH, uint8_t* const dst[], const int dstStride[]);
+ int sws_scale(struct SwsContext *c, const uint8_t* const srcSlice[],
+               const int srcStride[], int srcSliceY, int srcSliceH,
+               uint8_t* const dst[], const int dstStride[]);
  
 +#if LIBSWSCALE_VERSION_MAJOR < 1
 +/**
 + * @deprecated Use sws_scale() instead.
 + */
 +int sws_scale_ordered(struct SwsContext *context, const uint8_t* const src[],
 +                      int srcStride[], int srcSliceY, int srcSliceH,
 +                      uint8_t* dst[], int dstStride[]) attribute_deprecated;
 +#endif
 +
  /**
   * @param inv_table the yuv2rgb coefficients, normally ff_yuv2rgb_coeffs[x]
   * @return -1 if not supported
@@@ -716,10 -835,9 +717,10 @@@ int sws_scale(struct SwsContext *c, con
  
      if (usePal(c->srcFormat)) {
          for (i=0; i<256; i++) {
 -            int p, r, g, b,y,u,v;
 +            int p, r, g, b, y, u, v, a = 0xff;
              if(c->srcFormat == PIX_FMT_PAL8) {
-                 p=((const uint32_t*)(src[1]))[i];
+                 p=((const uint32_t*)(srcSlice[1]))[i];
 +                a= (p>>24)&0xFF;
                  r= (p>>16)&0xFF;
                  g= (p>> 8)&0xFF;
                  b=  p     &0xFF;
@@@ -740,9 -736,11 +742,11 @@@ int sws_setColorspaceDetails(struct Sws
      return 0;
  }
  
- int sws_getColorspaceDetails(SwsContext *c, int **inv_table, int *srcRange, int **table, int *dstRange, int *brightness, int *contrast, int *saturation)
+ int sws_getColorspaceDetails(struct SwsContext *c, int **inv_table,
+                              int *srcRange, int **table, int *dstRange,
+                              int *brightness, int *contrast, int *saturation)
  {
 -    if (isYUV(c->dstFormat) || isGray(c->dstFormat)) return -1;
 +    if (!c || isYUV(c->dstFormat) || isGray(c->dstFormat)) return -1;
  
      *inv_table = c->srcColorspaceTable;
      *table     = c->dstColorspaceTable;