[Bug 700773] New: gstrtpjpegdepay.c -- index numbering of image components in SOF header off by one

GStreamer (bugzilla.gnome.org) bugzilla at gnome.org
Tue May 21 04:27:33 PDT 2013


https://bugzilla.gnome.org/show_bug.cgi?id=700773
  GStreamer | gst-plugins-good | git

           Summary: gstrtpjpegdepay.c -- index numbering of image
                    components in SOF header off by one
    Classification: Platform
           Product: GStreamer
           Version: git
        OS/Version: Linux
            Status: UNCONFIRMED
          Severity: critical
          Priority: Normal
         Component: gst-plugins-good
        AssignedTo: gstreamer-bugs at lists.freedesktop.org
        ReportedBy: codador at web.de
         QAContact: gstreamer-bugs at lists.freedesktop.org
     GNOME version: ---


Applies to both gstreamer 0.10 and 1.0

Error description
-----------------

GStreamer fails to play MJPEG videos over RTP, 
i.e. RTP+JPEG according to RFC2435.

Sample display pipelines
------------------------

-- RTSP, RTP unicast
$ gst-launch rtspsrc debug=true location=rtsp://bla ! rtpjpegdepay ! jpegdec !
xvimagesink
$ gst-launch rtspsrc debug=true location=rtsp://bla ! rtpjpegdepay !
ffdec_mjpeg ! xvimagesink

-- RTP unicast
$ gst-launch rtpsrc uri=rtp://bla ! rtpjpegdepay ! jpegdec ! xvimagesink
$ gst-launch rtpsrc uri=rtp://bla ! rtpjpegdepay ! ffdec_mjpeg ! xvimagesink


Remedy
------

in gst-plugins-good/gst/rtp/gstrtpjpegdepay.c:MakeHeaders()

-  *p++ = 0;                     /* comp 0 */
+  *p++ = 1;                     /* comp 0 */
  if ((type & 0x3f) == 0)
    *p++ = 0x21;                /* hsamp = 2, vsamp = 1 */
  else
    *p++ = 0x22;                /* hsamp = 2, vsamp = 2 */
  *p++ = 0;                     /* quant table 0 */
-  *p++ = 1;                     /* comp 1 */
+  *p++ = 2;                     /* comp 1 */
  *p++ = 0x11;                  /* hsamp = 1, vsamp = 1 */
  *p++ = 1;                     /* quant table 1 */
-  *p++ = 2;                     /* comp 2 */
+  *p++ = 3;                     /* comp 2 */
  *p++ = 0x11;                  /* hsamp = 1, vsamp = 1 */
  *p++ = 1;                     /* quant table 1 */

Component table indexing starts at One, not Zero, at least mjpegdec.c of libav
expects it this way. The standard (ISO/IEC 10918-1) depicts start of indexing
at One, albeit only graphically. 
Frame header parameters as stated in Table B.2 allow component index values in
the range from 0-255 nonetheless. 

Remaining Bugs
--------------
Still poor image quality in comparison to vlc visualization. 
Chroma seems to be off (displaced by 1-4 pix)
Double checked AC luma/chroma coefficients, Quantization tables and the likes
to no avail.

-- 
Configure bugmail: https://bugzilla.gnome.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.
You are the assignee for the bug.


More information about the gstreamer-bugs mailing list