summaryrefslogtreecommitdiff
path: root/vdr_decoder.c
diff options
context:
space:
mode:
Diffstat (limited to 'vdr_decoder.c')
-rw-r--r--vdr_decoder.c169
1 files changed, 96 insertions, 73 deletions
diff --git a/vdr_decoder.c b/vdr_decoder.c
index 0384031..9b47fa8 100644
--- a/vdr_decoder.c
+++ b/vdr_decoder.c
@@ -25,128 +25,151 @@
#include "vdr_decoder_mp3.h"
#include "vdr_decoder_ogg.h"
-#include "mg_content_interface.h"
+#include "mg_db.h"
#include <videodir.h>
#include <interface.h>
// --- mgDecoders ---------------------------------------------------------------
-mgMediaType mgDecoders::getMediaType( std::string s )
+mgMediaType mgDecoders::getMediaType (std::string s)
{
- mgMediaType mt = MT_UNKNOWN;
+ mgMediaType
+ mt = MT_UNKNOWN;
- // TODO: currently handles only mp3. LVW
- char *f = (char *)s.c_str();
- char *p = f + strlen( f ) - 1; // point to the end
+// TODO: currently handles only mp3. LVW
+ char *
+ f = (char *) s.c_str ();
+ char *
+ p = f + strlen (f) - 1; // point to the end
- while( p >= f && *p != '.') --p;
+ while (p >= f && *p != '.')
+ --p;
- if( !strcmp( p, ".mp3" ) )
+ if (!strcmp (p, ".mp3"))
{
- mt = MT_MP3;
+ mt = MT_MP3;
}
- else
+ else
{
- if( !strcmp( p, ".ogg" ) )
- {
- mt = MT_OGG;
- }
+ if (!strcmp (p, ".ogg"))
+ {
+ mt = MT_OGG;
+ }
}
- return mt;
+ return mt;
}
-mgDecoder *mgDecoders::findDecoder( mgContentItem *item )
+
+mgDecoder *
+mgDecoders::findDecoder (mgContentItem * item)
{
- mgDecoder *decoder = 0;
+ mgDecoder *decoder = 0;
- std::string filename = item->getSourceFile();
+ std::string filename = item->getSourceFile ();
- switch( getMediaType( filename ) )
+ struct stat st;
+ if (stat (filename.c_str (), &st))
+ {
+ esyslog ("ERROR: no valid decoder found for %s", filename.c_str ());
+ return 0;
+ }
+ switch (getMediaType (filename))
{
- case MT_MP3:
- {
- decoder = new mgMP3Decoder( item );
- } break;
+ case MT_MP3:
+ {
+ decoder = new mgMP3Decoder (item);
+ }
+ break;
#ifdef HAVE_VORBISFILE
- case MT_OGG:
- {
- decoder = new mgOggDecoder( item );
- } break;
+ 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;
+/*
+ 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() )
+
+ if (decoder && !decoder->valid ())
{
- // no decoder found or decoder doesn't match
-
- delete decoder; // might be carried out on NULL pointer!
- decoder = 0;
-
- esyslog("ERROR: no valid decoder found for %s", filename.c_str() );
+// no decoder found or decoder doesn't match
+
+ delete decoder; // might be carried out on NULL pointer!
+ decoder = 0;
+
+ esyslog ("ERROR: no valid decoder found for %s", filename.c_str ());
}
- return decoder;
+ return decoder;
}
+
// --- mgDecoder ----------------------------------------------------------------
-mgDecoder::mgDecoder( mgContentItem *item )
+mgDecoder::mgDecoder (mgContentItem * item)
{
- m_item = item;
- m_locked = 0;
- m_urgentLock = false;
- m_playing = false;
+ m_item = item;
+ m_locked = 0;
+ m_urgentLock = false;
+ m_playing = false;
}
-mgDecoder::~mgDecoder()
+
+mgDecoder::~mgDecoder ()
{
}
-void mgDecoder::lock(bool urgent)
+
+void
+mgDecoder::lock (bool urgent)
{
- m_locklock.Lock();
+ m_locklock.Lock ();
- if( urgent && m_locked )
+ if (urgent && m_locked)
{
- m_urgentLock = true; // signal other locks to release quickly
+ m_urgentLock = true; // signal other locks to release quickly
}
- m_locked ++;
+ m_locked++;
- m_locklock.Unlock(); // don't hold the "locklock" when locking "lock", may cause a deadlock
- m_lock.Lock();
- m_urgentLock = false;
+ m_locklock.Unlock (); // don't hold the "locklock" when locking "lock", may cause a deadlock
+ m_lock.Lock ();
+ m_urgentLock = false;
}
-void mgDecoder::unlock(void)
+
+void
+mgDecoder::unlock (void)
{
- m_locklock.Lock();
+ m_locklock.Lock ();
- m_locked--;
+ m_locked--;
- m_lock.Unlock();
- m_locklock.Unlock();
+ m_lock.Unlock ();
+ m_locklock.Unlock ();
}
-bool mgDecoder::tryLock(void)
+
+bool mgDecoder::tryLock (void)
{
- bool res = false;
- m_locklock.Lock();
+ bool
+ res = false;
+ m_locklock.Lock ();
- if( !m_locked && !m_playing )
+ if (!m_locked && !m_playing)
{
- lock();
- res = true;
+ lock ();
+ res = true;
}
- m_locklock.Unlock();
- return res;
+ m_locklock.Unlock ();
+ return res;
}