[Bug 733490] New: tsdemux: H264 seeking broken in push mode

GStreamer (bugzilla.gnome.org) bugzilla at gnome.org
Mon Jul 21 04:03:01 PDT 2014


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

           Summary: tsdemux: H264 seeking broken in push mode
    Classification: Platform
           Product: GStreamer
           Version: 1.4.0
        OS/Version: Linux
            Status: UNCONFIRMED
          Severity: normal
          Priority: Normal
         Component: gst-plugins-bad
        AssignedTo: gstreamer-bugs at lists.freedesktop.org
        ReportedBy: rawoul at gmail.com
         QAContact: gstreamer-bugs at lists.freedesktop.org
     GNOME version: ---


The patch in Bug #675132 breaks seeking in push mode in files with H264 video.
Here is a log of what happens:

stm0: seek to 959864ms from start
tsdemux: <tsdemux0> stream PTS 0:18:02.349048482 DTS 0:18:02.229048482
tsdemux: Moving data forward by 19 bytes (packet_size:37899, have:184)
tsdemux: query seeking
basesrc: <source> query seeking returns 0
tsdemux: <tsdemux0:audio_0045> stream:0x74f25cd8, pid:0x0045 stream_type:15
state:2
tsdemux: <tsdemux0:audio_0045> stream->pts 0:18:01.469048482
tsdemux: <tsdemux0:audio_0045> Pushing buffer with PTS: 0:18:01.469048482 ,
DTS: 99:99:99.999999999
tsdemux: <tsdemux0:audio_0045> Returned ok
tsdemux: <tsdemux0:video_0044> Got event seek
mpegtsbase: seek event, rate: 1.000000 start: 0:15:59.864000000 stop:
99:99:99.999999999
mpegtsbase: <tsdemux0> sending flush start
basesrc: <source> handle event flush-start event: 0x80932d0, time
99:99:99.999999999, seq-num 881, (NULL)
basesrc: <source> flushing 1, live_play 0
tsdemux: <tsdemux0:video_0044> Got event qos
souphttpsrc: <source> unlock()
tsdemux: <tsdemux0:audio_0045> combined ok
basesrc: <source> no sync needed
basesrc: <source> buffer ok
souphttpsrc: <source> unlock_stop()
basesrc: <source> pausing after gst_pad_push() = flushing
basesrc: <source> pausing task, reason flushing
mpegtsbase: <tsdemux0> sending flush stop
basesrc: <source> handle event flush-stop event: 0x80932d0, time
99:99:99.999999999, seq-num 881, GstEventFlushStop, reset-time=(boolean)true;
basesrc: <source> flushing 0, live_play 1
tsdemux: flushing stream 0x74f2a570
tsdemux: flushing stream 0x74f25cd8
tsdemux: seek event, rate: 1.000000 start: 0:15:59.864000000 stop:
99:99:99.999999999
tsdemux: <tsdemux0> configuring seek
mpegtsbase: <tsdemux0> sending flush stop
[New Thread 0x6f8ffb40 (LWP 2998)]
mpegtsbase: Pulling data from 592253403

(fbxmms:2973): GStreamer-CRITICAL **: pullrange on pad tsdemux0:sink but it was
not activated in pull mode



I think this happens because the h264 keyframe scanning function sets the
base->mode value to SEEKING instead of PUSHING. The
mpegts_base_handle_seek_event() function is then called in the wrong mode and
the push mode seek specific handling is not used.

IMHO the simplest solution is to disable keyframe scanning in push-mode. This
is counter productive anyway since the scan triggers backwards seeking, which
shouldn't be done in push mode.

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