API changes, most recent first:
-2016-08-24 - xxxxxxx - lavu 55.21.0 - imgutils.h
++2016-03-20 - xxxxxxx - lavu 55.50.100 / 55.21.0 - imgutils.h
+ Add av_image_copy_uc_from(), a version of av_image_copy() for copying
+ from GPU mapped memory.
+
-2016-xx-xx - xxxxxxx - lavc 59.26.0 - vaapi.h
+2017-03-20 - 9c2436e - lavu 55.49.100 - pixdesc.h
+ Add AV_PIX_FMT_FLAG_BAYER pixel format flag.
+
+2017-03-18 - xxxxxxx - lavfi 6.77.100 - avfilter.h
+ Deprecate AVFilterGraph.resample_lavr_opts
+ It's never been used by avfilter nor passed to anything.
+
+2017-02-10 - xxxxxxx - lavu 55.48.100 / 55.33.0 - spherical.h
+ Add AV_SPHERICAL_EQUIRECTANGULAR_TILE, av_spherical_tile_bounds(),
+ and projection-specific properties (bound_left, bound_top, bound_right,
+ bound_bottom, padding) to AVSphericalMapping.
+
+2017-03-02 - xxxxxxx - lavc 57.81.104 - videotoolbox.h
+ AVVideotoolboxContext.cv_pix_fmt_type can now be set to 0 to output the
+ native decoder format. (The default value is not changed.)
+
+2017-03-02 - xxxxxxx - lavu 55.47.101, lavc 57.81.102, lavf 57.66.103
+ Remove requirement to use AVOption or accessors to access certain fields
+ in AVFrame, AVCodecContext, and AVFormatContext that were previously
+ documented as "no direct access" allowed.
+
+2017-02-13 - xxxxxxx - lavc 57.80.100 - avcodec.h
+ Add AVCodecContext.hw_device_ctx.
+
+2017-02-11 - xxxxxxx - lavu 55.47.100 - frame.h
+ Add AVFrame.opaque_ref.
+
+2017-01-31 - xxxxxxx - lavu 55.46.100 / 55.20.0 - cpu.h
+ Add AV_CPU_FLAG_SSSE3SLOW.
+
+2017-01-24 - xxxxxxx - lavu 55.45.100 - channel_layout.h
+ Add av_get_extended_channel_layout()
+
+2017-01-22 - xxxxxxx - lavu 55.44.100 - lfg.h
+ Add av_lfg_init_from_data().
+
+2017-01-xx - xxxxxxx - lavc 57.74.100 - vaapi.h
Deprecate struct vaapi_context and the vaapi.h installed header.
Callers should set AVCodecContext.hw_frames_ctx instead.
* misc image utilities
*/
+#include "avassert.h"
#include "common.h"
#include "imgutils.h"
+ #include "imgutils_internal.h"
#include "internal.h"
#include "intreadwrite.h"
#include "log.h"
for (i = 0; i < planes_nb; i++) {
int h = height;
- int bwidth = av_image_get_linesize(pix_fmt, width, i);
+ ptrdiff_t bwidth = av_image_get_linesize(pix_fmt, width, i);
+ if (bwidth < 0) {
+ av_log(NULL, AV_LOG_ERROR, "av_image_get_linesize failed\n");
+ return;
+ }
if (i == 1 || i == 2) {
h = AV_CEIL_RSHIFT(height, desc->log2_chroma_h);
}
--- /dev/null
- * This file is part of Libav.
+ /*
- * Libav is free software; you can redistribute it and/or
++ * This file is part of FFmpeg.
+ *
- * Libav is distributed in the hope that it will be useful,
++ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
- * License along with Libav; if not, write to the Free Software
++ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
++ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+ #ifndef AVUTIL_IMGUTILS_INTERNAL_H
+ #define AVUTIL_IMGUTILS_INTERNAL_H
+
+ #include <stddef.h>
+ #include <stdint.h>
+
+ int ff_image_copy_plane_uc_from_x86(uint8_t *dst, ptrdiff_t dst_linesize,
+ const uint8_t *src, ptrdiff_t src_linesize,
+ ptrdiff_t bytewidth, int height);
+
+
+ #endif /* AVUTIL_IMGUTILS_INTERNAL_H */
* @{
*/
-#define LIBAVUTIL_VERSION_MAJOR 55
-#define LIBAVUTIL_VERSION_MINOR 21
-#define LIBAVUTIL_VERSION_MICRO 0
+#define LIBAVUTIL_VERSION_MAJOR 55
- #define LIBAVUTIL_VERSION_MINOR 49
++#define LIBAVUTIL_VERSION_MINOR 50
+#define LIBAVUTIL_VERSION_MICRO 100
#define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
LIBAVUTIL_VERSION_MINOR, \
OBJS += x86/cpu.o \
+ x86/fixed_dsp_init.o \
x86/float_dsp_init.o \
+ x86/imgutils_init.o \
x86/lls_init.o \
+OBJS-$(CONFIG_PIXELUTILS) += x86/pixelutils_init.o \
+
+EMMS_OBJS_$(HAVE_MMX_INLINE)_$(HAVE_MMX_EXTERNAL)_$(HAVE_MM_EMPTY) = x86/emms.o
+
YASM-OBJS += x86/cpuid.o \
- x86/emms.o \
+ $(EMMS_OBJS__yes_) \
+ x86/fixed_dsp.o \
x86/float_dsp.o \
+ x86/imgutils.o \
x86/lls.o \
+
+YASM-OBJS-$(CONFIG_PIXELUTILS) += x86/pixelutils.o \
--- /dev/null
-;* This file is part of Libav.
+ ;*****************************************************************************
+ ;* Copyright 2016 Anton Khirnov
+ ;*
-;* Libav is free software; you can redistribute it and/or
++;* This file is part of FFmpeg.
+ ;*
-;* Libav is distributed in the hope that it will be useful,
++;* FFmpeg is free software; you can redistribute it and/or
+ ;* modify it under the terms of the GNU Lesser General Public
+ ;* License as published by the Free Software Foundation; either
+ ;* version 2.1 of the License, or (at your option) any later version.
+ ;*
-;* License along with Libav; if not, write to the Free Software
++;* FFmpeg is distributed in the hope that it will be useful,
+ ;* but WITHOUT ANY WARRANTY; without even the implied warranty of
+ ;* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ ;* Lesser General Public License for more details.
+ ;*
+ ;* You should have received a copy of the GNU Lesser General Public
++;* License along with FFmpeg; if not, write to the Free Software
+ ;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ ;******************************************************************************
+
+ %include "libavutil/x86/x86util.asm"
+
+ SECTION .text
+
+ INIT_XMM sse4
+ cglobal image_copy_plane_uc_from, 6, 7, 4, dst, dst_linesize, src, src_linesize, bw, height, rowpos
+ add dstq, bwq
+ add srcq, bwq
+ neg bwq
+
+ .row_start
+ mov rowposq, bwq
+
+ .loop
+ movntdqa m0, [srcq + rowposq + 0 * mmsize]
+ movntdqa m1, [srcq + rowposq + 1 * mmsize]
+ movntdqa m2, [srcq + rowposq + 2 * mmsize]
+ movntdqa m3, [srcq + rowposq + 3 * mmsize]
+
+ mova [dstq + rowposq + 0 * mmsize], m0
+ mova [dstq + rowposq + 1 * mmsize], m1
+ mova [dstq + rowposq + 2 * mmsize], m2
+ mova [dstq + rowposq + 3 * mmsize], m3
+
+ add rowposq, 4 * mmsize
+ jnz .loop
+
+ add srcq, src_linesizeq
+ add dstq, dst_linesizeq
+ dec heightd
+ jnz .row_start
+
+ RET
--- /dev/null
- * This file is part of Libav.
+ /*
- * Libav is free software; you can redistribute it and/or
++ * This file is part of FFmpeg.
+ *
- * Libav is distributed in the hope that it will be useful,
++ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
- * License along with Libav; if not, write to the Free Software
++ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
++ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+ #include <stddef.h>
+ #include <stdint.h>
+
+ #include "libavutil/cpu.h"
+ #include "libavutil/error.h"
+ #include "libavutil/imgutils.h"
+ #include "libavutil/imgutils_internal.h"
+ #include "libavutil/internal.h"
+
+ #include "cpu.h"
+
+ void ff_image_copy_plane_uc_from_sse4(uint8_t *dst, ptrdiff_t dst_linesize,
+ const uint8_t *src, ptrdiff_t src_linesize,
+ ptrdiff_t bytewidth, int height);
+
+ int ff_image_copy_plane_uc_from_x86(uint8_t *dst, ptrdiff_t dst_linesize,
+ const uint8_t *src, ptrdiff_t src_linesize,
+ ptrdiff_t bytewidth, int height)
+ {
+ int cpu_flags = av_get_cpu_flags();
+ ptrdiff_t bw_aligned = FFALIGN(bytewidth, 64);
+
+ if (EXTERNAL_SSE4(cpu_flags) &&
+ bw_aligned <= dst_linesize && bw_aligned <= src_linesize)
+ ff_image_copy_plane_uc_from_sse4(dst, dst_linesize, src, src_linesize,
+ bw_aligned, height);
+ else
+ return AVERROR(ENOSYS);
+
+ return 0;
+ }