FFmpeg
snowenc.c
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2004 Michael Niedermayer <michaelni@gmx.at>
3  *
4  * This file is part of FFmpeg.
5  *
6  * FFmpeg is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * FFmpeg is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with FFmpeg; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19  */
20 
21 #include "libavcodec/snowenc.c"
22 
23 #undef malloc
24 #undef free
25 #undef printf
26 
27 #include "libavutil/lfg.h"
28 #include "libavutil/mathematics.h"
29 
30 int main(void){
31 #define width 256
32 #define height 256
33  int buffer[2][width*height];
34  SnowContext s;
35  int i;
36  AVLFG prng;
39 
42 
43  if (!s.temp_dwt_buffer || !s.temp_idwt_buffer) {
44  fprintf(stderr, "Failed to allocate memory\n");
45  return 1;
46  }
47 
48  av_lfg_init(&prng, 1);
49 
50  printf("testing 5/3 DWT\n");
51  for(i=0; i<width*height; i++)
52  buffer[0][i] = buffer[1][i] = av_lfg_get(&prng) % 54321 - 12345;
53 
56 
57  for(i=0; i<width*height; i++)
58  if(buffer[0][i]!= buffer[1][i]) printf("fsck: %6d %12d %7d\n",i, buffer[0][i], buffer[1][i]);
59 
60  printf("testing 9/7 DWT\n");
62  for(i=0; i<width*height; i++)
63  buffer[0][i] = buffer[1][i] = av_lfg_get(&prng) % 54321 - 12345;
64 
67 
68  for(i=0; i<width*height; i++)
69  if(FFABS(buffer[0][i] - buffer[1][i])>20) printf("fsck: %6d %12d %7d\n",i, buffer[0][i], buffer[1][i]);
70 
71  {
72  int level, orientation, x, y;
73  int64_t errors[8][4];
74  int64_t g=0;
75 
76  memset(errors, 0, sizeof(errors));
79  for(level=0; level<s.spatial_decomposition_count; level++){
80  for(orientation=level ? 1 : 0; orientation<4; orientation++){
82  int h= height >> (s.spatial_decomposition_count-level);
84  DWTELEM *buf= buffer[0];
85  int64_t error=0;
86 
87  if(orientation&1) buf+=w;
88  if(orientation>1) buf+=stride>>1;
89 
90  memset(buffer[0], 0, sizeof(int)*width*height);
91  buf[w/2 + h/2*stride]= 256*256;
93  for(y=0; y<height; y++){
94  for(x=0; x<width; x++){
95  int64_t d= buffer[0][x + y*width];
96  error += d*d;
97  if(FFABS(width/2-x)<9 && FFABS(height/2-y)<9 && level==2) printf("%8"PRId64" ", d);
98  }
99  if(FFABS(height/2-y)<9 && level==2) printf("\n");
100  }
101  error= (int)(sqrt(error)+0.5);
102  errors[level][orientation]= error;
103  if(g) g=av_gcd(g, error);
104  else g= error;
105  }
106  }
107  printf("static int const visual_weight[][4]={\n");
108  for(level=0; level<s.spatial_decomposition_count; level++){
109  printf(" {");
110  for(orientation=0; orientation<4; orientation++){
111  printf("%8"PRId64",", errors[level][orientation]/g);
112  }
113  printf("},\n");
114  }
115  printf("};\n");
116  {
117  int level=2;
119  //int h= height >> (s.spatial_decomposition_count-level);
121  DWTELEM *buf= buffer[0];
122  int64_t error=0;
123 
124  buf+=w;
125  buf+=stride>>1;
126 
127  memset(buffer[0], 0, sizeof(int)*width*height);
128  for(y=0; y<height; y++){
129  for(x=0; x<width; x++){
130  int tab[4]={0,2,3,1};
131  buffer[0][x+width*y]= 256*256*tab[(x&1) + 2*(y&1)];
132  }
133  }
135  for(y=0; y<height; y++){
136  for(x=0; x<width; x++){
137  int64_t d= buffer[0][x + y*width];
138  error += d*d;
139  if(FFABS(width/2-x)<9 && FFABS(height/2-y)<9) printf("%8"PRId64" ", d);
140  }
141  if(FFABS(height/2-y)<9) printf("\n");
142  }
143  }
144 
145  }
146  return 0;
147 }
Context structure for the Lagged Fibonacci PRNG.
Definition: lfg.h:33
const char * g
Definition: vf_curves.c:115
short IDWTELEM
Definition: dirac_dwt.h:27
#define height
#define i(width, name, range_min, range_max)
Definition: cbs_h2645.c:259
FFmpeg currently uses a custom build this text attempts to document some of its obscure features and options Makefile the full command issued by make and its output will be shown on the screen DBG Preprocess x86 external assembler files to a dbg asm file in the object which then gets compiled Helps in developing those assembler files DESTDIR Destination directory for the install useful to prepare packages or install FFmpeg in cross environments GEN Set to ‘1’ to generate the missing or mismatched references Makefile builds all the libraries and the executables fate Run the fate test note that you must have installed it fate list List all fate regression test targets install Install libraries and programs examples Build all examples located in doc examples checkheaders Check headers dependencies alltools Build all tools in tools directory config Reconfigure the project with the current configuration tools target_dec_< decoder > _fuzzer Build fuzzer to fuzz the specified decoder Useful standard make this is useful to reduce unneeded rebuilding when changing but note that you must force rebuilds of files that actually need it by hand then make j< num > Rebuild with multiple jobs at the same time Faster on multi processor systems make k Continue build in case of errors
Definition: build_system.txt:1
int64_t av_gcd(int64_t a, int64_t b)
Compute the greatest common divisor of two integer operands.
Definition: mathematics.c:37
#define width
uint8_t w
Definition: llviddspenc.c:38
#define FFABS(a)
Absolute value, Note, INT_MIN / INT64_MIN result in undefined behavior as they are not representable ...
Definition: common.h:72
#define s(width, name)
Definition: cbs_vp9.c:257
static void error(const char *err)
int main(void)
Definition: snowenc.c:30
int spatial_decomposition_count
Definition: snow.h:139
int DWTELEM
Definition: dirac_dwt.h:26
static unsigned int av_lfg_get(AVLFG *c)
Get the next random unsigned 32-bit number using an ALFG.
Definition: lfg.h:53
void * buf
Definition: avisynth_c.h:766
void ff_spatial_idwt(IDWTELEM *buffer, IDWTELEM *temp, int width, int height, int stride, int type, int decomposition_count)
Definition: snow_dwt.c:731
av_cold void av_lfg_init(AVLFG *c, unsigned int seed)
Definition: lfg.c:32
DWTELEM * temp_dwt_buffer
Definition: snow.h:147
int spatial_decomposition_type
Definition: snow.h:136
uint8_t level
Definition: svq3.c:207
int
GLint GLenum GLboolean GLsizei stride
Definition: opengl_enc.c:104
IDWTELEM * temp_idwt_buffer
Definition: snow.h:149
void ff_spatial_dwt(DWTELEM *buffer, DWTELEM *temp, int width, int height, int stride, int type, int decomposition_count)
Definition: snow_dwt.c:319
printf("static const uint8_t my_array[100] = {\n")
static const struct twinvq_data tab
#define stride
GLuint buffer
Definition: opengl_enc.c:101
void * av_mallocz_array(size_t nmemb, size_t size)
Definition: mem.c:191