[Bug 697672] New: VP8 passed through rtpbin decodes a single frame and then fails to decode until a key frame passed through

GStreamer (bugzilla.gnome.org) bugzilla at gnome.org
Tue Apr 9 15:42:15 PDT 2013


https://bugzilla.gnome.org/show_bug.cgi?id=697672
  GStreamer | gst-plugins-bad | 1.0.5

           Summary: VP8 passed through rtpbin decodes a single frame and
                    then fails to decode until a key frame passed through
    Classification: Platform
           Product: GStreamer
           Version: 1.0.5
        OS/Version: Mac OS
            Status: UNCONFIRMED
          Severity: normal
          Priority: Normal
         Component: gst-plugins-bad
        AssignedTo: gstreamer-bugs at lists.freedesktop.org
        ReportedBy: tcdgreenwood at hotmail.com
         QAContact: gstreamer-bugs at lists.freedesktop.org
     GNOME version: ---


When decoding VP8 through rtpbin you get a single frame or a short section of
video decoded and then vp8dec fails to decode until a keyframe.  The issue is
caused by caps renegotiation happening after the first frame - which causes an
issue in rtpvp8depay and vp8enc.  rtpvp8depay detects caps being set and marks
the current buffer as having a discontinuity, vp8enc in gst_vp8_dec_set_format
destroys the codec.

I have been able to get streams working nearly correctly by commenting out the
destroy of the vp8 codec from gst_vp8_dec_set_format.  Though I am not sure
it's really correct.

Been reproduced on Mac and Ubuntu.

I can reproduce the issue using the following commands:

gst-launch-1.0 -v rtpbin name=rtpvp8 videotestsrc pattern=ball ! textoverlay
text="VP8" ! 'video/x-raw,width=320,height=240,framerate=15/1' ! vp8enc
cpu-used=15 keyframe-max-dist=10000  ! rtpvp8pay ! rtpvp8.send_rtp_sink_0
rtpvp8.send_rtp_src_0 ! udpsink async=false port=5000 host=::FFFF:7F00:0001
name=vrtpsink rtpvp8.send_rtcp_src_0 ! udpsink port=5001 host=::FFFF:7F00:0001
sync=false async=false name=vrtcpsink udpsrc name=receiver_rtcp_in port=5003
caps = "application/x-rtcp" ! rtpvp8.recv_rtcp_sink_0 udpsrc name=vp8recv
port=5002 caps="application/x-rtp, clock-rate=(int)90000,
encoding-name=(string)VP8-DRAFT-IETF-01, payload=(int)96, media=(string)video"
! rtpvp8.recv_rtp_sink_0 rtpvp8. ! rtpvp8depay ! vp8dec ! videoconvert !
osxvideosink

gst-launch-1.0 -v rtpbin name=rtpvp8 videotestsrc pattern=ball ! textoverlay
text="VP8" ! 'video/x-raw,width=320,height=240,framerate=15/1' ! vp8enc
cpu-used=15 keyframe-max-dist=10000 ! rtpvp8pay ! rtpvp8.send_rtp_sink_0
rtpvp8.send_rtp_src_0 ! udpsink async=false port=5002 host=::FFFF:7F00:0001
name=vrtpsink rtpvp8.send_rtcp_src_0 ! udpsink port=5003 host=::FFFF:7F00:0001
sync=false async=false name=vrtcpsink udpsrc name=receiver_rtcp_in port=5001
caps = "application/x-rtcp" ! rtpvp8.recv_rtcp_sink_0 udpsrc name=vp8recv
port=5000 caps="application/x-rtp, media=(string)video, clock-rate=(int)90000,
encoding-name=(string)VP8-DRAFT-IETF-01, payload=(int)96" !
rtpvp8.recv_rtp_sink_0 rtpvp8. ! rtpvp8depay ! vp8dec ! videoconvert !
osxvideosink

The pipeline you run first will get a single static image of the ball.  Running
this pipeline with export
GST_DEBUG=*:2,vp8dec:2,libav:4,avdec_h264:4,rtpvp8depay:6,rtpbasedepayload:6,GST_EVENT:4
shows relevant information.  Excerpt from the output:

...
0:00:00.505060000 98869 0x7f9afa037190 DEBUG       rtpbasedepayload
gstrtpbasedepayload.c:191:gst_rtp_base_depayload_setcaps:<rtpvp8depay0> Set
caps
0:00:00.505071000 98869 0x7f9afa037190 DEBUG       rtpbasedepayload
gstrtpbasedepayload.c:201:gst_rtp_base_depayload_setcaps:<rtpvp8depay0> NPT
start 0
0:00:00.505080000 98869 0x7f9afa037190 DEBUG       rtpbasedepayload
gstrtpbasedepayload.c:209:gst_rtp_base_depayload_setcaps:<rtpvp8depay0> NPT
stop 18446744073709551615
0:00:00.505097000 98869 0x7f9afa037190 INFO               GST_EVENT
gstevent.c:628:gst_event_new_caps: creating caps event 0x7f9af9911990
/GstPipeline:pipeline0/GstRtpVP8Depay:rtpvp8depay0.GstPad:src: caps =
video/x-vp8, framerate=(fraction)0/1
/GstPipeline:pipeline0/GstVP8Dec:vp8dec0.GstPad:sink: caps = video/x-vp8,
framerate=(fraction)0/1
/GstPipeline:pipeline0/GstRtpVP8Depay:rtpvp8depay0.GstPad:sink: caps =
application/x-rtp, clock-rate=(int)90000,
encoding-name=(string)VP8-DRAFT-IETF-01, payload=(int)96, media=(string)video,
ssrc=(uint)1283409451
/GstPipeline:pipeline0/GstRtpBin:rtpvp8.GstGhostPad:recv_rtp_src_0_1283409451_96.GstProxyPad:proxypad5:
caps = application/x-rtp, clock-rate=(int)90000,
encoding-name=(string)VP8-DRAFT-IETF-01, payload=(int)96, media=(string)video,
ssrc=(uint)1283409451
0:00:00.505290000 98869 0x7f9afa037190 LOG         rtpbasedepayload
gstrtpbasedepayload.c:284:gst_rtp_base_depayload_chain:<rtpvp8depay0> discont
1, seqnum 1322, rtptime 2231324518, pts 0:00:00.050053000, dts
0:00:00.050053000
0:00:00.505304000 98869 0x7f9afa037190 WARN             rtpvp8depay
gstrtpvp8depay.c:118:gst_rtp_vp8_depay_process:<rtpvp8depay0> Discontinuity,
flushing adapter
0:00:00.505337000 98869 0x7f9afa037190 LOG              rtpvp8depay
gstrtpvp8depay.c:176:gst_rtp_vp8_depay_process:<rtpvp8depay0> Pushing buffer
end of frame - seq 1322
0:00:00.505349000 98869 0x7f9afa037190 LOG         rtpbasedepayload
gstrtpbasedepayload.c:520:set_headers:<rtpvp8depay0> Marking DISCONT on output
buffer
0:00:00.505357000 98869 0x7f9afa037190 INFO               GST_EVENT
gstevent.c:709:gst_event_new_segment: creating segment event 0x110fd6ee8
0:00:00.505374000 98869 0x7f9afa037190 DEBUG       rtpbasedepayload
gstrtpbasedepayload.c:559:gst_rtp_base_depayload_prepare_push:<rtpvp8depay0>
Pushed newsegment event on this first buffer
0:00:00.505400000 98869 0x7f9afa037190 WARN                  vp8dec
gstvp8dec.c:418:open_codec:<vp8dec0> VPX preprocessing error: unsupported
bitstream
0:00:00.505433000 98869 0x7f9afa037190 ERROR           videodecoder
gstvideodecoder.c:2257:gst_video_decoder_prepare_finish_frame:<vp8dec0> No
buffer to output !
0:00:00.505456000 98869 0x7f9afa037190 LOG         rtpbasedepayload
gstrtpbasedepayload.c:284:gst_rtp_base_depayload_chain:<rtpvp8depay0> discont
0, seqnum 1323, rtptime 2231330517, pts 0:00:00.116708511, dts
0:00:00.116708511
0:00:00.505470000 98869 0x7f9afa037190 LOG              rtpvp8depay
gstrtpvp8depay.c:176:gst_rtp_vp8_depay_process:<rtpvp8depay0> Pushing buffer
end of frame - seq 1323
0:00:00.505483000 98869 0x7f9afa037190 WARN                  vp8dec
gstvp8dec.c:418:open_codec:<vp8dec0> VPX preprocessing error: unsupported
bitstream
0:00:00.505492000 98869 0x7f9afa037190 ERROR           videodecoder
gstvideodecoder.c:2257:gst_video_decoder_prepare_finish_frame:<vp8dec0> No
buffer to output !
 ...

The errors repeat until a keyframe is received.

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