diff options
Diffstat (limited to 'vdr_decoder.c')
-rw-r--r-- | vdr_decoder.c | 169 |
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; } |