changeset 57:e1505b603eb8 src

Fix problem with Still menus that have NO BUTTONS. Problem found on DVD: "The Abyss, Special Edition, Disk 2" in the PERSONNEL LOCKERS.
author jcdutton
date Sat, 06 Jul 2002 11:10:11 +0000
parents 507b86c503d1
children 18af52093d13
files highlight.c
diffstat 1 files changed, 20 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/highlight.c	Sat Jul 06 10:14:04 2002 +0000
+++ b/highlight.c	Sat Jul 06 11:10:11 2002 +0000
@@ -212,7 +212,26 @@
     pthread_mutex_unlock(&this->vm_lock); 
     return S_ERR;
   }
+/* FIXME: dvdnav_button_select should really return a
+ * special case for explicit NO-BUTTONS.
+ */
   if(dvdnav_button_select(this, button) != S_OK) {
+    /* Special code to handle still menus with no buttons.
+     * the navigation is expected to report to the appicatino that a STILL is
+     * underway. In turn, the application is supposed to report to the user
+     * that the playback is pause. The user is then expected to undo the pause.
+     * ie: hit play. At that point, the navigation should release the still and
+     * go to the next Cell.
+     * Explanation by Mathieu Lavage <mathieu_lacage@realmagic.fr>
+     * Code added by jcdutton.
+     */
+    if (this->position_current.still != 0) {
+      /* In still, but no buttons. */
+      vm_get_next_cell(this->vm);
+      this->position_current.still = 0;
+      pthread_mutex_unlock(&this->vm_lock);
+      return S_OK;
+    }
     pthread_mutex_unlock(&this->vm_lock); 
     return S_ERR;
   }
@@ -245,6 +264,7 @@
 #endif
   
   /* Set the highlight SPRM if the passed button was valid*/
+  /* FIXME: this->pci should be provided by the application. */
   if((button <= 0) || (button > this->pci.hli.hl_gi.btn_ns)) {
     printerrf("Unable to select button number %i as it doesn't exist",
 	      button);