src/util/main.c
author Tero Marttila <terom@fixme.fi>
Thu, 07 Jan 2010 22:25:05 +0200
changeset 44 1a93b5a6efd0
parent 34 a387bc77ad52
child 52 148a120ea7d5
permissions -rw-r--r--
merge
2
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     1
#include "shared/log.h"
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     2
17
baf3fe7c6354 add library error codes, and fix image fopen error handling
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
     3
#include "pngtile.h"
baf3fe7c6354 add library error codes, and fix image fopen error handling
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
     4
2
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     5
#include <getopt.h>
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     6
#include <stdio.h>
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     7
#include <stdbool.h>
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     8
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     9
/**
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    10
 * Command-line options
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    11
 */
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    12
static const struct option options[] = {
6
766df7c9b90d --force-update and store palette
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    13
    { "help",           false,  NULL,   'h' },
766df7c9b90d --force-update and store palette
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    14
    { "quiet",          false,  NULL,   'q' },
766df7c9b90d --force-update and store palette
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    15
    { "verbose",        false,  NULL,   'v' },
766df7c9b90d --force-update and store palette
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    16
    { "debug",          false,  NULL,   'D' },
766df7c9b90d --force-update and store palette
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    17
    { "force-update",   false,  NULL,   'U' },
9
a31048ff76a2 pt_cache_open, pt_image_tile
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
    18
    { "width",          true,   NULL,   'W' },
a31048ff76a2 pt_cache_open, pt_image_tile
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
    19
    { "height",         true,   NULL,   'H' },
a31048ff76a2 pt_cache_open, pt_image_tile
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
    20
    { "x",              true,   NULL,   'x' },
a31048ff76a2 pt_cache_open, pt_image_tile
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
    21
    { "y",              true,   NULL,   'y' },
34
a387bc77ad52 implement zoom
Tero Marttila <terom@fixme.fi>
parents: 26
diff changeset
    22
    { "zoom",           true,   NULL,   'z' },
19
ebcc49de97d0 implement pt_ctx threadpool and pt_image_tile_async
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
    23
    { "threads",        true,   NULL,   'j' },
6
766df7c9b90d --force-update and store palette
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    24
    { 0,                0,      0,      0   }
2
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    25
};
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    26
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    27
/**
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    28
 * Print usage/help info on stderr
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    29
 */
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    30
void help (const char *argv0)
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    31
{
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    32
    fprintf(stderr, "Usage: %s [options] <image> [...]\n", argv0);
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    33
    fprintf(stderr,
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    34
        "XXX: Process some image files.\n"
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    35
        "\n"
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    36
        "\t-h, --help           show this help and exit\n"
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    37
        "\t-q, --quiet          supress informational output\n"
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    38
        "\t-v, --verbose        display more informational output\n"
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    39
        "\t-D, --debug          equivalent to -v\n"
6
766df7c9b90d --force-update and store palette
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    40
        "\t-U, --force-update   unconditionally update image caches\n"
9
a31048ff76a2 pt_cache_open, pt_image_tile
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
    41
        "\t-W, --width          set tile width\n"
a31048ff76a2 pt_cache_open, pt_image_tile
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
    42
        "\t-H, --height         set tile height\n"
a31048ff76a2 pt_cache_open, pt_image_tile
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
    43
        "\t-x, --x              set tile x offset\n"
a31048ff76a2 pt_cache_open, pt_image_tile
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
    44
        "\t-y, --y              set tile z offset\n"
34
a387bc77ad52 implement zoom
Tero Marttila <terom@fixme.fi>
parents: 26
diff changeset
    45
        "\t-z, --zoom           set zoom factor (<0)\n"
19
ebcc49de97d0 implement pt_ctx threadpool and pt_image_tile_async
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
    46
        "\t-j, --threads        number of threads\n"
2
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    47
    );
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    48
}
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    49
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    50
int main (int argc, char **argv)
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    51
{
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    52
    int opt;
6
766df7c9b90d --force-update and store palette
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    53
    bool force_update = false;
34
a387bc77ad52 implement zoom
Tero Marttila <terom@fixme.fi>
parents: 26
diff changeset
    54
    struct pt_tile_info ti = {0, 0, 0, 0, 0};
19
ebcc49de97d0 implement pt_ctx threadpool and pt_image_tile_async
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
    55
    int threads = 2;
ebcc49de97d0 implement pt_ctx threadpool and pt_image_tile_async
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
    56
    int tmp, err;
2
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    57
    
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    58
    // parse arguments
34
a387bc77ad52 implement zoom
Tero Marttila <terom@fixme.fi>
parents: 26
diff changeset
    59
    while ((opt = getopt_long(argc, argv, "hqvDUW:H:x:y:z:j:", options, NULL)) != -1) {
2
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    60
        switch (opt) {
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    61
            case 'h':
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    62
                // display help
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    63
                help(argv[0]);
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    64
                
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    65
                return EXIT_SUCCESS;
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    66
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    67
            case 'q':
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    68
                // supress excess log output
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    69
                set_log_level(LOG_WARN);
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    70
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    71
                break;
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    72
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    73
            case 'v':
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    74
            case 'D':
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    75
                // display additional output
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    76
                set_log_level(LOG_DEBUG);
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    77
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    78
                break;
6
766df7c9b90d --force-update and store palette
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    79
            
766df7c9b90d --force-update and store palette
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    80
            case 'U':
766df7c9b90d --force-update and store palette
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    81
                // force update of image caches
766df7c9b90d --force-update and store palette
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    82
                force_update = true;
766df7c9b90d --force-update and store palette
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    83
                
766df7c9b90d --force-update and store palette
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    84
                break;
2
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    85
9
a31048ff76a2 pt_cache_open, pt_image_tile
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
    86
            case 'W':
a31048ff76a2 pt_cache_open, pt_image_tile
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
    87
                ti.width = strtol(optarg, NULL, 0); break;
a31048ff76a2 pt_cache_open, pt_image_tile
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
    88
a31048ff76a2 pt_cache_open, pt_image_tile
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
    89
            case 'H':
a31048ff76a2 pt_cache_open, pt_image_tile
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
    90
                ti.height = strtol(optarg, NULL, 0); break;
a31048ff76a2 pt_cache_open, pt_image_tile
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
    91
a31048ff76a2 pt_cache_open, pt_image_tile
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
    92
            case 'x':
a31048ff76a2 pt_cache_open, pt_image_tile
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
    93
                ti.x = strtol(optarg, NULL, 0); break;
a31048ff76a2 pt_cache_open, pt_image_tile
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
    94
a31048ff76a2 pt_cache_open, pt_image_tile
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
    95
            case 'y':
a31048ff76a2 pt_cache_open, pt_image_tile
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
    96
                ti.y = strtol(optarg, NULL, 0); break;
a31048ff76a2 pt_cache_open, pt_image_tile
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
    97
34
a387bc77ad52 implement zoom
Tero Marttila <terom@fixme.fi>
parents: 26
diff changeset
    98
            case 'z':
a387bc77ad52 implement zoom
Tero Marttila <terom@fixme.fi>
parents: 26
diff changeset
    99
                ti.zoom = strtol(optarg, NULL, 0); break;
a387bc77ad52 implement zoom
Tero Marttila <terom@fixme.fi>
parents: 26
diff changeset
   100
19
ebcc49de97d0 implement pt_ctx threadpool and pt_image_tile_async
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   101
            case 'j':
ebcc49de97d0 implement pt_ctx threadpool and pt_image_tile_async
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   102
                if ((tmp = strtol(optarg, NULL, 0)) < 1)
ebcc49de97d0 implement pt_ctx threadpool and pt_image_tile_async
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   103
                    FATAL("Invalid value for -j/--threads");
ebcc49de97d0 implement pt_ctx threadpool and pt_image_tile_async
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   104
ebcc49de97d0 implement pt_ctx threadpool and pt_image_tile_async
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   105
                threads = tmp; break;
ebcc49de97d0 implement pt_ctx threadpool and pt_image_tile_async
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   106
2
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   107
            case '?':
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   108
                // useage error
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   109
                help(argv[0]);
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   110
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   111
                return EXIT_FAILURE;
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   112
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   113
            default:
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   114
                // getopt???
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   115
                FATAL("getopt_long returned unknown code %d", opt);
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   116
        }
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   117
    }
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   118
    
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   119
    // end-of-arguments?
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   120
    if (!argv[optind])
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   121
        EXIT_WARN(EXIT_FAILURE, "No images given");
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   122
    
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   123
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   124
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   125
    struct pt_ctx *ctx = NULL;
5
4b440fa03183 move stale-update logic to main
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   126
    struct pt_image *image = NULL;
8
400ddf1e7aa9 pt_image_status
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
   127
    enum pt_cache_status status;
2
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   128
19
ebcc49de97d0 implement pt_ctx threadpool and pt_image_tile_async
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   129
    // build ctx
ebcc49de97d0 implement pt_ctx threadpool and pt_image_tile_async
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   130
    log_debug("Construct pt_ctx with %d threads", threads);
ebcc49de97d0 implement pt_ctx threadpool and pt_image_tile_async
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   131
ebcc49de97d0 implement pt_ctx threadpool and pt_image_tile_async
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   132
    if ((err = pt_ctx_new(&ctx, threads)))
ebcc49de97d0 implement pt_ctx threadpool and pt_image_tile_async
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   133
        EXIT_ERROR(EXIT_FAILURE, "pt_ctx_new: threads=%d", threads);
ebcc49de97d0 implement pt_ctx threadpool and pt_image_tile_async
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   134
ebcc49de97d0 implement pt_ctx threadpool and pt_image_tile_async
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   135
    
ebcc49de97d0 implement pt_ctx threadpool and pt_image_tile_async
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   136
    // process each image in turn
2
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   137
    log_debug("Processing %d images...", argc - optind);
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   138
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   139
    for (int i = optind; i < argc; i++) {
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   140
        const char *img_path = argv[i];
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   141
5
4b440fa03183 move stale-update logic to main
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   142
        log_debug("Loading image from: %s...", img_path);
2
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   143
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   144
        // open
17
baf3fe7c6354 add library error codes, and fix image fopen error handling
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
   145
        if ((err = pt_image_open(&image, ctx, img_path, PT_OPEN_UPDATE))) {
baf3fe7c6354 add library error codes, and fix image fopen error handling
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
   146
            log_errno("pt_image_open: %s: %s", img_path, pt_strerror(err));
2
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   147
            continue;
5
4b440fa03183 move stale-update logic to main
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   148
        }
2
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   149
5
4b440fa03183 move stale-update logic to main
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   150
        log_info("Opened image at: %s", img_path);
4b440fa03183 move stale-update logic to main
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   151
        
4b440fa03183 move stale-update logic to main
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   152
        // check if stale
8
400ddf1e7aa9 pt_image_status
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
   153
        if ((status = pt_image_status(image)) < 0) {
17
baf3fe7c6354 add library error codes, and fix image fopen error handling
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
   154
            log_errno("pt_image_status: %s: %s", img_path, pt_strerror(status));
5
4b440fa03183 move stale-update logic to main
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   155
            goto error;
4b440fa03183 move stale-update logic to main
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   156
        }
4b440fa03183 move stale-update logic to main
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   157
        
4b440fa03183 move stale-update logic to main
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   158
        // update if stale
8
400ddf1e7aa9 pt_image_status
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
   159
        if (status != PT_CACHE_FRESH || force_update) {
400ddf1e7aa9 pt_image_status
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
   160
            if (status == PT_CACHE_NONE)
26
72fd5ba8d8c1 use pt_image_load and fix output indent
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
   161
                log_debug("\tImage cache is missing");
8
400ddf1e7aa9 pt_image_status
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
   162
400ddf1e7aa9 pt_image_status
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
   163
            else if (status == PT_CACHE_STALE)
26
72fd5ba8d8c1 use pt_image_load and fix output indent
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
   164
                log_debug("\tImage cache is stale");
8
400ddf1e7aa9 pt_image_status
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
   165
400ddf1e7aa9 pt_image_status
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
   166
            else if (status == PT_CACHE_FRESH)
26
72fd5ba8d8c1 use pt_image_load and fix output indent
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
   167
                log_debug("\tImage cache is fresh");
8
400ddf1e7aa9 pt_image_status
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
   168
26
72fd5ba8d8c1 use pt_image_load and fix output indent
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
   169
            log_debug("\tUpdating image cache...");
2
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   170
17
baf3fe7c6354 add library error codes, and fix image fopen error handling
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
   171
            if ((err = pt_image_update(image))) {
baf3fe7c6354 add library error codes, and fix image fopen error handling
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
   172
                log_warn_errno("pt_image_update: %s: %s", img_path, pt_strerror(err));
5
4b440fa03183 move stale-update logic to main
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   173
            }
4b440fa03183 move stale-update logic to main
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   174
26
72fd5ba8d8c1 use pt_image_load and fix output indent
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
   175
            log_info("\tUpdated image cache");
18
f92a24ab046e add missing lib/tile.*
Tero Marttila <terom@fixme.fi>
parents: 17
diff changeset
   176
f92a24ab046e add missing lib/tile.*
Tero Marttila <terom@fixme.fi>
parents: 17
diff changeset
   177
        } else {
26
72fd5ba8d8c1 use pt_image_load and fix output indent
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
   178
            log_debug("\tImage cache is fresh");
2
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   179
        }
5
4b440fa03183 move stale-update logic to main
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   180
7
997906f5fd2d mmap header, implement pt_image_info (post-update)
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
   181
        // show info
997906f5fd2d mmap header, implement pt_image_info (post-update)
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
   182
        const struct pt_image_info *img_info;
997906f5fd2d mmap header, implement pt_image_info (post-update)
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
   183
        
17
baf3fe7c6354 add library error codes, and fix image fopen error handling
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
   184
        if ((err = pt_image_info(image, &img_info)))
baf3fe7c6354 add library error codes, and fix image fopen error handling
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
   185
            log_warn_errno("pt_image_info: %s: %s", img_path, pt_strerror(err));
7
997906f5fd2d mmap header, implement pt_image_info (post-update)
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
   186
997906f5fd2d mmap header, implement pt_image_info (post-update)
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
   187
        else
997906f5fd2d mmap header, implement pt_image_info (post-update)
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
   188
            log_info("\tImage dimensions: %zux%zu", img_info->width, img_info->height);
997906f5fd2d mmap header, implement pt_image_info (post-update)
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
   189
9
a31048ff76a2 pt_cache_open, pt_image_tile
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
   190
        // render tile?
a31048ff76a2 pt_cache_open, pt_image_tile
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
   191
        if (ti.width && ti.height) {
23
9fd50fc1d223 render async tile to separate tempfile
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
   192
            char tmp_name[] = "pt-tile-XXXXXX";
9fd50fc1d223 render async tile to separate tempfile
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
   193
            int fd;
9fd50fc1d223 render async tile to separate tempfile
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
   194
            FILE *out;
9fd50fc1d223 render async tile to separate tempfile
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
   195
            
9fd50fc1d223 render async tile to separate tempfile
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
   196
            // temporary file for output
9fd50fc1d223 render async tile to separate tempfile
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
   197
            if ((fd = mkstemp(tmp_name)) < 0) {
9fd50fc1d223 render async tile to separate tempfile
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
   198
                log_errno("mkstemp");
9fd50fc1d223 render async tile to separate tempfile
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
   199
                
9fd50fc1d223 render async tile to separate tempfile
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
   200
                continue;
9fd50fc1d223 render async tile to separate tempfile
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
   201
            }
9
a31048ff76a2 pt_cache_open, pt_image_tile
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
   202
23
9fd50fc1d223 render async tile to separate tempfile
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
   203
            // open out
9fd50fc1d223 render async tile to separate tempfile
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
   204
            if ((out = fdopen(fd, "w")) == NULL) {
9fd50fc1d223 render async tile to separate tempfile
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
   205
                log_errno("fdopen");
9fd50fc1d223 render async tile to separate tempfile
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
   206
9fd50fc1d223 render async tile to separate tempfile
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
   207
                continue;
9fd50fc1d223 render async tile to separate tempfile
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
   208
            }
26
72fd5ba8d8c1 use pt_image_load and fix output indent
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
   209
            
72fd5ba8d8c1 use pt_image_load and fix output indent
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
   210
            // ensure it's loaded
72fd5ba8d8c1 use pt_image_load and fix output indent
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
   211
            log_debug("\tLoad image cache...");
72fd5ba8d8c1 use pt_image_load and fix output indent
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
   212
72fd5ba8d8c1 use pt_image_load and fix output indent
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
   213
            if ((err = pt_image_load(image)))
72fd5ba8d8c1 use pt_image_load and fix output indent
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
   214
                log_errno("pt_image_load: %s", pt_strerror(err));
23
9fd50fc1d223 render async tile to separate tempfile
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
   215
9fd50fc1d223 render async tile to separate tempfile
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
   216
            // render
26
72fd5ba8d8c1 use pt_image_load and fix output indent
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
   217
            log_info("\tAsync render tile %zux%zu@(%zu,%zu) -> %s", ti.width, ti.height, ti.x, ti.y, tmp_name);
72fd5ba8d8c1 use pt_image_load and fix output indent
Tero Marttila <terom@fixme.fi>
parents: 24
diff changeset
   218
23
9fd50fc1d223 render async tile to separate tempfile
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
   219
9fd50fc1d223 render async tile to separate tempfile
Tero Marttila <terom@fixme.fi>
parents: 19
diff changeset
   220
            if ((err = pt_image_tile_async(image, &ti, out)))
17
baf3fe7c6354 add library error codes, and fix image fopen error handling
Tero Marttila <terom@fixme.fi>
parents: 11
diff changeset
   221
                log_errno("pt_image_tile: %s: %s", img_path, pt_strerror(err));
9
a31048ff76a2 pt_cache_open, pt_image_tile
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
   222
        }
5
4b440fa03183 move stale-update logic to main
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   223
4b440fa03183 move stale-update logic to main
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   224
error:
4b440fa03183 move stale-update logic to main
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   225
        // cleanup
19
ebcc49de97d0 implement pt_ctx threadpool and pt_image_tile_async
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   226
        // XXX: leak because of async: pt_image_destroy(image);
ebcc49de97d0 implement pt_ctx threadpool and pt_image_tile_async
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   227
        ;
2
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   228
    }
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   229
19
ebcc49de97d0 implement pt_ctx threadpool and pt_image_tile_async
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   230
    log_info("Waiting for images to finish...");
ebcc49de97d0 implement pt_ctx threadpool and pt_image_tile_async
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   231
ebcc49de97d0 implement pt_ctx threadpool and pt_image_tile_async
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   232
    // wait for tile operations to finish...
ebcc49de97d0 implement pt_ctx threadpool and pt_image_tile_async
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   233
    pt_ctx_shutdown(ctx);
ebcc49de97d0 implement pt_ctx threadpool and pt_image_tile_async
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   234
ebcc49de97d0 implement pt_ctx threadpool and pt_image_tile_async
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   235
    log_info("Done");
ebcc49de97d0 implement pt_ctx threadpool and pt_image_tile_async
Tero Marttila <terom@fixme.fi>
parents: 18
diff changeset
   236
2
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   237
    return 0;
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   238
}
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   239