diff options
Diffstat (limited to 'vdr_decoder.c')
-rw-r--r-- | vdr_decoder.c | 49 |
1 files changed, 32 insertions, 17 deletions
diff --git a/vdr_decoder.c b/vdr_decoder.c index 9b47fa8..9a7bb7c 100644 --- a/vdr_decoder.c +++ b/vdr_decoder.c @@ -23,7 +23,14 @@ #include "vdr_decoder.h" #include "vdr_decoder_mp3.h" + +#ifdef HAVE_VORBISFILE #include "vdr_decoder_ogg.h" +#endif + +#ifdef HAVE_FLAC +#include "vdr_decoder_flac.h" +#endif #include "mg_db.h" @@ -34,8 +41,7 @@ mgMediaType mgDecoders::getMediaType (std::string s) { - mgMediaType - mt = MT_UNKNOWN; + mgMediaType mt = MT_UNKNOWN; // TODO: currently handles only mp3. LVW char * @@ -56,6 +62,13 @@ mgMediaType mgDecoders::getMediaType (std::string s) { mt = MT_OGG; } + else + { + if (!strcmp (p, ".flac")) + { + mt = MT_FLAC; + } + } } return mt; } @@ -76,17 +89,21 @@ mgDecoders::findDecoder (mgContentItem * item) } 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 +#ifdef HAVE_FLAC + case MT_FLAC: + { + decoder = new mgFlacDecoder( item ); + } break; #endif /* case MT_MP3_STREAM: decoder = new mgMP3StreamDecoder(full); break; @@ -124,23 +141,21 @@ mgDecoder::mgDecoder (mgContentItem * item) m_playing = false; } - 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; |