summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlvw <lvw@e10066b5-e1e2-0310-b819-94efdf66514b>2004-10-11 22:02:14 +0000
committerlvw <lvw@e10066b5-e1e2-0310-b819-94efdf66514b>2004-10-11 22:02:14 +0000
commit1761a1a8961e2ec1f6338c42af5c9e0aa56822b4 (patch)
treeb94e689f818b298e7ba1c629a8394776d0e6a9da
parentc3138201aa15b89d76ef7b8f6cd68496a98c312c (diff)
downloadvdr-plugin-muggle-1761a1a8961e2ec1f6338c42af5c9e0aa56822b4.tar.gz
vdr-plugin-muggle-1761a1a8961e2ec1f6338c42af5c9e0aa56822b4.tar.bz2
Corrected position of code to confirm loop/shuffle modes
git-svn-id: https://vdr-muggle.svn.sourceforge.net/svnroot/vdr-muggle/trunk/muggle-plugin@228 e10066b5-e1e2-0310-b819-94efdf66514b
-rw-r--r--TODO6
-rw-r--r--mg_playlist.h5
-rw-r--r--vdr_menu.c4
-rw-r--r--vdr_player.c217
-rw-r--r--vdr_player.h4
-rw-r--r--vdr_setup.c6
6 files changed, 141 insertions, 101 deletions
diff --git a/TODO b/TODO
index 30f365b..17c23d5 100644
--- a/TODO
+++ b/TODO
@@ -17,7 +17,6 @@
\subsection urgentosd OSD-related Issues
- - Red key does not work in Browser submenu
- Possible to resume play instead of restarting list from the beginning?
- Save on exit
- Rename playlist
@@ -69,6 +68,8 @@
\subsection urgentplayer Player extensions
+ - Display covers
+ - Add FLAC decoder
- Determine max. framecount (needed for rewinding)?
- Init scale/level/normalize?
- The max. level should be recognized during play
@@ -157,8 +158,6 @@
\subsection midplayer Player issues
- - Display covers
- - Add FLAC decoder
- Use single CD files with cuesheets in metadata for FLAC
- Handle recoding samplerate, limiter etc correctly
@@ -241,5 +240,6 @@
- Toggle detail/progress view (green)
- Track view: all metadata
- Playlist view: all tracks (past three, upcoming ones)
+ - BUG: Red key does not work in Browser submenu
*/ \ No newline at end of file
diff --git a/mg_playlist.h b/mg_playlist.h
index c5dd5fc..0c32297 100644
--- a/mg_playlist.h
+++ b/mg_playlist.h
@@ -76,6 +76,11 @@ public:
//! \brief toggle the shuffle mode.
ShuffleMode toggleShuffleMode( );
+ //! \brief report the loop mode.
+ LoopMode getLoopMode( ) const { return m_loop_mode; }
+
+ //! \brief report the shuffle mode.
+ ShuffleMode getShuffleMode( ) const { return m_shuffle_mode; }
//@}
//! \brief modify playlist items
diff --git a/vdr_menu.c b/vdr_menu.c
index 519c809..bea0db0 100644
--- a/vdr_menu.c
+++ b/vdr_menu.c
@@ -248,6 +248,10 @@ eOSState mgMainMenu::ProcessKey(eKeys key)
state = osContinue;
} break;
+ case kRed:
+ {
+ state = TreeSubmenuAction( 0 );
+ } break;
case kBlue:
{
m_state = TREE;
diff --git a/vdr_player.c b/vdr_player.c
index ba87ecd..4f16d66 100644
--- a/vdr_player.c
+++ b/vdr_player.c
@@ -200,7 +200,7 @@ public:
void ToggleShuffle(void);
void ToggleLoop(void);
- virtual bool getIndex(int &Current, int &Total, bool SnapToIFrame=false);
+ virtual bool GetIndex(int &Current, int &Total, bool SnapToIFrame=false);
// bool GetPlayInfo(cMP3PlayInfo *rm); // LVW
void NewPlaylist( mgPlaylist *plist, int first );
@@ -869,7 +869,7 @@ void mgPCMPlayer::SkipSeconds(int secs)
}
}
-bool mgPCMPlayer::getIndex( int &current, int &total, bool snaptoiframe )
+bool mgPCMPlayer::GetIndex( int &current, int &total, bool snaptoiframe )
{
if( m_current )
{
@@ -1106,7 +1106,7 @@ void mgPCMPlayer::send_pes_packet(unsigned char *data, int len, int timestamp)
// --- mgPlayerControl -------------------------------------------------------
mgPlayerControl::mgPlayerControl( mgPlaylist *plist, int start )
- : cControl( m_player = new mgPCMPlayer( plist, start ) )
+ : cControl( player = new mgPCMPlayer( plist, start ) )
{
MGLOG( "mgPlayerControl::mgPlayerControl" );
@@ -1141,87 +1141,87 @@ mgPlayerControl::~mgPlayerControl()
bool mgPlayerControl::Active(void)
{
- return m_player && m_player->Active();
+ return player && player->Active();
}
void mgPlayerControl::Stop(void)
{
- if( m_player )
+ if( player )
{
- delete m_player;
- m_player = 0;
+ delete player;
+ player = 0;
}
}
void mgPlayerControl::Pause(void)
{
- if( m_player )
+ if( player )
{
- m_player->Pause();
+ player->Pause();
}
}
void mgPlayerControl::Play(void)
{
- if( m_player )
+ if( player )
{
- m_player->Play();
+ player->Play();
}
}
void mgPlayerControl::Forward(void)
{
- if( m_player )
+ if( player )
{
- m_player->Forward();
+ player->Forward();
}
}
void mgPlayerControl::Backward(void)
{
- if( m_player )
+ if( player )
{
- m_player->Backward();
+ player->Backward();
}
}
void mgPlayerControl::SkipSeconds(int Seconds)
{
- if( m_player )
+ if( player )
{
- m_player->SkipSeconds(Seconds);
+ player->SkipSeconds(Seconds);
}
}
void mgPlayerControl::Goto(int Position, bool Still)
{
- if( m_player )
+ if( player )
{
- m_player->Goto(Position, Still);
+ player->Goto(Position, Still);
}
}
void mgPlayerControl::ToggleShuffle(void)
{
- if( m_player )
+ if( player )
{
- m_player->ToggleShuffle();
+ player->ToggleShuffle();
}
}
void mgPlayerControl::ToggleLoop(void)
{
- if( m_player )
+ if( player )
{
- m_player->ToggleLoop();
+ player->ToggleLoop();
}
}
void mgPlayerControl::NewPlaylist(mgPlaylist *plist, int start)
{
- if( m_player )
+ if( player )
{
- m_player->NewPlaylist(plist, start);
+ player->NewPlaylist(plist, start);
}
}
@@ -1233,7 +1233,7 @@ void mgPlayerControl::ShowContents()
m_menu = Skins.Current()->DisplayMenu();
}
- if( m_player && m_menu )
+ if( player && m_menu )
{
int num_items = m_menu->MaxItems();
@@ -1247,44 +1247,44 @@ void mgPlayerControl::ShowContents()
char *buf;
if( num_items > 0 )
{
- asprintf( &buf, "Title:\t%s", m_player->getCurrent()->getLabel(0).c_str() );
+ asprintf( &buf, "Title:\t%s", player->getCurrent()->getLabel(0).c_str() );
m_menu->SetItem( buf, 0, false, false );
free( buf );
}
if( num_items > 1 )
{
- asprintf( &buf, "Artist:\t%s", m_player->getCurrent()->getLabel(1).c_str() );
+ asprintf( &buf, "Artist:\t%s", player->getCurrent()->getLabel(1).c_str() );
m_menu->SetItem( buf, 1, false, false );
free( buf );
}
if( num_items > 2 )
{
- asprintf( &buf, "Album:\t%s", m_player->getCurrent()->getLabel(2).c_str() );
+ asprintf( &buf, "Album:\t%s", player->getCurrent()->getLabel(2).c_str() );
m_menu->SetItem( buf, 2, false, false );
free( buf );
}
if( num_items > 3 )
{
- asprintf( &buf, "Genre:\t%s", m_player->getCurrent()->getLabel(3).c_str() );
+ asprintf( &buf, "Genre:\t%s", player->getCurrent()->getLabel(3).c_str() );
m_menu->SetItem( buf, 3, false, false );
free( buf );
}
if( num_items > 4 )
{
- int len = m_player->getCurrent()->getLength();
+ int len = player->getCurrent()->getLength();
asprintf( &buf, "Length:\t%s", IndexToHMSF( SecondsToFrames( len ) ) );
m_menu->SetItem( buf, 4, false, false );
free( buf );
}
if( num_items > 5 )
{
- asprintf( &buf, "Bit rate:\t%s", m_player->getCurrent()->getBitrate().c_str() );
+ asprintf( &buf, "Bit rate:\t%s", player->getCurrent()->getBitrate().c_str() );
m_menu->SetItem( buf, 5, false, false );
free( buf );
}
if( num_items > 6 )
{
- int sr = m_player->getCurrent()->getSampleRate();
+ int sr = player->getCurrent()->getSampleRate();
asprintf( &buf, "Sampling rate:\t%d", sr );
m_menu->SetItem( buf, 6, false, false );
@@ -1293,7 +1293,7 @@ void mgPlayerControl::ShowContents()
}
else
{
- mgPlaylist *list = m_player->getPlaylist();
+ mgPlaylist *list = player->getPlaylist();
if( list )
{
// use items for playlist tag display
@@ -1332,18 +1332,18 @@ void mgPlayerControl::ShowContents()
void mgPlayerControl::ShowProgress()
{
- if( m_player )
+ if( player )
{
char *buf;
bool play = true, forward = true;
int speed = -1;
int current_frame, total_frames;
- m_player->getIndex( current_frame, total_frames );
+ player->GetIndex( current_frame, total_frames );
if( !m_track_view )
{ // playlist stuff
- mgPlaylist *list = m_player->getPlaylist();
+ mgPlaylist *list = player->getPlaylist();
if( list )
{
total_frames = SecondsToFrames( list->getLength() );
@@ -1353,7 +1353,7 @@ void mgPlayerControl::ShowProgress()
}
else
{ // track view
- asprintf( &buf, "%s: %s", m_player->getCurrent()->getLabel(1).c_str(), m_player->getCurrent()->getTitle().c_str() );
+ asprintf( &buf, "%s: %s", player->getCurrent()->getLabel(1).c_str(), player->getCurrent()->getTitle().c_str() );
}
#if VDRVERSNUM >= 10307
@@ -1383,8 +1383,6 @@ void mgPlayerControl::ShowProgress()
void mgPlayerControl::Display()
{
- StatusMsgReplaying();
-
if( m_visible )
{
if( !m_has_osd )
@@ -1464,6 +1462,8 @@ eOSState mgPlayerControl::ProcessKey(eKeys key)
return osEnd;
}
+ StatusMsgReplaying();
+
Display();
eOSState state = cControl::ProcessKey(key);
@@ -1482,9 +1482,9 @@ eOSState mgPlayerControl::ProcessKey(eKeys key)
} break;
case kRed:
{
- if( !m_visible && m_player )
+ if( !m_visible && player )
{
- mgPlaylist *pl = m_player->getPlaylist();
+ mgPlaylist *pl = player->getPlaylist();
std::string s;
switch( pl->toggleLoopMode() )
@@ -1505,14 +1505,14 @@ eOSState mgPlayerControl::ProcessKey(eKeys key)
{
s = tr( "Unknown loop mode" );
}
+ }
#if VDRVERSNUM >= 10307
- Skins.Message(mtInfo, s.c_str() );
- Skins.Flush();
+ Skins.Message(mtInfo, s.c_str() );
+ Skins.Flush();
#else
- Interface->Status( s.c_str() );
- Interface->Flush();
+ Interface->Status( s.c_str() );
+ Interface->Flush();
#endif
- }
}
else
{
@@ -1523,9 +1523,9 @@ eOSState mgPlayerControl::ProcessKey(eKeys key)
} break;
case kGreen:
{
- if( !m_visible && m_player )
+ if( !m_visible && player )
{
- mgPlaylist *pl = m_player->getPlaylist();
+ mgPlaylist *pl = player->getPlaylist();
std::string s;
switch( pl->toggleShuffleMode() )
@@ -1546,14 +1546,14 @@ eOSState mgPlayerControl::ProcessKey(eKeys key)
{
s = tr( "Unknown shuffle mode" );
}
+ }
#if VDRVERSNUM >= 10307
- Skins.Message(mtInfo, s.c_str() );
- Skins.Flush();
+ Skins.Message(mtInfo, s.c_str() );
+ Skins.Flush();
#else
- Interface->Status( s.c_str() );
- Interface->Flush();
+ Interface->Status( s.c_str() );
+ Interface->Flush();
#endif
- }
}
else
{
@@ -1601,50 +1601,81 @@ eOSState mgPlayerControl::ProcessKey(eKeys key)
void mgPlayerControl::StatusMsgReplaying()
{
char *szBuf=NULL;
- if(m_player
- && m_player->getCurrent()
- && m_player->getCurrent()->isValid()
- && m_player->getCurrent()->getContentType() == mgContentItem::GD_AUDIO
- && m_player->getPlaylist())
+ if(player
+ && player->getCurrent()
+ && player->getPlaylist())
{
- /*
- if(m_player->getCurrent()->getAlbum().length() > 0)
- {
- asprintf(&szBuf,"[%c%c] (%d/%d) %s - %s",
- m_player->getPlaylist()->isLoop()?'L':'.',
- m_player->getPlaylist()->isShuffle()'S':'.',
- m_player->getPlaylist()->getIndex() + 1,m_player->getPlaylist()->getCount(),
- m_player->getCurrent()->getTitle().c_str(),
- m_player->getCurrent()->getAlbum().c_str());
- }
- else */
- {
- asprintf(&szBuf,"[%c%c] (%d/%d) %s",
- /* TODO m_player->GetPlaylist()->isLoop()?'L':*/'.',
- /* TODO m_player->GetPlaylist()->isShuffle()'S':*/'.',
- m_player->getPlaylist()->getIndex() + 1,m_player->getPlaylist()->getNumItems(),
- m_player->getCurrent()->getTitle().c_str());
- }
- }
- else
- {
- asprintf(&szBuf,"[muggle]");
- }
-
- if(szBuf
- && ( m_szLastShowStatusMsg == NULL
- || 0 != strcmp(szBuf,m_szLastShowStatusMsg) ) )
- {
- cStatus::MsgReplaying(this,szBuf);
-
- if(m_szLastShowStatusMsg)
+ char cLoopMode;
+ char cShuffle;
+
+ switch( player->getPlaylist()->getLoopMode() )
+ {
+ default:
+ case mgPlaylist::LM_NONE:
+ cLoopMode = '.'; // Loop mode off
+ break;
+ case mgPlaylist::LM_SINGLE:
+ cLoopMode = 'S'; // Loop mode single
+ break;
+ case mgPlaylist::LM_FULL:
+ cLoopMode = 'P'; // Loop mode fuel
+ break;
+ }
+
+ switch( player->getPlaylist()->getShuffleMode() )
{
- free(m_szLastShowStatusMsg);
+ default:
+ case mgPlaylist::SM_NONE:
+ cShuffle = '.'; // Shuffle mode off
+ break;
+ case mgPlaylist::SM_NORMAL:
+ cShuffle = 'S'; // Shuffle mode normal
+ break;
+ case mgPlaylist::SM_PARTY:
+ cShuffle = 'P'; // Shuffle mode party
+ break;
+ }
+
+ if(player->getCurrent()->getLabel(1).length() > 0)
+ {
+ asprintf(&szBuf,"[%c%c] (%d/%d) %s - %s",
+ cLoopMode,
+ cShuffle,
+ player->getPlaylist()->getIndex() + 1,player->getPlaylist()->getNumItems(),
+ player->getCurrent()->getLabel(1).c_str(),
+ player->getCurrent()->getTitle().c_str());
+ }
+ else
+ {
+ asprintf(&szBuf,"[%c%c] (%d/%d) %s",
+ cLoopMode,
+ cShuffle,
+ player->getPlaylist()->getIndex() + 1,player->getPlaylist()->getNumItems(),
+ player->getCurrent()->getTitle().c_str());
}
- m_szLastShowStatusMsg = szBuf;
}
else
{
- free(szBuf);
+ asprintf(&szBuf,"[muggle]");
+ }
+
+ //fprintf(stderr,"StatusMsgReplaying(%s)\n",szBuf);
+ if( szBuf )
+ {
+ if( m_szLastShowStatusMsg == NULL
+ || 0 != strcmp(szBuf,m_szLastShowStatusMsg) )
+ {
+ if(m_szLastShowStatusMsg)
+ {
+ free(m_szLastShowStatusMsg);
+ }
+ m_szLastShowStatusMsg = szBuf;
+ cStatus::MsgReplaying(this,m_szLastShowStatusMsg);
+ }
+ else
+ {
+ free(szBuf);
+ }
}
}
+
diff --git a/vdr_player.h b/vdr_player.h
index d39d9d8..2c73771 100644
--- a/vdr_player.h
+++ b/vdr_player.h
@@ -40,8 +40,8 @@ class mgPlayerControl : public cControl
{
private:
- //! \brief the reference to the player , don't rename it see cControl
- mgPCMPlayer *m_player;
+ //! \brief the reference to the player
+ mgPCMPlayer *player;
//! \brief indicates, whether the osd should be visible
bool m_visible;
diff --git a/vdr_setup.c b/vdr_setup.c
index 13f44ac..afa7b85 100644
--- a/vdr_setup.c
+++ b/vdr_setup.c
@@ -3,11 +3,11 @@
* \brief A setup class for a VDR media plugin (muggle)
*
* \version $Revision: 1.3 $
- * \date $Date: 2004/07/25 21:33:35 $
+ * \date $Date$
* \author Ralf Klueber, Lars von Wedel, Andreas Kellner
- * \author Responsible author: $Author: lvw $
+ * \author Responsible author: $Author$
*
- * $Id: vdr_setup.c,v 1.3 2004/07/25 21:33:35 lvw Exp $
+ * $Id$
*
* Partially adapted from
* MP3/MPlayer plugin to VDR (C++)