summaryrefslogtreecommitdiff
path: root/libavcodec/videodsp.h
diff options
context:
space:
mode:
authorRonald S. Bultje <rsbultje@gmail.com>2012-12-15 09:46:02 -0800
committerLuca Barbato <lu_zero@gentoo.org>2012-12-20 13:40:45 +0100
commit8c53d39e7f0604127bfc96fa1182c8abe3847ac6 (patch)
tree18495cabf7f0e6d365871d3407f2534f2b80b653 /libavcodec/videodsp.h
parenta925f723a915bc0255e2673f8817af5212131763 (diff)
lavc: introduce VideoDSPContext
Move some functions from dsputil. The idea is that videodsp contains functions that are useful for a large and varied set of video decoders. Currently, it contains emulated_edge_mc() and prefetch(). Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
Diffstat (limited to 'libavcodec/videodsp.h')
-rw-r--r--libavcodec/videodsp.h71
1 files changed, 71 insertions, 0 deletions
diff --git a/libavcodec/videodsp.h b/libavcodec/videodsp.h
new file mode 100644
index 0000000000..7d785939f3
--- /dev/null
+++ b/libavcodec/videodsp.h
@@ -0,0 +1,71 @@
+/*
+ * Copyright (C) 2012 Ronald S. Bultje
+ *
+ * This file is part of Libav.
+ *
+ * Libav 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.
+ *
+ * Libav 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 Libav; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+/**
+ * @file
+ * Core video DSP helper functions
+ */
+
+#ifndef AVCODEC_VIDEODSP_H
+#define AVCODEC_VIDEODSP_H
+
+#include <stddef.h>
+#include <stdint.h>
+
+typedef struct VideoDSPContext {
+ /**
+ * Copy a rectangular area of samples to a temporary buffer and replicate
+ * the border samples.
+ *
+ * @param buf destination buffer
+ * @param src source buffer
+ * @param linesize number of bytes between 2 vertically adjacent samples
+ * in both the source and destination buffers
+ * @param block_w width of block
+ * @param block_h height of block
+ * @param src_x x coordinate of the top left sample of the block in the
+ * source buffer
+ * @param src_y y coordinate of the top left sample of the block in the
+ * source buffer
+ * @param w width of the source buffer
+ * @param h height of the source buffer
+ */
+ void (*emulated_edge_mc)(uint8_t *buf, const uint8_t *src,
+ ptrdiff_t linesize, int block_w, int block_h,
+ int src_x, int src_y, int w, int h);
+
+ /**
+ * Prefetch memory into cache (if supported by hardware).
+ *
+ * @buf pointer to buffer to prefetch memory from
+ * @stride distance between two lines of buf (in bytes)
+ * @h number of lines to prefetch
+ */
+ void (*prefetch)(uint8_t *buf, ptrdiff_t stride, int h);
+} VideoDSPContext;
+
+void ff_videodsp_init(VideoDSPContext *ctx, int bpc);
+
+/* for internal use only (i.e. called by ff_videodsp_init() */
+void ff_videodsp_init_arm(VideoDSPContext *ctx, int bpc);
+void ff_videodsp_init_ppc(VideoDSPContext *ctx, int bpc);
+void ff_videodsp_init_x86(VideoDSPContext *ctx, int bpc);
+
+#endif /* AVCODEC_VIDEODSP_H */