From 97a72ecf96b00f18ca13222571389ddce35fce8e Mon Sep 17 00:00:00 2001 From: Mark Spencer 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 - * - * 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 + * + * This program is free software, distributed under the terms of + * the GNU General Public License + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + + +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 zcmb7ocQhQ(xAlxRL>Cghj)<1%y#~W55k_y(yJ*pS2_Z%uHHbb&i)ayq2xgS%EsPR1 zF}e_)=l8z#y|vz-@0|bc*=z50*1c!nyYB7J+g|`GO$ZbM00Mykjk^Tg-T)q|_&C_S zcCcp;aCz;_Zs6>|t`60Caf=100Emf*KtzPZAP|Uzg!mpAEjbw}DH#LJeM(vuMmAO! zMrLMq@Dm<(P5~}v=Est}0z$%KVq$DO((+Owa!*9XME*kpBq1RoBPF9JC#M(TVCE3{ zKgaDi05vfn5Kx2<jIe*#26NOZSGd{i8aePR(MVk$5@ z2jA$Jj5``e;D3w!kHY`wA-byxQ3HSk00II6LIV8%2lx+|nt+BwnDD-`9v!Dh8m*X( zcNDm|`{3F4@!NR-8U7uD8lM`V2pBlPkPh{}I{dz3;Xm@(AT$pZ?Bj$Wkr&?>Xr11p zq4}z`k8Ejgy?Q;aY4W`h!=%xWrhnv$;&L>NQi##}fRH4d+uRFY)7@q4m#W}u`@oB0 z?#M+s@Sp+7Jr)B4iC>3WY+{ym<)3V>cCuHtPs7G~Yd-Z4qL^i|&Qc?#t2t5A3NRxD zEA8nrn=CKg%GtqJdQ(HRxw7VyGFZ~thZ!j)IT7F4_NHRn4s~khaBEPR7ev;rX@k(Bj0&qh^4_uJ56A_23z%nHtUQsN+qHdIJp|4W;P#JHmTwBI zxgH;MHSHNlgfCA#7cTPg33zk(gx>#rvV%D??BrCd_mE|BL!66!{n~;+E{Qo94tyj+r3x-ZOvPs)nmu^pN@qJ87L2>aEksl_yHo$kT&qNtjmm(%e?11d zoXq@qpy1+2=08XYFK#J1a@5^Es++`i7UroR+3K;V{z^vblH0F-5HeUjE``7ufAdq< zfbLNqkF;KCU4N>*slO6>A6Qj?nV{GtmiS-|(#UN1gM#hXzhwS$7-KF(KaXIUgY|3& zv;fy!>3rIFXekSIueALGOlL4CODOD(**X#t=aVg&_7nVSt{WO`FheHZaet%A+ zG~jr~q8K=FH2z~xJj)YRlRQ6lJ`meGkamD=Q1~q~{x@-9RM(*$ASVM|;w53YR|g#3 zS5lN0s4jn5?n6hyMK2u3&iWg`95DJ3Yi0v~^9G||nYKp(aPET4)zvT6ik%Vz4Kss_ z_iALQ!h2bCXWSw^Rm5!cHdE(iJH#T0&g=^H}!CR3nGK7*BM>?z<= zceenF^SG*w_bB8V77@>~$?!MQ4x>oB4{$4aHmU=%0fP!YPik$=zUc{AiXli| zUR>Sz>tfApR(n%|pnZdEYhWZzV*r56I$(fa5hE$W2_&1MgB6kxVq-@()tNEfE%v3K zW8IoHcPf%7(w=&(hfpfxBIJ1lrxZwB9G}80MIWRayEjS%r-z)5d_)DRBm`Eqlw6u? zPwP*2t~~lxMdfd>pstKPnyJDLkycX+Iv5H{+XJc``sGLK_rgx-RlRY4s}SY;VX0qm=Gxo`4oUXkQgL2aXhPeD*s*Bz)$=!KbcS$rh$0B z>Rdw+N?&9avQNRf{9*YW#jLa$++jzP5a)|C?8=!bHNBKGY1LdRH$VULY~+wf{Ewg{ z$!<#(!>i1CnubhoX1)47(qHQ-QHKS#Zs*nLW_Oz8!a3EtV3Fd??7uvqQ#W3iOV*Iz z7xQhFl{8oL&;lj9c0P@he)gpBz1-<+a%|PUv3-j^U7p%4pi?o*zz+3oM<(D#W|G-m zJXim;-OQ*-B3W=PxQnJ?XWA1|p|+G*nWV0CcO`mP-7vRUwkA7$?g5BX5iRX=Qbg55 z*-!9Gj?p2PE?+`jU*TRKZT_8k?p-Vw*gi7R@l2d`s)M;PY^ye}3OSY>+!WxPNCtBCRk4rM3Y z&I_~a>5KjOzg(n}_do7T1?QE<=rWCC9*v6J%)AeV{mt@!@Mmq_yYK?rv%kuuNfWGz zT<_hYQ^hS}iza(C!gVy&Mojt%sFCQJ)#y)zkf)mBD>~*{CiD|iJyNhZVGSnGZ${)A z-)8B`Kxx9iQ4=)*Rc5M}vN@quAkP~a^nu6BeSJB%{pA@o>vnhW1m=a82}NR zaIXrq1n(RPYu(rOka2Uno^13M5PQ16lP6Q!ls{X4d@mwrdb1(bn>=sP>~QoYRVIXm z>Y=^D4_fB%;Hlq4?;d3W?iayYV`2psv_92|?KmjE$&!5hErdCMEflAd5$_QykKgA} zPVFfj0B)2%=b2n<`O490hAhr%lZEq^zg;yAeepna2QzlULfMHDkaHkM2N%EO7NoTX zBUYgjvXH)S3-qVoqrI_G$0KREMR8V_kGQ}OjfPl8wrkSf)1hqgOe%75+$Pul000m6 zhwerVzwy0Kzb2n}1yd@g%=4VP^kDLNRr<2pf)8I3${`YmS+rUY5+x*wJe9|oFYL75 zc~YR8IrC(P>k8=CaNM^2m`PBPXH;R^Vti&2Ye2YSdrhP8h=Shva|PP!^!7KkliGb7 z2hp;uJH~^$zmssCr$d)?M>W%$8L%H15pmHshm@B}(Ui*!)59_^4o>pu9Z|{moN0Np z0*FO%PRvmOUyBU{FJ*zVB#Bsw~l3VjKN*QNO ze>DaNN9a;f`pWVQaX^sNrHeUOPbD<|d$ne>>jC<;Wz}z~eg-KP;iST)i_%=K@)Eh` zfZ%29xsijj)675J%K!GWD(pup^O_$C#{9YYuS`l3%53EiihhOWQx-s&ZF;tv6*ZO4 z=ml9VL5m3LE5Da$5|37|{x&5<^Am0)m0^)FhxQ+e*?%~7mHoy)F$ zFT4q}s)~8H_KxrCaC}#1(G(R%2LpV9@yp}h=aRDSE&xwShFGD@d?U*7^W_I^OlLp4IVaILCyF$d>d>$r!~yp||i zgaT~<<81e#+>Uv!A!2q}jagf+b$+|!`}9K|J8~a?@@RRn^9lY8FVM%dp0pGlS^hoR ztTtZ0ZC9>nVvMmrAT0jN+05SKh!=)b7y7q=wP0pUsrtq2|5aUUye+J2mJB_Hx+e0)=?TUnfFD=f} zS#~$%zdu$3u_Q3ItzHVIFZN6tD?>etD=Ron%1kCWH-ek2j|UtUib6iXgLv8B(~)l2 zu-e(_gmxBq)>I8sFk3#{Gx8Wg{XaZikkoCR zSdBJk5elkvk;PgO9Pq^V`l+Owq!wCZ*!MBT1FWC36u9F0+}kGy#O@8;pBXEwqt)z# z+P{ntTJWB|&y_dag!h(22)H+dj=5mH55=U={J)>KuOUSdsfd^FiDO*p|>JVgI(J7Z75?@#k< zH?x74Fr%2QwbxXT-E^(>f~v6iFw27-h?Y7{5fYEB%$PbVwNXUFf-*nQK5GAi)z^da zky+0g)HM%GM~8W8jNYNrPt~XV6rihpj#&Hs3zzznJA-WX8<1jb8+$<)JBS_>H6?Iw z%$(&iRRN3XYfRCSp$L57$Ua+!a*o6F;%>mj?*%)wW}bY#pqOtwMKzc1i=+k)DUTc9 z!q~LQR*bD*NVrMXsh|U+3QX7JU=~Klj*(8WZL4C_9y;E@Dw)ZH#`zl`qdyzc1q?}DLk63URCG@mS=>=<9$ymoWc z=U00pOsVOO7Oc#d4>EFQ#H6H9oQ;g|65sCj9Rqq-6qt(GL!bqe4@;N zLi)jksQ&b*XxY=vAFlK)Rl?1hX;bSfjkSdH%km$yKS1^EL1o5 zm$s_dUW3$qnx?yHGa=$3u9{$#)<_&`s#poiZcUElnhLqrM?O&~G#$gYWYp*C$}KfR z{3$vGtdsczT&czS@*Xys*dQrNaWb?^z8h&}+Lbxe}inI(K(Z@ z{_}^FTw=D?Pucq;@G#3CvG#{blRuoUl0Cx|@3kk|jxwpRl0bEU?)mt6ar&TjqUtY$ z_U86#>e=$oYtORk7V_=+&jSWv^~q>TQkdpMpC$;C;PNKqvXWJ#<^z5YDTB^{BEG~nlRU>PGIuj*Vp%mAa*$*zUiDe$ zZwvuHMEUb%~i z&Ppuch^6uWh>{=RLGer#A`O<;#ozS~_Q9CLQ!&PTMP~p>s9DWN>>JKr%4op95R&^MhC-dOTj()VY%ZHxFW`avh9+*smc=jxTGX^wa zN}^;W^O)P8qS-GM^DdTJ*3H8%S{8`Jsk9T-1)unjIT8UxxX^FEQQK90zuYu3o^roV zyHIt_0iGubUkyxYGJLG{f;-VgD^~J9u=A*RFKXSTi-}^3ka%{PKM-BlEI1?WX!eh@ zL|I>sffPYK1Ro@dph{`|HxWuL7yU2B^1Dac?r}QpMe>7&smV#Dsb^BC7-FMB_1Gsn zudWE3q*zWiK%hBZTro=1C8@qOUF5`9icFUI0Xwdfv~M3njCjr|Dx@F??tAN+K+DqC z28d!}sShI(9#*7UcF=Tk^DPQmgCfSX??J|UO)m;t(+a$IXB#9`$kgVB)K1GtSczWf z@F(6dG%alFI2h10?G%%$!vuoxrT)}_P*dLB{_N?M-cpN@9?>_rVt2giLRf`HwwXqt|a`jF7FGq22iEz=2kpPySGk!7$~HBi8Rz5VWG z6WVDt-`F&}#P^E&-jo6IbxvfHk9u?i;R`L{Zm!|2{NvpMj`%mVf@HM8FSLg^BrH7l z%FSC{r(J6=1~s_NQpih|PH3QSz%)WX)csyAR;GKYQx1YDp%QZ>0?~EWNO|e-DJfGisG@A1UuxnK&5PP#?`L}q(J=P&K6G$ z`B!FPU>pBk`-ExpPOp~)C#*dcvcHk)al)lE#7tEc-U1~?FJsQytQZk(k%M949VrET z+<#%`-ldSQ;8rOIe>Kz!s+Zp@15h$-elv6q2*j z8s5M8CDh8dnt+Im%`)JrG>udj>`O`uoKa4eG92M+(O&UeTrxg^LmCtI%<2_vK>uh! z^L=7q$Uk_WZ@v?D4FYFn`HysF)aEXsxZI10Z7 bjD&Jt%O5*Wr~a~mpXZ4~C!`YjZ|D9C=@xhg 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 + * + * 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