4.5.1r9
[enigma2.git] / usr / include / enigma2 / lib / parser / stream / streamprocessor.h
1 #ifndef __lib_parser_stream_streamprocessor_h
2 #define __lib_parser_stream_streamprocessor_h
3
4 #include <lib/base/ebase.h>
5 #include <lib/service/iservice.h>
6 #include <lib/parser/stream/istream.h>
7 #include <vector>
8 #include <string>
9 #include <memory>
10
11 class StreamManager;
12 class eStreamProcessor;
13
14 class eStreamProcessorFactory
15 {
16         static std::vector<eStreamProcessorFactory*> s_factories;
17
18 public:
19         eStreamProcessorFactory(const std::string &name, int priority = 0);
20         virtual ~eStreamProcessorFactory();
21
22         const std::string &getName() const;
23         int getPriority() const;
24
25         virtual bool canProcess(const std::vector<StreamInfo> &streamInfos) const = 0;
26         virtual std::shared_ptr<eStreamProcessor> create(StreamManager &streamManager) const = 0;
27
28         static void registerFactory(eStreamProcessorFactory* factory);
29         static const std::vector<eStreamProcessorFactory*> &getFactories();
30         static eSignal1<void, eStreamProcessorFactory*> factoryAdded;
31 private:
32         const std::string m_name;
33         int m_prio;
34 };
35
36 class eStreamProcessor
37 {
38         SWIG_AUTODOC
39 public:
40         virtual ~eStreamProcessor();
41
42         const eServiceReference &getServiceReference() const;
43         bool valid() const;
44
45         virtual void start() = 0;
46         virtual void stop() = 0;
47         virtual bool pause() = 0;
48         virtual bool resume() = 0;
49         virtual void seekDone(int status) = 0;
50         virtual void flush() = 0;
51
52         virtual void parsed() = 0;
53         virtual void ready() = 0;
54
55         const std::vector<StreamInfo> &getStreams() const;
56         bool selectVideoStream(int index, const StreamRestrictions &restrictions = StreamRestrictions());
57         bool selectAudioStream(int index, const StreamRestrictions &restrictions = StreamRestrictions());
58         void deleteStream(int index);
59
60         int getActiveVideoIndex() const;
61         int getActiveAudioIndex() const;
62         virtual int getActiveAudioCodec() const = 0;
63
64         virtual bool getWidth(int &width) const;
65         virtual bool getHeight(int &height) const;
66         virtual bool getAspect(int &aspect) const;
67         virtual bool getFramerate(int &framerate) const;
68         virtual bool getProgressive(int &progressive) const;
69         virtual bool isEOS() const;
70
71         bool getVideoFrames(std::vector<RawData> &frames);
72         bool getAudioPackets(std::vector<RawData> &packets);
73
74         eSignal1<void, bool> streamStarted; // emitted when buffer is ready after first start or seek
75
76         eSignal3<void, int, int, int> formatChanged;
77         eSignal1<void, int> framerateChanged;
78         eSignal1<void, int> progressiveChanged;
79         eSignal0<void> videoPtsValid;
80
81         eSignal0<void> lastVideoConsumed;
82         eSignal0<void> lastAudioConsumed;
83
84         eSignal0<void> audioCodecChanged;
85
86 protected:
87         eStreamProcessor(StreamManager &streamManager);
88
89 private:
90         StreamManager &m_streamManager;
91         std::shared_ptr<iStream> m_stream;
92         bool m_audioNeedsSync;
93 };
94
95 #endif