]> git.sesse.net Git - vlc/commitdiff
bluray: always handle all libbluray events
authorPetri Hintukainen <phintuka@users.sourceforge.net>
Mon, 10 Feb 2014 11:27:00 +0000 (13:27 +0200)
committerJean-Baptiste Kempf <jb@videolan.org>
Mon, 10 Feb 2014 14:48:14 +0000 (15:48 +0100)
Events can be returned even if read returns <= 0.
Single bd_read_ext() call can trigger multiple events.
All events should be handled before next bd_read_ext() call,
events are tied to current read position.

Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
modules/access/bluray.c

index 9edf4d169cb7268e2dc26120c10ea20e896f06c0..652ba6f22c4424521c49c204f7534fb8f69571b5 100644 (file)
@@ -1540,6 +1540,10 @@ static int blurayDemux(demux_t *p_demux)
     } else {
         nread = bd_read_ext(p_sys->bluray, p_block->p_buffer,
                             NB_TS_PACKETS * BD_TS_PACKET_SIZE, &e);
+        while (e.event != BD_EVENT_NONE) {
+            blurayHandleEvent(p_demux, &e);
+            bd_get_event(p_sys->bluray, &e);
+        }
         if (nread < 0) {
             block_Release(p_block);
             return -1;
@@ -1547,8 +1551,6 @@ static int blurayDemux(demux_t *p_demux)
         if (nread == 0) {
             if (e.event == BD_EVENT_NONE)
                 msg_Info(p_demux, "We reached the end of a title");
-            else
-                blurayHandleEvent(p_demux, &e);
             block_Release(p_block);
             return 1;
         }