annotate data/fileio/OggVorbisFileReader.h @ 1346:75ad55315db4 3.0-integration

More work on getting tests (especially file encoding ones) running on Windows. Various problems here to do with interaction with test filenames in Hg repos
author Chris Cannam
date Fri, 06 Jan 2017 15:44:55 +0000
parents abc309f507ae
children 1c9bbbb6116a
rev   line source
Chris@148 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@148 2
Chris@148 3 /*
Chris@148 4 Sonic Visualiser
Chris@148 5 An audio file viewer and annotation editor.
Chris@148 6 Centre for Digital Music, Queen Mary, University of London.
Chris@148 7 This file copyright 2006 Chris Cannam.
Chris@148 8
Chris@148 9 This program is free software; you can redistribute it and/or
Chris@148 10 modify it under the terms of the GNU General Public License as
Chris@148 11 published by the Free Software Foundation; either version 2 of the
Chris@148 12 License, or (at your option) any later version. See the file
Chris@148 13 COPYING included with this distribution for more information.
Chris@148 14 */
Chris@148 15
Chris@148 16 #ifndef _OGG_VORBIS_FILE_READER_H_
Chris@148 17 #define _OGG_VORBIS_FILE_READER_H_
Chris@148 18
Chris@148 19 #ifdef HAVE_OGGZ
Chris@148 20 #ifdef HAVE_FISHSOUND
Chris@148 21
Chris@148 22 #include "CodedAudioFileReader.h"
Chris@148 23
Chris@263 24 #include "base/Thread.h"
Chris@148 25 #include <oggz/oggz.h>
Chris@148 26 #include <fishsound/fishsound.h>
Chris@148 27
Chris@157 28 #include <set>
Chris@157 29
Chris@392 30 class ProgressReporter;
Chris@148 31
Chris@148 32 class OggVorbisFileReader : public CodedAudioFileReader
Chris@148 33 {
Chris@392 34 Q_OBJECT
Chris@392 35
Chris@148 36 public:
Chris@317 37 OggVorbisFileReader(FileSource source,
Chris@297 38 DecodeMode decodeMode,
Chris@297 39 CacheMode cacheMode,
Chris@1040 40 sv_samplerate_t targetRate = 0,
Chris@920 41 bool normalised = false,
Chris@1097 42 ProgressReporter *reporter = nullptr);
Chris@148 43 virtual ~OggVorbisFileReader();
Chris@148 44
Chris@290 45 virtual QString getError() const { return m_error; }
Chris@290 46
Chris@345 47 virtual QString getLocation() const { return m_source.getLocation(); }
Chris@290 48 virtual QString getTitle() const { return m_title; }
Chris@333 49 virtual QString getMaker() const { return m_maker; }
Chris@633 50 virtual TagMap getTags() const { return m_tags; }
Chris@271 51
Chris@290 52 static void getSupportedExtensions(std::set<QString> &extensions);
Chris@316 53 static bool supportsExtension(QString ext);
Chris@316 54 static bool supportsContentType(QString type);
Chris@317 55 static bool supports(FileSource &source);
Chris@157 56
Chris@265 57 virtual int getDecodeCompletion() const { return m_completion; }
Chris@265 58
Chris@263 59 virtual bool isUpdating() const {
Chris@263 60 return m_decodeThread && m_decodeThread->isRunning();
Chris@263 61 }
Chris@263 62
Chris@392 63 public slots:
Chris@392 64 void cancelled();
Chris@392 65
Chris@148 66 protected:
Chris@317 67 FileSource m_source;
Chris@290 68 QString m_path;
Chris@290 69 QString m_error;
Chris@290 70 QString m_title;
Chris@333 71 QString m_maker;
Chris@633 72 TagMap m_tags;
Chris@148 73
Chris@263 74 OGGZ *m_oggz;
Chris@148 75 FishSound *m_fishSound;
Chris@392 76 ProgressReporter *m_reporter;
Chris@1043 77 sv_frame_t m_fileSize;
Chris@1043 78 sv_frame_t m_bytesRead;
Chris@271 79 bool m_commentsRead;
Chris@148 80 bool m_cancelled;
Chris@265 81 int m_completion;
Chris@148 82
Chris@620 83 static int readPacket(OGGZ *, ogg_packet *, long, void *);
Chris@148 84 static int acceptFrames(FishSound *, float **, long, void *);
Chris@263 85
Chris@263 86 class DecodeThread : public Thread
Chris@263 87 {
Chris@263 88 public:
Chris@263 89 DecodeThread(OggVorbisFileReader *reader) : m_reader(reader) { }
Chris@263 90 virtual void run();
Chris@263 91
Chris@263 92 protected:
Chris@263 93 OggVorbisFileReader *m_reader;
Chris@263 94 };
Chris@263 95
Chris@263 96 DecodeThread *m_decodeThread;
Chris@148 97 };
Chris@148 98
Chris@148 99 #endif
Chris@148 100 #endif
Chris@148 101
Chris@148 102 #endif