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)
these buffered frames must be flushed immediately if a new input produces new the filter must not call request_frame to get more It must just process the frame or queue it The task of requesting more frames is left to the filter s request_frame method or the application If a filter has several the filter must be ready for frames arriving randomly on any input any filter with several inputs will most likely require some kind of queuing mechanism It is perfectly acceptable to have a limited queue and to drop frames when the inputs are too unbalanced request_frame For filters that do not use the this method is called when a frame is wanted on an output For a it should directly call filter_frame on the corresponding output For a if there are queued frames already one of these frames should be pushed If the filter should request a frame on one of its repeatedly until at least one frame has been pushed Return or at least make progress towards producing a frame
static int init_demo(const char *filename)
static unsigned char tab_g[256 *256]