[gst-devel] PLAy->PAUSE Issue with alsasink

Suresh Choudary sikkim.suresh at gmail.com
Sat May 30 15:27:44 CEST 2009


Dear All,

I am using the following pipeline with gstreamer version 0.10.22 and latest
plugins.

gst-launch filesrc location=/home/testh263.3gp ! qtdemux name=demux
demux.audio_00 ! queue ! amrdecoder ! navtest ! alsasink demux.video ! queue
! h263decoder ! v4l2sink

where navtest is a simple plugin which allows user to PLAY/PAUSE/SEEK.

Overall the pipeline is as follows from application point of view.

                                 |----------> queue ---> amrdecoder
--->alsasink
filesrc--->qtdemux   ----|

|----------->queue---->h263decoder--->v4l2sink

Where I am using the open source alsasink and custom decoders. When I try to
set the pipeline to PAUSED state, some times (1 out of 10 times) all the
components can transition to PAUSED state, but alsasink sends a ASYNC
notification, but never commits to paused state. (As the part log below
shows the same.I have enabled only basesink logs)


--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

0:02:07.538391114   865    0xcfdd0 DEBUG             basesink
/home/root/x2//middleware/multimedia-framework/media-service/gstreamer/gstreamer-0.10.22/./libs/gst/base/gstbasesink.c:2911:gst_base_sink_chain_unlocked:<avsysvideosink0>
got times start: 0:00:23.648648648, end: 0:00:23.690357023

0:02:07.538726807   865    0xcfdd0 DEBUG             basesink
/home/root/x2//middleware/multimedia-framework/media-service/gstreamer/gstreamer-0.10.22/./libs/gst/base/gstbasesink.c:1534:gst_base_sink_get_sync_times:<avsysvideosink0>
got times start: 0:00:23.648648648, stop: 0:00:23.690357023, do_sync 1

0:02:07.538970948   865    0xcfdd0 DEBUG             basesink
/home/root/x2//middleware/multimedia-framework/media-service/gstreamer/gstreamer-0.10.22/./libs/gst/base/gstbasesink.c:1984:gst_base_sink_do_sync:<avsysvideosink0>
possibly waiting for clock to reach 0:00:23.648648648, adjusted
0:00:23.648648648

0:02:07.590026856   865    0xcfe80 DEBUG             basesink
/home/root/x2//middleware/multimedia-framework/media-service/gstreamer/gstreamer-0.10.22/./libs/gst/base/gstbasesink.c:4099:gst_base_sink_change_state:<avsysvideosink0>
PLAYING to PAUSED

0:02:07.611236573   865    0xcfe80 DEBUG             basesink
/home/root/x2//middleware/multimedia-framework/media-service/gstreamer/gstreamer-0.10.22/./libs/gst/base/gstbasesink.c:2846:gst_base_sink_needs_preroll:<avsysvideosink0>
have_preroll: 0, EOS: 0 => needs preroll: 1

0:02:07.611511231   865    0xcfe80 DEBUG             basesink
/home/root/x2//middleware/multimedia-framework/media-service/gstreamer/gstreamer-0.10.22/./libs/gst/base/gstbasesink.c:4131:gst_base_sink_change_state:<avsysvideosink0>
PLAYING to PAUSED, we are not prerolled

0:02:07.611694336   865    0xcfe80 DEBUG             basesink
/home/root/x2//middleware/multimedia-framework/media-service/gstreamer/gstreamer-0.10.22/./libs/gst/base/gstbasesink.c:4135:gst_base_sink_change_state:<avsysvideosink0>
doing async state change

0:02:07.612030030   865    0xcfe80 DEBUG             basesink
/home/root/x2//middleware/multimedia-framework/media-service/gstreamer/gstreamer-0.10.22/./libs/gst/base/gstbasesink.c:4144:gst_base_sink_change_state:<avsysvideosink0>
rendered: 13, dropped: 53

[gst_avsysvideosink_change_state:835]GST_STATE_CHANGE_PLAYING_TO_PAUSED

0:02:07.612487793   865    0xcfdd0 DEBUG             basesink
/home/root/x2//middleware/multimedia-framework/media-service/gstreamer/gstreamer-0.10.22/./libs/gst/base/gstbasesink.c:1990:gst_base_sink_do_sync:<avsysvideosink0>
clock returned 2

0:02:07.612731934   865    0xcfdd0 DEBUG             basesink
/home/root/x2//middleware/multimedia-framework/media-service/gstreamer/gstreamer-0.10.22/./libs/gst/base/gstbasesink.c:2003:gst_base_sink_do_sync:<avsysvideosink0>
unscheduled, waiting some more

0:02:07.612915039   865    0xcfdd0 DEBUG             basesink
/home/root/x2//middleware/multimedia-framework/media-service/gstreamer/gstreamer-0.10.22/./libs/gst/base/gstbasesink.c:1943:gst_base_sink_do_sync:<avsysvideosink0>
prerolling object 0xe2ad8

0:02:07.613098145   865    0xcfdd0 DEBUG             basesink
/home/root/x2//middleware/multimedia-framework/media-service/gstreamer/gstreamer-0.10.22/./libs/gst/base/gstbasesink.c:1357:gst_base_sink_commit_state:<avsysvideosink0>
commiting state to PAUSED

0:02:07.613281250   865    0xcfdd0 DEBUG             basesink
/home/root/x2//middleware/multimedia-framework/media-service/gstreamer/gstreamer-0.10.22/./libs/gst/base/gstbasesink.c:1382:gst_base_sink_commit_state:<avsysvideosink0>
posting PAUSED state change message

0:02:07.614196778   865    0xcfdd0 DEBUG             basesink
/home/root/x2//middleware/multimedia-framework/media-service/gstreamer/gstreamer-0.10.22/./libs/gst/base/gstbasesink.c:1388:gst_base_sink_commit_state:<avsysvideosink0>
posting async-done message

0:02:07.614532471   865    0xcfdd0 DEBUG             basesink
/home/root/x2//middleware/multimedia-framework/media-service/gstreamer/gstreamer-0.10.22/./libs/gst/base/gstbasesink.c:1732:gst_base_sink_wait_preroll:<avsysvideosink0>
waiting in preroll for flush or PLAYING

*0:02:07.620910645   865    0xcfe80 DEBUG             basesink
/home/root/x2//middleware/multimedia-framework/media-service/gstreamer/gstreamer-0.10.22/./libs/gst/base/gstbasesink.c:4099:gst_base_sink_change_state:<alsasink0>
PLAYING to PAUSED*

*0:02:07.621154785   865    0xcfe80 DEBUG             basesink
/home/root/x2//middleware/multimedia-framework/media-service/gstreamer/gstreamer-0.10.22/./libs/gst/base/gstbasesink.c:2846:gst_base_sink_needs_preroll:<alsasink0>
have_preroll: 0, EOS: 0 => needs preroll: 1*

*0:02:07.653625489   865    0xcfe80 DEBUG             basesink
/home/root/x2//middleware/multimedia-framework/media-service/gstreamer/gstreamer-0.10.22/./libs/gst/base/gstbasesink.c:4131:gst_base_sink_change_state:<alsasink0>
PLAYING to PAUSED, we are not prerolled*

*0:02:07.653900147   865    0xcfe80 DEBUG             basesink
/home/root/x2//middleware/multimedia-framework/media-service/gstreamer/gstreamer-0.10.22/./libs/gst/base/gstbasesink.c:4135:gst_base_sink_change_state:<alsasink0>
doing async state change*

0:02:07.654205323   865    0xcfe80 DEBUG             basesink
/home/root/x2//middleware/multimedia-framework/media-service/gstreamer/gstreamer-0.10.22/./libs/gst/base/gstbasesink.c:4144:gst_base_sink_change_state:<alsasink0>
rendered: 157, dropped: 0

PAUSED





But after this the audio sink (alsasink) can not commit the state to pause.
I understand this happens because no more buffers are pushed by amrdecoder
to alsasink but somehow the qtdemux is also blocked and sends no data to
amrdecoder which may cause the sink to get one buffer and get prerolled and
commit the state.



I want to enquire if anyone of you have faced similar issue, and how to go
about this issue. Please help me resolve this issue.



BR,

Suresh
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/gstreamer-devel/attachments/20090530/2a5f196b/attachment.htm>


More information about the gstreamer-devel mailing list