Merge commit 'dca23ffbc7568c9af5c5fbaa86e6a0761ecae50c'
authorHendrik Leppkes <h.leppkes@gmail.com>
Tue, 27 Oct 2015 11:39:56 +0000 (12:39 +0100)
committerHendrik Leppkes <h.leppkes@gmail.com>
Tue, 27 Oct 2015 11:40:04 +0000 (12:40 +0100)
* commit 'dca23ffbc7568c9af5c5fbaa86e6a0761ecae50c':
  lavc: Deprecate AVPicture structure and related functions

Deprecation flag on AVPicture struct replaced by a comment, as it causes
excess deprecation warnings for every include of avcodec.h

Merged-by: Hendrik Leppkes <h.leppkes@gmail.com>
1  2 
libavcodec/avcodec.h
libavcodec/avpicture.c
libavcodec/imgconvert.c

@@@ -3579,20 -3174,23 +3580,22 @@@ typedef struct AVHWAccel 
   */
  
  /**
 - * four components are given, that's all.
 - * the last component is alpha
 + * Picture data structure.
 + *
 + * Up to four components can be stored into it, the last component is
 + * alpha.
++ * @deprecated use AVFrame or imgutils functions instead
   */
 -attribute_deprecated
  typedef struct AVPicture {
 -    uint8_t *data[AV_NUM_DATA_POINTERS];
 +    uint8_t *data[AV_NUM_DATA_POINTERS];    ///< pointers to the image data planes
      int linesize[AV_NUM_DATA_POINTERS];     ///< number of bytes per line
  } AVPicture;
  
  /**
   * @}
   */
+ #endif
  
 -#define AVPALETTE_SIZE 1024
 -#define AVPALETTE_COUNT 256
 -
  enum AVSubtitleType {
      SUBTITLE_NONE,
  
@@@ -4625,103 -4135,7 +4628,104 @@@ int avcodec_encode_subtitle(AVCodecCont
   * @}
   */
  
 +#if FF_API_AVCODEC_RESAMPLE
 +/**
 + * @defgroup lavc_resample Audio resampling
 + * @ingroup libavc
 + * @deprecated use libswresample instead
 + *
 + * @{
 + */
 +struct ReSampleContext;
 +struct AVResampleContext;
 +
 +typedef struct ReSampleContext ReSampleContext;
 +
 +/**
 + *  Initialize audio resampling context.
 + *
 + * @param output_channels  number of output channels
 + * @param input_channels   number of input channels
 + * @param output_rate      output sample rate
 + * @param input_rate       input sample rate
 + * @param sample_fmt_out   requested output sample format
 + * @param sample_fmt_in    input sample format
 + * @param filter_length    length of each FIR filter in the filterbank relative to the cutoff frequency
 + * @param log2_phase_count log2 of the number of entries in the polyphase filterbank
 + * @param linear           if 1 then the used FIR filter will be linearly interpolated
 +                           between the 2 closest, if 0 the closest will be used
 + * @param cutoff           cutoff frequency, 1.0 corresponds to half the output sampling rate
 + * @return allocated ReSampleContext, NULL if error occurred
 + */
 +attribute_deprecated
 +ReSampleContext *av_audio_resample_init(int output_channels, int input_channels,
 +                                        int output_rate, int input_rate,
 +                                        enum AVSampleFormat sample_fmt_out,
 +                                        enum AVSampleFormat sample_fmt_in,
 +                                        int filter_length, int log2_phase_count,
 +                                        int linear, double cutoff);
 +
 +attribute_deprecated
 +int audio_resample(ReSampleContext *s, short *output, short *input, int nb_samples);
 +
 +/**
 + * Free resample context.
 + *
 + * @param s a non-NULL pointer to a resample context previously
 + *          created with av_audio_resample_init()
 + */
 +attribute_deprecated
 +void audio_resample_close(ReSampleContext *s);
 +
 +
 +/**
 + * Initialize an audio resampler.
 + * Note, if either rate is not an integer then simply scale both rates up so they are.
 + * @param filter_length length of each FIR filter in the filterbank relative to the cutoff freq
 + * @param log2_phase_count log2 of the number of entries in the polyphase filterbank
 + * @param linear If 1 then the used FIR filter will be linearly interpolated
 +                 between the 2 closest, if 0 the closest will be used
 + * @param cutoff cutoff frequency, 1.0 corresponds to half the output sampling rate
 + */
 +attribute_deprecated
 +struct AVResampleContext *av_resample_init(int out_rate, int in_rate, int filter_length, int log2_phase_count, int linear, double cutoff);
 +
 +/**
 + * Resample an array of samples using a previously configured context.
 + * @param src an array of unconsumed samples
 + * @param consumed the number of samples of src which have been consumed are returned here
 + * @param src_size the number of unconsumed samples available
 + * @param dst_size the amount of space in samples available in dst
 + * @param update_ctx If this is 0 then the context will not be modified, that way several channels can be resampled with the same context.
 + * @return the number of samples written in dst or -1 if an error occurred
 + */
 +attribute_deprecated
 +int av_resample(struct AVResampleContext *c, short *dst, short *src, int *consumed, int src_size, int dst_size, int update_ctx);
 +
 +
 +/**
 + * Compensate samplerate/timestamp drift. The compensation is done by changing
 + * the resampler parameters, so no audible clicks or similar distortions occur
 + * @param compensation_distance distance in output samples over which the compensation should be performed
 + * @param sample_delta number of output samples which should be output less
 + *
 + * example: av_resample_compensate(c, 10, 500)
 + * here instead of 510 samples only 500 samples would be output
 + *
 + * note, due to rounding the actual compensation might be slightly different,
 + * especially if the compensation_distance is large and the in_rate used during init is small
 + */
 +attribute_deprecated
 +void av_resample_compensate(struct AVResampleContext *c, int sample_delta, int compensation_distance);
 +attribute_deprecated
 +void av_resample_close(struct AVResampleContext *c);
 +
 +/**
 + * @}
 + */
 +#endif
 +
+ #if FF_API_AVPICTURE
  /**
   * @addtogroup lavc_picture
   * @{
@@@ -4753,50 -4154,17 +4744,17 @@@ attribute_deprecate
  void avpicture_free(AVPicture *picture);
  
  /**
-  * Setup the picture fields based on the specified image parameters
-  * and the provided image data buffer.
-  *
-  * The picture fields are filled in by using the image data buffer
-  * pointed to by ptr.
-  *
-  * If ptr is NULL, the function will fill only the picture linesize
-  * array and return the required size for the image buffer.
-  *
-  * To allocate an image buffer and fill the picture data in one call,
-  * use avpicture_alloc().
-  *
-  * @param picture       the picture to be filled in
-  * @param ptr           buffer where the image data is stored, or NULL
-  * @param pix_fmt       the pixel format of the image
-  * @param width         the width of the image in pixels
-  * @param height        the height of the image in pixels
-  * @return the size in bytes required for src, a negative error code
-  * in case of failure
-  *
-  * @see av_image_fill_arrays()
+  * @deprecated use av_image_fill_arrays() instead.
   */
 -int avpicture_fill(AVPicture *picture, uint8_t *ptr,
+ attribute_deprecated
 +int avpicture_fill(AVPicture *picture, const uint8_t *ptr,
                     enum AVPixelFormat pix_fmt, int width, int height);
  
  /**
-  * Copy pixel data from an AVPicture into a buffer.
-  *
-  * avpicture_get_size() can be used to compute the required size for
-  * the buffer to fill.
-  *
-  * @param src        source picture with filled data
-  * @param pix_fmt    picture pixel format
-  * @param width      picture width
-  * @param height     picture height
-  * @param dest       destination buffer
-  * @param dest_size  destination buffer size in bytes
-  * @return the number of bytes written to dest, or a negative value
-  * (error code) on error, for example if the destination buffer is not
-  * big enough
-  *
-  * @see av_image_copy_to_buffer()
+  * @deprecated use av_image_copy_to_buffer() instead.
   */
 -int avpicture_layout(const AVPicture* src, enum AVPixelFormat pix_fmt,
+ attribute_deprecated
 +int avpicture_layout(const AVPicture *src, enum AVPixelFormat pix_fmt,
                       int width, int height,
                       unsigned char *dest, int dest_size);
  
@@@ -31,7 -31,8 +31,8 @@@
  #include "libavutil/imgutils.h"
  #include "libavutil/colorspace.h"
  
 -int avpicture_fill(AVPicture *picture, uint8_t *ptr,
+ #if FF_API_AVPICTURE
 +int avpicture_fill(AVPicture *picture, const uint8_t *ptr,
                     enum AVPixelFormat pix_fmt, int width, int height)
  {
      return av_image_fill_arrays(picture->data, picture->linesize,
@@@ -72,7 -74,7 +73,7 @@@ void avpicture_free(AVPicture *picture
  void av_picture_copy(AVPicture *dst, const AVPicture *src,
                       enum AVPixelFormat pix_fmt, int width, int height)
  {
 -    av_image_copy(dst->data, dst->linesize, src->data,
 +    av_image_copy(dst->data, dst->linesize, (const uint8_t **)src->data,
                    src->linesize, pix_fmt, width, height);
  }
+ #endif /* FF_API_AVPICTURE */
@@@ -177,24 -248,11 +177,25 @@@ void ff_shrink88(uint8_t *dst, int dst_
  /* 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
  int av_picture_crop(AVPicture *dst, const AVPicture *src,
                      enum AVPixelFormat pix_fmt, int top_band, int left_band)
  {
@@@ -316,34 -334,6 +317,35 @@@ int av_picture_pad(AVPicture *dst, cons
                  (padbottom >> y_shift) + (padright >> x_shift));
          }
      }
 +
      return 0;
  }
 +
 +#ifdef TEST
 +
 +int main(void){
 +    int i;
 +    int err=0;
 +    int skip = 0;
 +
 +    for (i=0; i<AV_PIX_FMT_NB*2; i++) {
 +        const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(i);
 +        if(!desc || !desc->name) {
 +            skip ++;
 +            continue;
 +        }
 +        if (skip) {
 +            av_log(NULL, AV_LOG_INFO, "%3d unused pixel format values\n", skip);
 +            skip = 0;
 +        }
 +        av_log(NULL, AV_LOG_INFO, "pix fmt %s yuv_plan:%d avg_bpp:%d\n", desc->name, is_yuv_planar(desc), av_get_padded_bits_per_pixel(desc));
 +        if ((!(desc->flags & AV_PIX_FMT_FLAG_ALPHA)) != (desc->nb_components != 2 && desc->nb_components != 4)) {
 +            av_log(NULL, AV_LOG_ERROR, "Alpha flag mismatch\n");
 +            err = 1;
 +        }
 +    }
 +    return err;
 +}
 +
 +#endif
+ #endif /* FF_API_AVPICTURE */