mirror of
https://github.com/tuxbox-neutrino/libstb-hal.git
synced 2025-08-26 15:02:58 +02:00
libeplayer3: implement multi-program support
This commit is contained in:
@@ -44,6 +44,7 @@ class Track;
|
||||
class Input
|
||||
{
|
||||
friend class Player;
|
||||
friend class WriterPCM; // needs calcPts()
|
||||
friend int interrupt_cb(void *arg);
|
||||
|
||||
private:
|
||||
|
@@ -46,10 +46,18 @@ struct Track
|
||||
int pid;
|
||||
AVStream *stream;
|
||||
bool inactive;
|
||||
bool hidden; // not part of currently selected program
|
||||
bool is_static;
|
||||
int ac3flags;
|
||||
int type, mag, page; // for teletext
|
||||
Track() : pid(-1), stream(NULL), inactive(0), is_static(0), ac3flags(0) {}
|
||||
Track() : pid(-1), stream(NULL), inactive(false), hidden(false), is_static(false), ac3flags(0) {}
|
||||
};
|
||||
|
||||
struct Program
|
||||
{
|
||||
int id;
|
||||
std::string title;
|
||||
std::vector<AVStream *> streams;
|
||||
};
|
||||
|
||||
class Manager
|
||||
@@ -60,6 +68,7 @@ class Manager
|
||||
Player *player;
|
||||
OpenThreads::Mutex mutex;
|
||||
std::map<int,Track*> videoTracks, audioTracks, subtitleTracks, teletextTracks;
|
||||
std::map<int,Program> Programs;
|
||||
void addTrack(std::map<int,Track*> &tracks, Track &track);
|
||||
Track *getTrack(std::map<int,Track*> &tracks, int pid);
|
||||
std::vector<Track> getTracks(std::map<int,Track*> &tracks);
|
||||
@@ -68,11 +77,14 @@ class Manager
|
||||
void addAudioTrack(Track &track);
|
||||
void addSubtitleTrack(Track &track);
|
||||
void addTeletextTrack(Track &track);
|
||||
void addProgram(Program &program);
|
||||
|
||||
std::vector<Track> getVideoTracks();
|
||||
std::vector<Track> getAudioTracks();
|
||||
std::vector<Track> getSubtitleTracks();
|
||||
std::vector<Track> getTeletextTracks();
|
||||
std::vector<Program> getPrograms();
|
||||
bool selectProgram(const int id);
|
||||
|
||||
Track *getVideoTrack(int pid);
|
||||
Track *getAudioTrack(int pid);
|
||||
|
@@ -56,6 +56,7 @@ class Player {
|
||||
friend class Output;
|
||||
friend class Manager;
|
||||
friend class cPlayback;
|
||||
friend class WriterPCM;
|
||||
friend int interrupt_cb(void *arg);
|
||||
|
||||
private:
|
||||
@@ -117,6 +118,10 @@ class Player {
|
||||
AVFormatContext *GetAVFormatContext() { return input.GetAVFormatContext(); }
|
||||
void ReleaseAVFormatContext() { input.ReleaseAVFormatContext(); }
|
||||
|
||||
bool GetPrograms(std::vector<std::string> &keys, std::vector<std::string> &values);
|
||||
bool SelectProgram(int key);
|
||||
bool SelectProgram(std::string &key);
|
||||
|
||||
Player();
|
||||
};
|
||||
#endif
|
||||
|
@@ -37,10 +37,13 @@ extern "C" {
|
||||
|
||||
#define AV_CODEC_ID_INJECTPCM AV_CODEC_ID_PCM_S16LE
|
||||
|
||||
class Player;
|
||||
|
||||
class Writer
|
||||
{
|
||||
protected:
|
||||
int fd;
|
||||
Player *player;
|
||||
public:
|
||||
static void Register(Writer *w, enum AVCodecID id, video_encoding_t encoding);
|
||||
static void Register(Writer *w, enum AVCodecID id, audio_encoding_t encoding);
|
||||
@@ -48,7 +51,7 @@ class Writer
|
||||
static audio_encoding_t GetAudioEncoding(enum AVCodecID id);
|
||||
static Writer *GetWriter(enum AVCodecID id, enum AVMediaType codec_type);
|
||||
|
||||
virtual void Init(int _fd, AVStream * /*stream*/ ) { fd = _fd; }
|
||||
virtual void Init(int _fd, AVStream * /*stream*/, Player *_player ) { fd = _fd; player = _player; }
|
||||
virtual bool Write(AVPacket *packet, int64_t pts);
|
||||
};
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user