mirror of
https://github.com/telegramdesktop/tdesktop
synced 2025-03-25 04:38:23 +00:00
Support special seek whence for ffmpeg.
AVSEEK_SIZE is passed as a whence when ffmpeg needs just data size.
This commit is contained in:
parent
fb230a443e
commit
5f5770dd46
@ -157,6 +157,10 @@ struct Instance::Inner::Private {
|
||||
case SEEK_SET: newPos = offset; break;
|
||||
case SEEK_CUR: newPos = l->dataPos + offset; break;
|
||||
case SEEK_END: newPos = l->data.size() + offset; break;
|
||||
case AVSEEK_SIZE: {
|
||||
// Special whence for determining filesize without any seek.
|
||||
return l->data.size();
|
||||
} break;
|
||||
}
|
||||
if (newPos < 0) {
|
||||
return -1;
|
||||
|
@ -109,6 +109,10 @@ int64_t AbstractFFMpegLoader::_seek_data(void *opaque, int64_t offset, int whenc
|
||||
case SEEK_SET: newPos = offset; break;
|
||||
case SEEK_CUR: newPos = l->dataPos + offset; break;
|
||||
case SEEK_END: newPos = l->data.size() + offset; break;
|
||||
case AVSEEK_SIZE: {
|
||||
// Special whence for determining filesize without any seek.
|
||||
return l->data.size();
|
||||
} break;
|
||||
}
|
||||
if (newPos < 0 || newPos > l->data.size()) {
|
||||
return -1;
|
||||
@ -129,6 +133,10 @@ int64_t AbstractFFMpegLoader::_seek_file(void *opaque, int64_t offset, int whenc
|
||||
case SEEK_SET: return l->f.seek(offset) ? l->f.pos() : -1;
|
||||
case SEEK_CUR: return l->f.seek(l->f.pos() + offset) ? l->f.pos() : -1;
|
||||
case SEEK_END: return l->f.seek(l->f.size() + offset) ? l->f.pos() : -1;
|
||||
case AVSEEK_SIZE: {
|
||||
// Special whence for determining filesize without any seek.
|
||||
return l->f.size();
|
||||
} break;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
@ -582,6 +582,10 @@ int64_t FFMpegReaderImplementation::_seek(void *opaque, int64_t offset, int when
|
||||
case SEEK_SET: return l->_device->seek(offset) ? l->_device->pos() : -1;
|
||||
case SEEK_CUR: return l->_device->seek(l->_device->pos() + offset) ? l->_device->pos() : -1;
|
||||
case SEEK_END: return l->_device->seek(l->_device->size() + offset) ? l->_device->pos() : -1;
|
||||
case AVSEEK_SIZE: {
|
||||
// Special whence for determining filesize without any seek.
|
||||
return l->_dataSize;
|
||||
} break;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user