mpd/src/input/IcyInputStream.hxx

60 lines
1.5 KiB
C++
Raw Normal View History

// SPDX-License-Identifier: GPL-2.0-or-later
// Copyright The Music Player Daemon Project
#ifndef MPD_ICY_INPUT_STREAM_HXX
#define MPD_ICY_INPUT_STREAM_HXX
#include "ProxyInputStream.hxx"
2017-12-20 15:13:22 +01:00
#include <memory>
struct Tag;
class IcyMetaDataParser;
/**
* An #InputStream filter that parses Icy metadata.
*/
class IcyInputStream final : public ProxyInputStream {
std::shared_ptr<IcyMetaDataParser> parser;
/**
* The #Tag object ready to be requested via ReadTag().
*/
2017-12-20 15:13:22 +01:00
std::unique_ptr<Tag> input_tag;
/**
* The #Tag object ready to be requested via ReadTag().
*/
2017-12-20 15:13:22 +01:00
std::unique_ptr<Tag> icy_tag;
offset_type override_offset = 0;
public:
/**
* @param _parser a IcyMetaDataParser instance which is shared
* with our input; it needs to be shared because our input
* needs to feed parameters (e.g. from the "icy-metaint"
* header) into it
*
* Throws on error (e.g. if the charset converter specified by
* the URI fragment fails to initialize).
*/
2017-12-26 11:37:29 +01:00
IcyInputStream(InputStreamPtr _input,
std::shared_ptr<IcyMetaDataParser> _parser);
~IcyInputStream() noexcept override;
IcyInputStream(const IcyInputStream &) = delete;
IcyInputStream &operator=(const IcyInputStream &) = delete;
2021-10-13 11:28:04 +02:00
[[gnu::pure]]
bool IsEnabled() const noexcept;
/* virtual methods from InputStream */
2017-12-26 11:31:05 +01:00
void Update() noexcept override;
std::unique_ptr<Tag> ReadTag() noexcept override;
size_t Read(std::unique_lock<Mutex> &lock,
void *ptr, size_t size) override;
};
#endif