From 5fc36a17d103f44a3c7dee23ebe032c4cebb8b6d Mon Sep 17 00:00:00 2001 From: casey langen Date: Fri, 28 Jul 2017 23:28:52 -0700 Subject: [PATCH] Updated the libmpg123 decoder plugin. It compiles and works again. --- src/plugins/mpg123decoder/Mpg123Decoder.cpp | 19 +++++++++++++------ src/plugins/mpg123decoder/Mpg123Decoder.h | 1 + .../mpg123decoder/Mpg123DecoderFactory.cpp | 8 +++++++- .../mpg123decoder/mpg123decoder.vcxproj | 6 +++--- .../mpg123decoder/mpg123decoder_plugin.cpp | 5 +++++ src/plugins/mpg123decoder/stdafx.h | 2 +- 6 files changed, 30 insertions(+), 11 deletions(-) diff --git a/src/plugins/mpg123decoder/Mpg123Decoder.cpp b/src/plugins/mpg123decoder/Mpg123Decoder.cpp index e62b5789a..5f6a2251a 100644 --- a/src/plugins/mpg123decoder/Mpg123Decoder.cpp +++ b/src/plugins/mpg123decoder/Mpg123Decoder.cpp @@ -36,9 +36,9 @@ #include #define STREAM_FEED_SIZE 2048 * 2 -#define DEBUG 0 +#define MPG123_DECODER_DEBUG 0 -#if DEBUG > 0 +#if MPG123_DECODER_DEBUG > 0 #include #endif @@ -67,9 +67,17 @@ void Mpg123Decoder::Destroy() { delete this; } +double Mpg123Decoder::GetDuration() { + if (this->decoder) { + return (double) mpg123_length(this->decoder) / (double) this->sampleRate; + } + + return 0.0; +} + double Mpg123Decoder::SetPosition(double second) { off_t seekToFileOffset = 0; - off_t seekToSampleOffset = second * (double)this->sampleRate; + off_t seekToSampleOffset = (off_t) (second * (double)this->sampleRate); off_t *indexOffset = 0; off_t indexSet = 0; size_t indexFill = 0; @@ -136,7 +144,7 @@ bool Mpg123Decoder::GetBuffer(IBuffer *buffer) { break; case MPG123_NEW_FORMAT: { -#if DEBUG > 0 +#if MPG123_DECODER_DEBUG > 0 int encoding = 0; mpg123_getformat( @@ -165,8 +173,7 @@ bool Mpg123Decoder::Feed() { if (this->fileStream) { unsigned char buffer[STREAM_FEED_SIZE]; - long long bytesRead = - this->fileStream->Read(&buffer, STREAM_FEED_SIZE); + long bytesRead = this->fileStream->Read(&buffer, STREAM_FEED_SIZE); if (bytesRead) { if (mpg123_feed(this->decoder, buffer, bytesRead) == MPG123_OK) { diff --git a/src/plugins/mpg123decoder/Mpg123Decoder.h b/src/plugins/mpg123decoder/Mpg123Decoder.h index 38ad7347b..95fdf7ba1 100644 --- a/src/plugins/mpg123decoder/Mpg123Decoder.h +++ b/src/plugins/mpg123decoder/Mpg123Decoder.h @@ -48,6 +48,7 @@ class Mpg123Decoder : public musik::core::sdk::IDecoder { virtual double SetPosition(double seconds); virtual bool GetBuffer(musik::core::sdk::IBuffer *buffer); virtual void Destroy(); + virtual double GetDuration(); private: bool Feed(); diff --git a/src/plugins/mpg123decoder/Mpg123DecoderFactory.cpp b/src/plugins/mpg123decoder/Mpg123DecoderFactory.cpp index a8055353e..75d790a7b 100644 --- a/src/plugins/mpg123decoder/Mpg123DecoderFactory.cpp +++ b/src/plugins/mpg123decoder/Mpg123DecoderFactory.cpp @@ -42,6 +42,12 @@ using namespace musik::core::sdk; +inline bool endsWith(const std::string& s, const std::string& suffix) { + return + s.size() >= suffix.size() && + s.rfind(suffix) == (s.size() - suffix.size()); +} + Mpg123DecoderFactory::Mpg123DecoderFactory() { mpg123_init(); } @@ -62,7 +68,7 @@ bool Mpg123DecoderFactory::CanHandle(const char* type) const { std::string str(type); std::transform(str.begin(), str.end(), str.begin(), tolower); - if (musik::sdk::endsWith(str, ".mp3") || + if (endsWith(str, ".mp3") || str.find("audio/mpeg3") != std::string::npos || str.find("audio/x-mpeg-3") != std::string::npos || str.find("audio/mp3") != std::string::npos) diff --git a/src/plugins/mpg123decoder/mpg123decoder.vcxproj b/src/plugins/mpg123decoder/mpg123decoder.vcxproj index 088ba291f..51cef88e2 100755 --- a/src/plugins/mpg123decoder/mpg123decoder.vcxproj +++ b/src/plugins/mpg123decoder/mpg123decoder.vcxproj @@ -14,18 +14,18 @@ {04118CC2-DE10-4627-A695-2219428C7D59} mpg123decoder Win32Proj - 8.1 + 10.0.14393.0 DynamicLibrary - v140 + v141 Unicode true DynamicLibrary - v140 + v141 Unicode diff --git a/src/plugins/mpg123decoder/mpg123decoder_plugin.cpp b/src/plugins/mpg123decoder/mpg123decoder_plugin.cpp index dc84511f4..b42acfcc7 100644 --- a/src/plugins/mpg123decoder/mpg123decoder_plugin.cpp +++ b/src/plugins/mpg123decoder/mpg123decoder_plugin.cpp @@ -53,6 +53,11 @@ class Mpg123Plugin : public musik::core::sdk::IPlugin { virtual const char* Name() { return "mpg123 IDecoder"; } virtual const char* Version() { return "0.4"; } virtual const char* Author() { return "Daniel Önnerby, clangen"; } + virtual const char* Guid() { return "89f705c4-50ae-4577-9cc2-09bb94f341a8"; } + virtual bool Configurable() { return false; } + virtual void Configure() { } + virtual void Reload() { } + virtual int SdkVersion() { return musik::core::sdk::SdkVersion; } }; extern "C" DLLEXPORT musik::core::sdk::IPlugin* GetPlugin() { diff --git a/src/plugins/mpg123decoder/stdafx.h b/src/plugins/mpg123decoder/stdafx.h index 66f9ae199..7cb02f7a3 100644 --- a/src/plugins/mpg123decoder/stdafx.h +++ b/src/plugins/mpg123decoder/stdafx.h @@ -34,7 +34,7 @@ #pragma once -#include +#include #include #ifdef WIN32