#ifndef RTC_MEDIA_HANDLER_H
#define RTC_MEDIA_HANDLER_H
#include "common.hpp"
#include "description.hpp"
#include "message.hpp"
namespace rtc {
class RTC_CPP_EXPORT MediaHandler : public std::enable_shared_from_this<MediaHandler> {
public:
MediaHandler();
virtual ~MediaHandler();
virtual void media([[maybe_unused]] const Description::Media &desc) {}
virtual void incoming([[maybe_unused]] message_vector &messages, [[maybe_unused]] const message_callback &send) {}
virtual void outgoing([[maybe_unused]] message_vector &messages, [[maybe_unused]] const message_callback &send) {}
virtual bool requestKeyframe(const message_callback &send);
virtual bool requestBitrate(unsigned int bitrate, const message_callback &send);
void addToChain(shared_ptr<MediaHandler> handler);
void setNext(shared_ptr<MediaHandler> handler);
shared_ptr<MediaHandler> next();
shared_ptr<const MediaHandler> next() const;
shared_ptr<MediaHandler> last(); shared_ptr<const MediaHandler> last() const;
void mediaChain(const Description::Media &desc);
void incomingChain(message_vector &messages, const message_callback &send);
void outgoingChain(message_vector &messages, const message_callback &send);
private:
shared_ptr<MediaHandler> mNext;
};
}
#endif