Commit 96a1c69c authored by Max Kellermann's avatar Max Kellermann

tag/Handler: add virtual method OnPicture()

parent 3895d35a
...@@ -36,6 +36,11 @@ NullTagHandler::OnPair(StringView, StringView) noexcept ...@@ -36,6 +36,11 @@ NullTagHandler::OnPair(StringView, StringView) noexcept
} }
void void
NullTagHandler::OnPicture(const char *, ConstBuffer<void>) noexcept
{
}
void
NullTagHandler::OnAudioFormat(gcc_unused AudioFormat af) noexcept NullTagHandler::OnAudioFormat(gcc_unused AudioFormat af) noexcept
{ {
} }
......
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
#include "Chrono.hxx" #include "Chrono.hxx"
#include "util/Compiler.h" #include "util/Compiler.h"
template<typename T> struct ConstBuffer;
struct StringView; struct StringView;
struct AudioFormat; struct AudioFormat;
class TagBuilder; class TagBuilder;
...@@ -39,6 +40,7 @@ public: ...@@ -39,6 +40,7 @@ public:
static constexpr unsigned WANT_TAG = 0x2; static constexpr unsigned WANT_TAG = 0x2;
static constexpr unsigned WANT_PAIR = 0x4; static constexpr unsigned WANT_PAIR = 0x4;
static constexpr unsigned WANT_AUDIO_FORMAT = 0x8; static constexpr unsigned WANT_AUDIO_FORMAT = 0x8;
static constexpr unsigned WANT_PICTURE = 0x10;
explicit TagHandler(unsigned _want_mask) noexcept explicit TagHandler(unsigned _want_mask) noexcept
:want_mask(_want_mask) {} :want_mask(_want_mask) {}
...@@ -62,6 +64,10 @@ public: ...@@ -62,6 +64,10 @@ public:
return want_mask & WANT_AUDIO_FORMAT; return want_mask & WANT_AUDIO_FORMAT;
} }
bool WantPicture() const noexcept {
return want_mask & WANT_PICTURE;
}
/** /**
* Declare the duration of a song. Do not call * Declare the duration of a song. Do not call
* this when the duration could not be determined, because * this when the duration could not be determined, because
...@@ -99,6 +105,18 @@ public: ...@@ -99,6 +105,18 @@ public:
* too expensive. * too expensive.
*/ */
virtual void OnAudioFormat(AudioFormat af) noexcept = 0; virtual void OnAudioFormat(AudioFormat af) noexcept = 0;
/**
* A picture has been read.
*
* This method will only be called if #WANT_PICTURE was enabled.
*
* @param mime_type an optional MIME type string
* @param buffer the picture file contents; the buffer will be
* invalidated after this method returns
*/
virtual void OnPicture(const char *mime_type,
ConstBuffer<void> buffer) noexcept = 0;
}; };
class NullTagHandler : public TagHandler { class NullTagHandler : public TagHandler {
...@@ -110,6 +128,8 @@ public: ...@@ -110,6 +128,8 @@ public:
void OnTag(TagType type, StringView value) noexcept override; void OnTag(TagType type, StringView value) noexcept override;
void OnPair(StringView key, StringView value) noexcept override; void OnPair(StringView key, StringView value) noexcept override;
void OnAudioFormat(AudioFormat af) noexcept override; void OnAudioFormat(AudioFormat af) noexcept override;
void OnPicture(const char *mime_type,
ConstBuffer<void> buffer) noexcept override;
}; };
/** /**
......
...@@ -49,7 +49,7 @@ class DumpTagHandler final : public NullTagHandler { ...@@ -49,7 +49,7 @@ class DumpTagHandler final : public NullTagHandler {
public: public:
DumpTagHandler() noexcept DumpTagHandler() noexcept
:NullTagHandler(WANT_DURATION|WANT_TAG|WANT_PAIR) {} :NullTagHandler(WANT_DURATION|WANT_TAG|WANT_PAIR|WANT_PICTURE) {}
bool IsEmpty() const noexcept { bool IsEmpty() const noexcept {
return empty; return empty;
...@@ -74,6 +74,11 @@ public: ...@@ -74,6 +74,11 @@ public:
void OnAudioFormat(AudioFormat af) noexcept override { void OnAudioFormat(AudioFormat af) noexcept override {
printf("%s\n", ToString(af).c_str()); printf("%s\n", ToString(af).c_str());
} }
void OnPicture(const char *mime_type,
ConstBuffer<void> buffer) noexcept override {
printf("picture mime='%s' size=%zu\n", mime_type, buffer.size);
}
}; };
int main(int argc, char **argv) int main(int argc, char **argv)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment