diff --git a/aegisub/FFmpegSource2/stdiostream.c b/aegisub/FFmpegSource2/stdiostream.c index 18f6d8368..4615b94fe 100644 --- a/aegisub/FFmpegSource2/stdiostream.c +++ b/aegisub/FFmpegSource2/stdiostream.c @@ -98,6 +98,15 @@ int StdIoProgress(StdIoStream *st, ulonglong cur, ulonglong max) { return 1; } +longlong StdIoGetFileSize(StdIoStream *st) { + longlong epos = 0; + longlong cpos = _ftelli64(st->fp); + _fseeki64(st->fp, 0, SEEK_END); + epos = _ftelli64(st->fp); + _fseeki64(st->fp, cpos, SEEK_SET); + return epos; +} + void InitStdIoStream(StdIoStream *st) { memset(st,0,sizeof(st)); st->base.read = StdIoRead; @@ -108,4 +117,5 @@ void InitStdIoStream(StdIoStream *st) { st->base.memrealloc = StdIoRealloc; st->base.memfree = StdIoFree; st->base.progress = StdIoProgress; + st->base.getfilesize = StdIoGetFileSize; } diff --git a/aegisub/FFmpegSource2/stdiostream.h b/aegisub/FFmpegSource2/stdiostream.h index 2b8d0ae8a..b7d64b6db 100644 --- a/aegisub/FFmpegSource2/stdiostream.h +++ b/aegisub/FFmpegSource2/stdiostream.h @@ -36,9 +36,9 @@ * source file */ struct StdIoStream { - struct InputStream base; - FILE *fp; - int error; + struct InputStream base; + FILE *fp; + int error; }; typedef struct StdIoStream StdIoStream; @@ -64,16 +64,18 @@ unsigned StdIoGetCacheSize(StdIoStream *st); const char *StdIoGetLastError(StdIoStream *st); /* memory allocation, this is done via stdlib */ -void *StdIoMalloc(StdIoStream *st, size_t size); +void *StdIoMalloc(StdIoStream *st, size_t size); -void *StdIoRealloc(StdIoStream *st, void *mem, size_t size); +void *StdIoRealloc(StdIoStream *st, void *mem, size_t size); -void StdIoFree(StdIoStream *st, void *mem); +void StdIoFree(StdIoStream *st, void *mem); /* progress report handler for lengthy operations * returns 0 to abort operation, nonzero to continue */ -int StdIoProgress(StdIoStream *st, ulonglong cur, ulonglong max); +int StdIoProgress(StdIoStream *st, ulonglong cur, ulonglong max); + +longlong StdIoGetFileSize(StdIoStream *st); void InitStdIoStream(StdIoStream *st);