OSDN Git Service

[OSD][Qt] Extend for SOUND_LOADER.
authorK.Ohta <whatisthis.sowhat@gmail.com>
Sun, 2 Oct 2016 16:47:16 +0000 (01:47 +0900)
committerK.Ohta <whatisthis.sowhat@gmail.com>
Sun, 2 Oct 2016 16:47:16 +0000 (01:47 +0900)
source/src/qt/gui/csp_logger.cpp
source/src/qt/gui/csp_logger.h
source/src/qt/osd.cpp
source/src/qt/osd.h
source/src/qt/osd_base.h
source/src/qt/osd_sound.cpp
source/src/qt/osd_wrapper.cpp

index f77fdc1..6323c4c 100644 (file)
@@ -62,6 +62,7 @@ void CSP_Logger::reset(void)
                "PRINTER",
                "SOCKET",
                "EVENT",
+               "SOUND_LOADER",
                "Undefined",
                NULL
        };
index 37b93e8..9a5b942 100644 (file)
@@ -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,
index 59f2d1f..5abbfcc 100644 (file)
@@ -17,7 +17,6 @@
 #include <QThread>
 
 #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()
index 8b70ccd..c341dff 100644 (file)
@@ -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);
index 72a67b9..c7b3263 100644 (file)
@@ -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);
index 8ca18c3..a09e8bd 100644 (file)
@@ -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()
+{
+}
index 1df8b97..fe2192d 100644 (file)
@@ -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