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
00034
00035
00036
00038 #include <unistd.h>
00039 #include <stdio.h>
00040 #include <stdlib.h>
00041 #include <signal.h>
00042 #include <fcntl.h>
00043 #include <sys/uio.h>
00044 #include <errno.h>
00045 #include <sys/types.h>
00046 #include <sys/socket.h>
00047 #include <sys/stat.h>
00048
00049
00050 #include <time.h>
00051 #include <string.h>
00052
00053 #include <netinet/in.h>
00054 #include <sys/mman.h>
00055 #include <sys/ioctl.h>
00056
00057 #include <asm/elphel/c313a.h>
00058 #include <asm/elphel/ext353.h>
00059 #include <asm/byteorder.h>
00060
00061
00062 #include <ogg/ogg.h>
00063 #include "ogmstreams.h"
00064
00065 #include "camogm_jpeg.h"
00066 #include "camogm.h"
00068 int camogm_init_jpeg(void) {
00069 return 0;
00070 }
00071 void camogm_free_jpeg(void) {
00072 }
00073
00074 int camogm_start_jpeg(void) {
00076 char * slash;
00077 int rslt;
00078 strcpy (state->path,state->path_prefix);
00079 slash=strrchr(state->path,'/');
00080 D2(fprintf (debug_file, "camogm_start_jpeg\n"));
00081 if (slash) {
00082 D3(fprintf (debug_file, "Full path %s\n", state->path));
00083 slash[0]='\0';
00084 D3(fprintf (debug_file, "directory path %s\n", state->path));
00085 rslt=mkdir(state->path, 0777);
00086 D3(fprintf (debug_file, "mkdir (%s, 0777) returned %d, errno=%d\n", state->path, rslt, errno));
00087 if ((rslt<0) && (errno != EEXIST)) {
00088 D0(fprintf (debug_file, "Error creating directory %s, errno=%d\n", state->path, errno));
00089 return -CAMOGM_FRAME_FILE_ERR;
00090 }
00091 }
00092 return 0;
00093 }
00094 int camogm_frame_jpeg(void){
00095 int i,j;
00096
00097 ssize_t iovlen,l;
00098 struct iovec chunks_iovec[7];
00099 l=0;
00100 for (i=0; i< (state->chunk_index)-1; i++) {
00101 chunks_iovec[i].iov_base=state->packetchunks[i+1].chunk;
00102 chunks_iovec[i].iov_len= state->packetchunks[i+1].bytes;
00103 l+=chunks_iovec[i].iov_len;
00104 }
00105
00106 sprintf(state->path,"%s%010ld_%06ld.jpeg",state->path_prefix,state->this_frame_params.timestamp_sec,state->this_frame_params.timestamp_usec);
00107
00108
00109
00110 if (((state->ivf=open(state->path,O_RDWR | O_CREAT, 0777)))<0){
00111 D0(fprintf (debug_file, "Error opening %s for writing, returned %d, errno=%d\n", state->path,state->ivf,errno));
00112 return -CAMOGM_FRAME_FILE_ERR;
00113 }
00114
00115 iovlen=writev(state->ivf,chunks_iovec, (state->chunk_index)-1);
00116 if (iovlen < l) {
00117 j=errno;
00118 D0(fprintf(debug_file,"writev error %d (returned %d, expected %d)\n",j,iovlen,l));
00119 close (state->ivf);
00120 return -CAMOGM_FRAME_FILE_ERR;
00121 }
00122 close (state->ivf);
00123 return 0;
00124 }
00125
00126 int camogm_end_jpeg(void){
00127 return 0;
00128 }