mirror of
https://github.com/panda3d/panda3d.git
synced 2025-09-30 08:44:19 -04:00
movies: fix for loading unseekable Opus files
Same fix as 00b3fbdb1ab9b9dce6ca8a88287563a7be687c9d but for Opus files.
This commit is contained in:
parent
2c55663472
commit
fa1ff3d489
@ -56,6 +56,22 @@ int cb_seek(void *stream, opus_int64 offset, int whence) {
|
||||
break;
|
||||
|
||||
case SEEK_CUR:
|
||||
// opusfile uses a seek with offset 0 to determine whether seeking is
|
||||
// supported, but this is not good enough. We seek to the end and back.
|
||||
if (offset == 0) {
|
||||
std::streambuf *buf = in->rdbuf();
|
||||
std::streampos pos = buf->pubseekoff(0, std::ios::cur, std::ios::in);
|
||||
if (pos < 0) {
|
||||
return -1;
|
||||
}
|
||||
if (buf->pubseekoff(0, std::ios::end, std::ios::in) >= 0) {
|
||||
// It worked; seek back to the previous location.
|
||||
buf->pubseekpos(pos, std::ios::in);
|
||||
return 0;
|
||||
} else {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
in->seekg(offset, std::ios::cur);
|
||||
break;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user