|
简单的jpeg转成avi的类(9) } AviGenerator::~AviGenerator(void) { for (vector<Jpeg_Data*>::iterator iter = this->jpeg_list.begin (); iter != jpeg_list.end (); ++iter) { Jpeg_Data* p = *iter; delete p; } this->jpeg_list.clear (); } void AviGenerator::set_avi_file (string const& file) { this->avi_name_ = file; } void AviGenerator::set_fps (int fps) { this->fps_ = fps; this->usec_per_frame = 1000000 / fps; } void AviGenerator::set_avi_size (int w, int h) { this->width = w; this->height = h; } int AviGenerator::file_size (string const& file) { int ret; #ifdef _WIN32 struct __stat64 result; if (-1 == _stat64 (file.c_str (), &result)) return -1; ret = result.st_size; #else struct stat s; if (-1 == stat(file.c_str (), &s)) return -1; ret = s.st_size; #endif #ifdef DEBUG_VERSION cerr << file.c_str () << " size is " << ret << endl; #endif return ret; } int AviGenerator::files_size () { int ret = 0; int tmp, it; for (vector<Jpeg_Data*>::iterator iter = jpeg_list.begin (); iter != jpeg_list.end (); ++iter) { it = (*iter)->size; tmp = it != 0?it:file_size ((*iter)->name.c_str ()); ret += tmp; ret += (4 - (tmp % 4)) % 4; } return ret; } int AviGenerator::add_frame (string const& file) { int size = file_size (file); if (size <= 0) return -1; struct Jpeg_Data* jpeg= new Jpeg_Data (); jpeg->name = file; jpeg->size = size; jpeg->offset = 0; this->jpeg_list.insert (jpeg_list.begin (), jpeg); return 0; } void AviGenerator::print_quartet (FILE* file, DWORD i)
|