Wed Aug 7 17:16:05 2019

Asterisk developer's documentation


format_jpeg.c File Reference

JPEG File format support. More...

#include "asterisk.h"
#include "asterisk/mod_format.h"
#include "asterisk/module.h"
#include "asterisk/image.h"
#include "asterisk/endian.h"

Go to the source code of this file.

Functions

 AST_MODULE_INFO (ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER,"jpeg (joint picture experts group) image format",.load=load_module,.unload=unload_module,.load_pri=AST_MODPRI_APP_DEPEND)
static int jpeg_identify (int fd)
static struct ast_framejpeg_read_image (int fd, int len)
static int jpeg_write_image (int fd, struct ast_frame *fr)
static int load_module (void)
static int unload_module (void)

Variables

static struct ast_imager jpeg_format

Detailed Description

JPEG File format support.

Definition in file format_jpeg.c.


Function Documentation

AST_MODULE_INFO ( ASTERISK_GPL_KEY  ,
AST_MODFLAG_LOAD_ORDER  ,
"jpeg (joint picture experts group) image format ,
load = load_module,
unload = unload_module,
load_pri = AST_MODPRI_APP_DEPEND 
)
static int jpeg_identify ( int  fd  )  [static]

Definition at line 62 of file format_jpeg.c.

00063 {
00064    char buf[10];
00065    int res;
00066    res = read(fd, buf, sizeof(buf));
00067    if (res < sizeof(buf))
00068       return 0;
00069    if (memcmp(buf + 6, "JFIF", 4))
00070       return 0;
00071    return 1;
00072 }

static struct ast_frame* jpeg_read_image ( int  fd,
int  len 
) [static, read]

Definition at line 40 of file format_jpeg.c.

References AST_FORMAT_JPEG, AST_FRAME_IMAGE, ast_frisolate(), ast_log(), ast_frame_subclass::codec, ast_frame::data, ast_frame::datalen, errno, ast_frame::frametype, LOG_WARNING, ast_frame::ptr, ast_frame::src, and ast_frame::subclass.

00041 {
00042    struct ast_frame fr;
00043    int res;
00044    char buf[65536];
00045    if (len > sizeof(buf) || len < 0) {
00046       ast_log(LOG_WARNING, "JPEG image too large to read\n");
00047       return NULL;
00048    }
00049    res = read(fd, buf, len);
00050    if (res < len) {
00051       ast_log(LOG_WARNING, "Only read %d of %d bytes: %s\n", res, len, strerror(errno));
00052    }
00053    memset(&fr, 0, sizeof(fr));
00054    fr.frametype = AST_FRAME_IMAGE;
00055    fr.subclass.codec = AST_FORMAT_JPEG;
00056    fr.data.ptr = buf;
00057    fr.src = "JPEG Read";
00058    fr.datalen = len;
00059    return ast_frisolate(&fr);
00060 }

static int jpeg_write_image ( int  fd,
struct ast_frame fr 
) [static]

Definition at line 74 of file format_jpeg.c.

References AST_FORMAT_JPEG, AST_FRAME_IMAGE, ast_log(), ast_frame_subclass::codec, ast_frame::data, ast_frame::datalen, errno, ast_frame::frametype, LOG_WARNING, ast_frame::ptr, and ast_frame::subclass.

00075 {
00076    int res=0;
00077    if (fr->frametype != AST_FRAME_IMAGE) {
00078       ast_log(LOG_WARNING, "Not an image\n");
00079       return -1;
00080    }
00081    if (fr->subclass.codec != AST_FORMAT_JPEG) {
00082       ast_log(LOG_WARNING, "Not a jpeg image\n");
00083       return -1;
00084    }
00085    if (fr->datalen) {
00086       res = write(fd, fr->data.ptr, fr->datalen);
00087       if (res != fr->datalen) {
00088          ast_log(LOG_WARNING, "Only wrote %d of %d bytes: %s\n", res, fr->datalen, strerror(errno));
00089          return -1;
00090       }
00091    }
00092    return res;
00093 }

static int load_module ( void   )  [static]

Definition at line 105 of file format_jpeg.c.

References ast_image_register(), AST_MODULE_LOAD_FAILURE, and AST_MODULE_LOAD_SUCCESS.

00106 {
00107    if (ast_image_register(&jpeg_format))
00108       return AST_MODULE_LOAD_FAILURE;
00109    return AST_MODULE_LOAD_SUCCESS;
00110 }

static int unload_module ( void   )  [static]

Definition at line 112 of file format_jpeg.c.

References ast_image_unregister().

00113 {
00114    ast_image_unregister(&jpeg_format);
00115 
00116    return 0;
00117 }


Variable Documentation

struct ast_imager jpeg_format [static]

Definition at line 95 of file format_jpeg.c.


Generated on 7 Aug 2019 for Asterisk - The Open Source Telephony Project by  doxygen 1.6.1