[Bug 724716] New: tsparse: setting pipeline to PLAYING -> READY -> PLAYING is broken
GStreamer (bugzilla.gnome.org)
bugzilla at gnome.org
Wed Feb 19 05:54:53 PST 2014
https://bugzilla.gnome.org/show_bug.cgi?id=724716
GStreamer | gst-plugins-bad | git
Summary: tsparse: setting pipeline to PLAYING -> READY ->
PLAYING is broken
Classification: Platform
Product: GStreamer
Version: git
OS/Version: Linux
Status: UNCONFIRMED
Severity: normal
Priority: Normal
Component: gst-plugins-bad
AssignedTo: gstreamer-bugs at lists.freedesktop.org
ReportedBy: francois.seingier at gmail.com
QAContact: gstreamer-bugs at lists.freedesktop.org
GNOME version: ---
Created an attachment (id=269681)
--> (https://bugzilla.gnome.org/attachment.cgi?id=269681)
test program
Hello,
I am building a simple pipeline with the following elements:
dvbbasebin +-- queue -- fakesink
|
+-- appsink
The first time I set the pipeline to PLAYING, data reaches the appsink.
But if I set the pipeline to READY (or NULL) and back to PLAYING again, no data
reaches the appsink anymore.
I tracked down the issue to mpegtsbase.c which dvbbasebin uses internally
(through tsparse).
As stated by the comment in mpegts_base_apply_pat():
/* Applying a new PAT does two things:
* * It adds the new programs to the list of programs this element handles
* and increments at the same time the number of times a program is
referenced.
*
* * If there was a previously active PAT, It decrements the reference count
* of all program it used. If a program is no longer needed, it is removed.
*/
The thing is, setting the pipeline to READY does not destroy the previous PAT.
So setting the pipeline back to PLAYING will a) add the programs again and b)
remove all the programs it had just added.
Attached is a sample program I used to reproduce the issue and the logs from
GST_DEBUG=mpegtsbase:5.
The interesting part of the logs are:
0:00:15.616250290 25030 0xa6f630 INFO mpegtsbase
mpegtsbase.c:727:mpegts_base_apply_pat:<mpegtsparse2-0> PAT
0:00:15.616261291 25030 0xa6f630 DEBUG mpegtsbase
mpegtsbase.c:370:mpegts_base_add_program:<mpegtsparse2-0> program_number : 0,
pmt_pid : 16
0:00:15.616275819 25030 0xa6f630 DEBUG mpegtsbase
mpegtsbase.c:351:mpegts_base_new_program:<mpegtsparse2-0> program_number : 0,
pmt_pid : 16
0:00:15.616336896 25030 0xa6f630 FIXME mpegtsbase
mpegtsbase.c:377:mpegts_base_add_program: Refcounting. Setting twice a PID
(0x0010) as known PSI
0:00:15.616354217 25030 0xa6f630 DEBUG mpegtsbase
mpegtsbase.c:370:mpegts_base_add_program:<mpegtsparse2-0> program_number : 257,
pmt_pid : 110
0:00:15.616363647 25030 0xa6f630 DEBUG mpegtsbase
mpegtsbase.c:351:mpegts_base_new_program:<mpegtsparse2-0> program_number : 257,
pmt_pid : 110
0:00:15.616408998 25030 0xa6f630 DEBUG mpegtsbase
mpegtsbase.c:370:mpegts_base_add_program:<mpegtsparse2-0> program_number : 260,
pmt_pid : 310
0:00:15.616420434 25030 0xa6f630 DEBUG mpegtsbase
mpegtsbase.c:351:mpegts_base_new_program:<mpegtsparse2-0> program_number : 260,
pmt_pid : 310
0:00:15.616486702 25030 0xa6f630 DEBUG mpegtsbase
mpegtsbase.c:370:mpegts_base_add_program:<mpegtsparse2-0> program_number : 261,
pmt_pid : 510
0:00:15.616499692 25030 0xa6f630 DEBUG mpegtsbase
mpegtsbase.c:351:mpegts_base_new_program:<mpegtsparse2-0> program_number : 261,
pmt_pid : 510
0:00:15.616544534 25030 0xa6f630 DEBUG mpegtsbase
mpegtsbase.c:370:mpegts_base_add_program:<mpegtsparse2-0> program_number : 262,
pmt_pid : 610
0:00:15.616554588 25030 0xa6f630 DEBUG mpegtsbase
mpegtsbase.c:351:mpegts_base_new_program:<mpegtsparse2-0> program_number : 262,
pmt_pid : 610
0:00:15.616611727 25030 0xa6f630 DEBUG mpegtsbase
mpegtsbase.c:370:mpegts_base_add_program:<mpegtsparse2-0> program_number : 274,
pmt_pid : 210
0:00:15.616622808 25030 0xa6f630 DEBUG mpegtsbase
mpegtsbase.c:351:mpegts_base_new_program:<mpegtsparse2-0> program_number : 274,
pmt_pid : 210
0:00:15.616669125 25030 0xa6f630 DEBUG mpegtsbase
mpegtsbase.c:370:mpegts_base_add_program:<mpegtsparse2-0> program_number : 373,
pmt_pid : 710
0:00:15.616681246 25030 0xa6f630 DEBUG mpegtsbase
mpegtsbase.c:351:mpegts_base_new_program:<mpegtsparse2-0> program_number : 373,
pmt_pid : 710
0:00:15.616700867 25030 0xa6f630 INFO mpegtsbase
mpegtsbase.c:793:mpegts_base_apply_pat:<mpegtsparse2-0> PAT removing program
0x0000 0x0010
0:00:15.616718277 25030 0xa6f630 DEBUG mpegtsbase
mpegtsbase.c:439:mpegts_base_remove_program:<mpegtsparse2-0> program_number : 0
0:00:15.616731542 25030 0xa6f630 FIXME mpegtsbase
mpegtsbase.c:804:mpegts_base_apply_pat: Program refcounting : Setting twice a
pid (0x0010) as known PSI
0:00:15.616743574 25030 0xa6f630 INFO mpegtsbase
mpegtsbase.c:793:mpegts_base_apply_pat:<mpegtsparse2-0> PAT removing program
0x0101 0x006e
0:00:15.616753661 25030 0xa6f630 DEBUG mpegtsbase
mpegtsbase.c:439:mpegts_base_remove_program:<mpegtsparse2-0> program_number :
257
0:00:15.616762438 25030 0xa6f630 FIXME mpegtsbase
mpegtsbase.c:804:mpegts_base_apply_pat: Program refcounting : Setting twice a
pid (0x006e) as known PSI
0:00:15.616772988 25030 0xa6f630 INFO mpegtsbase
mpegtsbase.c:793:mpegts_base_apply_pat:<mpegtsparse2-0> PAT removing program
0x0104 0x0136
0:00:15.616783026 25030 0xa6f630 DEBUG mpegtsbase
mpegtsbase.c:439:mpegts_base_remove_program:<mpegtsparse2-0> program_number :
260
0:00:15.616794347 25030 0xa6f630 FIXME mpegtsbase
mpegtsbase.c:804:mpegts_base_apply_pat: Program refcounting : Setting twice a
pid (0x0136) as known PSI
0:00:15.616804148 25030 0xa6f630 INFO mpegtsbase
mpegtsbase.c:793:mpegts_base_apply_pat:<mpegtsparse2-0> PAT removing program
0x0105 0x01fe
0:00:15.616813544 25030 0xa6f630 DEBUG mpegtsbase
mpegtsbase.c:439:mpegts_base_remove_program:<mpegtsparse2-0> program_number :
261
0:00:15.616822345 25030 0xa6f630 FIXME mpegtsbase
mpegtsbase.c:804:mpegts_base_apply_pat: Program refcounting : Setting twice a
pid (0x01fe) as known PSI
0:00:15.616831470 25030 0xa6f630 INFO mpegtsbase
mpegtsbase.c:793:mpegts_base_apply_pat:<mpegtsparse2-0> PAT removing program
0x0106 0x0262
0:00:15.616842126 25030 0xa6f630 DEBUG mpegtsbase
mpegtsbase.c:439:mpegts_base_remove_program:<mpegtsparse2-0> program_number :
262
0:00:15.616851467 25030 0xa6f630 FIXME mpegtsbase
mpegtsbase.c:804:mpegts_base_apply_pat: Program refcounting : Setting twice a
pid (0x0262) as known PSI
0:00:15.616872369 25030 0xa6f630 INFO mpegtsbase
mpegtsbase.c:793:mpegts_base_apply_pat:<mpegtsparse2-0> PAT removing program
0x0112 0x00d2
0:00:15.616883384 25030 0xa6f630 DEBUG mpegtsbase
mpegtsbase.c:439:mpegts_base_remove_program:<mpegtsparse2-0> program_number :
274
0:00:15.616893845 25030 0xa6f630 FIXME mpegtsbase
mpegtsbase.c:804:mpegts_base_apply_pat: Program refcounting : Setting twice a
pid (0x00d2) as known PSI
0:00:15.616904088 25030 0xa6f630 INFO mpegtsbase
mpegtsbase.c:793:mpegts_base_apply_pat:<mpegtsparse2-0> PAT removing program
0x0175 0x02c6
0:00:15.616916695 25030 0xa6f630 DEBUG mpegtsbase
mpegtsbase.c:439:mpegts_base_remove_program:<mpegtsparse2-0> program_number :
373
0:00:15.616928470 25030 0xa6f630 FIXME mpegtsbase
mpegtsbase.c:804:mpegts_base_apply_pat: Program refcounting : Setting twice a
pid (0x02c6) as known PSI
0:00:15.617031749 25030 0xa6f630 DEBUG mpegtsbase
mpegtsbase.c:903:mpegts_base_handle_psi: First PAT offset: 63167
0:00:15.663051718 25030 0xa6f630 DEBUG mpegtsbase
mpegtsbase.c:896:mpegts_base_handle_psi: Handling PSI (pid: 0x0011 , table_id:
0x42)
0:00:15.734676190 25030 0xa6f630 DEBUG mpegtsbase
mpegtsbase.c:896:mpegts_base_handle_psi: Handling PSI (pid: 0x0012 , table_id:
0x50)
0:00:15.774083569 25030 0xa6f630 DEBUG mpegtsbase
mpegtsbase.c:896:mpegts_base_handle_psi: Handling PSI (pid: 0x0012 , table_id:
0x50)
0:00:15.781008411 25030 0xa6f630 DEBUG mpegtsbase
mpegtsbase.c:896:mpegts_base_handle_psi: Handling PSI (pid: 0x0001 , table_id:
0x01)
0:00:15.788950526 25030 0xa6f630 DEBUG mpegtsbase
mpegtsbase.c:896:mpegts_base_handle_psi: Handling PSI (pid: 0x0012 , table_id:
0x4f)
0:00:15.789025174 25030 0xa6f630 DEBUG mpegtsbase
mpegtsbase.c:896:mpegts_base_handle_psi: Handling PSI (pid: 0x006e , table_id:
0x02)
0:00:15.789055142 25030 0xa6f630 DEBUG mpegtsbase
mpegtsbase.c:841:mpegts_base_apply_pmt: Applying PMT (program_number:257,
pid:0x006e)
0:00:15.789068376 25030 0xa6f630 ERROR mpegtsbase
mpegtsbase.c:879:mpegts_base_apply_pmt: Attempted to apply a PMT on a program
that wasn't created
As one can notice all the programs are added and immediately removed right
afterwards.
mpegts_base_reset() which is called on the PAUSED --> READY transition no
longer cleans up the PAT and the following comment explains why:
/* FIXME : Commenting the Following lines is to be in sync with the following
* commit
*
* 61a885613316ce7657c36a6cd215b43f9dc67b79
* mpegtsparse: don't free PAT structure which may still be needed later
*/
/* if (base->pat != NULL) */
/* gst_structure_free (base->pat); */
/* base->pat = NULL; */
I uncommented the code as follows:
if (base->pat != NULL)
g_ptr_array_unref (base->pat);
base->pat = NULL;
It solved the PLAYING -- READY -- PLAYING issue. However I didn't look further
into the bug described in the comment and rather leave that to experts :)
--
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