示例#1
0
文件: common.c 项目: Devider/capture
void send_jpeg_data(rgb_ptr image_buffer, int quality) {

	struct jpeg_compress_struct cinfo;

	struct jpeg_error_mgr jerr;

	FILE * outfile;
	JSAMPROW row_pointer[1];
	int row_stride;

	char filename[256];
	get_tmp_file_name(filename, get_io_cfg()->tmp_path);


	cinfo.err = jpeg_std_error(&jerr);

	jpeg_create_compress(&cinfo);

	if ((outfile = fopen(filename, "wb")) == NULL ) {
		fprintf(stderr, "can't open %s\n", filename);
		return;
	}
	jpeg_stdio_dest(&cinfo, outfile);

	cinfo.image_width = get_cap()-> weigth;
	cinfo.image_height = get_cap()-> height;
	cinfo.input_components = 3;
	cinfo.in_color_space = JCS_RGB;
	jpeg_set_defaults(&cinfo);
	jpeg_set_quality(&cinfo, quality, true);

	jpeg_start_compress(&cinfo, true);

	row_stride = get_cap()-> weigth * 3;

	while (cinfo.next_scanline < cinfo.image_height) {
		row_pointer[0] = &image_buffer[cinfo.next_scanline * row_stride];
		(void) jpeg_write_scanlines(&cinfo, row_pointer, 1);
	}

	jpeg_finish_compress(&cinfo);
	fclose(outfile);

	jpeg_destroy_compress(&cinfo);

	FILE* f;
	f = fopen(filename, "r");
	int c;
	size_t s = 0;

	char* buff = malloc(1024 * 30);

	while((c = getc(f))!=EOF){
		buff[s++]=c;
	}

	fclose(f);
	send_data((rgb_ptr)buff, s);
	free(buff);
}
示例#2
0
int wcplg_do_sftp(char *_cmd, char *_server_output)
{

  FILE *fp;
  int ret = 0, i2 = 0, i3 = 0;
  char batchfile[MAX_PATH];
  char *_cmd_ln = NULL;
  struct sftp_command *cmd;

  server_output = _server_output;

  _cmd_ln = (char *) malloc(strlen(_cmd) + 2);
  wcplg_set_last_error_msg("");
  strcpy(_cmd_ln, _cmd);
  strcat(_cmd_ln, "\n");

  get_tmp_file_name(batchfile);

  fp = fopen(batchfile, "w");
  if (!fp) {
    printf("Fatal: unable to open %s\n", batchfile);
    return 2;
  }

  fwrite(_cmd_ln, sizeof(char), strlen(_cmd_ln), fp);
  fclose(fp);
  free(_cmd_ln);

  fp = fopen(batchfile, "r");
  if (!fp) {
    printf("Fatal: unable to open %s\n", batchfile);
    return 2;
  }
  //sftp_getcmd() Speicherloch!!! FIXME
  cmd = sftp_getcmd(fp, 1, 1);

  // löschen
  fclose(fp);

  remove(batchfile);


  //cmd->words=  eventl. noch zusammenbasteln

  if (cmd) {
    ret = cmd->obey(cmd);
  }

  return ret;
}