📄 streamout.cpp
字号:
wxT("32"), wxT("16") };*/ static const wxString vscales_array[] = { wxT("0.25"), wxT("0.5"), wxT("0.75"), wxT("1"), wxT("1.25"), wxT("1.5"), wxT("1.75"), wxT("2") }; wxFlexGridSizer *video_sizer = new wxFlexGridSizer( 6, 1, 20 );#if defined( __WXMSW__ ) wxFlexGridSizer *video_sub_sizer = new wxFlexGridSizer( 4, 5, 20 );#else wxFlexGridSizer *video_sub_sizer = new wxFlexGridSizer( 2, 5, 20 );#endif video_transc_checkbox = new wxCheckBox( panel, VideoTranscEnable_Event, wxU(_("Video codec"))); video_codec_combo = new wxComboBox( panel, VideoTranscCodec_Event, wxvcodecs_array[2], wxPoint(20,25), wxDefaultSize, WXSIZEOF(wxvcodecs_array), wxvcodecs_array, wxCB_READONLY ); video_codec_combo->SetSelection(2); wxStaticText *bitrate_label = new wxStaticText( panel, -1, wxU(_("Bitrate (kb/s)"))); video_bitrate_combo = new wxComboBox( panel, VideoTranscBitrate_Event, wxT("1024"), wxPoint(20,25), wxDefaultSize, WXSIZEOF(vbitrates_array), vbitrates_array ); wxStaticText *scale_label = new wxStaticText( panel, -1, wxU(_("Scale"))); video_scale_combo = new wxComboBox( panel, VideoTranscScale_Event, wxT("1"), wxPoint(20,25), wxDefaultSize, WXSIZEOF(vscales_array), vscales_array ); video_sizer->Add( video_transc_checkbox, 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL ); video_sizer->Add( video_codec_combo, 1, wxEXPAND | wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL ); video_sub_sizer->Add( bitrate_label, 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL ); video_sub_sizer->Add( video_bitrate_combo, 1, wxEXPAND | wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL ); video_sub_sizer->Add( scale_label, 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL ); video_sub_sizer->Add( video_scale_combo, 1, wxEXPAND | wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL ); video_sizer->Add( video_sub_sizer, 1, wxEXPAND | wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL ); /* Create audio transcoding checkox */ static const wxString wxacodecs_array[] = { wxT("mpga"), wxT("mp2a"), wxT("mp3"), wxT("mp4a"), wxT("a52"), wxT("vorb"), wxT("flac"), wxT("spx"), wxT("s16l"), wxT("fl32") }; static const wxString achannels_array[] = { wxT("1"), wxT("2"), wxT("4"), wxT("6") };/* static const wxString abitrates_array[] = { wxT("512"), wxT("256"), wxT("192"), wxT("128"), wxT("96"), wxT("64"), wxT("32"), wxT("16") };*/ wxFlexGridSizer *audio_sizer = new wxFlexGridSizer( 3, 1, 20 ); audio_transc_checkbox = new wxCheckBox( panel, AudioTranscEnable_Event, wxU(_("Audio codec"))); audio_codec_combo = new wxComboBox( panel, AudioTranscCodec_Event, wxacodecs_array[0], wxPoint(10,25), wxDefaultSize, WXSIZEOF(wxacodecs_array), wxacodecs_array, wxCB_READONLY ); audio_codec_combo->SetSelection(0);#if defined( __WXMSW__ ) wxFlexGridSizer *audio_sub_sizer = new wxFlexGridSizer( 4, 5, 20 );#else wxFlexGridSizer *audio_sub_sizer = new wxFlexGridSizer( 2, 5, 20 );#endif bitrate_label = new wxStaticText( panel, -1, wxU(_("Bitrate (kb/s)"))); audio_bitrate_combo = new wxComboBox( panel, AudioTranscBitrate_Event, wxT("192"), wxPoint(10,25), wxDefaultSize, WXSIZEOF(abitrates_array), abitrates_array ); wxStaticText *channels_label = new wxStaticText( panel, -1, wxU(_("Channels"))); audio_channels_combo = new wxComboBox( panel, AudioTranscChans_Event, achannels_array[1], wxPoint(10,25), wxDefaultSize, WXSIZEOF(achannels_array), achannels_array ); audio_channels_combo->SetSelection(1); audio_sub_sizer->Add( bitrate_label, 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL ); audio_sub_sizer->Add( audio_bitrate_combo, 1, wxEXPAND | wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL ); audio_sub_sizer->Add( channels_label, 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL ); audio_sub_sizer->Add( audio_channels_combo, 1, wxEXPAND | wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL ); audio_sizer->Add( audio_transc_checkbox, 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL ); audio_sizer->Add( audio_codec_combo, 1, wxEXPAND | wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL ); audio_sizer->Add( audio_sub_sizer, 1, wxEXPAND | wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL ); /* Create subtitles transcoding checkox */ static const wxString wxscodecs_array[] = { wxT("dvbs") }; wxFlexGridSizer *subtitles_sizer = new wxFlexGridSizer( 3, 1, 20 ); subtitles_transc_checkbox = new wxCheckBox( panel, SubtitlesTranscEnable_Event, wxU(_("Subtitles codec"))); subtitles_codec_combo = new wxComboBox( panel, SubtitlesTranscCodec_Event, wxscodecs_array[0], wxPoint(10,25), wxDefaultSize, WXSIZEOF(wxscodecs_array), wxscodecs_array, wxCB_READONLY ); subtitles_codec_combo->SetSelection(0); subtitles_overlay_checkbox = new wxCheckBox( panel, SubtitlesOverlayEnable_Event, wxU(_("Subtitles overlay"))); subtitles_sizer->Add( subtitles_transc_checkbox, 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL ); subtitles_sizer->Add( subtitles_codec_combo, 1, wxEXPAND | wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL ); subtitles_sizer->Add( subtitles_overlay_checkbox, 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL ); /* Stuff everything into the main panel */ panel_sizer->Add( video_sizer, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxALL, 5 ); panel_sizer->Add( audio_sizer, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxALL, 5 ); panel_sizer->Add( subtitles_sizer, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxALL, 5 ); panel->SetSizerAndFit( panel_sizer ); /* Update transcoding panel */ wxCommandEvent event( 0, VideoTranscEnable_Event ); event.SetInt( 0 ); OnTranscodingEnable( event ); event.SetId( AudioTranscEnable_Event ); OnTranscodingEnable( event ); event.SetId( SubtitlesTranscEnable_Event ); OnTranscodingEnable( event ); return panel;}/***************************************************************************** * Events methods. *****************************************************************************/void SoutDialog::OnOk( wxCommandEvent& WXUNUSED(event) ){ mrl_combo->Append( mrl_combo->GetValue() ); EndModal( wxID_OK );}void SoutDialog::OnCancel( wxCommandEvent& WXUNUSED(event) ){ EndModal( wxID_CANCEL );}void SoutDialog::OnMRLChange( wxCommandEvent& event ){ //mrl = event.GetString();}/***************************************************************************** * Access output panel event methods. *****************************************************************************/void SoutDialog::OnAccessTypeChange( wxCommandEvent& event ){ int i; i_access_type = event.GetId() - AccessType1_Event; access_subpanels[i_access_type]->Enable( event.GetInt() ); switch( i_access_type ) { case UDP_ACCESS_OUT: misc_subpanels[ANN_MISC_SOUT]->Enable( event.GetInt() ); for( i = 1; i < ENCAPS_NUM; i++ ) { encapsulation_radios[i]->Enable( !event.GetInt() ); } if( event.GetInt() ) { encapsulation_radios[TS_ENCAPSULATION]->SetValue(true); i_encapsulation_type = TS_ENCAPSULATION; } break; } UpdateMRL();}/***************************************************************************** * AnnounceMisc panel event methods. *****************************************************************************/void SoutDialog::OnSAPMiscChange( wxCommandEvent& event ){ if( !slp_checkbox->IsChecked() ) { announce_addr->Enable( event.GetInt() ); } announce_group->Enable( event.GetInt() ); UpdateMRL();}void SoutDialog::OnSLPMiscChange( wxCommandEvent& event ){ if( !sap_checkbox->IsChecked() ) { announce_addr->Enable( event.GetInt() ); } UpdateMRL();}/***************************************************************************** * SAPAddr panel event methods. *****************************************************************************/void SoutDialog::OnAnnounceAddrChange( wxCommandEvent& WXUNUSED(event) ){ UpdateMRL();}void SoutDialog::OnAnnounceGroupChange( wxCommandEvent& WXUNUSED(event) ){ UpdateMRL();}/***************************************************************************** * File access output event methods. *****************************************************************************/void SoutDialog::OnFileChange( wxCommandEvent& WXUNUSED(event) ){ UpdateMRL();}void SoutDialog::OnFileBrowse( wxCommandEvent& WXUNUSED(event) ){ wxFileDialog dialog( this, wxU(_("Save file")), wxT(""), wxT(""), wxT("*"), wxSAVE | wxOVERWRITE_PROMPT ); if( dialog.ShowModal() == wxID_OK ) { file_combo->SetValue( dialog.GetPath() ); UpdateMRL(); }}void SoutDialog::OnFileDump( wxCommandEvent& event ){ misc_panel->Enable( !event.GetInt() ); encapsulation_panel->Enable( !event.GetInt() ); transcoding_panel->Enable( !event.GetInt() ); for( int i = 0; i < ACCESS_OUT_NUM; i++ ) { if( i != FILE_ACCESS_OUT ) { access_checkboxes[i]->Enable( !event.GetInt() ); access_subpanels[i]->Enable( !event.GetInt() && access_checkboxes[i]->IsChecked() ); } } UpdateMRL();}/***************************************************************************** * Net access output event methods. *****************************************************************************/void SoutDialog::OnNetChange( wxCommandEvent& WXUNUSED(event) ){ UpdateMRL();}/***************************************************************************** * Encapsulation panel event methods. *****************************************************************************/void SoutDialog::OnEncapsulationChange( wxCommandEvent& event ){ i_encapsulation_type = event.GetId() - EncapsulationRadio1_Event; UpdateMRL();}/***************************************************************************** * Transcoding panel event methods. *****************************************************************************/void SoutDialog::OnTranscodingEnable( wxCommandEvent& event ){ switch( event.GetId() ) { case VideoTranscEnable_Event: video_codec_combo->Enable( event.GetInt() ); video_bitrate_combo->Enable( event.GetInt() ); video_scale_combo->Enable( event.GetInt() ); break; case AudioTranscEnable_Event: audio_codec_combo->Enable( event.GetInt() ); audio_bitrate_combo->Enable( event.GetInt() ); audio_channels_combo->Enable( event.GetInt() ); break; case SubtitlesTranscEnable_Event: subtitles_overlay_checkbox->Enable( !event.GetInt() ); subtitles_codec_combo->Enable( event.GetInt() ); break; case SubtitlesOverlayEnable_Event: subtitles_transc_checkbox->Enable( !event.GetInt() ); break; } UpdateMRL();}void SoutDialog::OnTranscodingChange( wxCommandEvent& event ){ UpdateMRL();}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -