//
// Copyright © 2020 Arm Ltd and Contributors. All rights reserved.
// SPDX-License-Identifier: MIT
//

#pragma once

#include <cstddef>
#include <memory>

namespace od
{
/**
 * @brief Frames output interface
 *
 * @tparam FrameDataT frame container data type
 */
    template<typename FrameDataT> class IFrameOutput
    {

    public:
        /**
         * @brief Writes frame to the selected output
         *
         * @param frame container
         */
        virtual void WriteFrame(std::shared_ptr <FrameDataT>& frame) = 0;

        /**
         * @brief Closes the frame output
         */
        virtual void Close() = 0;

        /**
         * @brief Checks if the frame sink is ready to write.
         *
         * @return True if frame sink is ready, False otherwise
         */
        virtual bool IsReady() const = 0;

        /**
         * @brief Default destructor
         */
        virtual ~IFrameOutput() = default;

    };

}// namespace od
