]> git.sesse.net Git - vlc/commitdiff
modules/gui/beos/* : misc fixes & enhancements
authorEric Petit <titer@videolan.org>
Fri, 30 May 2003 17:30:54 +0000 (17:30 +0000)
committerEric Petit <titer@videolan.org>
Fri, 30 May 2003 17:30:54 +0000 (17:30 +0000)
modules/gui/beos/Interface.cpp
modules/gui/beos/InterfaceWindow.cpp
modules/gui/beos/InterfaceWindow.h
modules/gui/beos/MediaControlView.cpp
modules/gui/beos/MsgVals.h
modules/gui/beos/VlcWrapper.cpp
modules/gui/beos/VlcWrapper.h

index 548ebe1122bc700c151fe88c3e311e80011d6783..b266fd834eddd1281834f189fd2d7ef7246c8a81 100644 (file)
@@ -2,7 +2,7 @@
  * intf_beos.cpp: beos interface
  *****************************************************************************
  * Copyright (C) 1999, 2000, 2001 VideoLAN
- * $Id: Interface.cpp,v 1.12 2003/05/03 13:37:21 titer Exp $
+ * $Id: Interface.cpp,v 1.13 2003/05/30 17:30:54 titer Exp $
  *
  * Authors: Jean-Marc Dressler <polux@via.ecp.fr>
  *          Samuel Hocevar <sam@zoy.org>
@@ -126,11 +126,11 @@ static void Run( intf_thread_t *p_intf )
 {
     while( !p_intf->b_die )
     {
-        if( p_intf->p_sys->p_wrapper->UpdateInput() )
-        {
-            /* Manage the slider */
-            p_intf->p_sys->p_window->UpdateInterface();
-        }
+        /* Update VlcWrapper internals (p_input, etc) */
+        p_intf->p_sys->p_wrapper->UpdateInput();
+        
+        /* Manage the slider */
+        p_intf->p_sys->p_window->UpdateInterface();
 
         /* Wait a bit */
         msleep( INTF_IDLE_SLEEP );
index ba6104b13af6c0a863484c1cbe0c1d6d86508118..b96500da873e9a0eb860d7a41558ac0e777a7665 100644 (file)
@@ -2,7 +2,7 @@
  * InterfaceWindow.cpp: beos interface
  *****************************************************************************
  * Copyright (C) 1999, 2000, 2001 VideoLAN
- * $Id: InterfaceWindow.cpp,v 1.39 2003/05/27 13:22:45 titer Exp $
+ * $Id: InterfaceWindow.cpp,v 1.40 2003/05/30 17:30:54 titer Exp $
  *
  * Authors: Jean-Marc Dressler <polux@via.ecp.fr>
  *          Samuel Hocevar <sam@zoy.org>
@@ -283,12 +283,20 @@ InterfaceWindow::InterfaceWindow( BRect frame, const char* name,
     /* Add the Speed menu */
     fSpeedMenu = new BMenu( _("Speed") );
     fSpeedMenu->SetRadioMode( true );
-    fSpeedMenu->AddItem( fSlowerMI = new BMenuItem( _("Slower"), new BMessage( SLOWER_PLAY ) ) );
-    fNormalMI = new BMenuItem( _("Normal"), new BMessage( NORMAL_PLAY ) );
-    fNormalMI->SetMarked(true); // default to normal speed
-    fSpeedMenu->AddItem( fNormalMI );
-    fSpeedMenu->AddItem( fFasterMI = new BMenuItem( _("Faster"), new BMessage( FASTER_PLAY) ) );
-    fSpeedMenu->SetTargetForItems( this );
+    fSpeedMenu->AddItem(
+        fHeighthMI = new BMenuItem( "1/8x", new BMessage( HEIGHTH_PLAY ) ) );
+    fSpeedMenu->AddItem(
+        fQuarterMI = new BMenuItem( "1/4x", new BMessage( QUARTER_PLAY ) ) );
+    fSpeedMenu->AddItem(
+        fHalfMI = new BMenuItem( "1/2x", new BMessage( HALF_PLAY ) ) );
+    fSpeedMenu->AddItem(
+        fNormalMI = new BMenuItem( "1x", new BMessage( NORMAL_PLAY ) ) );
+    fSpeedMenu->AddItem(
+        fTwiceMI = new BMenuItem( "2x", new BMessage( TWICE_PLAY ) ) );
+    fSpeedMenu->AddItem(
+        fFourMI = new BMenuItem( "4x", new BMessage( FOUR_PLAY ) ) );
+    fSpeedMenu->AddItem(
+        fHeightMI = new BMenuItem( "8x", new BMessage( HEIGHT_PLAY ) ) );
     fMenuBar->AddItem( fSpeedMenu );
 
     /* Add the Show menu */
@@ -436,30 +444,34 @@ void InterfaceWindow::MessageReceived( BMessage * p_message )
             }    
             break;
     
-        case FASTER_PLAY:
-            /* cycle the fast playback modes */
-            if (playback_status > UNDEF_S)
-            {
-                p_wrapper->InputFaster();
-            }
+        case HEIGHTH_PLAY:
+            p_wrapper->InputSetRate( DEFAULT_RATE * 8 );
             break;
-    
-        case SLOWER_PLAY:
-            /*  cycle the slow playback modes */
-            if (playback_status > UNDEF_S)
-            {
-                p_wrapper->InputSlower();
-            }
+
+        case QUARTER_PLAY:
+            p_wrapper->InputSetRate( DEFAULT_RATE * 4 );
             break;
-    
+
+        case HALF_PLAY:
+            p_wrapper->InputSetRate( DEFAULT_RATE * 2 );
+            break;
+
         case NORMAL_PLAY:
-            /*  restore speed to normal if already playing */
-            if (playback_status > UNDEF_S)
-            {
-                p_wrapper->PlaylistPlay();
-            }
+            p_wrapper->InputSetRate( DEFAULT_RATE );
             break;
-    
+
+        case TWICE_PLAY:
+            p_wrapper->InputSetRate( DEFAULT_RATE / 2 );
+            break;
+
+        case FOUR_PLAY:
+            p_wrapper->InputSetRate( DEFAULT_RATE / 4 );
+            break;
+
+        case HEIGHT_PLAY:
+            p_wrapper->InputSetRate( DEFAULT_RATE / 8 );
+            break;
+
         case SEEK_PLAYBACK:
             /* handled by semaphores */
             break;
@@ -860,32 +872,41 @@ InterfaceWindow::_SetMenusEnabled(bool hasFile, bool hasChapters, bool hasTitles
 void
 InterfaceWindow::_UpdateSpeedMenu( int rate )
 {
-    if ( rate == DEFAULT_RATE )
-    {
-        if ( !fNormalMI->IsMarked() )
-            fNormalMI->SetMarked( true );
-    }
-    else if ( rate < DEFAULT_RATE )
-    {
-        if ( !fFasterMI->IsMarked() )
-            fFasterMI->SetMarked( true );
-    }
-    else
+    BMenuItem * toMark = NULL;
+    
+    switch( rate )
     {
-        if ( !fSlowerMI->IsMarked() )
-            fSlowerMI->SetMarked( true );
+        case ( DEFAULT_RATE * 8 ):
+            toMark = fHeighthMI;
+            break;
+            
+        case ( DEFAULT_RATE * 4 ):
+            toMark = fQuarterMI;
+            break;
+            
+        case ( DEFAULT_RATE * 2 ):
+            toMark = fHalfMI;
+            break;
+            
+        case ( DEFAULT_RATE ):
+            toMark = fNormalMI;
+            break;
+            
+        case ( DEFAULT_RATE / 2 ):
+            toMark = fTwiceMI;
+            break;
+            
+        case ( DEFAULT_RATE / 4 ):
+            toMark = fFourMI;
+            break;
+            
+        case ( DEFAULT_RATE / 8 ):
+            toMark = fHeightMI;
+            break;
     }
-}
 
-/*****************************************************************************
- * InterfaceWindow::_InputStreamChanged
- *****************************************************************************/
-void
-InterfaceWindow::_InputStreamChanged()
-{
-    // TODO: move more stuff from updateInterface() here!
-    snooze( 400000 );
-    p_wrapper->SetVolume( p_mediaControl->GetVolume() );
+    if ( !toMark->IsMarked() )
+        toMark->SetMarked( true );
 }
 
 /*****************************************************************************
index 714f4afae489dd820dc50eb7a601ae4cec9eb569..85275e8fe40774ec5a895fc389de99aed0e5efc2 100644 (file)
@@ -2,7 +2,7 @@
  * InterfaceWindow.h: BeOS interface window class prototype
  *****************************************************************************
  * Copyright (C) 1999, 2000, 2001 VideoLAN
- * $Id: InterfaceWindow.h,v 1.13 2003/02/10 15:23:46 titer Exp $
+ * $Id: InterfaceWindow.h,v 1.14 2003/05/30 17:30:54 titer Exp $
  *
  * Authors: Jean-Marc Dressler <polux@via.ecp.fr>
  *          Tony Castley <tcastley@mail.powerup.com.au>
@@ -114,7 +114,6 @@ class InterfaceWindow : public BWindow
                                               bool hasChapters = false,
                                               bool hasTitles = false );
             void            _UpdateSpeedMenu( int rate );
-            void            _InputStreamChanged();
             void                       _ShowFilePanel( uint32 command,
                                                                        const char* windowTitle );
                        void                    _RestoreSettings();
@@ -134,9 +133,13 @@ class InterfaceWindow : public BWindow
     BMenuItem*              fNextChapterMI;
     BMenuItem*              fPrevChapterMI;
     BMenuItem*              fOnTopMI;
-    BMenuItem*              fSlowerMI;
+    BMenuItem*              fHeighthMI;
+    BMenuItem*              fQuarterMI;
+    BMenuItem*              fHalfMI;
     BMenuItem*              fNormalMI;
-    BMenuItem*              fFasterMI;
+    BMenuItem*              fTwiceMI;
+    BMenuItem*              fFourMI;
+    BMenuItem*              fHeightMI;
     BMenu*                  fAudioMenu;
     BMenu*                  fNavigationMenu;
     BMenu*                  fTitleMenu;
index 8de8bc451b9ca06580dfdcad1d4467e58540283f..5a50fefab536b023196e97efba9656102b7851b0 100644 (file)
@@ -2,7 +2,7 @@
  * MediaControlView.cpp: beos interface
  *****************************************************************************
  * Copyright (C) 1999, 2000, 2001 VideoLAN
- * $Id: MediaControlView.cpp,v 1.17 2003/05/25 23:08:44 titer Exp $
+ * $Id: MediaControlView.cpp,v 1.18 2003/05/30 17:30:54 titer Exp $
  *
  * Authors: Tony Castley <tony@castley.net>
  *          Stephan Aßmus <stippi@yellowbites.com>
@@ -86,8 +86,8 @@ MediaControlView::MediaControlView(BRect frame, intf_thread_t *p_interface)
        BRect frame(0.0, 0.0, 10.0, 10.0);
        
     // Seek Slider
-    fSeekSlider = new SeekSlider(frame, "seek slider", this,
-                                 0, SEEKSLIDER_RANGE - 1);
+    fSeekSlider = new SeekSlider( frame, "seek slider", this,
+                                  0, SEEKSLIDER_RANGE );
     fSeekSlider->SetValue(0);
     fSeekSlider->ResizeToPreferred();
     AddChild( fSeekSlider );
index b08b34c3e04cb9ca4ffec139be8249c633df77ee..3ae867f7ecf60d2c2da750eb7b64f635b64bc3ca 100644 (file)
@@ -2,23 +2,23 @@
  * MsgVals.h
  *****************************************************************************
  * Copyright (C) 2001 VideoLAN
- * $Id: MsgVals.h,v 1.8 2003/05/08 10:40:31 titer Exp $
+ * $Id: MsgVals.h,v 1.9 2003/05/30 17:30:54 titer Exp $
  *
  * Authors: Tony Castley <tcastley@mail.powerup.com.au>
  *          Stephan Aßmus <stippi@yellowbites.com>
  *
- * This program is free software; you can redistribute it and/or modify
+ * This program is free software you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
+ * the Free Software Foundation either version 2 of the License, or
  * (at your option) any later version.
  * 
  * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * but WITHOUT ANY WARRANTY without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
+ * along with this program if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
  *****************************************************************************/
 
 #define PLAYING       0
 #define PAUSED        1
 
-const uint32 OPEN_FILE          = 'opfl';
-const uint32 OPEN_DVD           = 'opdv';
-const uint32 LOAD_SUBFILE       = 'losu';
-const uint32 SUBFILE_RECEIVED   = 'sure';
-const uint32 OPEN_PLAYLIST      = 'oppl';
-const uint32 STOP_PLAYBACK      = 'stpl';
-const uint32 START_PLAYBACK     = 'play';
-const uint32 PAUSE_PLAYBACK     = 'papl';
-const uint32 FASTER_PLAY        = 'fapl';
-const uint32 SLOWER_PLAY        = 'slpl';
-const uint32 NORMAL_PLAY        = 'nrpl';
-const uint32 SEEK_PLAYBACK      = 'seek';
-const uint32 VOLUME_CHG         = 'voch';
-const uint32 VOLUME_MUTE        = 'mute';
-const uint32 SELECT_CHANNEL     = 'chan';
-const uint32 SELECT_SUBTITLE    = 'subt';
-const uint32 PREV_TITLE         = 'prti';
-const uint32 NEXT_TITLE         = 'nxti';
-const uint32 TOGGLE_TITLE       = 'tgti';
-const uint32 NAVIGATE_MENU      = 'navm';
-const uint32 PREV_CHAPTER       = 'prch';
-const uint32 NEXT_CHAPTER       = 'nxch';
-const uint32 TOGGLE_CHAPTER     = 'tgch';
-const uint32 PREV_FILE          = 'prfl';
-const uint32 NEXT_FILE          = 'nxfl';
-const uint32 NAVIGATE_PREV      = 'navp';    // could be chapter, title or file
-const uint32 NAVIGATE_NEXT      = 'navn';    // could be chapter, title or file
-const uint32 OPEN_PREFERENCES   = 'pref';
-const uint32 OPEN_MESSAGES      = 'mess';
-const uint32 TOGGLE_ON_TOP      = 'ontp';
-const uint32 SHOW_INTERFACE     = 'shin';
-const uint32 TOGGLE_FULL_SCREEN = 'tgfs';
-const uint32 RESIZE_50          = 'rshl';
-const uint32 RESIZE_100         = 'rsor';
-const uint32 RESIZE_200         = 'rsdb';
-const uint32 RESIZE_TRUE        = 'rstr';
-const uint32 ASPECT_CORRECT     = 'asco';
-const uint32 VERT_SYNC                 = 'vsyn';
-const uint32 WINDOW_FEEL               = 'wfel';
-const uint32 SCREEN_SHOT               = 'scrn';
-const uint32 MSG_UPDATE                        = 'updt';
-const uint32 MSG_SOUNDPLAY             = 'move';       // drag'n'drop from soundplay playlist
-const uint32 INTERFACE_CREATED  = 'ifcr';  /* see VlcApplication::MessageReceived()
+#define OPEN_FILE          'opfl'
+#define OPEN_DVD           'opdv'
+#define LOAD_SUBFILE       'losu'
+#define SUBFILE_RECEIVED   'sure'
+#define OPEN_PLAYLIST      'oppl'
+#define STOP_PLAYBACK      'stpl'
+#define START_PLAYBACK     'play'
+#define PAUSE_PLAYBACK     'papl'
+#define HEIGHTH_PLAY       'hhpl'
+#define QUARTER_PLAY       'qupl'
+#define HALF_PLAY          'hapl'
+#define NORMAL_PLAY        'nrpl'
+#define TWICE_PLAY         'twpl'
+#define FOUR_PLAY          'fopl'
+#define HEIGHT_PLAY        'hepl'
+#define SEEK_PLAYBACK      'seek'
+#define VOLUME_CHG         'voch'
+#define VOLUME_MUTE        'mute'
+#define SELECT_CHANNEL     'chan'
+#define SELECT_SUBTITLE    'subt'
+#define PREV_TITLE         'prti'
+#define NEXT_TITLE         'nxti'
+#define TOGGLE_TITLE       'tgti'
+#define NAVIGATE_MENU      'navm'
+#define PREV_CHAPTER       'prch'
+#define NEXT_CHAPTER       'nxch'
+#define TOGGLE_CHAPTER     'tgch'
+#define PREV_FILE          'prfl'
+#define NEXT_FILE          'nxfl'
+#define NAVIGATE_PREV      'navp'    // could be chapter, title or file
+#define NAVIGATE_NEXT      'navn'    // could be chapter, title or file
+#define OPEN_PREFERENCES   'pref'
+#define OPEN_MESSAGES      'mess'
+#define TOGGLE_ON_TOP      'ontp'
+#define SHOW_INTERFACE     'shin'
+#define TOGGLE_FULL_SCREEN 'tgfs'
+#define RESIZE_50          'rshl'
+#define RESIZE_100         'rsor'
+#define RESIZE_200         'rsdb'
+#define RESIZE_TRUE        'rstr'
+#define ASPECT_CORRECT     'asco'
+#define VERT_SYNC          'vsyn'
+#define WINDOW_FEEL        'wfel'
+#define SCREEN_SHOT        'scrn'
+#define MSG_UPDATE         'updt'
+#define MSG_SOUNDPLAY      'move'  // drag'n'drop from soundplay playlist
+#define INTERFACE_CREATED  'ifcr'  /* see VlcApplication::MessageReceived()
                                             * in src/misc/beos_specific.cpp */
 
 #endif    // BEOS_MESSAGE_VALUES_H
index dc7411dd39f45486694438915fd38c6296ed5a03..1f7ac5e9d789c6806f7a4104234c58fa99fc2f7a 100644 (file)
@@ -2,7 +2,7 @@
  * VlcWrapper.cpp: BeOS plugin for vlc (derived from MacOS X port)
  *****************************************************************************
  * Copyright (C) 2001 VideoLAN
- * $Id: VlcWrapper.cpp,v 1.30 2003/05/07 14:49:19 titer Exp $
+ * $Id: VlcWrapper.cpp,v 1.31 2003/05/30 17:30:54 titer Exp $
  *
  * Authors: Florian G. Pflug <fgp@phlo.org>
  *          Jon Lech Johansen <jon-vl@nanocrew.net>
@@ -33,7 +33,7 @@
 #include <vlc/vout.h>
 extern "C"
 {
-  #include <input_ext-plugins.h>       // needed here when compiling without plugins
+  #include <input_ext-plugins.h> // needed here when compiling without plugins
   #include <audio_output.h>
   #include <aout_internal.h>
 }
@@ -62,35 +62,25 @@ VlcWrapper::VlcWrapper( intf_thread_t *p_interface )
 VlcWrapper::~VlcWrapper()
 {
     if( p_input )
-    {
         vlc_object_release( p_input );
-    }
+
     if( p_playlist )
-    {
         vlc_object_release( p_playlist );
-    }
 }
 
-/* UpdateInput: updates p_input, returns true if the interface needs to
-   be updated */
-bool VlcWrapper::UpdateInput()
+/* UpdateInput: updates p_input */
+void VlcWrapper::UpdateInput()
 {
-    if( p_input == NULL )
-    {
+    if( !p_input )
         p_input = (input_thread_t *)vlc_object_find( p_intf, VLC_OBJECT_INPUT,
                                                      FIND_ANYWHERE );
-    }
         
-    if( p_input != NULL )
-    {
+    if( p_input )
         if( p_input->b_dead )
         {
             vlc_object_release( p_input );
             p_input = NULL;
         }
-        return true;
-    }
-    return false;
 }
 
 
@@ -106,34 +96,64 @@ bool VlcWrapper::HasInput()
 int VlcWrapper::InputStatus()
 {
     if( !p_input )
-    {
         return UNDEF_S;
-    }
+    
     return p_input->stream.control.i_status;
 }
 
 int VlcWrapper::InputRate()
 {
     if( !p_input )
-    {
         return DEFAULT_RATE;
-    }
+    
     return p_input->stream.control.i_rate;
 }
 
-void VlcWrapper::InputSlower()
+void VlcWrapper::InputSetRate( int rate )
 {
-    if( p_input != NULL )
+    if( !p_input )
+        return;
+
+    int times = 0;
+    int oldrate = InputRate();
+    switch( ( rate > oldrate ) ? ( rate / oldrate ) : ( oldrate / rate ) )
     {
-        input_SetStatus( p_input, INPUT_STATUS_SLOWER );
+        case 64:
+            times = 6;
+            break;
+        case 32:
+            times = 5;
+            break;
+        case 16:
+            times = 4;
+            break;
+        case 8:
+            times = 3;
+            break;
+        case 4:
+            times = 2;
+            break;
+        case 2:
+            times = 1;
+            break;
     }
-}
 
-void VlcWrapper::InputFaster()
-{
-    if( p_input != NULL )
+    int newrate = oldrate;
+    for( int i = 0; i < times; i++ )
     {
-        input_SetStatus( p_input, INPUT_STATUS_FASTER );
+        if( rate > oldrate )
+        {
+            input_SetStatus( p_input, INPUT_STATUS_SLOWER );
+            newrate *= 2;
+        }
+        else
+        {
+            input_SetStatus( p_input, INPUT_STATUS_FASTER );
+            newrate /= 2;
+        }
+        /* Wait it's actually done */
+        while( InputRate() != newrate )
+            msleep( 10000 );
     }
 }
 
@@ -317,9 +337,9 @@ void VlcWrapper::SetTimeAsFloat( float f_position )
     if( p_input != NULL )
     {
         input_Seek( p_input, 
-                   (long long int)(p_input->stream.p_selected_area->i_size
+                   (long long)(p_input->stream.p_selected_area->i_size
                        * f_position / SEEKSLIDER_RANGE ), 
-                   INPUT_SEEK_SET);
+                   INPUT_SEEK_SET );
     }
 }
 
index 18ca5d0881c860cce9f3aa39d192ff793d488945..89a1f28abaa6175ab021049e627118daa0f2a949 100644 (file)
@@ -2,7 +2,7 @@
  * VlcWrapper.h: BeOS plugin for vlc (derived from MacOS X port)
  *****************************************************************************
  * Copyright (C) 2001 VideoLAN
- * $Id: VlcWrapper.h,v 1.23 2003/05/12 19:59:48 titer Exp $
+ * $Id: VlcWrapper.h,v 1.24 2003/05/30 17:30:54 titer Exp $
  *
  * Authors: Florian G. Pflug <fgp@phlo.org>
  *          Jon Lech Johansen <jon-vl@nanocrew.net>
@@ -66,14 +66,13 @@ public:
     VlcWrapper( intf_thread_t *p_intf );
     ~VlcWrapper();
     
-    bool UpdateInput();
+    void UpdateInput();
     
     /* Input */
     bool         HasInput();
     int          InputStatus();
     int          InputRate();
-    void         InputSlower();
-    void         InputFaster();
+    void         InputSetRate( int rate );
     BList *      GetChannels( int i_cat );
     void         ToggleLanguage( int i_language );
     void         ToggleSubtitle( int i_subtitle );