]> git.sesse.net Git - vlc/commitdiff
Try to fix Sout Dialog ( Part 2 )
authorJean-Baptiste Kempf <jb@videolan.org>
Mon, 4 Aug 2008 02:39:57 +0000 (19:39 -0700)
committerJean-Baptiste Kempf <jb@videolan.org>
Mon, 4 Aug 2008 02:39:57 +0000 (19:39 -0700)
Should fix RTP generation and Icecast generation.

modules/gui/qt4/dialogs/sout.cpp
modules/gui/qt4/dialogs/sout.hpp
modules/gui/qt4/ui/sout.ui

index 551fbc1d7edf82bc1cc583c27db7c8a231cabaee..52ef42908ac0d536e2a6e2a9bb1852494fca5e5e 100644 (file)
@@ -64,6 +64,8 @@ struct sout_gui_descr_t
     int32_t i_http;     /*< http port number */
     int32_t i_mms;      /*< mms port number */
     int32_t i_rtp;      /*< rtp port number */
+    int32_t i_rtp_audio;      /*< rtp port number */
+    int32_t i_rtp_video;      /*< rtp port number */
     int32_t i_udp;      /*< udp port number */
     int32_t i_icecast;  /*< icecast port number */
 
@@ -160,28 +162,31 @@ SoutDialog::SoutDialog( QWidget *parent, intf_thread_t *_p_intf,
  #define CT( x ) CONNECT( ui.x, textChanged( const QString ), this, updateMRL() );
  #define CS( x ) CONNECT( ui.x, valueChanged( int ), this, updateMRL() );
  #define CC( x ) CONNECT( ui.x, currentIndexChanged( int ), this, updateMRL() );
-//     /* Output */
+    /* Output */
     CB( fileOutput ); CB( HTTPOutput ); CB( localOutput );
     CB( RTPOutput ); CB( MMSHOutput ); CB( rawInput ); CB( UDPOutput );
     CT( fileEdit ); CT( HTTPEdit ); CT( RTPEdit ); CT( MMSHEdit ); CT( UDPEdit );
     CT( IcecastEdit ); CT( IcecastMountpointEdit ); CT( IcecastNamePassEdit );
-    CS( HTTPPort ); CS( RTPPort ); CS( MMSHPort ); CS( UDPPort );
-//     /* Transcode */
+    CS( HTTPPort ); CS( RTPPort ); CS( RTPPort2 ); CS( MMSHPort ); CS( UDPPort );
+    /* Transcode */
     CC( vCodecBox ); CC( subsCodecBox ); CC( aCodecBox ) ;
     CB( transcodeVideo ); CB( transcodeAudio ); CB( transcodeSubs );
-//     CB( sOverlay );
+    /*   CB( sOverlay ); */
     CS( vBitrateSpin ); CS( aBitrateSpin ); CS( aChannelsSpin ); CC( vScaleBox );
-//     /* Mux */
+    /* Mux */
     CB( PSMux ); CB( TSMux ); CB( MPEG1Mux ); CB( OggMux ); CB( ASFMux );
     CB( MP4Mux ); CB( MOVMux ); CB( WAVMux ); CB( RAWMux ); CB( FLVMux );
-//     /* Misc */
+    /* Misc */
     CB( soutAll ); CS( ttl ); CT( sapName ); CT( sapGroup );
-//
+
     CONNECT( ui.profileBox, activated( const QString & ), this, setOptions() );
     CONNECT( ui.fileSelectButton, clicked() , this, fileBrowse()  );
-    CONNECT( ui.transcodeVideo, toggled( bool ), this, setVTranscodeOptions( bool ) );
-    CONNECT( ui.transcodeAudio, toggled( bool ), this, setATranscodeOptions( bool ) );
-    CONNECT( ui.transcodeSubs, toggled( bool ), this, setSTranscodeOptions( bool ) );
+    CONNECT( ui.transcodeVideo, toggled( bool ),
+            this, setVTranscodeOptions( bool ) );
+    CONNECT( ui.transcodeAudio, toggled( bool ),
+            this, setATranscodeOptions( bool ) );
+    CONNECT( ui.transcodeSubs, toggled( bool ),
+            this, setSTranscodeOptions( bool ) );
     CONNECT( ui.rawInput, toggled( bool ), this, setRawOptions( bool ) );
 
     okButton = new QPushButton( qtr( "&Stream" ) );
@@ -196,7 +201,9 @@ SoutDialog::SoutDialog( QWidget *parent, intf_thread_t *_p_intf,
 
     if( b_transcode_only ) toggleSout();
 
-    CONNECT( ui.UDPOutput, toggled( bool ), this, changeUDPandRTPmess( bool ) );}
+    CONNECT( ui.UDPOutput, toggled( bool ), this, changeUDPandRTPmess( bool ) );
+    CONNECT( ui.RTPOutput, clicked(bool), this, RTPtoggled( bool ) );
+}
 
 void SoutDialog::fileBrowse()
 {
@@ -303,8 +310,34 @@ void SoutDialog::changeUDPandRTPmess( bool b_udp )
     ui.RTPPortLabel->setVisible( !b_udp );
     ui.UDPEdit->setVisible( b_udp );
     ui.UDPLabel->setVisible( b_udp );
-    ui.UDPPortLabel->setText( b_udp ? qtr( "Port:") : qtr( "Video Port:" ) );
-    ui.RTPPortLabel->setText( b_udp ? qtr( "Port:") : qtr( "Audio Port:" ) );
+    ui.UDPPortLabel->setText( b_udp ? qtr( "Port:") : qtr( "Audio Port:" ) );
+    ui.RTPPort2->setVisible( !b_udp );
+    ui.RTPPortLabel2->setVisible( !b_udp );
+}
+
+void SoutDialog::RTPtoggled( bool b_en )
+{
+    if( !b_en )
+    {
+        if( ui.RTPPort->value() == ui.UDPPort->value() )
+        {
+            ui.UDPPort->setValue( ui.UDPPort->value() + 1 );
+        }
+
+        while( ui.RTPPort2->value() == ui.UDPPort->value() ||
+                ui.RTPPort2->value() == ui.RTPPort->value() )
+        {
+            ui.RTPPort2->setValue( ui.RTPPort2->value() + 1 );
+        }
+    }
+    ui.sap->setEnabled( b_en );
+    ui.RTPLabel->setEnabled( b_en );
+    ui.RTPEdit->setEnabled( b_en );
+    ui.UDPOutput->setEnabled( b_en );
+    ui.UDPPort->setEnabled( b_en );
+    ui.UDPPortLabel->setEnabled( b_en );
+    ui.RTPPort2->setEnabled( b_en );
+    ui.RTPPortLabel2->setEnabled( b_en );
 }
 
 void SoutDialog::ok()
@@ -349,7 +382,8 @@ void SoutDialog::updateMRL()
     sout.i_http = ui.HTTPPort->value();
     sout.i_mms = ui.MMSHPort->value();
     sout.i_rtp = ui.RTPPort->value();
-    sout.i_udp = ui.UDPPort->value();
+    sout.i_rtp_audio = sout.i_udp = ui.UDPPort->value();
+    sout.i_rtp_video = ui.RTPPort2->value();
     sout.i_icecast = ui.IcecastPort->value();
     sout.i_ab = ui.aBitrateSpin->value();
     sout.i_vb = ui.vBitrateSpin->value();
@@ -421,12 +455,13 @@ void SoutDialog::updateMRL()
         mrl.append( "}" );
     }
 
+    /* Protocol output */
     if ( sout.b_local || sout.b_file || sout.b_http ||
-         sout.b_mms || sout.b_rtp || sout.b_udp )
+         sout.b_mms || sout.b_rtp || sout.b_udp || sout.b_icecast )
     {
 
-#define ISMORE() if ( more ) mrl.append( "," );
-#define ATLEASTONE() if ( counter ) mrl.append( "dst=" );
+#define ISMORE() if ( more ) mrl.append( "," )
+#define ATLEASTONE() if ( counter ) mrl.append( "dst=" )
 
 #define CHECKMUX() \
        if( sout.psz_mux ) \
@@ -436,32 +471,26 @@ void SoutDialog::updateMRL()
        }
 
         if ( trans )
-        {
             mrl.append( ":" );
-        }
         else
-        {
             mrl = ":sout=#";
-        }
 
         if ( counter )
-        {
             mrl.append( "duplicate{" );
-        }
 
         if ( sout.b_local )
         {
             ISMORE();
-            ATLEASTONE()
-                mrl.append( "display" );
+            ATLEASTONE();
+            mrl.append( "display" );
             more = true;
         }
 
         if ( sout.b_file )
         {
             ISMORE();
-            ATLEASTONE()
-                mrl.append( "std{access=file" );
+            ATLEASTONE();
+            mrl.append( "std{access=file" );
             CHECKMUX();
             mrl.append( ",dst=" );
             mrl.append( sout.psz_file );
@@ -472,8 +501,8 @@ void SoutDialog::updateMRL()
         if ( sout.b_http )
         {
             ISMORE();
-            ATLEASTONE()
-                mrl.append( "std{access=http" );
+            ATLEASTONE();
+            mrl.append( "std{access=http" );
             CHECKMUX();
             mrl.append( ",dst=" );
             mrl.append( sout.psz_http );
@@ -486,8 +515,8 @@ void SoutDialog::updateMRL()
         if ( sout.b_mms )
         {
             ISMORE();
-            ATLEASTONE()
-                mrl.append( "std{access=mmsh" );
+            ATLEASTONE();
+            mrl.append( "std{access=mmsh" );
             CHECKMUX();
             mrl.append( ",dst=" );
             mrl.append( sout.psz_mms );
@@ -500,27 +529,34 @@ void SoutDialog::updateMRL()
         if ( sout.b_rtp )
         {
             ISMORE();
-            ATLEASTONE()
+            ATLEASTONE();
+            if ( sout.b_udp )
+            {
+                mrl.append( "std{access=udp" );
+                CHECKMUX();
+                mrl.append( ",dst=" );
+                mrl.append( sout.psz_udp );
+                mrl.append( ":" );
+                mrl.append( QString::number( sout.i_udp,10 ) );
+            }
+            else
+            {
                 mrl.append( "rtp{" );
-            CHECKMUX();
-            mrl.append( ",dst=" );
-            mrl.append( sout.psz_rtp );
-            mrl.append( ":" );
-            mrl.append( QString::number( sout.i_rtp,10 ) );
-            mrl.append( "}" );
-            more = true;
-        }
+                mrl.append( "dst=" );
+                mrl.append( sout.psz_rtp );
+                CHECKMUX();
+                mrl.append( ",port=" );
+                mrl.append( QString::number( sout.i_rtp,10 ) );
+                if( !sout.psz_mux || strncmp( sout.psz_mux, "ts", 2 ) )
+                {
+                    mrl.append( ",port-audio=" );
+                    mrl.append( QString::number( sout.i_rtp_audio, 10 ) );
+                    mrl.append( ",port-video=" );
+                    mrl.append( QString::number( sout.i_rtp_video, 10 ) );
+                }
+            }
 
-        if ( sout.b_udp )
-        {
-            ISMORE();
-            ATLEASTONE()
-            mrl.append( "std{access=udp" );
-            CHECKMUX();
-            mrl.append( ",dst=" );
-            mrl.append( sout.psz_udp );
-            mrl.append( ":" );
-            mrl.append( QString::number( sout.i_udp,10 ) );
+            /* SAP */
             if ( sout.b_sap )
             {
                 mrl.append( ",sap," );
@@ -531,13 +567,26 @@ void SoutDialog::updateMRL()
                 mrl.append( sout.psz_name );
                 mrl.append( "\"" );
             }
+
             mrl.append( "}" );
             more = true;
         }
 
         if( sout.b_icecast )
         {
-            // TODO
+            ISMORE();
+            ATLEASTONE();
+            mrl.append( "std{access=shout,mux=ogg" );
+            mrl.append( ",dst=" );
+            mrl.append( sout.sa_icecast.psz_username );
+            mrl.append( "@" );
+            mrl.append( sout.psz_icecast );
+            mrl.append( ":" );
+            mrl.append( QString::number( sout.i_icecast, 10 ) );
+            mrl.append( "/" );
+            mrl.append( sout.psz_icecast_mountpoint );
+            mrl.append( "}" );
+            more = true;
         }
 
         if ( counter )
index 8f477960610dcbdcea56dcc264854073e493873c..11af6849b09e8bd71b79f77c9027bb874817cb27 100644 (file)
@@ -87,6 +87,7 @@ private slots:
     void setSTranscodeOptions( bool );
     void setRawOptions( bool );
     void changeUDPandRTPmess( bool );
+    void RTPtoggled( bool );
 };
 
 #endif
index 30f133f66dcc5e2fbb69a23a061f44f025193433..419019fbe697cc870e8b094fda2d8676a17fd179 100644 (file)
@@ -7,7 +7,7 @@
     <x>0</x>
     <y>0</y>
     <width>726</width>
-    <height>782</height>
+    <height>823</height>
    </rect>
   </property>
   <property name="sizePolicy" >
           </property>
          </widget>
         </item>
-        <item row="6" column="0" >
+        <item row="7" column="0" >
          <widget class="QCheckBox" name="IcecastOutput" >
           <property name="text" >
            <string>IceCast</string>
           </property>
          </widget>
         </item>
-        <item row="6" column="1" >
+        <item row="7" column="1" >
          <widget class="QLabel" name="IcecastLabel" >
           <property name="enabled" >
            <bool>false</bool>
           </property>
          </widget>
         </item>
-        <item row="6" column="2" >
+        <item row="7" column="2" >
          <widget class="QLineEdit" name="IcecastEdit" />
         </item>
-        <item row="6" column="3" >
+        <item row="7" column="3" >
          <widget class="QLabel" name="IcecastPortLabel" >
           <property name="enabled" >
            <bool>false</bool>
           </property>
          </widget>
         </item>
-        <item row="6" column="4" >
+        <item row="7" column="4" >
          <widget class="QSpinBox" name="IcecastPort" >
           <property name="enabled" >
            <bool>false</bool>
           </property>
          </widget>
         </item>
-        <item row="7" column="1" >
+        <item row="8" column="1" >
          <widget class="QLabel" name="IcecastMountpointLabel" >
           <property name="enabled" >
            <bool>false</bool>
           </property>
          </widget>
         </item>
-        <item row="7" column="2" >
+        <item row="8" column="2" >
          <widget class="QLineEdit" name="IcecastMountpointEdit" />
         </item>
-        <item row="7" column="3" >
+        <item row="8" column="3" >
          <widget class="QLabel" name="IcecastNameLabel" >
           <property name="enabled" >
            <bool>false</bool>
           </property>
          </widget>
         </item>
-        <item row="7" column="4" >
+        <item row="8" column="4" >
          <widget class="QLineEdit" name="IcecastNamePassEdit" >
           <property name="enabled" >
            <bool>false</bool>
           </property>
          </widget>
         </item>
+        <item row="6" column="4" >
+         <widget class="QSpinBox" name="RTPPort2" >
+          <property name="enabled" >
+           <bool>false</bool>
+          </property>
+          <property name="maximumSize" >
+           <size>
+            <width>90</width>
+            <height>16777215</height>
+           </size>
+          </property>
+          <property name="alignment" >
+           <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+          </property>
+          <property name="accelerated" >
+           <bool>true</bool>
+          </property>
+          <property name="maximum" >
+           <number>65355</number>
+          </property>
+          <property name="value" >
+           <number>1234</number>
+          </property>
+         </widget>
+        </item>
+        <item row="6" column="3" >
+         <widget class="QLabel" name="RTPPortLabel2" >
+          <property name="enabled" >
+           <bool>false</bool>
+          </property>
+          <property name="text" >
+           <string>_("Video Port")</string>
+          </property>
+          <property name="alignment" >
+           <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+          </property>
+         </widget>
+        </item>
+        <item row="6" column="2" >
+         <spacer name="verticalSpacer" >
+          <property name="orientation" >
+           <enum>Qt::Vertical</enum>
+          </property>
+          <property name="sizeType" >
+           <enum>QSizePolicy::MinimumExpanding</enum>
+          </property>
+          <property name="sizeHint" stdset="0" >
+           <size>
+            <width>20</width>
+            <height>29</height>
+           </size>
+          </property>
+         </spacer>
+        </item>
        </layout>
       </item>
      </layout>
    <item row="3" column="0" colspan="2" >
     <widget class="QTabWidget" name="tabWidget" >
      <property name="currentIndex" >
-      <number>1</number>
+      <number>0</number>
      </property>
      <widget class="QWidget" name="muxer" >
       <property name="geometry" >
         <x>0</x>
         <y>0</y>
         <width>704</width>
-        <height>148</height>
+        <height>154</height>
        </rect>
       </property>
       <attribute name="title" >
         <x>0</x>
         <y>0</y>
         <width>704</width>
-        <height>148</height>
+        <height>154</height>
        </rect>
       </property>
       <attribute name="title" >
         <x>0</x>
         <y>0</y>
         <width>704</width>
-        <height>148</height>
+        <height>154</height>
        </rect>
       </property>
       <attribute name="title" >
         <x>0</x>
         <y>0</y>
         <width>704</width>
-        <height>148</height>
+        <height>154</height>
        </rect>
       </property>
       <attribute name="title" >
  </widget>
  <resources/>
  <connections>
-  <connection>
-   <sender>RTPOutput</sender>
-   <signal>clicked(bool)</signal>
-   <receiver>sap</receiver>
-   <slot>setEnabled(bool)</slot>
-   <hints>
-    <hint type="sourcelabel" >
-     <x>68</x>
-     <y>175</y>
-    </hint>
-    <hint type="destinationlabel" >
-     <x>80</x>
-     <y>467</y>
-    </hint>
-   </hints>
-  </connection>
-  <connection>
-   <sender>RTPOutput</sender>
-   <signal>clicked(bool)</signal>
-   <receiver>RTPLabel</receiver>
-   <slot>setEnabled(bool)</slot>
-   <hints>
-    <hint type="sourcelabel" >
-     <x>58</x>
-     <y>174</y>
-    </hint>
-    <hint type="destinationlabel" >
-     <x>147</x>
-     <y>184</y>
-    </hint>
-   </hints>
-  </connection>
-  <connection>
-   <sender>RTPOutput</sender>
-   <signal>clicked(bool)</signal>
-   <receiver>RTPEdit</receiver>
-   <slot>setEnabled(bool)</slot>
-   <hints>
-    <hint type="sourcelabel" >
-     <x>63</x>
-     <y>186</y>
-    </hint>
-    <hint type="destinationlabel" >
-     <x>244</x>
-     <y>186</y>
-    </hint>
-   </hints>
-  </connection>
   <connection>
    <sender>MMSHOutput</sender>
    <signal>clicked(bool)</signal>
     </hint>
    </hints>
   </connection>
+  <connection>
+   <sender>RTPOutput</sender>
+   <signal>clicked(bool)</signal>
+   <receiver>RTPPort2</receiver>
+   <slot>setEnabled(bool)</slot>
+   <hints>
+    <hint type="sourcelabel" >
+     <x>110</x>
+     <y>190</y>
+    </hint>
+    <hint type="destinationlabel" >
+     <x>597</x>
+     <y>260</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>RTPOutput</sender>
+   <signal>clicked(bool)</signal>
+   <receiver>RTPPortLabel2</receiver>
+   <slot>setEnabled(bool)</slot>
+   <hints>
+    <hint type="sourcelabel" >
+     <x>110</x>
+     <y>190</y>
+    </hint>
+    <hint type="destinationlabel" >
+     <x>497</x>
+     <y>260</y>
+    </hint>
+   </hints>
+  </connection>
  </connections>
 </ui>