Merge commit 'f7168d7016f7d1034ec90223fa91a90711704e11'
authorDerek Buitenhuis <derek.buitenhuis@gmail.com>
Wed, 27 Jan 2016 20:02:01 +0000 (20:02 +0000)
committerDerek Buitenhuis <derek.buitenhuis@gmail.com>
Wed, 27 Jan 2016 20:02:01 +0000 (20:02 +0000)
* commit 'f7168d7016f7d1034ec90223fa91a90711704e11':
  imgconvert: Move AVPicture-related static function to the deprecated section

Merged-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
1  2 
libavcodec/imgconvert.c

@@@ -46,66 -49,119 +46,65 @@@ int avcodec_get_pix_fmt_loss(enum AVPix
                               enum AVPixelFormat src_pix_fmt,
                               int has_alpha)
  {
 -    const AVPixFmtDescriptor *src_desc = av_pix_fmt_desc_get(src_pix_fmt);
 -    const AVPixFmtDescriptor *dst_desc = av_pix_fmt_desc_get(dst_pix_fmt);
 -    int loss, i, nb_components = FFMIN(src_desc->nb_components,
 -                                       dst_desc->nb_components);
 -
 -    /* compute loss */
 -    loss = 0;
 -
 -    if (dst_pix_fmt == src_pix_fmt)
 -        return 0;
 -
 -    for (i = 0; i < nb_components; i++)
 -        if (src_desc->comp[i].depth > dst_desc->comp[i].depth)
 -            loss |= FF_LOSS_DEPTH;
 -
 -    if (dst_desc->log2_chroma_w > src_desc->log2_chroma_w ||
 -        dst_desc->log2_chroma_h > src_desc->log2_chroma_h)
 -        loss |= FF_LOSS_RESOLUTION;
 -
 -    if ((src_desc->flags & AV_PIX_FMT_FLAG_RGB) != (dst_desc->flags & AV_PIX_FMT_FLAG_RGB))
 -        loss |= FF_LOSS_COLORSPACE;
 -
 -    if (has_alpha && !(dst_desc->flags & AV_PIX_FMT_FLAG_ALPHA) &&
 -         (src_desc->flags & AV_PIX_FMT_FLAG_ALPHA))
 -        loss |= FF_LOSS_ALPHA;
 -
 -    if (dst_pix_fmt == AV_PIX_FMT_PAL8 && !is_gray(src_desc))
 -        return loss | FF_LOSS_COLORQUANT;
 -
 -    if (src_desc->nb_components > dst_desc->nb_components)
 -        if (is_gray(dst_desc))
 -            loss |= FF_LOSS_CHROMA;
 -
 -    return loss;
 +    return av_get_pix_fmt_loss(dst_pix_fmt, src_pix_fmt, has_alpha);
  }
  
 -static enum AVPixelFormat avcodec_find_best_pix_fmt1(enum AVPixelFormat *pix_fmt_list,
 -                                      enum AVPixelFormat src_pix_fmt,
 -                                      int has_alpha,
 -                                      int loss_mask)
 +enum AVPixelFormat avcodec_find_best_pix_fmt_of_2(enum AVPixelFormat dst_pix_fmt1, enum AVPixelFormat dst_pix_fmt2,
 +                                            enum AVPixelFormat src_pix_fmt, int has_alpha, int *loss_ptr)
  {
 -    int dist, i, loss, min_dist;
 -    enum AVPixelFormat dst_pix_fmt;
 -
 -    /* find exact color match with smallest size */
 -    dst_pix_fmt = AV_PIX_FMT_NONE;
 -    min_dist = 0x7fffffff;
 -    i = 0;
 -    while (pix_fmt_list[i] != AV_PIX_FMT_NONE) {
 -        enum AVPixelFormat pix_fmt = pix_fmt_list[i];
 -
 -        if (i > AV_PIX_FMT_NB) {
 -            av_log(NULL, AV_LOG_ERROR, "Pixel format list longer than expected, "
 -                   "it is either not properly terminated or contains duplicates\n");
 -            return AV_PIX_FMT_NONE;
 -        }
 -
 -        loss = avcodec_get_pix_fmt_loss(pix_fmt, src_pix_fmt, has_alpha) & loss_mask;
 -        if (loss == 0) {
 -            dist = av_get_bits_per_pixel(av_pix_fmt_desc_get(pix_fmt));
 -            if (dist < min_dist) {
 -                min_dist = dist;
 -                dst_pix_fmt = pix_fmt;
 -            }
 -        }
 -        i++;
 -    }
 -    return dst_pix_fmt;
 +    return av_find_best_pix_fmt_of_2(dst_pix_fmt1, dst_pix_fmt2, src_pix_fmt, has_alpha, loss_ptr);
  }
  
 -enum AVPixelFormat avcodec_find_best_pix_fmt2(enum AVPixelFormat *pix_fmt_list,
 +#if AV_HAVE_INCOMPATIBLE_LIBAV_ABI
 +enum AVPixelFormat avcodec_find_best_pix_fmt2(const enum AVPixelFormat *pix_fmt_list,
                                              enum AVPixelFormat src_pix_fmt,
 -                                            int has_alpha, int *loss_ptr)
 +                                            int has_alpha, int *loss_ptr){
 +    return avcodec_find_best_pix_fmt_of_list(pix_fmt_list, src_pix_fmt, has_alpha, loss_ptr);
 +}
 +#else
 +enum AVPixelFormat avcodec_find_best_pix_fmt2(enum AVPixelFormat dst_pix_fmt1, enum AVPixelFormat dst_pix_fmt2,
 +                                            enum AVPixelFormat src_pix_fmt, int has_alpha, int *loss_ptr)
  {
 -    enum AVPixelFormat dst_pix_fmt;
 -    int loss_mask, i;
 -    static const int loss_mask_order[] = {
 -        ~0, /* no loss first */
 -        ~FF_LOSS_ALPHA,
 -        ~FF_LOSS_RESOLUTION,
 -        ~(FF_LOSS_COLORSPACE | FF_LOSS_RESOLUTION),
 -        ~FF_LOSS_COLORQUANT,
 -        ~FF_LOSS_DEPTH,
 -        0,
 -    };
 -
 -    /* try with successive loss */
 -    i = 0;
 -    for(;;) {
 -        loss_mask = loss_mask_order[i++];
 -        dst_pix_fmt = avcodec_find_best_pix_fmt1(pix_fmt_list, src_pix_fmt,
 -                                                 has_alpha, loss_mask);
 -        if (dst_pix_fmt >= 0)
 -            goto found;
 -        if (loss_mask == 0)
 -            break;
 -    }
 -    return AV_PIX_FMT_NONE;
 - found:
 -    if (loss_ptr)
 -        *loss_ptr = avcodec_get_pix_fmt_loss(dst_pix_fmt, src_pix_fmt, has_alpha);
 -    return dst_pix_fmt;
 +    return avcodec_find_best_pix_fmt_of_2(dst_pix_fmt1, dst_pix_fmt2, src_pix_fmt, has_alpha, loss_ptr);
 +}
 +#endif
 +
 +enum AVPixelFormat avcodec_find_best_pix_fmt_of_list(const enum AVPixelFormat *pix_fmt_list,
 +                                            enum AVPixelFormat src_pix_fmt,
 +                                            int has_alpha, int *loss_ptr){
 +    int i;
 +
 +    enum AVPixelFormat best = AV_PIX_FMT_NONE;
 +
 +    for(i=0; pix_fmt_list[i] != AV_PIX_FMT_NONE; i++)
 +        best = avcodec_find_best_pix_fmt_of_2(best, pix_fmt_list[i], src_pix_fmt, has_alpha, loss_ptr);
 +
 +    return best;
  }
  
+ #if FF_API_AVPICTURE
+ FF_DISABLE_DEPRECATION_WARNINGS
  /* return true if yuv planar */
  static inline int is_yuv_planar(const AVPixFmtDescriptor *desc)
  {
 -    return (!(desc->flags & AV_PIX_FMT_FLAG_RGB) &&
 -             (desc->flags & AV_PIX_FMT_FLAG_PLANAR));
 +    int i;
 +    int planes[4] = { 0 };
 +
 +    if (     desc->flags & AV_PIX_FMT_FLAG_RGB
 +        || !(desc->flags & AV_PIX_FMT_FLAG_PLANAR))
 +        return 0;
 +
 +    /* set the used planes */
 +    for (i = 0; i < desc->nb_components; i++)
 +        planes[desc->comp[i].plane] = 1;
 +
 +    /* if there is an unused plane, the format is not planar */
 +    for (i = 0; i < desc->nb_components; i++)
 +        if (!planes[i])
 +            return 0;
 +    return 1;
  }
  
- #if FF_API_AVPICTURE
- FF_DISABLE_DEPRECATION_WARNINGS
  int av_picture_crop(AVPicture *dst, const AVPicture *src,
                      enum AVPixelFormat pix_fmt, int top_band, int left_band)
  {