Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/videolan/dav1d.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRonald S. Bultje <rsbultje@gmail.com>2019-09-01 18:18:46 +0300
committerRonald S. Bultje <rsbultje@gmail.com>2019-09-10 21:20:38 +0300
commitb9d4630c6dfb9bfeac7c3fa5aa59217670595f7b (patch)
treee73b18b80b4607c0fb7d686a6d12416341b05639 /src/film_grain.h
parent79c4aa95cd1f0fd849e130aa282c632d51fb70da (diff)
Split out film grain block functions into a DSPContext
Diffstat (limited to 'src/film_grain.h')
-rw-r--r--src/film_grain.h54
1 files changed, 51 insertions, 3 deletions
diff --git a/src/film_grain.h b/src/film_grain.h
index 61e61d3..8b16648 100644
--- a/src/film_grain.h
+++ b/src/film_grain.h
@@ -28,9 +28,57 @@
#ifndef DAV1D_SRC_FILM_GRAIN_H
#define DAV1D_SRC_FILM_GRAIN_H
-#include "dav1d/dav1d.h"
+#include "common/bitdepth.h"
-bitfn_decls(void dav1d_apply_grain, Dav1dPicture *const out,
- const Dav1dPicture *const in);
+#include "src/levels.h"
+
+#define GRAIN_WIDTH 82
+#define GRAIN_HEIGHT 73
+#define BLOCK_SIZE 32
+#if !defined(BITDEPTH) || BITDEPTH == 8
+#define SCALING_SIZE 256
+typedef int8_t entry;
+#else
+#define SCALING_SIZE 4096
+typedef int16_t entry;
+#endif
+
+#define decl_generate_grain_y_fn(name) \
+void (name)(entry buf[GRAIN_HEIGHT][GRAIN_WIDTH], \
+ const Dav1dFilmGrainData *const data HIGHBD_DECL_SUFFIX)
+typedef decl_generate_grain_y_fn(*generate_grain_y_fn);
+
+#define decl_generate_grain_uv_fn(name) \
+void (name)(entry buf[GRAIN_HEIGHT][GRAIN_WIDTH], \
+ const entry buf_y[GRAIN_HEIGHT][GRAIN_WIDTH], \
+ const Dav1dFilmGrainData *const data, const int uv HIGHBD_DECL_SUFFIX)
+typedef decl_generate_grain_uv_fn(*generate_grain_uv_fn);
+
+#define decl_fgy_32x32xn_fn(name) \
+void (name)(pixel *dst_row, const pixel *src_row, ptrdiff_t stride, \
+ const Dav1dFilmGrainData *data, \
+ int pw, const uint8_t scaling[SCALING_SIZE], \
+ const entry grain_lut[GRAIN_HEIGHT][GRAIN_WIDTH], \
+ int bh, int row_num HIGHBD_DECL_SUFFIX)
+typedef decl_fgy_32x32xn_fn(*fgy_32x32xn_fn);
+
+#define decl_fguv_32x32xn_fn(name) \
+void (name)(pixel *dst_row, const pixel *src_row, ptrdiff_t stride, \
+ const pixel *luma_row, ptrdiff_t luma_stride, int pw, int bh, \
+ const Dav1dFilmGrainData *data, \
+ const entry grain_lut[GRAIN_HEIGHT][GRAIN_WIDTH], \
+ const uint8_t scaling[SCALING_SIZE], \
+ int uv_pl, int row_num, int is_id HIGHBD_DECL_SUFFIX)
+typedef decl_fguv_32x32xn_fn(*fguv_32x32xn_fn);
+
+typedef struct Dav1dFilmGrainDSPContext {
+ generate_grain_y_fn generate_grain_y;
+ generate_grain_uv_fn generate_grain_uv[3];
+
+ fgy_32x32xn_fn fgy_32x32xn;
+ fguv_32x32xn_fn fguv_32x32xn[3];
+} Dav1dFilmGrainDSPContext;
+
+bitfn_decls(void dav1d_film_grain_dsp_init, Dav1dFilmGrainDSPContext *c);
#endif /* DAV1D_SRC_FILM_GRAIN_H */