frame: allow align=0 (meaning automatic) for av_frame_get_buffer()
authorAnton Khirnov <anton@khirnov.net>
Wed, 8 Feb 2017 08:46:04 +0000 (09:46 +0100)
committerAnton Khirnov <anton@khirnov.net>
Sat, 11 Feb 2017 10:37:45 +0000 (11:37 +0100)
This will avoid every caller from hardcoding some specific alignment,
which may break in the future with new instruction sets.

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

index be34c92..9b9f46e 100644 (file)
@@ -13,6 +13,10 @@ libavutil:     2015-08-28
 
 API changes, most recent first:
 
+2017-02-xx - xxxxxxx - lavu 55.31.1 - frame.h
+  Allow passing the value of 0 (meaning "automatic") as the required alignment
+  to av_frame_get_buffer().
+
 2017-02-xx - xxxxxxx - lavu 55.31.0 - cpu.h
   Add av_cpu_max_align() for querying maximum required data alignment.
 
index aafaa57..aa5820c 100644 (file)
@@ -19,6 +19,7 @@
 #include "channel_layout.h"
 #include "buffer.h"
 #include "common.h"
+#include "cpu.h"
 #include "dict.h"
 #include "frame.h"
 #include "imgutils.h"
@@ -103,6 +104,9 @@ static int get_video_buffer(AVFrame *frame, int align)
         if (ret < 0)
             return ret;
 
+        if (align <= 0)
+            align = av_cpu_max_align();
+
         for (i = 0; i < 4 && frame->linesize[i]; i++)
             frame->linesize[i] = FFALIGN(frame->linesize[i], align);
     }
index c718f7b..4f63fb0 100644 (file)
@@ -475,7 +475,9 @@ void av_frame_move_ref(AVFrame *dst, AVFrame *src);
  *           cases.
  *
  * @param frame frame in which to store the new buffers.
- * @param align required buffer size alignment
+ * @param align Required buffer size alignment. If equal to 0, alignment will be
+ *              chosen automatically for the current CPU. It is highly
+ *              recommended to pass 0 here unless you know what you are doing.
  *
  * @return 0 on success, a negative AVERROR on error.
  */
index 0fcd19a..0768f9f 100644 (file)
@@ -55,7 +55,7 @@
 
 #define LIBAVUTIL_VERSION_MAJOR 55
 #define LIBAVUTIL_VERSION_MINOR 31
-#define LIBAVUTIL_VERSION_MICRO  0
+#define LIBAVUTIL_VERSION_MICRO  1
 
 #define LIBAVUTIL_VERSION_INT   AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
                                                LIBAVUTIL_VERSION_MINOR, \