]> git.vomp.tv Git - vompclient-marten.git/blob - videovpeogl.h
Adding Logging over mulitple lines for querying opengl
[vompclient-marten.git] / videovpeogl.h
1 /*\r
2     Copyright 2004-2005 Chris Tallon 2009 Marten Richter\r
3 \r
4     This file is part of VOMP.\r
5 \r
6     VOMP is free software; you can redistribute it and/or modify\r
7     it under the terms of the GNU General Public License as published by\r
8     the Free Software Foundation; either version 2 of the License, or\r
9     (at your option) any later version.\r
10 \r
11     VOMP is distributed in the hope that it will be useful,\r
12     but WITHOUT ANY WARRANTY; without even the implied warranty of\r
13     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
14     GNU General Public License for more details.\r
15 \r
16     You should have received a copy of the GNU General Public License\r
17     along with VOMP; if not, write to the Free Software\r
18     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.\r
19 */\r
20 \r
21 \r
22 #ifndef VIDEOVPEOGL_H\r
23 #define VIDEOVPEOGL_H\r
24 \r
25 #include "mutex.h"\r
26 \r
27 #include <stdio.h>\r
28 #include <unistd.h>\r
29 #include <fcntl.h>\r
30 #include <sys/ioctl.h>\r
31 #include <string.h>\r
32 \r
33 #include <stdint.h>\r
34 \r
35 #include <list>\r
36 #include <vector>\r
37 \r
38 #include "defines.h"\r
39 #include "video.h"\r
40 \r
41 //#define EGL_EGLEXT_PROTOTYPES\r
42 \r
43 #include <GLES2/gl2.h>\r
44 #include <EGL/egl.h>\r
45 #include <EGL/eglext.h>\r
46 \r
47 #ifdef VPE_OMX_SUPPORT\r
48 \r
49 #include <IL/OMX_Core.h>\r
50 #include <IL/OMX_Types.h>\r
51 #include <IL/OMX_Component.h>\r
52 #include <IL/OMX_Broadcom.h>\r
53 \r
54 #endif\r
55 \r
56 \r
57 \r
58 /*\r
59 struct VPEOGLFrame {\r
60         int type; //1 = RGB, 2 YUV\r
61         GLuint textures[3]; // 0=RGB or Y, 1=U 2=V\r
62 \r
63 #ifdef VPE_OMX_SUPPORT\r
64         //OMX\r
65         EGLImageKHR khr_image;\r
66         OMX_BUFFERHEADERTYPE *omx_buf;\r
67 #endif\r
68 };*/\r
69 \r
70 class VideoVPEOGL : public Video\r
71 {\r
72   public:\r
73     VideoVPEOGL();\r
74     virtual ~VideoVPEOGL();\r
75 \r
76     int init(UCHAR format);\r
77     int shutdown();\r
78 \r
79     int setFormat(UCHAR format);\r
80     int setConnection(UCHAR connection);\r
81     int setAspectRatio(UCHAR aspectRatio);   // This one does the pin 8 scart widescreen switching\r
82     int setMode(UCHAR mode);\r
83     int setTVsize(UCHAR size);               // Is the TV a widescreen?\r
84     int setDefaultAspect();\r
85     int setSource();\r
86     int setPosition(int x, int y);\r
87     int sync();\r
88     int play();\r
89     int stop();\r
90     int pause();\r
91     int unPause();\r
92     int fastForward();\r
93     int unFastForward();\r
94     int reset();\r
95     int blank();\r
96     int signalOn();\r
97     int signalOff();\r
98     int attachFrameBuffer(); // What does this do?\r
99     ULONG timecodeToFrameNumber(ULLONG timecode);\r
100     ULLONG getCurrentTimestamp();\r
101     bool displayIFrame(const UCHAR* buffer, UINT length);\r
102 \r
103     // Writing Data to Videodevice\r
104     virtual void PrepareMediaSample(const MediaPacketList&, UINT samplepos);\r
105     virtual UINT DeliverMediaSample(UCHAR* buffer, UINT* samplepos);\r
106     virtual long long SetStartOffset(long long curreftime, bool *rsync)\r
107     { return 0; };\r
108     virtual void ResetTimeOffsets();\r
109 \r
110         virtual bool supportsh264(){return true;};\r
111 \r
112         int WriteOutTS(const unsigned char *buffer,int length, int type);\r
113         void WriteOutPATPMT();\r
114 \r
115 \r
116 \r
117 \r
118 \r
119 \r
120         int getLastPacketNum() {return lastpacketnum;}; \r
121 #ifdef DEV\r
122     int test();\r
123     int test2();\r
124 #endif\r
125 \r
126     int initUsingOSDObjects();\r
127     int shutdownUsingOSDObjects() {return shutdown();};\r
128 \r
129   private:\r
130            int EnterIframePlayback();\r
131            bool iframemode;\r
132 \r
133            UINT DeliverMediaPacket(MediaPacket packet,\r
134                                              const UCHAR* buffer,\r
135                                              UINT *samplepos);\r
136 \r
137 #ifdef VPE_OMX_SUPPORT\r
138            static OMX_ERRORTYPE EventHandler_OMX(OMX_IN OMX_HANDLETYPE handle,OMX_IN OMX_PTR appdata,\r
139            OMX_IN OMX_EVENTTYPE event_type,OMX_IN OMX_U32 data1,\r
140            OMX_IN OMX_U32 data2,OMX_IN OMX_PTR event_data);\r
141            static OMX_ERRORTYPE EmptyBufferDone_OMX(OMX_IN OMX_HANDLETYPE hcomp,OMX_IN OMX_PTR appdata,OMX_IN OMX_BUFFERHEADERTYPE* buffer);\r
142            static OMX_ERRORTYPE FillBufferDone_OMX(OMX_IN OMX_HANDLETYPE hcomp, OMX_IN OMX_PTR appdata,OMX_IN OMX_BUFFERHEADERTYPE* buffer);\r
143 \r
144 \r
145            int PrepareInputBufsOMX();\r
146            int DestroyInputBufsOMX();\r
147 \r
148 \r
149 \r
150            OMX_HANDLETYPE omx_vid_dec;\r
151            OMX_HANDLETYPE omx_vid_sched;\r
152            OMX_HANDLETYPE omx_vid_rend;\r
153            OMX_HANDLETYPE omx_clock;\r
154 \r
155 \r
156            OMX_U32 omx_codec_input_port;\r
157            OMX_U32 omx_codec_output_port;\r
158            OMX_U32 omx_rend_input_port;\r
159            OMX_U32 omx_rend_output_port;\r
160            OMX_U32 omx_shed_input_port;\r
161            OMX_U32 omx_shed_output_port;\r
162            OMX_U32 omx_shed_clock_port;\r
163            OMX_U32 omx_clock_output_port;\r
164          //  OMX_NALUFORMATSTYPE omx_nalu_format;\r
165 \r
166 \r
167 \r
168            int AllocateCodecsOMX();\r
169            int DeAllocateCodecsOMX();\r
170 \r
171            vector<OMX_BUFFERHEADERTYPE*> input_bufs_omx_all;\r
172            list<OMX_BUFFERHEADERTYPE*> input_bufs_omx_free;\r
173            Mutex input_bufs_omx_mutex;\r
174            OMX_BUFFERHEADERTYPE* cur_input_buf_omx;\r
175 \r
176            bool omx_running;\r
177            bool omx_first_frame;\r
178 \r
179 \r
180 \r
181 #endif\r
182         \r
183 \r
184 \r
185    bool firstsynched;\r
186           int lastpacketnum;\r
187 \r
188         EGLDisplay egl_display;\r
189         EGLSurface egl_surface;\r
190         EGLContext egl_context;\r
191 \r
192 \r
193 \r
194     \r
195         MediaPacket mediapacket;\r
196 };\r
197 \r
198 #endif\r