X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=source%2Fsrc%2Fqt%2Fosd_base.h;h=40b449145ac022c6f96fcb8b2d9fce40f88f6c10;hb=90a1d498c79c26d69c78435600856b152aa07291;hp=55e8bf2300be30b20141c0026a216c8e50fd96a7;hpb=7edefc726642d4ae477307f06ce65456e3d66d62;p=csp-qt%2Fcommon_source_project-fm7.git diff --git a/source/src/qt/osd_base.h b/source/src/qt/osd_base.h index 55e8bf230..40b449145 100644 --- a/source/src/qt/osd_base.h +++ b/source/src/qt/osd_base.h @@ -11,32 +11,30 @@ #define _QT_OSD_BASE_H_ -#include +#include #include -#include -#include -#include -#include #include -#include - +#include #include -#include "simd_types.h" +//#include "simd_types.h" -#include +//#include +//#include +//#include //#include "../vm/vm.h" //#include "../emu.h" #include "../config.h" -#include "../fileio.h" -#include "../fifo.h" -#if !defined(Q_OS_WIN32) -#include "qt_input.h" -#endif +//#include "../fileio.h" +//#include "../fifo.h" +//#if !defined(Q_OS_WIN32) +//#include "qt_input.h" +//#endif #define SOCKET_MAX 4 #define SOCKET_BUFFER_MAX 0x100000 #include "osd_types.h" +#define N_MAX_BUTTONS 128 #define WM_RESIZE (WM_USER + 1) #define WM_SOCKET0 (WM_USER + 2) @@ -48,9 +46,7 @@ #define MAX_CAPTURE_DEVS 8 //#endif -#include "qt_main.h" -//#include "mainwidget.h" -#include "agar_logger.h" +//#include "qt_main.h" class GLDrawClass; class EmuThreadClass; @@ -59,22 +55,45 @@ class Ui_MainWindow; class EMU; class VM; class FIFO; +class FILEIO; class CSP_KeyTables; +class USING_FLAGS; +class CSP_logger; +class QMutex; QT_BEGIN_NAMESPACE -class OSD_BASE : public QThread + +typedef struct { + int id; + const _TCHAR *name; +} device_node_t; + +typedef struct { + QString string; + union { + int64_t ivalue; + double fvalue; + } v; +} supportedlist_t; + +class DLL_PREFIX OSD_BASE : public QThread { Q_OBJECT protected: EmuThreadClass *parent_thread; - QSemaphore *VMSemaphore; - QSemaphore *DebugSemaphore; sdl_snddata_t snddata; -//private: + USING_FLAGS *using_flags; + config_t *p_config; + CSP_Logger *p_logger; + + QList SupportedFeatures; + + bool __USE_AUTO_KEY; + bool __USE_SHIFT_NUMPAD_KEY; + _TCHAR app_path[_MAX_PATH]; QElapsedTimer osd_timer; bool locked_vm; - // console FILE *hStdIn, *hStdOut; QString console_cmd_str; @@ -103,14 +122,20 @@ protected: int joy_num; uint32_t joy_mask[4]; - int mouse_status[3]; // x, y, button (b0 = left, b1 = right) + int32_t mouse_status[3]; // x, y, button (b0 = left, b1 = right) bool mouse_enabled; int mouse_ptrx; int mouse_ptry; int mouse_button; int mouse_oldx; int mouse_oldy; - Qt::CursorShape mouse_shape; + int delta_x; + int delta_y; + //Qt::CursorShape mouse_shape; + + QImage background_image; + QImage button_images[N_MAX_BUTTONS]; + QImage rec_image_buffer; // printer @@ -135,21 +160,14 @@ protected: 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; - //LPBITMAPINFO lpDibRec; - //PAVIFILE pAVIFile; - //PAVISTREAM pAVIStream; - //PAVISTREAM pAVICompressed; - //AVICOMPRESSOPTIONS AVIOpts; uint64_t dwAVIFileSize; uint64_t lAVIFrames; - //HANDLE hVideoThread; + rec_video_thread_param_t rec_video_thread_param; bool first_draw_screen; @@ -175,7 +193,7 @@ protected: int sound_write_pos; bool sound_exit; bool sound_debug; - SDL_sem *snd_apply_sem; + bool sound_initialized; Sint16 *sound_buf_ptr; Uint8 snd_total_volume; #if defined(USE_SDL2) @@ -186,26 +204,13 @@ protected: SDL_AudioSpec snd_spec_req, snd_spec_presented; // video device - void initialize_video(); - void release_video(); - - //IGraphBuilder *pGraphBuilder; - //IBaseFilter *pVideoBaseFilter; - //IBaseFilter *pCaptureBaseFilter; - //ICaptureGraphBuilder2 *pCaptureGraphBuilder2; - //ISampleGrabber *pVideoSampleGrabber; - //IBaseFilter *pSoundBaseFilter; - //ISampleGrabber *pSoundSampleGrabber; - //CMySampleGrabberCB *pSoundCallBack; - //IMediaControl *pMediaControl; - //IMediaSeeking *pMediaSeeking; - //IMediaPosition *pMediaPosition; - //IVideoWindow *pVideoWindow; - //IBasicVideo *pBasicVideo; - //IBasicAudio *pBasicAudio; - //bool bTimeFormatFrame; - //bool bVerticalReversed; - + virtual void initialize_video(); + virtual void release_video(); + + scrntype_t *mapped_screen_pointer; + int mapped_screen_width; + int mapped_screen_height; + bool mapped_screen_status; bitmap_t dshow_screen_buffer; int direct_show_width, direct_show_height; bool direct_show_mute[2]; @@ -225,19 +230,17 @@ protected: 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_list; virtual void vm_draw_screen(void); - virtual double vm_frame_rate(void); virtual Sint16* create_sound(int *extra_frames); virtual bool get_use_socket(void); virtual bool get_support_variable_timing(void); @@ -260,8 +263,10 @@ protected: 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 @@ -269,6 +274,9 @@ public: //EMU* emu; class Ui_MainWindow *main_window_handle; GLDrawClass *glv; + QMutex *screen_mutex; + QMutex *vm_mutex; + int host_cpus; bool now_auto_key; @@ -282,7 +290,7 @@ public: void get_host_time(cur_time_t* time); void sleep(uint32_t ms); void create_date_file_name(_TCHAR *name, int length, const _TCHAR *extension); - + _TCHAR *get_app_path(void); // common console void open_console(_TCHAR* title); void close_console(); @@ -290,13 +298,13 @@ public: bool is_console_active(); void set_console_text_attribute(unsigned short attr); void write_console(_TCHAR* buffer, unsigned int length); - int read_console_input(_TCHAR* buffer); + int read_console_input(_TCHAR* buffer, int length); bool is_console_key_pressed(uint32_t ch); // common input void update_input(); - void key_down(int code, bool repeat); - void key_up(int code); + void key_down(int code, bool extended, bool repeat); + void key_up(int code, bool extended); void key_down_native(int code, bool repeat); void key_up_native(int code); void key_lost_focus(); @@ -317,7 +325,7 @@ public: void modify_key_buffer(int code, uint8_t val); uint8_t* get_key_buffer(); uint32_t* get_joy_buffer(); - int* get_mouse_buffer(); + int32_t* get_mouse_buffer(); // common printer void reset_printer(); void update_printer(); @@ -334,12 +342,14 @@ public: int get_window_mode_height(int mode); void set_host_window_size(int window_width, int window_height, bool window_mode); void set_vm_screen_size(int width, int height, int width_aspect, int height_aspect, int window_width, int window_height); + void set_vm_screen_lines(int lines); // 20170118 int get_vm_window_width(); int get_vm_window_height(); int get_vm_window_width_aspect(); int get_vm_window_height_aspect(); scrntype_t* get_vm_screen_buffer(int y); - int draw_screen(); + //int draw_screen(); + //int no_draw_screen(); void reload_bitmap(); void capture_screen(); bool start_record_video(int fps); @@ -357,17 +367,20 @@ public: 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; @@ -401,19 +414,19 @@ public: 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(); @@ -429,6 +442,42 @@ public: virtual bool is_vm_locked(void); virtual void set_draw_thread(DrawThreadClass *handler); virtual QString get_vm_config_name(void); + virtual double vm_frame_rate(void); + virtual void reset_vm_node(void); + virtual const _TCHAR *get_lib_common_vm_version() { return (const _TCHAR *)"\0"; } + virtual const _TCHAR *get_lib_common_vm_git_version() { return (const _TCHAR *)"\0"; } + virtual const _TCHAR *get_lib_osd_version() { return (const _TCHAR *)"\0"; } + + virtual void set_device_name(int id, char *name); + + 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); + + // Get #define S to value.You may use inside of VM/ . + virtual void set_features(void) {} + void add_feature(const _TCHAR *key, double value); + void add_feature(const _TCHAR *key, float value); + void add_feature(const _TCHAR *key, int value = 1); + void add_feature(const _TCHAR *key, int64_t value); + void add_feature(const _TCHAR *key, uint32_t value); + void add_feature(const _TCHAR *key, uint16_t value); + void add_feature(const _TCHAR *key, uint8_t value); + bool check_feature(const _TCHAR *key); + double get_feature_double_value(const _TCHAR *key); + int64_t get_feature_int_value(const _TCHAR *key); + uint32_t get_feature_uint32_value(const _TCHAR *key); + uint16_t get_feature_uint16_value(const _TCHAR *key); + uint8_t get_feature_uint8_value(const _TCHAR *key); + + void debug_log(int level, const char *fmt, ...); + void debug_log(int level, int domain_num, const char *fmt, ...); + virtual void debug_log(int level, int domain_num, char *strbuf); + + USING_FLAGS *get_config_flags(void) { return using_flags; } + + // Special + CSP_Logger *get_logger(void) { return p_logger; } public slots: void do_write_inputdata(QString s); @@ -436,17 +485,48 @@ public slots: void close_debugger_console(); void do_close_debugger_thread(); 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); + int draw_screen(); + int no_draw_screen(); + void do_draw(bool flag); + void do_set_screen_map_texture_address(scrntype_t *p, int width, int height); + signals: int sig_update_screen(bitmap_t *); int sig_save_screen(const char *); + int sig_draw_frames(int); int sig_close_window(void); int sig_resize_vm_screen(QImage *, int, int); + int sig_resize_vm_lines(int); int sig_put_string_debugger(QString); int sig_console_input_string(QString); - int sig_enqueue_video(QByteArray *data, int width, int height); - int sig_enqueue_audio(QByteArray *data); + 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_debugger_finished(); + 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); + int sig_close_console(void); + + int sig_move_mouse_to_center(void); + }; QT_END_NAMESPACE