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>
15
16// mythmusic
17#include "config.h"
18#include "decoder.h"
19#include "constants.h"
20#include "musicplayer.h"
21
22const QEvent::Type DecoderEvent::kDecoding =
23 (QEvent::Type) QEvent::registerEventType();
24const QEvent::Type DecoderEvent::kStopped =
25 (QEvent::Type) QEvent::registerEventType();
26const QEvent::Type DecoderEvent::kFinished =
27 (QEvent::Type) QEvent::registerEventType();
28const QEvent::Type DecoderEvent::kError =
29 (QEvent::Type) QEvent::registerEventType();
30
32{
33 m_fctry = nullptr;
34 m_out = nullptr;
35}
36
37/*
38QString Decoder::getURL(void)
39{
40 return gPlayer->getDecoderHandler()->getUrl();
41}
42*/
43
45{
46 lock();
47 m_out = o;
48 unlock();
49}
50
51void 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
59static QList<DecoderFactory*> *factories = nullptr;
60
61static void checkFactories()
62{
63 if (!factories)
64 {
65 factories = new QList<DecoderFactory*>;
66
67#ifdef HAVE_CDIO
69#endif
71 }
72}
73
74QStringList 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
84bool 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
98Decoder *Decoder::create(const QString &source, AudioOutput *output, bool deletable)
99{
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}
static const Type kStopped
Definition: decoder.h:46
static const Type kDecoding
Definition: decoder.h:45
static const Type kFinished
Definition: decoder.h:47
static const Type kError
Definition: decoder.h:48
virtual bool supports(const QString &source) const =0
virtual const QString & description() const =0
virtual void lock(void)
Definition: decoder.h:85
void error(const QString &e)
Definition: decoder.cpp:51
virtual void unlock(void)
Definition: decoder.h:86
static Decoder * create(const QString &source, AudioOutput *output, bool deletable=false)
Definition: decoder.cpp:98
AudioOutput * m_out
Definition: decoder.h:110
AudioOutput * output()
Definition: decoder.h:81
~Decoder() override
Definition: decoder.cpp:31
static QStringList all()
Definition: decoder.cpp:74
static bool supports(const QString &source)
Definition: decoder.cpp:84
DecoderFactory * m_fctry
Definition: decoder.h:108
DecoderFactory * factory() const
Definition: decoder.h:79
static void registerFactory(DecoderFactory *fact)
Definition: decoder.cpp:93
void setOutput(AudioOutput *o)
Definition: decoder.cpp:44
void dispatch(const MythEvent &event)
Dispatch an event to all listeners.
static QList< DecoderFactory * > * factories
Definition: decoder.cpp:59
static void checkFactories()
Definition: decoder.cpp:61
#define output