⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rfc2035.txt

📁 著名的RFC文档,其中有一些文档是已经翻译成中文的的.
💻 TXT
📖 第 1 页 / 共 2 页
字号:
RFC 2035           RTP Payload Format for JPEG Video        October 1996   Decoders can, however, treat types 4/5 as types 2/3, simply   reassembling the entire frame and then decoding.5.  Security Considerations   Security issues are not discussed in this memo.6.  Authors' Addresses   Lance M. Berc   Systems Research Center   Digital Equipment Corporation   130 Lytton Ave   Palo Alto CA 94301   Phone: +1 415 853 2100   EMail: berc@pa.dec.com   William C. Fenner   Xerox PARC   3333 Coyote Hill Road   Palo Alto, CA 94304   Phone: +1 415 812 4816   EMail: fenner@cmf.nrl.navy.mil   Ron Frederick   Xerox PARC   3333 Coyote Hill Road   Palo Alto, CA 94304   Phone: +1 415 812 4459   EMail: frederick@parc.xerox.com   Steven McCanne   Lawrence Berkeley Laboratory   M/S 46A-1123   One Cyclotron Road   Berkeley, CA 94720   Phone: +1 510 486 7520   EMail: mccanne@ee.lbl.govBerc, et. al.               Standards Track                     [Page 9]RFC 2035           RTP Payload Format for JPEG Video        October 19967.  References[1]  ISO DIS 10918-1. Digital Compression and Coding of Continuous-tone     Still Images (JPEG), CCITT Recommendation T.81.[2]  William B. Pennebaker, Joan L. Mitchell, JPEG: Still Image Data     Compression Standard, Van Nostrand Reinhold, 1993.[3]  Gregory K. Wallace, The JPEG Sill Picture Compression Standard,     Communications of the ACM, April 1991, Vol 34, No. 1, pp. 31-44.[4]  The JPEG File Interchange Format.  Maintained by C-Cube Microsys-     tems, Inc., and available in     ftp://ftp.uu.net/graphics/jpeg/jfif.ps.gz.[5]  Tom Lane et. al., The Independent JPEG Group software JPEG codec.     Source code available in     ftp://ftp.uu.net/graphics/jpeg/jpegsrc.v5.tar.gz.Berc, et. al.               Standards Track                    [Page 10]RFC 2035           RTP Payload Format for JPEG Video        October 1996Appendix A   The following code can be used to create a quantization table from a   Q factor:/* * Table K.1 from JPEG spec. */static const int jpeg_luma_quantizer[64] = {        16, 11, 10, 16, 24, 40, 51, 61,        12, 12, 14, 19, 26, 58, 60, 55,        14, 13, 16, 24, 40, 57, 69, 56,        14, 17, 22, 29, 51, 87, 80, 62,        18, 22, 37, 56, 68, 109, 103, 77,        24, 35, 55, 64, 81, 104, 113, 92,        49, 64, 78, 87, 103, 121, 120, 101,        72, 92, 95, 98, 112, 100, 103, 99};/* * Table K.2 from JPEG spec. */static const int jpeg_chroma_quantizer[64] = {        17, 18, 24, 47, 99, 99, 99, 99,        18, 21, 26, 66, 99, 99, 99, 99,        24, 26, 56, 99, 99, 99, 99, 99,        47, 66, 99, 99, 99, 99, 99, 99,        99, 99, 99, 99, 99, 99, 99, 99,        99, 99, 99, 99, 99, 99, 99, 99,        99, 99, 99, 99, 99, 99, 99, 99,        99, 99, 99, 99, 99, 99, 99, 99};/* * Call MakeTables with the Q factor and two int[64] return arrays */voidMakeTables(int q, u_char *lum_q, u_char *chr_q){  int i;  int factor = q;  if (q < 1) factor = 1;  if (q > 99) factor = 99;  if (q < 50)    q = 5000 / factor;  else    q = 200 - factor*2;Berc, et. al.               Standards Track                    [Page 11]RFC 2035           RTP Payload Format for JPEG Video        October 1996  for (i=0; i < 64; i++) {    int lq = ( jpeg_luma_quantizer[i] * q + 50) / 100;    int cq = ( jpeg_chroma_quantizer[i] * q + 50) / 100;    /* Limit the quantizers to 1 <= q <= 255 */    if ( lq < 1) lq = 1;    else if ( lq > 255) lq = 255;    lum_q[i] = lq;    if ( cq < 1) cq = 1;    else if ( cq > 255) cq = 255;    chr_q[i] = cq;  }}Appendix B   The following routines can be used to create the JPEG marker segments   corresponding to the table-specification data that is absent from the   RTP/JPEG body.u_char lum_dc_codelens[] = {        0, 1, 5, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,};u_char lum_dc_symbols[] = {        0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,};u_char lum_ac_codelens[] = {        0, 2, 1, 3, 3, 2, 4, 3, 5, 5, 4, 4, 0, 0, 1, 0x7d,};u_char lum_ac_symbols[] = {        0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12,        0x21, 0x31, 0x41, 0x06, 0x13, 0x51, 0x61, 0x07,        0x22, 0x71, 0x14, 0x32, 0x81, 0x91, 0xa1, 0x08,        0x23, 0x42, 0xb1, 0xc1, 0x15, 0x52, 0xd1, 0xf0,        0x24, 0x33, 0x62, 0x72, 0x82, 0x09, 0x0a, 0x16,        0x17, 0x18, 0x19, 0x1a, 0x25, 0x26, 0x27, 0x28,        0x29, 0x2a, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39,        0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49,        0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59,        0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69,        0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79,        0x7a, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89,        0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98,        0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,Berc, et. al.               Standards Track                    [Page 12]RFC 2035           RTP Payload Format for JPEG Video        October 1996        0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6,        0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5,        0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4,        0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xe1, 0xe2,        0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea,        0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8,        0xf9, 0xfa,};u_char chm_dc_codelens[] = {        0, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0,};u_char chm_dc_symbols[] = {        0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,};u_char chm_ac_codelens[] = {        0, 2, 1, 2, 4, 4, 3, 4, 7, 5, 4, 4, 0, 1, 2, 0x77,};u_char chm_ac_symbols[] = {        0x00, 0x01, 0x02, 0x03, 0x11, 0x04, 0x05, 0x21,        0x31, 0x06, 0x12, 0x41, 0x51, 0x07, 0x61, 0x71,        0x13, 0x22, 0x32, 0x81, 0x08, 0x14, 0x42, 0x91,        0xa1, 0xb1, 0xc1, 0x09, 0x23, 0x33, 0x52, 0xf0,        0x15, 0x62, 0x72, 0xd1, 0x0a, 0x16, 0x24, 0x34,        0xe1, 0x25, 0xf1, 0x17, 0x18, 0x19, 0x1a, 0x26,        0x27, 0x28, 0x29, 0x2a, 0x35, 0x36, 0x37, 0x38,        0x39, 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48,        0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58,        0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,        0x69, 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78,        0x79, 0x7a, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,        0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96,        0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5,        0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4,        0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3,        0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2,        0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda,        0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9,        0xea, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8,        0xf9, 0xfa,};u_char *MakeQuantHeader(u_char *p, u_char *qt, int tableNo){Berc, et. al.               Standards Track                    [Page 13]RFC 2035           RTP Payload Format for JPEG Video        October 1996        *p++ = 0xff;        *p++ = 0xdb;            /* DQT */        *p++ = 0;               /* length msb */        *p++ = 67;              /* length lsb */        *p++ = tableNo;        memcpy(p, qt, 64);        return (p + 64);}u_char *MakeHuffmanHeader(u_char *p, u_char *codelens, int ncodes, u_char *symbols,                  int nsymbols, int tableNo, int tableClass){        *p++ = 0xff;        *p++ = 0xc4;            /* DHT */        *p++ = 0;               /* length msb */        *p++ = 3 + ncodes + nsymbols; /* length lsb */        *p++ = tableClass << 4 | tableNo;        memcpy(p, codelens, ncodes);        p += ncodes;        memcpy(p, symbols, nsymbols);        p += nsymbols;        return (p);}/* * Given an RTP/JPEG type code, q factor, width, and height, * generate a frame and scan headers that can be prepended * to the RTP/JPEG data payload to produce a JPEG compressed * image in interchange format (except for possible trailing * garbage and absence of an EOI marker to terminate the scan). */int MakeHeaders(u_char *p, int type, int q, int w, int h){        u_char *start = p;        u_char lqt[64];        u_char cqt[64];        /* convert from blocks to pixels */        w <<= 3;        h <<= 3;        MakeTables(q, lqt, cqt);        *p++ = 0xff;        *p++ = 0xd8;            /* SOI */        p = MakeQuantHeader(p, lqt, 0);Berc, et. al.               Standards Track                    [Page 14]RFC 2035           RTP Payload Format for JPEG Video        October 1996        p = MakeQuantHeader(p, cqt, 1);        p = MakeHuffmanHeader(p, lum_dc_codelens,                              sizeof(lum_dc_codelens),                              lum_dc_symbols,                              sizeof(lum_dc_symbols), 0, 0);        p = MakeHuffmanHeader(p, lum_ac_codelens,                              sizeof(lum_ac_codelens),                              lum_ac_symbols,                              sizeof(lum_ac_symbols), 0, 1);        p = MakeHuffmanHeader(p, chm_dc_codelens,                              sizeof(chm_dc_codelens),                              chm_dc_symbols,                              sizeof(chm_dc_symbols), 1, 0);        p = MakeHuffmanHeader(p, chm_ac_codelens,                              sizeof(chm_ac_codelens),                              chm_ac_symbols,                              sizeof(chm_ac_symbols), 1, 1);        *p++ = 0xff;        *p++ = 0xc0;            /* SOF */        *p++ = 0;               /* length msb */        *p++ = 17;              /* length lsb */        *p++ = 8;               /* 8-bit precision */        *p++ = h >> 8;          /* height msb */        *p++ = h;               /* height lsb */        *p++ = w >> 8;          /* width msb */        *p++ = w;               /* wudth lsb */        *p++ = 3;               /* number of components */        *p++ = 0;               /* comp 0 */        if (type == 0)                *p++ = 0x21;    /* hsamp = 2, vsamp = 1 */        else                *p++ = 0x22;    /* hsamp = 2, vsamp = 2 */        *p++ = 0;               /* quant table 0 */        *p++ = 1;               /* comp 1 */        *p++ = 0x11;            /* hsamp = 1, vsamp = 1 */        *p++ = 1;               /* quant table 1 */        *p++ = 2;               /* comp 2 */        *p++ = 0x11;            /* hsamp = 1, vsamp = 1 */        *p++ = 1;               /* quant table 1 */        *p++ = 0xff;        *p++ = 0xda;            /* SOS */        *p++ = 0;               /* length msb */        *p++ = 12;              /* length lsb */        *p++ = 3;               /* 3 components */        *p++ = 0;               /* comp 0 */Berc, et. al.               Standards Track                    [Page 15]RFC 2035           RTP Payload Format for JPEG Video        October 1996        *p++ = 0;               /* huffman table 0 */        *p++ = 1;               /* comp 1 */        *p++ = 0x11;            /* huffman table 1 */        *p++ = 2;               /* comp 2 */        *p++ = 0x11;            /* huffman table 1 */        *p++ = 0;               /* first DCT coeff */        *p++ = 63;              /* last DCT coeff */        *p++ = 0;               /* sucessive approx. */        return (p - start);};Berc, et. al.               Standards Track                    [Page 16]

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -