taglib: Remove virtual functions workaround in audioproperties
This commit is contained in:
parent
ad4230f7fa
commit
2beb4b8c6f
|
@ -23,79 +23,27 @@
|
|||
* http://www.mozilla.org/MPL/ *
|
||||
***************************************************************************/
|
||||
|
||||
#include <tbytevector.h>
|
||||
|
||||
#include "aiffproperties.h"
|
||||
#include "apeproperties.h"
|
||||
#include "asfproperties.h"
|
||||
#include "flacproperties.h"
|
||||
#include "mp4properties.h"
|
||||
#include "mpcproperties.h"
|
||||
#include "mpegproperties.h"
|
||||
#include "opusproperties.h"
|
||||
#include "speexproperties.h"
|
||||
#include "trueaudioproperties.h"
|
||||
#include "vorbisproperties.h"
|
||||
#include "wavproperties.h"
|
||||
#include "wavpackproperties.h"
|
||||
#include "dsfproperties.h"
|
||||
#include "dsdiffproperties.h"
|
||||
#include <tstringlist.h>
|
||||
|
||||
#include "audioproperties.h"
|
||||
|
||||
using namespace Strawberry_TagLib::TagLib;
|
||||
|
||||
// This macro is a workaround for the fact that we can't add virtual functions.
|
||||
// Should be true virtual functions in taglib2.
|
||||
|
||||
#define VIRTUAL_FUNCTION_WORKAROUND(function_name, default_value) \
|
||||
if (dynamic_cast<const APE::AudioProperties*>(this)) \
|
||||
return dynamic_cast<const APE::AudioProperties*>(this)->function_name(); \
|
||||
else if (dynamic_cast<const ASF::AudioProperties*>(this)) \
|
||||
return dynamic_cast<const ASF::AudioProperties*>(this)->function_name(); \
|
||||
else if (dynamic_cast<const FLAC::AudioProperties*>(this)) \
|
||||
return dynamic_cast<const FLAC::AudioProperties*>(this)->function_name(); \
|
||||
else if (dynamic_cast<const MP4::AudioProperties*>(this)) \
|
||||
return dynamic_cast<const MP4::AudioProperties*>(this)->function_name(); \
|
||||
else if (dynamic_cast<const MPC::AudioProperties*>(this)) \
|
||||
return dynamic_cast<const MPC::AudioProperties*>(this)->function_name(); \
|
||||
else if (dynamic_cast<const MPEG::AudioProperties*>(this)) \
|
||||
return dynamic_cast<const MPEG::AudioProperties*>(this)->function_name(); \
|
||||
else if (dynamic_cast<const Ogg::Opus::AudioProperties*>(this)) \
|
||||
return dynamic_cast<const Ogg::Opus::AudioProperties*>(this)->function_name(); \
|
||||
else if (dynamic_cast<const Ogg::Speex::AudioProperties*>(this)) \
|
||||
return dynamic_cast<const Ogg::Speex::AudioProperties*>(this)->function_name(); \
|
||||
else if (dynamic_cast<const TrueAudio::AudioProperties*>(this)) \
|
||||
return dynamic_cast<const TrueAudio::AudioProperties*>(this)->function_name(); \
|
||||
else if (dynamic_cast<const RIFF::AIFF::AudioProperties*>(this)) \
|
||||
return dynamic_cast<const RIFF::AIFF::AudioProperties*>(this)->function_name(); \
|
||||
else if (dynamic_cast<const RIFF::WAV::AudioProperties*>(this)) \
|
||||
return dynamic_cast<const RIFF::WAV::AudioProperties*>(this)->function_name(); \
|
||||
else if (dynamic_cast<const Vorbis::AudioProperties*>(this)) \
|
||||
return dynamic_cast<const Vorbis::AudioProperties*>(this)->function_name(); \
|
||||
else if (dynamic_cast<const WavPack::AudioProperties*>(this)) \
|
||||
return dynamic_cast<const WavPack::AudioProperties*>(this)->function_name(); \
|
||||
else if (dynamic_cast<const DSF::AudioProperties*>(this)) \
|
||||
return dynamic_cast<const DSF::AudioProperties*>(this)->function_name(); \
|
||||
else if (dynamic_cast<const DSDIFF::AudioProperties*>(this)) \
|
||||
return dynamic_cast<const DSDIFF::AudioProperties*>(this)->function_name(); \
|
||||
else \
|
||||
return (default_value);
|
||||
|
||||
class AudioProperties::AudioPropertiesPrivate {};
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// public methods
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
AudioProperties::~AudioProperties() {}
|
||||
|
||||
int AudioProperties::lengthInSeconds() const {
|
||||
VIRTUAL_FUNCTION_WORKAROUND(lengthInSeconds, 0)
|
||||
}
|
||||
|
||||
int AudioProperties::lengthInMilliseconds() const {
|
||||
VIRTUAL_FUNCTION_WORKAROUND(lengthInMilliseconds, 0)
|
||||
String AudioProperties::toString() const {
|
||||
|
||||
StringList desc;
|
||||
desc.append("Audio");
|
||||
desc.append(String::number(lengthInSeconds()) + " seconds");
|
||||
desc.append(String::number(bitrate()) + " kbps");
|
||||
return desc.toString(", ");
|
||||
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
|
|
@ -67,14 +67,14 @@ class TAGLIB_EXPORT AudioProperties {
|
|||
*
|
||||
* \see lengthInMilliseconds()
|
||||
*/
|
||||
virtual int lengthInSeconds() const;
|
||||
virtual int lengthInSeconds() const = 0;
|
||||
|
||||
/*!
|
||||
* Returns the length of the file in milliseconds.
|
||||
*
|
||||
* \see lengthInSeconds()
|
||||
*/
|
||||
virtual int lengthInMilliseconds() const;
|
||||
virtual int lengthInMilliseconds() const = 0;
|
||||
|
||||
/*!
|
||||
* Returns the most appropriate bit rate for the file in kb/s. For constant bitrate formats this is simply the bitrate of the file.
|
||||
|
@ -92,6 +92,11 @@ class TAGLIB_EXPORT AudioProperties {
|
|||
*/
|
||||
virtual int channels() const = 0;
|
||||
|
||||
/*!
|
||||
* Returns description of the audio file.
|
||||
*/
|
||||
virtual String toString() const;
|
||||
|
||||
protected:
|
||||
/*!
|
||||
* Construct an audio properties instance.
|
||||
|
|
Loading…
Reference in New Issue