* commit 'd12b5b2f135aade4099f4b26b0fe678656158c13': build: Split test programs off into separate files Some conversions done by: James Almer <jamrial@gmail.com> Merged-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
		
			
				
	
	
		
			261 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			261 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/*
 | 
						|
 * This file is part of FFmpeg.
 | 
						|
 *
 | 
						|
 * FFmpeg is free software; you can redistribute it and/or
 | 
						|
 * modify it under the terms of the GNU Lesser General Public
 | 
						|
 * License as published by the Free Software Foundation; either
 | 
						|
 * version 2.1 of the License, or (at your option) any later version.
 | 
						|
 *
 | 
						|
 * FFmpeg is distributed in the hope that it will be useful,
 | 
						|
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
						|
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | 
						|
 * Lesser General Public License for more details.
 | 
						|
 *
 | 
						|
 * You should have received a copy of the GNU Lesser General Public
 | 
						|
 * License along with FFmpeg; if not, write to the Free Software
 | 
						|
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 | 
						|
 */
 | 
						|
 | 
						|
#define TEST
 | 
						|
#include "parseutils.c"
 | 
						|
 | 
						|
#include <stdint.h>
 | 
						|
#include <stdio.h>
 | 
						|
 | 
						|
#include "common.h"
 | 
						|
#include "log.h"
 | 
						|
#include "rational.h"
 | 
						|
 | 
						|
static uint32_t randomv = MKTAG('L','A','V','U');
 | 
						|
 | 
						|
static uint32_t av_get_random_seed_deterministic(void)
 | 
						|
{
 | 
						|
    return randomv = randomv * 1664525 + 1013904223;
 | 
						|
}
 | 
						|
 | 
						|
static void test_av_parse_video_rate(void)
 | 
						|
{
 | 
						|
    int i;
 | 
						|
    static const char *const rates[] = {
 | 
						|
        "-inf",
 | 
						|
        "inf",
 | 
						|
        "nan",
 | 
						|
        "123/0",
 | 
						|
        "-123 / 0",
 | 
						|
        "",
 | 
						|
        "/",
 | 
						|
        " 123  /  321",
 | 
						|
        "foo/foo",
 | 
						|
        "foo/1",
 | 
						|
        "1/foo",
 | 
						|
        "0/0",
 | 
						|
        "/0",
 | 
						|
        "1/",
 | 
						|
        "1",
 | 
						|
        "0",
 | 
						|
        "-123/123",
 | 
						|
        "-foo",
 | 
						|
        "123.23",
 | 
						|
        ".23",
 | 
						|
        "-.23",
 | 
						|
        "-0.234",
 | 
						|
        "-0.0000001",
 | 
						|
        "  21332.2324   ",
 | 
						|
        " -21332.2324   ",
 | 
						|
    };
 | 
						|
 | 
						|
    for (i = 0; i < FF_ARRAY_ELEMS(rates); i++) {
 | 
						|
        int ret;
 | 
						|
        AVRational q = { 0, 0 };
 | 
						|
        ret = av_parse_video_rate(&q, rates[i]);
 | 
						|
        printf("'%s' -> %d/%d %s\n",
 | 
						|
               rates[i], q.num, q.den, ret ? "ERROR" : "OK");
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
static void test_av_parse_color(void)
 | 
						|
{
 | 
						|
    int i;
 | 
						|
    uint8_t rgba[4];
 | 
						|
    static const char *const color_names[] = {
 | 
						|
        "bikeshed",
 | 
						|
        "RaNdOm",
 | 
						|
        "foo",
 | 
						|
        "red",
 | 
						|
        "Red ",
 | 
						|
        "RED",
 | 
						|
        "Violet",
 | 
						|
        "Yellow",
 | 
						|
        "Red",
 | 
						|
        "0x000000",
 | 
						|
        "0x0000000",
 | 
						|
        "0xff000000",
 | 
						|
        "0x3e34ff",
 | 
						|
        "0x3e34ffaa",
 | 
						|
        "0xffXXee",
 | 
						|
        "0xfoobar",
 | 
						|
        "0xffffeeeeeeee",
 | 
						|
        "#ff0000",
 | 
						|
        "#ffXX00",
 | 
						|
        "ff0000",
 | 
						|
        "ffXX00",
 | 
						|
        "red@foo",
 | 
						|
        "random@10",
 | 
						|
        "0xff0000@1.0",
 | 
						|
        "red@",
 | 
						|
        "red@0xfff",
 | 
						|
        "red@0xf",
 | 
						|
        "red@2",
 | 
						|
        "red@0.1",
 | 
						|
        "red@-1",
 | 
						|
        "red@0.5",
 | 
						|
        "red@1.0",
 | 
						|
        "red@256",
 | 
						|
        "red@10foo",
 | 
						|
        "red@-1.0",
 | 
						|
        "red@-0.0",
 | 
						|
    };
 | 
						|
 | 
						|
    av_log_set_level(AV_LOG_DEBUG);
 | 
						|
 | 
						|
    for (i = 0;  i < FF_ARRAY_ELEMS(color_names); i++) {
 | 
						|
        if (av_parse_color(rgba, color_names[i], -1, NULL) >= 0)
 | 
						|
            printf("%s -> R(%d) G(%d) B(%d) A(%d)\n",
 | 
						|
                   color_names[i], rgba[0], rgba[1], rgba[2], rgba[3]);
 | 
						|
        else
 | 
						|
            printf("%s -> error\n", color_names[i]);
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
static void test_av_small_strptime(void)
 | 
						|
{
 | 
						|
    int i;
 | 
						|
    struct tm tm = { 0 };
 | 
						|
    struct fmt_timespec_entry {
 | 
						|
        const char *fmt, *timespec;
 | 
						|
    } fmt_timespec_entries[] = {
 | 
						|
        { "%Y-%m-%d",                    "2012-12-21" },
 | 
						|
        { "%Y - %m - %d",                "2012-12-21" },
 | 
						|
        { "%Y-%m-%d %H:%M:%S",           "2012-12-21 20:12:21" },
 | 
						|
        { "  %Y - %m - %d %H : %M : %S", "   2012 - 12 -  21   20 : 12 : 21" },
 | 
						|
    };
 | 
						|
 | 
						|
    av_log_set_level(AV_LOG_DEBUG);
 | 
						|
    for (i = 0;  i < FF_ARRAY_ELEMS(fmt_timespec_entries); i++) {
 | 
						|
        char *p;
 | 
						|
        struct fmt_timespec_entry *e = &fmt_timespec_entries[i];
 | 
						|
        printf("fmt:'%s' spec:'%s' -> ", e->fmt, e->timespec);
 | 
						|
        p = av_small_strptime(e->timespec, e->fmt, &tm);
 | 
						|
        if (p) {
 | 
						|
            printf("%04d-%02d-%2d %02d:%02d:%02d\n",
 | 
						|
                   1900+tm.tm_year, tm.tm_mon+1, tm.tm_mday,
 | 
						|
                   tm.tm_hour, tm.tm_min, tm.tm_sec);
 | 
						|
        } else {
 | 
						|
            printf("error\n");
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
static void test_av_parse_time(void)
 | 
						|
{
 | 
						|
    int i;
 | 
						|
    int64_t tv;
 | 
						|
    time_t tvi;
 | 
						|
    struct tm *tm;
 | 
						|
    static char tzstr[] = "TZ=CET-1";
 | 
						|
    static const char * const time_string[] = {
 | 
						|
        "now",
 | 
						|
        "12:35:46",
 | 
						|
        "2000-12-20 0:02:47.5z",
 | 
						|
        "2012 - 02-22  17:44:07",
 | 
						|
        "2000-12-20T010247.6",
 | 
						|
        "2000-12-12 1:35:46+05:30",
 | 
						|
        "2002-12-12 22:30:40-02",
 | 
						|
    };
 | 
						|
    static const char * const duration_string[] = {
 | 
						|
        "2:34:56.79",
 | 
						|
        "-1:23:45.67",
 | 
						|
        "42.1729",
 | 
						|
        "-1729.42",
 | 
						|
        "12:34",
 | 
						|
    };
 | 
						|
 | 
						|
    av_log_set_level(AV_LOG_DEBUG);
 | 
						|
    putenv(tzstr);
 | 
						|
    printf("(now is 2012-03-17 09:14:13.2 +0100, local time is UTC+1)\n");
 | 
						|
    for (i = 0;  i < FF_ARRAY_ELEMS(time_string); i++) {
 | 
						|
        printf("%-24s -> ", time_string[i]);
 | 
						|
        if (av_parse_time(&tv, time_string[i], 0)) {
 | 
						|
            printf("error\n");
 | 
						|
        } else {
 | 
						|
            tvi = tv / 1000000;
 | 
						|
            tm = gmtime(&tvi);
 | 
						|
            printf("%14"PRIi64".%06d = %04d-%02d-%02dT%02d:%02d:%02dZ\n",
 | 
						|
                   tv / 1000000, (int)(tv % 1000000),
 | 
						|
                   tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday,
 | 
						|
                   tm->tm_hour, tm->tm_min, tm->tm_sec);
 | 
						|
        }
 | 
						|
    }
 | 
						|
    for (i = 0;  i < FF_ARRAY_ELEMS(duration_string); i++) {
 | 
						|
        printf("%-24s -> ", duration_string[i]);
 | 
						|
        if (av_parse_time(&tv, duration_string[i], 1)) {
 | 
						|
            printf("error\n");
 | 
						|
        } else {
 | 
						|
            printf("%+21"PRIi64"\n", tv);
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
static void test_av_get_known_color_name(void)
 | 
						|
{
 | 
						|
    int i;
 | 
						|
    const uint8_t *rgba;
 | 
						|
    const char *color;
 | 
						|
 | 
						|
    for (i = 0; i < FF_ARRAY_ELEMS(color_table); ++i) {
 | 
						|
        color = av_get_known_color_name(i, &rgba);
 | 
						|
        if (color)
 | 
						|
            printf("%s -> R(%d) G(%d) B(%d) A(%d)\n",
 | 
						|
                    color, rgba[0], rgba[1], rgba[2], rgba[3]);
 | 
						|
        else
 | 
						|
            printf("Color ID: %d not found\n", i);
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
static void test_av_find_info_tag(void)
 | 
						|
{
 | 
						|
    static const char args[] = "?tag1=val1&tag2=val2&tag3=val3&tag41=value 41&tag42=random1";
 | 
						|
    static const char *tags[] = {"tag1", "tag2", "tag3", "tag4", "tag41", "41", "random1"};
 | 
						|
    char buff[16];
 | 
						|
    int i;
 | 
						|
 | 
						|
    for (i = 0; i < FF_ARRAY_ELEMS(tags); ++i) {
 | 
						|
        if (av_find_info_tag(buff, sizeof(buff), tags[i], args))
 | 
						|
            printf("%d. %s found: %s\n", i, tags[i], buff);
 | 
						|
        else
 | 
						|
            printf("%d. %s not found\n", i, tags[i]);
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
int main(void)
 | 
						|
{
 | 
						|
    printf("Testing av_parse_video_rate()\n");
 | 
						|
    test_av_parse_video_rate();
 | 
						|
 | 
						|
    printf("\nTesting av_parse_color()\n");
 | 
						|
    test_av_parse_color();
 | 
						|
 | 
						|
    printf("\nTesting av_small_strptime()\n");
 | 
						|
    test_av_small_strptime();
 | 
						|
 | 
						|
    printf("\nTesting av_parse_time()\n");
 | 
						|
    test_av_parse_time();
 | 
						|
 | 
						|
    printf("\nTesting av_get_known_color_name()\n");
 | 
						|
    test_av_get_known_color_name();
 | 
						|
 | 
						|
    printf("\nTesting av_find_info_tag()\n");
 | 
						|
    test_av_find_info_tag();
 | 
						|
    return 0;
 | 
						|
}
 |