convert.cpp
上传用户:kjfoods
上传日期:2020-07-06
资源大小:29949k
文件大小:5k
源码类别:

midi

开发平台:

Unix_Linux

  1. /*****************************************************************************
  2.  * Convert.cpp : Convertion dialogs
  3.  ****************************************************************************
  4.  * Copyright (C) 2009 the VideoLAN team
  5.  * $Id: 332aa85eade2f2917ff6f854dc89965c824b8d3e $
  6.  *
  7.  * Authors: Jean-Baptiste Kempf <jb (at) videolan.org>
  8.  *
  9.  * This program is free software; you can redistribute it and/or modify
  10.  * it under the terms of the GNU General Public License as published by
  11.  * the Free Software Foundation; either version 2 of the License, or
  12.  * (at your option) any later version.
  13.  *
  14.  * This program is distributed in the hope that it will be useful,
  15.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17.  * GNU General Public License for more details.
  18.  *
  19.  * You should have received a copy of the GNU General Public License
  20.  * along with this program; if not, write to the Free Software
  21.  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
  22.  *****************************************************************************/
  23. #ifdef HAVE_CONFIG_H
  24. # include "config.h"
  25. #endif
  26. #include "dialogs/sout.hpp"
  27. #include "dialogs/convert.hpp"
  28. #include "components/sout/sout_widgets.hpp"
  29. #include "util/qt_dirs.hpp"
  30. #include <QLabel>
  31. #include <QGroupBox>
  32. #include <QDialogButtonBox>
  33. #include <QFileDialog>
  34. #include <QCheckBox>
  35. ConvertDialog::ConvertDialog( QWidget *parent, intf_thread_t *_p_intf,
  36.                               const QString& inputMRL )
  37.               : QVLCDialog( parent, _p_intf )
  38. {
  39.     setWindowTitle( qtr( "Convert" ) );
  40.     QGridLayout *mainLayout = new QGridLayout( this );
  41.     SoutInputBox *inputBox = new SoutInputBox( this );
  42.     inputBox->setMRL( inputMRL );
  43.     mainLayout->addWidget( inputBox, 0, 0, 1, -1  );
  44.     /**
  45.      * Destination
  46.      **/
  47.     QGroupBox *destBox = new QGroupBox( qtr( "Destination" ) );
  48.     QGridLayout *destLayout = new QGridLayout( destBox );
  49.     QLabel *destLabel = new QLabel( qtr( "Destination file:" ) );
  50.     destLayout->addWidget( destLabel, 0, 0);
  51.     fileLine = new QLineEdit;
  52.     fileLine->setMinimumWidth( 300 );
  53.     fileLine->setFocus( Qt::ActiveWindowFocusReason );
  54.     destLabel->setBuddy( fileLine );
  55.     QPushButton *fileSelectButton = new QPushButton( qtr( "Browse" ) );
  56.     destLayout->addWidget( fileLine, 0, 1 );
  57.     destLayout->addWidget( fileSelectButton, 0, 2);
  58.     BUTTONACT( fileSelectButton, fileBrowse() );
  59.     displayBox = new QCheckBox( qtr( "Display the output" ) );
  60.     displayBox->setToolTip( qtr( "This display the resulting media, but can "
  61.                                "slow things down." ) );
  62.     destLayout->addWidget( displayBox, 2, 0, 1, -1 );
  63.     mainLayout->addWidget( destBox, 1, 0, 1, -1  );
  64.     /* Profile Editor */
  65.     QGroupBox *settingBox = new QGroupBox( qtr( "Settings" ) );
  66.     QGridLayout *settingLayout = new QGridLayout( settingBox );
  67.     profile = new VLCProfileSelector( this );
  68.     settingLayout->addWidget( profile, 0, 0, 1, -1 );
  69.     deinterBox = new QCheckBox( qtr( "Deinterlace" ) );
  70.     settingLayout->addWidget( deinterBox, 1, 0 );
  71.     dumpBox = new QCheckBox( qtr( "Dump raw input" ) );
  72.     settingLayout->addWidget( dumpBox, 1, 1 );
  73.     mainLayout->addWidget( settingBox, 3, 0, 1, -1  );
  74.     /* Buttons */
  75.     QPushButton *okButton = new QPushButton( qtr( "&Start" ) );
  76.     QPushButton *cancelButton = new QPushButton( qtr( "&Cancel" ) );
  77.     QDialogButtonBox *buttonBox = new QDialogButtonBox;
  78.     okButton->setDefault( true );
  79.     buttonBox->addButton( okButton, QDialogButtonBox::AcceptRole );
  80.     buttonBox->addButton( cancelButton, QDialogButtonBox::RejectRole );
  81.     mainLayout->addWidget( buttonBox, 5, 3 );
  82.     BUTTONACT( okButton, close() );
  83.     BUTTONACT( cancelButton, cancel() );
  84. }
  85. void ConvertDialog::fileBrowse()
  86. {
  87.     QString fileName = QFileDialog::getSaveFileName( this, qtr( "Save file..." ),
  88.             "",
  89.  qtr( "Containers (*.ps *.ts *.mpg *.ogg *.asf *.mp4 *.mov *.wav *.raw *.flv)" ) );
  90.     fileLine->setText( toNativeSeparators( fileName ) );
  91. }
  92. void ConvertDialog::cancel()
  93. {
  94.     reject();
  95. }
  96. void ConvertDialog::close()
  97. {
  98.     hide();
  99.     if( dumpBox->isChecked() )
  100.     {
  101.         mrl = "demux=dump :demuxdump-file=" + fileLine->text();
  102.     }
  103.     else
  104.     {
  105.         mrl = "sout=#" + profile->getTranscode();
  106.         if( deinterBox->isChecked() )
  107.         {
  108.             mrl.remove( '}' );
  109.             mrl += ",deinterlace}";
  110.         }
  111.         mrl += ":duplicate{";
  112.         if( displayBox->isChecked() ) mrl += "dst=display,";
  113.         mrl += "dst=std{access=file,mux=" + profile->getMux() +
  114.             ",dst='" + fileLine->text() + "'}";
  115.     }
  116.     msg_Warn( p_intf, "Transcode MRL: %s", qtu( mrl ) );
  117.     accept();
  118. }