]> git.sesse.net Git - vlc/commitdiff
Qt4 - Optimization of mrl generator. Only needed things are generated.
authorJean-Baptiste Kempf <jb@videolan.org>
Thu, 6 Sep 2007 17:59:36 +0000 (17:59 +0000)
committerJean-Baptiste Kempf <jb@videolan.org>
Thu, 6 Sep 2007 17:59:36 +0000 (17:59 +0000)
patch by Jean-François Massol

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

index 37ac552b561ec6cdf2f1ca2af4245771f98d81e1..c2fef2ff99893b18e862a53e3d900a45c065aa61 100644 (file)
@@ -89,7 +89,7 @@ SoutDialog::SoutDialog( QWidget *parent, intf_thread_t *_p_intf,
                                                 "when you change the above settings,\n but you can update it manually." ) ) ;
 
 //     /* Connect everything to the updateMRL function */
- #define CB( x ) CONNECT( ui.x, clicked( bool ), this, updateMRL() );
+ #define CB( x ) CONNECT( ui.x, toggled( bool ), this, updateMRL() );
  #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() );
@@ -129,6 +129,11 @@ SoutDialog::SoutDialog( QWidget *parent, intf_thread_t *_p_intf,
     if( b_transcode_only ) toggleSout();
 }
 
+QString SoutDialog::getMrl()
+{
+    return this->mrl;
+}
+
 void SoutDialog::fileBrowse()
 {
     ui.tabWidget->setTabEnabled( 0,false );
@@ -256,6 +261,7 @@ void SoutDialog::updateMRL()
 {
     sout_gui_descr_t sout;
     memset( &sout, 0, sizeof( sout_gui_descr_t ) );
+    int counter = 0;
 
     sout.b_local = ui.localOutput->isChecked();
     sout.b_file = ui.fileOutput->isChecked();
@@ -281,6 +287,22 @@ void SoutDialog::updateMRL()
     sout.psz_group = strdup( qtu( ui.sapGroup->text() ) );
     sout.psz_name = strdup( qtu( ui.sapName->text() ) );
 
+#define COUNT() \
+{ \
+    if ( sout.b_local ) \
+        counter += 1; \
+    if ( sout.b_file ) \
+        counter += 1; \
+    if ( sout.b_http ) \
+        counter += 1; \
+    if ( sout.b_mms ) \
+        counter += 1; \
+    if ( sout.b_udp ) \
+        counter += 1; \
+}
+
+COUNT()
+
 #define SMUX( x, txt ) if( ui.x->isChecked() ) sout.psz_mux = strdup( txt );
     SMUX( PSMux, "ps" );
     SMUX( TSMux, "ts" );
@@ -340,26 +362,39 @@ void SoutDialog::updateMRL()
 
 #define ISMORE() if ( more ) mrl.append( "," );
 
-        if ( trans )
-        {
-            mrl.append( ":duplicate{" );
+#define ATLEASTONE() \
+        if ( counter > 1 ) \
+        { \
+            mrl.append( "dst=" ); \
         }
-        else
+
+    if ( trans )
+    {
+        mrl.append( ":" );
+    }
+    else
         {
             mrl = ":sout=#";
         }
 
+        if ( counter > 1 )
+        {
+            mrl.append( "duplicate{" );
+        }
+
         if ( sout.b_local )
         {
             ISMORE();
-            mrl.append( "dst=display" );
+            ATLEASTONE()
+            mrl.append( "display" );
             more = true;
         }
 
         if ( sout.b_file )
         {
             ISMORE();
-            mrl.append( "dst=std{access=file,mux=" );
+        ATLEASTONE()
+            mrl.append( "std{access=file,mux=" );
             mrl.append( sout.psz_mux );
             mrl.append( ",dst=" );
             mrl.append( sout.psz_file );
@@ -370,7 +405,8 @@ void SoutDialog::updateMRL()
         if ( sout.b_http )
         {
             ISMORE();
-            mrl.append( "dst=std{access=http,mux=" );
+            ATLEASTONE()
+            mrl.append( "std{access=http,mux=" );
             mrl.append( sout.psz_mux );
             mrl.append( ",dst=" );
             mrl.append( sout.psz_http );
@@ -383,7 +419,8 @@ void SoutDialog::updateMRL()
         if ( sout.b_mms )
         {
             ISMORE();
-            mrl.append( "dst=std{access=mmsh,mux=" );
+            ATLEASTONE()
+            mrl.append( "std{access=mmsh,mux=" );
             mrl.append( sout.psz_mux );
             mrl.append( ",dst=" );
             mrl.append( sout.psz_mms );
@@ -396,7 +433,8 @@ void SoutDialog::updateMRL()
         if ( sout.b_udp )
         {
             ISMORE();
-            mrl.append( "dst=std{access=udp,mux=" );
+            ATLEASTONE()
+            mrl.append( "std{access=udp,mux=" );
             mrl.append( sout.psz_mux );
             mrl.append( ",dst=" );
             mrl.append( sout.psz_udp );
@@ -416,7 +454,7 @@ void SoutDialog::updateMRL()
             more = true;
         }
 
-        if ( trans )
+        if ( counter > 1 )
         {
             mrl.append( "}" );
         }
index 46463f58a3a134a22a102f5588f451f2812950ad..3137d8cc9a5b73e08101e166ab30f6a7d574c9bc 100644 (file)
@@ -43,6 +43,7 @@ public:
                 bool _transcode_only = false );
     virtual ~SoutDialog() {}
 
+    QString getMrl();
     QString mrl;
     //sout_gui_descr_t *sout;
 private:
index 9a6cc3b49e635a20518dc963e8994cf8a6bb6ae3..47d1b8ec2e9cf4138ce13ef679f57fc2cc32fcf9 100644 (file)
@@ -400,7 +400,7 @@ void DialogsProvider::streamingDialog( QString mrl, bool b_transcode_only )
         /* Just do it */
         int i_len = strlen( qtu(s->mrl) ) + 10;
         char *psz_option = (char*)malloc(i_len);
-        snprintf( psz_option, i_len - 1, ":sout=%s", qtu(s->mrl));
+        snprintf( psz_option, i_len - 1, "%s", qtu(s->mrl));
 
         playlist_AddExt( THEPL, qtu( mrl ), "Streaming",
                          PLAYLIST_APPEND | PLAYLIST_GO, PLAYLIST_END,