summaryrefslogtreecommitdiff
path: root/vdr_decoder.c
diff options
context:
space:
mode:
Diffstat (limited to 'vdr_decoder.c')
-rw-r--r--vdr_decoder.c236
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;
}