From 0185a3169a69e08aab9dd7119465ab04816beb07 Mon Sep 17 00:00:00 2001 From: too-tired Date: Mon, 2 Jul 2007 16:48:35 +0000 Subject: [PATCH] "play multiple files" patch by Ralph Glasstetter git-svn-id: https://dvbcut.svn.sourceforge.net/svnroot/dvbcut/trunk@47 36490176-9c1c-0410-b649-dbf2af5787bf --- ChangeLog | 7 +++++++ src/buffer.cpp | 15 +++++++++++++++ src/buffer.h | 1 + src/dvbcut.cpp | 15 ++++++++++++--- 4 files changed, 35 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 8ea4642..87a0bd7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2007-07-02 Michael Riepe + + * src/buffer.cpp: + * src/buffer.h: + * src/dvbcut.cpp: + "play multiple files" patch by Ralph Glasstetter. + 2007-06-30 Michael Riepe * src/buffer.cpp (class inbuffer): diff --git a/src/buffer.cpp b/src/buffer.cpp index 565cf18..02f96ac 100644 --- a/src/buffer.cpp +++ b/src/buffer.cpp @@ -329,6 +329,21 @@ inbuffer::providedata(unsigned int amount, long long position) { return inbytes(); } +int +inbuffer::getfilenum(dvbcut_off_t offset, dvbcut_off_t &fileoff) { + std::vector::const_iterator it = files.begin(); + unsigned int num = 0; + while (it != files.end()) { + if (offset < it->end) { + fileoff = it->off; + return num; + } + ++num; + ++it; + } + return -1; +} + // OUTBUFFER **************************************************************** outbuffer::~outbuffer() diff --git a/src/buffer.h b/src/buffer.h index c94f955..2cdc988 100644 --- a/src/buffer.h +++ b/src/buffer.h @@ -183,6 +183,7 @@ class inbuffer { } dvbcut_off_t getfilesize() const { return filesize; } dvbcut_off_t getfilepos() const { return pos + readpos; } + int getfilenum(dvbcut_off_t offset, dvbcut_off_t &fileoff); }; class outbuffer : protected buffer diff --git a/src/dvbcut.cpp b/src/dvbcut.cpp index cdcd2b3..384e17b 100644 --- a/src/dvbcut.cpp +++ b/src/dvbcut.cpp @@ -662,6 +662,11 @@ void dvbcut::playPlay() dvbcut_off_t offset=(*mpg)[curpic].getpos().packetposition(); mplayer_curpts=(*mpg)[curpic].getpts(); + dvbcut_off_t partoffset; + int partindex = buf.getfilenum(offset, partoffset); + if (partindex == -1) + return; // what else can we do? + mplayer_process=new QProcess(QString("mplayer")); mplayer_process->addArgument("-noconsolecontrols"); #ifdef __WIN32__ @@ -671,7 +676,7 @@ void dvbcut::playPlay() mplayer_process->addArgument("-wid"); mplayer_process->addArgument(QString().sprintf("0x%x",int(imagedisplay->winId()))); mplayer_process->addArgument("-sb"); - mplayer_process->addArgument(QString::number(offset)); + mplayer_process->addArgument(QString::number(offset - partoffset)); mplayer_process->addArgument("-geometry"); mplayer_process->addArgument(QString().sprintf("%dx%d+0+0",int(imagedisplay->width()),int(imagedisplay->height()))); @@ -680,8 +685,12 @@ void dvbcut::playPlay() mplayer_process->addArgument(QString().sprintf("0x%x",int(mpg->mplayeraudioid(currentaudiotrack)))); } - mplayer_process->addArgument(QString(mpgfilen.front())); - + // for now, pass all filenames from the current one up to the last one + std::list::const_iterator it = mpgfilen.begin(); + for (int i = 0; it != mpgfilen.end(); ++i, ++it) + if (i >= partindex) + mplayer_process->addArgument(QString(*it)); + mplayer_process->setCommunication(QProcess::Stdout|QProcess::Stderr|QProcess::DupStderr); connect(mplayer_process, SIGNAL(processExited()), this, SLOT(mplayer_exited()));