<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <p>Hi,</p>
    <div class="moz-cite-prefix">On 02/12/2019 09:20, Alexandre Janniaux
      wrote:<br>
    </div>
    <blockquote type="cite"
      cite="mid:20191202082015.kjbuawwnsih7njfe@harmakhis.dedibox.fr">
      <pre class="moz-quote-pre" wrap="">Hi,

Actually stopping the playlist wont kill the video output
module, only killing the input resource, meaning releasing
the vlc_player will do.

However, player and playlist might be used by multiple
control interface and this problem is only a concern for
the one providing the vout_window. Hence I believe it must
be solved by the mechanism providing the window instead of
relying on a much wider API like playlist and player.</pre>
    </blockquote>
    <p>I fully agree with that. And actually, the work is already
      partially done. A 'vout_window_ReportClose' is available to let
      the vout know that the windows ids won't be available any more.
      For now the function is not implemented</p>
    <div class="pre" style="font-family: monospace; font-size: small; white-space: pre; color: rgb(0, 0, 0); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-style: initial; text-decoration-color: initial;">static void vout_display_window_CloseNotify(vout_window_t *window)</div>
    <div class="pre" style="font-family: monospace; font-size: small; white-space: pre; color: rgb(0, 0, 0); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-style: initial; text-decoration-color: initial;"><a id="l229" href="http://git.videolan.org/?p=vlc.git;a=blob;f=src/video_output/window.c;h=16ebf9ef5a2252b896dd5edddd66fc2bc3465f56;hb=HEAD#l229" class="linenr" style="color: rgb(153, 153, 153); text-decoration: none;"> 229</a> {</div>
    <div class="pre" style="font-family: monospace; font-size: small; white-space: pre; color: rgb(0, 0, 0); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-style: initial; text-decoration-color: initial;"><a id="l230" href="http://git.videolan.org/?p=vlc.git;a=blob;f=src/video_output/window.c;h=16ebf9ef5a2252b896dd5edddd66fc2bc3465f56;hb=HEAD#l230" class="linenr" style="color: rgb(153, 153, 153); text-decoration: none;"> 230</a>     /* TODO: Nowhere to dispatch to currently.</div>
    <div class="pre" style="font-family: monospace; font-size: small; white-space: pre; color: rgb(0, 0, 0); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-style: initial; text-decoration-color: initial;"><a id="l231" href="http://git.videolan.org/?p=vlc.git;a=blob;f=src/video_output/window.c;h=16ebf9ef5a2252b896dd5edddd66fc2bc3465f56;hb=HEAD#l231" class="linenr" style="color: rgb(153, 153, 153); text-decoration: none;"> 231</a>      * Needs callback to ES output to deselect ES? */</div>
    <div class="pre" style="font-family: monospace; font-size: small; white-space: pre; color: rgb(0, 0, 0); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-style: initial; text-decoration-color: initial;"><a id="l232" href="http://git.videolan.org/?p=vlc.git;a=blob;f=src/video_output/window.c;h=16ebf9ef5a2252b896dd5edddd66fc2bc3465f56;hb=HEAD#l232" class="linenr" style="color: rgb(153, 153, 153); text-decoration: none;"> 232</a>     msg_Err(window, "window closed");</div>
    <div class="pre" style="font-family: monospace; font-size: small; white-space: pre; color: rgb(0, 0, 0); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-style: initial; text-decoration-color: initial;"><a id="l233" href="http://git.videolan.org/?p=vlc.git;a=blob;f=src/video_output/window.c;h=16ebf9ef5a2252b896dd5edddd66fc2bc3465f56;hb=HEAD#l233" class="linenr" style="color: rgb(153, 153, 153); text-decoration: none;"> 233</a> }</div>
    <p></p>
    <p>Implementing this function would kill two birds with one stone. 
      When terminating vlc, GUI modules with embedded videos can use it
      to properly terminate vout. But, more generally, this closing of
      windows can occur at any time, and it is wise to also properly
      terminate vout if this occurs. <br>
    </p>
    <p>When saying 'terminate vout', it means terminate and desallocate
      the resource. This is a case where the window id must not be
      retained for a possible future use. In other words, as the result
      of issueing  vout_window_ReportClose(), the response must be
      vout_window_Close().<br>
      Also, this is not only related to the player. It must be a more
      generic thing because vout can also be an audio visualization or
      anything else. Maybe the caller of vout_Create() has to provide a
      callback to deal with this event.<br>
    </p>
    <blockquote type="cite"
      cite="mid:20191202082015.kjbuawwnsih7njfe@harmakhis.dedibox.fr">
      <pre class="moz-quote-pre" wrap="">

I wrote part of it that I shared as a github branch some
weeks ago, but it is not complete yet. I had also explored
alternative solution like a vlc_player_disable-like
mechanism (that I called vlc_player_ResetResource iirc) but
I find it not very elegant.</pre>
    </blockquote>
    <p>Yet, as of today, when terminating vlc, it is not clear who is
      responsible for just properly stopping the playlist. I realized
      that deleting the playlist doesn't stop the decoders for instance.
      The Qt interface stops the playlist in MainInterface::closeEvent()
      (modules/gui/qt/main_interface.cpp) which is a weird place. For
      lack of a better place, the patch I wrote was just mimicking Qt
      because stopping the playlist has to be done somewhere.</p>
    <p>I actually think it is the libvlc overall responsability to stop
      the playlist since starting the playlist can be done very early in
      the process without any GUI already set up. <br>
    </p>
    <p>this vlc_playlist_disable would be very simple, lock the
      playlist, stop it, unlock it + an enabled flag to prevent any new
      starting. And this is just triggering a stop. The actual stop will
      happen much later when the vout are indeed released by a proper
      desallocation mechanism between the GUI and the vout core and all
      the listeners on the player/vout are released by the GUI. <br>
    </p>
    <p><br>
    </p>
    <blockquote type="cite"
      cite="mid:20191202082015.kjbuawwnsih7njfe@harmakhis.dedibox.fr">
      <pre class="moz-quote-pre" wrap="">
Is skins2 interface embedded work using interface_widget
from the Qt interface?</pre>
    </blockquote>
    <p>No, skins2 doesn't rely on Qt for vout windows. The Qt thing is
      only dialog boxes, menus and hotkeys management (including key
      accelerators from Qt). Yet, the full Qt Playlist and Player
      controllers are set up which means that skins2 is highly dependent
      on Qt indirectly.</p>
    <p>Rgds<br>
      Erwan<br>
    </p>
    <blockquote type="cite"
      cite="mid:20191202082015.kjbuawwnsih7njfe@harmakhis.dedibox.fr">
      <pre class="moz-quote-pre" wrap="">
 
Regards,
--
Alexandre Janniaux
Videolabs

On Fri, Nov 29, 2019 at 11:13:21PM +0100, <a class="moz-txt-link-abbreviated" href="mailto:erwan.tulou@gmail.com">erwan.tulou@gmail.com</a> wrote:
</pre>
      <blockquote type="cite">
        <pre class="moz-quote-pre" wrap="">
On 29/11/2019 20:09, Rémi Denis-Courmont wrote:
</pre>
        <blockquote type="cite">
          <pre class="moz-quote-pre" wrap="">Le perjantaina 29. marraskuuta 2019, 20.43.29 EET Erwan Tulou a écrit :
</pre>
          <blockquote type="cite">
            <pre class="moz-quote-pre" wrap="">vlc | branch: master | Erwan Tulou <a class="moz-txt-link-rfc2396E" href="mailto:erwan10@videolan.org"><erwan10@videolan.org></a> | Fri Nov 29
19:32:25 2019 +0100| [0594abc06cb1a57548a7c3bf977e3071e64ef022] |
committer: Erwan Tulou

skins2: ensure playlist gets stopped before terminating vlc.

</pre>
            <blockquote type="cite">
              <pre class="moz-quote-pre" wrap=""><a class="moz-txt-link-freetext" href="http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=0594abc06cb1a57548a">http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=0594abc06cb1a57548a</a>
7c3bf977e3071e64ef022
</pre>
            </blockquote>
            <pre class="moz-quote-pre" wrap="">---

  modules/gui/skins2/src/skin_main.cpp | 6 ++++++
  1 file changed, 6 insertions(+)

diff --git a/modules/gui/skins2/src/skin_main.cpp
b/modules/gui/skins2/src/skin_main.cpp index 087dd82cc0..d52e904d8d 100644
--- a/modules/gui/skins2/src/skin_main.cpp
+++ b/modules/gui/skins2/src/skin_main.cpp
@@ -143,6 +143,12 @@ static void Close( vlc_object_t *p_this )

      msg_Dbg( p_intf, "closing skins2 module" );

+    // ensure the playlist is stopped
+    vlc_playlist_t *playlist = vlc_intf_GetMainPlaylist( p_intf );
+    vlc_playlist_Lock( playlist );
+    vlc_playlist_Stop ( playlist );
+    vlc_playlist_Unlock( playlist );
</pre>
          </blockquote>
          <pre class="moz-quote-pre" wrap="">This does not guarantee that the playlist is stopped, only that it was stopped
until the Unlock. This whole patch does not make sense to me.
</pre>
        </blockquote>
        <pre class="moz-quote-pre" wrap="">
Yes, this is a lame way to work out a problem and it actually only solve one
part of the problem. (so far, the Qt interface does not offer a better
solution in that matter).

Ideally, once libvlc_Quit() is issued, the right order of disabling/removing
thing seems the following :

- disable the playlist (which means : stop all inputs, free all resources
such as vout and make sure it cannot start again)
- stop and desallocate the interfaces
- desallocate the playlist

In particular, it is important that all vouts be freed __before__ the
interfaces are gone, because the window ids have to remain valid (embedded
video) as long as the vout are alive.

maybe coding a vlc_playlist_disable() to be called first thing is the
solution ... any suggestions ?

Rgds
Erwan





</pre>
        <blockquote type="cite">
          <pre class="moz-quote-pre" wrap="">
</pre>
        </blockquote>
        <pre class="moz-quote-pre" wrap="">
_______________________________________________
vlc-devel mailing list
To unsubscribe or modify your subscription options:
<a class="moz-txt-link-freetext" href="https://mailman.videolan.org/listinfo/vlc-devel">https://mailman.videolan.org/listinfo/vlc-devel</a>
</pre>
      </blockquote>
      <pre class="moz-quote-pre" wrap="">_______________________________________________
vlc-devel mailing list
To unsubscribe or modify your subscription options:
<a class="moz-txt-link-freetext" href="https://mailman.videolan.org/listinfo/vlc-devel">https://mailman.videolan.org/listinfo/vlc-devel</a></pre>
    </blockquote>
  </body>
</html>