1 #pragma once 2 3 #define OV_EXCLUDE_STATIC_CALLBACKS 4 #include <opus/opusfile.h> 5 6 #include "sources/soundsourceprovider.h" 7 #include "util/samplebuffer.h" 8 9 namespace mixxx { 10 11 class SoundSourceOpus final : public SoundSource { 12 public: 13 explicit SoundSourceOpus(const QUrl& url); 14 ~SoundSourceOpus() override; 15 16 std::pair<ImportResult, QDateTime> importTrackMetadataAndCoverImage( 17 TrackMetadata* pTrackMetadata, 18 QImage* pCoverArt) const override; 19 20 void close() override; 21 22 protected: 23 ReadableSampleFrames readSampleFramesClamped( 24 const WritableSampleFrames& sampleFrames) override; 25 26 private: 27 OpenResult tryOpen( 28 OpenMode mode, 29 const OpenParams& params) override; 30 31 OggOpusFile* m_pOggOpusFile; 32 33 SampleBuffer m_prefetchSampleBuffer; 34 35 SINT m_curFrameIndex; 36 }; 37 38 class SoundSourceProviderOpus : public SoundSourceProvider { 39 public: 40 static const QString kDisplayName; 41 static const QStringList kSupportedFileExtensions; 42 getDisplayName()43 QString getDisplayName() const override { 44 return kDisplayName; 45 } 46 getSupportedFileExtensions()47 QStringList getSupportedFileExtensions() const override { 48 return kSupportedFileExtensions; 49 } 50 51 SoundSourceProviderPriority getPriorityHint( 52 const QString& supportedFileExtension) const override; 53 newSoundSource(const QUrl & url)54 SoundSourcePointer newSoundSource(const QUrl& url) override { 55 return newSoundSourceFromUrl<SoundSourceOpus>(url); 56 } 57 }; 58 59 } // namespace mixxx 60