From: John Tsiombikas Date: Sat, 29 Sep 2018 03:04:29 +0000 (+0300) Subject: converted OggVorbisStream to use assman X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=laserbrain_demo;a=commitdiff_plain;h=73b213a3546d98310fb9d70abfb4f38d1bd7c682 converted OggVorbisStream to use assman --- diff --git a/src/audio/ovstream.cc b/src/audio/ovstream.cc index 56f3033..0c347f8 100644 --- a/src/audio/ovstream.cc +++ b/src/audio/ovstream.cc @@ -1,5 +1,6 @@ #include #include +#include "assman.h" #include "logger.h" #include "ovstream.h" @@ -15,14 +16,38 @@ OggVorbisStream::~OggVorbisStream() close(); } +static int io_fseek(void *fp, ogg_int64_t offs, int whence) +{ + if(ass_fseek(fp, offs, whence) != -1) { + return 0; + } + return -1; +} + +static int io_close(void *fp) +{ + ass_fclose(fp); + return 0; +} + + bool OggVorbisStream::open(const char *fname) { close(); pthread_mutex_lock(&vflock); - if(ov_fopen(fname, &vf) != 0) { - error_log("failed to open ogg/vorbis stream: %s\n", fname ? fname : ""); + ass_file *fp; + if(!(fp = ass_fopen(fname, "rb"))) { + error_log("failed to open ogg/vorbis stream: %s: %s\n", fname, strerror(ass_errno)); + pthread_mutex_unlock(&vflock); + return false; + } + + ov_callbacks iofuncs = { ass_fread, io_fseek, io_close, ass_ftell }; + if(ov_open_callbacks(fp, &vf, 0, 0, iofuncs) != 0) { + error_log("failed to open ogg/vorbis stream: %s: %s\n", fname, strerror(ass_errno)); + ass_fclose(fp); pthread_mutex_unlock(&vflock); return false; }