00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
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
00046
00047 #include <time.h>
00048 #include <string.h>
00049
00050 #include <netinet/in.h>
00051 #include <sys/mman.h>
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>
00060 #include "ogmstreams.h"
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)) {
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
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
00105
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 }