diff options
author | Ronald S. Bultje <rsbultje@gmail.com> | 2019-09-01 18:18:46 +0300 |
---|---|---|
committer | Ronald S. Bultje <rsbultje@gmail.com> | 2019-09-10 21:20:38 +0300 |
commit | b9d4630c6dfb9bfeac7c3fa5aa59217670595f7b (patch) | |
tree | e73b18b80b4607c0fb7d686a6d12416341b05639 /src/film_grain.h | |
parent | 79c4aa95cd1f0fd849e130aa282c632d51fb70da (diff) |
Split out film grain block functions into a DSPContext
Diffstat (limited to 'src/film_grain.h')
-rw-r--r-- | src/film_grain.h | 54 |
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 */ |