Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void new_jpeg_error_exit (j_common_ptr cinfo)
- {
- jmp_buf *jb = (jmp_buf*)((struct jpeg_decompress_struct*) cinfo)->client_data;
- /* Пометим ошибку */
- ((struct jpeg_decompress_struct*) cinfo)->client_data = NULL;
- longjmp(*jb, 550);
- }
- ImageInfoResult getJpegImageInfo(FILE *fp, ImageInfoPtr info)
- {
- struct jpeg_decompress_struct cinfo;
- struct jpeg_error_mgr jerr;
- jmp_buf *jb;
- ImageInfoResult rslt;
- cinfo.err = jpeg_std_error(&jerr);
- cinfo.err->error_exit = new_jpeg_error_exit;
- jpeg_create_decompress(&cinfo);
- jpeg_stdio_src(&cinfo, fp);
- /* В обработчике фатальных ошибок не предусмотрен возврат управления.
- Начинаем пляски с бубном. */
- jb = (jmp_buf*) xmlMalloc(sizeof(jmp_buf));
- cinfo.client_data = jb;
- setjmp(*jb);
- if (cinfo.client_data) /* Мы здесь в первый раз */
- {
- jpeg_read_header(&cinfo, TRUE);
- info->width = cinfo.image_width;
- info->height = cinfo.image_height;
- info->bits_per_pixel = 24;
- strcpy((char*) info->format, "JPEG");
- rslt = GII_OK;
- } else
- rslt = GII_INVALID_FORMAT;
- xmlFree(jb);
- jpeg_destroy_decompress(&cinfo);
- return rslt;
- }
Advertisement
Add Comment
Please, Sign In to add comment