Commit 8fdc5a62 authored by Andrey Filippov's avatar Andrey Filippov
Browse files

fixed filename, added timestamp-only naming

parent 11731a32
Loading
Loading
Loading
Loading
+22 −3
Original line number Original line Diff line number Diff line
@@ -96,7 +96,10 @@ struct file_set {
	int            exifmeta_dev_fd;
	int            exifmeta_dev_fd;
    const char     *framepars_dev_name;
    const char     *framepars_dev_name;
    int            framepars_dev_fd;
    int            framepars_dev_fd;
    int            sensor_port;
    int            timestamp_name;
};
};

static struct file_set  files[SENSOR_PORTS];
static struct file_set  files[SENSOR_PORTS];


unsigned long * ccam_dma_buf;
unsigned long * ccam_dma_buf;
@@ -168,7 +171,8 @@ const char url_args[] = "This server supports sequence of commands entered in th
		"trig   - send a single internal trigger (and puts internal trigger in single-shot mode\n"
		"trig   - send a single internal trigger (and puts internal trigger in single-shot mode\n"
		"         In this special mode autoexposure/white balance will not work in most cases,\n"
		"         In this special mode autoexposure/white balance will not work in most cases,\n"
		"         camera should be set in triggered mode (TRIG=4), internal (TRIG_CONDITION=0).\n"
		"         camera should be set in triggered mode (TRIG=4), internal (TRIG_CONDITION=0).\n"
		"         No effect on free-running or \"slave\" cameras, so it is OK to send it to all.";
		"         No effect on free-running or \"slave\" cameras, so it is OK to send it to all.\n"
        "timestamp_name - use <seconds>_<useconds>_<channel>.<ext> as a file name";


int  sendImage(struct file_set *fset, int bufferImageData, int use_Exif, int saveImage);
int  sendImage(struct file_set *fset, int bufferImageData, int use_Exif, int saveImage);
void sendBuffer(void * buffer, int len);
void sendBuffer(void * buffer, int len);
@@ -909,6 +913,7 @@ int sendImage(struct file_set *fset, int bufferImageData, int use_Exif, int sav
	int color_mode;
	int color_mode;
	char * mime_type;
	char * mime_type;
	char * extension;
	char * extension;
	int timestamp_start;


	jpeg_start = lseek(fset->circbuf_fd, 0, SEEK_CUR);     //get the current read pointer
	jpeg_start = lseek(fset->circbuf_fd, 0, SEEK_CUR);     //get the current read pointer
//    jpeg_start = lseek(fset->circbuf_fd, 1, SEEK_CUR)-1;   //just for testing, until rebuilt/rebooted kernel
//    jpeg_start = lseek(fset->circbuf_fd, 1, SEEK_CUR)-1;   //just for testing, until rebuilt/rebooted kernel
@@ -961,6 +966,11 @@ int sendImage(struct file_set *fset, int bufferImageData, int use_Exif, int sav
		return -4;
		return -4;
	}
	}


    // Copy timestamp (goes after the image data)
    timestamp_start=jpeg_start+((jpeg_len+CCAM_MMAP_META+3) & (~0x1f)) + 32 - CCAM_MMAP_META_SEC; // magic shift - should index first byte of the time stamp
    if (timestamp_start >= buff_size) timestamp_start-=buff_size;
    memcpy (&(frame_params.timestamp_sec), (unsigned long * ) &ccam_dma_buf[timestamp_start>>2],8);

	if (use_Exif) {
	if (use_Exif) {
		D(fprintf(stderr,"frame_params.meta_index=0x%x\n",(int) frame_params.meta_index));
		D(fprintf(stderr,"frame_params.meta_index=0x%x\n",(int) frame_params.meta_index));
		// read Exif to buffer:
		// read Exif to buffer:
@@ -1062,8 +1072,13 @@ int sendImage(struct file_set *fset, int bufferImageData, int use_Exif, int sav
   #define COLORMODE_MONO4    14 // monochrome, 4 blocks (but still with 2x2 macroblocks)
   #define COLORMODE_MONO4    14 // monochrome, 4 blocks (but still with 2x2 macroblocks)
	 */
	 */
	printf("Content-Type: image/%s\r\n", mime_type);
	printf("Content-Type: image/%s\r\n", mime_type);
	if (saveImage) printf("Content-Disposition: attachment; filename=\"elphelimg_%ld.%s\"\r\n", frame_params.timestamp_sec, extension);     // does not open, asks for filename to save
    if (saveImage) {
	else printf("Content-Disposition: inline; filename=\"elphelimg_%ld.%s\"\r\n", frame_params.timestamp_sec, extension);                   // opens in browser, asks to save on right-click
        printf("Content-Disposition: attachment; filename=\"%s%ld_%06d_%d.%s\"\r\n",      // does not open, asks for filename to save
                fset->timestamp_name?"":"elphelimg_", frame_params.timestamp_sec,  frame_params.timestamp_usec, fset->sensor_port, extension);
    } else {
        printf("Content-Disposition: inline; filename=\"%s%ld_%06d_%d.%s\"\r\n",                    // opens in browser, asks to save on right-click
                fset->timestamp_name?"":"elphelimg_", frame_params.timestamp_sec,  frame_params.timestamp_usec, fset->sensor_port, extension);
    }


	if (bufferImageData) {                                                                                                                  /* Buffer the whole file before sending over the network to make sure it will not be corrupted if the circular buffer will be overrun) */
	if (bufferImageData) {                                                                                                                  /* Buffer the whole file before sending over the network to make sure it will not be corrupted if the circular buffer will be overrun) */
#if ELPHEL_DEBUG_THIS
#if ELPHEL_DEBUG_THIS
@@ -1323,6 +1338,8 @@ void listener_loop(struct file_set *fset)
					metaXML(fset, (sent2socket > 0) ? 1 : 0);               // 0 - new (send headers), 1 - continue, 2 - finish
					metaXML(fset, (sent2socket > 0) ? 1 : 0);               // 0 - new (send headers), 1 - continue, 2 - finish
					sent2socket = 2;
					sent2socket = 2;
					fflush(stdout);                                         // let's not keep client waiting - anyway we've sent it all even when more commands  maybe left
					fflush(stdout);                                         // let's not keep client waiting - anyway we've sent it all even when more commands  maybe left
                } else if (strcmp(cp1, "timestamp_name") == 0) {
                    fset->timestamp_name = 1;
				} else if (strcmp(cp1, "noexif") == 0) {
				} else if (strcmp(cp1, "noexif") == 0) {
					exif_enable = 0;
					exif_enable = 0;
				} else if (strcmp(cp1, "exif") == 0) {
				} else if (strcmp(cp1, "exif") == 0) {
@@ -1444,6 +1461,8 @@ void init_file_set(struct file_set *fset, int fset_sz)
        fset[i].framepars_dev_name = framepars_dev_names[i];
        fset[i].framepars_dev_name = framepars_dev_names[i];
        fset[i].framepars_dev_fd = -1;
        fset[i].framepars_dev_fd = -1;
		fset[i].port_num = 0;
		fset[i].port_num = 0;
        fset[i].sensor_port = i;
        fset[i].timestamp_name = 0;
	}
	}
}
}