static void randomize_loopfilter_buffers(int bidx, int lineoff, int str, int bit_depth, int dir, const int *E, const int *F, const int *H, const int *I, uint8_t *buf0, uint8_t *buf1) { uint32_t mask = (1 << BIT_DEPTH) - 1; int off = dir ? lineoff : lineoff * 16; int istride = dir ? 1 : 16; int jstride = dir ? str : 1; int i, j; for (i = 0; i < 2; i++) /* flat16 */ { int idx = off + i * istride, p0, q0; setpx(idx, 0, q0 = rnd() & mask); setsx(idx, -1, p0 = q0, E[bidx] >> 2); for (j = 1; j < 8; j++) { setsx(idx, -1 - j, p0, F[bidx]); setsx(idx, j, q0, F[bidx]); } } for (i = 2; i < 4; i++) /* flat8 */ { int idx = off + i * istride, p0, q0; setpx(idx, 0, q0 = rnd() & mask); setsx(idx, -1, p0 = q0, E[bidx] >> 2); for (j = 1; j < 4; j++) { setsx(idx, -1 - j, p0, F[bidx]); setsx(idx, j, q0, F[bidx]); } for (j = 4; j < 8; j++) { setpx(idx, -1 - j, rnd() & mask); setpx(idx, j, rnd() & mask); } } for (i = 4; i < 6; i++) /* regular */ { int idx = off + i * istride, p2, p1, p0, q0, q1, q2; setpx(idx, 0, q0 = rnd() & mask); setsx(idx, 1, q1 = q0, I[bidx]); setsx(idx, 2, q2 = q1, I[bidx]); setsx(idx, 3, q2, I[bidx]); setsx(idx, -1, p0 = q0, E[bidx] >> 2); setsx(idx, -2, p1 = p0, I[bidx]); setsx(idx, -3, p2 = p1, I[bidx]); setsx(idx, -4, p2, I[bidx]); for (j = 4; j < 8; j++) { setpx(idx, -1 - j, rnd() & mask); setpx(idx, j, rnd() & mask); } } for (i = 6; i < 8; i++) /* off */ { int idx = off + i * istride; for (j = 0; j < 8; j++) { setpx(idx, -1 - j, rnd() & mask); setpx(idx, j, rnd() & mask); } } }
int main(int argc, char *argv[]) { struct timespec now; uint8_t *img; int w, h; int sz; int x, y; if(argc != 3) { fprintf(stderr, "Usage: %s width height\n", argv[0]); return 1; } // Seed the random number generator to get different results each time clock_gettime(CLOCK_MONOTONIC, &now); srand((int)now.tv_sec ^ (int)now.tv_nsec); w = atoi(argv[1]); h = atoi(argv[2]); sz = size(w, h); fprintf(stderr, "Image size: %dx%d Array size: %d\n", w, h, sz); img = malloc(sz); if(img == NULL) { perror("Failed to allocate image"); return 2; } memset(img, 0, sz); fprintf(stderr, "Allocated image at %p\n", img); fprintf(stderr, "Setting some pixels\n"); for(y = 0; y < h; y++) { for(x = 0; x < w; x++) { setpx(img, w, x, y, rand() % 255); } } fprintf(stderr, "Writing image to stdout\n"); fwrite(img, sz, 1, stdout); free(img); fprintf(stderr, "Goodbye.\n"); return 0; }