summaryrefslogtreecommitdiffstats
path: root/qt4/qhandbrake.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'qt4/qhandbrake.cpp')
-rw-r--r--qt4/qhandbrake.cpp128
1 files changed, 128 insertions, 0 deletions
diff --git a/qt4/qhandbrake.cpp b/qt4/qhandbrake.cpp
new file mode 100644
index 000000000..ba08975de
--- /dev/null
+++ b/qt4/qhandbrake.cpp
@@ -0,0 +1,128 @@
+#include "qhandbrake.h"
+
+QHandBrake::QHandBrake( QObject *parent ) : QObject( parent )
+{
+ hbHandle = hb_init_express( HB_DEBUG_NONE, 1 );
+ hbTitle = NULL;
+}
+
+QHandBrake::~QHandBrake()
+{
+ hb_close( &hbHandle );
+}
+
+QString displayDuration( const QTime t )
+{
+ return QString( "%1 %2, %3 %4, %5 %6").arg(t.hour()).arg(t.hour() == 1 ? "hour" : "hours").arg(t.minute()).arg(t.minute() == 1 ? "minute" : "minutes").arg(t.second()).arg(t.second() == 1 ? "second" : "seconds");
+}
+
+QStandardItemModel *QHandBrake::titleListModel()
+{
+ hb_list_t *hbTitles;
+ int i, titleCount;
+
+ hbTitles = hb_get_titles( hbHandle );
+ titleCount = hb_list_count( hbTitles );
+ titleModel = new QStandardItemModel( titleCount, 2, this );
+
+ titleModel->setHorizontalHeaderItem( 0, new QStandardItem("Title") );
+ titleModel->setHorizontalHeaderItem( 1, new QStandardItem("Duration") );
+
+ for( i = 0; i < titleCount; ++i )
+ {
+ hb_title_t *t = ( hb_title_t * )hb_list_item( hbTitles, i );
+
+ QTime d = QTime( t->hours, t->minutes, t->seconds );
+ QString s = QString( "Title %1" ).arg( t->index );
+ QStandardItem *siTitle = new QStandardItem( s );
+ QStandardItem *siDuration = new QStandardItem( displayDuration( d ) );
+ titleModel->setItem( i, 0, siTitle );
+ titleModel->setItem( i, 1, siDuration );
+
+ siTitle->setCheckable( true );
+ siTitle->setEditable( false );
+ siTitle->setData( i, Qt::UserRole );
+
+ siDuration->setEditable( false );
+ }
+
+ return titleModel;
+}
+
+void QHandBrake::startScan( const QString sDevice )
+{
+ hb_state_t s;
+ int titleCurrent = 0;
+ int titleCount = 0;
+
+ if( sDevice.isEmpty() )
+ {
+ qDebug("Passed an empty device/path");
+ return;
+ }
+
+ hb_scan( hbHandle, sDevice.toLocal8Bit(), 0 );
+
+ do {
+ hb_get_state( hbHandle, &s );
+ qApp->processEvents();
+ if( s.state == HB_STATE_SCANNING )
+ {
+ titleCurrent = s.param.scanning.title_cur;
+ titleCount = s.param.scanning.title_count;
+
+ if( titleCurrent > 0 )
+ {
+ emit scanProgress( titleCurrent, titleCount );
+ qApp->processEvents();
+ }
+ }
+ } while( s.state != HB_STATE_SCANDONE );
+
+ if( hb_list_count( hb_get_titles( hbHandle ) ) )
+ {
+ emit scanProgress( titleCount, titleCount );
+ }
+ else
+ {
+ qDebug("Scanning failed");
+ return;
+ }
+}
+
+void QHandBrake::encode()
+{
+ if( hbHandle == NULL )
+ {
+ qDebug("Encode called too early");
+ return;
+ }
+
+ int i;
+ hb_list_t *titles = hb_get_titles( hbHandle );
+
+ for( i = 0; i < titleModel->rowCount(); ++i )
+ {
+ QStandardItem *si = titleModel->item( i, 0 );
+ if( si->checkState() == Qt::Checked )
+ {
+ hbTitle = ( hb_title_t * )hb_list_item( titles, si->data( Qt::UserRole ).toInt() );
+ hb_job_t *job = hbTitle->job;
+ // FIXME hardcoded params here! need to fix
+ job->pixel_ratio = 1;
+ job->vcodec = HB_VCODEC_FFMPEG;
+ job->vquality = -1.0;
+ job->vbitrate = 1600;
+ job->acodec = HB_ACODEC_LAME;
+ job->audios[0] = -1;
+ job->mux = HB_MUX_MP4;
+ job->subtitle = -1;
+ job->pass = 0;
+ job->file = strdup("/tmp/foo.mp4");
+ hb_add( hbHandle, job );
+ }
+ }
+
+ fprintf(stderr, "Calling hb_start...\n");
+ hb_start( hbHandle );
+}