ffmpeg | branch: master | James Almer <jamr...@gmail.com> | Wed Sep 27 23:29:20 2017 -0300| [7aa6b8a68fce93d84c359158f198cd55324d0025] | committer: James Almer
Merge commit '4de220d2e3751c459f8739a08ac6ca52e63eba30' * commit '4de220d2e3751c459f8739a08ac6ca52e63eba30': frame: allow align=0 (meaning automatic) for av_frame_get_buffer() See https://ffmpeg.org/pipermail/ffmpeg-devel/2017-September/215834.html Merged-by: James Almer <jamr...@gmail.com> > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=7aa6b8a68fce93d84c359158f198cd55324d0025 --- doc/APIchanges | 4 ++++ libavutil/frame.c | 3 +++ libavutil/frame.h | 4 +++- libavutil/version.h | 2 +- 4 files changed, 11 insertions(+), 2 deletions(-) diff --git a/doc/APIchanges b/doc/APIchanges index 4838ec3728..606ba7f6c0 100644 --- a/doc/APIchanges +++ b/doc/APIchanges @@ -15,6 +15,10 @@ libavutil: 2015-08-28 API changes, most recent first: +2017-09-27 - xxxxxxx - lavu 55.77.101 / lavu 55.31.1 - frame.h + Allow passing the value of 0 (meaning "automatic") as the required alignment + to av_frame_get_buffer(). + 2017-09-27 - xxxxxxx - lavu 55.77.100 / lavu 55.31.0 - cpu.h Add av_cpu_max_align() for querying maximum required data alignment. diff --git a/libavutil/frame.c b/libavutil/frame.c index 85d89b9ed5..d5fd2932e3 100644 --- a/libavutil/frame.c +++ b/libavutil/frame.c @@ -181,6 +181,9 @@ static int get_video_buffer(AVFrame *frame, int align) return ret; if (!frame->linesize[0]) { + if (align <= 0) + align = 32; /* STRIDE_ALIGN. Should be av_cpu_max_align() */ + for(i=1; i<=align; i+=i) { ret = av_image_fill_linesizes(frame->linesize, frame->format, FFALIGN(frame->width, i)); diff --git a/libavutil/frame.h b/libavutil/frame.h index 013043c250..b8591a442b 100644 --- a/libavutil/frame.h +++ b/libavutil/frame.h @@ -681,7 +681,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. */ diff --git a/libavutil/version.h b/libavutil/version.h index 9dbcdc4a8c..dee4f5b4c5 100644 --- a/libavutil/version.h +++ b/libavutil/version.h @@ -81,7 +81,7 @@ #define LIBAVUTIL_VERSION_MAJOR 55 #define LIBAVUTIL_VERSION_MINOR 77 -#define LIBAVUTIL_VERSION_MICRO 100 +#define LIBAVUTIL_VERSION_MICRO 101 #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ LIBAVUTIL_VERSION_MINOR, \ ====================================================================== diff --cc doc/APIchanges index 4838ec3728,9b9f46ef49..606ba7f6c0 --- a/doc/APIchanges +++ b/doc/APIchanges @@@ -15,10 -13,17 +15,14 @@@ libavutil: 2015-08-2 API changes, most recent first: -2017-02-xx - xxxxxxx - lavu 55.31.1 - frame.h ++2017-09-27 - xxxxxxx - lavu 55.77.101 / 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 +2017-09-27 - xxxxxxx - lavu 55.77.100 / lavu 55.31.0 - cpu.h Add av_cpu_max_align() for querying maximum required data alignment. -2016-xx-xx - xxxxxxx - lavf 57.11.0 - avio.h - Add avio_context_free(). From now on it must be used for freeing AVIOContext. - -2017-02-01 - xxxxxxx - lavc - avcodec.h +2017-09-26 - xxxxxxx - lavc 57.106.102 - avcodec.h Deprecate AVCodecContext.refcounted_frames. This was useful for deprecated API only (avcodec_decode_video2/avcodec_decode_audio4). The new decode APIs (avcodec_send_packet/avcodec_receive_frame) always work with reference diff --cc libavutil/frame.c index 85d89b9ed5,aa5820c0e9..d5fd2932e3 --- a/libavutil/frame.c +++ b/libavutil/frame.c @@@ -181,14 -99,13 +181,17 @@@ static int get_video_buffer(AVFrame *fr return ret; if (!frame->linesize[0]) { - ret = av_image_fill_linesizes(frame->linesize, frame->format, - frame->width); - if (ret < 0) - return ret; - + if (align <= 0) - align = av_cpu_max_align(); ++ align = 32; /* STRIDE_ALIGN. Should be av_cpu_max_align() */ ++ + for(i=1; i<=align; i+=i) { + ret = av_image_fill_linesizes(frame->linesize, frame->format, + FFALIGN(frame->width, i)); + if (ret < 0) + return ret; + if (!(frame->linesize[0] & (align-1))) + break; + } for (i = 0; i < 4 && frame->linesize[i]; i++) frame->linesize[i] = FFALIGN(frame->linesize[i], align); diff --cc libavutil/version.h index 9dbcdc4a8c,0768f9fe99..dee4f5b4c5 --- a/libavutil/version.h +++ b/libavutil/version.h @@@ -78,10 -53,9 +78,10 @@@ * @{ */ -#define LIBAVUTIL_VERSION_MAJOR 55 -#define LIBAVUTIL_VERSION_MINOR 31 -#define LIBAVUTIL_VERSION_MICRO 1 + +#define LIBAVUTIL_VERSION_MAJOR 55 +#define LIBAVUTIL_VERSION_MINOR 77 - #define LIBAVUTIL_VERSION_MICRO 100 ++#define LIBAVUTIL_VERSION_MICRO 101 #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ LIBAVUTIL_VERSION_MINOR, \ _______________________________________________ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog