**
** \legal
** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
+** Copyright (c) 2007 Chris Moore
**
** This package is free software; you can redistribute it and/or
** modify it under the terms of the GNU General Public License as
/* === M E T H O D S ======================================================= */
+bool ffmpeg_mptr::is_animated()
+{
+ return true;
+}
+
bool
ffmpeg_mptr::seek_to(int frame)
{
string command;
- command=strprintf("ffmpeg -i \"%s\" -an -f image2pipe -vcodec ppm -\n",filename.c_str());
+ command=strprintf("ffmpeg -ss 00:00:00.%d -i \"%s\" -an -f image2pipe -vcodec ppm -\n",frame,filename.c_str());
file=popen(command.c_str(),POPEN_BINARY_READ_TYPE);
}
// Close the unneeded pipein
close(p[1]);
- execlp("ffmpeg", "ffmpeg", "-i", filename.c_str(), "-an", "-f", "image2pipe", "-vcodec", "ppm", "-", (const char *)NULL);
+ string time = strprintf("00:00:00.%d",frame);
+ execlp("ffmpeg", "ffmpeg", "-ss", time.c_str(), "-i", filename.c_str(), "-an", "-f", "image2pipe", "-vcodec", "ppm", "-", (const char *)NULL);
// We should never reach here unless the exec failed
cerr<<"Unable to open pipe to ffmpeg"<<endl;
- return false;
+ _exit(1);
} else {
// Parent process
// Close pipeout, not needed
float divisor;
char cookie[2];
cookie[0]=fgetc(file);
+
+ if(feof(file))
+ return false;
+
cookie[1]=fgetc(file);
if(cookie[0]!='P' || cookie[1]!='6')
}
surface=frame;
- return false;
+ return true;
}