43#include "magick/studio.h"
44#include "magick/artifact.h"
45#include "magick/image.h"
46#include "magick/log.h"
47#include "magick/monitor.h"
48#include "magick/monitor-private.h"
49#include "magick/pixel-private.h"
75MagickPrivate MagickBooleanType MonitorComponentGenesis(
void)
78 ActivateSemaphoreInfo(&monitor_semaphore);
100MagickPrivate
void MonitorComponentTerminus(
void)
103 ActivateSemaphoreInfo(&monitor_semaphore);
104 LockSemaphoreInfo(monitor_semaphore);
105 UnlockSemaphoreInfo(monitor_semaphore);
106 DestroySemaphoreInfo(&monitor_semaphore);
140MagickExport MagickBooleanType SetImageProgress(
const Image *image,
141 const char *tag,
const MagickOffsetType offset,
const MagickSizeType extent)
144 message[MagickPathExtent];
149 if (image->progress_monitor == (MagickProgressMonitor) NULL)
151 (void) FormatLocaleString(message,MagickPathExtent,
"%s/%s",
152 tag == (
const char *) NULL ?
"null" : tag,image->filename);
154 ActivateSemaphoreInfo(&monitor_semaphore);
155 LockSemaphoreInfo(monitor_semaphore);
156 status=image->progress_monitor(message,offset,extent,image->client_data);
157 (void) FormatLocaleString(message,MagickPathExtent,
"%g%%:%s:%s",
158 (100.0*offset*PerceptibleReciprocal(extent-1.0)),
159 tag == (
const char *) NULL ?
"null" : tag,image->filename);
160 (void) SetImageArtifact((
Image *) image,
"monitor:progress",message);
161 UnlockSemaphoreInfo(monitor_semaphore);
202MagickExport MagickProgressMonitor SetImageProgressMonitor(
Image *image,
203 const MagickProgressMonitor progress_monitor,
void *client_data)
205 MagickProgressMonitor
208 previous_monitor=image->progress_monitor;
209 image->progress_monitor=progress_monitor;
210 image->client_data=client_data;
211 return(previous_monitor);
251MagickExport MagickProgressMonitor SetImageInfoProgressMonitor(
252 ImageInfo *image_info,
const MagickProgressMonitor progress_monitor,
255 MagickProgressMonitor
258 previous_monitor=image_info->progress_monitor;
259 image_info->progress_monitor=progress_monitor;
260 image_info->client_data=client_data;
261 return(previous_monitor);