Skip to content

Commit

Permalink
Use _lseeki64 on Windows.
Browse files Browse the repository at this point in the history
Only seek if necessary.
Try to read a buffer full of data.
Remember last used load directory for Open.


git-svn-id: https://dvbcut.svn.sourceforge.net/svnroot/dvbcut/trunk@49 36490176-9c1c-0410-b649-dbf2af5787bf
  • Loading branch information
too-tired committed Jul 4, 2007
1 parent b5695e5 commit ccd41df
Show file tree
Hide file tree
Showing 5 changed files with 42 additions and 9 deletions.
14 changes: 14 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,17 @@
2007-07-04 Michael Riepe <[email protected]>

* src/buffer.cpp:
Use _lseeki64 on Windows.
Only seek if necessary.
Try to read a buffer full of data.

* src/dvbcut.cpp:
Remember last used load directory for Open.

* src/settings.cpp:
* src/settings.h:
Add "lastdir" setting.

2007-07-03 Michael Riepe <[email protected]>

* src/buffer.cpp:
Expand Down
21 changes: 13 additions & 8 deletions src/buffer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -296,15 +296,13 @@ inbuffer::providedata(unsigned int amount, long long position) {

if (amount > size)
amount = size;
dvbcut_off_t seekpos = position;
// reuse existing data if possible
if (position >= pos && position < pos + writepos) {
unsigned int pp = position - pos;
if (pp > 0) {
writepos -= pp;
memmove(d, (char*)d + pp, writepos);
}
seekpos += writepos;
}
else {
writepos = 0;
Expand All @@ -313,17 +311,25 @@ inbuffer::providedata(unsigned int amount, long long position) {
pos = position;
bool needseek = true;
while (writepos < amount) {
dvbcut_off_t seekpos = pos + writepos;
while (seekpos >= i->end) {
++i;
assert(i != files.end());
needseek = true;
}
assert(seekpos >= i->off);
off_t relpos = seekpos - i->off;
if (::lseek(i->fd, relpos, SEEK_SET) == -1)
return -1;
needseek = false;
size_t len = amount - writepos;
if (needseek) {
#ifdef __WIN32__
__int64 relpos = seekpos - i->off;
if (::_lseeki64(i->fd, relpos, SEEK_SET) == -1)
#else /* __WIN32__ */
off_t relpos = seekpos - i->off;
if (::lseek(i->fd, relpos, SEEK_SET) == -1)
#endif /* __WIN32__ */
return -1;
needseek = false;
}
size_t len = size - writepos;
if (len > i->end - seekpos)
len = i->end - seekpos;
assert(len > 0);
Expand All @@ -335,7 +341,6 @@ inbuffer::providedata(unsigned int amount, long long position) {
break;
}
writepos += n;
seekpos += n;
}
return inbytes();
}
Expand Down
13 changes: 12 additions & 1 deletion src/dvbcut.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1044,12 +1044,23 @@ void dvbcut::open(std::list<std::string> filenames, std::string idxfilename)
if (filenames.empty()) {
QStringList fn = QFileDialog::getOpenFileNames(
settings.loadfilter,
QString("."),
settings.lastdir,
this,
"Open file...",
"Choose one or more MPEG files to open");
if (fn.empty())
return;
for (QStringList::Iterator it = fn.begin(); it != fn.end(); ++it)
filenames.push_back((const char*)*it);

// remember directory
QString dir = fn.front();
int n = dir.findRev('/');
if (n > 0)
dir = dir.left(n);
else if (n == 0)
dir = "/";
settings.lastdir = dir;
}

if (filenames.empty())
Expand Down
2 changes: 2 additions & 0 deletions src/settings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ dvbcut_settings::load_settings() {
lin_interval = readNumEntry("/lin_interval", 3600);
if (lin_interval < 0)
lin_interval = 0;
lastdir = readEntry("/lastdir", ".");
idxfilter = readEntry("/idxfilter", DVBCUT_DEFAULT_IDXFILTER);
prjfilter = readEntry("/prjfilter", DVBCUT_DEFAULT_PRJFILTER);
loadfilter = readEntry("/loadfilter", DVBCUT_DEFAULT_LOADFILTER);
Expand Down Expand Up @@ -91,6 +92,7 @@ dvbcut_settings::save_settings() {
writeEntry("/jog_offset", jog_offset);
writeEntry("/jog_interval", jog_interval);
writeEntry("/lin_interval", lin_interval);
writeEntry("/lastdir", lastdir);
writeEntry("/idxfilter", idxfilter);
writeEntry("/prjfilter", prjfilter);
writeEntry("/loadfilter", loadfilter);
Expand Down
1 change: 1 addition & 0 deletions src/settings.h
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ class dvbcut_settings : QSettings {
void load_settings();
void save_settings();

QString lastdir;
QString idxfilter;
QString prjfilter;
QString loadfilter;
Expand Down

0 comments on commit ccd41df

Please sign in to comment.