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