[gst-devel] Seeking failed with decoder plugin
Wei-Di Hung
wdhung at vaplab.ee.ncu.edu.tw
Fri Nov 28 03:52:47 CET 2008
Thank you, Wim!
After removing the unref in source event handler,
the test program doen't crash while seeking.
It seems the decoder just keep decoding the frames
between the current frame and seeking target frame,
they just don't show up. Is that correct?
On Thu, 27 Nov 2008 10:41:11 +0100, Wim Taymans wrote
> On Thu, 2008-11-27 at 17:31 +0800, Wei-Di Hung wrote:
> > Hi,
> > I'm writing a plugin for HW video decoder,
> > functions of playing, pause and stop have been verified.
> >
> > While seeking, the pipeline ran until the frame of seeking time
> > was decoded, i.e, it did jump to the target frame, but the test
> > program crashed then.
> >
> > Here are messages shown after the sink pad received GST_EVENT_NEW_SEGMENT:
> > (player:886): GStreamer-CRITICAL **:
> > Trying to dispose element decoder, but it is not in the NULL state.
> > You need to explicitly set elements to the NULL state before
> > dropping the final reference, to allow them to clean up.
> >
> > (player:886): GLib-GObject-CRITICAL **: g_object_ref: assertion
`G_IS_OBJECT
> > (object)' failed
> >
> > After these message, it seemed the HW keep decoding from the paused frame
to
> > the target frame. but the intermediate frames were not displayed.
> >
> > Before decoding of each frame, came up the folloing message:
> > (player:886): GLib-GObject-WARNING **: invalid unclassed pointer in cast
to
> > `Gstvideodec'
> >
> > These are part of codes in sink event handler,
> > the format is GST_FORMAT_TIME in this case,
> >
> > case GST_EVENT_NEWSEGMENT:
> > {
> > GstFormat format;
> > gint64 start, stop, position;
> > gdouble rate;
> >
> > gst_event_parse_new_segment(event, NULL, &rate, &format,
> > &start, &stop, &position);
> >
> > if (GST_FORMAT_TIME == format) {
> > result = gst_pad_push_event(filter->srcpad, event);
> > } else {
> > ... ...
> > }
> > break;
> > }
> >
> > Below are part of codes in source event handler:
> >
> > switch (GST_EVENT_TYPE(event)) {
> > case GST_EVENT_SEEK:
> > res = gst_pad_push_event(filter->sinkpad, event);
> > break;
> > case GST_EVENT_NAVIGATION:
> > default:
> > res = gst_pad_push_event(filter->sinkpad, event);
> > break;
> > }
> >
> > gst_object_unref(filter);
> > return res;
> >
> > Could someone help me finding possible root cause?
>
> You unref the decoder object too much, check the refcounting especially
> in the event handler.
>
> Wim
>
> > Thanks in advance.
> >
> > -------------------------------------------------------------------------
> > This SF.Net email is sponsored by the Moblin Your Move Developer's
challenge
> > Build the coolest Linux based applications with Moblin SDK & win great
prizes
> > Grand prize is a trip for two to an Open Source event anywhere in the
world
> > http://moblin-contest.org/redirect.php?banner_id=100&url=/
> > _______________________________________________
> > gstreamer-devel mailing list
> > gstreamer-devel at lists.sourceforge.net
> > https://lists.sourceforge.net/lists/listinfo/gstreamer-devel
>
> -------------------------------------------------------------------------
> This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
> Build the coolest Linux based applications with Moblin SDK & win
> great prizes Grand prize is a trip for two to an Open Source event
> anywhere in the world http://moblin-contest.org/redirect.php?
banner_id=100&url=/
> _______________________________________________
> gstreamer-devel mailing list
> gstreamer-devel at lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/gstreamer-devel
More information about the gstreamer-devel
mailing list