Hello,
I am using following pipeline for testing DVB subtitle muxing.
gst-launch-1.0 filesrc location=/root/ScreenHD60sec_ENG.ts ! decodebin name=dec dec. ! video/x-raw ! x264enc ! h264parse ! mux. dec. ! audio/x-raw ! avenc_aac ! mux. dec. ! subpicture/x-dvb ! mux. mpegtsmux name=mux ! filesink location=/root/dvb.ts
The mpegtsmux is not even receiving one buffer of dvb subtitle. collectpads is hoding the dvb subtitle buffer and not releasing to muxer. Thus it halts the entire pipeline.
Since dvb subtitle stream is a sparse stream, the collectpad of dvb subtitle is set to non-waiting mode in mpegtsmux, in function mpegtsmux_sink_event() of mpegtsmux.c.
if ((flags & GST_STREAM_FLAG_SPARSE)) {
GST_COLLECT_PADS_STATE_UNSET (data, GST_COLLECT_PADS_STATE_LOCKED);
gst_collect_pads_set_waiting (pads, data, FALSE); GST_COLLECT_PADS_STATE_SET (data, GST_COLLECT_PADS_STATE_LOCKED);
}
But again it is set to waiting mode in collectpads, in function gst_collect_pads_recalculate_waiting() of gstcollectpads.c
if (cmp_res > 0)
/* stop waiting */
gst_collect_pads_set_waiting (pads, data, FALSE);
else {
if (!GST_COLLECT_PADS_STATE_IS_SET (data, GST_COLLECT_PADS_STATE_WAITING)) {
/* start waiting */
gst_collect_pads_set_waiting (pads, data, TRUE);
result = TRUE; }
Setting sparse stream's collectpad to waiting mode might have caused this issue.
If I comment out these two lines in gst_collect_pads_recalculate_waiting(), pipeline started working.
gst_collect_pads_set_waiting (pads, data, TRUE);
result = TRUE;It would be very helpful, if somebody suggest me to fix it in a proper manner.
Input file can be downloaded from :
http://subtitling.com/downloads/mediamate-sample-english-hd-dvb/?wpdmdl=7298Regards,
Parithi