converter.cpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include <cams/fileloader.h>
00025 #include <fvutils/writers/fvraw.h>
00026 #include <fvutils/writers/jpeg.h>
00027 #include <fvutils/writers/png.h>
00028 #include <fvutils/writers/pnm.h>
00029
00030 #include <fvutils/readers/fvraw.h>
00031 #include <fvutils/readers/jpeg.h>
00032
00033 #include <fvutils/color/conversions.h>
00034 #include <utils/system/argparser.h>
00035
00036 #include <cstring>
00037 #include <cstdlib>
00038
00039 using namespace fawkes;
00040 using namespace firevision;
00041
00042 void
00043 print_usage(const char *program_name)
00044 {
00045 printf("Usage: %s [-u -c colorspace -w width -h height] <infile> <outfile>\n\n"
00046 " -u Unformatted raw, you must supply -c, -w and -h\n"
00047 " -c colorspace colorspace string\n"
00048 " -w width width of image in pixels\n"
00049 " -h height height of image in pixels\n",
00050 program_name);
00051 }
00052
00053
00054 int
00055 main(int argc, char** argv)
00056 {
00057 ArgumentParser argp(argc, argv, "uw:h:c:");
00058 if ( argp.num_items() != 2 )
00059 {
00060 print_usage(argp.program_name());
00061 printf("\nInvalid number of files given\n\n");
00062 return -1;
00063 }
00064
00065 const char *fn_in = argp.items()[0];
00066 const char *fn_out = argp.items()[1];
00067
00068 char* fn_out_copy = strdup(fn_out);
00069
00070 printf("Input file: %s\n"
00071 "Output file: %s\n",
00072 fn_in, fn_out);
00073
00074
00075 char *t = strtok(fn_out_copy, ".");
00076 if (NULL == t)
00077 {
00078 printf("invalid filename");
00079 return -2;
00080 }
00081
00082 char* ext_out;
00083 while(NULL != t)
00084 {
00085 ext_out = t;
00086 t = strtok(NULL, ".");
00087 }
00088
00089 FileLoader *fl = NULL;
00090 Writer* writer = NULL;
00091
00092 if ( argp.has_arg("u") )
00093 {
00094 if (argp.has_arg("c") && argp.has_arg("w") && argp.has_arg("h"))
00095 {
00096 fl = new FileLoader(colorspace_by_name(argp.arg("c")), fn_in,
00097 argp.parse_int("w"), argp.parse_int("h"));
00098 printf("Input image: %s, %lix%li\n", argp.arg("c"),
00099 argp.parse_int("w"), argp.parse_int("h"));
00100 }
00101 else
00102 {
00103 printf("You have to supply all of -w, -h, -c when using -u.\n");
00104 return -3;
00105 }
00106 }
00107 else
00108 {
00109 fl = new FileLoader(fn_in);
00110 }
00111
00112 fl->open();
00113 fl->start();
00114
00115 unsigned char *tmpbuf = malloc_buffer(YUV422_PLANAR, fl->pixel_width(), fl->pixel_height());
00116 convert(fl->colorspace(), YUV422_PLANAR, fl->buffer(), tmpbuf,
00117 fl->pixel_width(), fl->pixel_height());
00118
00119
00120 if ( 0 == strcmp(ext_out, "raw") )
00121 {
00122 printf("Format for out file %s is FvRaw\n", fn_out);
00123 writer = new FvRawWriter();
00124 }
00125
00126 else if ( 0 == strcmp(ext_out, "jpeg") || 0 == strcmp(ext_out, "jpg") )
00127 {
00128 printf("Format for out file %s is Jpeg\n", fn_out);
00129 writer = new JpegWriter();
00130 }
00131
00132 else if ( 0 == strcmp(ext_out, "png") )
00133 {
00134 printf("Format for out file %s is PNG\n", fn_out);
00135 writer = new PNGWriter();
00136 }
00137
00138 else if ( 0 == strcmp(ext_out, "pnm") )
00139 {
00140 printf("Format for out file %s is PNM\n", fn_out);
00141 writer = new PNMWriter(PNM_PPM);
00142 }
00143 else
00144 {
00145 printf("Unknown output file format\n");
00146 exit(-2);
00147 }
00148
00149 writer->set_filename(fn_out);
00150 writer->set_dimensions(fl->pixel_width(), fl->pixel_height());
00151 writer->set_buffer(YUV422_PLANAR, tmpbuf);
00152 writer->write();
00153
00154 free(fn_out_copy);
00155
00156 delete fl;
00157 delete writer;
00158
00159 free(tmpbuf);
00160
00161 return 0;
00162 }