]> git.sesse.net Git - vlc/blobdiff - modules/gui/wxwindows/streamout.cpp
* modules/gui/wxwindows/preferences.cpp: windows can't have open _and_ save file...
[vlc] / modules / gui / wxwindows / streamout.cpp
index 1260c5f164f9054e00da07fc19e992822edd2480..ea86acd7d9b7481fbd71ae9af479ccb21b50668a 100644 (file)
@@ -2,7 +2,7 @@
  * streamout.cpp : wxWindows plugin for vlc
  *****************************************************************************
  * Copyright (C) 2000-2001 VideoLAN
- * $Id: streamout.cpp,v 1.16 2003/06/03 22:18:58 gbazin Exp $
+ * $Id: streamout.cpp,v 1.24 2003/07/12 13:33:10 gbazin Exp $
  *
  * Authors: Gildas Bazin <gbazin@netcourrier.com>
  *
@@ -74,11 +74,17 @@ enum
     TS_ENCAPSULATION = 0,
     PS_ENCAPSULATION,
     AVI_ENCAPSULATION,
-    MP4_ENCAPSULATION,
     OGG_ENCAPSULATION,
-    ENCAPS_NUM
+    ENCAPS_NUM,
+    MP4_ENCAPSULATION
 };
 
+enum
+{
+    SAP_MISC = 0
+};
+
+
 /*****************************************************************************
  * Event Table.
  *****************************************************************************/
@@ -103,6 +109,9 @@ enum
 
     VideoTranscEnable_Event, VideoTranscCodec_Event, VideoTranscBitrate_Event,
     AudioTranscEnable_Event, AudioTranscCodec_Event, AudioTranscBitrate_Event,
+    AudioTranscChans_Event,
+
+    SAPMisc_Event, SAPAddr_Event
 };
 
 BEGIN_EVENT_TABLE(SoutDialog, wxDialog)
@@ -142,9 +151,19 @@ BEGIN_EVENT_TABLE(SoutDialog, wxDialog)
     EVT_CHECKBOX(VideoTranscEnable_Event, SoutDialog::OnTranscodingEnable)
     EVT_CHECKBOX(AudioTranscEnable_Event, SoutDialog::OnTranscodingEnable)
     EVT_COMBOBOX(VideoTranscCodec_Event, SoutDialog::OnTranscodingChange)
+    EVT_TEXT(VideoTranscCodec_Event, SoutDialog::OnTranscodingChange)
     EVT_COMBOBOX(AudioTranscCodec_Event, SoutDialog::OnTranscodingChange)
+    EVT_TEXT(AudioTranscCodec_Event, SoutDialog::OnTranscodingChange)
     EVT_COMBOBOX(VideoTranscBitrate_Event, SoutDialog::OnTranscodingChange)
+    EVT_TEXT(VideoTranscBitrate_Event, SoutDialog::OnTranscodingChange)
     EVT_COMBOBOX(AudioTranscBitrate_Event, SoutDialog::OnTranscodingChange)
+    EVT_TEXT(AudioTranscBitrate_Event, SoutDialog::OnTranscodingChange)
+    EVT_COMBOBOX(AudioTranscChans_Event, SoutDialog::OnTranscodingChange)
+    EVT_TEXT(AudioTranscChans_Event, SoutDialog::OnTranscodingChange)
+
+    /* Events generated by the misc panel */
+    EVT_CHECKBOX(SAPMisc_Event, SoutDialog::OnSAPMiscChange)
+    EVT_TEXT(SAPAddr_Event, SoutDialog::OnSAPAddrChange)
 
 END_EVENT_TABLE()
 
@@ -191,6 +210,9 @@ SoutDialog::SoutDialog( intf_thread_t *_p_intf, wxWindow* _p_parent ):
     /* Create the transcoding panel */
     wxPanel *transcoding_panel = TranscodingPanel( panel );
 
+    /* Create the Misc panel */
+    wxPanel *misc_panel = MiscPanel( panel );
+    
     /* Separation */
     wxStaticLine *static_line = new wxStaticLine( panel, wxID_OK );
 
@@ -211,6 +233,7 @@ SoutDialog::SoutDialog( intf_thread_t *_p_intf, wxWindow* _p_parent ):
     panel_sizer->Add( access_panel, 1, wxEXPAND | wxALL, 5 );
     panel_sizer->Add( encapsulation_panel, 0, wxEXPAND | wxALL, 5 );
     panel_sizer->Add( transcoding_panel, 0, wxEXPAND | wxALL, 5 );
+    panel_sizer->Add( misc_panel, 0, wxEXPAND | wxALL, 5 );
     panel_sizer->Add( static_line, 0, wxEXPAND | wxALL, 5 );
     panel_sizer->Add( button_sizer, 0, wxALIGN_LEFT | wxALIGN_BOTTOM |
                       wxALL, 5 );
@@ -246,6 +269,7 @@ void SoutDialog::UpdateMRL()
         {
             transcode += wxT("acodec=") + audio_codec_combo->GetValue();
             transcode += wxT(",ab=") + audio_bitrate_combo->GetValue();
+            transcode += wxT(",channels=") + audio_channels_combo->GetValue();
         }
         transcode += wxT("}");
     }
@@ -282,8 +306,8 @@ void SoutDialog::UpdateMRL()
     {
         if( !dup_opts.IsEmpty() ) dup_opts += wxT(",");
         dup_opts += wxT("dst=std{access=file,mux=");
-        dup_opts += encapsulation + wxT(",url=");
-        dup_opts += file_combo->GetValue() + wxT("}");
+        dup_opts += encapsulation + wxT(",url=\"");
+        dup_opts += file_combo->GetValue() + wxT("\"}");
     }
     if( access_checkboxes[HTTP_ACCESS_OUT]->IsChecked() )
     {
@@ -303,6 +327,15 @@ void SoutDialog::UpdateMRL()
         dup_opts += net_addrs[UDP_ACCESS_OUT]->GetLineText(0);
         dup_opts += wxString::Format( wxT(":%d"),
                                       net_ports[UDP_ACCESS_OUT]->GetValue() );
+
+        /* SAP only if UDP */
+        if( sap_checkbox->IsChecked() )
+        {
+            dup_opts += wxT(",sap=\"");
+            dup_opts += sap_addr->GetLineText(0);
+            dup_opts += wxT("\"");
+        }
+
         dup_opts += wxT("}");
     }
     if( access_checkboxes[RTP_ACCESS_OUT]->IsChecked() )
@@ -436,6 +469,53 @@ wxPanel *SoutDialog::AccessPanel( wxWindow* parent )
     return panel;
 }
 
+wxPanel *SoutDialog::MiscPanel( wxWindow* parent )
+{
+    wxPanel *panel = new wxPanel( parent, -1, wxDefaultPosition,
+                                  wxSize(200, 200) );
+
+    // wxFlexGridSizer *sizer = new wxFlexGridSizer( 2, 4, 20 );
+    wxStaticBox *panel_box = new wxStaticBox( panel, -1,
+                                   wxU(_("Miscellaneous Options")) );
+    wxStaticBoxSizer *panel_sizer = new wxStaticBoxSizer( panel_box,
+                                                          wxVERTICAL );
+
+    /* SAP Row */
+    wxStaticText *label;
+    wxFlexGridSizer *subpanel_sizer;
+
+    misc_subpanels[SAP_MISC] = new wxPanel( panel, -1 );
+    subpanel_sizer = new wxFlexGridSizer( 4, 2, 20 );
+
+    sap_checkbox = new wxCheckBox( misc_subpanels[SAP_MISC], SAPMisc_Event,
+                                   wxU(_("SAP Announce")) );
+    label = new wxStaticText( misc_subpanels[SAP_MISC], -1,
+                              wxU(_("Channel Name ")) );
+    sap_addr = new wxTextCtrl( misc_subpanels[SAP_MISC], SAPAddr_Event,
+                               wxT(""), wxDefaultPosition,
+                               wxSize( 200, -1 ), wxTE_PROCESS_ENTER);
+
+    subpanel_sizer->Add( sap_checkbox, 0,
+                         wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL );
+    subpanel_sizer->Add( label, 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL );
+    subpanel_sizer->Add( sap_addr, 1, wxEXPAND |
+                         wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL );
+
+    misc_subpanels[SAP_MISC]->SetSizerAndFit( subpanel_sizer );
+
+    /* Stuff everything into the main panel */
+    panel_sizer->Add( misc_subpanels[SAP_MISC], 1,
+                      wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxALL, 5 );
+
+    panel->SetSizerAndFit( panel_sizer );
+
+    /* Update misc panel */
+    misc_subpanels[SAP_MISC]->Disable();
+    sap_addr->Disable();
+
+    return panel;
+} 
+
 wxPanel *SoutDialog::EncapsulationPanel( wxWindow* parent )
 {
     int i;
@@ -452,8 +532,8 @@ wxPanel *SoutDialog::EncapsulationPanel( wxWindow* parent )
         wxT("MPEG TS"),
         wxT("MPEG PS"),
         wxT("AVI"),
-        wxT("MP4/MOV"),
-        wxT("Ogg")
+        wxT("Ogg"),
+        wxT("MP4/MOV")
     };
 
     /* Stuff everything into the main panel */
@@ -496,6 +576,8 @@ wxPanel *SoutDialog::TranscodingPanel( wxWindow* parent )
         wxT("H263"),
         wxT("I263"),
         wxT("WMV1"),
+        wxT("WMV2"),
+        wxT("MJPG")
     };
     static const wxString vbitrates_array[] =
     {
@@ -514,9 +596,10 @@ wxPanel *SoutDialog::TranscodingPanel( wxWindow* parent )
     video_transc_checkbox =
         new wxCheckBox( panel, VideoTranscEnable_Event, wxU(_("Video codec")));
     video_codec_combo =
-        new wxComboBox( panel, VideoTranscCodec_Event, wxT("mp4v"),
+        new wxComboBox( panel, VideoTranscCodec_Event, wxT(""),
                         wxPoint(20,25), wxDefaultSize, WXSIZEOF(vcodecs_array),
                         vcodecs_array, wxCB_READONLY );
+    video_codec_combo->SetSelection(1);
     wxStaticText *bitrate_label =
         new wxStaticText( panel, -1, wxU(_("Bitrate (kb/s)")));
     video_bitrate_combo =
@@ -536,7 +619,9 @@ wxPanel *SoutDialog::TranscodingPanel( wxWindow* parent )
     static const wxString acodecs_array[] =
     {
         wxT("mpga"),
-        wxT("a52")
+        wxT("mp3"),
+        wxT("a52"),
+        wxT("vorb")
     };
     static const wxString abitrates_array[] =
     {
@@ -546,27 +631,50 @@ wxPanel *SoutDialog::TranscodingPanel( wxWindow* parent )
         wxT("128"),
         wxT("96")
     };
+    static const wxString achannels_array[] =
+    {
+        wxT("1"),
+        wxT("2"),
+        wxT("4"),
+        wxT("6")
+    };
 
-    wxFlexGridSizer *audio_sizer = new wxFlexGridSizer( 4, 1, 20 );
+    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, wxT("mpga"),
-                        wxPoint(20,25), wxDefaultSize, WXSIZEOF(acodecs_array),
+        new wxComboBox( panel, AudioTranscCodec_Event, wxT(""),
+                        wxPoint(10,25), wxDefaultSize, WXSIZEOF(acodecs_array),
                         acodecs_array, wxCB_READONLY );
+    audio_codec_combo->SetSelection(0);
+    wxFlexGridSizer *audio_sub_sizer = new wxFlexGridSizer( 2, 5, 20 );
     bitrate_label =
         new wxStaticText( panel, -1, wxU(_("Bitrate (kb/s)")));
     audio_bitrate_combo =
         new wxComboBox( panel, AudioTranscBitrate_Event, wxT("192"),
-                        wxPoint(20,25), wxDefaultSize,
+                        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, wxT(""),
+                        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( bitrate_label, 0,
-                      wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL );
-    audio_sizer->Add( audio_bitrate_combo, 1,
+    audio_sizer->Add( audio_sub_sizer, 1,
                       wxEXPAND | wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL );
 
     /* Stuff everything into the main panel */
@@ -595,6 +703,7 @@ void SoutDialog::OnOk( wxCommandEvent& WXUNUSED(event) )
     mrl_combo->Append( mrl_combo->GetValue() );
     mrl = mrl_combo->GetValue();
     EndModal( wxID_OK );
+    
 }
 
 void SoutDialog::OnCancel( wxCommandEvent& WXUNUSED(event) )
@@ -620,6 +729,8 @@ void SoutDialog::OnAccessTypeChange( wxCommandEvent& event )
     switch( i_access_type )
     {
     case UDP_ACCESS_OUT:
+        misc_subpanels[SAP_MISC]->Enable( event.GetInt() );
+
     case RTP_ACCESS_OUT:
         for( i = 1; i < ENCAPS_NUM; i++ )
         {
@@ -632,7 +743,23 @@ void SoutDialog::OnAccessTypeChange( wxCommandEvent& event )
         }
         break;
     }
+    UpdateMRL();
+}
+
+/*****************************************************************************
+ * SAPMisc panel event methods.
+ *****************************************************************************/
+void SoutDialog::OnSAPMiscChange( wxCommandEvent& event )
+{
+    sap_addr->Enable( event.GetInt() );
+    UpdateMRL();
+}
 
+/*****************************************************************************
+ * SAPAddr panel event methods.
+ *****************************************************************************/
+void SoutDialog::OnSAPAddrChange( wxCommandEvent& WXUNUSED(event) )
+{
     UpdateMRL();
 }
 
@@ -646,8 +773,8 @@ void SoutDialog::OnFileChange( wxCommandEvent& WXUNUSED(event) )
 
 void SoutDialog::OnFileBrowse( wxCommandEvent& WXUNUSED(event) )
 {
-    wxFileDialog dialog( this, wxU(_("Save file")),
-                         wxT(""), wxT(""), wxT("*"), wxSAVE );
+    wxFileDialog dialog( this, wxU(_("Save file")), wxT(""), wxT(""), wxT("*"),
+                         wxSAVE | wxOVERWRITE_PROMPT );
 
     if( dialog.ShowModal() == wxID_OK )
     {
@@ -687,6 +814,7 @@ void SoutDialog::OnTranscodingEnable( wxCommandEvent& event )
     case AudioTranscEnable_Event:
         audio_codec_combo->Enable( event.GetInt() );
         audio_bitrate_combo->Enable( event.GetInt() );
+        audio_channels_combo->Enable( event.GetInt() );
         break;
     }