MythTV  master
cddecoder.h
Go to the documentation of this file.
1 #ifndef CDDECODER_H_
2 #define CDDECODER_H_
3 
4 #include "decoder.h"
5 
6 #include "config.h"
7 
8 #ifdef HAVE_CDIO
9 # if __has_include(<cdio/paranoia/cdda.h>)
10 # include <cdio/paranoia/cdda.h>
11 # include <cdio/paranoia/paranoia.h>
12 # else
13 # include <cdio/cdda.h>
14 # include <cdio/paranoia.h>
15 # endif
16 #endif
17 
18 class MusicMetadata;
19 
20 class CdDecoder : public Decoder
21 {
23 
24  public:
25  CdDecoder(const QString &file, DecoderFactory *d, AudioOutput *o);
26  ~CdDecoder() override;
27 
28  // Decoder implementation
29  bool initialize() override; // Decoder
30  void seek(double pos) override; // Decoder
31  void stop() override; // Decoder
32 
34 
35  // The following need to allocate a new MusicMetadata object each time,
36  // because their callers free the returned value
37  // TODO check this is still true
38  MusicMetadata *getMetadata(int track);
39 
40  int getNumTracks();
41  int getNumCDAudioTracks();
42 
43  void setDevice(const QString &dev);
44  void setCDSpeed(int speed);
45 
46  private:
47  void run() override; // MThread
48 
49  void writeBlock();
50  void deinit();
51 
52  volatile bool m_inited {false};
53  volatile bool m_userStop {false};
54 
55  QString m_deviceName;
56 
57 #if QT_VERSION < QT_VERSION_CHECK(5,14,0)
58  static QMutex& getCdioMutex();
59 #else
60  static QRecursiveMutex& getCdioMutex();
61 #endif
62 
63  DecoderEvent::Type m_stat {DecoderEvent::kError};
64  char *m_outputBuf {nullptr};
65  std::size_t m_outputAt {0};
66 
67  std::size_t m_bks {0};
68  std::size_t m_bksFrames {0};
69  std::size_t m_decodeBytes {0};
70  bool m_finish {false};
71  long m_freq {0};
72  long m_bitrate {0};
73  int m_chan {0};
74  double m_seekTime {-1.0};
75 
76  int m_setTrackNum {-1};
77  int m_trackNum {0};
78 
79 #ifdef HAVE_CDIO
80  CdIo_t *m_cdio {nullptr};
81  cdrom_drive_t *m_device {nullptr};
82  cdrom_paranoia_t *m_paranoia {nullptr};
83  lsn_t m_start {CDIO_INVALID_LSN};
84  lsn_t m_end {CDIO_INVALID_LSN};
85  lsn_t m_curPos {CDIO_INVALID_LSN};
86 #endif
87 };
88 
89 #endif
90 
CdDecoder::getMetadata
MusicMetadata * getMetadata(void)
Definition: cddecoder.cpp:508
CdDecoder::m_setTrackNum
int m_setTrackNum
Definition: cddecoder.h:76
CdDecoder::m_seekTime
double m_seekTime
Definition: cddecoder.h:74
CdDecoder::m_bitrate
long m_bitrate
Definition: cddecoder.h:72
CdDecoder::m_decodeBytes
std::size_t m_decodeBytes
Definition: cddecoder.h:69
CdDecoder::deinit
void deinit()
Definition: cddecoder.cpp:277
CdDecoder::getCdioMutex
static QRecursiveMutex & getCdioMutex()
Definition: cddecoder.cpp:147
CdDecoder::writeBlock
void writeBlock()
Definition: cddecoder.cpp:122
CdDecoder::initialize
bool initialize() override
Definition: cddecoder.cpp:155
MusicMetadata
Definition: musicmetadata.h:80
DecoderFactory
Definition: decoder.h:117
build_compdb.file
file
Definition: build_compdb.py:55
AudioOutput
Definition: audiooutput.h:26
CdDecoder::m_userStop
volatile bool m_userStop
Definition: cddecoder.h:53
Decoder
Definition: decoder.h:70
CdDecoder::seek
void seek(double pos) override
Definition: cddecoder.cpp:269
CdDecoder
Definition: cddecoder.h:20
CdDecoder::setCDSpeed
void setCDSpeed(int speed)
Definition: cddecoder.cpp:437
CdDecoder::m_outputAt
std::size_t m_outputAt
Definition: cddecoder.h:65
CdDecoder::m_bksFrames
std::size_t m_bksFrames
Definition: cddecoder.h:68
CdDecoder::m_inited
volatile bool m_inited
Definition: cddecoder.h:52
CdDecoder::m_freq
long m_freq
Definition: cddecoder.h:71
CdDecoder::~CdDecoder
~CdDecoder() override
Definition: cddecoder.cpp:99
CdDecoder::setDevice
void setDevice(const QString &dev)
Definition: cddecoder.cpp:105
CdDecoder::getNumTracks
int getNumTracks()
Definition: cddecoder.cpp:455
CdDecoder::CdDecoder
CdDecoder(const QString &file, DecoderFactory *d, AudioOutput *o)
Definition: cddecoder.cpp:92
CdDecoder::m_stat
DecoderEvent::Type m_stat
Definition: cddecoder.h:63
CdDecoder::getNumCDAudioTracks
int getNumCDAudioTracks()
Definition: cddecoder.cpp:473
CdDecoder::run
void run() override
Runs the Qt event loop unless we have a QRunnable, in which case we run the runnable run instead.
Definition: cddecoder.cpp:301
CdDecoder::m_deviceName
QString m_deviceName
Definition: cddecoder.h:55
CdDecoder::m_bks
std::size_t m_bks
Definition: cddecoder.h:67
CdDecoder::Q_DECLARE_TR_FUNCTIONS
Q_DECLARE_TR_FUNCTIONS(CdDecoder)
CdDecoder::m_chan
int m_chan
Definition: cddecoder.h:73
d
static const iso6937table * d
Definition: iso6937tables.cpp:1025
CdDecoder::stop
void stop() override
Definition: cddecoder.cpp:116
CdDecoder::m_trackNum
int m_trackNum
Definition: cddecoder.h:77
DecoderEvent::kError
static const Type kError
Definition: decoder.h:48
CdDecoder::m_outputBuf
char * m_outputBuf
Definition: cddecoder.h:64
decoder.h
CdDecoder::m_finish
bool m_finish
Definition: cddecoder.h:70