diff options
Diffstat (limited to 'devices/gdevjpx.c')
-rw-r--r-- | devices/gdevjpx.c | 229 |
1 files changed, 0 insertions, 229 deletions
diff --git a/devices/gdevjpx.c b/devices/gdevjpx.c deleted file mode 100644 index b3c3690b..00000000 --- a/devices/gdevjpx.c +++ /dev/null @@ -1,229 +0,0 @@ -/* Copyright (C) 2001-2020 Artifex Software, Inc. - All Rights Reserved. - - This software is provided AS-IS with no warranty, either express or - implied. - - This software is distributed under license and may not be copied, - modified or distributed except as expressly authorized under the terms - of the license contained in the file LICENSE in this distribution. - - Refer to licensing information at http://www.artifex.com or contact - Artifex Software, Inc., 1305 Grant Avenue - Suite 200, Novato, - CA 94945, U.S.A., +1(415)492-9861, for further information. -*/ - - -/* $Id: gdevjpx.c 6300 2005-12-28 19:56:24Z giles $ */ -/* JPX encode filter test device */ - -#include "gdevprn.h" -#include "stream.h" -#include "strimpl.h" -#include "sjpx_luratech.h" - -/* Structure for the JPX-writing device. */ -typedef struct gx_device_jpx_s { - gx_device_common; - gx_prn_device_common; -} gx_device_jpx; - -/* The device descriptor */ -static dev_proc_print_page(jpx_print_page); - -/* ------ The device descriptors ------ */ - -/* Default X and Y resolution. */ -#ifndef X_DPI -# define X_DPI 72 -#endif -#ifndef Y_DPI -# define Y_DPI 72 -#endif - -static dev_proc_print_page(jpx_print_page); - -/* 24 bit RGB default */ -/* Since the print_page doesn't alter the device, this device can print in the background */ -static const gx_device_procs jpxrgb_procs = -prn_color_procs(gdev_prn_open, gdev_prn_bg_output_page, gdev_prn_close, - gx_default_rgb_map_rgb_color, - gx_default_rgb_map_color_rgb); -const gx_device_printer gs_jpxrgb_device = { - prn_device_std_body(gx_device_jpx, jpxrgb_procs, "jpx", - DEFAULT_WIDTH_10THS, DEFAULT_HEIGHT_10THS, - X_DPI, Y_DPI, /* resolution */ - 0, 0, 0, 0, /* margins */ - 24, /* bits per pixel */ - jpx_print_page) -}; - -/* 8 bit Grayscale */ -/* Since the print_page doesn't alter the device, this device can print in the background */ -static const gx_device_procs jpxgray_procs = -prn_color_procs(gdev_prn_open, gdev_prn_bg_output_page, gdev_prn_close, - gx_default_gray_map_rgb_color, - gx_default_gray_map_color_rgb); -const gx_device_printer gs_jpxgray_device = { - prn_device_body(gx_device_jpx, jpxgray_procs, "jpxgray", - DEFAULT_WIDTH_10THS, DEFAULT_HEIGHT_10THS, - X_DPI, Y_DPI, /* resolution */ - 0, 0, 0, 0, /* margins */ - 1, 8, 255, 0, 256, 0, /* components, depth and min/max values */ - jpx_print_page) -}; - -/* 32 bit CMKY */ -static dev_proc_map_color_rgb(jpx_cmyk_map_color_rgb); -static dev_proc_map_cmyk_color(jpx_cmyk_map_cmyk_color); -static const gx_device_procs jpxcmyk_procs = -{ gdev_prn_open, - gx_default_get_initial_matrix, -/* Since the print_page doesn't alter the device, this device can print in the background */ - NULL, /* sync_output */ - gdev_prn_bg_output_page, - gdev_prn_close, - NULL, - jpx_cmyk_map_color_rgb, - NULL, /* fill_rectangle */ - NULL, /* tile_rectangle */ - NULL, /* copy_mono */ - NULL, /* copy_color */ - NULL, /* draw_line */ - NULL, /* get_bits */ - gdev_prn_get_params, - gdev_prn_put_params, - jpx_cmyk_map_cmyk_color, - NULL, /* get_xfont_procs */ - NULL, /* get_xfont_device */ - NULL, /* map_rgb_alpha_color */ - gx_page_device_get_page_device /* get_page_device */ -}; -const gx_device_printer gs_jpxcmyk_device = { - prn_device_std_body(gx_device_jpx, jpxcmyk_procs, "jpxcmyk", - DEFAULT_WIDTH_10THS, DEFAULT_HEIGHT_10THS, - X_DPI, Y_DPI, /* resolution */ - 0, 0, 0, 0, /* margins */ - 32, /* bits per pixel */ - jpx_print_page) -}; - -/* private color conversion routines; - we don't seem to have defaults for cmyk. */ -static int -jpx_cmyk_map_color_rgb(gx_device * dev, gx_color_index color, - gx_color_value prgb[3]) -{ - int not_k = color & 0xff, - r = not_k - ~(color >> 24), - g = not_k - ~((color >> 16) & 0xff), - b = not_k - ~((color >> 8) & 0xff); - - prgb[0] = (r < 0 ? 0 : gx_color_value_from_byte(r)); - prgb[1] = (g < 0 ? 0 : gx_color_value_from_byte(g)); - prgb[2] = (b < 0 ? 0 : gx_color_value_from_byte(b)); - return 0; -} - -static gx_color_index -jpx_cmyk_map_cmyk_color(gx_device * dev, const gx_color_value cv[]) -{ - gx_color_index color = ~( - gx_color_value_to_byte(cv[3]) + - ((uint)gx_color_value_to_byte(cv[2]) << 8) + - ((uint)gx_color_value_to_byte(cv[1]) << 16) + - ((uint)gx_color_value_to_byte(cv[0]) << 24)); - - return (color == gx_no_color_index ? color ^ 1 : color); -} - -/* Send the page to the file. */ -static int -jpx_print_page(gx_device_printer * pdev, gp_file * prn_stream) -{ - gx_device_jpx *jdev = (gx_device_jpx *) pdev; - gs_memory_t *mem = jdev->memory; - int line_size = gdev_mem_bytes_per_scan_line((gx_device *) pdev); - byte *in = gs_alloc_bytes(mem, line_size, "jpx_print_page(in)"); - byte *fbuf = 0; - uint fbuf_size; - byte *jbuf = 0; - uint jbuf_size; - int lnum; - int code = 0; - stream_jpxe_state state; - stream fstrm, cstrm; - - if (in == 0) { - code = gs_note_error(gs_error_VMerror); - goto fail; - } - /* Create the jpx encoder state. */ - s_init_state((stream_state *)&state, &s_jpxe_template, 0); - if (state.templat->set_defaults) - (*state.templat->set_defaults) ((stream_state *) & state); - state.width = jdev->width; - state.height = jdev->height; - switch (jdev->color_info.depth) { - case 32: state.colorspace = gs_jpx_cs_cmyk; break; - case 24: state.colorspace = gs_jpx_cs_rgb; break; - case 8: state.colorspace = gs_jpx_cs_gray; break; - default: - state.colorspace = gs_jpx_cs_gray; /* safest option */ - dmlprintf1(mem, "unexpected color_info depth %d\n", - jdev->color_info.depth); - } - state.bpc = 8; /* currently only 8 bits per component is supported */ - - /* ask for lossless encoding */ - /* state.lossless = 1; */ - /* or, set the quality level different from the default */ - /* state.quality = 35; */ - - /* Set up the streams. */ - fbuf_size = max(512 /* arbitrary */ , state.templat->min_out_size); - jbuf_size = state.templat->min_in_size; - if ((fbuf = gs_alloc_bytes(mem, fbuf_size, "jpx_print_page(fbuf)")) == 0 || - (jbuf = gs_alloc_bytes(mem, jbuf_size, "jpx_print_page(jbuf)")) == 0 - ) { - code = gs_note_error(gs_error_VMerror); - goto done; - } - s_init(&fstrm, mem); - swrite_file(&fstrm, prn_stream, fbuf, fbuf_size); - s_init(&cstrm, mem); - s_std_init(&cstrm, jbuf, jbuf_size, &s_filter_write_procs, - s_mode_write); - cstrm.state = (stream_state *) & state; - cstrm.procs.process = state.templat->process; - cstrm.strm = &fstrm; - if (state.templat->init) - (*state.templat->init) (cstrm.state); - - /* Copy the data to the output. */ - for (lnum = 0; lnum < jdev->height; ++lnum) { - byte *data; - uint ignore_used; - - if (cstrm.end_status) { - code = gs_note_error(gs_error_ioerror); - goto done; - } - code = gdev_prn_get_bits(pdev, lnum, in, &data); - if (code < 0) - goto done; - sputs(&cstrm, data, state.stride, &ignore_used); - } - - /* Wrap up. */ - sclose(&cstrm); - sflush(&fstrm); - done: - gs_free_object(mem, jbuf, "jpx_print_page(jbuf)"); - gs_free_object(mem, fbuf, "jpx_print_page(fbuf)"); - gs_free_object(mem, in, "jpx_print_page(in)"); - return code; - fail: - gs_free_object(mem, in, "jpx_print_page(in)"); - return code; -} |