annotate data/fileio/OggVorbisFileReader.h @ 1008:d9e0e59a1581

When using an aggregate model to pass data to a transform, zero-pad the shorter input to the duration of the longer rather than truncating the longer. (This is better behaviour for e.g. MATCH, and in any case the code was previously truncating incorrectly and ending up with garbage data at the end.)
author Chris Cannam
date Fri, 14 Nov 2014 13:51:33 +0000
parents d03b3d956358
children a1cd5abcb38b
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@263 37 enum DecodeMode {
Chris@392 38 DecodeAtOnce, // decode the file on construction, with progress
Chris@263 39 DecodeThreaded // decode in a background thread after construction
Chris@263 40 };
Chris@263 41
Chris@317 42 OggVorbisFileReader(FileSource source,
Chris@297 43 DecodeMode decodeMode,
Chris@297 44 CacheMode cacheMode,
Chris@929 45 int targetRate = 0,
Chris@920 46 bool normalised = false,
Chris@392 47 ProgressReporter *reporter = 0);
Chris@148 48 virtual ~OggVorbisFileReader();
Chris@148 49
Chris@290 50 virtual QString getError() const { return m_error; }
Chris@290 51
Chris@345 52 virtual QString getLocation() const { return m_source.getLocation(); }
Chris@290 53 virtual QString getTitle() const { return m_title; }
Chris@333 54 virtual QString getMaker() const { return m_maker; }
Chris@633 55 virtual TagMap getTags() const { return m_tags; }
Chris@271 56
Chris@290 57 static void getSupportedExtensions(std::set<QString> &extensions);
Chris@316 58 static bool supportsExtension(QString ext);
Chris@316 59 static bool supportsContentType(QString type);
Chris@317 60 static bool supports(FileSource &source);
Chris@157 61
Chris@265 62 virtual int getDecodeCompletion() const { return m_completion; }
Chris@265 63
Chris@263 64 virtual bool isUpdating() const {
Chris@263 65 return m_decodeThread && m_decodeThread->isRunning();
Chris@263 66 }
Chris@263 67
Chris@392 68 public slots:
Chris@392 69 void cancelled();
Chris@392 70
Chris@148 71 protected:
Chris@317 72 FileSource m_source;
Chris@290 73 QString m_path;
Chris@290 74 QString m_error;
Chris@290 75 QString m_title;
Chris@333 76 QString m_maker;
Chris@633 77 TagMap m_tags;
Chris@148 78
Chris@263 79 OGGZ *m_oggz;
Chris@148 80 FishSound *m_fishSound;
Chris@392 81 ProgressReporter *m_reporter;
Chris@929 82 int m_fileSize;
Chris@929 83 int m_bytesRead;
Chris@271 84 bool m_commentsRead;
Chris@148 85 bool m_cancelled;
Chris@265 86 int m_completion;
Chris@148 87
Chris@620 88 static int readPacket(OGGZ *, ogg_packet *, long, void *);
Chris@148 89 static int acceptFrames(FishSound *, float **, long, void *);
Chris@263 90
Chris@263 91 class DecodeThread : public Thread
Chris@263 92 {
Chris@263 93 public:
Chris@263 94 DecodeThread(OggVorbisFileReader *reader) : m_reader(reader) { }
Chris@263 95 virtual void run();
Chris@263 96
Chris@263 97 protected:
Chris@263 98 OggVorbisFileReader *m_reader;
Chris@263 99 };
Chris@263 100
Chris@263 101 DecodeThread *m_decodeThread;
Chris@148 102 };
Chris@148 103
Chris@148 104 #endif
Chris@148 105 #endif
Chris@148 106
Chris@148 107 #endif