[Bug 753257] New: avenc_mjpeg does not play well with appsrc do-timestamp=true

GStreamer (GNOME Bugzilla) bugzilla at gnome.org
Tue Aug 4 08:04:31 PDT 2015


https://bugzilla.gnome.org/show_bug.cgi?id=753257

            Bug ID: 753257
           Summary: avenc_mjpeg does not play well with appsrc
                    do-timestamp=true
    Classification: Platform
           Product: GStreamer
           Version: 1.4.5
                OS: Linux
            Status: NEW
          Severity: normal
          Priority: Normal
         Component: gst-libav
          Assignee: gstreamer-bugs at lists.freedesktop.org
          Reporter: fgouget at codeweavers.com
        QA Contact: gstreamer-bugs at lists.freedesktop.org
     GNOME version: ---

Spice (http://www.spice-space.org/) provides access to remote desktops,
particularly in virtualized environments. One of the features is the
auto-detection and reencoding of videos to limit bandwidth and ensure smooth
playback over the network. Currently it uses an internal MJPEG encoder and I'm
adding GStreamer support so more options are available.

The pipeline is:
appsrc format=2 do-timestamp=true ! videoconvert ! avenc_mjpeg ! appsink

The problem is avenc_mjpeg quickly locks up with the following message:

0:00:00.845940069 23436 0x7f5318649800 ERROR                  libav :0:: Error,
Invalid timestamp=12, last=12

The issue is that the frame rate is not really constant as it depends on the
delays occurring in the virtual machine's media player and in Spice, and also
that we only have an estimate of the fps. So the DTS and PTS timestamps appsrc
puts on the buffers are not evenly spaced. Actually I'm not entirely sure why
they are even set since we set the format to GST_FORMAT_BYTES.

In the above case we had an estimated fps of 18, and the following buffer
timestamps:

002513154 ->  0.0450 ->  0
071591170 ->  1.2870 ->  1
118313226 ->  2.1294 ->  2
165181751 ->  2.9718 ->  3
245834444 ->  4.4244 ->  4
332598247 ->  5.9850 ->  6
371301628 ->  6.6834 ->  7
418700233 ->  7.5366 ->  8
506639922 ->  9.1188 ->  9
544309390 ->  9.7974 -> 10
591892626 -> 10.6524 -> 11
639620343 -> 11.5128 -> 12
677606008 -> 12.1968 -> 12

vp8enc and x264enc have no problem with the timestamps produced by appsrc so
I'd expect avenc_mjpeg to work with them too.

Bug 724103 looks similar but it has not seen a resolution so far.


Here are the relevant GStreamer traces:

0:00:00.168343602 23436 0x7f5318649800 LOG           GST_SCHEDULING
gstpad.c:3828:gst_pad_chain_data_unchecked:<encoder:sink> calling chainfunction
&gst_video_encoder_chain with buffer buffer: 0x7f531864f730, pts
0:00:00.002513154, dts 0:00:00.002513154, dur 99:99:99.999999999, size 2536960,
offset 1, offset_end 18446744073709551615, flags 0x0
0:00:00.235083367 23436 0x7f5318649800 LOG           GST_SCHEDULING
gstpad.c:3828:gst_pad_chain_data_unchecked:<encoder:sink> calling chainfunction
&gst_video_encoder_chain with buffer buffer: 0x7f531864f730, pts
0:00:00.071591170, dts 0:00:00.071591170, dur 99:99:99.999999999, size 2536960,
offset 2, offset_end 18446744073709551615, flags 0x0
0:00:00.281803710 23436 0x7f5318649800 LOG           GST_SCHEDULING
gstpad.c:3828:gst_pad_chain_data_unchecked:<encoder:sink> calling chainfunction
&gst_video_encoder_chain with buffer buffer: 0x7f531864f730, pts
0:00:00.118313226, dts 0:00:00.118313226, dur 99:99:99.999999999, size 2536960,
offset 3, offset_end 18446744073709551615, flags 0x0
0:00:00.331504042 23436 0x7f5318649800 LOG           GST_SCHEDULING
gstpad.c:3828:gst_pad_chain_data_unchecked:<encoder:sink> calling chainfunction
&gst_video_encoder_chain with buffer buffer: 0x7f531864f730, pts
0:00:00.165181751, dts 0:00:00.165181751, dur 99:99:99.999999999, size 2536960,
offset 4, offset_end 18446744073709551615, flags 0x0
0:00:00.409095156 23436 0x7f5318649800 LOG           GST_SCHEDULING
gstpad.c:3828:gst_pad_chain_data_unchecked:<encoder:sink> calling chainfunction
&gst_video_encoder_chain with buffer buffer: 0x7f531864f730, pts
0:00:00.245834444, dts 0:00:00.245834444, dur 99:99:99.999999999, size 2536960,
offset 5, offset_end 18446744073709551615, flags 0x0
0:00:00.497658441 23436 0x7f5318649800 LOG           GST_SCHEDULING
gstpad.c:3828:gst_pad_chain_data_unchecked:<encoder:sink> calling chainfunction
&gst_video_encoder_chain with buffer buffer: 0x7f531864f730, pts
0:00:00.332598247, dts 0:00:00.332598247, dur 99:99:99.999999999, size 2536960,
offset 6, offset_end 18446744073709551615, flags 0x0
0:00:00.534940768 23436 0x7f5318649800 LOG           GST_SCHEDULING
gstpad.c:3828:gst_pad_chain_data_unchecked:<encoder:sink> calling chainfunction
&gst_video_encoder_chain with buffer buffer: 0x7f531864f730, pts
0:00:00.371301628, dts 0:00:00.371301628, dur 99:99:99.999999999, size 2536960,
offset 7, offset_end 18446744073709551615, flags 0x0
0:00:00.582394393 23436 0x7f5318649800 LOG           GST_SCHEDULING
gstpad.c:3828:gst_pad_chain_data_unchecked:<encoder:sink> calling chainfunction
&gst_video_encoder_chain with buffer buffer: 0x7f531864f730, pts
0:00:00.418700233, dts 0:00:00.418700233, dur 99:99:99.999999999, size 2536960,
offset 8, offset_end 18446744073709551615, flags 0x0
0:00:00.670202868 23436 0x7f5318649800 LOG           GST_SCHEDULING
gstpad.c:3828:gst_pad_chain_data_unchecked:<encoder:sink> calling chainfunction
&gst_video_encoder_chain with buffer buffer: 0x7f531864f730, pts
0:00:00.506639922, dts 0:00:00.506639922, dur 99:99:99.999999999, size 2536960,
offset 9, offset_end 18446744073709551615, flags 0x0
0:00:00.707709735 23436 0x7f5318649800 LOG           GST_SCHEDULING
gstpad.c:3828:gst_pad_chain_data_unchecked:<encoder:sink> calling chainfunction
&gst_video_encoder_chain with buffer buffer: 0x7f531864f730, pts
0:00:00.544309390, dts 0:00:00.544309390, dur 99:99:99.999999999, size 2536960,
offset 10, offset_end 18446744073709551615, flags 0x0
0:00:00.756213906 23436 0x7f5318649800 LOG           GST_SCHEDULING
gstpad.c:3828:gst_pad_chain_data_unchecked:<encoder:sink> calling chainfunction
&gst_video_encoder_chain with buffer buffer: 0x7f531864f730, pts
0:00:00.591892626, dts 0:00:00.591892626, dur 99:99:99.999999999, size 2536960,
offset 11, offset_end 18446744073709551615, flags 0x0
0:00:00.803863082 23436 0x7f5318649800 LOG           GST_SCHEDULING
gstpad.c:3828:gst_pad_chain_data_unchecked:<encoder:sink> calling chainfunction
&gst_video_encoder_chain with buffer buffer: 0x7f531864f730, pts
0:00:00.639620343, dts 0:00:00.639620343, dur 99:99:99.999999999, size 2536960,
offset 12, offset_end 18446744073709551615, flags 0x0
0:00:00.845885669 23436 0x7f5318649800 LOG           GST_SCHEDULING
gstpad.c:3828:gst_pad_chain_data_unchecked:<encoder:sink> calling chainfunction
&gst_video_encoder_chain with buffer buffer: 0x7f531864f730, pts
0:00:00.677606008, dts 0:00:00.677606008, dur 99:99:99.999999999, size 2536960,
offset 13, offset_end 18446744073709551615, flags 0x0
0:00:00.845940069 23436 0x7f5318649800 ERROR                  libav :0:: Error,
Invalid timestamp=12, last=12
0:00:00.845960574 23436 0x7f5318649800 ERROR                  libav
gstavvidenc.c:675:gst_ffmpegvidenc_handle_frame:<encoder> avenc_mjpeg: failed
to encode buffer
0:00:00.845970442 23436 0x7f5318649800 DEBUG           videoencoder
gstvideoencoder.c:1902:gst_video_encoder_finish_frame:<encoder> skipping frame
0:00:00.677606008

-- 
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