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