[vlc-devel] Getting stuck in stream_Read()

Rémi Denis-Courmont remi at remlab.net
Wed Apr 4 18:01:40 CEST 2012


Le mercredi 4 avril 2012 18:39:15 Frederic YHUEL, vous avez écrit :
> Pressing stop has no effect in that case. You told about a
> interruption/exception mechanism, could you be a little more verbose
> about how I should implement that?

There are no general rules how to do it. It is the plugin's responsibility 
neither to get stuck nor to poll.

This is a non-issue for regular files as read() is non-blocking/non-
interruptible. Most demuxers rely on the fact that stream_Read() will return 
quickly, and then pf_demux will return. At that point, the main loop of the 
input thread will stop.

For access_demux plugins, the easiest and cleanest solution (IMHO) consists of 
setting pf_demux to NULL. Then a custom thread is used to feed the ES output, 
the input thread does not get blocked, and pf_deactivate will be called as 
soon as the user presses stops. RTP and XCB screen do that, and soon V4L2.

For network access plugins, the waitpipe hack is used to wake up poll() inside 
the input thread. Most network access plugins use that, including HTTP and 
FTP.

Then there are bugged plugins that must not be used as examples. Some just get 
stuck like live555. Others keep polling like DTV or avio.

-- 
Rémi Denis-Courmont
http://www.remlab.net/
http://fi.linkedin.com/in/remidenis



More information about the vlc-devel mailing list