85int main(
int argc,
char *argv[]) {
86 if (argc == 2 &&
string(
"list-conversions") == argv[1]) {
90 if (argc == 2 &&
string(
"benchmark") == argv[1]) {
94 if (argc != 5 && argc != 7) {
95 cout <<
"Tool to convert between UltraGrid raw pixel format with supported conversions.\n\n"
97 "\t" << argv[0] <<
" benchmark | help | list-conversions\n\n"
98 "\t" << argv[0] <<
" <width> <height> <in_codec> <out_codec> <in_file> <out_file>\n"
99 "\t\t" <<
"Eg.: " << argv[0] <<
" 1920 1080 UYVY RGB 00000001.yuv out.rgb\n\n"
100 "\t" << argv[0] <<
" <width> <height> <in_file> <oname_wo_ext>\n"
101 "\t\t- converts to output Y4M or PNM file (depending on in_file extension color space)\n"
102 "\t\t" <<
"Eg.: " << argv[0] <<
" 1920 1080 00000001.yuv out # creates out.y4m\n\n"
105 "\t" <<
"benchmark - benchmark conversions\n"
106 "\t" <<
"help - show this help\n"
107 "\t" <<
"list-conversions - prints valid conversion pairs\n";
108 return (argc == 1 || argc == 2 &&
string(
"help") == argv[1]) ? 0 : 1;
110 int width = stoi(argv[1]);
111 int height = stoi(argv[2]);
117 ifstream in(argv[5], ifstream::ate | ifstream::binary);
118 std::ofstream out(argv[6], ofstream::binary);
120 in.exceptions(ifstream::failbit | ifstream::badbit | ifstream::eofbit);
121 out.exceptions(ofstream::failbit | ofstream::badbit);
123 assert (width && height && in_codec && out_codec && in && out);
126 assert(in.tellg() >= in_size);
127 in.seekg (0, ifstream::beg);
129 vector<char> in_data(in_size);
130 in.read(in_data.data(), in_size);
134 if (decode ==
nullptr) {
135 cerr <<
"Cannot find decoder from " << argv[3] <<
" to " << argv[4] <<
"! See '" << argv[0] <<
" list-conversions'\n";
140 for (
int y = 0; y < height; ++y) {
141 decode(
reinterpret_cast<unsigned char *
>(&out_data[y * dst_linesize]),
142 reinterpret_cast<unsigned char *
>(&in_data[y *
vc_get_linesize(width, in_codec)]),
143 dst_linesize, 0, 8, 16);
145 out.write(out_data.data(), out_data.size());
146 }
catch (exception &e) {
147 cerr <<
"ERROR: " << e.what() <<
": " << strerror(errno) <<
"\n";