#ifndef _FFMPEG_FORMAT_CONTEXT_IN_H_ #define _FFMPEG_FORMAT_CONTEXT_IN_H_ #include struct AVFormatContext; struct AVDictionary; struct AVStream; struct AVCodecContext; struct AVPacket; struct AVFrame; struct AVCodec; namespace ffwrapper{ class VideoProp; class CodedData; class FrameData; class FormatIn { public: explicit FormatIn(bool hw=true); ~FormatIn(); public: int open(const char *filename, AVDictionary **options); bool findStreamInfo(AVDictionary **options); bool openCodec(const int type, AVDictionary **options); bool readPacket(AVPacket &pkt_out, int stream_index = 0); bool readPacket(std::shared_ptr &data, int stream_index = 0); int decode(AVFrame* &frame, AVPacket &pkt); int decode(std::shared_ptr &frame_data, std::shared_ptr &data); int readFrame(AVFrame* &frame); int readFrame(std::shared_ptr &frame_data); private: bool allocCodec(AVCodec *dec, AVStream *s, AVDictionary **options); public: AVStream *getStream(int type = 0); AVCodecContext *getCodecContext(int type = 0); private: AVFormatContext *ctx_; AVCodecContext *dec_ctx_; int vs_idx_; bool hw_accl_; }; } #endif