chunker-player / chunker_player / chunker_player.h @ 78068e21
History | View | Annotate | Download (4.85 KB)
1 | 1e69ae95 | GiuseppeTropea | #ifndef _CHUNKER_PLAYER_H
|
---|---|---|---|
2 | #define _CHUNKER_PLAYER_H
|
||
3 | |||
4 | 9240dba2 | GiuseppeTropea | |
5 | #include <stdio.h> |
||
6 | #include <unistd.h> |
||
7 | #include <sys/types.h> |
||
8 | #include <sys/socket.h> |
||
9 | #include <sys/select.h> |
||
10 | #include <arpa/inet.h> |
||
11 | #include <microhttpd.h> |
||
12 | |||
13 | 1e69ae95 | GiuseppeTropea | #include "external_chunk_transcoding.h" |
14 | #include "frame.h" |
||
15 | |||
16 | #define PLAYER_FAIL_RETURN -1 |
||
17 | #define PLAYER_OK_RETURN 0 |
||
18 | |||
19 | d30287b5 | GiuseppeTropea | #define FULLSCREEN_WIDTH 640 |
20 | #define FULLSCREEN_HEIGHT 480 |
||
21 | |||
22 | 1e69ae95 | GiuseppeTropea | AVCodecContext *aCodecCtx; |
23 | |||
24 | d30287b5 | GiuseppeTropea | int window_width, window_height;
|
25 | |||
26 | 78068e21 | GiuseppeTropea | #define SDL_AUDIO_BUFFER_SIZE 1024 |
27 | |||
28 | #define MAX_TOLLERANCE 40 |
||
29 | #define AUDIO 1 |
||
30 | #define VIDEO 2 |
||
31 | #define QUEUE_MAX_SIZE 3000 |
||
32 | |||
33 | #define FULLSCREEN_ICON_FILE "icons/fullscreen32.png" |
||
34 | #define NOFULLSCREEN_ICON_FILE "icons/nofullscreen32.png" |
||
35 | #define FULLSCREEN_HOVER_ICON_FILE "icons/fullscreen32.png" |
||
36 | #define NOFULLSCREEN_HOVER_ICON_FILE "icons/nofullscreen32.png" |
||
37 | |||
38 | #define CHANNEL_UP_ICON_FILE "icons/up_16.png" |
||
39 | #define CHANNEL_DOWN_ICON_FILE "icons/down_16.png" |
||
40 | |||
41 | #define DEFAULT_CHANNEL_EXEC_PATH "../OfferStreamer/" |
||
42 | #define DEFAULT_CHANNEL_EXEC_NAME "offerstreamer-ml-monl-http" |
||
43 | #define DEFAULT_CONF_FILENAME "channels.conf" |
||
44 | |||
45 | #define BUTTONS_LAYER_OFFSET 10 |
||
46 | #define BUTTONS_CONTAINER_HEIGHT 40 |
||
47 | #define BUTTONS_CONTAINER_WIDTH 100 |
||
48 | |||
49 | typedef enum Status { STOPPED, RUNNING, PAUSED } Status; |
||
50 | |||
51 | //#define DEBUG_AUDIO
|
||
52 | //#define DEBUG_VIDEO
|
||
53 | #define DEBUG_QUEUE
|
||
54 | #define DEBUG_SOURCE
|
||
55 | //#define DEBUG_STATS
|
||
56 | //#define DEBUG_AUDIO_BUFFER
|
||
57 | //#define DEBUG_CHUNKER
|
||
58 | |||
59 | |||
60 | short int QueueFillingMode=1; |
||
61 | short int QueueStopped=0; |
||
62 | |||
63 | typedef struct PacketQueue { |
||
64 | AVPacketList *first_pkt; |
||
65 | AVPacketList *last_pkt; |
||
66 | int nb_packets;
|
||
67 | int size;
|
||
68 | SDL_mutex *mutex; |
||
69 | short int queueType; |
||
70 | int last_frame_extracted; //HINT THIS SHOULD BE MORE THAN 4 BYTES |
||
71 | int total_lost_frames;
|
||
72 | double density;
|
||
73 | } PacketQueue; |
||
74 | |||
75 | typedef struct threadVal { |
||
76 | int width;
|
||
77 | int height;
|
||
78 | float aspect_ratio;
|
||
79 | } ThreadVal; |
||
80 | |||
81 | int AudioQueueOffset=0; |
||
82 | PacketQueue audioq; |
||
83 | PacketQueue videoq; |
||
84 | AVPacket AudioPkt, VideoPkt; |
||
85 | int quit = 0; |
||
86 | int SaveYUV=0; |
||
87 | char YUVFileName[256]; |
||
88 | |||
89 | int queue_filling_threshold = 0; |
||
90 | |||
91 | SDL_Surface *screen; |
||
92 | SDL_Overlay *yuv_overlay; |
||
93 | SDL_Rect rect; |
||
94 | SDL_Rect *initRect = NULL;
|
||
95 | SDL_AudioSpec spec; |
||
96 | Status CurrStatus = STOPPED; |
||
97 | |||
98 | struct SwsContext *img_convert_ctx = NULL; |
||
99 | float ratio;
|
||
100 | |||
101 | //SDL_mutex *timing_mutex;
|
||
102 | |||
103 | int got_sigint = 0; |
||
104 | |||
105 | long long DeltaTime; |
||
106 | short int FirstTimeAudio=1, FirstTime = 1; |
||
107 | |||
108 | int dimAudioQ;
|
||
109 | float deltaAudioQ;
|
||
110 | float deltaAudioQError=0; |
||
111 | |||
112 | void SaveFrame(AVFrame *pFrame, int width, int height); |
||
113 | |||
114 | // other GUI staff
|
||
115 | SDL_Cursor *init_system_cursor(const char *image[]); |
||
116 | void refresh_fullscreen_button(int hover); |
||
117 | void toggle_fullscreen();
|
||
118 | void aspect_ratio_resize(float aspect_ratio, int width, int height, int* out_width, int* out_height); |
||
119 | int fullscreen = 0; // fullscreen vs windowized flag |
||
120 | |||
121 | SDL_Cursor *defaultCursor; |
||
122 | SDL_Cursor *handCursor; |
||
123 | int silentMode = 0; |
||
124 | |||
125 | typedef struct SButton |
||
126 | { |
||
127 | int Hover;
|
||
128 | int Visible;
|
||
129 | int XOffset;
|
||
130 | SDL_Rect ButtonIconBox; |
||
131 | SDL_Surface* ButtonIcon; |
||
132 | SDL_Surface* ButtonHoverIcon; |
||
133 | struct SButton* ToggledButton;
|
||
134 | void (*HoverCallback)();
|
||
135 | void (*LButtonUpCallback)();
|
||
136 | } SButton; |
||
137 | |||
138 | #define FULLSCREEN_BUTTON_INDEX 0 |
||
139 | #define NO_FULLSCREEN_BUTTON_INDEX 1 |
||
140 | #define CHANNEL_UP_BUTTON_INDEX 2 |
||
141 | #define CHANNEL_DOWN_BUTTON_INDEX 3 |
||
142 | |||
143 | #define NBUTTONS 4 |
||
144 | |||
145 | SButton Buttons[NBUTTONS]; |
||
146 | |||
147 | /* XPM */
|
||
148 | static char *handXPM[] = { |
||
149 | /* columns rows colors chars-per-pixel */
|
||
150 | "32 32 3 1",
|
||
151 | " c black",
|
||
152 | ". c gray100",
|
||
153 | "X c None",
|
||
154 | /* pixels */
|
||
155 | "XXXXX XXXXXXXXXXXXXXXXXXXXXXXXX",
|
||
156 | "XXXX .. XXXXXXXXXXXXXXXXXXXXXXXX",
|
||
157 | "XXXX .. XXXXXXXXXXXXXXXXXXXXXXXX",
|
||
158 | "XXXX .. XXXXXXXXXXXXXXXXXXXXXXXX",
|
||
159 | "XXXX .. XXXXXXXXXXXXXXXXXXXXXXXX",
|
||
160 | "XXXX .. XXXXXXXXXXXXXXXXXXXXXX",
|
||
161 | "XXXX .. .. XXXXXXXXXXXXXXXXXXX",
|
||
162 | "XXXX .. .. .. XXXXXXXXXXXXXXXXX",
|
||
163 | "XXXX .. .. .. . XXXXXXXXXXXXXXXX",
|
||
164 | " X .. .. .. .. XXXXXXXXXXXXXXX",
|
||
165 | " .. ........ .. XXXXXXXXXXXXXXX",
|
||
166 | " ... ........... XXXXXXXXXXXXXXX",
|
||
167 | "X .. ........... XXXXXXXXXXXXXXX",
|
||
168 | "XX . ........... XXXXXXXXXXXXXXX",
|
||
169 | "XX ............. XXXXXXXXXXXXXXX",
|
||
170 | "XXX ............ XXXXXXXXXXXXXXX",
|
||
171 | "XXX ........... XXXXXXXXXXXXXXXX",
|
||
172 | "XXXX .......... XXXXXXXXXXXXXXXX",
|
||
173 | "XXXX .......... XXXXXXXXXXXXXXXX",
|
||
174 | "XXXXX ........ XXXXXXXXXXXXXXXXX",
|
||
175 | "XXXXX ........ XXXXXXXXXXXXXXXXX",
|
||
176 | "XXXXX XXXXXXXXXXXXXXXXX",
|
||
177 | "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
|
||
178 | "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
|
||
179 | "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
|
||
180 | "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
|
||
181 | "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
|
||
182 | "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
|
||
183 | "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
|
||
184 | "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
|
||
185 | "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
|
||
186 | "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
|
||
187 | "0,0"
|
||
188 | }; |
||
189 | |||
190 | typedef struct SChannel |
||
191 | { |
||
192 | char LaunchString[255]; |
||
193 | char Title[255]; |
||
194 | } SChannel; |
||
195 | |||
196 | SChannel Channels[255];
|
||
197 | int NChannels = 0; |
||
198 | int SelectedChannel = -1; |
||
199 | char OfferStreamerPath[255]; |
||
200 | char OfferStreamerFilename[255]; |
||
201 | |||
202 | int parse_conf();
|
||
203 | int switch_channel(SChannel* channel);
|
||
204 | int child_pid = -1; |
||
205 | |||
206 | void refresh_channel_buttons(int hover); |
||
207 | |||
208 | void zap_up();
|
||
209 | void zap_down();
|
||
210 | void redraw_buttons();
|
||
211 | |||
212 | SDL_mutex *RedrawMutex; |
||
213 | 9240dba2 | GiuseppeTropea | |
214 | 1e69ae95 | GiuseppeTropea | #endif |