writer.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 <fvutils/writers/writer.h>
00025
00026 #include <core/exception.h>
00027 #include <core/exceptions/system.h>
00028
00029 #include <cstring>
00030 #include <cstdlib>
00031 #include <cstdio>
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072 Writer::Writer(const char *extension)
00073 {
00074 basename = 0;
00075 filename = 0;
00076
00077 this->extension = 0;
00078 if (0 != extension) {
00079 this->extension = strdup(extension);
00080 }
00081
00082 width = 0;
00083 height = 0;
00084 cspace = CS_UNKNOWN;
00085 buffer = 0;
00086 }
00087
00088
00089 Writer::~Writer()
00090 {
00091 free(filename);
00092 free(basename);
00093 free(extension);
00094 }
00095
00096
00097
00098
00099
00100 void
00101 Writer::set_filename(const char *filename)
00102 {
00103 free(this->filename);
00104
00105 if ( 0 != strstr(filename, ".") ) {
00106 this->filename = strdup(filename);
00107 } else {
00108 free(this->basename);
00109 this->basename = strdup(filename);
00110
00111
00112 if (0 == extension) {
00113 throw fawkes::Exception("Extension not set");
00114 }
00115
00116 if (asprintf(&(this->filename), "%s.%s", basename, extension) == -1) {
00117 throw fawkes::OutOfMemoryException("Writer::set_filename(): asprintf() failed");
00118 }
00119 }
00120 }
00121
00122
00123
00124
00125
00126 void
00127 Writer::set_dimensions(unsigned int width, unsigned int height)
00128 {
00129 this->width = width;
00130 this->height = height;
00131 }
00132
00133
00134
00135
00136
00137 void
00138 Writer::set_buffer(colorspace_t cspace, unsigned char *buffer)
00139 {
00140 this->cspace = cspace;
00141 this->buffer = buffer;
00142 }
00143
00144
00145
00146
00147 void
00148 Writer::set_extension(const char *extension)
00149 {
00150 free(this->extension);
00151 this->extension = strdup(extension);
00152
00153
00154 free(this->filename);
00155 this->filename = (char *) malloc( strlen(basename) + strlen(extension) + 1 );
00156 strcpy(filename, basename);
00157 strcat(this->filename, ".");
00158 strcat(filename, extension);
00159 }