good catch, ended without started, in dvdplayer, it wil make OpenFile return false, since OpenFile is waiting for m_ready, and it only can be set by OnExit() without started callback, where m_bStop was already be set false, then OpenFile return false.
in paplayer, OpenFile return fast, and yes, it has race condition can callback stopped/ended without callback started, I missed this part of check, then I need to figure out a way to handle this, thanks.