From f9ee028ba582edf050be3b98544dc82776f678f1 Mon Sep 17 00:00:00 2001 From: "K.Ohta" Date: Mon, 3 Oct 2016 01:47:16 +0900 Subject: [PATCH] [OSD][Qt] Extend for SOUND_LOADER. --- source/src/qt/gui/csp_logger.cpp | 1 + source/src/qt/gui/csp_logger.h | 1 + source/src/qt/osd.cpp | 11 ++++-- source/src/qt/osd.h | 14 +++++++ source/src/qt/osd_base.h | 8 +++- source/src/qt/osd_sound.cpp | 20 +++++++++- source/src/qt/osd_wrapper.cpp | 80 +++++++++++++++++++++++++++++++++++++++- 7 files changed, 128 insertions(+), 7 deletions(-) diff --git a/source/src/qt/gui/csp_logger.cpp b/source/src/qt/gui/csp_logger.cpp index f77fdc19b..6323c4cb0 100644 --- a/source/src/qt/gui/csp_logger.cpp +++ b/source/src/qt/gui/csp_logger.cpp @@ -62,6 +62,7 @@ void CSP_Logger::reset(void) "PRINTER", "SOCKET", "EVENT", + "SOUND_LOADER", "Undefined", NULL }; diff --git a/source/src/qt/gui/csp_logger.h b/source/src/qt/gui/csp_logger.h index 37b93e825..9a5b942ee 100644 --- a/source/src/qt/gui/csp_logger.h +++ b/source/src/qt/gui/csp_logger.h @@ -53,6 +53,7 @@ enum { CSP_LOG_TYPE_PRINTER, CSP_LOG_TYPE_SOCKET, CSP_LOG_TYPE_EVENT, + CSP_LOG_TYPE_SOUND_LOADER, CSP_LOG_TYPE_COMPONENT_END, CSP_LOG_TYPE_VM_CPU0 = 32, CSP_LOG_TYPE_VM_CPU1, diff --git a/source/src/qt/osd.cpp b/source/src/qt/osd.cpp index 59f2d1f75..5abbfcc17 100644 --- a/source/src/qt/osd.cpp +++ b/source/src/qt/osd.cpp @@ -17,7 +17,6 @@ #include #include "qt_gldraw.h" -//#include "csp_logger.h" #include "osd.h" OSD::OSD(USING_FLAGS *p) : OSD_BASE(p) @@ -46,15 +45,17 @@ void OSD::initialize(int rate, int samples) memset(app_path, 0x00, sizeof(app_path)); strncpy(app_path, tmp_path.toUtf8().constData(), _MAX_PATH); - //memset(console_string, 0x00, sizeof(console_string)); console_cmd_str.clear(); osd_console_opened = false; osd_timer.start(); - //CoInitialize(NULL); + initialize_input(); initialize_printer(); initialize_screen(); initialize_sound(rate, samples); +#if defined(USE_SOUND_FILES) + init_sound_files(); +#endif if(get_use_movie_player() || get_use_video_capture()) initialize_video(); if(get_use_socket()) initialize_socket(); } @@ -67,7 +68,9 @@ void OSD::release() release_sound(); if(get_use_movie_player() || get_use_video_capture()) release_video(); if(get_use_socket()) release_socket(); - //CoUninitialize(); +#if defined(USE_SOUND_FILES) + release_sound_files(); +#endif } void OSD::power_off() diff --git a/source/src/qt/osd.h b/source/src/qt/osd.h index 8b70ccd30..c341dff84 100644 --- a/source/src/qt/osd.h +++ b/source/src/qt/osd.h @@ -28,6 +28,7 @@ class FIFO; class USING_FLAGS; class CSP_KeyTables; class MOVIE_LOADER; +class SOUND_LOADER; class QTcpSocket2; class QUdpSocket2; @@ -64,6 +65,14 @@ protected: QTcpSocket2 *tcp_socket[SOCKET_MAX]; QUdpSocket2 *udp_socket[SOCKET_MAX]; + +#ifdef USE_SOUND_FILES + SOUND_LOADER *tail_sound_file; + SOUND_LOADER *sound_file_obj[USE_SOUND_FILES]; + + void init_sound_files(); + void release_sound_files(); +#endif public: OSD(USING_FLAGS *p); ~OSD(); @@ -116,6 +125,11 @@ public: void recv_socket_data(int ch); int get_socket(int ch); + // Sound +#ifdef USE_SOUND_FILES + void load_sound_file(int id, const _TCHAR *name, int16_t **data, int *dst_size); + void free_sound_file(int id, int16_t **data); +#endif public slots: void do_decode_movie(int frames); void do_run_movie_audio_callback(uint8_t *data, long len); diff --git a/source/src/qt/osd_base.h b/source/src/qt/osd_base.h index 72a67b901..c7b3263d3 100644 --- a/source/src/qt/osd_base.h +++ b/source/src/qt/osd_base.h @@ -248,6 +248,9 @@ protected: virtual int get_screen_width(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(USING_FLAGS *p); ~OSD_BASE(); @@ -348,6 +351,9 @@ 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 virtual void get_video_buffer(); @@ -426,7 +432,7 @@ public: 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); diff --git a/source/src/qt/osd_sound.cpp b/source/src/qt/osd_sound.cpp index 8ca18c32b..a09e8bdbc 100644 --- a/source/src/qt/osd_sound.cpp +++ b/source/src/qt/osd_sound.cpp @@ -160,7 +160,7 @@ void OSD_BASE::initialize_sound(int rate, int samples) #else SDL_PauseAudio(0); #endif - + sound_ok = sound_first_half = true; } @@ -412,3 +412,21 @@ int OSD_BASE::get_sound_rate() { return snd_spec_presented.freq; } + +void OSD_BASE::load_sound_file(int id, const _TCHAR *name, int16_t **data, int *dst_size) +{ + if(data != NULL) *data = NULL; + if(dst_size != NULL) *dst_size = 0; +} + +void OSD_BASE::free_sound_file(int id, int16_t **data) +{ +} + +void OSD_BASE::init_sound_files() +{ +} + +void OSD_BASE::release_sound_files() +{ +} diff --git a/source/src/qt/osd_wrapper.cpp b/source/src/qt/osd_wrapper.cpp index 1df8b97ab..fe2192db5 100644 --- a/source/src/qt/osd_wrapper.cpp +++ b/source/src/qt/osd_wrapper.cpp @@ -25,7 +25,9 @@ #if defined(USE_MOVIE_PLAYER) || defined(USE_VIDEO_CAPTURE) #include "avio/movie_loader.h" #endif - +#if defined(USE_SOUND_FILES) +#include "avio/sound_loader.h" +#endif #include "qt_gldraw.h" #include "csp_logger.h" @@ -48,7 +50,83 @@ Sint16* OSD::create_sound(int *extra_frames) return (Sint16 *)vm->create_sound(extra_frames); } +#ifdef USE_SOUND_FILES +void OSD::load_sound_file(int id, const _TCHAR *name, int16_t **data, int *dst_size) +{ + int i = 0; + if(data != NULL) *data = NULL; + if(dst_size != NULL) *dst_size = 0; + if(id <= 0) return; + + for(i = 0; i < USE_SOUND_FILES; i++) { + SOUND_LOADER *p = sound_file_obj[i]; + if(p != NULL) { + if(p->get_id() == id) break; + } + } + + if(i >= USE_SOUND_FILES) { + for(i = 0; i < USE_SOUND_FILES; i++) { + SOUND_LOADER *p = sound_file_obj[i]; + if(p != NULL) { + if(p->get_id() < 0) { + p->set_id(id); + break; + } + } + } + } + if(i >= USE_SOUND_FILES) return; + SOUND_LOADER *p = sound_file_obj[i]; + if(p != NULL) { + p->free_sound_buffer(NULL); + p->set_sound_rate(this->get_sound_rate()); + if(p->open(id, QString::fromUtf8(name))) { + p->do_decode_frames(); + p->close(); + if(data != NULL) *data = (int16_t *)(p->get_sound_buffer()); + if(dst_size != NULL) *dst_size = p->get_dst_size(); + } + } +} + +void OSD::free_sound_file(int id, int16_t **data) +{ + void *pp; + if(data == NULL) return; + for(int i = 0; i < USE_SOUND_FILES; i++) { + SOUND_LOADER *p = sound_file_obj[i]; + if(p != NULL) { + if(p->get_id() == id) { + p->free_sound_buffer(*data); + *data = NULL; + break; + } + } + } +} +void OSD::init_sound_files() +{ + for(int i = 0; i < USE_SOUND_FILES; i++) { + sound_file_obj[i] = NULL; + SOUND_LOADER *p = new SOUND_LOADER((void *)tail_sound_file); + if(p != NULL) { + sound_file_obj[i] = p; + } + tail_sound_file = p; + } +} + +void OSD::release_sound_files() +{ + for(int i = 0; i < USE_SOUND_FILES; i++) { + SOUND_LOADER *p = sound_file_obj[i]; + if(p != NULL) delete p; + sound_file_obj[i] = NULL; + } +} +#endif bool OSD::get_use_socket(void) { #ifdef USE_SOCKET -- 2.11.0