libvmaf-sys 0.4.4

Library bindings for Netflix's VMAF
Documentation
#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

typedef enum pattern_type {
	PATTERN_FIXED,
	PATTERN_CHECKER_EVEN,
	PATTERN_CHECKER_ODD,
	PATTERN_URANDOM,
	PATTERN_BAD_PATTERN
} pattern_type;

unsigned char get_char(int i, int j, pattern_type pattern, int param)
{
	switch (pattern) {
	case PATTERN_FIXED:
		return param;
	case PATTERN_CHECKER_EVEN:
		return (i % 2 == j % 2) ? param : 0;
	case PATTERN_CHECKER_ODD:
		return (i % 2 == j % 2) ? 0 : param;
	case PATTERN_URANDOM:
		return (unsigned)rand() >> 8;
	default:
		return 0;
	}
}

int main(int argc, const char **argv)
{
	const char *path;
	FILE *file;
	int w;
	int h;
	int type;
	int param;

	int i, j;
	int ret = 1;

	if (argc < 5)
		return 2;

	path  = argv[1];
	w     = atoi(argv[2]);
	h     = atoi(argv[3]);
	type  = atoi(argv[4]);
	param = argc > 5 ? atoi(argv[5]) : 0;

	if (w <= 0 || h <= 0 || type < 0 || type >= PATTERN_BAD_PATTERN)
		return 2;

	if (!(file = fopen(path, "wb")))
	{
		goto fail;
	}

	srand(time(0));

	for (i = 0; i < h; ++i) {
		for (j = 0; j < w; ++j) {
			unsigned char x = get_char(i, j, type, param);

			if (fwrite(&x, 1, 1, file) != 1)
			{
				goto fail;
			}
		}
	}
fail:
	if (file)
		fclose(file);
	return ret;
}