annotate libmpcodecs/vf_hqdn3d.c @ 32142:4614728cab25

build system: Merge all FFmpeg library checks into a single FFmpeg check. There is little point in assuming that some parts of FFmpeg might be available without the others. Plus, mixing and matching static and shared FFmpeg libraries was never supported.
author diego
date Mon, 13 Sep 2010 18:19:25 +0000
parents a972c1a4a012
children 8fa2f43cb760
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
9441
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
1 /*
26727
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
2 * Copyright (C) 2003 Daniel Moreno <comac@comac.darktech.org>
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
3 *
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
4 * This file is part of MPlayer.
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
5 *
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
6 * MPlayer is free software; you can redistribute it and/or modify
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
7 * it under the terms of the GNU General Public License as published by
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
8 * the Free Software Foundation; either version 2 of the License, or
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
9 * (at your option) any later version.
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
10 *
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
11 * MPlayer is distributed in the hope that it will be useful,
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
14 * GNU General Public License for more details.
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
15 *
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
16 * You should have received a copy of the GNU General Public License along
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
17 * with MPlayer; if not, write to the Free Software Foundation, Inc.,
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
18 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
82601a38e2a7 Use standard license headers.
diego
parents: 25221
diff changeset
19 */
9441
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
20
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
21 #include <stdio.h>
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
22 #include <stdlib.h>
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
23 #include <string.h>
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
24 #include <inttypes.h>
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
25 #include <math.h>
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
26
17012
6ff3379a0862 Unify include path handling, -I.. is in CFLAGS.
diego
parents: 16699
diff changeset
27 #include "mp_msg.h"
9441
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
28 #include "img_format.h"
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
29 #include "mp_image.h"
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
30 #include "vf.h"
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
31
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
32 #define PARAM1_DEFAULT 4.0
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
33 #define PARAM2_DEFAULT 3.0
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
34 #define PARAM3_DEFAULT 6.0
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
35
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
36 //===========================================================================//
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
37
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
38 struct vf_priv_s {
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
39 int Coefs[4][512*16];
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
40 unsigned int *Line;
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
41 unsigned short *Frame[3];
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
42 };
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
43
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
44
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
45 /***************************************************************************/
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
46
30642
a972c1a4a012 cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents: 30638
diff changeset
47 static void uninit(struct vf_instance *vf){
9441
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
48 if(vf->priv->Line){free(vf->priv->Line);vf->priv->Line=NULL;}
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
49 if(vf->priv->Frame[0]){free(vf->priv->Frame[0]);vf->priv->Frame[0]=NULL;}
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
50 if(vf->priv->Frame[1]){free(vf->priv->Frame[1]);vf->priv->Frame[1]=NULL;}
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
51 if(vf->priv->Frame[2]){free(vf->priv->Frame[2]);vf->priv->Frame[2]=NULL;}
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
52 }
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
53
30642
a972c1a4a012 cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents: 30638
diff changeset
54 static int config(struct vf_instance *vf,
9441
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
55 int width, int height, int d_width, int d_height,
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
56 unsigned int flags, unsigned int outfmt){
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
57
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
58 uninit(vf);
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
59 vf->priv->Line = malloc(width*sizeof(int));
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
60
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
61 return vf_next_config(vf,width,height,d_width,d_height,flags,outfmt);
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
62 }
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
63
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
64 static inline unsigned int LowPassMul(unsigned int PrevMul, unsigned int CurrMul, int* Coef){
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
65 // int dMul= (PrevMul&0xFFFFFF)-(CurrMul&0xFFFFFF);
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
66 int dMul= PrevMul-CurrMul;
29372
04506b0477af 20% faster hqdn3d on x86_64
lorenm
parents: 29263
diff changeset
67 unsigned int d=((dMul+0x10007FF)>>12);
9441
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
68 return CurrMul + Coef[d];
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
69 }
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
70
16682
5f98b89262c4 hqdn3d: 2.5x faster temporal-only, 1.6x faster spatial-only.
lorenm
parents: 9593
diff changeset
71 static void deNoiseTemporal(
5f98b89262c4 hqdn3d: 2.5x faster temporal-only, 1.6x faster spatial-only.
lorenm
parents: 9593
diff changeset
72 unsigned char *Frame, // mpi->planes[x]
5f98b89262c4 hqdn3d: 2.5x faster temporal-only, 1.6x faster spatial-only.
lorenm
parents: 9593
diff changeset
73 unsigned char *FrameDest, // dmpi->planes[x]
5f98b89262c4 hqdn3d: 2.5x faster temporal-only, 1.6x faster spatial-only.
lorenm
parents: 9593
diff changeset
74 unsigned short *FrameAnt,
5f98b89262c4 hqdn3d: 2.5x faster temporal-only, 1.6x faster spatial-only.
lorenm
parents: 9593
diff changeset
75 int W, int H, int sStride, int dStride,
5f98b89262c4 hqdn3d: 2.5x faster temporal-only, 1.6x faster spatial-only.
lorenm
parents: 9593
diff changeset
76 int *Temporal)
5f98b89262c4 hqdn3d: 2.5x faster temporal-only, 1.6x faster spatial-only.
lorenm
parents: 9593
diff changeset
77 {
29372
04506b0477af 20% faster hqdn3d on x86_64
lorenm
parents: 29263
diff changeset
78 long X, Y;
17965
a1dc210f20b3 use shifts instead of division. 15% faster hqdn3d
lorenm
parents: 17906
diff changeset
79 unsigned int PixelDst;
16682
5f98b89262c4 hqdn3d: 2.5x faster temporal-only, 1.6x faster spatial-only.
lorenm
parents: 9593
diff changeset
80
5f98b89262c4 hqdn3d: 2.5x faster temporal-only, 1.6x faster spatial-only.
lorenm
parents: 9593
diff changeset
81 for (Y = 0; Y < H; Y++){
5f98b89262c4 hqdn3d: 2.5x faster temporal-only, 1.6x faster spatial-only.
lorenm
parents: 9593
diff changeset
82 for (X = 0; X < W; X++){
5f98b89262c4 hqdn3d: 2.5x faster temporal-only, 1.6x faster spatial-only.
lorenm
parents: 9593
diff changeset
83 PixelDst = LowPassMul(FrameAnt[X]<<8, Frame[X]<<16, Temporal);
17965
a1dc210f20b3 use shifts instead of division. 15% faster hqdn3d
lorenm
parents: 17906
diff changeset
84 FrameAnt[X] = ((PixelDst+0x1000007F)>>8);
a1dc210f20b3 use shifts instead of division. 15% faster hqdn3d
lorenm
parents: 17906
diff changeset
85 FrameDest[X]= ((PixelDst+0x10007FFF)>>16);
16682
5f98b89262c4 hqdn3d: 2.5x faster temporal-only, 1.6x faster spatial-only.
lorenm
parents: 9593
diff changeset
86 }
5f98b89262c4 hqdn3d: 2.5x faster temporal-only, 1.6x faster spatial-only.
lorenm
parents: 9593
diff changeset
87 Frame += sStride;
5f98b89262c4 hqdn3d: 2.5x faster temporal-only, 1.6x faster spatial-only.
lorenm
parents: 9593
diff changeset
88 FrameDest += dStride;
5f98b89262c4 hqdn3d: 2.5x faster temporal-only, 1.6x faster spatial-only.
lorenm
parents: 9593
diff changeset
89 FrameAnt += W;
5f98b89262c4 hqdn3d: 2.5x faster temporal-only, 1.6x faster spatial-only.
lorenm
parents: 9593
diff changeset
90 }
5f98b89262c4 hqdn3d: 2.5x faster temporal-only, 1.6x faster spatial-only.
lorenm
parents: 9593
diff changeset
91 }
5f98b89262c4 hqdn3d: 2.5x faster temporal-only, 1.6x faster spatial-only.
lorenm
parents: 9593
diff changeset
92
5f98b89262c4 hqdn3d: 2.5x faster temporal-only, 1.6x faster spatial-only.
lorenm
parents: 9593
diff changeset
93 static void deNoiseSpacial(
5f98b89262c4 hqdn3d: 2.5x faster temporal-only, 1.6x faster spatial-only.
lorenm
parents: 9593
diff changeset
94 unsigned char *Frame, // mpi->planes[x]
5f98b89262c4 hqdn3d: 2.5x faster temporal-only, 1.6x faster spatial-only.
lorenm
parents: 9593
diff changeset
95 unsigned char *FrameDest, // dmpi->planes[x]
5f98b89262c4 hqdn3d: 2.5x faster temporal-only, 1.6x faster spatial-only.
lorenm
parents: 9593
diff changeset
96 unsigned int *LineAnt, // vf->priv->Line (width bytes)
5f98b89262c4 hqdn3d: 2.5x faster temporal-only, 1.6x faster spatial-only.
lorenm
parents: 9593
diff changeset
97 int W, int H, int sStride, int dStride,
5f98b89262c4 hqdn3d: 2.5x faster temporal-only, 1.6x faster spatial-only.
lorenm
parents: 9593
diff changeset
98 int *Horizontal, int *Vertical)
5f98b89262c4 hqdn3d: 2.5x faster temporal-only, 1.6x faster spatial-only.
lorenm
parents: 9593
diff changeset
99 {
29372
04506b0477af 20% faster hqdn3d on x86_64
lorenm
parents: 29263
diff changeset
100 long X, Y;
04506b0477af 20% faster hqdn3d on x86_64
lorenm
parents: 29263
diff changeset
101 long sLineOffs = 0, dLineOffs = 0;
16682
5f98b89262c4 hqdn3d: 2.5x faster temporal-only, 1.6x faster spatial-only.
lorenm
parents: 9593
diff changeset
102 unsigned int PixelAnt;
17965
a1dc210f20b3 use shifts instead of division. 15% faster hqdn3d
lorenm
parents: 17906
diff changeset
103 unsigned int PixelDst;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29087
diff changeset
104
16684
33e93b55fbee neightbour --> neighbor typo fix
diego
parents: 16682
diff changeset
105 /* First pixel has no left nor top neighbor. */
16682
5f98b89262c4 hqdn3d: 2.5x faster temporal-only, 1.6x faster spatial-only.
lorenm
parents: 9593
diff changeset
106 PixelDst = LineAnt[0] = PixelAnt = Frame[0]<<16;
17965
a1dc210f20b3 use shifts instead of division. 15% faster hqdn3d
lorenm
parents: 17906
diff changeset
107 FrameDest[0]= ((PixelDst+0x10007FFF)>>16);
16682
5f98b89262c4 hqdn3d: 2.5x faster temporal-only, 1.6x faster spatial-only.
lorenm
parents: 9593
diff changeset
108
16699
0cb2e995edd1 Typo fix, patch by Ismail D«Ónmez <ismail AH kde POIS org POIS tr>
gpoirier
parents: 16684
diff changeset
109 /* First line has no top neighbor, only left. */
16682
5f98b89262c4 hqdn3d: 2.5x faster temporal-only, 1.6x faster spatial-only.
lorenm
parents: 9593
diff changeset
110 for (X = 1; X < W; X++){
5f98b89262c4 hqdn3d: 2.5x faster temporal-only, 1.6x faster spatial-only.
lorenm
parents: 9593
diff changeset
111 PixelDst = LineAnt[X] = LowPassMul(PixelAnt, Frame[X]<<16, Horizontal);
17965
a1dc210f20b3 use shifts instead of division. 15% faster hqdn3d
lorenm
parents: 17906
diff changeset
112 FrameDest[X]= ((PixelDst+0x10007FFF)>>16);
16682
5f98b89262c4 hqdn3d: 2.5x faster temporal-only, 1.6x faster spatial-only.
lorenm
parents: 9593
diff changeset
113 }
5f98b89262c4 hqdn3d: 2.5x faster temporal-only, 1.6x faster spatial-only.
lorenm
parents: 9593
diff changeset
114
5f98b89262c4 hqdn3d: 2.5x faster temporal-only, 1.6x faster spatial-only.
lorenm
parents: 9593
diff changeset
115 for (Y = 1; Y < H; Y++){
5f98b89262c4 hqdn3d: 2.5x faster temporal-only, 1.6x faster spatial-only.
lorenm
parents: 9593
diff changeset
116 unsigned int PixelAnt;
5f98b89262c4 hqdn3d: 2.5x faster temporal-only, 1.6x faster spatial-only.
lorenm
parents: 9593
diff changeset
117 sLineOffs += sStride, dLineOffs += dStride;
5f98b89262c4 hqdn3d: 2.5x faster temporal-only, 1.6x faster spatial-only.
lorenm
parents: 9593
diff changeset
118 /* First pixel on each line doesn't have previous pixel */
5f98b89262c4 hqdn3d: 2.5x faster temporal-only, 1.6x faster spatial-only.
lorenm
parents: 9593
diff changeset
119 PixelAnt = Frame[sLineOffs]<<16;
5f98b89262c4 hqdn3d: 2.5x faster temporal-only, 1.6x faster spatial-only.
lorenm
parents: 9593
diff changeset
120 PixelDst = LineAnt[0] = LowPassMul(LineAnt[0], PixelAnt, Vertical);
17965
a1dc210f20b3 use shifts instead of division. 15% faster hqdn3d
lorenm
parents: 17906
diff changeset
121 FrameDest[dLineOffs]= ((PixelDst+0x10007FFF)>>16);
16682
5f98b89262c4 hqdn3d: 2.5x faster temporal-only, 1.6x faster spatial-only.
lorenm
parents: 9593
diff changeset
122
5f98b89262c4 hqdn3d: 2.5x faster temporal-only, 1.6x faster spatial-only.
lorenm
parents: 9593
diff changeset
123 for (X = 1; X < W; X++){
17965
a1dc210f20b3 use shifts instead of division. 15% faster hqdn3d
lorenm
parents: 17906
diff changeset
124 unsigned int PixelDst;
16682
5f98b89262c4 hqdn3d: 2.5x faster temporal-only, 1.6x faster spatial-only.
lorenm
parents: 9593
diff changeset
125 /* The rest are normal */
5f98b89262c4 hqdn3d: 2.5x faster temporal-only, 1.6x faster spatial-only.
lorenm
parents: 9593
diff changeset
126 PixelAnt = LowPassMul(PixelAnt, Frame[sLineOffs+X]<<16, Horizontal);
5f98b89262c4 hqdn3d: 2.5x faster temporal-only, 1.6x faster spatial-only.
lorenm
parents: 9593
diff changeset
127 PixelDst = LineAnt[X] = LowPassMul(LineAnt[X], PixelAnt, Vertical);
17965
a1dc210f20b3 use shifts instead of division. 15% faster hqdn3d
lorenm
parents: 17906
diff changeset
128 FrameDest[dLineOffs+X]= ((PixelDst+0x10007FFF)>>16);
16682
5f98b89262c4 hqdn3d: 2.5x faster temporal-only, 1.6x faster spatial-only.
lorenm
parents: 9593
diff changeset
129 }
5f98b89262c4 hqdn3d: 2.5x faster temporal-only, 1.6x faster spatial-only.
lorenm
parents: 9593
diff changeset
130 }
5f98b89262c4 hqdn3d: 2.5x faster temporal-only, 1.6x faster spatial-only.
lorenm
parents: 9593
diff changeset
131 }
5f98b89262c4 hqdn3d: 2.5x faster temporal-only, 1.6x faster spatial-only.
lorenm
parents: 9593
diff changeset
132
9441
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
133 static void deNoise(unsigned char *Frame, // mpi->planes[x]
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
134 unsigned char *FrameDest, // dmpi->planes[x]
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
135 unsigned int *LineAnt, // vf->priv->Line (width bytes)
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
136 unsigned short **FrameAntPtr,
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
137 int W, int H, int sStride, int dStride,
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
138 int *Horizontal, int *Vertical, int *Temporal)
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
139 {
29372
04506b0477af 20% faster hqdn3d on x86_64
lorenm
parents: 29263
diff changeset
140 long X, Y;
04506b0477af 20% faster hqdn3d on x86_64
lorenm
parents: 29263
diff changeset
141 long sLineOffs = 0, dLineOffs = 0;
9441
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
142 unsigned int PixelAnt;
17965
a1dc210f20b3 use shifts instead of division. 15% faster hqdn3d
lorenm
parents: 17906
diff changeset
143 unsigned int PixelDst;
9441
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
144 unsigned short* FrameAnt=(*FrameAntPtr);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29087
diff changeset
145
9441
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
146 if(!FrameAnt){
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
147 (*FrameAntPtr)=FrameAnt=malloc(W*H*sizeof(unsigned short));
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
148 for (Y = 0; Y < H; Y++){
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
149 unsigned short* dst=&FrameAnt[Y*W];
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
150 unsigned char* src=Frame+Y*sStride;
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
151 for (X = 0; X < W; X++) dst[X]=src[X]<<8;
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
152 }
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
153 }
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
154
16682
5f98b89262c4 hqdn3d: 2.5x faster temporal-only, 1.6x faster spatial-only.
lorenm
parents: 9593
diff changeset
155 if(!Horizontal[0] && !Vertical[0]){
5f98b89262c4 hqdn3d: 2.5x faster temporal-only, 1.6x faster spatial-only.
lorenm
parents: 9593
diff changeset
156 deNoiseTemporal(Frame, FrameDest, FrameAnt,
5f98b89262c4 hqdn3d: 2.5x faster temporal-only, 1.6x faster spatial-only.
lorenm
parents: 9593
diff changeset
157 W, H, sStride, dStride, Temporal);
5f98b89262c4 hqdn3d: 2.5x faster temporal-only, 1.6x faster spatial-only.
lorenm
parents: 9593
diff changeset
158 return;
5f98b89262c4 hqdn3d: 2.5x faster temporal-only, 1.6x faster spatial-only.
lorenm
parents: 9593
diff changeset
159 }
5f98b89262c4 hqdn3d: 2.5x faster temporal-only, 1.6x faster spatial-only.
lorenm
parents: 9593
diff changeset
160 if(!Temporal[0]){
5f98b89262c4 hqdn3d: 2.5x faster temporal-only, 1.6x faster spatial-only.
lorenm
parents: 9593
diff changeset
161 deNoiseSpacial(Frame, FrameDest, LineAnt,
5f98b89262c4 hqdn3d: 2.5x faster temporal-only, 1.6x faster spatial-only.
lorenm
parents: 9593
diff changeset
162 W, H, sStride, dStride, Horizontal, Vertical);
5f98b89262c4 hqdn3d: 2.5x faster temporal-only, 1.6x faster spatial-only.
lorenm
parents: 9593
diff changeset
163 return;
5f98b89262c4 hqdn3d: 2.5x faster temporal-only, 1.6x faster spatial-only.
lorenm
parents: 9593
diff changeset
164 }
5f98b89262c4 hqdn3d: 2.5x faster temporal-only, 1.6x faster spatial-only.
lorenm
parents: 9593
diff changeset
165
16684
33e93b55fbee neightbour --> neighbor typo fix
diego
parents: 16682
diff changeset
166 /* First pixel has no left nor top neighbor. Only previous frame */
9441
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
167 LineAnt[0] = PixelAnt = Frame[0]<<16;
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
168 PixelDst = LowPassMul(FrameAnt[0]<<8, PixelAnt, Temporal);
17965
a1dc210f20b3 use shifts instead of division. 15% faster hqdn3d
lorenm
parents: 17906
diff changeset
169 FrameAnt[0] = ((PixelDst+0x1000007F)>>8);
a1dc210f20b3 use shifts instead of division. 15% faster hqdn3d
lorenm
parents: 17906
diff changeset
170 FrameDest[0]= ((PixelDst+0x10007FFF)>>16);
9441
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
171
16699
0cb2e995edd1 Typo fix, patch by Ismail D«Ónmez <ismail AH kde POIS org POIS tr>
gpoirier
parents: 16684
diff changeset
172 /* First line has no top neighbor. Only left one for each pixel and
9441
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
173 * last frame */
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
174 for (X = 1; X < W; X++){
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
175 LineAnt[X] = PixelAnt = LowPassMul(PixelAnt, Frame[X]<<16, Horizontal);
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
176 PixelDst = LowPassMul(FrameAnt[X]<<8, PixelAnt, Temporal);
17965
a1dc210f20b3 use shifts instead of division. 15% faster hqdn3d
lorenm
parents: 17906
diff changeset
177 FrameAnt[X] = ((PixelDst+0x1000007F)>>8);
a1dc210f20b3 use shifts instead of division. 15% faster hqdn3d
lorenm
parents: 17906
diff changeset
178 FrameDest[X]= ((PixelDst+0x10007FFF)>>16);
9441
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
179 }
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
180
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
181 for (Y = 1; Y < H; Y++){
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
182 unsigned int PixelAnt;
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
183 unsigned short* LinePrev=&FrameAnt[Y*W];
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
184 sLineOffs += sStride, dLineOffs += dStride;
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
185 /* First pixel on each line doesn't have previous pixel */
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
186 PixelAnt = Frame[sLineOffs]<<16;
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
187 LineAnt[0] = LowPassMul(LineAnt[0], PixelAnt, Vertical);
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
188 PixelDst = LowPassMul(LinePrev[0]<<8, LineAnt[0], Temporal);
17965
a1dc210f20b3 use shifts instead of division. 15% faster hqdn3d
lorenm
parents: 17906
diff changeset
189 LinePrev[0] = ((PixelDst+0x1000007F)>>8);
a1dc210f20b3 use shifts instead of division. 15% faster hqdn3d
lorenm
parents: 17906
diff changeset
190 FrameDest[dLineOffs]= ((PixelDst+0x10007FFF)>>16);
9441
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
191
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
192 for (X = 1; X < W; X++){
17965
a1dc210f20b3 use shifts instead of division. 15% faster hqdn3d
lorenm
parents: 17906
diff changeset
193 unsigned int PixelDst;
9441
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
194 /* The rest are normal */
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
195 PixelAnt = LowPassMul(PixelAnt, Frame[sLineOffs+X]<<16, Horizontal);
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
196 LineAnt[X] = LowPassMul(LineAnt[X], PixelAnt, Vertical);
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
197 PixelDst = LowPassMul(LinePrev[X]<<8, LineAnt[X], Temporal);
17965
a1dc210f20b3 use shifts instead of division. 15% faster hqdn3d
lorenm
parents: 17906
diff changeset
198 LinePrev[X] = ((PixelDst+0x1000007F)>>8);
a1dc210f20b3 use shifts instead of division. 15% faster hqdn3d
lorenm
parents: 17906
diff changeset
199 FrameDest[dLineOffs+X]= ((PixelDst+0x10007FFF)>>16);
9441
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
200 }
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
201 }
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
202 }
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
203
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
204
30642
a972c1a4a012 cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents: 30638
diff changeset
205 static int put_image(struct vf_instance *vf, mp_image_t *mpi, double pts){
9441
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
206 int cw= mpi->w >> mpi->chroma_x_shift;
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
207 int ch= mpi->h >> mpi->chroma_y_shift;
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
208 int W = mpi->w, H = mpi->h;
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
209
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
210 mp_image_t *dmpi=vf_get_image(vf->next,mpi->imgfmt,
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
211 MP_IMGTYPE_TEMP, MP_IMGFLAG_ACCEPT_STRIDE,
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
212 mpi->w,mpi->h);
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
213
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
214 if(!dmpi) return 0;
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
215
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
216 deNoise(mpi->planes[0], dmpi->planes[0],
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
217 vf->priv->Line, &vf->priv->Frame[0], W, H,
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
218 mpi->stride[0], dmpi->stride[0],
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
219 vf->priv->Coefs[0],
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
220 vf->priv->Coefs[0],
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
221 vf->priv->Coefs[1]);
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
222 deNoise(mpi->planes[1], dmpi->planes[1],
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
223 vf->priv->Line, &vf->priv->Frame[1], cw, ch,
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
224 mpi->stride[1], dmpi->stride[1],
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
225 vf->priv->Coefs[2],
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
226 vf->priv->Coefs[2],
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
227 vf->priv->Coefs[3]);
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
228 deNoise(mpi->planes[2], dmpi->planes[2],
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
229 vf->priv->Line, &vf->priv->Frame[2], cw, ch,
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
230 mpi->stride[2], dmpi->stride[2],
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
231 vf->priv->Coefs[2],
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
232 vf->priv->Coefs[2],
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
233 vf->priv->Coefs[3]);
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
234
17906
20aca9baf5d8 passing pts through the filter layer (lets see if pts or cola comes out at the end)
michael
parents: 17367
diff changeset
235 return vf_next_put_image(vf,dmpi, pts);
9441
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
236 }
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
237
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
238 //===========================================================================//
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
239
30642
a972c1a4a012 cosmetics: Rename struct vf_instance_s --> vf_instance.
diego
parents: 30638
diff changeset
240 static int query_format(struct vf_instance *vf, unsigned int fmt){
9441
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
241 switch(fmt)
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
242 {
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
243 case IMGFMT_YV12:
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
244 case IMGFMT_I420:
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
245 case IMGFMT_IYUV:
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
246 case IMGFMT_YVU9:
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
247 case IMGFMT_444P:
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
248 case IMGFMT_422P:
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
249 case IMGFMT_411P:
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
250 return vf_next_query_format(vf, fmt);
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
251 }
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
252 return 0;
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
253 }
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
254
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
255
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
256 #define ABS(A) ( (A) > 0 ? (A) : -(A) )
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
257
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
258 static void PrecalcCoefs(int *Ct, double Dist25)
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
259 {
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
260 int i;
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
261 double Gamma, Simil, C;
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
262
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
263 Gamma = log(0.25) / log(1.0 - Dist25/255.0 - 0.00001);
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
264
16682
5f98b89262c4 hqdn3d: 2.5x faster temporal-only, 1.6x faster spatial-only.
lorenm
parents: 9593
diff changeset
265 for (i = -255*16; i <= 255*16; i++)
9441
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
266 {
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
267 Simil = 1.0 - ABS(i) / (16*255.0);
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
268 C = pow(Simil, Gamma) * 65536.0 * (double)i / 16.0;
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
269 Ct[16*256+i] = (C<0) ? (C-0.5) : (C+0.5);
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
270 }
16682
5f98b89262c4 hqdn3d: 2.5x faster temporal-only, 1.6x faster spatial-only.
lorenm
parents: 9593
diff changeset
271
5f98b89262c4 hqdn3d: 2.5x faster temporal-only, 1.6x faster spatial-only.
lorenm
parents: 9593
diff changeset
272 Ct[0] = (Dist25 != 0);
9441
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
273 }
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
274
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
275
30638
a7b908875c14 Rename open() vf initialization function to vf_open().
diego
parents: 29372
diff changeset
276 static int vf_open(vf_instance_t *vf, char *args){
9441
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
277 double LumSpac, LumTmp, ChromSpac, ChromTmp;
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
278 double Param1, Param2, Param3, Param4;
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
279
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
280 vf->config=config;
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
281 vf->put_image=put_image;
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
282 vf->query_format=query_format;
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
283 vf->uninit=uninit;
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
284 vf->priv=malloc(sizeof(struct vf_priv_s));
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
285 memset(vf->priv, 0, sizeof(struct vf_priv_s));
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
286
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
287 if (args)
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
288 {
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
289 switch(sscanf(args, "%lf:%lf:%lf:%lf",
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
290 &Param1, &Param2, &Param3, &Param4
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
291 ))
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
292 {
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
293 case 0:
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
294 LumSpac = PARAM1_DEFAULT;
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
295 LumTmp = PARAM3_DEFAULT;
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
296
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
297 ChromSpac = PARAM2_DEFAULT;
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
298 ChromTmp = LumTmp * ChromSpac / LumSpac;
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
299 break;
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
300
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
301 case 1:
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
302 LumSpac = Param1;
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
303 LumTmp = PARAM3_DEFAULT * Param1 / PARAM1_DEFAULT;
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
304
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
305 ChromSpac = PARAM2_DEFAULT * Param1 / PARAM1_DEFAULT;
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
306 ChromTmp = LumTmp * ChromSpac / LumSpac;
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
307 break;
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
308
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
309 case 2:
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
310 LumSpac = Param1;
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
311 LumTmp = PARAM3_DEFAULT * Param1 / PARAM1_DEFAULT;
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
312
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
313 ChromSpac = Param2;
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
314 ChromTmp = LumTmp * ChromSpac / LumSpac;
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
315 break;
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
316
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
317 case 3:
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
318 LumSpac = Param1;
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
319 LumTmp = Param3;
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
320
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
321 ChromSpac = Param2;
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
322 ChromTmp = LumTmp * ChromSpac / LumSpac;
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
323 break;
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
324
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
325 case 4:
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
326 LumSpac = Param1;
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
327 LumTmp = Param3;
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
328
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
329 ChromSpac = Param2;
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
330 ChromTmp = Param4;
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
331 break;
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
332
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
333 default:
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
334 LumSpac = PARAM1_DEFAULT;
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
335 LumTmp = PARAM3_DEFAULT;
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
336
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
337 ChromSpac = PARAM2_DEFAULT;
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
338 ChromTmp = LumTmp * ChromSpac / LumSpac;
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
339 }
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
340 }
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
341 else
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
342 {
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
343 LumSpac = PARAM1_DEFAULT;
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
344 LumTmp = PARAM3_DEFAULT;
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
345
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
346 ChromSpac = PARAM2_DEFAULT;
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
347 ChromTmp = LumTmp * ChromSpac / LumSpac;
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
348 }
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
349
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
350 PrecalcCoefs(vf->priv->Coefs[0], LumSpac);
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
351 PrecalcCoefs(vf->priv->Coefs[1], LumTmp);
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
352 PrecalcCoefs(vf->priv->Coefs[2], ChromSpac);
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
353 PrecalcCoefs(vf->priv->Coefs[3], ChromTmp);
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
354
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
355 return 1;
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
356 }
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
357
25221
00fff9a3b735 Make all vf_info_t structs const
reimar
parents: 23373
diff changeset
358 const vf_info_t vf_info_hqdn3d = {
9441
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
359 "High Quality 3D Denoiser",
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
360 "hqdn3d",
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
361 "Daniel Moreno & A'rpi",
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
362 "",
30638
a7b908875c14 Rename open() vf initialization function to vf_open().
diego
parents: 29372
diff changeset
363 vf_open,
9593
e9a2af584986 Add the new -vf option wich is the same as vop in reverse order.
albeu
parents: 9441
diff changeset
364 NULL
9441
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
365 };
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
366
85fa92f14e99 vf_hqdn3d: High-Quality version of the denoise3d filter
arpi
parents:
diff changeset
367 //===========================================================================//