summaryrefslogtreecommitdiff
path: root/frontend.h
blob: a34f9579d07dfc892a2f612fa4bd603cc24fa83f (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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
/*
 * frontend.h:
 *
 * See the main source file 'xineliboutput.c' for copyright information and
 * how to reach the author.
 *
 * $Id: frontend.h,v 1.15 2007-06-21 09:49:57 phintuka Exp $
 *
 */

#ifndef __XINELIB_FRONTEND_H
#define __XINELIB_FRONTEND_H

#include <vdr/tools.h>
#include <vdr/thread.h>

//----------------------------- cXinelibThread --------------------------------

class cXinelibThread : public cThread, public cListObject 
{
  private:
    cXinelibThread(cXinelibThread&); // no copy contructor

  public:
    cXinelibThread(const char *Description = NULL);
    virtual ~cXinelibThread();

  //
  // Thread control
  //

  public:
    virtual void Start(void);
    virtual void Stop(void);
    bool IsReady(void);
    bool IsFinished(void);

  protected:
    void SetStopSignal(void);
    bool GetStopSignal(void);

    virtual void Action(void) = 0;

  //
  // Playback control
  //

  public:
    void PauseOutput(void)  { TrickSpeed(0); }
    void ResumeOutput(void) { TrickSpeed(1); }
    virtual void TrickSpeed(int Speed);
    void SetVolume(int NewVolume);
    void SetLiveMode(bool);
    void SetStillMode(bool);
    void SetNoVideo(bool bVal);
    void AudioStreamChanged(bool ac3, int StreamId);
    void SpuStreamChanged(int StreamId);

  protected:
    int  Xine_Control(const char *cmd, const char *p1);
    int  Xine_Control(const char *cmd, int p1);
    int  Xine_Control(const char *cmd, int64_t p1);
    virtual int  Xine_Control(const char *cmd) = 0;
    virtual int  Xine_Control_Sync(const char *cmd) { return Xine_Control(cmd); }

  //
  // Data transfer
  //

  public:
    virtual int  Poll(cPoller &Poller, int TimeoutMs);
    virtual bool Flush(int TimeoutMs);
    virtual void Clear(void);
    virtual int  Play_PES(const uchar *buf, int len);
    virtual void OsdCmd(void *cmd) = 0;
    virtual int64_t GetSTC(void) { return -1; }
    virtual void SetHDMode(bool On) { (void)Xine_Control("HDMODE",On?1:0); };

    // Stream type conversions
    int  Play_Mpeg1_PES(const uchar *data, int len);
    bool Play_Mpeg2_ES(const uchar *data, int len, int streamID);

    // Built-in still images
    bool BlankDisplay(void);
    bool QueueBlankDisplay(void);
    bool LogoDisplay(void);
    bool NoSignalDisplay(void);

    // Playback files
    virtual bool PlayFile(const char *FileName, int Position, 
			  bool LoopPlay=false);
    virtual int  PlayFileCtrl(const char *Cmd) { return Xine_Control(Cmd); }
    virtual bool EndOfStreamReached(void);

    // Image grabbing
    virtual uchar *GrabImage(int &Size, bool Jpeg, int Quality, 
			     int SizeX, int SizeY) { return NULL; }

    // Control from frontend
    static void KeypressHandler(const char *keymap, const char *key, 
				bool repeat, bool release);
    static void InfoHandler(const char *info);

  //
  // Configuration
  //

  public:
    virtual int ConfigureOSD(bool prescale_osd=false, bool unscaled_osd=false);
    virtual int ConfigurePostprocessing(const char *deinterlace_method, 
					int audio_delay, 
					int audio_compression, 
					const int *audio_equalizer,
					int audio_surround,
					int speaker_type);
    virtual int ConfigurePostprocessing(const char *name, bool on, const char *args);
    virtual int ConfigureVideo(int hue, int saturation, 
			       int brightness, int contrast,
			       int overscan);
    // Local frontend:
    virtual void ConfigureWindow(int fullscreen, int width, int height, 
				 int modeswitch, const char *modeline, 
				 int aspect, int scale_video, 
				 int field_order) {};
    virtual void ConfigureDecoder(int pes_buffers) {};
    // Remote frontend server:
    virtual bool Listen(int port) { return false; }

  //
  // Data
  //

  protected:
    bool m_bStopThread;
    bool m_bReady;
    bool m_bIsFinished;
    bool m_bNoVideo;
    bool m_bLiveMode;
    bool m_bEndOfStreamReached;
    bool m_bPlayingFile;
    cString  m_FileName;
    uint64_t m_StreamPos;
    uint32_t m_Frames;
};


#endif // __XINELIB_FRONTEND_H