Changeset 23a9ce0d2ee1a74079e77a11b1316f9b277c4205

Show
Ignore:
Timestamp:
06/09/07 03:56:02 (1 year ago)
Author:
Jean-Baptiste Kempf <jb@videolan.org>
git-committer:
Jean-Baptiste Kempf <jb@videolan.org> 1189043762 +0000
git-parent:

[038dc1cafb4390eaba755bd60aa9d7c1d079cd6e]

git-author:
Jean-Baptiste Kempf <jb@videolan.org> 1189043762 +0000
Message:

Qt4 - Sout: add functions to choose some predefined profiles for audio/video codecs.
Only basics options are done ( AVCodec + Muxer mainly ).
Two profiles are done. If you want to add more, then search "ADD HERE" in sout.cpp.
Reindentation of older code.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • modules/gui/qt4/dialogs/sout.cpp

    r038dc1c r23a9ce0  
    66 * 
    77 * Authors: Clément Stenac <zorglub@videolan.org> 
     8 *          Jean-Baptiste Kempf <jb@videolan.org> 
     9 *          Jean-François Massol <jf.massol -at- gmail.com> 
    810 * 
    911 * This program is free software; you can redistribute it and/or modify 
     
    3840    ui.setupUi( this ); 
    3941 
    40 #define ADD_PROFILE( name ) ui.profileBox->addItem( name ); 
    41     ADD_PROFILE( "Custom" )   
    42     ADD_PROFILE( "IPod" ) 
    43     ADD_PROFILE( "XBox" ) 
    44     ADD_PROFILE( "Windows" ) 
    45     ADD_PROFILE( "PSP" ) 
    46     ADD_PROFILE( "GSM" )     
     42/* ADD HERE for new profiles */ 
     43#define ADD_PROFILE( name, shortname ) ui.profileBox->addItem( qtr( name ), QVariant( QString( shortname ) ) ); 
     44    ADD_PROFILE( "Custom" , "Custom" ) 
     45    ADD_PROFILE( "IPod (mp4/aac)", "IPod" ) 
     46    ADD_PROFILE( "XBox", "XBox" ) 
     47    ADD_PROFILE( "Windows (wmv/asf)", "Windows" ) 
     48    ADD_PROFILE( "PSP", "PSP") 
     49    ADD_PROFILE( "GSM", "GSM" ) 
    4750 
    4851#define ADD_VCODEC( name, fourcc ) ui.vCodecBox->addItem( name, QVariant( fourcc ) ); 
     
    8184    ADD_SCALING( "2" ) 
    8285 
    83     ui.mrlEdit->setToolTip ( qtr( "Stream output string.\n This is automatically generated when you change the above settings,\n but you can update it manually." ) ) ; 
     86    ui.mrlEdit->setToolTip ( qtr( "Stream output string.\n This is automatically generated " 
     87                                                "when you change the above settings,\n but you can update it manually." ) ) ; 
    8488 
    8589//     /* Connect everything to the updateMRL function */ 
     
    125129 
    126130void SoutDialog::fileBrowse() 
    127 {ui.tabWidget->setTabEnabled( 0,false ); 
     131
     132    ui.tabWidget->setTabEnabled( 0,false ); 
    128133    QString f = QFileDialog::getOpenFileName( this, qtr( "Save file" ), "", "" ); 
    129134    ui.fileEdit->setText( f ); 
     
    137142    ui.vBitrateLabel->setEnabled( b_trans ); 
    138143    ui.vBitrateSpin->setEnabled( b_trans ); 
    139     ui.vScaleLabel->setEnabled( b_trans );        
     144    ui.vScaleLabel->setEnabled( b_trans ); 
    140145    ui.vScaleBox->setEnabled( b_trans ); 
    141146} 
     
    169174} 
    170175 
     176int indexFromItemData( QComboBox *aCombo, QString aString ) 
     177{ 
     178    for( int i=0; i < aCombo->count(); i++ ) 
     179    { 
     180        if( aCombo->itemData( i ).toString() == aString ) return i; 
     181    } 
     182    return -1; 
     183} 
     184 
    171185void SoutDialog::setOptions() 
    172186{ 
    173     /* The test is currently done with a QString, it could be done with the index, it'd depend how translation works */ 
    174     if ( ui.profileBox->currentText() == "Custom" ) 
    175     { 
    176         ui.tabWidget->setEnabled( true ); 
    177     } 
    178     else 
    179     { 
    180         ui.tabWidget->setDisabled( true ); 
    181     } 
     187    QString profileString = ui.profileBox->itemData( ui.profileBox->currentIndex() ).toString(); 
     188    msg_Dbg( p_intf, "Profile Used: %s",  qta( profileString )); 
     189    int index; 
     190 
     191#define setProfile( muxName, hasVideo, vCodecName, hasAudio, aCodecName ) \ 
     192    { \ 
     193        ui.muxName ##Mux->setChecked( true ); \ 
     194        \ 
     195        ui.transcodeAudio->setChecked( hasAudio ); \ 
     196        index = indexFromItemData( ui.aCodecBox, vCodecName );  \ 
     197        if( index >= 0 ) ui.aCodecBox->setCurrentIndex( index ); \ 
     198        \ 
     199        ui.transcodeVideo->setChecked( hasVideo ); \ 
     200        index = indexFromItemData( ui.aCodecBox, vCodecName );  \ 
     201        if( index >=0 ) ui.vCodecBox->setCurrentIndex( index ); \ 
     202    } 
     203 
     204    /* ADD HERE the profiles you want and need */ 
     205    if( profileString == "IPod" ) setProfile( MP4, true, "mp4a", true, "mp4v" ) 
     206    else if( profileString == "XBox" ) setProfile( ASF, true, "wma", true, "WMV2" ) 
     207 
     208        /* If the profile is not a custom one, then disable the tabWidget */ 
     209        if ( profileString == "Custom" ) 
     210        { 
     211            ui.tabWidget->setEnabled( true ); 
     212        } 
     213        else 
     214        { 
     215            ui.tabWidget->setDisabled( true ); 
     216        } 
     217 
     218    /* Update the MRL !! */ 
     219    updateMRL(); 
    182220} 
    183221 
    184222void SoutDialog::toggleSout() 
    185223{ 
    186 #define TGV( x ) { \ 
    187      if( ( x->isHidden() ) )  \ 
     224    #define TGV( x ) { \ 
     225        if( ( x->isHidden() ) )  \ 
    188226        x->show();          \ 
    189      else  x->hide();\ 
    190 
    191  TGV( ui.HTTPOutput ) ; TGV( ui.UDPOutput ) ; TGV( ui.MMSHOutput ) ; 
    192  TGV( ui.HTTPEdit ) ; TGV( ui.UDPEdit ) ; TGV( ui.MMSHEdit ) ; 
    193  TGV( ui.HTTPLabel ) ; TGV( ui.UDPLabel ) ; TGV( ui.MMSHLabel ) ; 
    194  TGV( ui.HTTPPortLabel ) ; TGV( ui.UDPPortLabel ) ; TGV( ui.MMSHPortLabel ) ; 
    195  TGV( ui.HTTPPort ) ; TGV( ui.UDPPort ) ; TGV( ui.MMSHPort ) ; 
    196  updateGeometry(); 
     227        else  x->hide();\ 
     228   
     229    TGV( ui.HTTPOutput ) ; TGV( ui.UDPOutput ) ; TGV( ui.MMSHOutput ) ; 
     230    TGV( ui.HTTPEdit ) ; TGV( ui.UDPEdit ) ; TGV( ui.MMSHEdit ) ; 
     231    TGV( ui.HTTPLabel ) ; TGV( ui.UDPLabel ) ; TGV( ui.MMSHLabel ) ; 
     232    TGV( ui.HTTPPortLabel ) ; TGV( ui.UDPPortLabel ) ; TGV( ui.MMSHPortLabel ) ; 
     233    TGV( ui.HTTPPort ) ; TGV( ui.UDPPort ) ; TGV( ui.MMSHPort ) ; 
     234    updateGeometry(); 
    197235} 
    198236 
     
    238276 
    239277#define SMUX( x, txt ) if( ui.x->isChecked() ) sout.psz_mux = strdup( txt ); 
    240         SMUX( PSMux, "ps" ); 
    241         SMUX( TSMux, "ts" ); 
    242         SMUX( MPEG1Mux, "mpeg" ); 
    243         SMUX( OggMux, "ogg" ); 
    244         SMUX( ASFMux, "asf" ); 
    245         SMUX( MP4Mux, "mp4" ); 
    246         SMUX( MOVMux, "mov" ); 
    247         SMUX( WAVMux, "wav" ); 
    248         SMUX( RAWMux, "raw" ); 
    249         SMUX( FLVMux, "flv" ); 
     278    SMUX( PSMux, "ps" ); 
     279    SMUX( TSMux, "ts" ); 
     280    SMUX( MPEG1Mux, "mpeg" ); 
     281    SMUX( OggMux, "ogg" ); 
     282    SMUX( ASFMux, "asf" ); 
     283    SMUX( MP4Mux, "mp4" ); 
     284    SMUX( MOVMux, "mov" ); 
     285    SMUX( WAVMux, "wav" ); 
     286    SMUX( RAWMux, "raw" ); 
     287    SMUX( FLVMux, "flv" ); 
    250288 
    251289    bool trans = false; 
    252290    bool more = false; 
    253291 
    254 if ( ui.transcodeVideo->isChecked() || ui.transcodeAudio->isChecked() ) 
    255 
    256      if ( ui.transcodeVideo->isChecked() ) 
    257      { 
    258         mrl = ":sout=#transcode{"; 
    259          mrl.append( "vcodec=" ); 
    260         mrl.append( sout.psz_vcodec ); 
    261         mrl.append( "," ); 
    262         mrl.append( "vb=" ); 
    263         mrl.append( QString::number( sout.i_vb,10 ) ); 
    264         mrl.append( "," ); 
    265         mrl.append( "scale=" ); 
    266         mrl.append( QString::number( sout.f_scale ) ); 
    267         trans = true; 
    268      } 
    269  
    270     if ( ui.transcodeAudio->isChecked() ) 
     292    if ( ui.transcodeVideo->isChecked() || ui.transcodeAudio->isChecked() ) 
    271293    { 
    272         if ( trans ) 
    273         { 
     294        if ( ui.transcodeVideo->isChecked() ) 
     295        { 
     296            mrl = ":sout=#transcode{"; 
     297            mrl.append( "vcodec=" ); 
     298            mrl.append( sout.psz_vcodec ); 
    274299            mrl.append( "," ); 
    275         } 
    276         else 
    277         { 
    278             mrl = ":sout=#transcode{"; 
    279         } 
    280         mrl.append( "acodec=" ); 
    281         mrl.append( sout.psz_acodec ); 
    282         mrl.append( "," ); 
    283         mrl.append( "ab=" ); 
    284         mrl.append( QString::number( sout.i_ab,10 ) ); 
    285         mrl.append( "," ); 
    286         mrl.append( "channels=" ); 
    287         mrl.append( QString::number( sout.i_channels,10 ) ); 
    288         trans = true; 
    289     } 
    290     mrl.append( "}" ); 
    291 
     300            mrl.append( "vb=" ); 
     301            mrl.append( QString::number( sout.i_vb,10 ) ); 
     302            mrl.append( "," ); 
     303            mrl.append( "scale=" ); 
     304            mrl.append( QString::number( sout.f_scale ) ); 
     305            trans = true; 
     306        } 
     307 
     308        if ( ui.transcodeAudio->isChecked() ) 
     309        { 
     310            if ( trans ) 
     311            { 
     312                mrl.append( "," ); 
     313            } 
     314            else 
     315            { 
     316                mrl = ":sout=#transcode{"; 
     317            } 
     318            mrl.append( "acodec=" ); 
     319            mrl.append( sout.psz_acodec ); 
     320            mrl.append( "," ); 
     321            mrl.append( "ab=" ); 
     322            mrl.append( QString::number( sout.i_ab,10 ) ); 
     323            mrl.append( "," ); 
     324            mrl.append( "channels=" ); 
     325            mrl.append( QString::number( sout.i_channels,10 ) ); 
     326            trans = true; 
     327        } 
     328        mrl.append( "}" ); 
     329    } 
    292330 
    293331    if ( sout.b_local || sout.b_file || sout.b_http || sout.b_mms || sout.b_udp ) 
     
    379417 
    380418    if ( sout.b_all_es ) 
    381             mrl.append( ":sout-all" ); 
    382  
     419        mrl.append( ":sout-all" ); 
    383420 
    384421    ui.mrlEdit->setText( mrl ); 
     
    388425    free( sout.psz_name ); free( sout.psz_group ); 
    389426} 
    390  
    391 // void SoutDialog::updateMRL() 
    392 // { 
    393 //     sout_gui_descr_t pd; 
    394 //     memset( &pd, 0, sizeof( sout_gui_descr_t ) ); 
    395 // 
    396 //     /* Output */ 
    397 //     pd.b_dump = ui.rawInput->isChecked(); 
    398 //     if( pd.b_dump ) goto end; 
    399 // 
    400 //     pd.b_local = ui.localOutput->isChecked(); 
    401 //     pd.b_file = ui.fileOutput->isChecked(); 
    402 //     pd.b_http = ui.HTTPOutput->isChecked(); 
    403 //     pd.b_mms = ui.MMSHOutput->isChecked(); 
    404 //     pd.b_udp = ui.UDPOutput->isChecked(); 
    405 // 
    406 //     pd.psz_file = ui.fileOutput->isChecked() ? 
    407 //                             strdup( qtu( ui.fileEdit->text() ) ): NULL; 
    408 //     pd.psz_http = ui.HTTPOutput->isChecked() ? 
    409 //                             strdup( qtu( ui.HTTPEdit->text() ) ) : NULL; 
    410 //     pd.psz_mms = ui.MMSHOutput->isChecked() ? 
    411 //                             strdup( qtu( ui.MMSHEdit->text() ) ): NULL; 
    412 //     pd.psz_udp = ui.UDPOutput->isChecked() ? 
    413 //                             strdup( qtu( ui.UDPEdit->text() ) ): NULL; 
    414 // 
    415 //     pd.i_http = ui.HTTPPort->value(); 
    416 //     pd.i_mms = ui.MMSHPort->value(); 
    417 //     pd.i_udp = ui.UDPPort->value(); 
    418 // 
    419 //     /* Mux */ 
    420 // #define SMUX( x, txt ) if( ui.x##Mux->isChecked() ) pd.psz_mux = strdup( txt ); 
    421 //     SMUX( PS, "ps" ); 
    422 //     SMUX( TS, "ts" ); 
    423 //     SMUX( MPEG1, "mpeg" ); 
    424 //     SMUX( Ogg, "ogg" ); 
    425 //     SMUX( ASF, "asf" ); 
    426 //     SMUX( MP4, "mp4" ); 
    427 //     SMUX( MOV, "mov" ); 
    428 //     SMUX( WAV, "wav" ); 
    429 //     SMUX( RAW, "raw" ); 
    430 //     SMUX( FLV, "flv" ); 
    431 // 
    432 // 
    433 // 
    434 //     /* Transcode */ 
    435 // //     pd.b_soverlay = ui.sOverlay->isChecked(); 
    436 // //     pd.i_vb = ui.vBitrate->value(); 
    437 // //     pd.i_ab = ui.aBitrate->value(); 
    438 // //     pd.i_channels = ui.aChannels->value(); 
    439 // //     pd.f_scale = atof( qta( ui.vScale->currentText() ) ); 
    440 // // 
    441 // //     pd.psz_vcodec = ui.transcodeVideo->isChecked() ? 
    442 // //                      strdup( qtu( ui.vCodec->itemData(  
    443 // //                             ui.vCodec->currentIndex() ). toString() ) ) : NULL; 
    444 // //     pd.psz_acodec = ui.transcodeAudio->isChecked() ? 
    445 // //                      strdup( qtu( ui.aCodec->itemData(  
    446 // //                             ui.aCodec->currentIndex() ).toString() ) ) : NULL; 
    447 // //     pd.psz_scodec = ui.transcodeSubs->isChecked() ? 
    448 // //                      strdup( qtu( ui.sCodec->itemData(  
    449 // //                             ui.sCodec->currentIndex() ).toString() ) ) : NULL; 
    450 // //     pd.b_sap = ui.sap->isChecked(); 
    451 // //     pd.b_all_es = ui.soutAll->isChecked(); 
    452 // //     pd.psz_name = qtu( ui.sapName->text() ); 
    453 // //     pd.psz_group = qtu( ui.sapGroup->text() ); 
    454 // //     pd.i_ttl = ui.ttl->value() ; 
    455 // end: 
    456 //     sout_chain_t* p_chain = streaming_ChainNew(); 
    457 //     streaming_GuiDescToChain( VLC_OBJECT( p_intf ), p_chain, &pd ); 
    458 //     char *psz_mrl = streaming_ChainToPsz( p_chain ); 
    459 // 
    460 //     ui.mrlEdit->setText( qfu( strdup( psz_mrl ) ) ); 
    461 //     free( pd.psz_acodec ); free( pd.psz_vcodec ); free( pd.psz_scodec ); 
    462 //     free( pd.psz_file );free( pd.psz_http ); free( pd.psz_mms ); 
    463 //     free( pd.psz_udp ); free( pd.psz_mux ); 
    464 // } 
  • modules/gui/qt4/ui/sout.ui

    r038dc1c r23a9ce0  
    344344        <widget class="QRadioButton" name="ASFMux" > 
    345345         <property name="text" > 
    346           <string>ASF</string> 
     346          <string>ASF/WMV</string> 
    347347         </property> 
    348348        </widget>