110#ifdef QT_MULTIMEDIA_LIB
111 Q_PROPERTY(QString currentOutputDeviceName READ currentOutputDeviceName)
141 static QPushButton *
addPlayerButton(QDialogButtonBox *button_box, QDialog *dialog);
143#ifdef QT_MULTIMEDIA_LIB
166 void replaceRtpStreams(QVector<rtpstream_id_t *> stream_ids);
172 void addRtpStreams(QVector<rtpstream_id_t *> stream_ids);
178 void removeRtpStreams(QVector<rtpstream_id_t *> stream_ids);
187 void packetsMarked();
194 void updateFilter(QString filter,
bool force =
false);
200 void goToPacket(
int packet_num);
206 void rtpAnalysisDialogReplaceRtpStreams(QVector<rtpstream_id_t *> stream_infos);
212 void rtpAnalysisDialogAddRtpStreams(QVector<rtpstream_id_t *> stream_infos);
218 void rtpAnalysisDialogRemoveRtpStreams(QVector<rtpstream_id_t *> stream_infos);
224 void rtpAnalysisReplace()
override;
229 void rtpAnalysisAdd()
override;
234 void rtpAnalysisRemove()
override;
245#ifdef QT_MULTIMEDIA_LIB
254 virtual void showEvent(QShowEvent *)
override;
260 void contextMenuEvent(QContextMenuEvent *event)
override;
268 bool eventFilter(QObject *obj, QEvent *event)
override;
284 void rescanPackets(
bool rescale_axes =
false);
290 void createPlot(
bool rescale_axes =
false);
302 void itemEntered(QTreeWidgetItem *item,
int column);
308 void mouseMovePlot(QMouseEvent *event);
313 void mouseMoveUpdate();
319 void showGraphContextMenu(
const QPoint &pos);
325 void graphClicked(QMouseEvent *event);
331 void graphDoubleClicked(QMouseEvent *event);
339 void plotClicked(QCPAbstractPlottable *plottable,
int dataIndex, QMouseEvent *event);
344 void updateHintLabel();
361 void playFinished(RtpAudioStream *
stream, QAudio::Error error);
367 void setPlayPosition(
double secs);
373 void setPlaybackError(
const QString playback_error);
380 void changeAudioRoutingOnItem(QTreeWidgetItem *ti,
AudioRouting new_audio_routing);
386 void changeAudioRouting(
AudioRouting new_audio_routing);
392 void invertAudioMutingOnItem(QTreeWidgetItem *ti);
397 void on_playButton_clicked();
402 void on_pauseButton_clicked();
407 void on_stopButton_clicked();
412 void on_actionReset_triggered();
417 void on_actionZoomIn_triggered();
422 void on_actionZoomOut_triggered();
427 void on_actionMoveLeft10_triggered();
432 void on_actionMoveRight10_triggered();
437 void on_actionMoveLeft1_triggered();
442 void on_actionMoveRight1_triggered();
447 void on_actionGoToPacket_triggered();
452 void on_actionGoToSetupPacketPlot_triggered();
457 void on_actionGoToSetupPacketTree_triggered();
462 void on_actionRemoveStream_triggered();
467 void on_actionAudioRoutingP_triggered();
472 void on_actionAudioRoutingL_triggered();
477 void on_actionAudioRoutingLR_triggered();
482 void on_actionAudioRoutingR_triggered();
487 void on_actionAudioRoutingMute_triggered();
492 void on_actionAudioRoutingUnmute_triggered();
497 void on_actionAudioRoutingMuteInvert_triggered();
502 void on_actionAudioRoutingSolo_triggered();
507 void on_streamTreeWidget_itemSelectionChanged();
514 void on_streamTreeWidget_itemDoubleClicked(QTreeWidgetItem *item,
const int column);
519 void on_outputDeviceComboBox_currentTextChanged(
const QString &);
525 void on_outputAudioRate_currentTextChanged(
const QString &rate_string);
530 void on_jitterSpinBox_valueChanged(
double);
535 void on_timingComboBox_currentIndexChanged(
int);
541 void on_todCheckBox_toggled(
bool checked);
546 void on_visualSRSpinBox_editingFinished();
551 void on_buttonBox_helpRequested();
556 void on_actionSelectAll_triggered();
561 void on_actionSelectInvert_triggered();
566 void on_actionSelectNone_triggered();
576 void on_actionPlay_triggered();
581 void on_actionStop_triggered();
586 void on_actionSaveAudioFromCursor_triggered();
591 void on_actionSaveAudioSyncStream_triggered();
596 void on_actionSaveAudioSyncFile_triggered();
601 void on_actionSavePayload_triggered();
606 void on_actionSelectInaudible_triggered();
611 void on_actionDeselectInaudible_triggered();
616 void on_actionPrepareFilter_triggered();
621 void on_actionReadCapture_triggered();
626 void sinkStateChanged();
634 static std::mutex init_mutex_;
637 static std::mutex run_mutex_;
639#ifdef QT_MULTIMEDIA_LIB
641 Ui::RtpPlayerDialog *ui;
644 QMenu *graph_ctx_menu_;
647 QMenu *list_ctx_menu_;
650 double first_stream_rel_start_time_;
653 double first_stream_abs_start_time_;
656 double first_stream_rel_stop_time_;
659 double streams_length_;
662 double start_marker_time_;
665 double start_marker_time_play_;
668 QCPItemStraightLine *cur_play_pos_;
671 QCPItemStraightLine *start_marker_pos_;
674 QString playback_error_;
677 QSharedPointer<QCPAxisTicker> number_ticker_;
680 QSharedPointer<QCPAxisTickerDateTime> datetime_ticker_;
683 bool stereo_available_;
686 QList<RtpAudioStream *> playing_streams_;
689 QAudioSink *marker_stream_;
692 QTimer notify_timer_;
695 qint64 notify_timer_start_diff_;
697 quint32 marker_stream_requested_out_rate_;
700 QTreeWidgetItem *last_ti_;
703 bool listener_removed_;
706 QPushButton *read_btn_;
709 QPushButton *inaudible_btn_;
712 QPushButton *analyze_btn_;
715 QPushButton *prepare_btn_;
718 QPushButton *export_btn_;
721 QMultiHash<unsigned, RtpAudioStream *> stream_hash_;
730 bool read_capture_enabled_;
733 double silence_skipped_time_;
736 QTimer *mouse_update_timer_;
761 static void tapDraw(
void *tapinfo_ptr);
774 void zoomXAxis(
bool in);
780 void panXAxis(
int x_pixels);
787 const QString getFormatedTime(
double f_time);
793 const QString getFormatedHoveredTime();
799 int getHoveredPacket();
805 QString currentOutputDeviceName();
811 double getStartPlayMarker();
816 void drawStartPlayMarker();
822 void setStartPlayMarker(
double new_time);
836 void formatAudioRouting(QTreeWidgetItem *ti,
AudioRouting audio_routing);
842 bool isStereoAvailable();
848 QAudioSink *getSilenceAudioOutput();
854 QAudioDevice getCurrentDeviceInfo();
861 QTreeWidgetItem *findItemByCoords(QPoint point);
868 QTreeWidgetItem *findItem(QCPAbstractPlottable *plottable);
875 void handleItemHighlight(QTreeWidgetItem *ti,
bool scroll);
882 void highlightItem(QTreeWidgetItem *ti,
bool highlight);
887 void invertSelection();
893 void handleGoToSetupPacket(QTreeWidgetItem *ti);
905 void removeRow(QTreeWidgetItem *ti);
910 void fillAudioRateMenu();
915 void cleanupMarkerStream();
924 qint64 saveAudioHeaderAU(QFile *save_file, quint32 channels,
unsigned audio_rate);
934 qint64 saveAudioHeaderWAV(QFile *save_file, quint32 channels,
unsigned audio_rate, qint64 samples);
943 bool writeAudioSilenceSamples(QFile *out_file, qint64 samples,
int stream_count);
952 bool writeAudioStreamsSamples(QFile *out_file, QVector<RtpAudioStream *> streams,
bool big_endian);
959 save_audio_t selectFileAudioFormatAndName(QString *file_path);
966 save_payload_t selectFilePayloadFormatAndName(QString *file_path);
972 QVector<RtpAudioStream *>getSelectedAudibleNonmutedAudioStreams();
999 void selectInaudible(
bool select);
1005 QVector<rtpstream_id_t *>getSelectedRtpStreamIDs();
1010 void fillTappedColumns();
1015 Ui::RtpPlayerDialog *ui;