[gstreamer-bugs] [Bug 559567] New: `gst_base_audio_sink_sync_latency' should call `gst_base_sink_commit_state'

GStreamer (bugzilla.gnome.org) bugzilla-daemon at bugzilla.gnome.org
Thu Nov 6 01:10:10 PST 2008


If you have any questions why you received this email, please see the text at
the end of this email. Replies to this email are NOT read, please see the text
at the end of this email. You can add comments to this bug at:
  http://bugzilla.gnome.org/show_bug.cgi?id=559567

  GStreamer | gst-plugins-base | Ver: 0.10.20
           Summary: `gst_base_audio_sink_sync_latency' should call
                    `gst_base_sink_commit_state'
           Product: GStreamer
           Version: 0.10.20
          Platform: Other
        OS/Version: All
            Status: UNCONFIRMED
          Severity: normal
          Priority: Normal
         Component: gst-plugins-base
        AssignedTo: gstreamer-bugs at lists.sourceforge.net
        ReportedBy: chao.zhang at access-company.com
         QAContact: gstreamer-bugs at lists.sourceforge.net
     GNOME version: 2.19/2.20
   GNOME milestone: Unspecified


Please describe the problem:
I am writing a RTSP player now. The basesink or baseaudiosink will wait
`latency' time before the actual rending work begins. I found that if I pause
the pipeline when basesink or baseaudiosink is in the middle of `latency' time
waiting, then set the pipeline to PLAYING, the alsasink(inherited from
gstbaseaudiosink) will go into wrong state.
I traced the code of gstbasesink.c, gstbaseaudiosink.c and gstbin.c and found
the reason: When I set the pipeline to PLAYING, gst_bin_element_set_state will
be called and this function will not set state to the sink elements which has
posted ASYNC_START message while not post ASYNC_DONE message because gstbin
thinks these sink elements are still `busy'. OK, When I paused the pipeline,
sink elements will need re-preroll, the clock_id waiting will be unscheduled
and the ASYNC_START message is posted. In gstbasesink.c,
`gst_base_sink_commit_state' will be called when the clock id waiting is
unscheduled and this function will post ASYNC_DONE message. So the videosink
works well. But the clock id waiting of audiosink is in
gstbaseaudiosink(specifically, in `gst_base_audio_sink_sync_latency' function),
it will not call `gst_base_sink_commit_state' function so the ASYNC_DONE
message will not been posted -- this causes the audiosink will not be set
PLAYING state.

I don't know how to fix this issue. I tried to add `gst_base_sink_commit_state'
in gstbaseaudiosink.c but I got some runtime errors. So I am sorry I cannot
provide a patch for this.

Steps to reproduce:
1. 
2. 
3. 


Actual results:


Expected results:


Does this happen every time?
Yes

Other information:


-- 
See http://bugzilla.gnome.org/page.cgi?id=email.html for more info about why you received
this email, why you can't respond via email, how to stop receiving
emails (or reduce the number you receive), and how to contact someone
if you are having problems with the system.

You can add comments to this bug at http://bugzilla.gnome.org/show_bug.cgi?id=559567.




More information about the Gstreamer-bugs mailing list