diff options
Diffstat (limited to 'ui/qt/utils/rtp_audio_file.h')
-rw-r--r-- | ui/qt/utils/rtp_audio_file.h | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/ui/qt/utils/rtp_audio_file.h b/ui/qt/utils/rtp_audio_file.h new file mode 100644 index 0000000..addc301 --- /dev/null +++ b/ui/qt/utils/rtp_audio_file.h @@ -0,0 +1,93 @@ +/** @file + * + * Wireshark - Network traffic analyzer + * By Gerald Combs <gerald@wireshark.org> + * Copyright 1998 Gerald Combs + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#ifndef RTP_AUDIO_FILE_H +#define RTP_AUDIO_FILE_H + +#include "config.h" +#include <ui/rtp_media.h> + +#include <speex/speex_resampler.h> + +#include <QIODevice> +#include <QDir> +#include <QTemporaryFile> +#include <QDebug> +#include <QBuffer> + +struct _rtp_info; + +typedef enum { + RTP_FRAME_AUDIO = 0, + RTP_FRAME_SILENCE +} rtp_frame_type; + +// Structure used for storing frame num during visual waveform decoding +typedef struct { + qint64 real_pos; + qint64 sample_pos; + qint64 len; + guint32 frame_num; + rtp_frame_type type; +} rtp_frame_info; + + +class RtpAudioFile: public QIODevice +{ +public: + explicit RtpAudioFile(bool use_disk_for_temp, bool use_disk_for_frames); + ~RtpAudioFile(); + + // Functions for writing Frames + void setFrameWriteStage(); + void frameWriteSilence(guint32 frame_num, qint64 samples); + qint64 frameWriteSamples(guint32 frame_num, const char *data, qint64 max_size); + + // Functions for reading Frames + void setFrameReadStage(qint64 prepend_samples); + bool readFrameSamples(gint32 *read_buff_bytes, SAMPLE **read_buff, spx_uint32_t *read_len, guint32 *frame_num, rtp_frame_type *type); + + // Functions for reading data during play + void setDataReadStage(); + bool open(QIODevice::OpenMode mode) override; + qint64 size() const override; + qint64 pos() const override; + bool seek(qint64 off) override; + qint64 sampleFileSize(); + void seekSample(qint64 samples); + qint64 readSample(SAMPLE *sample); + qint64 getTotalSamples(); + qint64 getEndOfSilenceSample(); + +protected: + // Functions for reading data during play + qint64 readData(char *data, qint64 maxSize) override; + qint64 writeData(const char *data, qint64 maxSize) override; + +private: + QIODevice *sample_file_; // Stores waveform samples + QIODevice *sample_file_frame_; // Stores rtp_packet_info per packet + qint64 real_pos_; + qint64 real_size_; + qint64 sample_pos_; + qint64 sample_size_; + rtp_frame_info cur_frame_; + + // Functions for writing Frames + qint64 frameWriteFrame(guint32 frame_num, qint64 real_pos, qint64 sample_pos, qint64 len, rtp_frame_type type); + void frameUpdateRealCounters(qint64 written_bytes); + void frameUpdateSampleCounters(qint64 written_bytes); + + // Functions for reading Frames + + // Functions for reading data during play + qint64 readFrameData(char *data , qint64 want_read); +}; + +#endif // RTP_AUDIO_FILE_H |