MythTV  master
decoder.cpp
Go to the documentation of this file.
1 // Copyright (c) 2000-2001 Brad Hughes <bhughes@trolltech.com>
2 //
3 // Use, modification and distribution is allowed without limitation,
4 // warranty, or liability of any kind.
5 //
6 
7 // qt
8 #include <QDir>
9 
10 // MythTV
11 #include <libmyth/output.h>
12 #include <libmyth/visual.h>
13 #include <libmythmetadata/metaio.h>
15 
16 // mythmusic
17 #include "config.h"
18 #include "decoder.h"
19 #include "constants.h"
20 #include "musicplayer.h"
21 
22 const QEvent::Type DecoderEvent::kDecoding =
23  (QEvent::Type) QEvent::registerEventType();
24 const QEvent::Type DecoderEvent::kStopped =
25  (QEvent::Type) QEvent::registerEventType();
26 const QEvent::Type DecoderEvent::kFinished =
27  (QEvent::Type) QEvent::registerEventType();
28 const QEvent::Type DecoderEvent::kError =
29  (QEvent::Type) QEvent::registerEventType();
30 
32 {
33  m_fctry = nullptr;
34  m_out = nullptr;
35 }
36 
37 /*
38 QString Decoder::getURL(void)
39 {
40  return gPlayer->getDecoderHandler()->getUrl();
41 }
42 */
43 
45 {
46  lock();
47  m_out = o;
48  unlock();
49 }
50 
51 void Decoder::error(const QString &e)
52 {
53  auto *str = new QString(e.toUtf8());
54  DecoderEvent ev(str);
55  dispatch(ev);
56 }
57 
58 // static methods
59 static QList<DecoderFactory*> *factories = nullptr;
60 
61 static void checkFactories()
62 {
63  if (!factories)
64  {
65  factories = new QList<DecoderFactory*>;
66 
67 #ifdef HAVE_CDIO
69 #endif
71  }
72 }
73 
74 QStringList Decoder::all()
75 {
77 
78  return std::accumulate(factories->cbegin(), factories->cend(),
79  QStringList(),
80  [](QStringList& l, const auto & factory)
81  { return l += factory->description(); } );
82 }
83 
84 bool Decoder::supports(const QString &source)
85 {
87 
88  return std::any_of(factories->cbegin(), factories->cend(),
89  [source](const auto & factory)
90  {return factory->supports(source); } );
91 }
92 
94 {
95  factories->push_back(fact);
96 }
97 
98 Decoder *Decoder::create(const QString &source, AudioOutput *output, bool deletable)
99 {
100  checkFactories();
101 
102  auto supported = [source](const auto & factory)
103  { return factory->supports(source); };
104  auto f = std::find_if(factories->cbegin(), factories->cend(), supported);
105  return (f != factories->cend())
106  ? (*f)->create(source, output, deletable)
107  : nullptr;
108 }
Decoder::~Decoder
~Decoder() override
Definition: decoder.cpp:31
Decoder::m_out
AudioOutput * m_out
Definition: decoder.h:110
DecoderFactory::supports
virtual bool supports(const QString &source) const =0
Decoder::factory
DecoderFactory * factory() const
Definition: decoder.h:79
factories
static QList< DecoderFactory * > * factories
Definition: decoder.cpp:59
DecoderFactory::description
virtual const QString & description() const =0
DecoderFactory
Definition: decoder.h:117
MythObservable::dispatch
void dispatch(const MythEvent &event)
Dispatch an event to all listeners.
Definition: mythobservable.cpp:73
CdDecoderFactory
Definition: decoder.h:127
AudioOutput
Definition: audiooutput.h:24
Decoder
Definition: decoder.h:70
Decoder::create
static Decoder * create(const QString &source, AudioOutput *output, bool deletable=false)
Definition: decoder.cpp:98
Decoder::unlock
virtual void unlock(void)
Definition: decoder.h:86
DecoderEvent
Definition: decoder.h:29
avfDecoderFactory
Definition: decoder.h:138
DecoderEvent::kStopped
static const Type kStopped
Definition: decoder.h:46
Decoder::all
static QStringList all()
Definition: decoder.cpp:74
Decoder::error
void error(const QString &e)
Definition: decoder.cpp:51
DecoderEvent::kFinished
static const Type kFinished
Definition: decoder.h:47
DecoderEvent::kDecoding
static const Type kDecoding
Definition: decoder.h:45
metaio.h
constants.h
Decoder::setOutput
void setOutput(AudioOutput *o)
Definition: decoder.cpp:44
Decoder::supports
static bool supports(const QString &source)
Definition: decoder.cpp:84
Decoder::lock
virtual void lock(void)
Definition: decoder.h:85
checkFactories
static void checkFactories()
Definition: decoder.cpp:61
Decoder::registerFactory
static void registerFactory(DecoderFactory *fact)
Definition: decoder.cpp:93
Decoder::output
AudioOutput * output()
Definition: decoder.h:81
output
#define output
Definition: synaesthesia.cpp:223
DecoderEvent::kError
static const Type kError
Definition: decoder.h:48
musicmetadata.h
output.h
decoder.h
musicplayer.h
Decoder::m_fctry
DecoderFactory * m_fctry
Definition: decoder.h:108
visual.h