RFC Errata
RFC 2435, "RTP Payload Format for JPEG-compressed Video", October 1998
Source of RFC: avt (rai)
Errata ID: 4095
Status: Rejected
Type: Technical
Publication Format(s) : TEXT
Reported By: Julius Richard Friedman
Date Reported: 2014-09-04
Rejected by: Ben Campbell
Date Rejected: 2015-07-22
Section Appendix B says:
int MakeHeaders(u_char *p, int type, int w, int h, u_char *lqt, u_char *cqt, u_short dri) { u_char *start = p; /* convert from blocks to pixels */ w <<= 3; h <<= 3; Berc, et. al. Standards Track [Page 19] RFC 2435 RTP Payload Format for JPEG October 1998 *p++ = 0xff; *p++ = 0xd8; /* SOI */ p = MakeQuantHeader(p, lqt, 0); p = MakeQuantHeader(p, cqt, 1); if (dri != 0) p = MakeDRIHeader(p, dri); *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 = 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); Berc, et. al. Standards Track [Page 20] RFC 2435 RTP Payload Format for JPEG October 1998 *p++ = 0xff; *p++ = 0xda; /* SOS */ *p++ = 0; /* length msb */ *p++ = 12; /* length lsb */ *p++ = 3; /* 3 components */ *p++ = 0; /* comp 0 */ *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); };
It should say:
int MakeHeaders(u_char *p, int type, int w, int h, u_char *lqt, u_char *cqt, u_short dri) { u_char *start = p; /* convert from blocks to pixels */ w <<= 3; h <<= 3; *p++ = 0xff; *p++ = 0xd8; /* SOI */ p = MakeQuantHeader(p, lqt, 0); if(cqt != NULL) p = MakeQuantHeader(p, cqt, 1); if (dri != 0) p = MakeDRIHeader(p, dri); *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++ = 1; /* comp 1 */ 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 = 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); if(cqt != NULL) { 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); } Berc, et. al. Standards Track [Page 20] RFC 2435 RTP Payload Format for JPEG October 1998 *p++ = 0xff; *p++ = 0xda; /* SOS */ *p++ = 0; /* length msb */ *p++ = cqt != NULL ? 0x12 : 0x0b;/* length lsb */ *p++ = cqt != NULL ? 0x03 : 0x01;/* 3 components */ *p++ = 0; /* comp 0 */ *p++ = 0; /* huffman table 0 */ *p++ = 0x01; /* comp 1 */ *p++ = cqt != NULL ? 0x11 : 0x00;/* huffman table 1 */ if(cqt != NULL) *p++ = 2;/* comp 2 */ *p++ = cqt != NULL ? 0x11 : 0x00;/* huffman table 1 */ *p++ = 0; /* first DCT coeff */ *p++ = 63; /* last DCT coeff */ *p++ = 0; /* sucessive approx. */ return (p - start); };
Notes:
Did not take into account cases with only 1 component was used.
--VERIFIER NOTES--
Rejected due to discussion in avtcore