diff options
| author | Přemysl Eric Janouch <p@janouch.name> | 2022-06-06 15:22:23 +0200 | 
|---|---|---|
| committer | Přemysl Eric Janouch <p@janouch.name> | 2022-06-08 02:51:54 +0200 | 
| commit | 930744e1652c9ec5ad6447c0a2a1e486cae9a2a9 (patch) | |
| tree | 4353caf33e417faf30ab7d6eb2ee5330d6a4f835 | |
| parent | 4ca8825e02ff8959e3790df2d7818ecfb4134963 (diff) | |
| download | fiv-930744e1652c9ec5ad6447c0a2a1e486cae9a2a9.tar.gz fiv-930744e1652c9ec5ad6447c0a2a1e486cae9a2a9.tar.xz fiv-930744e1652c9ec5ad6447c0a2a1e486cae9a2a9.zip  | |
Add flags to the serialization protocol
It still needs no versioning, as it's not really used by anyone.
An alternative method of passing a "low-quality" flag would be
perusing fiv_thumbnail_key_lq from fiv-thumbnail.c, which would
create a circular dependency, unless fiv_io_{de,}serialize*()
were moved to fiv-thumbnail.c.
| -rw-r--r-- | fiv-io.c | 7 | ||||
| -rw-r--r-- | fiv-io.h | 6 | ||||
| -rw-r--r-- | fiv-thumbnail.h | 4 | 
3 files changed, 11 insertions, 6 deletions
@@ -2891,11 +2891,12 @@ fiv_io_open_from_data(  // --- Thumbnail passing utilities ---------------------------------------------  typedef struct { +	guint64 user_data;  	int width, height, stride, format;  } CairoHeader;  void -fiv_io_serialize_to_stdout(cairo_surface_t *surface) +fiv_io_serialize_to_stdout(cairo_surface_t *surface, guint64 user_data)  {  	if (!surface || cairo_surface_get_type(surface) != CAIRO_SURFACE_TYPE_IMAGE)  		return; @@ -2907,6 +2908,7 @@ fiv_io_serialize_to_stdout(cairo_surface_t *surface)  #endif  	CairoHeader h = { +		.user_data = user_data,  		.width = cairo_image_surface_get_width(surface),  		.height = cairo_image_surface_get_height(surface),  		.stride = cairo_image_surface_get_stride(surface), @@ -2921,7 +2923,7 @@ fiv_io_serialize_to_stdout(cairo_surface_t *surface)  }  cairo_surface_t * -fiv_io_deserialize(GBytes *bytes) +fiv_io_deserialize(GBytes *bytes, guint64 *user_data)  {  	CairoHeader h = {};  	GByteArray *array = g_bytes_unref_to_array(bytes); @@ -2949,6 +2951,7 @@ fiv_io_deserialize(GBytes *bytes)  	static cairo_user_data_key_t key;  	cairo_surface_set_user_data(  		surface, &key, array, (cairo_destroy_func_t) g_byte_array_unref); +	*user_data = h.user_data;  	return surface;  } @@ -102,8 +102,10 @@ cairo_surface_t *fiv_io_open_png_thumbnail(const char *path, GError **error);  // --- Thumbnail passing utilities --------------------------------------------- -void fiv_io_serialize_to_stdout(cairo_surface_t *surface); -cairo_surface_t *fiv_io_deserialize(GBytes *bytes); +enum { FIV_IO_SERIALIZE_LOW_QUALITY = 1 << 0 }; + +void fiv_io_serialize_to_stdout(cairo_surface_t *surface, guint64 user_data); +cairo_surface_t *fiv_io_deserialize(GBytes *bytes, guint64 *user_data);  // --- Filesystem -------------------------------------------------------------- diff --git a/fiv-thumbnail.h b/fiv-thumbnail.h index 822e609..35b93fe 100644 --- a/fiv-thumbnail.h +++ b/fiv-thumbnail.h @@ -45,10 +45,10 @@ typedef struct _FivThumbnailSizeInfo {  	const char *thumbnail_spec_name;    ///< thumbnail-spec directory name  } FivThumbnailSizeInfo; -extern FivThumbnailSizeInfo fiv_thumbnail_sizes[FIV_THUMBNAIL_SIZE_COUNT]; -  enum { FIV_THUMBNAIL_WIDE_COEFFICIENT = 2 }; +extern FivThumbnailSizeInfo fiv_thumbnail_sizes[FIV_THUMBNAIL_SIZE_COUNT]; +  /// If non-NULL, indicates a thumbnail of insufficient quality.  extern cairo_user_data_key_t fiv_thumbnail_key_lq;  | 
