Retire jpeg-mmx

This commit is contained in:
Michael Johnson 2007-03-08 14:20:03 +00:00
parent c9fc7fc6e1
commit d2deeabc7a
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=186900
17 changed files with 4 additions and 2927 deletions

1
MOVED
View file

@ -2844,3 +2844,4 @@ www/horde|www/horde-base|2007-02-24|Port renamed for consistency
www/phpip|net-mgmt/phpip|2007-02-26|move to net-mgmt/phpip
www/aolserver-openacs-pg||2007-02-28|Not longer needed.
devel/boost-gcc3|devel/boost|2007-03-07|Removed support for FreeBSD 4.
graphics/jpeg-mmx|graphics/jpeg|2007-03-08|Has expired: no longer needed.

View file

@ -69,7 +69,7 @@ _USE_GSTREAMER_ALL= a52dec aalib annodex bad bz2 cairo cdaudio cdparanoia dts \
_USE_GSTREAMER80_ALL= a52dec aalib artsd audiofile cairo cdaudio cdio cdparanoia \
dts dv dvd esound faac faad ffmpeg flac \
gconf gdkpixbuf gnomevfs gsm hermes ivorbis jack jpeg \
jpeg-mmx ladspa lame libcaca libfame libmms libmng \
ladspa lame libcaca libfame libmms libmng \
libpng libvisual mad mikmod mpeg2dec mpeg2enc mplex \
musepack musicbrainz nas sdl shout shout2 sidplay \
smoothwave sndfile speex theora ogg pango polyp \
@ -178,8 +178,6 @@ hermes_DEPENDS= graphics/gstreamer-plugins-hermes
jpeg_DEPENDS= graphics/gstreamer-plugins-jpeg
jpeg-mmx_DEPENDS= graphics/gstreamer-plugins-jpeg-mmx
libcaca_DEPENDS= graphics/gstreamer-plugins-libcaca
libmng_DEPENDS= graphics/gstreamer-plugins-libmng

View file

@ -238,7 +238,6 @@
SUBDIR += gstreamer-plugins-gdkpixbuf80
SUBDIR += gstreamer-plugins-hermes80
SUBDIR += gstreamer-plugins-jpeg
SUBDIR += gstreamer-plugins-jpeg-mmx80
SUBDIR += gstreamer-plugins-jpeg80
SUBDIR += gstreamer-plugins-libcaca
SUBDIR += gstreamer-plugins-libcaca80
@ -299,7 +298,6 @@
SUBDIR += jp2a
SUBDIR += jpatch
SUBDIR += jpeg
SUBDIR += jpeg-mmx
SUBDIR += jpeg2pdf
SUBDIR += jpeg2ps-a4
SUBDIR += jpeg2ps-letter

View file

@ -1,18 +0,0 @@
# New ports collection makefile for: gstreamer-plugins-jpeg-mmx
# Date created: 1 Nov 2004
# Whom: Michael Johnson <ahze@FreeBSD.org>
#
# $FreeBSD$
# $MCom: ports/graphics/gstreamer-plugins-jpeg-mmx80/Makefile,v 1.2 2006/02/24 18:50:33 marcus Exp $
#
PORTREVISION= 2
CATEGORIES= graphics
COMMENT= Gstreamer jpeg encoder/decoder plugin with mmx optimalizations
GST_PLUGIN= jpeg-mmx
MASTERDIR= ${.CURDIR}/../../multimedia/gstreamer-plugins80
.include "${MASTERDIR}/Makefile"

View file

@ -1,72 +0,0 @@
# New ports collection makefile for: jpeg
# Date created: 6 November 1994
# Whom: smace
#
# $FreeBSD$
#
PORTNAME= jpeg-mmx
PORTVERSION= 0.1.6
CATEGORIES= graphics
MASTER_SITES= ${MASTER_SITE_SOURCEFORGE}
MASTER_SITE_SUBDIR= mjpeg
MAINTAINER= multimedia@FreeBSD.org
COMMENT= IJG's jpeg compression utilities with MMX optimization
BUILD_DEPENDS= nasm:${PORTSDIR}/devel/nasm
RUN_DEPENDS= cjpeg:${PORTSDIR}/graphics/jpeg
ONLY_FOR_ARCHS= i386
DEPRECATED= This port has outlived its usefulness
EXPIRATION_DATE=2007-02-28
WRKSRC= ${WRKDIR}/jpeg-mmx
USE_AUTOTOOLS= libtool:15
USE_GMAKE= yes
INSTALLS_SHLIB= yes
CONFIGURE_ARGS= --enable-shared --enable-static
USE_GCC= 3.4+
JPEG_EXT= -mmx
INCDIR= include/${PORTNAME}
BIN_FILES= cjpeg djpeg jpegtran
INC_FILES= jconfig.h jerror.h jinclude.h jmorecfg.h jpegint.h jpeglib.h
LIB_FILES= libjpeg-mmx.a libjpeg-mmx.so libjpeg-mmx.so.62
PORTDOCS= README coderules.doc filelist.doc install.doc jconfig.doc \
libjpeg.doc structure.doc usage.doc wizard.doc
PLIST_DIRS= include/jpeg-mmx
PLIST_FILES= ${BIN_FILES:S|^|bin/|:S|$|${JPEG_EXT}|} \
${INC_FILES:S|^|${INCDIR}/|} \
${LIB_FILES:S|^|lib/|}
# define J_MAXMEM like "make J_MAXMEM=32" to limit max processing memory to 32Mb
.if defined(J_MAXMEM)
CONFIGURE_ARGS+= --enable-maxmem=${J_MAXMEM}
.endif
post-patch:
@${REINPLACE_CMD} -e 's|./libtool|${LIBTOOL} --tag=CXX|' \
${WRKSRC}/configure
do-install:
.for f in ${BIN_FILES}
@${INSTALL_PROGRAM} ${WRKSRC}/.libs/${f} ${PREFIX}/bin/${f}${JPEG_EXT}
.endfor
@${MKDIR} ${PREFIX}/${INCDIR}
.for f in ${INC_FILES}
@${INSTALL_DATA} ${WRKSRC}/${f} ${PREFIX}/${INCDIR}
.endfor
.for f in ${LIB_FILES}
@${INSTALL_DATA} ${WRKSRC}/.libs/${f} ${PREFIX}/lib/
.endfor
.if !defined(NOPORTDOCS)
@${MKDIR} ${DOCSDIR}
@${INSTALL_DATA} ${WRKSRC}/README ${DOCSDIR}
@${INSTALL_DATA} ${WRKSRC}/*.doc ${DOCSDIR}
.endif
.include <bsd.port.mk>

View file

@ -1,3 +0,0 @@
MD5 (jpeg-mmx-0.1.6.tar.gz) = 9156c429bd8c4dea65c877c50ed89e15
SHA256 (jpeg-mmx-0.1.6.tar.gz) = 196d71593f7dc06adc047297c614b40060c7083d2ab692c5c9ad7ddd2970bf44
SIZE (jpeg-mmx-0.1.6.tar.gz) = 597439

View file

@ -1,21 +0,0 @@
--- configure.orig Tue Feb 3 16:49:23 2004
+++ configure Fri Jul 30 04:20:34 2004
@@ -1530,7 +1530,7 @@
if test "x$LTSHARED" != xno -o "x$LTSTATIC" != xno; then
USELIBTOOL="yes"
LIBTOOL="./libtool"
- O="lo"
+ O="o"
A="la"
LN='$(LIBTOOL) --mode=link $(CC)'
INSTALL_LIB='$(LIBTOOL) --mode=install ${INSTALL}'
@@ -1559,7 +1559,8 @@
if test "x$LTSTATIC" = xno; then
disable_static="--disable-static"
fi
- $srcdir/ltconfig $disable_shared $disable_static $srcdir/ltmain.sh
+ pic_flag="-fPIC"
+ $ac_aux_dir/ltconfig $disable_shared $disable_static $ac_aux_dir/ltmain.sh
fi
# Select memory manager depending on user input.

View file

@ -1,20 +0,0 @@
--- djpeg.c.orig Sat Oct 11 18:29:07 1997
+++ djpeg.c Mon Apr 24 16:04:13 2000
@@ -26,6 +26,7 @@
#include "cdjpeg.h" /* Common decls for cjpeg/djpeg applications */
#include "jversion.h" /* for version message */
+#include <locale.h> /* to declare setlocal() */
#include <ctype.h> /* to declare isprint() */
#ifdef USE_CCOMMAND /* command-line reader for Macintosh */
@@ -385,6 +386,9 @@
cinfo->unread_marker - JPEG_APP0, (long) length);
}
+ if (traceit) {
+ setlocale(LC_ALL, "");
+ }
while (--length >= 0) {
ch = jpeg_getc(cinfo);
if (traceit) {

View file

@ -1,30 +0,0 @@
--- jerror.h.orig Sat Oct 18 14:59:10 1997
+++ jerror.h Fri Jun 4 15:20:23 2004
@@ -45,8 +45,11 @@
JMESSAGE(JERR_BAD_ALLOC_CHUNK, "MAX_ALLOC_CHUNK is wrong, please fix")
JMESSAGE(JERR_BAD_BUFFER_MODE, "Bogus buffer control mode")
JMESSAGE(JERR_BAD_COMPONENT_ID, "Invalid component ID %d in SOS")
+JMESSAGE(JERR_BAD_CROP_SPEC, "Invalid crop request")
JMESSAGE(JERR_BAD_DCT_COEF, "DCT coefficient out of range")
JMESSAGE(JERR_BAD_DCTSIZE, "IDCT output block size %d not supported")
+JMESSAGE(JERR_BAD_DROP_SAMPLING,
+ "Component index %d: mismatching sampling ratio %d:%d, %d:%d, %c")
JMESSAGE(JERR_BAD_HUFF_TABLE, "Bogus Huffman table definition")
JMESSAGE(JERR_BAD_IN_COLORSPACE, "Bogus input colorspace")
JMESSAGE(JERR_BAD_J_COLORSPACE, "Bogus JPEG colorspace")
@@ -226,6 +229,15 @@
(cinfo)->err->msg_parm.i[1] = (p2), \
(cinfo)->err->msg_parm.i[2] = (p3), \
(cinfo)->err->msg_parm.i[3] = (p4), \
+ (*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo)))
+#define ERREXIT6(cinfo,code,p1,p2,p3,p4,p5,p6) \
+ ((cinfo)->err->msg_code = (code), \
+ (cinfo)->err->msg_parm.i[0] = (p1), \
+ (cinfo)->err->msg_parm.i[1] = (p2), \
+ (cinfo)->err->msg_parm.i[2] = (p3), \
+ (cinfo)->err->msg_parm.i[3] = (p4), \
+ (cinfo)->err->msg_parm.i[4] = (p5), \
+ (cinfo)->err->msg_parm.i[5] = (p6), \
(*(cinfo)->err->error_exit) ((j_common_ptr) (cinfo)))
#define ERREXITS(cinfo,code,str) \
((cinfo)->err->msg_code = (code), \

View file

@ -1,400 +0,0 @@
--- jpegtran.c.orig Wed Jul 23 22:37:26 1997
+++ jpegtran.c Fri Jun 4 14:47:24 2004
@@ -1,7 +1,7 @@
/*
* jpegtran.c
*
- * Copyright (C) 1995-1997, Thomas G. Lane.
+ * Copyright (C) 1995-2001, Thomas G. Lane.
* This file is part of the Independent JPEG Group's software.
* For conditions of distribution and use, see the accompanying README file.
*
@@ -37,6 +37,7 @@
static const char * progname; /* program name for error messages */
static char * outfilename; /* for -outfile switch */
+static char * dropfilename; /* for -drop switch */
static JCOPY_OPTION copyoption; /* -copy switch */
static jpeg_transform_info transformoption; /* image transformation options */
@@ -56,6 +57,7 @@
fprintf(stderr, " -copy none Copy no extra markers from source file\n");
fprintf(stderr, " -copy comments Copy only comment markers (default)\n");
fprintf(stderr, " -copy all Copy all extra markers\n");
+ fprintf(stderr, " -copy exif Copy EXIF marker and omit JFIF if EXIF\n");
#ifdef ENTROPY_OPT_SUPPORTED
fprintf(stderr, " -optimize Optimize Huffman table (smaller file, but slow compression)\n");
#endif
@@ -64,12 +66,16 @@
#endif
#if TRANSFORMS_SUPPORTED
fprintf(stderr, "Switches for modifying the image:\n");
+ fprintf(stderr, " -crop WxH+X+Y Crop to a rectangular subarea\n");
+ fprintf(stderr, " -drop +X+Y filename Drop another image\n");
fprintf(stderr, " -grayscale Reduce to grayscale (omit color data)\n");
fprintf(stderr, " -flip [horizontal|vertical] Mirror image (left-right or top-bottom)\n");
+ fprintf(stderr, " -perfect Fail if there is non-transformable edge blocks\n");
fprintf(stderr, " -rotate [90|180|270] Rotate image (degrees clockwise)\n");
fprintf(stderr, " -transpose Transpose image\n");
fprintf(stderr, " -transverse Transverse transpose image\n");
- fprintf(stderr, " -trim Drop non-transformable edge blocks\n");
+ fprintf(stderr, " -trim Drop non-transformable edge blocks or\n");
+ fprintf(stderr, " with -drop: Requantize drop file to source file\n");
#endif /* TRANSFORMS_SUPPORTED */
fprintf(stderr, "Switches for advanced users:\n");
fprintf(stderr, " -restart N Set restart interval in rows, or in blocks with B\n");
@@ -109,6 +115,50 @@
#endif
}
+LOCAL(void)
+handle_exif (j_decompress_ptr srcinfo, j_compress_ptr dstinfo,
+ JCOPY_OPTION *copyoption)
+/* Adjust the marker writing options to create an EXIF file, instead of JFIF,
+ * if so requested or an EXIF file is detected as input. Must be called after
+ * jpeg_copy_critical_parameters() as that sets the defaults. */
+{
+ jpeg_saved_marker_ptr cur_marker, prev_marker;
+
+ /* Look for an exif marker */
+ prev_marker = NULL;
+ cur_marker = srcinfo->marker_list;
+ while (cur_marker != NULL) {
+ if (cur_marker->marker == JPEG_APP0+1 &&
+ cur_marker->data_length >= 6 &&
+ GETJOCTET(cur_marker->data[0]) == 0x45 &&
+ GETJOCTET(cur_marker->data[1]) == 0x78 &&
+ GETJOCTET(cur_marker->data[2]) == 0x69 &&
+ GETJOCTET(cur_marker->data[3]) == 0x66 &&
+ GETJOCTET(cur_marker->data[4]) == 0 &&
+ GETJOCTET(cur_marker->data[5]) == 0)
+ break; /* found an EXIF marker */
+ prev_marker = cur_marker;
+ cur_marker = cur_marker->next;
+ }
+ /* If we've found an EXIF marker but not JFIF this is an EXIF file. Unless
+ * explicitely requested, make sure we keep the EXIF marker and do not
+ * emit a JFIF marker (which would come before). EXIF requires that the
+ * first marker be EXIF. */
+ if (cur_marker != NULL &&
+ ((*copyoption != JCOPYOPT_NONE && !srcinfo->saw_JFIF_marker) ||
+ (*copyoption == JCOPYOPT_EXIF))) {
+ dstinfo->write_JFIF_header = FALSE;
+ if (*copyoption == JCOPYOPT_COMMENTS)
+ *copyoption = JCOPYOPT_EXIF;
+ }
+ /* If making an EXIF file, make sure that EXIF is first marker */
+ if (cur_marker != NULL && prev_marker != NULL &&
+ *copyoption == JCOPYOPT_EXIF) {
+ prev_marker->next = cur_marker->next;
+ cur_marker->next = srcinfo->marker_list;
+ srcinfo->marker_list = cur_marker;
+ }
+}
LOCAL(int)
parse_switches (j_compress_ptr cinfo, int argc, char **argv,
@@ -130,10 +180,13 @@
/* Set up default JPEG parameters. */
simple_progressive = FALSE;
outfilename = NULL;
+ dropfilename = NULL;
copyoption = JCOPYOPT_DEFAULT;
transformoption.transform = JXFORM_NONE;
transformoption.trim = FALSE;
+ transformoption.perfect = FALSE;
transformoption.force_grayscale = FALSE;
+ transformoption.crop = FALSE;
cinfo->err->trace_level = 0;
/* Scan command line options, adjust parameters */
@@ -160,7 +213,7 @@
exit(EXIT_FAILURE);
#endif
- } else if (keymatch(arg, "copy", 1)) {
+ } else if (keymatch(arg, "copy", 2)) {
/* Select which extra markers to copy. */
if (++argn >= argc) /* advance to next argument */
usage();
@@ -170,9 +223,47 @@
copyoption = JCOPYOPT_COMMENTS;
} else if (keymatch(argv[argn], "all", 1)) {
copyoption = JCOPYOPT_ALL;
+ } else if (keymatch(argv[argn], "exif", 1)) {
+ copyoption = JCOPYOPT_EXIF;
} else
usage();
+ } else if (keymatch(arg, "crop", 2)) {
+ /* Perform lossless cropping. */
+#if TRANSFORMS_SUPPORTED
+ if (++argn >= argc) /* advance to next argument */
+ usage();
+ if (transformoption.crop /* reject multiple crop/drop requests */ ||
+ ! jtransform_parse_crop_spec(&transformoption, argv[argn])) {
+ fprintf(stderr, "%s: bogus -crop argument '%s'\n",
+ progname, argv[argn]);
+ exit(EXIT_FAILURE);
+ }
+#else
+ select_transform(JXFORM_NONE); /* force an error */
+#endif
+
+ } else if (keymatch(arg, "drop", 2)) {
+#if TRANSFORMS_SUPPORTED
+ if (++argn >= argc) /* advance to next argument */
+ usage();
+ if (transformoption.crop /* reject multiple crop/drop requests */ ||
+ ! jtransform_parse_crop_spec(&transformoption, argv[argn]) ||
+ transformoption.crop_width_set != JCROP_UNSET ||
+ transformoption.crop_height_set != JCROP_UNSET) {
+ fprintf(stderr, "%s: bogus -drop argument '%s'\n",
+ progname, argv[argn]);
+ exit(EXIT_FAILURE);
+ }
+ if (++argn >= argc) /* advance to next argument */
+ usage();
+ dropfilename = argv[argn];
+ select_transform(JXFORM_DROP);
+#else
+ select_transform(JXFORM_NONE); /* force an error */
+#endif
+
+
} else if (keymatch(arg, "debug", 1) || keymatch(arg, "verbose", 1)) {
/* Enable debug printouts. */
/* On first -d, print version identification */
@@ -181,6 +272,7 @@
if (! printed_version) {
fprintf(stderr, "Independent JPEG Group's JPEGTRAN, version %s\n%s\n",
JVERSION, JCOPYRIGHT);
+ fprintf(stderr, "EXIF support v 0.1 added 29-Sep-2003\n");
printed_version = TRUE;
}
cinfo->err->trace_level++;
@@ -233,7 +325,12 @@
usage();
outfilename = argv[argn]; /* save it away for later use */
- } else if (keymatch(arg, "progressive", 1)) {
+ } else if (keymatch(arg, "perfect", 2)) {
+ /* Fail if there is any partial edge MCUs that the transform can't
+ * handle. */
+ transformoption.perfect = TRUE;
+
+ } else if (keymatch(arg, "progressive", 2)) {
/* Select simple progressive mode. */
#ifdef C_PROGRESSIVE_SUPPORTED
simple_progressive = TRUE;
@@ -334,16 +431,24 @@
main (int argc, char **argv)
{
struct jpeg_decompress_struct srcinfo;
+ struct jpeg_error_mgr jsrcerr;
+#if TRANSFORMS_SUPPORTED
+ struct jpeg_decompress_struct dropinfo;
+ struct jpeg_error_mgr jdroperr;
+ FILE * drop_file;
+#endif
struct jpeg_compress_struct dstinfo;
- struct jpeg_error_mgr jsrcerr, jdsterr;
+ struct jpeg_error_mgr jdsterr;
#ifdef PROGRESS_REPORT
struct cdjpeg_progress_mgr progress;
#endif
jvirt_barray_ptr * src_coef_arrays;
jvirt_barray_ptr * dst_coef_arrays;
int file_index;
- FILE * input_file;
- FILE * output_file;
+ /* We assume all-in-memory processing and can therefore use only a
+ * single file pointer for sequential input and output operation.
+ */
+ FILE * fp;
/* On Mac, fetch a command line. */
#ifdef USE_CCOMMAND
@@ -406,32 +511,36 @@
/* Open the input file. */
if (file_index < argc) {
- if ((input_file = fopen(argv[file_index], READ_BINARY)) == NULL) {
- fprintf(stderr, "%s: can't open %s\n", progname, argv[file_index]);
+ if ((fp = fopen(argv[file_index], READ_BINARY)) == NULL) {
+ fprintf(stderr, "%s: can't open %s for reading\n", progname, argv[file_index]);
exit(EXIT_FAILURE);
}
} else {
/* default input file is stdin */
- input_file = read_stdin();
+ fp = read_stdin();
}
-
- /* Open the output file. */
- if (outfilename != NULL) {
- if ((output_file = fopen(outfilename, WRITE_BINARY)) == NULL) {
- fprintf(stderr, "%s: can't open %s\n", progname, outfilename);
+#if TRANSFORMS_SUPPORTED
+ /* Open the drop file. */
+ if (dropfilename != NULL) {
+ if ((drop_file = fopen(dropfilename, READ_BINARY)) == NULL) {
+ fprintf(stderr, "%s: can't open %s for reading\n", progname, dropfilename);
exit(EXIT_FAILURE);
}
+ dropinfo.err = jpeg_std_error(&jdroperr);
+ jpeg_create_decompress(&dropinfo);
+ jpeg_stdio_src(&dropinfo, drop_file);
} else {
- /* default output file is stdout */
- output_file = write_stdout();
+ drop_file = NULL;
}
+#endif
+
#ifdef PROGRESS_REPORT
start_progress_monitor((j_common_ptr) &dstinfo, &progress);
#endif
/* Specify data source for decompression */
- jpeg_stdio_src(&srcinfo, input_file);
+ jpeg_stdio_src(&srcinfo, fp);
/* Enable saving of extra markers that we want to copy */
jcopy_markers_setup(&srcinfo, copyoption);
@@ -439,19 +548,46 @@
/* Read file header */
(void) jpeg_read_header(&srcinfo, TRUE);
+#if TRANSFORMS_SUPPORTED
+ if (dropfilename != NULL) {
+ (void) jpeg_read_header(&dropinfo, TRUE);
+ transformoption.crop_width = dropinfo.image_width;
+ transformoption.crop_width_set = JCROP_POS;
+ transformoption.crop_height = dropinfo.image_height;
+ transformoption.crop_height_set = JCROP_POS;
+ transformoption.drop_ptr = &dropinfo;
+ }
+#endif
+
/* Any space needed by a transform option must be requested before
* jpeg_read_coefficients so that memory allocation will be done right.
*/
#if TRANSFORMS_SUPPORTED
+ /* Fails right away if -perfect is given and transformation is not perfect.
+ */
+ if (transformoption.perfect &&
+ !jtransform_perfect_transform(srcinfo.image_width, srcinfo.image_height,
+ srcinfo.max_h_samp_factor * DCTSIZE, srcinfo.max_v_samp_factor * DCTSIZE,
+ transformoption.transform)) {
+ fprintf(stderr, "%s: transformation is not perfect\n", progname);
+ exit(EXIT_FAILURE);
+ }
jtransform_request_workspace(&srcinfo, &transformoption);
#endif
/* Read source file as DCT coefficients */
src_coef_arrays = jpeg_read_coefficients(&srcinfo);
+#if TRANSFORMS_SUPPORTED
+ if (dropfilename != NULL) {
+ transformoption.drop_coef_arrays = jpeg_read_coefficients(&dropinfo);
+ }
+#endif
+
/* Initialize destination compression parameters from source values */
jpeg_copy_critical_parameters(&srcinfo, &dstinfo);
+
/* Adjust destination parameters if required by transform options;
* also find out which set of coefficient arrays will hold the output.
*/
@@ -463,11 +599,36 @@
dst_coef_arrays = src_coef_arrays;
#endif
+ /* Close input file, if we opened it.
+ * Note: we assume that jpeg_read_coefficients consumed all input
+ * until JPEG_REACHED_EOI, and that jpeg_finish_decompress will
+ * only consume more while (! cinfo->inputctl->eoi_reached).
+ * We cannot call jpeg_finish_decompress here since we still need the
+ * virtual arrays allocated from the source object for processing.
+ */
+ if (fp != stdin)
+ fclose(fp);
+
+ /* Open the output file. */
+ if (outfilename != NULL) {
+ if ((fp = fopen(outfilename, WRITE_BINARY)) == NULL) {
+ fprintf(stderr, "%s: can't open %s for writing\n", progname, outfilename);
+ exit(EXIT_FAILURE);
+ }
+ } else {
+ /* default output file is stdout */
+ fp = write_stdout();
+ }
+
/* Adjust default compression parameters by re-parsing the options */
+ /* Save value of copyoption */
file_index = parse_switches(&dstinfo, argc, argv, 0, TRUE);
+ /* If we want EXIF, make sure we do not write incompatible markers */
+ handle_exif(&srcinfo,&dstinfo,&copyoption);
+
/* Specify data destination for compression */
- jpeg_stdio_dest(&dstinfo, output_file);
+ jpeg_stdio_dest(&dstinfo, fp);
/* Start compressor (note no image data is actually written here) */
jpeg_write_coefficients(&dstinfo, dst_coef_arrays);
@@ -477,28 +638,41 @@
/* Execute image transformation, if any */
#if TRANSFORMS_SUPPORTED
- jtransform_execute_transformation(&srcinfo, &dstinfo,
- src_coef_arrays,
- &transformoption);
+ jtransform_execute_transform(&srcinfo, &dstinfo,
+ src_coef_arrays,
+ &transformoption);
#endif
/* Finish compression and release memory */
jpeg_finish_compress(&dstinfo);
jpeg_destroy_compress(&dstinfo);
+#if TRANSFORMS_SUPPORTED
+ if (dropfilename != NULL) {
+ (void) jpeg_finish_decompress(&dropinfo);
+ jpeg_destroy_decompress(&dropinfo);
+ }
+#endif
(void) jpeg_finish_decompress(&srcinfo);
jpeg_destroy_decompress(&srcinfo);
- /* Close files, if we opened them */
- if (input_file != stdin)
- fclose(input_file);
- if (output_file != stdout)
- fclose(output_file);
+ /* Close output file, if we opened it */
+ if (fp != stdout)
+ fclose(fp);
+#if TRANSFORMS_SUPPORTED
+ if (drop_file != NULL)
+ fclose(drop_file);
+#endif
#ifdef PROGRESS_REPORT
end_progress_monitor((j_common_ptr) &dstinfo);
#endif
/* All done. */
+#if TRANSFORMS_SUPPORTED
+ if (dropfilename != NULL)
+ exit(jsrcerr.num_warnings + jdroperr.num_warnings + jdsterr.num_warnings ?
+ EXIT_WARNING : EXIT_SUCCESS);
+#endif
exit(jsrcerr.num_warnings + jdsterr.num_warnings ?EXIT_WARNING:EXIT_SUCCESS);
return 0; /* suppress no-return-value warnings */
}

View file

@ -1,218 +0,0 @@
--- rdjpgcom.c.orig Sun Oct 12 00:41:04 1997
+++ rdjpgcom.c Thu Mar 18 06:37:23 2004
@@ -14,6 +14,7 @@
#define JPEG_CJPEG_DJPEG /* to get the command-line config symbols */
#include "jinclude.h" /* get auto-config symbols, <stdio.h> */
+#include <locale.h> /* to declare setlocale() */
#include <ctype.h> /* to declare isupper(), tolower() */
#ifdef USE_SETMODE
#include <fcntl.h> /* to declare setmode()'s parameter macros */
@@ -120,6 +121,7 @@
#define M_EOI 0xD9 /* End Of Image (end of datastream) */
#define M_SOS 0xDA /* Start Of Scan (begins compressed data) */
#define M_APP0 0xE0 /* Application-specific marker, type N */
+#define M_APP1 0xE1 /* Typically EXIF marker */
#define M_APP12 0xEC /* (we don't bother to list all 16 APPn's) */
#define M_COM 0xFE /* COMment */
@@ -210,6 +212,175 @@
}
}
+/*
+ * Helper routine to skip the given number of bytes.
+ */
+
+static void
+skip_n (unsigned int length)
+{
+ while (length > 0) {
+ (void) read_1_byte();
+ length--;
+ }
+}
+
+/*
+ * Parses an APP1 marker looking for EXIF data. If EXIF, the orientation is
+ * reported to stdout.
+ */
+
+static void
+process_APP1 (void)
+{
+ unsigned int length, i;
+ int is_motorola; /* byte order indicator */
+ unsigned int offset, number_of_tags, tagnum;
+ int orientation;
+ char *ostr;
+ /* This 64K buffer would probably be best if allocated dynamically, but it's
+ * the only one on this program so it's really not that
+ * important. Allocating on the stack is not an option, as 64K might be too
+ * big for some (crippled) platforms. */
+ static unsigned char exif_data[65536L];
+
+ /* Get the marker parameter length count */
+ length = read_2_bytes();
+ /* Length includes itself, so must be at least 2 */
+ if (length < 2)
+ ERREXIT("Erroneous JPEG marker length");
+ length -= 2;
+
+ /* We only care if APP1 is really an EXIF marker. Minimum length is 6 for
+ * signature plus 12 for an IFD. */
+ if (length < 18) {
+ skip_n(length);
+ return;
+ }
+
+ /* Check for actual EXIF marker */
+ for (i=0; i < 6; i++)
+ exif_data[i] = (unsigned char) read_1_byte();
+ length -= 6;
+ if (exif_data[0] != 0x45 ||
+ exif_data[1] != 0x78 ||
+ exif_data[2] != 0x69 ||
+ exif_data[3] != 0x66 ||
+ exif_data[4] != 0 ||
+ exif_data[5] != 0) {
+ skip_n(length);
+ return;
+ }
+
+ /* Read all EXIF body */
+ for (i=0; i < length; i++)
+ exif_data[i] = (unsigned char) read_1_byte();
+
+ /* Discover byte order */
+ if (exif_data[0] == 0x49 && exif_data[1] == 0x49)
+ is_motorola = 0;
+ else if (exif_data[0] == 0x4D && exif_data[1] == 0x4D)
+ is_motorola = 1;
+ else
+ return;
+
+ /* Check Tag Mark */
+ if (is_motorola) {
+ if (exif_data[2] != 0) return;
+ if (exif_data[3] != 0x2A) return;
+ } else {
+ if (exif_data[3] != 0) return;
+ if (exif_data[2] != 0x2A) return;
+ }
+
+ /* Get first IFD offset (offset to IFD0) */
+ if (is_motorola) {
+ if (exif_data[4] != 0) return;
+ if (exif_data[5] != 0) return;
+ offset = exif_data[6];
+ offset <<= 8;
+ offset += exif_data[7];
+ } else {
+ if (exif_data[7] != 0) return;
+ if (exif_data[6] != 0) return;
+ offset = exif_data[5];
+ offset <<= 8;
+ offset += exif_data[4];
+ }
+ if (offset > length - 2) return; /* check end of data segment */
+
+ /* Get the number of directory entries contained in this IFD */
+ if (is_motorola) {
+ number_of_tags = exif_data[offset];
+ number_of_tags <<= 8;
+ number_of_tags += exif_data[offset+1];
+ } else {
+ number_of_tags = exif_data[offset+1];
+ number_of_tags <<= 8;
+ number_of_tags += exif_data[offset];
+ }
+ if (number_of_tags == 0) return;
+ offset += 2;
+
+ /* Search for Orientation Tag in IFD0 */
+ for (;;) {
+ if (offset > length - 12) return; /* check end of data segment */
+ /* Get Tag number */
+ if (is_motorola) {
+ tagnum = exif_data[offset];
+ tagnum <<= 8;
+ tagnum += exif_data[offset+1];
+ } else {
+ tagnum = exif_data[offset+1];
+ tagnum <<= 8;
+ tagnum += exif_data[offset];
+ }
+ if (tagnum == 0x0112) break; /* found Orientation Tag */
+ if (--number_of_tags == 0) return;
+ offset += 12;
+ }
+
+ /* Get the Orientation value */
+ if (is_motorola) {
+ if (exif_data[offset+8] != 0) return;
+ orientation = exif_data[offset+9];
+ } else {
+ if (exif_data[offset+9] != 0) return;
+ orientation = exif_data[offset+8];
+ }
+ if (orientation == 0 || orientation > 8) return;
+
+ /* Print the orientation (position of the 0th row - 0th column) */
+ switch (orientation) {
+ case 1:
+ ostr = "top-left";
+ break;
+ case 2:
+ ostr = "top-right";
+ break;
+ case 3:
+ ostr = "bottom-right";
+ break;
+ case 4:
+ ostr = "bottom-left";
+ break;
+ case 5:
+ ostr = "left-top";
+ break;
+ case 6:
+ ostr = "right-top";
+ break;
+ case 7:
+ ostr = "right-bottom";
+ break;
+ case 8:
+ ostr = "left-bottom";
+ break;
+ default:
+ return;
+ }
+ printf("EXIF orientation: %s\n",ostr);
+}
/*
* Process a COM marker.
@@ -231,6 +402,7 @@
ERREXIT("Erroneous JPEG marker length");
length -= 2;
+ setlocale(LC_ALL, "");
while (length > 0) {
ch = read_1_byte();
/* Emit the character in a readable form.
@@ -363,6 +535,15 @@
case M_COM:
process_COM();
+ break;
+
+ case M_APP1:
+ /* APP1 is usually the EXIF marker used by digital cameras, attempt to
+ * process it to give some useful info. */
+ if (verbose) {
+ process_APP1();
+ } else
+ skip_variable();
break;
case M_APP12:

File diff suppressed because it is too large Load diff

View file

@ -1,197 +0,0 @@
--- transupp.h.orig Wed Jul 23 22:39:12 1997
+++ transupp.h Fri Jun 4 15:07:31 2004
@@ -1,7 +1,7 @@
/*
* transupp.h
*
- * Copyright (C) 1997, Thomas G. Lane.
+ * Copyright (C) 1997-2001, Thomas G. Lane.
* This file is part of the Independent JPEG Group's software.
* For conditions of distribution and use, see the accompanying README file.
*
@@ -22,32 +22,6 @@
#define TRANSFORMS_SUPPORTED 1 /* 0 disables transform code */
#endif
-/* Short forms of external names for systems with brain-damaged linkers. */
-
-#ifdef NEED_SHORT_EXTERNAL_NAMES
-#define jtransform_request_workspace jTrRequest
-#define jtransform_adjust_parameters jTrAdjust
-#define jtransform_execute_transformation jTrExec
-#define jcopy_markers_setup jCMrkSetup
-#define jcopy_markers_execute jCMrkExec
-#endif /* NEED_SHORT_EXTERNAL_NAMES */
-
-
-/*
- * Codes for supported types of image transformations.
- */
-
-typedef enum {
- JXFORM_NONE, /* no transformation */
- JXFORM_FLIP_H, /* horizontal flip */
- JXFORM_FLIP_V, /* vertical flip */
- JXFORM_TRANSPOSE, /* transpose across UL-to-LR axis */
- JXFORM_TRANSVERSE, /* transpose across UR-to-LL axis */
- JXFORM_ROT_90, /* 90-degree clockwise rotation */
- JXFORM_ROT_180, /* 180-degree rotation */
- JXFORM_ROT_270 /* 270-degree clockwise (or 90 ccw) */
-} JXFORM_CODE;
-
/*
* Although rotating and flipping data expressed as DCT coefficients is not
* hard, there is an asymmetry in the JPEG format specification for images
@@ -75,6 +49,19 @@
* (For example, -rot 270 -trim trims only the bottom edge, but -rot 90 -trim
* followed by -rot 180 -trim trims both edges.)
*
+ * We also offer a lossless-crop option, which discards data outside a given
+ * image region but losslessly preserves what is inside. Like the rotate and
+ * flip transforms, lossless crop is restricted by the JPEG format: the upper
+ * left corner of the selected region must fall on an iMCU boundary. If this
+ * does not hold for the given crop parameters, we silently move the upper left
+ * corner up and/or left to make it so, simultaneously increasing the region
+ * dimensions to keep the lower right crop corner unchanged. (Thus, the
+ * output image covers at least the requested region, but may cover more.)
+ *
+ * If both crop and a rotate/flip transform are requested, the crop is applied
+ * last --- that is, the crop region is specified in terms of the destination
+ * image.
+ *
* We also offer a "force to grayscale" option, which simply discards the
* chrominance channels of a YCbCr image. This is lossless in the sense that
* the luminance channel is preserved exactly. It's not the same kind of
@@ -83,20 +70,96 @@
* be aware of the option to know how many components to work on.
*/
+
+/* Short forms of external names for systems with brain-damaged linkers. */
+
+#ifdef NEED_SHORT_EXTERNAL_NAMES
+#define jtransform_parse_crop_spec jTrParCrop
+#define jtransform_request_workspace jTrRequest
+#define jtransform_adjust_parameters jTrAdjust
+#define jtransform_execute_transform jTrExec
+#define jtransform_perfect_transform jTrPerfect
+#define jcopy_markers_setup jCMrkSetup
+#define jcopy_markers_execute jCMrkExec
+#endif /* NEED_SHORT_EXTERNAL_NAMES */
+
+
+/*
+ * Codes for supported types of image transformations.
+ */
+
+typedef enum {
+ JXFORM_NONE, /* no transformation */
+ JXFORM_FLIP_H, /* horizontal flip */
+ JXFORM_FLIP_V, /* vertical flip */
+ JXFORM_TRANSPOSE, /* transpose across UL-to-LR axis */
+ JXFORM_TRANSVERSE, /* transpose across UR-to-LL axis */
+ JXFORM_ROT_90, /* 90-degree clockwise rotation */
+ JXFORM_ROT_180, /* 180-degree rotation */
+ JXFORM_ROT_270, /* 270-degree clockwise (or 90 ccw) */
+ JXFORM_DROP /* drop */
+} JXFORM_CODE;
+
+/*
+ * Codes for crop parameters, which can individually be unspecified,
+ * positive, or negative. (Negative width or height makes no sense, though.)
+ */
+
+typedef enum {
+ JCROP_UNSET,
+ JCROP_POS,
+ JCROP_NEG
+} JCROP_CODE;
+
+/*
+ * Transform parameters struct.
+ * NB: application must not change any elements of this struct after
+ * calling jtransform_request_workspace.
+ */
+
typedef struct {
/* Options: set by caller */
JXFORM_CODE transform; /* image transform operator */
+ boolean perfect; /* if TRUE, fail if partial MCUs are requested */
boolean trim; /* if TRUE, trim partial MCUs as needed */
boolean force_grayscale; /* if TRUE, convert color image to grayscale */
+ boolean crop; /* if TRUE, crop source image */
+
+ /* Crop parameters: application need not set these unless crop is TRUE.
+ * These can be filled in by jtransform_parse_crop_spec().
+ */
+ JDIMENSION crop_width; /* Width of selected region */
+ JCROP_CODE crop_width_set;
+ JDIMENSION crop_height; /* Height of selected region */
+ JCROP_CODE crop_height_set;
+ JDIMENSION crop_xoffset; /* X offset of selected region */
+ JCROP_CODE crop_xoffset_set; /* (negative measures from right edge) */
+ JDIMENSION crop_yoffset; /* Y offset of selected region */
+ JCROP_CODE crop_yoffset_set; /* (negative measures from bottom edge) */
+
+ /* Drop parameters: set by caller for drop request */
+ j_decompress_ptr drop_ptr;
+ jvirt_barray_ptr * drop_coef_arrays;
/* Internal workspace: caller should not touch these */
int num_components; /* # of components in workspace */
jvirt_barray_ptr * workspace_coef_arrays; /* workspace for transformations */
+ JDIMENSION output_width; /* cropped destination dimensions */
+ JDIMENSION output_height;
+ JDIMENSION x_crop_offset; /* destination crop offsets measured in iMCUs */
+ JDIMENSION y_crop_offset;
+ JDIMENSION drop_width; /* drop dimensions measured in iMCUs */
+ JDIMENSION drop_height;
+ int max_h_samp_factor; /* destination iMCU size */
+ int max_v_samp_factor;
} jpeg_transform_info;
#if TRANSFORMS_SUPPORTED
+/* Parse a crop specification (written in X11 geometry style) */
+EXTERN(boolean) jtransform_parse_crop_spec
+ JPP((jpeg_transform_info *info, const char *spec));
/* Request any required workspace */
EXTERN(void) jtransform_request_workspace
JPP((j_decompress_ptr srcinfo, jpeg_transform_info *info));
@@ -106,10 +169,24 @@
jvirt_barray_ptr *src_coef_arrays,
jpeg_transform_info *info));
/* Execute the actual transformation, if any */
-EXTERN(void) jtransform_execute_transformation
+EXTERN(void) jtransform_execute_transform
JPP((j_decompress_ptr srcinfo, j_compress_ptr dstinfo,
jvirt_barray_ptr *src_coef_arrays,
jpeg_transform_info *info));
+/* Determine whether lossless transformation is perfectly
+ * possible for a specified image and transformation.
+ */
+EXTERN(boolean) jtransform_perfect_transform
+ JPP((JDIMENSION image_width, JDIMENSION image_height,
+ int MCU_width, int MCU_height,
+ JXFORM_CODE transform));
+
+/* jtransform_execute_transform used to be called
+ * jtransform_execute_transformation, but some compilers complain about
+ * routine names that long. This macro is here to avoid breaking any
+ * old source code that uses the original name...
+ */
+#define jtransform_execute_transformation jtransform_execute_transform
#endif /* TRANSFORMS_SUPPORTED */
@@ -121,7 +198,8 @@
typedef enum {
JCOPYOPT_NONE, /* copy no optional markers */
JCOPYOPT_COMMENTS, /* copy only comment (COM) markers */
- JCOPYOPT_ALL /* copy all optional markers */
+ JCOPYOPT_ALL, /* copy all optional markers */
+ JCOPYOPT_EXIF /* copy Exif APP1 marker */
} JCOPY_OPTION;
#define JCOPYOPT_DEFAULT JCOPYOPT_COMMENTS /* recommended default */

View file

@ -1,7 +0,0 @@
IJG's jpeg compression utilities and libraries with MMX optimization
This is NOT a drop in replacement to graphics/jpeg
See graphics/jpeg/pkg-descr for more information
WWW: http://mjpeg.sf.net/

View file

@ -7,7 +7,7 @@
PORTNAME= lphoto
PORTVERSION= 2.0.42
PORTREVISION= 2
PORTREVISION= 3
CATEGORIES= graphics
MASTER_SITES= http://software.linspire.com/emptypool/lindowsos/pool/main/l/lphoto/
DISTNAME= ${PORTNAME}_${PORTVERSION}-0.0.0.45.lindows0.1
@ -31,20 +31,6 @@ WRKSRC= ${WRKDIR}/${PORTNAME}-${PORTVERSION}
.include <bsd.port.pre.mk>
.if ${ARCH}=="i386"
.if ${MACHINE_CPU:Mmmx} && !defined(WITHOUT_JPEGMMX)
RUN_DEPENDS+= jpegtran-mmx:${PORTSDIR}/graphics/jpeg-mmx
pre_everything::
@${ECHO_MSG} "===> Define WITHOUT_JPEGMMX to disable jpeg-mmx support"
@${ECHO_MSG} "===>"
post-patch:
@${REINPLACE_CMD} -e 's|jpegtran|jpegtran-mmx|' \
${WRKSRC}/Lphoto/photolibrary.py
.endif
.endif
do-install:
@cd ${WRKSRC} && ${PYTHON_CMD} install.py -d ${PREFIX}/${PYTHON_SITELIBDIR:S/${PYTHONBASE}//} -b ${PREFIX}/bin

View file

@ -271,18 +271,6 @@ PLIST_FILES= ${GST_LIB_DIR}/libgsthermescolorspace.so \
# jpeg
.if ${GST_PLUGIN}=="jpeg"
LIB_DEPENDS+= jpeg.9:${PORTSDIR}/graphics/jpeg
CONFLICTS+= gstreamer-plugins-jpeg-mmx-[0-9]*
.endif
# jpeg-mmx
.if ${GST_PLUGIN}=="jpeg-mmx"
LIB_DEPENDS+= jpeg-mmx.62:${PORTSDIR}/graphics/jpeg-mmx
CONFLICTS+= gstreamer-plugins-jpeg-[0-9]*
GST_PLUGIN_DIR= ext/jpeg
PLIST_FILES= ${GST_LIB_DIR}/libgstjpeg.so \
${GST_LIB_DIR}/libgstjpeg.a \
${GST_LIB_DIR}/libgstjpeg.la
.endif
# ladspa

View file

@ -7,7 +7,7 @@
PORTNAME= transcode
PORTVERSION= 1.0.2
PORTREVISION= 5
PORTREVISION= 6
CATEGORIES= multimedia
MASTER_SITES= http://dl.fkb.wormulon.net/transcode/ \
http://dl.kel.wormulon.net/transcode/ \
@ -115,10 +115,6 @@ WITH_LZO= yes
WITH_DIVX5= yes
.endif
.if exists(${LOCALBASE}/lib/libjpeg-mmx.so)
WITH_JPEGMMX= yes
.endif
.if exists(${LOCALBASE}/lib/liblavjpeg.so)
WITH_MJPEG= yes
.endif
@ -173,15 +169,6 @@ CONFIGURE_ARGS+= --enable-imagemagick=no
PLIST_SUB+= WITH_IMAGEMAGICK="@comment "
.endif
.if defined(WITH_JPEGMMX)
LIB_DEPENDS+= jpeg-mmx.62:${PORTSDIR}/graphics/jpeg-mmx
CONFIGURE_ARGS+= --enable-libjpegmmx
PLIST_SUB+= WITH_JPEGMMX=""
.else
CONFIGURE_ARGS+= --enable-libjpegmmx=no
PLIST_SUB+= WITH_JPEGMMX="@comment "
.endif
.if defined(WITH_MJPEG)
LIB_DEPENDS+= lavjpeg-1.8.0:${PORTSDIR}/multimedia/mjpegtools
CONFIGURE_ARGS+= --enable-mjpegtools