Guest User

Untitled

a guest
Apr 21st, 2012
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.20 KB | None | 0 0
  1. void new_jpeg_error_exit (j_common_ptr cinfo)
  2. {
  3.     jmp_buf *jb = (jmp_buf*)((struct jpeg_decompress_struct*) cinfo)->client_data;
  4.     /* Пометим ошибку */
  5.     ((struct jpeg_decompress_struct*) cinfo)->client_data = NULL;
  6.     longjmp(*jb, 550);
  7. }
  8.  
  9. ImageInfoResult getJpegImageInfo(FILE *fp, ImageInfoPtr info)
  10. {
  11.     struct jpeg_decompress_struct cinfo;
  12.     struct jpeg_error_mgr jerr;
  13.     jmp_buf *jb;
  14.     ImageInfoResult rslt;
  15.  
  16.     cinfo.err = jpeg_std_error(&jerr);
  17.     cinfo.err->error_exit = new_jpeg_error_exit;
  18.     jpeg_create_decompress(&cinfo);
  19.     jpeg_stdio_src(&cinfo, fp);
  20.     /* В обработчике фатальных ошибок не предусмотрен возврат управления.
  21.        Начинаем пляски с бубном. */
  22.     jb = (jmp_buf*) xmlMalloc(sizeof(jmp_buf));
  23.     cinfo.client_data = jb;
  24.     setjmp(*jb);
  25.     if (cinfo.client_data) /* Мы здесь в первый раз */
  26.     {
  27.         jpeg_read_header(&cinfo, TRUE);
  28.         info->width = cinfo.image_width;
  29.         info->height = cinfo.image_height;
  30.         info->bits_per_pixel = 24;
  31.         strcpy((char*) info->format, "JPEG");
  32.         rslt = GII_OK;
  33.     } else
  34.         rslt = GII_INVALID_FORMAT;
  35.     xmlFree(jb);
  36.     jpeg_destroy_decompress(&cinfo);
  37.     return rslt;
  38. }
Advertisement
Add Comment
Please, Sign In to add comment