diff options
Diffstat (limited to 'vdr_decoder.c')
| -rw-r--r-- | vdr_decoder.c | 236 |
1 files changed, 106 insertions, 130 deletions
diff --git a/vdr_decoder.c b/vdr_decoder.c index 60087cc..8bd52ef 100644 --- a/vdr_decoder.c +++ b/vdr_decoder.c @@ -26,7 +26,6 @@ #include <vdr/videodir.h> #include <vdr/interface.h> - #include "vdr_decoder.h" #include "vdr_decoder_mp3.h" #include "vdr_decoder_ogg.h" @@ -43,173 +42,150 @@ extern void showmessage(int duration,const char *,...); #include "vdr_decoder_flac.h" #endif - // --- mgDecoders --------------------------------------------------------------- -mgMediaType mgDecoders::getMediaType (std::string s) -{ - mgMediaType mt = MT_UNKNOWN; - - char * - f = (char *) s.c_str (); - char * - p = f + strlen (f) - 1; // point to the end - - while (p >= f && *p != '.') - --p; - - if (!strcasecmp (p, ".mp3")) - { - mt = MT_MP3; - } - else - { - if (!strcasecmp (p, ".ogg")) - { +mgMediaType mgDecoders::getMediaType (std::string s) { + mgMediaType mt = MT_UNKNOWN; + + char * + f = (char *) s.c_str (); + char * + p = f + strlen (f) - 1; // point to the end + + while (p >= f && *p != '.') + --p; + + if (!strcasecmp (p, ".mp3")) { + mt = MT_MP3; + } + else { + if (!strcasecmp (p, ".ogg")) { #ifdef HAVE_VORBISFILE - mt = MT_OGG; + mt = MT_OGG; #else - mgWarning("Support for vorbis not compiled in, define HAVE_VORBISFILE in Makefile"); + mgWarning("Support for vorbis not compiled in, define HAVE_VORBISFILE in Makefile"); #endif - } - else - { - if (!strcasecmp (p, ".flac")) - { + } + else { + if (!strcasecmp (p, ".flac")) { #ifdef HAVE_FLAC - mt = MT_FLAC; + mt = MT_FLAC; #else - mgWarning("Support for flac not compiled in, define HAVE_FLAC in Makefile"); + mgWarning("Support for flac not compiled in, define HAVE_FLAC in Makefile"); #endif - } - else - { - if( !strcasecmp( p, ".wav" ) ) - { + } + else { + if( !strcasecmp( p, ".wav" ) ) { #ifdef HAVE_SNDFILE - mt = MT_SND; + mt = MT_SND; #else - mgWarning("Support for wav files not compiled in, define HAVE_SNDFILE in Makefile" ); + mgWarning("Support for wav files not compiled in, define HAVE_SNDFILE in Makefile" ); #endif + } + } } - } } - } - return mt; + return mt; } - mgDecoder * -mgDecoders::findDecoder (mgItemGd * item) -{ - mgDecoder *decoder = 0; - - std::string filename = item->getSourceFile (); - - switch (getMediaType (filename)) - { - case MT_MP3: - { - decoder = new mgMP3Decoder (item); - } break; +mgDecoders::findDecoder (mgItemGd * item) { + mgDecoder *decoder = 0; + + std::string filename = item->getSourceFile (); + + switch (getMediaType (filename)) { + 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 #ifdef HAVE_FLAC - case MT_FLAC: - { - decoder = new mgFlacDecoder( item ); - } break; + case MT_FLAC: + { + decoder = new mgFlacDecoder( item ); + } break; #endif #ifdef HAVE_SNDFILE - case MT_SND: - { - decoder = new mgSndfileDecoder( item ); - } break; + case MT_SND: + { + decoder = new mgSndfileDecoder( item ); + } break; #endif - default: - { - esyslog ("ERROR: unknown media type "); + default: + { + esyslog ("ERROR: unknown media type "); + } + break; } - break; - } - - 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 ()); - } - return decoder; -} + 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 ()); + } + return decoder; +} // --- mgDecoder ---------------------------------------------------------------- -mgDecoder::mgDecoder (mgItemGd * item) -{ - m_item = item; - m_locked = 0; - m_urgentLock = false; - m_playing = false; +mgDecoder::mgDecoder (mgItemGd * item) { + m_item = item; + m_locked = 0; + m_urgentLock = false; + m_playing = false; } -mgDecoder::~mgDecoder () -{ +mgDecoder::~mgDecoder () { } void -mgDecoder::lock (bool urgent) -{ - m_locklock.Lock (); - - if (urgent && m_locked) - { - m_urgentLock = true; // signal other locks to release quickly - } - m_locked++; - - m_locklock.Unlock (); // don't hold the "locklock" when locking "lock", may cause a deadlock - m_lock.Lock (); - m_urgentLock = false; -} +mgDecoder::lock (bool urgent) { + m_locklock.Lock (); + if (urgent && m_locked) { + m_urgentLock = true; // signal other locks to release quickly + } + m_locked++; + + 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) -{ - m_locklock.Lock (); +mgDecoder::unlock (void) { + m_locklock.Lock (); - m_locked--; + m_locked--; - m_lock.Unlock (); - m_locklock.Unlock (); + m_lock.Unlock (); + m_locklock.Unlock (); } +bool mgDecoder::tryLock (void) { + bool + res = false; + m_locklock.Lock (); + + if (!m_locked && !m_playing) { + m_locked++; -bool mgDecoder::tryLock (void) -{ - bool - res = false; - m_locklock.Lock (); - - if (!m_locked && !m_playing) - { - m_locked++; - - m_locklock.Unlock (); // don't hold the "locklock" when locking - // "lock", may cause a deadlock - m_lock.Lock (); - m_urgentLock = false; - res = true; - } - else - m_locklock.Unlock (); - return res; + m_locklock.Unlock (); // don't hold the "locklock" when locking + // "lock", may cause a deadlock + m_lock.Lock (); + m_urgentLock = false; + res = true; + } + else + m_locklock.Unlock (); + return res; } |
