Merge commit '1155fd02ae7bac215acab316e847c6bb25f74fc3'
authorMichael Niedermayer <michaelni@gmx.at>
Mon, 24 Feb 2014 08:37:14 +0000 (09:37 +0100)
committerMichael Niedermayer <michaelni@gmx.at>
Mon, 24 Feb 2014 08:38:32 +0000 (09:38 +0100)
* commit '1155fd02ae7bac215acab316e847c6bb25f74fc3':
  frame: add a convenience function for copying AVFrame data

Conflicts:
doc/APIchanges
libavutil/frame.c
libavutil/version.h

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
doc/APIchanges
libavutil/frame.c
libavutil/frame.h
libavutil/version.h

diff --cc doc/APIchanges
@@@ -15,9 -13,9 +15,12 @@@ libavutil:     2012-10-2
  
  API changes, most recent first:
  
+ 2014-xx-xx - xxxxxxx - lavu 53.05.0 - frame.h
+   Add av_frame_copy() for copying the frame data.
 +2014-02-xx - xxxxxxx - lswr 0.18.100 - swresample.h
 +  Add swr_is_initialized() for checking whether a resample context is initialized.
 +
  2014-02-xx - xxxxxxx - lavr 1.2.0 - avresample.h
    Add avresample_is_open() for checking whether a resample context is open.
  
@@@ -592,3 -470,59 +583,61 @@@ AVFrameSideData *av_frame_get_side_data
      }
      return NULL;
  }
 -    int channels = av_get_channel_layout_nb_channels(dst->channel_layout);
+ static int frame_copy_video(AVFrame *dst, const AVFrame *src)
+ {
+     const uint8_t *src_data[4];
+     int i, planes;
+     if (dst->width  != src->width ||
+         dst->height != src->height)
+         return AVERROR(EINVAL);
+     planes = av_pix_fmt_count_planes(dst->format);
+     for (i = 0; i < planes; i++)
+         if (!dst->data[i] || !src->data[i])
+             return AVERROR(EINVAL);
+     memcpy(src_data, src->data, sizeof(src_data));
+     av_image_copy(dst->data, dst->linesize,
+                   src_data, src->linesize,
+                   dst->format, dst->width, dst->height);
+     return 0;
+ }
+ static int frame_copy_audio(AVFrame *dst, const AVFrame *src)
+ {
+     int planar   = av_sample_fmt_is_planar(dst->format);
++    int channels = dst->channels;
+     int planes   = planar ? channels : 1;
+     int i;
+     if (dst->nb_samples     != src->nb_samples ||
+         dst->channel_layout != src->channel_layout)
+         return AVERROR(EINVAL);
++    CHECK_CHANNELS_CONSISTENCY(src);
++
+     for (i = 0; i < planes; i++)
+         if (!dst->extended_data[i] || !src->extended_data[i])
+             return AVERROR(EINVAL);
+     av_samples_copy(dst->extended_data, src->extended_data, 0, 0,
+                     dst->nb_samples, channels, dst->format);
+     return 0;
+ }
+ int av_frame_copy(AVFrame *dst, const AVFrame *src)
+ {
+     if (dst->format != src->format || dst->format < 0)
+         return AVERROR(EINVAL);
+     if (dst->width > 0 && dst->height > 0)
+         return frame_copy_video(dst, src);
+     else if (dst->nb_samples > 0 && dst->channel_layout)
+         return frame_copy_audio(dst, src);
+     return AVERROR(EINVAL);
+ }
Simple merge
@@@ -55,9 -53,9 +55,9 @@@
   * @{
   */
  
 -#define LIBAVUTIL_VERSION_MAJOR 53
 -#define LIBAVUTIL_VERSION_MINOR  5
 -#define LIBAVUTIL_VERSION_MICRO  0
 +#define LIBAVUTIL_VERSION_MAJOR  52
- #define LIBAVUTIL_VERSION_MINOR  65
++#define LIBAVUTIL_VERSION_MINOR  66
 +#define LIBAVUTIL_VERSION_MICRO 100
  
  #define LIBAVUTIL_VERSION_INT   AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
                                                 LIBAVUTIL_VERSION_MINOR, \