#ifndef MANAGER_H_ #define MANAGER_H_ #include #include #include #include #include #include #include #include extern "C" { #include #include #include #include #include } typedef enum { MANAGER_ADD, MANAGER_LIST, MANAGER_GET, MANAGER_GETNAME, MANAGER_SET, MANAGER_DEL, MANAGER_GET_TRACK, MANAGER_INIT_UPDATE } ManagerCmd_t; struct Track { std::string Name; int pid; /* length of track */ int64_t duration; /* context from ffmpeg */ AVFormatContext *avfc; /* stream from ffmpeg */ AVStream *stream; bool inactive; bool is_static; int ac3flags; int type, mag, page; // for teletext Track() : pid(-1), duration(-1), avfc(NULL), stream(NULL), inactive(0), is_static(0), ac3flags(-1) {} }; class Manager { private: OpenThreads::Mutex mutex; std::map videoTracks, audioTracks, subtitleTracks, teletextTracks; public: void addVideoTrack(Track &track); void addAudioTrack(Track &track); void addSubtitleTrack(Track &track); void addTeletextTrack(Track &track); std::vector getVideoTracks(); std::vector getAudioTracks(); std::vector getSubtitleTracks(); std::vector getTeletextTracks(); Track *getVideoTrack(int pid); Track *getAudioTrack(int pid); Track *getSubtitleTrack(int pid); Track *getTeletextTrack(int pid); bool initTrackUpdate(); void clearTracks(); ~Manager(); }; #endif