RFC Errata
Found 4 records.
Status: Rejected (4)
RFC 2435, "RTP Payload Format for JPEG-compressed Video", October 1998
Source of RFC: avt (rai)
Errata ID: 4094
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 A says:
/* * 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 };
It should say:
/* * Table K.1 from JPEG spec. */ static const int jpeg_luma_quantizer[64] = { 16, 11, 12, 14, 12, 10, 16, 14, 13, 14, 18, 17, 16, 19, 24, 40, 26, 24, 22, 22, 24, 49, 35, 37, 29, 40, 58, 51, 61, 60, 57, 51, 56, 55, 64, 72, 92, 78, 64, 68, 87, 69, 55, 56, 80, 109, 81, 87, 95, 98, 103, 104, 103, 62, 77, 113, 121, 112, 100, 120, 92, 101, 103, 99, }; /* * Table K.2 from JPEG spec. */ static const int jpeg_chroma_quantizer[64] = { 17, 18, 18, 24, 21, 24, 47, 26, 26, 47, 99, 66, 56, 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, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99 };
Notes:
Luma and Chroma was not in Zig Zag order and Luma energy has been de-saturated.
--VERIFIER NOTES--
Rejected per discussion in avtcore
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
Errata ID: 4096
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 Discussion says:
types component samp. fact. samp. fact. table number +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | 1 (Y) | 2 | 1 | 0 | | 0, 64 | 2 (U) | 1 | 1 | 1 | | | 3 (V) | 1 | 1 | 1 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | 1 (Y) | 2 | 2 | 0 | | 1, 65 | 2 (U) | 1 | 1 | 1 | | | 3 (V) | 1 | 1 | 1 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
It should say:
TO BE DETERMINED
Notes:
types component samp. fact. samp. fact. table number
FROM StartOf Frame (0xFFC0)
Read Nf - Number of image components in frame
if(Nf > 1)
Read Each Component
0 1 2 3 4 5 6 7
+-+-+-+-+-+-+-+-+
| H | V |
+-+-+-+-+-+-+-+-+
H: Horizontal sampling factor – Specifies the relationship between the component horizontal dimension
and maximum image dimension X (see Jpeg Spec A.1.1); also specifies the number of horizontal data units of component
Ci in each MCU, when more than one component is encoded in a scan.
Vi: Vertical sampling factor – Specifies the relationship between the component vertical dimension and
maximum image dimension Y (see Jpeg Spec A.1.1); also specifies the number of vertical data units of component Ci in
each MCU, when more than one component is encoded in a scan.
Tqi: Implied from the position in parsing
--VERIFIER NOTES--
Rejected based on discussion in avtcore. (And also because the errata does not contain a proposed change to the text).
Errata ID: 4097
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 3.1.5 says:
3.1.5. Width: 8 bits This field encodes the width of the image in 8-pixel multiples (e.g., a width of 40 denotes an image 320 pixels wide). The maximum width is 2040 pixels. 3.1.6. Height: 8 bits This field encodes the height of the image in 8-pixel multiples (e.g., a height of 30 denotes an image 240 pixels tall). When encoding interlaced video, this is the height of a video field, since fields are individually JPEG encoded. The maximum height is 65535 pixels.
It should say:
3.1.5. Width: 8 bits This field encodes the width of the image in 8-pixel multiples (e.g., a width of 40 denotes an image 320 pixels wide). The maximum width is 2040 pixels. 3.1.6. Height: 8 bits This field encodes the height of the image in 8-pixel multiples (e.g., a height of 30 denotes an image 240 pixels tall). When encoding interlaced video, this is the height of a video field, since fields are individually JPEG encoded. The maximum height is 65535 pixels.
Notes:
Use a divisor of 256 to determine the height, where 8 / 256 = 32.
Ensure FragmentOffset does not exceed 2^24, if it does then use 2^24 - value)
--VERIFIER NOTES--
Rejected based on discussion in avtcore