aboutsummaryrefslogtreecommitdiff
path: root/lib/dvb/decoder.h
blob: fb543feda783a803ad8551fc5eb32156922f5034 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#ifndef __decoder_h
#define __decoder_h

#include <lib/base/object.h>
#include <lib/dvb/demux.h>

class eDVBAudio: public iObject
{
DECLARE_REF(eDVBAudio);
private:
	ePtr<eDVBDemux> m_demux;
	int m_fd, m_fd_demux;
public:
	enum {aMPEG, aAC3, aDTS };
	eDVBAudio(eDVBDemux *demux, int dev);
	int startPid(int pid, int type);
	void stop();
#if HAVE_DVB_API_VERSION < 3
	void start();
	void stopPid();
#endif
	void flush();
	void freeze();
	void unfreeze();
	virtual ~eDVBAudio();
};

class eDVBVideo: public iObject
{
DECLARE_REF(eDVBVideo);
private:
	ePtr<eDVBDemux> m_demux;
	int m_fd, m_fd_demux;
	
	int m_is_slow_motion, m_is_fast_forward;
public:
	eDVBVideo(eDVBDemux *demux, int dev);
	int startPid(int pid);
	void stop();
#if HAVE_DVB_API_VERSION < 3
	void start();
	void stopPid();
#endif
	void flush();
	void freeze();
	int setSlowMotion(int repeat);
	int setFastForward(int skip);
	void unfreeze();
	virtual ~eDVBVideo();
};

class eDVBPCR: public iObject
{
DECLARE_REF(eDVBPCR);
private:
	ePtr<eDVBDemux> m_demux;
	int m_fd_demux;
public:
	eDVBPCR(eDVBDemux *demux);
	int startPid(int pid);
	void stop();
	virtual ~eDVBPCR();
};

class eTSMPEGDecoder: public Object, public iTSMPEGDecoder
{
DECLARE_REF(eTSMPEGDecoder);
private:
	ePtr<eDVBDemux> m_demux;
	ePtr<eDVBAudio> m_audio;
	ePtr<eDVBVideo> m_video;
	ePtr<eDVBPCR> m_pcr;
	int m_vpid, m_apid, m_atype, m_pcrpid;
	enum
	{
		changeVideo = 1, 
		changeAudio = 2, 
		changePCR   = 4
	};
	int m_changed;
	int m_is_ff, m_is_sm, m_is_trickmode;
	int setState();
	ePtr<eConnection> m_demux_event;
	
	void demux_event(int event);
public:
	enum { pidNone = -1 };
	eTSMPEGDecoder(eDVBDemux *demux, int decoder);
	virtual ~eTSMPEGDecoder();
	RESULT setVideoPID(int vpid);
	RESULT setAudioPID(int apid, int type);
	RESULT setSyncPCR(int pcrpid);
	RESULT setSyncMaster(int who);
	RESULT start();
	RESULT freeze(int cont);
	RESULT unfreeze();
	RESULT setSinglePictureMode(int when);
	RESULT setPictureSkipMode(int what);
	RESULT setFastForward(int frames_to_skip);
	RESULT setSlowMotion(int repeat);
	RESULT setZoom(int what);
	RESULT flush();
	RESULT setTrickmode(int what);
};
#endif