diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/Makefile.am | 6 | ||||
| -rw-r--r-- | src/file.cc | 175 | ||||
| -rw-r--r-- | src/file.h | 67 | ||||
| -rw-r--r-- | src/img_file.cc | 42 | ||||
| -rw-r--r-- | src/img_file.h | 43 | ||||
| -rw-r--r-- | src/mov_file.cc | 42 | ||||
| -rw-r--r-- | src/mov_file.h | 43 | 
7 files changed, 418 insertions, 0 deletions
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 <config.h> +#include "file.h" + +#include <sys/types.h> +#include <sys/stat.h> +#include <fcntl.h> +#include <string.h> +#include <unistd.h> + +#include <stdio.h> + +#include <stdlib.h> + + +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 <config.h> +#ifndef __MIAV_FILE_H__ +#define __MIAV_FILE_H__ + +#include <string.h> +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 <config.h> +#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 <config.h> +#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 <config.h> +#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 <config.h> +#ifndef __MIAV_MOV_FILE_H__ +#define __MIAV_MOV_FILE_H__ +#endif/*__MIAV_MOV_FILE_H__*/  | 
