#include "json/json.h"
/* config.json
{
"test1": {
"inputFile": "/data/1080p.h264",
"outputFile": "/data/decoded_1080p.yuv",
"width": 1920,
"height": 1080,
"pixelFormat": 2,
"enableSurface": true,
"writeFile": false,
"parallelCount": 1,
"runCount": 1
},
"test2": {
"inputFile": "/data/1080p.yuv",
"outputFile": "/data/encoded_1080p.h264",
"width": 1920,
"height": 1080,
"pixelFormat": 2,
"enableSurface": true,
"writeFile": false,
"parallelCount": 1,
"runCount": 1
}
}
*/
struct TestConfig {
std::string inputFile;
std::string outputFile;
int width = 0;
int height = 0;
int pixelFormat = 2;
bool enableSurface = false;
bool writeFile = true;
int parallelCount = 0;
int runCount = 0;
};
static void ParseConfig(TestConfig& testConfig, const char* path, int mode)
{
std::ifstream ifs(path);
std::string info;
std::string line;
while (ifs >> line) {
info += line;
}
// cout << "json: " << info << endl;
JSONCPP_STRING errs;
Json::CharReaderBuilder readerBuilder;
Json::Value root;
std::unique_ptr<Json::CharReader> const jsonReader(readerBuilder.newCharReader());
bool res = jsonReader->parse(info.c_str(), info.c_str() + info.length(), &root, &errs);
if (!res || !errs.empty()) {
std::cerr << "parse failed\n" << errs << "\n";
}
auto config = root[("test" + std::to_string(mode)).c_str()];
testConfig.inputFile = config["inputFile"].asString();
testConfig.outputFile = config["outputFile"].asString();
testConfig.width = config["width"].asInt();
testConfig.height = config["height"].asInt();
testConfig.pixelFormat = config["pixelFormat"].asInt();
testConfig.enableSurface = config["enableSurface"].asBool();
testConfig.writeFile = config["writeFile"].asBool();
testConfig.parallelCount = config["parallelCount"].asInt();
testConfig.runCount = config["runCount"].asInt();
}