From 1e4753f9119634086383d9659b82304c61d916ec Mon Sep 17 00:00:00 2001 From: rdb Date: Sat, 7 Feb 2009 10:45:39 +0000 Subject: [PATCH] Fix bugs regarding ffmpeg and AVSEEK_SIZE --- panda/src/movies/ffmpegVirtualFile.cxx | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/panda/src/movies/ffmpegVirtualFile.cxx b/panda/src/movies/ffmpegVirtualFile.cxx index 4cdc219f14..9984bd29f1 100644 --- a/panda/src/movies/ffmpegVirtualFile.cxx +++ b/panda/src/movies/ffmpegVirtualFile.cxx @@ -96,11 +96,26 @@ static PN_int64 pandavfs_seek(URLContext *h, PN_int64 pos, int whence) { istream *s = (istream*)(h->priv_data); switch(whence) { - case 0: s->seekg(pos, ios::beg); break; - case 1: s->seekg(pos, ios::cur); break; - case 2: s->seekg(pos, ios::end); break; + case SEEK_SET: s->seekg(pos, ios::beg); break; + case SEEK_CUR: s->seekg(pos, ios::cur); break; + case SEEK_END: s->seekg(pos, ios::end); break; + case AVSEEK_SIZE: { + s->seekg(0, ios::cur); + offset_t p = s->tellg(); + s->seekg(-1, ios::end); + offset_t size = s->tellg(); + if (size < 0) { + movies_cat.error() << "Failed to determine filesize in ffmpegVirtualFile\n"; + s->clear(); + return -1; + } + size++; + s->seekg(p, ios::beg); + s->clear(); + return size; } default: movies_cat.error() << "Illegal parameter to seek in ffmpegVirtualFile\n"; + s->clear(); return -1; } s->clear();