summaryrefslogtreecommitdiffstats
path: root/libvpx/test/video_source.h
diff options
context:
space:
mode:
Diffstat (limited to 'libvpx/test/video_source.h')
-rw-r--r--libvpx/test/video_source.h35
1 files changed, 27 insertions, 8 deletions
diff --git a/libvpx/test/video_source.h b/libvpx/test/video_source.h
index 26d5328..3d01d39 100644
--- a/libvpx/test/video_source.h
+++ b/libvpx/test/video_source.h
@@ -18,16 +18,35 @@
namespace libvpx_test {
-static FILE *OpenTestDataFile(const std::string& file_name) {
- std::string path_to_source = file_name;
- const char *kDataPath = getenv("LIBVPX_TEST_DATA_PATH");
-
- if (kDataPath) {
- path_to_source = kDataPath;
- path_to_source += "/";
- path_to_source += file_name;
+// Helper macros to ensure LIBVPX_TEST_DATA_PATH is a quoted string.
+// These are undefined right below GetDataPath
+// NOTE: LIBVPX_TEST_DATA_PATH MUST NOT be a quoted string before
+// Stringification or the GetDataPath will fail at runtime
+#define TO_STRING(S) #S
+#define STRINGIFY(S) TO_STRING(S)
+
+// A simple function to encapsulate cross platform retrieval of test data path
+static std::string GetDataPath() {
+ const char *const data_path = getenv("LIBVPX_TEST_DATA_PATH");
+ if (data_path == NULL) {
+#ifdef LIBVPX_TEST_DATA_PATH
+ // In some environments, we cannot set environment variables
+ // Instead, we set the data path by using a preprocessor symbol
+ // which can be set from make files
+ return STRINGIFY(LIBVPX_TEST_DATA_PATH);
+#else
+ return ".";
+#endif
}
+ return data_path;
+}
+// Undefining stringification macros because they are not used elsewhere
+#undef TO_STRING
+#undef STRINGIFY
+
+static FILE *OpenTestDataFile(const std::string& file_name) {
+ const std::string path_to_source = GetDataPath() + "/" + file_name;
return fopen(path_to_source.c_str(), "rb");
}