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 #ifdef HAVE_MUSICBRAINZ
19  #include "musicbrainz.h"
20 #endif // HAVE_MUSICBRAINZ
21 
22 class MusicMetadata;
23 
24 class CdDecoder : public Decoder
25 {
27 
28  public:
29  CdDecoder(const QString &file, DecoderFactory *d, AudioOutput *o);
30  ~CdDecoder() override;
31 
32  // Decoder implementation
33  bool initialize() override; // Decoder
34  void seek(double pos) override; // Decoder
35  void stop() override; // Decoder
36 
38 
39  // The following need to allocate a new MusicMetadata object each time,
40  // because their callers free the returned value
41  // TODO check this is still true
42  MusicMetadata *getMetadata(int track);
43 
44  int getNumTracks();
45  int getNumCDAudioTracks();
46 
47  void setDevice(const QString &dev);
48  void setCDSpeed(int speed);
49 
50  private:
51  void run() override; // MThread
52 
53  void writeBlock();
54  void deinit();
55 
56  volatile bool m_inited {false};
57  volatile bool m_userStop {false};
58 
59  QString m_deviceName;
60 
61  static QRecursiveMutex& getCdioMutex();
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 #ifdef HAVE_MUSICBRAINZ
89  static MusicBrainz & getMusicBrainz();
90 #endif // HAVE_MUSICBRAINZ
91 
92 };
93 
94 #endif
95 
CdDecoder::getMetadata
MusicMetadata * getMetadata(void)
Definition: cddecoder.cpp:499
CdDecoder::m_setTrackNum
int m_setTrackNum
Definition: cddecoder.h:76
musicbrainz.h
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
MusicBrainz
Definition: musicbrainz.h:13
CdDecoder::deinit
void deinit()
Definition: cddecoder.cpp:268
CdDecoder::getCdioMutex
static QRecursiveMutex & getCdioMutex()
Definition: cddecoder.cpp:139
CdDecoder::writeBlock
void writeBlock()
Definition: cddecoder.cpp:121
CdDecoder::initialize
bool initialize() override
Definition: cddecoder.cpp:146
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:57
Decoder
Definition: decoder.h:70
CdDecoder::seek
void seek(double pos) override
Definition: cddecoder.cpp:260
CdDecoder
Definition: cddecoder.h:24
CdDecoder::setCDSpeed
void setCDSpeed(int speed)
Definition: cddecoder.cpp:428
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:56
CdDecoder::m_freq
long m_freq
Definition: cddecoder.h:71
CdDecoder::~CdDecoder
~CdDecoder() override
Definition: cddecoder.cpp:98
CdDecoder::setDevice
void setDevice(const QString &dev)
Definition: cddecoder.cpp:104
CdDecoder::getNumTracks
int getNumTracks()
Definition: cddecoder.cpp:446
CdDecoder::CdDecoder
CdDecoder(const QString &file, DecoderFactory *d, AudioOutput *o)
Definition: cddecoder.cpp:91
CdDecoder::m_stat
DecoderEvent::Type m_stat
Definition: cddecoder.h:63
CdDecoder::getNumCDAudioTracks
int getNumCDAudioTracks()
Definition: cddecoder.cpp:464
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:292
CdDecoder::m_deviceName
QString m_deviceName
Definition: cddecoder.h:59
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:115
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