OpenShot Library | libopenshot  0.7.0
AudioPlaybackThread.h
Go to the documentation of this file.
1 
10 // Copyright (c) 2008-2019 OpenShot Studios, LLC
11 //
12 // SPDX-License-Identifier: LGPL-3.0-or-later
13 
14 #ifndef OPENSHOT_AUDIO_PLAYBACK_THREAD_H
15 #define OPENSHOT_AUDIO_PLAYBACK_THREAD_H
16 
17 #include "ReaderBase.h"
18 #include "RendererBase.h"
19 #include "AudioReaderSource.h"
20 #include "AudioDevices.h"
21 #include "AudioReaderSource.h"
22 #include "Qt/VideoCacheThread.h"
23 
24 #include <OpenShotAudio.h>
25 #include <AppConfig.h>
26 #include <juce_audio_basics/juce_audio_basics.h>
27 #include <juce_audio_devices/juce_audio_devices.h>
28 
29 namespace openshot
30 {
31 
32 // Forward decls
33 class ReaderBase;
34 class Frame;
35 class PlayerPrivate;
36 class QtPlayer;
37 
38 
43 private:
46 
48  static AudioDeviceManagerSingleton* m_pInstance;
49 
50 public:
52  std::string initialise_error;
53 
56 
59 
62 
65  static AudioDeviceManagerSingleton* Instance(int rate, int channels);
66 
68  juce::AudioDeviceManager audioDeviceManager;
69 
71  void CloseAudioDevice();
72  };
73 
77  class AudioPlaybackThread : juce::Thread
78  {
79  juce::AudioSourcePlayer player;
80  juce::AudioTransportSource transport;
81  juce::MixerAudioSource mixer;
82  AudioReaderSource *source;
83  double sampleRate;
84  int numChannels;
85  juce::WaitableEvent play;
86  bool is_playing;
87  juce::TimeSliceThread time_thread;
88  openshot::VideoCacheThread *videoCache;
89  std::mutex transportMutex;
90  std::condition_variable transportCondition;
91 
96 
98  void NotifyTransportStateChanged();
99 
101  void Reader(openshot::ReaderBase *reader);
102 
104  std::shared_ptr<openshot::Frame> getFrame();
105 
107  void Play();
108 
110  void Seek(int64_t new_position);
111 
113  void Stop();
114 
116  void run();
117 
119  void setSpeed(int new_speed) { if (source) source->setSpeed(new_speed); }
120 
122  int getSpeed() const { if (source) return source->getSpeed(); else return 1; }
123 
125  std::string getError()
126  {
128  }
129 
131  double getDefaultSampleRate()
132  {
134  }
135 
137  AudioDeviceInfo getCurrentAudioDevice()
138  {
140  }
141 
143  AudioDeviceList getAudioDeviceNames()
144  {
145  AudioDevices devs;
146  return devs.getNames();
147  };
148 
149  friend class PlayerPrivate;
150  friend class QtPlayer;
151 };
152 
153 } // namespace openshot
154 
155 #endif // OPENSHOT_AUDIO_PLAYBACK_THREAD_H
Header file for Audio Device Info struct.
Header file for AudioReaderSource class.
Header file for ReaderBase class.
Header file for RendererBase class.
Header file for VideoCacheThread class.
Singleton wrapper for AudioDeviceManager (to prevent multiple instances).
double defaultSampleRate
Default sample rate (as detected)
static AudioDeviceManagerSingleton * Instance()
Override with default sample rate & channels (44100, 2) and no preferred audio device.
juce::AudioDeviceManager audioDeviceManager
Public device manager property.
AudioDeviceInfo currentAudioDevice
Current open audio device (or last attempted device - if none were successful)
std::string initialise_error
Error found during JUCE initialise method.
A class which probes the available audio devices.
Definition: AudioDevices.h:46
AudioDeviceList getNames()
The audio playback thread.
This class is used to expose any ReaderBase derived class as an AudioSource in JUCE.
int getSpeed() const
Get Speed (The speed and direction to playback a reader (1=normal, 2=fast, 3=faster,...
void setSpeed(int new_speed)
Set Speed (The speed and direction to playback a reader (1=normal, 2=fast, 3=faster,...
The private part of QtPlayer class, which contains an audio thread and video thread,...
Definition: PlayerPrivate.h:31
This class is used to playback a video from a reader.
Definition: QtPlayer.h:33
This abstract class is the base class, used by all readers in libopenshot.
Definition: ReaderBase.h:76
Handles prefetching and caching of video/audio frames for smooth playback.
This namespace is the default namespace for all code in the openshot library.
Definition: Compressor.h:29
std::vector< std::pair< std::string, std::string > > AudioDeviceList
Definition: AudioDevices.h:42
This struct hold information about Audio Devices.
Definition: AudioDevices.h:27