#include <QString>
#include <QQueue>
#include <QImage>
+#include <QList>
#include <SDL.h>
#include "simd_types.h"
#include "qt_main.h"
//#include "mainwidget.h"
-#include "agar_logger.h"
+#include "config.h"
class GLDrawClass;
class EmuThreadClass;
class FIFO;
class CSP_KeyTables;
class USING_FLAGS;
-
+class CSP_LOGGER;
QT_BEGIN_NAMESPACE
+
+typedef struct {
+ int id;
+ const _TCHAR *name;
+} device_node_t;
+
class DLL_PREFIX OSD_BASE : public QThread
{
Q_OBJECT
QSemaphore *VMSemaphore;
QSemaphore *DebugSemaphore;
sdl_snddata_t snddata;
-
+ USING_FLAGS *using_flags;
+ config_t *p_config;
+ CSP_Logger *csp_logger;
+
_TCHAR app_path[_MAX_PATH];
QElapsedTimer osd_timer;
bool locked_vm;
int mouse_button;
int mouse_oldx;
int mouse_oldy;
- Qt::CursorShape mouse_shape;
+ //Qt::CursorShape mouse_shape;
QImage background_image;
QImage button_images[N_MAX_BUTTONS];
int base_window_width, base_window_height;
int vm_screen_width, vm_screen_height;
int draw_screen_width, draw_screen_height;
-
+ int rec_video_nsec, rec_video_fps_nsec;
_TCHAR video_file_name[_MAX_PATH];
int rec_video_fps;
- double rec_video_run_frames;
- double rec_video_frames;
uint64_t dwAVIFileSize;
uint64_t lAVIFrames;
SDL_AudioSpec snd_spec_req, snd_spec_presented;
// video device
- void initialize_video();
- void release_video();
-
+ virtual void initialize_video();
+ virtual void release_video();
+
bitmap_t dshow_screen_buffer;
int direct_show_width, direct_show_height;
bool direct_show_mute[2];
bool prn_strobe;
// socket
- void initialize_socket();
- void release_socket();
+ virtual void initialize_socket();
+ virtual void release_socket();
- int soc[SOCKET_MAX];
bool is_tcp[SOCKET_MAX];
- //struct sockaddr_in udpaddr[SOCKET_MAX];
+ bool host_mode[SOCKET_MAX];
int socket_delay[SOCKET_MAX];
- char recv_buffer[SOCKET_MAX][SOCKET_BUFFER_MAX];
- int recv_r_ptr[SOCKET_MAX], recv_w_ptr[SOCKET_MAX];
// wrapper
+ int max_vm_nodes;
+ QList<device_node_t> device_node_list;
virtual void vm_draw_screen(void);
virtual Sint16* create_sound(int *extra_frames);
virtual bool get_use_socket(void);
virtual int get_screen_height(void);
virtual int get_vm_buttons_code(int num);
+ virtual void init_sound_files();
+ virtual void release_sound_files();
public:
- OSD_BASE();
+ OSD_BASE(USING_FLAGS *p, CSP_Logger *logger);
~OSD_BASE();
// common
//EMU* emu;
class Ui_MainWindow *main_window_handle;
GLDrawClass *glv;
+ QMutex *screen_mutex;
+
int host_cpus;
bool now_auto_key;
int get_vm_window_height_aspect();
scrntype_t* get_vm_screen_buffer(int y);
int draw_screen();
+ int no_draw_screen();
void reload_bitmap();
void capture_screen();
bool start_record_video(int fps);
void restart_record_sound();
bool now_record_sound;
int get_sound_rate();
+ // Wrapper : Sound
+ virtual void load_sound_file(int id, const _TCHAR *name, int16_t **data, int *dst_size);
+ virtual void free_sound_file(int id, int16_t **data);
// common video device
- void get_video_buffer();
+ virtual void get_video_buffer();
void mute_video_dev(bool l, bool r);
- bool open_movie_file(const _TCHAR* file_path);
- void close_movie_file();
+ virtual bool open_movie_file(const _TCHAR* file_path);
+ virtual void close_movie_file();
void play_movie();
void stop_movie();
void pause_movie();
double get_movie_frame_rate();
- int get_movie_sound_rate();
+ virtual int get_movie_sound_rate();
void set_cur_movie_frame(int frame, bool relative);
uint32_t get_cur_movie_frame();
bool now_movie_play, now_movie_pause;
void write_bitmap_to_file(bitmap_t *bitmap, const _TCHAR *file_path);
// common socket
- int get_socket(int ch);
- void notify_socket_connected(int ch);
- void notify_socket_disconnected(int ch);
- void update_socket();
- bool initialize_socket_tcp(int ch);
- bool initialize_socket_udp(int ch);
- bool connect_socket(int ch, uint32_t ipaddr, int port);
- void disconnect_socket(int ch);
- bool listen_socket(int ch);
- void send_socket_data_tcp(int ch);
- void send_socket_data_udp(int ch, uint32_t ipaddr, int port);
- void send_socket_data(int ch);
- void recv_socket_data(int ch);
+ virtual int get_socket(int ch);
+ virtual void notify_socket_connected(int ch);
+ virtual void notify_socket_disconnected(int ch);
+ virtual void update_socket();
+ virtual bool initialize_socket_tcp(int ch);
+ virtual bool initialize_socket_udp(int ch);
+ virtual bool connect_socket(int ch, uint32_t ipaddr, int port);
+ virtual void disconnect_socket(int ch);
+ virtual bool listen_socket(int ch);
+ virtual void send_socket_data_tcp(int ch);
+ virtual void send_socket_data_udp(int ch, uint32_t ipaddr, int port);
+ virtual void send_socket_data(int ch);
+ virtual void recv_socket_data(int ch);
// win32 dependent
void update_screen();
virtual QString get_vm_config_name(void);
virtual double vm_frame_rate(void);
+ virtual void reset_vm_node(void);
+ virtual void set_vm_node(int id, const _TCHAR *name);
+ virtual const _TCHAR *get_vm_node_name(int id);
+ virtual int get_vm_node_size(void);
+
public slots:
void do_write_inputdata(QString s);
void do_set_input_string(QString s);
void do_assign_js_setting(int jsnum, int axis_idx, int assigned_value);
void upload_bitmap(QImage *p);
void set_buttons();
+ void do_start_record_video();
+ virtual void do_decode_movie(int frames);
+ void do_video_movie_end(bool flag);
+ void do_video_decoding_error(int num);
+ virtual void do_run_movie_audio_callback(uint8_t *data, long len);
signals:
int sig_update_screen(bitmap_t *);
int sig_save_screen(const char *);
int sig_resize_vm_screen(QImage *, int, int);
int sig_put_string_debugger(QString);
int sig_console_input_string(QString);
- int sig_enqueue_video(QImage *);
+ int sig_enqueue_video(int, int, int, QImage *);
int sig_enqueue_audio(int16_t *data, int size);
int sig_movie_set_width(int);
int sig_movie_set_height(int);
int sig_req_encueue_video(int, int, int);
int sig_save_as_movie(QString, int, int);
int sig_stop_saving_movie();
+
+ int sig_movie_play();
+ int sig_movie_stop();
+ int sig_movie_pause(bool);
+ int sig_movie_seek_frame(bool, int);
+
+ int sig_update_device_node_name(int id, const _TCHAR *name);
+ int sig_enable_mouse(void);
+ int sig_disable_mouse(void);
};
QT_END_NAMESPACE