1cb93a386Sopenharmony_ci// Copyright 2019 Google LLC.
2cb93a386Sopenharmony_ci// Use of this source code is governed by a BSD-style license that can be found in the LICENSE file.
3cb93a386Sopenharmony_ci
4cb93a386Sopenharmony_ci#include "src/core/SkOSFile.h"
5cb93a386Sopenharmony_ci#include "src/utils/SkOSPath.h"
6cb93a386Sopenharmony_ci#include "tools/flags/CommonFlags.h"
7cb93a386Sopenharmony_ci
8cb93a386Sopenharmony_cinamespace CommonFlags {
9cb93a386Sopenharmony_cibool CollectImages(CommandLineFlags::StringArray images, SkTArray<SkString>* output) {
10cb93a386Sopenharmony_ci    SkASSERT(output);
11cb93a386Sopenharmony_ci
12cb93a386Sopenharmony_ci    static const char* const exts[] = {
13cb93a386Sopenharmony_ci        "bmp",
14cb93a386Sopenharmony_ci        "gif",
15cb93a386Sopenharmony_ci        "jpg",
16cb93a386Sopenharmony_ci        "jpeg",
17cb93a386Sopenharmony_ci        "png",
18cb93a386Sopenharmony_ci        "webp",
19cb93a386Sopenharmony_ci        "ktx",
20cb93a386Sopenharmony_ci        "astc",
21cb93a386Sopenharmony_ci        "wbmp",
22cb93a386Sopenharmony_ci        "ico",
23cb93a386Sopenharmony_ci#if !defined(SK_BUILD_FOR_WIN)
24cb93a386Sopenharmony_ci        "BMP",
25cb93a386Sopenharmony_ci        "GIF",
26cb93a386Sopenharmony_ci        "JPG",
27cb93a386Sopenharmony_ci        "JPEG",
28cb93a386Sopenharmony_ci        "PNG",
29cb93a386Sopenharmony_ci        "WEBP",
30cb93a386Sopenharmony_ci        "KTX",
31cb93a386Sopenharmony_ci        "ASTC",
32cb93a386Sopenharmony_ci        "WBMP",
33cb93a386Sopenharmony_ci        "ICO",
34cb93a386Sopenharmony_ci#endif
35cb93a386Sopenharmony_ci#ifdef SK_HAS_HEIF_LIBRARY
36cb93a386Sopenharmony_ci        "heic",
37cb93a386Sopenharmony_ci#if !defined(SK_BUILD_FOR_WIN)
38cb93a386Sopenharmony_ci        "HEIC",
39cb93a386Sopenharmony_ci#endif
40cb93a386Sopenharmony_ci#endif
41cb93a386Sopenharmony_ci#ifdef SK_CODEC_DECODES_RAW
42cb93a386Sopenharmony_ci        "arw",
43cb93a386Sopenharmony_ci        "cr2",
44cb93a386Sopenharmony_ci        "dng",
45cb93a386Sopenharmony_ci        "nef",
46cb93a386Sopenharmony_ci        "nrw",
47cb93a386Sopenharmony_ci        "orf",
48cb93a386Sopenharmony_ci        "raf",
49cb93a386Sopenharmony_ci        "rw2",
50cb93a386Sopenharmony_ci        "pef",
51cb93a386Sopenharmony_ci        "srw",
52cb93a386Sopenharmony_ci#if !defined(SK_BUILD_FOR_WIN)
53cb93a386Sopenharmony_ci        "ARW",
54cb93a386Sopenharmony_ci        "CR2",
55cb93a386Sopenharmony_ci        "DNG",
56cb93a386Sopenharmony_ci        "NEF",
57cb93a386Sopenharmony_ci        "NRW",
58cb93a386Sopenharmony_ci        "ORF",
59cb93a386Sopenharmony_ci        "RAF",
60cb93a386Sopenharmony_ci        "RW2",
61cb93a386Sopenharmony_ci        "PEF",
62cb93a386Sopenharmony_ci        "SRW",
63cb93a386Sopenharmony_ci#endif
64cb93a386Sopenharmony_ci#endif
65cb93a386Sopenharmony_ci    };
66cb93a386Sopenharmony_ci
67cb93a386Sopenharmony_ci    for (int i = 0; i < images.count(); ++i) {
68cb93a386Sopenharmony_ci        const char* flag = images[i];
69cb93a386Sopenharmony_ci        if (!sk_exists(flag)) {
70cb93a386Sopenharmony_ci            SkDebugf("%s does not exist!\n", flag);
71cb93a386Sopenharmony_ci            return false;
72cb93a386Sopenharmony_ci        }
73cb93a386Sopenharmony_ci
74cb93a386Sopenharmony_ci        if (sk_isdir(flag)) {
75cb93a386Sopenharmony_ci            // If the value passed in is a directory, add all the images
76cb93a386Sopenharmony_ci            bool foundAnImage = false;
77cb93a386Sopenharmony_ci            for (const char* ext : exts) {
78cb93a386Sopenharmony_ci                SkOSFile::Iter it(flag, ext);
79cb93a386Sopenharmony_ci                SkString file;
80cb93a386Sopenharmony_ci                while (it.next(&file)) {
81cb93a386Sopenharmony_ci                    foundAnImage = true;
82cb93a386Sopenharmony_ci                    output->push_back() = SkOSPath::Join(flag, file.c_str());
83cb93a386Sopenharmony_ci                }
84cb93a386Sopenharmony_ci            }
85cb93a386Sopenharmony_ci            if (!foundAnImage) {
86cb93a386Sopenharmony_ci                SkDebugf("No supported images found in %s!\n", flag);
87cb93a386Sopenharmony_ci                return false;
88cb93a386Sopenharmony_ci            }
89cb93a386Sopenharmony_ci        } else {
90cb93a386Sopenharmony_ci            // Also add the value if it is a single image
91cb93a386Sopenharmony_ci            output->push_back() = flag;
92cb93a386Sopenharmony_ci        }
93cb93a386Sopenharmony_ci    }
94cb93a386Sopenharmony_ci    return true;
95cb93a386Sopenharmony_ci}
96cb93a386Sopenharmony_ci
97cb93a386Sopenharmony_ci}  // namespace CommonFlags
98