int cache_init (fastphoto_t * params, char * path_info) { char * cachedir = params->config.cachedir; char * cachefile, * c; int cached; if (params->scale) { cachefile = alloc_snprintf ("%s%s?scale=%d", cachedir, path_info, params->scale); } else { cachefile = alloc_snprintf ("%s%s?x=%d&y=%d", cachedir, path_info, params->x, params->y); } if (params->quality) { c = alloc_snprintf ("%s&q=%d", cachefile, params->quality); free (cachefile); cachefile = c; } if (params->gray) { c = alloc_snprintf ("%s&gray", cachefile); free (cachefile); cachefile = c; } photo_init (¶ms->out, cachefile); cached = cache_check (params); if (cached == -1) { params->out.name = NULL; } else { if (cached) { fprintf (stderr, "fastphoto: Using cachefile %s\n", cachefile); } else { fprintf (stderr, "fastphoto: Creating cachefile %s\n", cachefile); if (!mkdirs (cachefile)) { fprintf (stderr, "fastphoto: Error creating cachefile %s\n", cachefile); free (cachefile); params->out.name = NULL; memory_init (params); } } } return 0; }
int cgi_main (fastphoto_t * params) { int err = 0; char * path_info; char * path_translated; char * query_string; char * if_modified_since; time_t since_time; httpdate_init (); path_info = getenv ("PATH_INFO"); path_translated = getenv ("PATH_TRANSLATED"); query_string = getenv ("QUERY_STRING"); if_modified_since = getenv ("HTTP_IF_MODIFIED_SINCE"); photo_init (¶ms->in, path_translated); if (if_modified_since != NULL) { int len; fprintf (stderr, "If-Modified-Since: %s\n", if_modified_since); len = strlen (if_modified_since) + 1; since_time = httpdate_parse (if_modified_since, len); if (params->in.mtime <= since_time) { header_not_modified(); header_end(); return 1; } } header_content_type_jpeg (); config_init (params); parse_query (params, query_string); if (params->x || params->y || params->scale || params->gray || params->quality) { cache_init (params, path_info); } else { params->nochange = 1; } err = 0; if (!(params->nochange || params->cached)) { err = resize (params); } if (!err) { cgi_send (params); } if (params->out.name) { free (params->out.name); } return err; }
/** * jpeg file : need to updata pdvr->disp_bitmap to display; * video: need to call dispFlip(); **/ int dvr_thmb_dispFullScreen(cdvr_thmb_t *pdvr, char *disp_pData) { int ret = -1; SINT64 stime, etime; gp_bitmap_t *pbitmap= NULL; if(!pdvr) { return -1; } char *purl = NULL; int type = -1; dvr_thmb_setDispFullMode(pdvr); if(DispBufManage.DispDev == C_DISP_BUFFER) { pdvr->upFrame = (unsigned char *)get_idle_buffer(0); clean_buffer(pdvr->upFrame, 0); } else { pdvr->upFrame = (char *)dispGetFramebuffer(pdvr->hDisp); } pdvr->pUrl = FilelistGetFilePath(pdvr->pFile, dvr_thmb_getCurIdxOfFile(pdvr)); pdvr->fileType = checkFileType(pdvr->pUrl); printf("[%s:%d]curIdx %d curPage %d pageNum %d type %d\n", __FUNCTION__, __LINE__, pdvr->cur_idx, pdvr->cur_page, pdvr->cur_pageNum, pdvr->fileType); purl = pdvr->pUrl; type = pdvr->fileType; photo_uninit(pdvr->pPhotoInfo); //for jpeg->video->jpeg pdvr->pPhotoInfo = NULL; if(purl) { stime = sysGetCurTime(); ret = -1; if(type == GP_FILE_TYPE_VIDEO) { pbitmap= &pdvr->disp_bitmap; pbitmap->pData = (unsigned char*)pdvr->upFrame; ret = mcpGetThumbnail(pbitmap, purl, 0); } else if(type == GP_FILE_TYPE_JPEG) { pdvr->pPhotoInfo = photo_init(purl, &pdvr->disp_bitmap); if(pdvr->pPhotoInfo) { pdvr->pPhotoInfo->bitmap->pData = (unsigned char*)pdvr->upFrame; ret = image_scale(pdvr->pPhotoInfo); if(ret == -1) { } } } etime = sysGetCurTime(); printf("thumbnail used time %lld - %lld = %lldms ret %d\n", etime, stime, etime - stime, ret); if(ret == -1) { //dispCleanFramebuffer(pdvr->hDisp); if(DispBufManage.DispDev == C_DISP_BUFFER) { pdvr->upFrame = (unsigned char *)get_idle_buffer(0); clean_buffer(pdvr->upFrame, 0); } else { pdvr->upFrame = (char *)dispGetFramebuffer(pdvr->hDisp); dispCleanFramebuffer(pdvr->hDisp); } printf("WARNNING: get fulscreen error!!!!!!!\n"); } } dvr_thmb_dispFlip(pdvr); return ret; }