10#ifndef DIS_AUDIO_STREAM_H
11#define DIS_AUDIO_STREAM_H
15#ifdef QT_MULTIMEDIA_LIB
23#include "ui/tap-dis-common.h"
29class DisAudioStream :
public QObject
33 explicit DisAudioStream(QObject *parent =
nullptr);
36 bool playDisStream(
const disstream_info_t *stream_info, QString &error_message);
37 bool prepareVisualData(
const disstream_info_t *stream_info, QString &error_message);
38 void stopPlayback(
bool call_stop =
true);
40 void resumePlayback();
41 void setPlaybackStartTime(
double start_time_secs) { playback_start_time_ = start_time_secs; }
42 bool isPlaying()
const;
43 bool isPaused()
const;
44 QAudio::State playbackState()
const;
45 const disstream_info_t *currentStream()
const {
return current_stream_; }
46 double playbackDurationSeconds()
const {
return total_playback_secs_; }
47 const QVector<double> &visualTimestamps()
const {
return visual_timestamps_; }
48 const QVector<double> &visualSamples()
const {
return visual_samples_; }
49 const QVector<double> &jitterTimestamps()
const {
return jitter_timestamps_; }
50 const QVector<double> &jitterSamples()
const {
return jitter_samples_; }
51 const QVector<double> &lossTimestamps()
const {
return loss_timestamps_; }
52 const QVector<double> &lossSamples()
const {
return loss_samples_; }
53 const QVector<double> &problemTimestamps()
const {
return problem_timestamps_; }
54 const QVector<double> &problemSamples()
const {
return problem_samples_; }
57 void playbackStateChanged(QAudio::State state);
58 void playbackProgress(
double position_secs,
double duration_secs);
61 bool decodeToPcm(
const disstream_info_t *stream_info, QString &error_message,
62 unsigned &sample_rate,
unsigned &channels);
63 void buildVisualData(
const disstream_info_t *stream_info);
66 void onPlaybackStateChanged(QAudio::State state);
67 void updatePlaybackProgress();
70 QByteArray pcm_buffer_;
71 QBuffer *playback_buffer_;
72 QAudioSink *audio_sink_;
73 QTimer *progress_timer_;
74 unsigned sample_rate_;
76 double total_playback_secs_;
77 double playback_start_time_;
78 const disstream_info_t *current_stream_;
79 bool stopping_playback_;
80 QVector<double> visual_timestamps_;
81 QVector<double> visual_samples_;
82 QVector<double> jitter_timestamps_;
83 QVector<double> jitter_samples_;
84 QVector<double> loss_timestamps_;
85 QVector<double> loss_samples_;
86 QVector<double> problem_timestamps_;
87 QVector<double> problem_samples_;