void put_picture_fd(struct context *cnt, FILE *picture, unsigned char *image, int quality) { if (cnt->conf.ppm) { put_ppm_bgr24_file(picture, image, cnt->imgs.width, cnt->imgs.height); } else { switch (cnt->imgs.type) { case VIDEO_PALETTE_YUV420P: put_jpeg_yuv420p_file(picture, image, cnt->imgs.width, cnt->imgs.height, quality); break; case VIDEO_PALETTE_GREY: put_jpeg_grey_file(picture, image, cnt->imgs.width, cnt->imgs.height, quality); break; default : motion_log(LOG_ERR, 0, "Unknow image type %d", cnt->imgs.type); } } }
static void filter( int fdIn , y4m_stream_info_t *inStrInfo, int qual, char *format ) { y4m_frame_info_t in_frame ; uint8_t *yuv_data[3] ; int read_error_code ; int write_error_code ; FILE *fh; char filename[1024]; // has potential for buffer overflow int frame_count=1; // to be moved to command line parameters //char *format = "frame%03d.jpg"; //int qual = 95; // Allocate memory for the YUV channels if (chromalloc(yuv_data,inStrInfo)) mjpeg_error_exit1 ("Could'nt allocate memory for the YUV4MPEG data!"); /* Initialize counters */ write_error_code = Y4M_OK ; y4m_init_frame_info( &in_frame ); read_error_code = y4m_read_frame(fdIn, inStrInfo,&in_frame,yuv_data ); while( Y4M_ERR_EOF != read_error_code && write_error_code == Y4M_OK ) { // do work if (read_error_code == Y4M_OK) { // fprintf(stderr,"sprintf filename\n"); sprintf(filename,format,frame_count); // fprintf(stderr,"fopen filename\n"); // fprintf(stderr,"filename: %s\n",filename); fh = fopen(filename , "w"); // should check for error // fprintf(stderr,"call put_jpeg_yuv420p_file\n"); if (fh != NULL) { put_jpeg_yuv420p_file(fh,yuv_data,inStrInfo,qual); fclose (fh); } else { perror ("fopen jpeg file"); } } y4m_fini_frame_info( &in_frame ); y4m_init_frame_info( &in_frame ); read_error_code = y4m_read_frame(fdIn, inStrInfo,&in_frame,yuv_data ); frame_count++; } // Clean-up regardless an error happened or not y4m_fini_frame_info( &in_frame ); free( yuv_data[0] ); free( yuv_data[1] ); free( yuv_data[2] ); if( read_error_code != Y4M_ERR_EOF ) mjpeg_error_exit1 ("Error reading from input stream!"); }