Exemplo n.º 1
0
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 (&params->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;
}
Exemplo n.º 2
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 (&params->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;
}
Exemplo n.º 3
0
/**
 * 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;
}