apps/camogm/camogm_jpeg.c

Go to the documentation of this file.
00001 /*!***************************************************************************
00002 *! FILE NAME  : camogm_jpeg.c
00003 *! DESCRIPTION: Provides writing to series of individual JPEG files for camogm
00004 *! Copyright (C) 2007 Elphel, Inc.
00005 *! -----------------------------------------------------------------------------**
00006 *!  This program is free software: you can redistribute it and/or modify
00007 *!  it under the terms of the GNU General Public License as published by
00008 *!  the Free Software Foundation, either version 3 of the License, or
00009 *!  (at your option) any later version.
00010 *!
00011 *!  This program is distributed in the hope that it will be useful,
00012 *!  but WITHOUT ANY WARRANTY; without even the implied warranty of
00013 *!  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00014 *!  GNU General Public License for more details.
00015 *!
00016 *!  You should have received a copy of the GNU General Public License
00017 *!  along with this program.  If not, see <http://www.gnu.org/licenses/>.
00018 *! -----------------------------------------------------------------------------**
00019 *!
00020 *!  $Log: camogm_jpeg.c,v $
00021 *!  Revision 1.1.1.1  2008/11/27 20:04:01  elphel
00022 *!
00023 *!
00024 *!  Revision 1.3  2008/04/11 23:09:33  elphel
00025 *!  modified to handle kml generation
00026 *!
00027 *!  Revision 1.2  2007/11/19 03:23:21  elphel
00028 *!  7.1.5.5 Added support for *.mov files in camogm.
00029 *!
00030 *!  Revision 1.1  2007/11/16 08:49:57  elphel
00031 *!  Initial release of camogm - program to record video/image to the camera hard drive (or other storage)
00032 *!
00033 */
00035 #include <unistd.h>
00036 #include <stdio.h>
00037 #include <stdlib.h>
00038 #include <signal.h>
00039 #include <fcntl.h>
00040 #include <sys/uio.h>
00041 #include <errno.h>
00042 #include <sys/types.h>
00043 #include <sys/socket.h>
00044 #include <sys/stat.h>
00045 //#include <ctype.h>
00046 //#include <getopt.h>
00047 #include <time.h>
00048 #include <string.h>
00049 
00050 #include <netinet/in.h> /*little <-> big endian ?*/
00051 #include <sys/mman.h>           /* mmap */
00052 #include <sys/ioctl.h>
00053 
00054 #include <asm/elphel/c313a.h>
00055 #include <asm/elphel/ext353.h>
00056 #include <asm/byteorder.h>
00057 
00058 
00059 #include <ogg/ogg.h> // has to be before ogmstreams.h
00060 #include "ogmstreams.h" // move it to <>?
00061 
00062 #include "camogm_jpeg.h"
00063 #include "camogm.h"
00065 int camogm_init_jpeg(void) {
00066   return 0;
00067 }
00068 void camogm_free_jpeg(void) {
00069 }
00070 
00071 int camogm_start_jpeg(void) {
00073   char * slash;
00074   int    rslt;
00075   strcpy (state->path,state->path_prefix); 
00076   slash=strrchr(state->path,'/');
00077 D2(fprintf (debug_file, "camogm_start_jpeg\n"));
00078   if (slash) {
00079     D3(fprintf (debug_file, "Full path %s\n", state->path));
00080     slash[0]='\0'; 
00081     D3(fprintf (debug_file, "directory path %s\n", state->path));
00082     rslt=mkdir(state->path, 0777);
00083     D3(fprintf (debug_file, "mkdir (%s, 0777) returned %d, errno=%d\n", state->path, rslt, errno));
00084     if ((rslt<0) && (errno != EEXIST)) { // already exists is OK
00085        D0(fprintf (debug_file, "Error creating directory %s, errno=%d\n", state->path, errno));
00086        return -CAMOGM_FRAME_FILE_ERR;
00087     }
00088   }
00089   return 0;
00090 }
00091 int camogm_frame_jpeg(void){
00092    int i,j;
00093 //   int fd;
00094    ssize_t iovlen,l;
00095    struct iovec chunks_iovec[7];
00096    l=0;
00097    for (i=0; i< (state->chunk_index)-1; i++) {
00098       chunks_iovec[i].iov_base=state->packetchunks[i+1].chunk;
00099       chunks_iovec[i].iov_len= state->packetchunks[i+1].bytes;
00100       l+=chunks_iovec[i].iov_len;
00101    }
00102 
00103    sprintf(state->path,"%s%010ld_%06ld.jpeg",state->path_prefix,state->this_frame_params.timestamp_sec,state->this_frame_params.timestamp_usec);
00104 // if ((devfd = open("/dev/fpgaio", O_RDWR))<0)  {printf("error opening /dev/fpgaio\r\n"); return -1;}
00105 //_1__12_Error opening /tmp/z/video1195147018_273452.jpeg for writing
00106 
00107    if (((state->ivf=open(state->path,O_RDWR | O_CREAT, 0777)))<0){
00108      D0(fprintf (debug_file, "Error opening %s for writing, returned %d, errno=%d\n", state->path,state->ivf,errno));
00109      return -CAMOGM_FRAME_FILE_ERR;
00110    }
00111 
00112    iovlen=writev(state->ivf,chunks_iovec, (state->chunk_index)-1);
00113    if (iovlen < l) {
00114           j=errno;
00115           D0(fprintf(debug_file,"writev error %d (returned %d, expected %d)\n",j,iovlen,l));
00116           close (state->ivf);
00117           return -CAMOGM_FRAME_FILE_ERR;
00118    }
00119    close (state->ivf);
00120    return 0;
00121 }
00122 
00123 int camogm_end_jpeg(void){
00124   return 0;
00125 }

Generated on Fri Nov 28 00:06:21 2008 for elphel by  doxygen 1.5.1