#ifndef FFCONV_MEDIAFILE_H #define FFCONV_MEDIAFILE_H #include "Stream.h" #include "Packet.h" extern "C" { #include } #include #include namespace ffcpp { enum class Mode { Read, Write }; class MediaFile { private: AVFormatContext* _formatCtx; Mode _mode; std::vector _streams; public: MediaFile(const std::string& src, Mode mode); operator AVFormatContext*() const; bool hasVideo() const; bool hasAudio() const; Stream& videoStream(size_t index = 0); Stream& audioStream(size_t index = 0); Stream& addStream(AVCodecID codecID, int width, int height, AVPixelFormat pixelFormat); Packet readPacket(); AVMediaType packetType(const Packet& packet); void writeHeader(); void writeTrailer(); void writePacket(Packet& packet); ~MediaFile(); private: bool hasStream(AVMediaType type) const; Stream& getStream(AVMediaType type, size_t index); }; } #endif //FFCONV_MEDIAFILE_H