From 97a72ecf96b00f18ca13222571389ddce35fce8e Mon Sep 17 00:00:00 2001
From: Mark Spencer <markster@digium.com>
Date: Sat, 26 May 2001 20:39:49 +0000
Subject: [PATCH] Version 0.1.9 from FTP

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@326 65c4cc65-6c06-0410-ace0-fbb531ad65f3
---
 codecs/gsm/src/k6opt.s    |  16 -----
 formats/format_jpeg.c     | 126 ++++++++++++++++++++++++++++++++++++++
 images/asterisk-intro.jpg | Bin 0 -> 6143 bytes
 include/asterisk/image.h  |  45 ++++++++++++++
 4 files changed, 171 insertions(+), 16 deletions(-)
 create mode 100755 formats/format_jpeg.c
 create mode 100755 images/asterisk-intro.jpg
 create mode 100755 include/asterisk/image.h

diff --git a/codecs/gsm/src/k6opt.s b/codecs/gsm/src/k6opt.s
index 3be5c18534..d84d54cbf3 100755
--- a/codecs/gsm/src/k6opt.s
+++ b/codecs/gsm/src/k6opt.s
@@ -1,19 +1,3 @@
-/* k6opt.s  vector functions optimized for MMX extensions to x86
- *
- * Copyright (C) 1999 by Stanley J. Brooks <stabro@megsinet.net>
- * 
- * Any use of this software is permitted provided that this notice is not
- * removed and that neither the authors nor the Technische Universitaet Berlin
- * are deemed to have made any representations as to the suitability of this
- * software for any purpose nor are held responsible for any defects of
- * this software.  THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE;
- * not even the implied warranty of MERCHANTABILITY or FITNESS FOR
- * A PARTICULAR PURPOSE.
- * 
- * Chicago, 03.12.1999
- * Stanley J. Brooks
- */
-
 	.file	"k6opt.s"
 	.version	"01.01"
 /* gcc2_compiled.: */
diff --git a/formats/format_jpeg.c b/formats/format_jpeg.c
new file mode 100755
index 0000000000..7e10af8841
--- /dev/null
+++ b/formats/format_jpeg.c
@@ -0,0 +1,126 @@
+/*
+ * Asterisk -- A telephony toolkit for Linux.
+ *
+ * JPEG File format support.
+ * 
+ * Copyright (C) 1999, Mark Spencer
+ *
+ * Mark Spencer <markster@linux-support.net>
+ *
+ * This program is free software, distributed under the terms of
+ * the GNU General Public License
+ */
+ 
+#include <asterisk/channel.h>
+#include <asterisk/file.h>
+#include <asterisk/logger.h>
+#include <asterisk/sched.h>
+#include <asterisk/module.h>
+#include <asterisk/image.h>
+#include <arpa/inet.h>
+#include <stdlib.h>
+#include <sys/time.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <errno.h>
+#include <string.h>
+#include <pthread.h>
+#include <endian.h>
+
+
+
+static char *desc = "JPEG (Joint Picture Experts Group) Image Format";
+
+
+static struct ast_frame *jpeg_read_image(int fd, int len)
+{
+	struct ast_frame fr;
+	int res;
+	char buf[65536];
+	if (len > sizeof(buf)) {
+		ast_log(LOG_WARNING, "JPEG image too large to read\n");
+		return NULL;
+	}
+	res = read(fd, buf, len);
+	if (res < len) {
+		ast_log(LOG_WARNING, "Only read %d of %d bytes: %s\n", res, len, strerror(errno));
+	}
+	memset(&fr, 0, sizeof(fr));
+	fr.frametype = AST_FRAME_IMAGE;
+	fr.subclass = AST_FORMAT_JPEG;
+	fr.data = buf;
+	fr.src = "JPEG Read";
+	fr.datalen = len;
+	return ast_frisolate(&fr);
+}
+
+static int jpeg_identify(int fd)
+{
+	char buf[10];
+	int res;
+	res = read(fd, buf, sizeof(buf));
+	if (res < sizeof(buf))
+		return 0;
+	if (memcmp(buf + 6, "JFIF", 4))
+		return 0;
+	return 1;
+}
+
+static int jpeg_write_image(int fd, struct ast_frame *fr)
+{
+	int res=0;
+	if (fr->frametype != AST_FRAME_IMAGE) {
+		ast_log(LOG_WARNING, "Not an image\n");
+		return -1;
+	}
+	if (fr->subclass != AST_FORMAT_JPEG) {
+		ast_log(LOG_WARNING, "Not a jpeg image\n");
+		return -1;
+	}
+	if (fr->datalen) {
+		res = write(fd, fr->data, fr->datalen);
+		if (res != fr->datalen) {
+			ast_log(LOG_WARNING, "Only wrote %d of %d bytes: %s\n", res, fr->datalen);
+			return -1;
+		}
+	}
+	return res;
+}
+
+static struct ast_imager jpeg_format = {
+	"jpg",
+	"JPEG (Joint Picture Experts Group)",
+	"jpg|jpeg",
+	AST_FORMAT_JPEG,
+	jpeg_read_image,
+	jpeg_identify,
+	jpeg_write_image,
+};
+
+int load_module()
+{
+	return ast_image_register(&jpeg_format);
+}
+
+int unload_module()
+{
+	ast_image_unregister(&jpeg_format);
+	return 0;
+}	
+
+int usecount()
+{
+	/* We never really have any users */
+	return 0;
+}
+
+char *description()
+{
+	return desc;
+}
+
+
+char *key()
+{
+	return ASTERISK_GPL_KEY;
+}
diff --git a/images/asterisk-intro.jpg b/images/asterisk-intro.jpg
new file mode 100755
index 0000000000000000000000000000000000000000..278f018ce5a5a66d17fdf12aebde59d707ce623a
GIT binary patch
literal 6143
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

literal 0
HcmV?d00001

diff --git a/include/asterisk/image.h b/include/asterisk/image.h
new file mode 100755
index 0000000000..5e318dc93b
--- /dev/null
+++ b/include/asterisk/image.h
@@ -0,0 +1,45 @@
+/*
+ * Asterisk -- A telephony toolkit for Linux.
+ *
+ * General Asterisk channel definitions.
+ * 
+ * Copyright (C) 1999, Mark Spencer
+ *
+ * Mark Spencer <markster@linux-support.net>
+ *
+ * This program is free software, distributed under the terms of
+ * the GNU General Public License
+ */
+
+#ifndef _ASTERISK_IMAGE_H
+#define _ASTERISK_IMAGE_H
+
+struct ast_imager {
+    char *name;					/* Name */
+	char *desc;					/* Description */
+	char *exts;					/* Extension(s) (separated by '|' ) */
+	int format;					/* Image format */
+	struct ast_frame *(*read_image)(int fd, int len);	/* Read an image from a file descriptor */
+	int (*identify)(int fd);		/* Identify if this is that type of file */
+	int (*write_image)(int fd, struct ast_frame *frame); /* Returns length written */
+	struct ast_imager *next;
+};
+
+/* Returns non-zero if image transmission is supported */
+extern int ast_supports_images(struct ast_channel *chan);
+
+/* Sends an image */
+extern int ast_send_image(struct ast_channel *chan, char *filename);
+
+/* Make an image from a filename */
+extern struct ast_frame *ast_read_image(char *filename, char *preflang, int format);
+
+/* Register an image format */
+extern int ast_image_register(struct ast_imager *imgdrv);
+
+extern void ast_image_unregister(struct ast_imager *imgdrv);
+
+/* Initialize image stuff */
+extern int ast_image_init(void);
+
+#endif
-- 
GitLab