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/mythcontext.h>
12 #include <libmyth/output.h>
13 #include <libmyth/visual.h>
14 #include <libmythmetadata/metaio.h>
16 
17 // mythmusic
18 #include "config.h"
19 #include "decoder.h"
20 #include "constants.h"
21 #include "musicplayer.h"
22 
23 const QEvent::Type DecoderEvent::kDecoding =
24  (QEvent::Type) QEvent::registerEventType();
25 const QEvent::Type DecoderEvent::kStopped =
26  (QEvent::Type) QEvent::registerEventType();
27 const QEvent::Type DecoderEvent::kFinished =
28  (QEvent::Type) QEvent::registerEventType();
29 const QEvent::Type DecoderEvent::kError =
30  (QEvent::Type) QEvent::registerEventType();
31 
33 {
34  m_fctry = nullptr;
35  m_out = nullptr;
36 }
37 
38 /*
39 QString Decoder::getURL(void)
40 {
41  return gPlayer->getDecoderHandler()->getUrl();
42 }
43 */
44 
46 {
47  lock();
48  m_out = o;
49  unlock();
50 }
51 
52 void Decoder::error(const QString &e)
53 {
54  auto *str = new QString(e.toUtf8());
55  DecoderEvent ev(str);
56  dispatch(ev);
57 }
58 
59 // static methods
60 static QList<DecoderFactory*> *factories = nullptr;
61 
62 static void checkFactories()
63 {
64  if (!factories)
65  {
66  factories = new QList<DecoderFactory*>;
67 
68 #ifdef HAVE_CDIO
70 #endif
72  }
73 }
74 
75 QStringList Decoder::all()
76 {
78 
79  return std::accumulate(factories->cbegin(), factories->cend(),
80  QStringList(),
81  [](QStringList& l, const auto & factory)
82  { return l += factory->description(); } );
83 }
84 
85 bool Decoder::supports(const QString &source)
86 {
88 
89  return std::any_of(factories->cbegin(), factories->cend(),
90  [source](const auto & factory)
91  {return factory->supports(source); } );
92 }
93 
95 {
96  factories->push_back(fact);
97 }
98 
99 Decoder *Decoder::create(const QString &source, AudioOutput *output, bool deletable)
100 {
101  checkFactories();
102 
103  auto supported = [source](const auto & factory)
104  { return factory->supports(source); };
105  auto f = std::find_if(factories->cbegin(), factories->cend(), supported);
106  return (f != factories->cend())
107  ? (*f)->create(source, output, deletable)
108  : nullptr;
109 }
Decoder::~Decoder
~Decoder() override
Definition: decoder.cpp:32
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:60
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:26
Decoder
Definition: decoder.h:70
Decoder::create
static Decoder * create(const QString &source, AudioOutput *output, bool deletable=false)
Definition: decoder.cpp:99
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:75
Decoder::error
void error(const QString &e)
Definition: decoder.cpp:52
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:45
mythcontext.h
Decoder::supports
static bool supports(const QString &source)
Definition: decoder.cpp:85
Decoder::lock
virtual void lock(void)
Definition: decoder.h:85
checkFactories
static void checkFactories()
Definition: decoder.cpp:62
Decoder::registerFactory
static void registerFactory(DecoderFactory *fact)
Definition: decoder.cpp:94
Decoder::output
AudioOutput * output()
Definition: decoder.h:81
output
#define output
Definition: synaesthesia.cpp:220
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