diff --git a/codecs/gsm/src/k6opt.s b/codecs/gsm/src/k6opt.s index 3be5c18534ef7cb49eb367d97c15b6af347ffe5e..d84d54cbf36f3735535bdd7cfdd2ba0146fd3cd1 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 0000000000000000000000000000000000000000..7e10af88412d4a19354afb45cd49be3a7469b18e --- /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 Binary files /dev/null and b/images/asterisk-intro.jpg differ diff --git a/include/asterisk/image.h b/include/asterisk/image.h new file mode 100755 index 0000000000000000000000000000000000000000..5e318dc93ba0151f285ba8db06046b8e104d79f3 --- /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