From fca7f73ae889f5e74a3b31441f5b2d778ecbd2d4 Mon Sep 17 00:00:00 2001 From: deva Date: Thu, 9 Jun 2005 17:54:00 +0000 Subject: New file object, that takes care of uniqueness and counts up number in filename, when grown too big. --- src/Makefile.am | 6 ++ src/file.cc | 175 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/file.h | 67 ++++++++++++++++++++++ src/img_file.cc | 42 ++++++++++++++ src/img_file.h | 43 ++++++++++++++ src/mov_file.cc | 42 ++++++++++++++ src/mov_file.h | 43 ++++++++++++++ 7 files changed, 418 insertions(+) create mode 100644 src/file.cc create mode 100644 src/file.h create mode 100644 src/img_file.cc create mode 100644 src/img_file.h create mode 100644 src/mov_file.cc create mode 100644 src/mov_file.h diff --git a/src/Makefile.am b/src/Makefile.am index f1eeb83..007f61b 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -13,8 +13,10 @@ miav_SOURCES = $(shell if [ $QT_CXXFLAGS ] ; then ../tools/MocList cc; fi ) \ decoder.cc \ dv1394.cc \ encoder.cc \ + file.cc \ frame.cc \ img_encoder.cc \ + img_file.cc \ info_console.cc \ info_gui.cc \ mainwindow.cc \ @@ -25,6 +27,7 @@ miav_SOURCES = $(shell if [ $QT_CXXFLAGS ] ; then ../tools/MocList cc; fi ) \ mov_encoder.cc \ mov_encoder_thread.cc \ mov_encoder_writer.cc \ + mov_file.cc \ network.cc \ player.cc \ server.cc \ @@ -44,8 +47,10 @@ EXTRA_DIST = \ dv.h \ dv1394.h \ encoder.h \ + file.h \ frame.h \ img_encoder.h \ + img_file.h \ info.h \ info_console.h \ info_gui.h \ @@ -57,6 +62,7 @@ EXTRA_DIST = \ mov_encoder.h \ mov_encoder_thread.h \ mov_encoder_writer.h \ + mov_file.h \ network.h \ package.h \ player.h \ diff --git a/src/file.cc b/src/file.cc new file mode 100644 index 0000000..ce06d67 --- /dev/null +++ b/src/file.cc @@ -0,0 +1,175 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/*************************************************************************** + * file.cc + * + * Thu Jun 9 15:31:38 CEST 2005 + * Copyright 2005 Bent Bisballe + * deva@aasimon.org + ****************************************************************************/ + +/* + * This file is part of MIaV. + * + * MIaV is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * MIaV is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with MIaV; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + */ + +/* + * $Id$ + */ + +/* + * $Log$ + * Revision 1.1 2005/06/09 17:54:00 deva + * New file object, that takes care of uniqueness and counts up number in + * filename, when grown too big. + * + */ + +#include +#include "file.h" + +#include +#include +#include +#include +#include + +#include + +#include + + +File::File(char *fn, char* ext) +{ + char path[256]; + + filename = (char*)malloc(strlen(fn) + 1); + extension = (char*)malloc(strlen(ext) + 1); + + strcpy(filename, fn); + strcpy(extension, ext); + + num = 0; + fd = -1; + + int pos = (int)strrchr(filename, '/'); + memset(path, 0, sizeof(path)); + + if(pos) { // pos is NULL, a file will be created in the current dir (Which is bad) + pos -= (int)filename; // Make pos relative to the beginning of the string + strncpy(path, filename, pos); + createPath(path); + } + + Open(); +} + +File::~File() +{ + close(fd); + + free(filename); + free(extension); +} + +int File::Open() +{ + char fname[256]; + + if(fd) close(fd); + fd = -1; + + while(fd == -1) { + sprintf(fname, "%s%.3d.%s", filename, num, extension); + fd = open(fname, O_CREAT | O_WRONLY | O_SYNC | O_EXCL, //| O_LARGEFILE + S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); + num ++; + + // If more than 1000 files are created in one day, something is terribly wrong! + if(num > 1000) { + fprintf(stderr, "Something is wrong with tha path [%s]!\n", fname); + exit(1); + } + + } + return 0; +} + +int File::Write(void* data, int size) +{ + int w; + + w = write(fd, data, size); + + if(w != size) { + Open(); + w = write(fd, data, size); + if(w != size) { + fprintf(stderr, "Out of diskspace!\n"); + exit(1); + } + } + + return w; +} + +int File::createPath(char* path) +{ + // struct stat stats; + char *subpath; + + subpath = (char*)calloc(strlen(path) + 1, 1); + + strcpy(subpath, path); + + subpath[strrchr(subpath, '/') - subpath] = '\0'; + + printf("%s\n", path); + + if(strlen(subpath) > 0) createPath(subpath); + + // stat(path, &stats); + //if(!S_ISDIR(stats.st_mode) && S_ISREG(stats.st_mode)) + mkdir(path, S_IRWXU | S_IRGRP | S_IXGRP | S_IXOTH | S_IROTH); + + free(subpath); + + return 0; +} + + +#ifdef FILE_TEST // Test +#define BLOCK_SIZE 1024*1024 +#define TIMES 4000 +int main() +{ + void *buf = malloc(BLOCK_SIZE); + + double b = BLOCK_SIZE; + double t = TIMES; + + double gb = b / (1024 * 1024 * 1024); + gb *= t; + + printf("Writing %f GB.\n", gb); + + File file("/tmp/filetest/folder1/folder2/file", "ext"); + for(int cnt = 0; cnt < TIMES; cnt++) { + file.Write(buf, BLOCK_SIZE); + } + + printf("Done.\n"); +} +#endif // Test diff --git a/src/file.h b/src/file.h new file mode 100644 index 0000000..e093da9 --- /dev/null +++ b/src/file.h @@ -0,0 +1,67 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/*************************************************************************** + * file.h + * + * Thu Jun 9 15:31:38 CEST 2005 + * Copyright 2005 Bent Bisballe + * deva@aasimon.org + ****************************************************************************/ + +/* + * This file is part of MIaV. + * + * MIaV is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * MIaV is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with MIaV; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + */ + +/* + * $Id$ + */ + +/* + * $Log$ + * Revision 1.1 2005/06/09 17:54:00 deva + * New file object, that takes care of uniqueness and counts up number in + * filename, when grown too big. + * + */ + +#include +#ifndef __MIAV_FILE_H__ +#define __MIAV_FILE_H__ + +#include +using namespace std; + +class File { +public: + File(char *filename, char* ext); + ~File(); + + int Write(void* data, int size); + +private: + int Open(); + + int fd; + + int num; + + char* filename; + char* extension; + + int createPath(char* path); +}; + +#endif/*__MIAV_FILE_H__*/ diff --git a/src/img_file.cc b/src/img_file.cc new file mode 100644 index 0000000..a91aca0 --- /dev/null +++ b/src/img_file.cc @@ -0,0 +1,42 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/*************************************************************************** + * img_file.cc + * + * Thu Jun 9 15:30:30 CEST 2005 + * Copyright 2005 Bent Bisballe + * deva@aasimon.org + ****************************************************************************/ + +/* + * This file is part of MIaV. + * + * MIaV is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * MIaV is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with MIaV; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + */ + +/* + * $Id$ + */ + +/* + * $Log$ + * Revision 1.1 2005/06/09 17:54:00 deva + * New file object, that takes care of uniqueness and counts up number in + * filename, when grown too big. + * + */ + +#include +#include "img_file.h" + diff --git a/src/img_file.h b/src/img_file.h new file mode 100644 index 0000000..a1d9262 --- /dev/null +++ b/src/img_file.h @@ -0,0 +1,43 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/*************************************************************************** + * img_file.h + * + * Thu Jun 9 15:30:30 CEST 2005 + * Copyright 2005 Bent Bisballe + * deva@aasimon.org + ****************************************************************************/ + +/* + * This file is part of MIaV. + * + * MIaV is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * MIaV is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with MIaV; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + */ + +/* + * $Id$ + */ + +/* + * $Log$ + * Revision 1.1 2005/06/09 17:54:00 deva + * New file object, that takes care of uniqueness and counts up number in + * filename, when grown too big. + * + */ + +#include +#ifndef __MIAV_IMG_FILE_H__ +#define __MIAV_IMG_FILE_H__ +#endif/*__MIAV_IMG_FILE_H__*/ diff --git a/src/mov_file.cc b/src/mov_file.cc new file mode 100644 index 0000000..5312966 --- /dev/null +++ b/src/mov_file.cc @@ -0,0 +1,42 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/*************************************************************************** + * mov_file.cc + * + * Thu Jun 9 15:30:19 CEST 2005 + * Copyright 2005 Bent Bisballe + * deva@aasimon.org + ****************************************************************************/ + +/* + * This file is part of MIaV. + * + * MIaV is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * MIaV is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with MIaV; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + */ + +/* + * $Id$ + */ + +/* + * $Log$ + * Revision 1.1 2005/06/09 17:54:00 deva + * New file object, that takes care of uniqueness and counts up number in + * filename, when grown too big. + * + */ + +#include +#include "mov_file.h" + diff --git a/src/mov_file.h b/src/mov_file.h new file mode 100644 index 0000000..f562fee --- /dev/null +++ b/src/mov_file.h @@ -0,0 +1,43 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/*************************************************************************** + * mov_file.h + * + * Thu Jun 9 15:30:18 CEST 2005 + * Copyright 2005 Bent Bisballe + * deva@aasimon.org + ****************************************************************************/ + +/* + * This file is part of MIaV. + * + * MIaV is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * MIaV is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with MIaV; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + */ + +/* + * $Id$ + */ + +/* + * $Log$ + * Revision 1.1 2005/06/09 17:54:00 deva + * New file object, that takes care of uniqueness and counts up number in + * filename, when grown too big. + * + */ + +#include +#ifndef __MIAV_MOV_FILE_H__ +#define __MIAV_MOV_FILE_H__ +#endif/*__MIAV_MOV_FILE_H__*/ -- cgit v1.2.3