Go to the documentation of this file.
29 #define FIXP (1 << 16)
30 #define MY_PI 205887 // (M_PI * FIX)
58 static unsigned char tab_r[256 * 256];
59 static unsigned char tab_g[256 * 256];
60 static unsigned char tab_b[256 * 256];
65 static int ipol(uint8_t *
src,
int x,
int y)
69 int frac_x = x & 0xFFFF;
70 int frac_y = y & 0xFFFF;
71 int s00 =
src[( int_x & 255) + 256 * ( int_y & 255)];
72 int s01 =
src[((int_x + 1) & 255) + 256 * ( int_y & 255)];
73 int s10 =
src[( int_x & 255) + 256 * ((int_y + 1) & 255)];
74 int s11 =
src[((int_x + 1) & 255) + 256 * ((int_y + 1) & 255)];
75 int s0 = (((1 << 16) - frac_x) * s00 + frac_x * s01) >> 8;
76 int s1 = (((1 << 16) - frac_x) * s10 + frac_x * s11) >> 8;
78 return (((1 << 16) - frac_y) *
s0 + frac_y *
s1) >> 24;
83 const int c =
h_cos[num % 360];
84 const int s =
h_sin[num % 360];
86 const int xi = -(
w / 2) *
c;
87 const int yi = (
w / 2) *
s;
89 const int xj = -(
h / 2) *
s;
90 const int yj = -(
h / 2) *
c;
97 for (j = 0; j <
h; j++) {
101 y = yprime + yi +
FIXP *
h / 2;
104 for (
i = 0;
i <
w;
i++) {
127 input_file = fopen(filename,
"rb");
133 if (fread(
line, 1, 15, input_file) != 15)
135 for (
i = 0;
i <
H;
i++) {
136 if (fread(
line, 1, 3 *
W, input_file) != 3 *
W)
138 for (j = 0; j <
W; j++) {
147 for (
i = 0;
i < 360;
i++) {
148 radian = 2 *
i *
MY_PI / 360;
157 int main(
int argc,
char **argv)
164 printf(
"usage: %s image.pnm file|dir\n"
165 "generate a test video stream\n", argv[0]);
169 if (!freopen(argv[2],
"wb", stdout))
186 snprintf(buf,
sizeof(buf),
"%s%02d.pgm", argv[2],
i);
int main(int argc, char **argv)
static unsigned char * rgb_tab
static void put_pixel(uint16_t *dst, ptrdiff_t linesize, const int16_t *in, int bits_per_raw_sample)
Add bias value, clamp and output pixels of a slice.
static int64_t int_pow(int64_t a, int p)
static unsigned char tab_r[256 *256]
static int ipol(uint8_t *src, int x, int y)
#define xi(width, name, var, range_min, range_max, subs,...)
static void gen_image(int num, int w, int h)
Undefined Behavior In the C some operations are like signed integer dereferencing freed accessing outside allocated Undefined Behavior must not occur in a C it is not safe even if the output of undefined operations is unused The unsafety may seem nit picking but Optimizing compilers have in fact optimized code on the assumption that no undefined Behavior occurs Optimizing code based on wrong assumptions can and has in some cases lead to effects beyond the output of computations The signed integer overflow problem in speed critical code Code which is highly optimized and works with signed integers sometimes has the problem that often the output of the computation does not c
static unsigned char tab_b[256 *256]
static int64_t int_sin(int64_t a)
printf("static const uint8_t my_array[100] = {\n")
The reader does not expect b to be semantically here and if the code is changed by maybe adding a a division or other the signedness will almost certainly be mistaken To avoid this confusion a new type was SUINT is the C unsigned type but it holds a signed int to use the same example SUINT a
static void pgmyuv_save(const char *filename, int w, int h, const unsigned char *rgb_tab)
#define i(width, name, range_min, range_max)
static int init_demo(const char *filename)
static unsigned char tab_g[256 *256]