summaryrefslogtreecommitdiff
path: root/vdr_decoder.c
diff options
context:
space:
mode:
Diffstat (limited to 'vdr_decoder.c')
-rw-r--r--vdr_decoder.c73
1 files changed, 45 insertions, 28 deletions
diff --git a/vdr_decoder.c b/vdr_decoder.c
index 8b4cf70..1c0b154 100644
--- a/vdr_decoder.c
+++ b/vdr_decoder.c
@@ -1,13 +1,14 @@
/*!
* \file vdr_decoder.h
* \brief A generic decoder for a VDR media plugin (muggle)
+ * \ingroup vdr
*
* \version $Revision: 1.2 $
- * \date $Date: 2004/05/28 15:29:18 $
+ * \date $Date$
* \author Ralf Klueber, Lars von Wedel, Andreas Kellner
- * \author Responsible author: $Author: lvw $
+ * \author Responsible author: $Author$
*
- * $Id: vdr_decoder.c,v 1.2 2004/05/28 15:29:18 lvw Exp $
+ * $Id$
*
* Adapted from:
* MP3/MPlayer plugin to VDR (C++)
@@ -23,15 +24,11 @@
#include <videodir.h>
#include <interface.h>
-// #include "common.h"
-// #include "data-mp3.h"
-// #include "decoder-core.h"
-// #include "decoder-mp3-stream.h"
-// #include "decoder-snd.h"
-// #include "decoder-ogg.h"
-
#include "vdr_decoder.h"
#include "vdr_decoder_mp3.h"
+#include "vdr_decoder_ogg.h"
+
+#include "mg_content_interface.h"
using namespace std;
@@ -39,38 +36,58 @@ using namespace std;
mgMediaType mgDecoders::getMediaType( string s )
{
+ mgMediaType mt = MT_UNKNOWN;
+
// TODO: currently handles only mp3. LVW
- return MT_MP3;
+ char *f = (char *)s.c_str();
+ char *p = f + strlen( f ) - 1; // point to the end
+
+ while( p >= f && *p != '.') --p;
+
+ if( !strcmp( p, ".mp3" ) )
+ {
+ mt = MT_MP3;
+ }
+ else
+ {
+ if( !strcmp( p, ".ogg" ) )
+ {
+ mt = MT_OGG;
+ }
+ }
+ return mt;
}
-mgDecoder *mgDecoders::findDecoder( string filename )
+mgDecoder *mgDecoders::findDecoder( mgContentItem *item )
{
mgDecoder *decoder = 0;
+ string filename = item->getSourceFile();
+
switch( getMediaType( filename ) )
{
case MT_MP3:
{
- // prepend filename with path to music library?? TODO
- printf( "mp3 file detected, launching mgMP3Decoder\n" );
- decoder = new mgMP3Decoder(filename);
+ decoder = new mgMP3Decoder( item );
} break;
-
- /*
- case MT_MP3_STREAM: decoder = new mgMP3StreamDecoder(full); break;
- #ifdef HAVE_SNDFILE
- case MT_SND: decoder = new cSndDecoder(full); break;
- #endif
- #ifdef HAVE_VORBISFILE
- case MT_OGG: decoder = new mgOggDecoder(full); break;
- #endif
- */
+#ifdef HAVE_VORBISFILE
+ case MT_OGG:
+ {
+ decoder = new mgOggDecoder( item );
+ } break;
+#endif
+ /*
+ case MT_MP3_STREAM: decoder = new mgMP3StreamDecoder(full); break;
+ #ifdef HAVE_SNDFILE
+ case MT_SND: decoder = new cSndDecoder(full); break;
+ #endif
+ */
default:
{
esyslog("ERROR: unknown media type" );
} break;
}
-
+
if( decoder && !decoder->valid() )
{
// no decoder found or decoder doesn't match
@@ -85,9 +102,9 @@ mgDecoder *mgDecoders::findDecoder( string filename )
// --- mgDecoder ----------------------------------------------------------------
-mgDecoder::mgDecoder(string filename)
+mgDecoder::mgDecoder( mgContentItem *item )
{
- m_filename = filename;
+ m_item = item;
m_locked = 0;
m_urgentLock = false;
m_playing = false;